~ubuntu-branches/ubuntu/trusty/drizzle/trusty

« back to all changes in this revision

Viewing changes to tests/randgen/conf/optimizer/virtual_columns.yy

  • Committer: Package Import Robot
  • Author(s): Clint Byrum
  • Date: 2012-06-19 10:46:49 UTC
  • mfrom: (1.1.6)
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20120619104649-e2l0ggd4oz3um0f4
Tags: upstream-7.1.36-stable
ImportĀ upstreamĀ versionĀ 7.1.36-stable

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# At the top of this grammar, we define the data types, the literals and the functions that will
 
3
# be used in the test. Some combinations of functions, data types and literals may produce
 
4
# false positives when used in a comparison test
 
5
#
 
6
 
 
7
constant:
 
8
        _digit | regular_field ;
 
9
        # _letter | _varchar(4) ;
 
10
 
 
11
field_type:
 
12
        DOUBLE ;
 
13
        #| CHAR(255) BINARY | DATETIME ;
 
14
 
 
15
 
 
16
nested_expr:
 
17
        ( comparison_operator ) | ( logical_operator ) | ( logical_operator ) |
 
18
        ( control_flow_function ) | 
 
19
#       ( string_function ) |
 
20
#       ( string_comparison_function ) |
 
21
        ( arithmetic_function ) |
 
22
#       ( date_and_time_function ) |
 
23
        ( mathematical_function ) ;
 
24
 
 
25
#
 
26
# We use multiple CREATE TABLE so that if a given table definition is invalid
 
27
# (such as a constant expression in a virtual column), subsequent CREATEs will
 
28
# create a valid table
 
29
#
 
30
 
 
31
 
 
32
query_init:
 
33
        drop_table ; create_table ; create_table ; create_table ;
 
34
 
 
35
query:
 
36
        drop_table ; create_table ; create_table ; create_table | create_table |
 
37
        select_dml | select_dml | select_dml | select_dml | select_dml |
 
38
        select_dml | select_dml | select_dml | select_dml | select_dml |
 
39
        select_dml | select_dml | select_dml | select_dml | select_dml |
 
40
        select_dml | select_dml | select_dml | select_dml | select_dml |
 
41
        select_dml | select_dml | select_dml | select_dml | select_dml |
 
42
        select_dml | select_dml | select_dml | select_dml | select_dml ;
 
43
 
 
44
select_dml:
 
45
        select | dml | dml | dml | dml | dml ;
 
46
        
 
47
drop_table:
 
48
        DROP TABLE IF EXISTS X ;
 
49
 
 
50
#
 
51
# Using the /*executor1 */ and /*executor2 */ syntax, we make sure that, in a comparison test PERSISTENT virtual columns
 
52
# are created on the first server while non-persistent ones are created on the second server
 
53
# We use the same syntax for KEY and FORCE|IGNORE KEY because only PERSISTENT virtual columns can have keys
 
54
#
 
55
 
 
56
create_table:
 
57
        CREATE TABLE IF NOT EXISTS X (
 
58
                f1 field_type null default,
 
59
                f2 field_type null default,
 
60
                f3 field_type null default,
 
61
                f4 field_type null default,
 
62
                v1 field_type AS ( virtual_expr ) /*executor1 PERSISTENT */ /*executor2 VIRTUAL */ ,
 
63
                v2 field_type AS ( virtual_expr ) /*executor1 PERSISTENT */ /*executor2 VIRTUAL */ ,
 
64
                v3 field_type AS ( virtual_expr ) /*executor1 PERSISTENT */ /*executor2 VIRTUAL */ ,
 
65
                v4 field_type AS ( virtual_expr ) /*executor1 PERSISTENT */ /*executor2 VIRTUAL */
 
66
                /*executor1 , KEY (v3), KEY (v4) */
 
67
        );
 
68
 
 
69
null:
 
70
        | NOT NULL ;
 
71
 
 
72
default:
 
73
        | DEFAULT '0' ;
 
74
 
 
75
select:
 
76
        select_plain |
 
77
        select_group_by ;
 
78
 
 
79
select_plain:
 
80
        SELECT any_field AS a1 , any_field AS a2  FROM virtual_table_name force_key WHERE where_condition order_by_limit;
 
81
 
 
82
select_group_by:
 
83
        SELECT v3 , aggregate_item FROM virtual_table_name force_key WHERE where_condition GROUP BY v3 order_by |
 
84
        SELECT v4 , aggregate_item FROM virtual_table_name force_key WHERE where_condition GROUP BY v4 order_by;
 
