Skip to content

Commit

Permalink
[CBRD-25361] Fixed the issue where trace information for CTEs and sub…
Browse files Browse the repository at this point in the history
…queries not provided. (#5200)

http://jira.cubrid.org/browse/CBRD-25361

There are currently issues with trace statistics. When tracing queries that use UNION, DIFFERENCE, INTERSECTION, and CTE together, the statistical information for the CTE is not output. Additionally, when using UNION-like SQL statements, the trace for the total cost is also not output. In this issue, we have made changes to enable the output of trace for the total cost of UNION-like SQL statements and to ensure that the statistical information for all subqueries bundled under the UNION statement is output.
Conflicts:
	src/query/query_dump.c

[CBRD-25361] When backporting, remove the fetch_time output part that only exists in fig-cake.

http://jira.cubrid.org/browse/CBRD-25361
  • Loading branch information
xmilex-git authored and mhoh3963 committed Aug 6, 2024
1 parent 1adbf7e commit 625c9a5
Showing 1 changed file with 49 additions and 32 deletions.
81 changes: 49 additions & 32 deletions src/query/query_dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -2891,8 +2891,14 @@ qdump_print_stats_json (xasl_node * xasl_p, json_t * parent)
GROUPBY_STATS *gstats;
json_t *proc, *scan = NULL;
json_t *subquery, *groupby, *orderby;
json_t *left, *right, *outer, *inner;
json_t *outer, *inner;
json_t *cte_non_recursive_part, *cte_recursive_part;
<<<<<<< HEAD
=======
json_t *temp;
xasl_node *xptr;
json_t *sq_cache;
>>>>>>> b214f10... [CBRD-25361] Fixed the issue where trace information for CTEs and subqueries not provided. (#5200)

if (xasl_p == NULL || parent == NULL)
{
Expand Down Expand Up @@ -2920,20 +2926,25 @@ qdump_print_stats_json (xasl_node * xasl_p, json_t * parent)
case BUILD_SCHEMA_PROC:
json_object_set_new (proc, "time", json_integer (TO_MSEC (xasl_p->xasl_stats.elapsed_time)));
json_object_set_new (proc, "fetch", json_integer (xasl_p->xasl_stats.fetches));
json_object_set_new (proc, "fetch_time", json_integer (xasl_p->xasl_stats.fetch_time));
json_object_set_new (proc, "ioread", json_integer (xasl_p->xasl_stats.ioreads));
break;

case UNION_PROC:
case DIFFERENCE_PROC:
case INTERSECTION_PROC:
left = json_object ();
right = json_object ();

qdump_print_stats_json (xasl_p->proc.union_.left, left);
qdump_print_stats_json (xasl_p->proc.union_.right, right);

json_object_set_new (proc, "left", left);
json_object_set_new (proc, "right", right);
json_object_set_new (proc, "time", json_integer (TO_MSEC (xasl_p->xasl_stats.elapsed_time)));
json_object_set_new (proc, "fetch", json_integer (xasl_p->xasl_stats.fetches));
json_object_set_new (proc, "fetch_time", json_integer (xasl_p->xasl_stats.fetch_time));
json_object_set_new (proc, "ioread", json_integer (xasl_p->xasl_stats.ioreads));
subquery = json_array ();
for (xptr = xasl_p->aptr_list; xptr; xptr = xptr->next)
{
temp = json_object ();
qdump_print_stats_json (xptr, temp);
json_array_append_new (subquery, temp);
}
json_object_set_new (proc, "SUBQUERY (uncorrelated)", subquery);
break;

case MERGELIST_PROC:
Expand Down Expand Up @@ -3060,22 +3071,25 @@ qdump_print_stats_json (xasl_node * xasl_p, json_t * parent)

if (HAVE_SUBQUERY_PROC (xasl_p) && xasl_p->aptr_list != NULL)
{
if (HAVE_SUBQUERY_PROC (xasl_p->aptr_list))
{
subquery = json_object ();
qdump_print_stats_json (xasl_p->aptr_list, subquery);
json_object_set_new (proc, "SUBQUERY (uncorrelated)", subquery);
}
else
subquery = json_array ();
for (xptr = xasl_p->aptr_list; xptr; xptr = xptr->next)
{
qdump_print_stats_json (xasl_p->aptr_list, proc);
temp = json_object ();
qdump_print_stats_json (xptr, temp);
json_array_append_new (subquery, temp);
}
json_object_set_new (proc, "SUBQUERY (uncorrelated)", subquery);
}

if (xasl_p->dptr_list != NULL)
{
subquery = json_object ();
qdump_print_stats_json (xasl_p->dptr_list, subquery);
subquery = json_array ();
for (xptr = xasl_p->dptr_list; xptr; xptr = xptr->next)
{
temp = json_object ();
qdump_print_stats_json (xptr, temp);
json_array_append_new (subquery, temp);
}
json_object_set_new (proc, "SUBQUERY (correlated)", subquery);
}
}
Expand Down Expand Up @@ -3183,6 +3197,7 @@ qdump_print_stats_text (FILE * fp, xasl_node * xasl_p, int indent)
{
ORDERBY_STATS *ostats;
GROUPBY_STATS *gstats;
xasl_node *xptr;

if (xasl_p == NULL)
{
Expand Down Expand Up @@ -3215,19 +3230,15 @@ qdump_print_stats_text (FILE * fp, xasl_node * xasl_p, int indent)
break;

case UNION_PROC:
fprintf (fp, "UNION\n");
qdump_print_stats_text (fp, xasl_p->proc.union_.left, indent);
qdump_print_stats_text (fp, xasl_p->proc.union_.right, indent);
break;
case DIFFERENCE_PROC:
fprintf (fp, "DIFFERENCE\n");
qdump_print_stats_text (fp, xasl_p->proc.union_.left, indent);
qdump_print_stats_text (fp, xasl_p->proc.union_.right, indent);
break;
case INTERSECTION_PROC:
fprintf (fp, "INTERSECTION\n");
qdump_print_stats_text (fp, xasl_p->proc.union_.left, indent);
qdump_print_stats_text (fp, xasl_p->proc.union_.right, indent);
fprintf (fp, "%s (time: %d, fetch: %lld, fetch_time: %lld, ioread: %lld)\n", qdump_xasl_type_string (xasl_p),
TO_MSEC (xasl_p->xasl_stats.elapsed_time), (long long int) xasl_p->xasl_stats.fetches,
(long long int) xasl_p->xasl_stats.fetch_time, (long long int) xasl_p->xasl_stats.ioreads);
for (xptr = xasl_p->aptr_list; xptr; xptr = xptr->next)
{
qdump_print_stats_text (fp, xptr, indent);
}
break;

case MERGELIST_PROC:
Expand Down Expand Up @@ -3327,13 +3338,19 @@ qdump_print_stats_text (FILE * fp, xasl_node * xasl_p, int indent)
fprintf (fp, "%*cSUBQUERY (uncorrelated)\n", indent, ' ');
}

qdump_print_stats_text (fp, xasl_p->aptr_list, indent);
for (xptr = xasl_p->aptr_list; xptr; xptr = xptr->next)
{
qdump_print_stats_text (fp, xptr, indent);
}
}

if (xasl_p->dptr_list != NULL)
{
fprintf (fp, "%*cSUBQUERY (correlated)\n", indent, ' ');
qdump_print_stats_text (fp, xasl_p->dptr_list, indent);
for (xptr = xasl_p->dptr_list; xptr; xptr = xptr->next)
{
qdump_print_stats_text (fp, xptr, indent);
}
}
}
#endif /* SERVER_MODE */

0 comments on commit 625c9a5

Please sign in to comment.