Skip to content

Commit 850cf7c

Browse files
authored
updated vitess api (to gitql-0.2 tag) (#114)
1 parent fb17c2f commit 850cf7c

File tree

1 file changed

+42
-68
lines changed

1 file changed

+42
-68
lines changed

Diff for: sql/parse/parse.go

+42-68
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func tableExprToTable(te sqlparser.TableExpr) (sql.Node, error) {
142142
}
143143

144144
func 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) {
153153
func 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

234234
func 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

269281
func 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,
302314
func 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-
354328
func selectExprToExpression(se sqlparser.SelectExpr) (sql.Expression, error) {
355329
switch e := se.(type) {
356330
default:

0 commit comments

Comments
 (0)