@@ -101,6 +101,34 @@ def post(tlist, pidx, tidx, nidx):
101101 _group (tlist , sql .Identifier , match , valid , valid , post )
102102
103103
104+ def group_typed_literal (tlist ):
105+ # definitely not complete, see e.g.:
106+ # https://docs.microsoft.com/en-us/sql/odbc/reference/appendixes/interval-literal-syntax
107+ # https://docs.microsoft.com/en-us/sql/odbc/reference/appendixes/interval-literals
108+ # https://www.postgresql.org/docs/9.1/datatype-datetime.html
109+ # https://www.postgresql.org/docs/9.1/functions-datetime.html
110+ def match (token ):
111+ return token .match (* sql .TypedLiteral .M_OPEN )
112+
113+ def match_to_extend (token ):
114+ return isinstance (token , sql .TypedLiteral )
115+
116+ def valid_prev (token ):
117+ return token is not None
118+
119+ def valid_next (token ):
120+ return token is not None and token .match (* sql .TypedLiteral .M_CLOSE )
121+
122+ def valid_final (token ):
123+ return token is not None and token .match (* sql .TypedLiteral .M_EXTEND )
124+
125+ def post (tlist , pidx , tidx , nidx ):
126+ return tidx , nidx
127+
128+ _group (tlist , sql .TypedLiteral , match , valid_prev , valid_next , post , extend = False )
129+ _group (tlist , sql .TypedLiteral , match_to_extend , valid_prev , valid_final , post , extend = True )
130+
131+
104132def group_period (tlist ):
105133 def match (token ):
106134 return token .match (T .Punctuation , '.' )
@@ -217,13 +245,14 @@ def post(tlist, pidx, tidx, nidx):
217245def group_operator (tlist ):
218246 ttypes = T_NUMERICAL + T_STRING + T_NAME
219247 sqlcls = (sql .SquareBrackets , sql .Parenthesis , sql .Function ,
220- sql .Identifier , sql .Operation )
248+ sql .Identifier , sql .Operation , sql . TypedLiteral )
221249
222250 def match (token ):
223251 return imt (token , t = (T .Operator , T .Wildcard ))
224252
225253 def valid (token ):
226- return imt (token , i = sqlcls , t = ttypes )
254+ return imt (token , i = sqlcls , t = ttypes ) \
255+ or token .match (T .Keyword , ("CURRENT_DATE" , "CURRENT_TIME" , "CURRENT_TIMESTAMP" ))
227256
228257 def post (tlist , pidx , tidx , nidx ):
229258 tlist [tidx ].ttype = T .Operator
@@ -372,6 +401,7 @@ def group(stmt):
372401 group_order ,
373402 group_typecasts ,
374403 group_tzcasts ,
404+ group_typed_literal ,
375405 group_operator ,
376406 group_comparison ,
377407 group_as ,
0 commit comments