From 279b1b05175d42e47f67791482ec5524d345387e Mon Sep 17 00:00:00 2001 From: Vivek Patel Date: Fri, 25 Nov 2022 18:13:56 +0530 Subject: [PATCH] Add WEEK ref to base QL handlers Also, added to PSQL, and SQLite ref handler --- .../adapters/rdbms/drivers/postgres/ql.go | 12 +++++++++-- .../rdbms/drivers/postgres/ql_test.go | 5 +++++ .../store/adapters/rdbms/drivers/sqlite/ql.go | 20 +++++++++++++------ .../adapters/rdbms/drivers/sqlite/ql_test.go | 5 +++++ server/store/adapters/rdbms/ql/ref.go | 5 +++++ 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/server/store/adapters/rdbms/drivers/postgres/ql.go b/server/store/adapters/rdbms/drivers/postgres/ql.go index 3f67995ed..cb194506f 100644 --- a/server/store/adapters/rdbms/drivers/postgres/ql.go +++ b/server/store/adapters/rdbms/drivers/postgres/ql.go @@ -66,6 +66,14 @@ var ( ) }, }, + "week": { + Handler: func(args ...exp.Expression) exp.Expression { + return exp.NewSQLFunctionExpression("TO_CHAR", + exp.NewLiteralExpression("?::TIMESTAMPTZ", args[0]), + exp.NewLiteralExpression("?", "IW"), + ) + }, + }, "time": { Handler: func(args ...exp.Expression) exp.Expression { return exp.NewLiteralExpression("DATE_TRUNC('second', ?::TIME)::TIME", args[0]) @@ -117,11 +125,11 @@ var ( }, // functions currently unsupported in PostgreSQL store backend - //"STD": { + // "STD": { // Handler: func(args ...exp.Expression) exp.Expression { // return exp.NewLiteralExpression("") // }, - //}, + // }, }.ExprHandlers() ) diff --git a/server/store/adapters/rdbms/drivers/postgres/ql_test.go b/server/store/adapters/rdbms/drivers/postgres/ql_test.go index 53f57b064..11a2aa7bf 100644 --- a/server/store/adapters/rdbms/drivers/postgres/ql_test.go +++ b/server/store/adapters/rdbms/drivers/postgres/ql_test.go @@ -45,6 +45,11 @@ func TestConverter(t *testing.T) { sql: `$1::DATE`, args: []any{"2022-07-21"}, }, + { + qry: `week('2022-07-21')`, + sql: `TO_CHAR($1::TIMESTAMPTZ, $2)`, + args: []any{"2022-07-21", "IW"}, + }, { qry: `time('2022-07-21 12:41')`, sql: `DATE_TRUNC('second', $1::TIME)::TIME`, diff --git a/server/store/adapters/rdbms/drivers/sqlite/ql.go b/server/store/adapters/rdbms/drivers/sqlite/ql.go index 151f22caf..77df688ee 100644 --- a/server/store/adapters/rdbms/drivers/sqlite/ql.go +++ b/server/store/adapters/rdbms/drivers/sqlite/ql.go @@ -56,6 +56,14 @@ var ( ) }, }, + "week": { + Handler: func(args ...exp.Expression) exp.Expression { + return exp.NewSQLFunctionExpression("STRFTIME", + exp.NewLiteralExpression("'%W'"), + args[0], + ) + }, + }, "datetime": { Handler: func(args ...exp.Expression) exp.Expression { return exp.NewSQLFunctionExpression("DATETIME", args[0]) @@ -81,21 +89,21 @@ var ( }, // functions currently unsupported in SQLite store backend - //"DATE_ADD": { + // "DATE_ADD": { // Handler: func(args ...exp.Expression) exp.Expression { // return exp.NewLiteralExpression("") // }, - //}, - //"DATE_SUB": { + // }, + // "DATE_SUB": { // Handler: func(args ...exp.Expression) exp.Expression { // return exp.NewLiteralExpression("") // }, - //}, - //"STD": { + // }, + // "STD": { // Handler: func(args ...exp.Expression) exp.Expression { // return exp.NewLiteralExpression("") // }, - //}, + // }, }.ExprHandlers() supportedSubstitutions = map[string]bool{ diff --git a/server/store/adapters/rdbms/drivers/sqlite/ql_test.go b/server/store/adapters/rdbms/drivers/sqlite/ql_test.go index 38257aaa3..3e4acf044 100644 --- a/server/store/adapters/rdbms/drivers/sqlite/ql_test.go +++ b/server/store/adapters/rdbms/drivers/sqlite/ql_test.go @@ -45,6 +45,11 @@ func TestConverter(t *testing.T) { sql: `STRFTIME('%Y-%m-%dT00:00:00Z', ?)`, args: []any{"2022-07-21"}, }, + { + qry: `week('2022-07-21')`, + sql: `STRFTIME('%W', ?)`, + args: []any{"2022-07-21"}, + }, { qry: `datetime('2022-07-21')`, sql: `DATETIME(?)`, diff --git a/server/store/adapters/rdbms/ql/ref.go b/server/store/adapters/rdbms/ql/ref.go index 7cf7c3566..b63639a58 100644 --- a/server/store/adapters/rdbms/ql/ref.go +++ b/server/store/adapters/rdbms/ql/ref.go @@ -227,6 +227,11 @@ var ( return exp.NewSQLFunctionExpression("DAY", args[0]) }, }, + "week": { + Handler: func(args ...exp.Expression) exp.Expression { + return exp.NewSQLFunctionExpression("WEEK", args[0]) + }, + }, "date": { Handler: func(args ...exp.Expression) exp.Expression { return exp.NewSQLFunctionExpression("DATE", args[0])