85
 
 
86
force_key:
 
87
        | /*executor1 force_ignore KEY (v3, v4) */ ;
 
88
 
 
89
force_ignore:
 
90
        FORCE | IGNORE ;
 
91
 
 
92
select_list:
 
93
        select_list, any_field | any_field ;
 
94
 
 
95
aggregate_item:
 
96
        SUM(any_field) | COUNT(*) | COUNT(any_field) | MIN(any_field) | MAX(any_field) ;
 
97
 
 
98
order_by_limit:
 
99
        |
 
100
        ORDER BY any_field_list |
 
101
        ORDER BY any_field_list , complete_field_list LIMIT _digit;
 
102
 
 
103
order_by:
 
104
        |
 
105
        ORDER BY any_field_list ;
 
106
 
 
107
any_field_list:
 
108
        any_field_list , any_field | any_field ;
 
109
 
 
110
dml:
 
111
        insert_replace | insert_replace |
 
112
        update | delete ;
 
113
 
 
114
insert_replace:
 
115
        i_s INTO virtual_table_name ( regular_field , regular_field ) VALUES ( constant , constant ) |
 
116
        i_s INTO virtual_table_name ( f1 , f2 , f3 , f4 ) VALUES ( constant , constant , constant , constant ) |
 
117
        i_s INTO virtual_table_name ( f1 , f2 , f3 , f4 ) SELECT any_field , any_field , any_field , any_field FROM virtual_table_name WHERE where_condition ORDER BY complete_field_list LIMIT _digit ;
 
118
 
 
119
i_s:
 
120
        INSERT ignore |
 
121
        REPLACE ;
 
122
 
 
123
update:
 
124
        UPDATE virtual_table_name SET regular_field = constant WHERE where_condition |
 
125
        UPDATE virtual_table_name SET regular_field = virtual_field WHERE where_condition ;
 
126
 
 
127
delete:
 
128
        DELETE FROM virtual_table_name WHERE where_condition ORDER BY complete_field_list LIMIT _digit ;
 
129
 
 
130
complete_field_list:
 
131
        f1,f2,f3,f4,v1,v2,v3,v4;
 
132
 
 
133
where_condition:
 
134
        where_condition AND any_field op constant |
 
135
        where_condition OR any_field op constant |
 
136
        any_field op constant | any_field op constant |
 
137
        any_field op constant | any_field op constant |
 
138
        any_field op constant | any_field op constant |
 
139
        any_field op any_field | any_field op any_field |
 
140
        any_field not BETWEEN _digit AND _digit ;
 
141
 
 
142
not:
 
143
        | NOT;
 
144
 
 
145
op:
 
146
        < | > | = | <> | <=> | != ;
 
147
 
 
148
ignore:
 
149
        | IGNORE ;
 
150
 
 
151
any_field:
 
152
        regular_field | virtual_field ;
 
153
 
 
154
regular_field:
 
155
        f1 | f2 | f3 | f4 ;
 
156
 
 
157
virtual_field:
 
158
        v1 | v2 | v3 | v4 ;     
 
159
 
 
160
 
 
161
virtual_table_name:
 
162
        X ;
 
163
 
 
164
virtual_expr:
 
165
        nested_expr ;
 
166
 
 
167
expr:
 
168
        regular_field | regular_field | regular_field | nested_expr | nested_expr;
 
169
 
 
170
comparison_operator:
 
171
        expr = expr |
 
172
        expr <=> expr |
 
173
        expr <> expr | expr != expr |
 
174
        expr <= expr |
 
175
        expr < expr |
 
176
        expr >= expr |
 
177
        expr > expr |
 
178
        expr IS not boolean_value |
 
179
        expr IS not NULL |
 
180
        expr not BETWEEN ( expr ) AND ( expr ) |
 
181
        COALESCE( expr_list ) |
 
182
        GREATEST( expr , expr_list ) |
 
183
        expr not IN ( expr_list ) |
 
184
        ISNULL( expr ) |
 
185
        INTERVAL( expr , expr_list ) |
 
186
        LEAST( expr, expr_list ) ;
 
187
 
 
188
logical_operator:
 
189
        NOT ( expr ) |
 
190
        ( expr ) AND ( expr ) |
 
191
        ( expr ) OR ( expr ) ;
 
192
#       ( expr ) XOR ( expr ) ; # MySQL bug #55365 
 
193
 
 
194
string_comparison_function:
 
195
        expr not LIKE pattern |
 
196
        STRCMP(expr, expr) ;
 
197
 
 
198
regexp:
 
