WL#2473: Item tree dumper
Affects: Server-7.1
—
Status: Un-Assigned
For potential developers in the community, as well as new developers who join
the MySQL AB, it would be nice to have the following:
A dump_Item_tree() function which recurses through the Item structure, and
prints all info specific to each item.
I realize this would take additional code in each Item member, so this should
only be enabled when MySQL is built with a special debug flag enabled. The
output could simply go into a file: the original query string, then the
output,
and a delimiter line === to separate it from a possible next one.
The dump code and the output together would give potential server developers
insight into how the Item structure works. As each Item would only print the
info relevant for its type, the person will be able to see things more
clearly.
As we wish to encourage more involvement in server coding, and also want to
give
our own new developers a quick start, this seems like a good way. It still
requires some homework, but a decent programmer will be able to work it out.
The output format does not need to be particularly pretty... so let's not let
this stall because of the bikeshed colour... simple all pertinent info
belonging with each Item. "label: content".
+-+--+-item Label1: bla
| | Label2: bla
| |
| +-item ...
|
+-item ...
Can be used to lay out the structure.
Possible code to get someone started (contrib by atcurtis):
void node_dump(Item *elem, String *prefix)
{
printf("%s Blah blah blah...\n",prefix);
}
void dump_item(Item *elem, char *pfx1=0, char *pfx2=0)
{
String pfx2;
char *s;
if (pfx1)
my_pfx2.append(pfx2);
else
pfx1= "";
if (elem->type() != FUNC_ITEM || !((Item_func *) elem)->argument_count())
{
s= "--";
my_pfx2.append(" ");
}
else
{
s= "+-";
my_pfx2.append("| ");
}
printf("%s%s Item: 0x%08x\n", pfx1, s, elem);
node_dump(elem, pfx2.c_ptr());
if (elem->type() != FUNC_ITEM || !((Item_func *) elem)->argument_count())
{
String pfx1;
my_pfx1.append(pfx1);
my_pfx1.append("+-");
uint arg_count= ((Item_func *) elem)->argument_count();
Item** args= ((Item_func *) elem)->arguments();
for (int i=0; i
Copyright (c) 2000, 2025, Oracle Corporation and/or its affiliates. All rights reserved.