~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to conf/temporal/temporal.yy

preliminary grammar for testing temporal types and functions

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
query:
 
2
        { $col = 1 ; return "" }
 
3
        SELECT select_list
 
4
        FROM _table
 
5
        WHERE where_list 
 
6
#       having 
 
7
        order_by ;
 
8
 
 
9
select_list:
 
10
        select_item |
 
11
        select_item , select_list |
 
12
        select_item , select_item ;
 
13
 
 
14
select_item:
 
15
        _field AS { 'c'.$col++ } |
 
16
        datetime_expr AS { 'c'.$col++ } ;
 
17
 
 
18
where_list:
 
19
        where_item |
 
20
        where_item and_or where_list ;
 
21
 
 
22
where_item:
 
23
        _field not IN ( datetime_list ) |
 
24
        _field comp_op datetime_expr ;
 
25
 
 
26
order_by:
 
27
        | 
 
28
        ORDER BY field_list | 
 
29
        ORDER BY 1 ;
 
30
 
 
31
having:
 
32
        |
 
33
        HAVING datetime_expr ;
 
34
 
 
35
field_list:
 
36
        _field , field_list |
 
37
        _field , _field ; 
 
38
 
 
39
comp_op:
 
40
        = | < | > | != | <> ;
 
41
 
 
42
not:
 
43
        | NOT ;
 
44
 
 
45
and_or:
 
46
        AND | OR ;
 
47
 
 
48
datetime_list:
 
49
        datetime_expr , datetime_expr |
 
50
        datetime_expr , datetime_list ;
 
51
 
 
52
datetime_expr:
 
53
        datetime_func | datetime_field ;
 
54
 
 
55
arg_datetime:
 
56
        arg_datetime | arg_datetime | arg_datetime | arg_datetime | arg_date | datetime_func | '0000-00-00 00:00:00' | datetime_field ;
 
57
 
 
58
arg_date:
 
59
        _date | _date | _date | _date | '0000-00-00' | datetime_func | datetime_field ;
 
60
 
 
61
arg_time:
 
62
        _time | _time | _time | _time | '00:00:00' | datetime_func | datetime_field ;
 
63
 
 
64
arg_any:
 
65
        arg_datetime | arg_time | arg_date | datetime_func | datetime_field ;
 
66
 
 
67
arg_integer:
 
68
        _tinyint_unsigned | digit | integer_func | integer_field ;
 
69
 
 
70
integer_field:
 
71
        _field ;
 
72
 
 
73
datetime_field:
 
74
        _field ;
 
75
 
 
76
arg_unix:
 
77
        _integer_unsigned ;
 
78
 
 
79
arg_tz:
 
80
        'MET' |
 
81
        'UTC' |
 
82
        'Universal' |
 
83
        'Europe/Moscow' |
 
84
        'leap/Europe/Moscow' |
 
85
        'Japan' |
 
86
         CONCAT( plus_minus , CONCAT_WS(':', _digit , _digit ) ) ;
 
87
 
 
88
arg_hour:
 
89
        _digit | 24 | _tinyint_unsigned | integer_func | 24 ;
 
90
 
 
91
arg_minute:
 
92
        _digit | _tinyint_unsigned | integer_func | 60 ;
 
93
 
 
94
arg_second:
 
95
        _digit | _digit | _digit | _tinyint_unsigned | integer_func ;
 
96
 
 
97
arg_dayofyear:
 
98
        _tinyint_unsigned | _tinyint_unsigned | _tinyint_unsigned | integer_func ;
 
99
 
 
100
arg_year:
 
101
        19 + _digit | 20 + _digit | _tinyint_unsigned | integer_func | '0000';
 
102
 
 
103
arg_days:
 
104
        arg_integer ;
 
105
 
 
106
arg_formatted:
 
107
        DATE_FORMAT( arg_any , arg_format ) ;
 
108
 
 
109
plus_minus:
 
110
        '-' | '+' ;
 
111
 
 
112
datetime_func:
 
113
        date_add_sub |
 