199
        expr not REGEXP pattern ;
 
200
 
 
201
pattern:
 
202
        '%' | '.*' ;
 
203
 
 
204
control_flow_function:
 
205
        CASE expr WHEN expr THEN expr WHEN expr THEN expr ELSE expr END |
 
206
        IF( expr , expr , expr ) |
 
207
        IFNULL( expr , expr ) |
 
208
        NULLIF( expr , expr ) ;
 
209
 
 
210
string_function:
 
211
        ASCII( expr ) |
 
212
        BIN( expr ) |
 
213
        BIT_LENGTH( expr ) |
 
214
        CHAR( expr ) |
 
215
        CHAR( expr USING _charset ) |
 
216
        CHAR_LENGTH( expr ) |
 
217
        CHAR_LENGTH( str ) |
 
218
        CONCAT( expr_list ) |
 
219
        CONCAT_WS( expr , expr_list ) |
 
220
        ELT( expr , expr_list ) |
 
221
        EXPORT_SET( expr , expr , expr , expr , expr ) |
 
222
        FIELD( expr , expr_list ) |
 
223
        FIND_IN_SET( expr , expr_list ) |
 
224
        FORMAT( expr , expr ) |
 
225
        HEX( expr ) |
 
226
        INSERT( expr , expr , expr , expr ) |
 
227
        INSTR( expr , expr ) |
 
228
        LCASE( expr ) |
 
229
        LEFT( expr , expr ) |
 
230
        LENGTH( expr ) |
 
231
        LOAD_FILE( expr ) |
 
232
        LOCATE( expr , expr ) |
 
233
        LOCATE( expr , expr , expr) |
 
234
        LOWER( expr ) |
 
235
        LPAD( expr , expr , expr ) |
 
236
        LTRIM( expr ) |
 
237
        MAKE_SET( expr , expr_list ) |
 
238
        MID( expr , pos , len) |
 
239
        OCT( expr ) |
 
240
        OCTET_LENGTH( expr ) |
 
241
        ORD( expr ) |
 
242
        POSITION( expr IN expr ) |
 
243
        QUOTE( expr ) |
 
244
        REPEAT( expr , expr ) |
 
245
        REPLACE( expr , expr , expr ) |
 
246
        REVERSE( expr ) |
 
247
        RIGHT( expr , expr ) |
 
248
        RPAD( expr , expr , expr ) |
 
249
        RTRIM( expr ) |
 
250
        SOUNDEX( expr ) |
 
251
        ( expr SOUNDS LIKE expr ) |
 
252
        SPACE( expr ) |
 
253
        SUBSTR( expr , expr ) |
 
254
        SUBSTR( expr , expr , expr ) |
 
255
        SUBSTRING_INDEX( expr , expr , expr ) |
 
256
        TRIM( both_leading_trailing expr FROM expr ) |
 
257
        UCASE( expr ) |
 
258
        UNHEX( expr ) |
 
259
        UPPER( expr ) ;
 
260
 
 
261
arithmetic_function:
 
262
        expr + expr |
 
263
        expr - expr |
 
264
        ( - expr ) |
 
265
        expr * expr |
 
266
        expr / expr |
 
267
        expr DIV expr |
 
268
        expr % expr ;
 
269
 
 
270
mathematical_function:
 
271
        ABS( expr ) |
 
272
        ACOS( expr ) |
 
273
        ASIN( expr ) |
 
274
        ATAN( expr ) |
 
275
        ATAN( expr , expr ) |
 
276
        CEIL( expr ) |
 
277
        CEILING( expr ) |
 
278
        CONV( expr , expr , expr ) |
 
279
        COS( expr ) |
 
280
        COT( expr ) |
 
281
        CRC32( expr ) |
 
282
        DEGREES( expr ) |
 
283
        EXP( expr ) |
 
284
        FLOOR( expr ) |
 
285
        FORMAT( expr , expr ) |
 
286
        HEX( expr ) |
 
287
        LN( expr ) |
 
288
        LOG( expr ) |
 
289
        LOG( expr , expr ) |
 
290
        LOG2( expr ) |
 
291
        LOG10( expr ) |
 
292
        MOD( expr , expr ) |
 
293
        PI() |
 
294
        POW( expr , expr ) |
 
295
        POWER( expr , expr ) |
 
296
        RADIANS( expr ) |
 
297
        RAND( expr ) |
 
298
        ROUND( expr ) |
 
299
        ROUND( expr , expr ) |
 
300
        SIGN( expr ) |
 
301
        SIN( expr ) |
 
