~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to conf/optimizer_simple.yy

initial import from internal tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
\query_init:
 
2
        SET GLOBAL optimizer_use_mrr = 'disable';
 
3
 
 
4
query:
 
5
        { @nonaggregates = () ; $tables = 0 ; $fields = 0 ; "" } select ;
 
6
 
 
7
select:
 
8
        SELECT select_list
 
9
        FROM join_list
 
10
        where
 
11
        group_by
 
12
        having
 
13
        order_by_limit
 
14
;
 
15
 
 
16
select_list:
 
17
        new_select_item |
 
18
        new_select_item , select_list ;
 
19
 
 
20
join_list:
 
21
        new_table_item |
 
22
        (new_table_item join_type join_list ON ( current_table_item . _field = previous_table_item . _field ));
 
23
 
 
24
join_type:
 
25
        INNER JOIN | CROSS JOIN | left_right outer JOIN | STRAIGHT_JOIN ;  
 
26
 
 
27
left_right:
 
28
        LEFT | RIGHT ;
 
29
 
 
30
outer:
 
31
        | OUTER ;
 
32
where:
 
33
        WHERE where_list ;
 
34
 
 
35
where_list:
 
36
        not where_item |
 
37
        not (where_list AND where_item) |
 
38
        not (where_list OR where_item) |
 
39
        where_item IS not NULL ;
 
40
not:
 
41
        | NOT;
 
42
 
 
43
where_item:
 
44
        existing_table_item . _field sign value |
 
45
        existing_table_item . _field sign existing_table_item . _field ;
 
46
 
 
47
group_by:
 
48
        { scalar(@nonaggregates) > 0 ? " GROUP BY ".join (', ' , @nonaggregates ) : "" };
 
49
 
 
50
having:
 
51
        | HAVING having_list;
 
52
 
 
53
having_list:
 
54
        not having_item |
 
55
        not (having_list AND having_item) |
 
56
        not (having_list OR having_item) |
 
57
        having_item IS not NULL ;
 
58
 
 
59
having_item:
 
60
        existing_select_item sign value ;
 
61
 
 
62
order_by_limit:
 
63
        |
 
64
        ORDER BY order_by_list order_direction |
 
65
        ORDER BY order_by_list order_direction, total_order_by LIMIT _digit |
 
66
        ORDER BY ;
 
67
 
 
68
order_direction:
 
69
        |
 
70
        DESC ;
 
71
 
 
72
total_order_by:
 
73
        { join(', ', map { "field".$_ } (1..$fields) ) };
 
74
 
 
75
order_by_list:
 
76
        order_by_item |
 
77
        order_by_item , order_by_list ;
 
78
 
 
79
order_by_item:
 
80
        existing_select_item ;
 
81
 
 
82
limit:
 
83
        | LIMIT _digit | LIMIT _digit OFFSET _digit;
 
84
 
 
85
new_select_item:
 
86
        nonaggregate_select_item |
 
87
        nonaggregate_select_item |
 
88
        aggregate_select_item;
 
89
 
 
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} |
 
93
        table_one_two . * ;
 
94
 
 
95
aggregate_select_item:
 
96
        aggregate table_one_two . _field ) AS { "field".++$fields };
 
97
 
 
98
table_one_two:
 
99
        table1 | table2 | table3;
 
100
 
 
101
aggregate:
 
102
        COUNT( | SUM( | MIN( | MAX( ;
 
103
 
 
104
new_table_item:
 
105
        _table AS { "table".++$tables };
 
106
 
 
107
current_table_item:
 
108
        { "table".$tables };
 
109
 
 
110
previous_table_item:
 
111
        { "table".($tables - 1) };
 
112
 
 
113
existing_table_item:
 
114
        { "table".$prng->int(1,$tables) };
 
115
 
 
116
existing_select_item:
 
117
        { "field".$prng->int(1,$fields) };
 
118
 
 
119
sign:
 
120
        = | > | < | != | <> | <= | >= ;
 
121
        
 
122
value:
 
123
        _digit | _char(2) | _datetime ;
 
124
 
 
125
_table:
 
126
        A | B | C | AA | BB ;