114
        ADDDATE( arg_datetime , arg_days ) |
 
115
        ADDTIME( arg_any , arg_time ) |
 
116
        CONVERT_TZ( arg_datetime , arg_tz , arg_tz ) |
 
117
        CURDATE() | CURRENT_DATE() |
 
118
#       CURTIME() | CURRENT_TIME() |
 
119
#       CURRENT_TIMESTAMP() | NOW() |
 
120
        DATE( arg_date ) | DATE ( arg_datetime ) |
 
121
        FROM_DAYS( arg_integer ) |
 
122
        FROM_UNIXTIME( arg_unix ) | FROM_UNIXTIME( arg_unix , arg_format ) |
 
123
#       LAST_DAY( arg_datetime ) |
 
124
#       LOCALTIME() | LOCALTIMESTAMP() |
 
125
        MAKEDATE( arg_year , arg_dayofyear ) |
 
126
        MAKETIME( arg_hour , arg_minute, arg_second ) |
 
127
#       NOW() |
 
128
        SEC_TO_TIME( arg_second ) |
 
129
        STR_TO_DATE( arg_formatted , arg_format ) |
 
130
#       SYSDATE() |
 
131
        TIME( arg_any ) |
 
132
        TIMEDIFF( arg_any , arg_any ) |
 
133
        TIMESTAMP( arg_any ) | TIMESTAMP( arg_any , arg_time ) |
 
134
        TIMESTAMPADD( arg_unit_timestamp , arg_integer , arg_datetime ) |
 
135
#       UNIX_TIMESTAMP() |
 
136
        UNIX_TIMESTAMP( arg_datetime ) |
 
137
#       UTC_DATE() | UTC_TIME() | UTC_TIMESTAMP() |
 
138
        SUBTIME( arg_datetime , arg_time ) |
 
139
        EXTRACT( arg_unit_noninteger FROM arg_any ) ;
 
140
 
 
141
integer_func:
 
142
        DATEDIFF( arg_date , arg_date ) | DATEDIFF( arg_datetime , arg_datetime ) |
 
143
        DAY( arg_date ) | DAYOFMONTH( arg_date ) ;
 
144
        DAYOFMONTH( arg_datetime ) |
 
145
        DAYOFWEEK( arg_datetime ) |
 
146
        DAYOFYEAR( arg_datetime ) |
 
147
        EXTRACT( arg_unit_integer FROM arg_any ) |
 
148
        HOUR( arg_datetime ) |  
 
149
        MICROSECOND( arg_any ) |
 
150
        MINUTE( arg_time ) |
 
151
        MONTH( arg_date ) |
 
152
        PERIOD_ADD( arg_period , arg_integer ) |
 
153
        PERIOD_DIFF( arg_period , arg_period ) |
 
154
        QUARTER( arg_date ) |
 
155
        SECOND( arg_any ) |
 
156
        TIMESTAMPDIFF( arg_interval ,  arg_datetime , arg_datetime ) |
 
157
        TIME_TO_SEC( arg_any ) |
 
158
        TO_DAYS( arg_datetime ) |
 
159
        TO_SECONDS( arg_datetime ) |
 
160
        WEEK( arg_datetime , arg_mode ) |
 
161
        WEEKDAY( arg_datetime ) |
 
162
        WEEKOFYEAR( arg_datetime ) |
 
163
        YEAR( arg_datetime ) ;
 
164
        YEARWEEK( arg_datetime ) | YEARWEEK( arg_datetime , arg_mode ) ;
 
165
 
 
166
string_func:
 
167
        DATE_FORMAT( arg_any , arg_format ) |
 
168
        DAYNAME( arg_date ) ;
 
169
        MONTHNAME( arg_date ) |
 
170
        TIME_FORMAT( arg_time , arg_time_format ) |
 
171
 
 
172
 
 
173
        SUBDATE( arg_date , INTERVAL arg_expr arg_unit ) |
 
174
        SUBDATE( arg_date , arg_days ) |
 
175
 
 
176
 
 
177
date_add_sub:
 
