From 3e6fd1e47cb3624b05a8bbd699bff68a673c3165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Jerman?= Date: Thu, 12 Aug 2021 15:47:03 +0200 Subject: [PATCH] Tweaks to expr handlers --- store/rdbms/ast_transformer.go | 9 +++++++-- store/sqlite3/sql_functions.go | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/store/rdbms/ast_transformer.go b/store/rdbms/ast_transformer.go index 6a2387d2c..285753cc7 100644 --- a/store/rdbms/ast_transformer.go +++ b/store/rdbms/ast_transformer.go @@ -176,6 +176,11 @@ var ( Result: wrapRes("Number"), Handler: makeGenericFilterFncHandler("YEAR"), }, + "month": { + Args: collectParams(true, "DateTime"), + Result: wrapRes("Number"), + Handler: makeGenericFilterFncHandler("MONTH"), + }, "date": { Args: collectParams(true, "DateTime"), Result: wrapRes("Number"), @@ -194,12 +199,12 @@ var ( "float": { Args: collectParams(true, "Any"), Result: wrapRes("Float"), - Handler: makeGenericTypecastHandler("FLOAT"), + Handler: makeGenericTypecastHandler("DECIMAL"), }, "int": { Args: collectParams(true, "Any"), Result: wrapRes("Float"), - Handler: makeGenericTypecastHandler("INT"), + Handler: makeGenericTypecastHandler("SIGNED"), }, } ) diff --git a/store/sqlite3/sql_functions.go b/store/sqlite3/sql_functions.go index 8193ab6b5..2482b9792 100644 --- a/store/sqlite3/sql_functions.go +++ b/store/sqlite3/sql_functions.go @@ -42,6 +42,16 @@ var ( args = aa[0].Args return }, + "month": func(aa ...rdbms.FormattedASTArgs) (out string, args []interface{}, selfEnclosed bool, err error) { + if len(aa) != 1 { + err = fmt.Errorf("expecting 1 arguments, got %d", len(aa)) + return + } + + out = fmt.Sprintf("STRFTIME('%%m', %s)", aa[0].S) + args = aa[0].Args + return + }, "date": func(aa ...rdbms.FormattedASTArgs) (out string, args []interface{}, selfEnclosed bool, err error) { if len(aa) != 1 { err = fmt.Errorf("expecting 1 arguments, got %d", len(aa)) @@ -52,6 +62,20 @@ var ( args = aa[0].Args return }, + + // - typecast + "float": func(aa ...rdbms.FormattedASTArgs) (out string, args []interface{}, selfEnclosed bool, err error) { + selfEnclosed = true + + if len(aa) != 1 { + err = fmt.Errorf("expecting 1 argument, got %d", len(aa)) + return + } + + out = fmt.Sprintf("CAST(%s AS FLOAT)", aa[0].S) + args = aa[0].Args + return + }, } )