302
        SQRT( expr ) |
 
303
        TAN( expr ) ;
 
304
#       TRUNCATE( expr , expr ) ;       # MySQL bug #55365 
 
305
 
 
306
date_and_time_function:
 
307
        ADDDATE( expr , INTERVAL expr unit) |
 
308
        ADDDATE( expr , expr ) |
 
309
        ADDTIME( expr , expr ) |
 
310
        CONVERT_TZ( expr , tz , tz ) |
 
311
        CURDATE() |
 
312
        CURTIME() |
 
313
        CURRENT_TIMESTAMP() |
 
314
        DATE( expr ) |
 
315
        DATEDIFF( expr , expr ) |
 
316
        DATE_ADD( expr INTERVAL expr unit ) |
 
317
        DATE_FORMAT( expr , expr ) |
 
318
        DATE_SUB( expr INTERVAL expr unit ) |
 
319
        DAY( expr ) |
 
320
        DAYNAME( expr ) |
 
321
        DAYOFMONTH( expr ) |
 
322
        DAYOFWEEK( expr ) |
 
323
        DAYOFYEAR( expr ) |
 
324
        EXTRACT( unit FROM expr ) |
 
325
        FROM_DAYS( expr ) |
 
326
        FROM_UNIXTIME( expr ) |
 
327
        FROM_UNIXTIME( expr , expr ) |
 
328
        GET_FORMAT( date_time_datetime, date_format ) |
 
329
        HOUR( expr ) |
 
330
        LAST_DAY( expr ) |
 
331
        LOCALTIME() |
 
332
        MAKEDATE( expr , expr ) |
 
333
        MAKETIME( expr , expr , expr ) |
 
334
        MICROSECOND( expr ) |
 
335
        MINUTE( expr ) |
 
336
        MONTH( expr ) |
 
337
        MONTHNAME( expr ) |
 
338
        NOW() |
 
339
        PERIOD_ADD( expr , expr ) |
 
340
        PERIOD_DIFF( expr , expr ) |
 
341
        QUARTER( expr ) |
 
342
        SECOND( expr ) |
 
343
        SEC_TO_TIME( expr ) |
 
344
        STR_TO_DATE( expr , expr ) |
 
345
        SUBDATE( expr INTERVAL expr unit ) |
 
346
        SUBDATE( expr , expr ) |
 
347
        SUBTIME( expr , expr ) |
 
348
        SYSDATE() | 
 
349
        TIME( expr ) |
 
350
        TIMEDIFF( expr , expr ) |
 
351
        TIMESTAMP( expr ) |
 
352
        TIMESTAMP( expr , expr ) |
 
353
        TIMESTAMPADD( unit , expr , expr ) |
 
354
        TIMESTAMPDIFF( unit , expr , expr ) |
 
355
        TIME_FORMAT( expr , expr ) |
 
356
        TIME_TO_SEC( expr ) |
 
357
        TO_DAYS( expr ) |
 
358
        UNIX_TIMESTAMP() |
 
359
        UNIX_TIMESTAMP( expr ) |
 
360
        UTC_DATE() |
 
361
        UTC_TIME() |
 
362
        UTC_TIMESTAMP() |
 
363
        WEEK( expr , expr ) |
 
364
        WEEKDAY( expr ) |
 
365
        WEEKOFYEAR( expr ) |
 
366
        YEAR( expr ) |
 
367
        YEARWEEK( expr ) |
 
368
        YEARWEEK( expr , expr ) ; 
 
369
 
 
370
date_time_datetime:
 
371
        DATE | TIME | DATETIME ;
 
372
 
 
373
date_format:
 
374
        'EUR' | 'USA' | 'JIS' | 'ISO' | 'INTERNAL' ;
 
375
        
 
376
unit:
 
377
        MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR |
 
378
        SECOND_MICROSECOND |
 
379
        MINUTE_MICROSECOND | MINUTE_SECOND |
 
380
        HOUR_MICRSECOND | HOUR_SECOND | HOUR_MINUTE |
 
381
        DAY_MICROSECOND | DAY_SECOND | DAY_MINUTE | DAY_HOUR |
 
382
        YEAR_MONTH ;
 
383
 
 
384
tz:
 
385
        SYSTEM ;
 
386
 
 
387
both_leading_trailing:
 
388
        | BOTH | LEADING | TRAILING ;
 
389
 
 
390
boolean_value:
 
391
        TRUE | FALSE | UNKNOWN ;
 
392
 
 
393
expr_list:
 
394
        expr_list , expr | expr , expr | expr | expr | expr ;