178
        add_sub arg_datetime arg_integer , arg_unit_integer ) |
 
179
        add_sub arg_datetime , INTERVAL CONCAT_WS('.' , arg_second , arg_microsecond ) SECOND_MICROSECOND ) |
 
180
        add_sub arg_datetime , INTERVAL CONCAT_WS('.' , CONCAT_WS(':' , arg_minute , arg_second ) , arg_microsecond ) MINUTE_MICROSECOND ) |
 
181
        add_sub arg_datetime , INTERVAL CONCAT_WS(':' , arg_minute , arg_second ) MINUTE_SECOND ) |
 
182
        add_sub arg_datetime , INTERVAL CONCAT_WS('.' , CONCAT_WS(':' , arg_hour , arg_minute, arg_second ) , arg_microsecond ) HOUR_MICROSECOND ) |
 
183
        add_sub arg_datetime , INTERVAL CONCAT_WS(':' ,  arg_hour , arg_minute, arg_second ) HOUR_SECOND ) |
 
184
        add_sub arg_datetime , INTERVAL CONCAT_WS(':' , arg_hour , arg_minute ) HOUR_MINUTE ) |
 
185
        add_sub arg_datetime , INTERVAL CONCAT_WS(' ' , arg_day , CONCAT_WS(':' , arg_hour , arg_minute, CONCAT_WS('.' , arg_second , arg_microsecond ) DAY_MICROSECOND ) |
 
186
        add_sub arg_datetime , INTERVAL CONCAT_WS(' ' , arg_day , CONCAT_WS(':' , arg_hour , arg_minute , arg_second ) DAY_SECOND ) |
 
187
        add_sub arg_datetime , INTERVAL CONCAT_WS(' ' , arg_day , CONCAT_WS(':' , arg_hour , arg_minute ) DAY_MINUTE ) |
 
188
        add_sub arg_datetime , INTERVAL CONCAT_WS(' ' , arg_day , arg_hours ) DAY_HOUR ) |
 
189
        add_sub arg_datetime , INTERVAL CONCAT_WS('-' , arg_year , arg_month ) YEAR_MONTH ) ;
 
190
 
 
191
arg_unit_integer:
 
192
        MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR ;
 
193
 
 
194
arg_unit_noninteger:
 
195
        SECOND_MICROSECOND | MINUTE_MICROSECOND | MINUTE_SECOND | HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND | DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH ;
 
196
 
 
197
arg_unit:
 
198
        MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR | SECOND_MICROSECOND | MINUTE_MICROSECOND | MINUTE_SECOND | HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND | DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH ;
 
199
 
 
200
arg_unit_timestamp:
 
201
        MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR ;
 
202
 
 
203
add_sub:
 
204
        DATE_ADD( | DATE_SUB( | SUBDATE 
 
205
 
 
206
arg_mode:
 
207
        0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 ;
 
208
        
 
209
        
 
210
 
 
211
        
 
212
get_format:
 
213
        GET_FORMAT( date_time_datetime , country_code ) ;
 
214
 
 
215
date_time_datetime:
 
216
        DATE | TIME | DATETIME ;
 
217
 
 
218
country_code:
 
219
        EUR | USA | JIS | ISO | INTERNAL ;
 
220
 
 
221
 
 
222
arg_format:
 
223
        CONCAT_WS( format_separator , format_list );
 
224
 
 
225
format_list:
 
226
        format_item , format_item |
 
227
        format_item , format_list ;
 
228
 
 
229
format_item:
 
230
        '%a' | '%b' | '%c' | '%D' | '%d' | '%e' | '%f' | '%H' | '%h' | '%I' | '%i' | '%j' | '%k' | '%l' | '%M' | '%m' | '%p' | '%r' | '%S' | '%s' | '%T' | '%U' | '%u' | '%V' | '%v' | '%W' | '%w' | '%X' | '%x' | '%Y' | '%y' | '%%' | '%x' ;  
 
231
 
 
232
format_separator:
 
233
        ':' | '-' ;