2
SET GLOBAL optimizer_use_mrr = 'disable';
5
{ @nonaggregates = () ; $tables = 0 ; $fields = 0 ; "" } select ;
18
new_select_item , select_list ;
22
(new_table_item join_type join_list ON ( current_table_item . _field = previous_table_item . _field ));
25
INNER JOIN | CROSS JOIN | left_right outer JOIN | STRAIGHT_JOIN ;
37
not (where_list AND where_item) |
38
not (where_list OR where_item) |
39
where_item IS not NULL ;
44
existing_table_item . _field sign value |
45
existing_table_item . _field sign existing_table_item . _field ;
48
{ scalar(@nonaggregates) > 0 ? " GROUP BY ".join (', ' , @nonaggregates ) : "" };
55
not (having_list AND having_item) |
56
not (having_list OR having_item) |
57
having_item IS not NULL ;
60
existing_select_item sign value ;
64
ORDER BY order_by_list order_direction |
65
ORDER BY order_by_list order_direction, total_order_by LIMIT _digit |
73
{ join(', ', map { "field".$_ } (1..$fields) ) };
77
order_by_item , order_by_list ;
80
existing_select_item ;
83
| LIMIT _digit | LIMIT _digit OFFSET _digit;
86
nonaggregate_select_item |
87
nonaggregate_select_item |
88
aggregate_select_item;
90
nonaggregate_select_item:
91
table_one_two . _field AS { my $f = "field".++$fields ; push @nonaggregates , $f ; $f} |
92
table_one_two . _field_indexed AS { my $f = "field".++$fields ; push @nonaggregates, $f ; $f} |
95
aggregate_select_item:
96
aggregate table_one_two . _field ) AS { "field".++$fields };
99
table1 | table2 | table3;
102
COUNT( | SUM( | MIN( | MAX( ;
105
_table AS { "table".++$tables };
111
{ "table".($tables - 1) };
114
{ "table".$prng->int(1,$tables) };
116
existing_select_item:
117
{ "field".$prng->int(1,$fields) };
120
= | > | < | != | <> | <= | >= ;
123
_digit | _char(2) | _datetime ;
126
A | B | C | AA | BB ;