← Back to team overview

maria-developers team mailing list archive

GSoC 2016: Can anybody help me with a minor technical problem?

 

Hi everyone,

I've just posted it in my blog here
<http://gsocmariadbshagalla.blogspot.ru/> :

Finially I finished my project on recursive CTE, so I can resume working on
my project of GSOC 2016.

As I said in my previous post, I decided to start with building items
clones (items are used to build different kinds of expressions in MySQL).

Items are typical tree structures. If I just copy a node in the item
structure, pointers to the subtrees won't be right. Fortunately this
pointers can be fixed in the method Item_func_or_sum::build_clone. To copy
nodes we use copy constructor. As we don't know the type of the node in
general the copy constructor should be virtual. I called it get_copy. It
should be implemented for each terminal class of items. There are dozens of
such classes.

How they could be caught?

I used the following trick.
My get_copy for the base class Item is 'pseudo-abstract':

Item *tem::get_copy(...) { dbug_print_item(this); DBUG_ASSERT(0); return 0;
}

Here dbug_print_item(this) helps me to understand for which class get_copy
is missed.
If I call now method build_clone, for example in JOIN::optimize_inner(), to
build a clone for the WHERE condition, and launch tests, it'll be easy for
me to understand for which classes lack implementations of get_copy.

Here I've faced some minor problem: how to skip the queries that are
excuted by mtr before it starts running the tests.
Anybody knows?
(Now I have a workaround: call build_clone() conditinally and manually
trigger the condition. Of course it's not nice.)

Best wishes,
Galina Shalygina.

Follow ups