Add val handler for bool type

Add ql value handler for bool type for drivers.

Fixes #599, #583
This commit is contained in:
Vivek Patel
2023-01-25 22:14:46 +05:30
parent f3364228f3
commit 36bc78764c
5 changed files with 36 additions and 0 deletions
+7
View File
@@ -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)
}