Skip to content

Commit ca8c113

Browse files
committed
Add support for jsonb_array_length(), jsonb_pretty(), to_char()
1 parent db77d66 commit ca8c113

4 files changed

Lines changed: 31 additions & 2 deletions

File tree

src/common/common_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package common
22

33
const (
4-
VERSION = "1.4.0"
4+
VERSION = "1.5.0"
55

66
ENV_LOG_LEVEL = "BEMIDB_LOG_LEVEL"
77
ENV_DISABLE_ANONYMOUS_ANALYTICS = "BEMIDB_DISABLE_ANONYMOUS_ANALYTICS"

src/server/query_handler_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,21 @@ func TestHandleQuery(t *testing.T) {
188188
"types": {uint32ToString(pgtype.Int4OID)},
189189
"values": {""},
190190
},
191+
"SELECT jsonb_array_length('[1, 2, 3]'::jsonb)": {
192+
"description": {"jsonb_array_length"},
193+
"types": {uint32ToString(pgtype.XID8OID)},
194+
"values": {"3"},
195+
},
196+
"SELECT jsonb_pretty('{\"key\": \"value\"}'::JSONB)": {
197+
"description": {"jsonb_pretty"},
198+
"types": {uint32ToString(pgtype.TextOID)},
199+
"values": {"{\n \"key\": \"value\"\n}"},
200+
},
201+
"SELECT TO_CHAR('2024-01-15 14:30:00'::timestamp, 'YYYY-MM-DD')": {
202+
"description": {"to_char"},
203+
"types": {uint32ToString(pgtype.TextOID)},
204+
"values": {"2024-01-15"},
205+
},
191206
})
192207
})
193208

src/server/query_remapper_function.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ func CreatePgCatalogMacroQueries(config *Config) []string {
4141
ELSE json_extract_path_text(from_json, path_elems)::varchar
4242
END`,
4343
`CREATE MACRO jsonb_object_agg(key, value) AS to_json(map(array_agg(key), array_agg(value)))`,
44+
`CREATE MACRO jsonb_array_length(json) AS json_array_length(json)`,
45+
`CREATE MACRO jsonb_pretty(json) AS json_pretty(json)`,
4446
`CREATE MACRO json_build_object(k1, v1) AS json_object(k1, v1),
4547
(k1, v1, k2, v2) AS json_object(k1, v1, k2, v2),
4648
(k1, v1, k2, v2, k3, v3) AS json_object(k1, v1, k2, v2, k3, v3),
@@ -50,6 +52,18 @@ func CreatePgCatalogMacroQueries(config *Config) []string {
5052
WHEN 1 THEN len(arr)
5153
ELSE NULL
5254
END`,
55+
`CREATE MACRO to_char(timestamp, text) AS
56+
CASE text
57+
WHEN 'YYYY-MM-DD' THEN strftime(timestamp, '%Y-%m-%d')
58+
WHEN 'YYYY-MM-DD HH24:MI:SS' THEN strftime(timestamp, '%Y-%m-%d %H:%M:%S')
59+
WHEN 'MM/DD/YYYY' THEN strftime(timestamp, '%m/%d/%Y')
60+
WHEN 'DD-MON-YYYY' THEN strftime(timestamp, '%d-%b-%Y')
61+
WHEN 'HH24:MI:SS' THEN strftime(timestamp, '%H:%M:%S')
62+
WHEN 'YYYY' THEN strftime(timestamp, '%Y')
63+
WHEN 'MM' THEN strftime(timestamp, '%m')
64+
WHEN 'DD' THEN strftime(timestamp, '%d')
65+
ELSE strftime(timestamp, text)
66+
END`,
5367

5468
// Table functions
5569
"CREATE MACRO pg_is_in_recovery() AS TABLE SELECT false AS pg_is_in_recovery",

src/server/response_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func (responseHandler *ResponseHandler) RowValuePointer(col *sql.ColumnType) int
120120
return new(sql.NullInt32)
121121
case "int64", "*big.Int":
122122
return new(sql.NullInt64)
123-
case "float64", "float32":
123+
case "uint64", "float64", "float32":
124124
return new(sql.NullFloat64)
125125
case "string":
126126
// return a *sql.NullString so Scan writes into the right type

0 commit comments

Comments
 (0)