From 3ec7d19fae01ddbc4d8effb733a4650dad912cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Jerman?= Date: Mon, 13 Mar 2023 11:39:23 +0100 Subject: [PATCH] Support the STD agg. fnc. on MySQL databases This was supported in past versions, preserving here. Other drivers currently do not support it (as in the past). --- .../adapters/rdbms/drivers/mysql/dialect.go | 2 +- server/store/adapters/rdbms/drivers/mysql/ql.go | 16 ++++++++++++++++ server/store/adapters/rdbms/ql/ref.go | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 server/store/adapters/rdbms/drivers/mysql/ql.go diff --git a/server/store/adapters/rdbms/drivers/mysql/dialect.go b/server/store/adapters/rdbms/drivers/mysql/dialect.go index 108678f2a..5ca1944a7 100644 --- a/server/store/adapters/rdbms/drivers/mysql/dialect.go +++ b/server/store/adapters/rdbms/drivers/mysql/dialect.go @@ -238,7 +238,7 @@ func (d mysqlDialect) ExprHandler(n *ql.ASTNode, args ...exp.Expression) (expr e return drivers.OpHandlerNotIn(d, n, args...) } - return ql.DefaultRefHandler(n, args...) + return ref2exp.RefHandler(n, args...) } func (d mysqlDialect) ValHandler(n *ql.ASTNode) (out exp.Expression, err error) { diff --git a/server/store/adapters/rdbms/drivers/mysql/ql.go b/server/store/adapters/rdbms/drivers/mysql/ql.go new file mode 100644 index 000000000..3dcef0793 --- /dev/null +++ b/server/store/adapters/rdbms/drivers/mysql/ql.go @@ -0,0 +1,16 @@ +package mysql + +import ( + "github.com/cortezaproject/corteza/server/store/adapters/rdbms/ql" + "github.com/doug-martin/goqu/v9/exp" +) + +var ( + ref2exp = ql.ExprHandlerMap{ + "std": { + Handler: func(args ...exp.Expression) exp.Expression { + return exp.NewSQLFunctionExpression("STD", args[0]) + }, + }, + }.ExprHandlers() +) diff --git a/server/store/adapters/rdbms/ql/ref.go b/server/store/adapters/rdbms/ql/ref.go index 30368f0a2..2014e660f 100644 --- a/server/store/adapters/rdbms/ql/ref.go +++ b/server/store/adapters/rdbms/ql/ref.go @@ -280,6 +280,12 @@ var ( return exp.NewSQLFunctionExpression("MAX", args[0]) }, }, + + "std": { + HandlerE: func(args ...exp.Expression) (exp.Expression, error) { + return nil, fmt.Errorf("STD function not supported on this database") + }, + }, } ) @@ -304,6 +310,10 @@ func (ee ExprHandlerMap) RefHandler(n *ql.ASTNode, args ...exp.Expression) (exp. return nil, fmt.Errorf("unknown ref %q", r) } + if ee[r].Handler != nil && ee[r].HandlerE != nil { + panic("invalid ql ref definition: both Handler and HandlerE are set") + } + if ee[r].Handler != nil { return ee[r].Handler(args...), nil }