@@ -142,7 +142,7 @@ func tableExprToTable(te sqlparser.TableExpr) (sql.Node, error) {
142142}
143143
144144func whereToFilter (w * sqlparser.Where , child sql.Node ) (* plan.Filter , error ) {
145- c , err := boolExprToExpression (w .Expr )
145+ c , err := exprToExpression (w .Expr )
146146 if err != nil {
147147 return nil , err
148148 }
@@ -153,7 +153,7 @@ func whereToFilter(w *sqlparser.Where, child sql.Node) (*plan.Filter, error) {
153153func orderByToSort (ob sqlparser.OrderBy , child sql.Node ) (* plan.Sort , error ) {
154154 var sortFields []plan.SortField
155155 for _ , o := range ob {
156- e , err := valExprToExpression (o .Expr )
156+ e , err := exprToExpression (o .Expr )
157157 if err != nil {
158158 return nil , err
159159 }
@@ -175,8 +175,8 @@ func orderByToSort(ob sqlparser.OrderBy, child sql.Node) (*plan.Sort, error) {
175175 return plan .NewSort (sortFields , child ), nil
176176}
177177
178- func limitToLimit (o sqlparser.ValExpr , child sql.Node ) (* plan.Limit , error ) {
179- e , err := valExprToExpression (o )
178+ func limitToLimit (o sqlparser.Expr , child sql.Node ) (* plan.Limit , error ) {
179+ e , err := exprToExpression (o )
180180 if err != nil {
181181 return nil , err
182182 }
@@ -232,49 +232,61 @@ func selectExprsToExpressions(se sqlparser.SelectExprs) ([]sql.Expression, error
232232}
233233
234234func exprToExpression (e sqlparser.Expr ) (sql.Expression , error ) {
235- be , ok := e .(sqlparser.BoolExpr )
236- if ok {
237- return boolExprToExpression (be )
238- }
239-
240- c , ok := e .(* sqlparser.ComparisonExpr )
241- if ok {
242- return comparisonExprToExpression (c )
243- }
244-
245- v , ok := e .(sqlparser.ValExpr )
246- if ok {
247- return valExprToExpression (v )
248- }
249-
250- return nil , errUnsupported (e )
251- }
252-
253- func boolExprToExpression (be sqlparser.BoolExpr ) (sql.Expression , error ) {
254- switch b := be .(type ) {
235+ switch v := e .(type ) {
255236 default :
256- return nil , errUnsupported (b )
237+ return nil , errUnsupported (e )
257238 case * sqlparser.ComparisonExpr :
258- return comparisonExprToExpression (b )
239+ return comparisonExprToExpression (v )
259240 case * sqlparser.NotExpr :
260- c , err := boolExprToExpression ( b .Expr )
241+ c , err := exprToExpression ( v .Expr )
261242 if err != nil {
262243 return nil , err
263244 }
264245
265246 return expression .NewNot (c ), nil
247+ case * sqlparser.SQLVal :
248+ switch v .Type {
249+ case sqlparser .StrVal :
250+ return expression .NewLiteral (string (v .Val ), sql .String ), nil
251+ case sqlparser .IntVal :
252+ //TODO: Use smallest integer representation and widen later.
253+ n , _ := strconv .ParseInt (string (v .Val ), 10 , 64 )
254+ return expression .NewLiteral (n , sql .BigInteger ), nil
255+ case sqlparser .HexVal :
256+ //TODO
257+ return nil , errUnsupported (v )
258+ default :
259+ //TODO
260+ return nil , errUnsupported (v )
261+ }
262+ case sqlparser.BoolVal :
263+ return expression .NewLiteral (bool (v ), sql .Boolean ), nil
264+ case * sqlparser.NullVal :
265+ //TODO
266+ return expression .NewLiteral (nil , sql .Null ), nil
267+ case * sqlparser.ColName :
268+ //TODO: add handling of case sensitiveness.
269+ return expression .NewUnresolvedColumn (v .Name .Lowered ()), nil
270+ case * sqlparser.FuncExpr :
271+ exprs , err := selectExprsToExpressions (v .Exprs )
272+ if err != nil {
273+ return nil , err
274+ }
275+
276+ return expression .NewUnresolvedFunction (v .Name .Lowered (),
277+ v .IsAggregate (), exprs ... ), nil
266278 }
267279}
268280
269281func comparisonExprToExpression (c * sqlparser.ComparisonExpr ) (sql.Expression ,
270282 error ) {
271283
272- left , err := valExprToExpression (c .Left )
284+ left , err := exprToExpression (c .Left )
273285 if err != nil {
274286 return nil , err
275287 }
276288
277- right , err := valExprToExpression (c .Right )
289+ right , err := exprToExpression (c .Right )
278290 if err != nil {
279291 return nil , err
280292 }
@@ -302,7 +314,7 @@ func comparisonExprToExpression(c *sqlparser.ComparisonExpr) (sql.Expression,
302314func groupByToExpressions (g sqlparser.GroupBy ) ([]sql.Expression , error ) {
303315 es := make ([]sql.Expression , len (g ))
304316 for i , ve := range g {
305- e , err := valExprToExpression (ve )
317+ e , err := exprToExpression (ve )
306318 if err != nil {
307319 return nil , err
308320 }
@@ -313,44 +325,6 @@ func groupByToExpressions(g sqlparser.GroupBy) ([]sql.Expression, error) {
313325 return es , nil
314326}
315327
316- func valExprToExpression (ve sqlparser.ValExpr ) (sql.Expression , error ) {
317- switch v := ve .(type ) {
318- default :
319- return nil , errUnsupported (v )
320- case * sqlparser.SQLVal :
321- switch v .Type {
322- case sqlparser .StrVal :
323- return expression .NewLiteral (string (v .Val ), sql .String ), nil
324- case sqlparser .IntVal :
325- //TODO: Use smallest integer representation and widen later.
326- n , _ := strconv .ParseInt (string (v .Val ), 10 , 64 )
327- return expression .NewLiteral (n , sql .BigInteger ), nil
328- case sqlparser .HexVal :
329- //TODO
330- return nil , errUnsupported (v )
331- default :
332- //TODO
333- return nil , errUnsupported (v )
334- }
335- case sqlparser.BoolVal :
336- return expression .NewLiteral (bool (v ), sql .Boolean ), nil
337- case * sqlparser.NullVal :
338- //TODO
339- return expression .NewLiteral (nil , sql .Null ), nil
340- case * sqlparser.ColName :
341- //TODO: add handling of case sensitiveness.
342- return expression .NewUnresolvedColumn (v .Name .Lowered ()), nil
343- case * sqlparser.FuncExpr :
344- exprs , err := selectExprsToExpressions (v .Exprs )
345- if err != nil {
346- return nil , err
347- }
348-
349- return expression .NewUnresolvedFunction (v .Name .Lowered (),
350- v .IsAggregate (), exprs ... ), nil
351- }
352- }
353-
354328func selectExprToExpression (se sqlparser.SelectExpr ) (sql.Expression , error ) {
355329 switch e := se .(type ) {
356330 default :
0 commit comments