Add val handler for bool type
Add ql value handler for bool type for drivers. Fixes #599, #583
This commit is contained in:
@@ -112,6 +112,7 @@ func (d *model) convertQuery(n *ql.ASTNode) (out exp.Expression, err error) {
|
||||
func (d *model) QueryParser() queryParser {
|
||||
return ql.Converter(
|
||||
ql.SymHandler(d.qlConverterGenericSymHandler()),
|
||||
ql.ValHandler(d.qlConverterGenericValHandler()),
|
||||
ql.RefHandler(d.qlConverterGenericRefHandler()),
|
||||
)
|
||||
}
|
||||
@@ -151,6 +152,12 @@ func (d *model) qlConverterGenericSymHandler() func(node *ql.ASTNode) (exp.Expre
|
||||
}
|
||||
}
|
||||
|
||||
func (d *model) qlConverterGenericValHandler() func(*ql.ASTNode) (exp.Expression, error) {
|
||||
return func(node *ql.ASTNode) (exp.Expression, error) {
|
||||
return d.dialect.ValHandler(node)
|
||||
}
|
||||
}
|
||||
|
||||
func (d *model) qlConverterGenericRefHandler() func(*ql.ASTNode, ...exp.Expression) (exp.Expression, error) {
|
||||
return func(node *ql.ASTNode, args ...exp.Expression) (exp.Expression, error) {
|
||||
return d.dialect.ExprHandler(node, args...)
|
||||
|
||||
@@ -77,6 +77,9 @@ type (
|
||||
// ExprHandler returns driver specific expression handling
|
||||
ExprHandler(*ql.ASTNode, ...exp.Expression) (exp.Expression, error)
|
||||
|
||||
// ValHandler returns driver specific value expression handling
|
||||
ValHandler(*ql.ASTNode) (exp.Expression, error)
|
||||
|
||||
// OrderedExpression returns compatible expression for ordering
|
||||
//
|
||||
// Database understand order modifiers differently. For example, MySQL does not know
|
||||
|
||||
@@ -242,6 +242,10 @@ func (d mysqlDialect) ExprHandler(n *ql.ASTNode, args ...exp.Expression) (expr e
|
||||
return ql.DefaultRefHandler(n, args...)
|
||||
}
|
||||
|
||||
func (d mysqlDialect) ValHandler(n *ql.ASTNode) (out exp.Expression, err error) {
|
||||
return ql.DefaultValueHandler(n)
|
||||
}
|
||||
|
||||
func (d mysqlDialect) OrderedExpression(expr exp.Expression, dir exp.SortDirection, _ exp.NullSortType) exp.OrderedExpression {
|
||||
return exp.NewOrderedExpression(expr, dir, exp.NoNullsSortType)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/cortezaproject/corteza/server/pkg/dal"
|
||||
"github.com/cortezaproject/corteza/server/pkg/expr"
|
||||
"github.com/cortezaproject/corteza/server/store/adapters/rdbms/ddl"
|
||||
"github.com/cortezaproject/corteza/server/store/adapters/rdbms/drivers"
|
||||
"github.com/cortezaproject/corteza/server/store/adapters/rdbms/ql"
|
||||
@@ -235,6 +236,23 @@ func (d postgresDialect) ExprHandler(n *ql.ASTNode, args ...exp.Expression) (exp
|
||||
return ref2exp.RefHandler(n, args...)
|
||||
}
|
||||
|
||||
func (d postgresDialect) ValHandler(n *ql.ASTNode) (out exp.Expression, err error) {
|
||||
switch v := n.Value.V.(type) {
|
||||
case *expr.Boolean:
|
||||
// value handling for boolean is different in postgres
|
||||
// this was done to support value parsing for (IS $3) statement
|
||||
if cast.ToBool(v.Get()) {
|
||||
out = drivers.LiteralTRUE
|
||||
} else {
|
||||
out = drivers.LiteralFALSE
|
||||
}
|
||||
default:
|
||||
out = exp.NewLiteralExpression("?", n.Value.V.Get())
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (d postgresDialect) OrderedExpression(expr exp.Expression, dir exp.SortDirection, nst exp.NullSortType) exp.OrderedExpression {
|
||||
return exp.NewOrderedExpression(expr, dir, nst)
|
||||
}
|
||||
|
||||
@@ -234,6 +234,10 @@ func (d sqliteDialect) ExprHandler(n *ql.ASTNode, args ...exp.Expression) (expr
|
||||
return ref2exp.RefHandler(n, args...)
|
||||
}
|
||||
|
||||
func (d sqliteDialect) ValHandler(n *ql.ASTNode) (out exp.Expression, err error) {
|
||||
return ql.DefaultValueHandler(n)
|
||||
}
|
||||
|
||||
func (d sqliteDialect) OrderedExpression(expr exp.Expression, dir exp.SortDirection, nst exp.NullSortType) exp.OrderedExpression {
|
||||
return exp.NewOrderedExpression(expr, dir, exp.NoNullsSortType)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user