diff --git a/backend/parsers/windmill-parser-sql/src/lib.rs b/backend/parsers/windmill-parser-sql/src/lib.rs index d8ba3bf320..f539419c5a 100644 --- a/backend/parsers/windmill-parser-sql/src/lib.rs +++ b/backend/parsers/windmill-parser-sql/src/lib.rs @@ -298,6 +298,7 @@ pub fn parse_pg_typ(typ: &str) -> Typ { "bigint" => Typ::Int, "bool" | "boolean" => Typ::Bool, "char" | "character" => Typ::Str(None), + "json" | "jsonb" => Typ::Object(vec![]), "smallint" | "int2" => Typ::Int, "smallserial" | "serial2" => Typ::Int, "serial" | "serial4" => Typ::Int, diff --git a/backend/parsers/windmill-parser-wasm/pkg/package.json b/backend/parsers/windmill-parser-wasm/pkg/package.json index cca68ed524..85c6911d7f 100644 --- a/backend/parsers/windmill-parser-wasm/pkg/package.json +++ b/backend/parsers/windmill-parser-wasm/pkg/package.json @@ -3,7 +3,7 @@ "collaborators": [ "Ruben Fiszel " ], - "version": "1.317.1", + "version": "1.318.0", "files": [ "windmill_parser_wasm_bg.wasm", "windmill_parser_wasm.js", diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js index a449594122..b69351023e 100644 --- a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js +++ b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js @@ -97,15 +97,6 @@ function getInt32Memory0() { return cachedInt32Memory0; } -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; @@ -115,6 +106,15 @@ function getStringFromWasm0(ptr, len) { return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); } +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + let cachedFloat64Memory0 = null; function getFloat64Memory0() { @@ -561,10 +561,6 @@ async function __wbg_load(module, imports) { function __wbg_get_imports() { const imports = {}; imports.wbg = {}; - imports.wbg.__wbg_eval_2b43744c6689f0c5 = function(arg0, arg1) { - const ret = eval(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; imports.wbg.__wbindgen_object_drop_ref = function(arg0) { takeObject(arg0); }; @@ -576,6 +572,10 @@ function __wbg_get_imports() { getInt32Memory0()[arg0 / 4 + 1] = len1; getInt32Memory0()[arg0 / 4 + 0] = ptr1; }; + imports.wbg.__wbindgen_error_new = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; imports.wbg.__wbindgen_boolean_get = function(arg0) { const v = getObject(arg0); const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; @@ -597,10 +597,6 @@ function __wbg_get_imports() { const ret = BigInt.asUintN(64, arg0); return addHeapObject(ret); }; - imports.wbg.__wbindgen_error_new = function(arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; imports.wbg.__wbindgen_number_get = function(arg0, arg1) { const obj = getObject(arg1); const ret = typeof(obj) === 'number' ? obj : undefined; @@ -616,6 +612,10 @@ function __wbg_get_imports() { const ret = getObject(arg0) in getObject(arg1); return ret; }; + imports.wbg.__wbg_eval_33c4985197d1feaf = function(arg0, arg1) { + const ret = eval(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { const ret = getObject(arg0) == getObject(arg1); return ret; diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm index ed96ad8286..90d4cb855e 100644 Binary files a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm and b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm differ diff --git a/backend/windmill-worker/src/pg_executor.rs b/backend/windmill-worker/src/pg_executor.rs index a5b43053c7..0a8883c6d7 100644 --- a/backend/windmill-worker/src/pg_executor.rs +++ b/backend/windmill-worker/src/pg_executor.rs @@ -342,6 +342,7 @@ enum PgType { Timestamp(chrono::NaiveDateTime), None(Option), Array(Vec), + Json(serde_json::Value), } impl ToSql for PgType { @@ -367,6 +368,7 @@ impl ToSql for PgType { PgType::Timestamp(ref val) => val.to_sql(ty, out), PgType::None(ref val) => val.to_sql(ty, out), PgType::Array(ref val) => val.to_sql(ty, out), + PgType::Json(ref val) => val.to_sql(ty, out), } } @@ -429,7 +431,7 @@ fn convert_val(value: &Value, arg_t: &String, typ: &Typ) -> windmill_common::err chrono::NaiveDate::parse_from_str(s, "%Y-%m-%dT%H:%M:%S.%3fZ").unwrap_or_default(); Ok(PgType::Date(date)) } - Value::String(s) if arg_t == "time" => { + Value::String(s) if arg_t == "time" || arg_t = "timetz" => { let time = chrono::NaiveTime::parse_from_str(s, "%Y-%m-%dT%H:%M:%S.%3fZ").unwrap_or_default(); Ok(PgType::Time(time)) @@ -439,6 +441,7 @@ fn convert_val(value: &Value, arg_t: &String, typ: &Typ) -> windmill_common::err .unwrap_or_default(); Ok(PgType::Timestamp(datetime)) } + Value::Object(_) => Ok(PgType::Json(value.clone())), Value::String(s) => Ok(PgType::String(s.clone())), _ => Err(Error::ExecutionErr(format!( "Unsupported type in query: {:?} and signature {arg_t:?}", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 37593396e3..995a8fa398 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -53,8 +53,8 @@ "vscode-languageclient": "~9.0.1", "vscode-uri": "~3.0.8", "vscode-ws-jsonrpc": "~3.1.0", - "windmill-parser-wasm": "^1.317.1", - "windmill-sql-datatype-parser-wasm": "^1.317.1", + "windmill-parser-wasm": "^1.318.0", + "windmill-sql-datatype-parser-wasm": "^1.318.0", "y-monaco": "^0.1.4", "y-websocket": "^1.5.0", "yaml": "^2.3.4", @@ -10310,14 +10310,14 @@ } }, "node_modules/windmill-parser-wasm": { - "version": "1.317.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm/-/windmill-parser-wasm-1.317.1.tgz", - "integrity": "sha512-QFXoEenDAY5u0xrUWXuX2a2DcUBI0fEADP4uUttPZ5LgoQ6xKuIeKRaFKE/D7vsjhB2a2tYPpwS6DaaBaA/Dew==" + "version": "1.318.0", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm/-/windmill-parser-wasm-1.318.0.tgz", + "integrity": "sha512-uxiluG0/EIwqwmR4FTppxa2eHZ0hrTijjWmf5L1vJYAgdCotI+glQhjdD2EMNtQRwX9+Pjj8QoVYckrNwJ/2yg==" }, "node_modules/windmill-sql-datatype-parser-wasm": { - "version": "1.317.1", - "resolved": "https://registry.npmjs.org/windmill-sql-datatype-parser-wasm/-/windmill-sql-datatype-parser-wasm-1.317.1.tgz", - "integrity": "sha512-1r6IipZNmpYV6OX+WczxaA7slcA5sLt5f+QsuTStQtUFoxyLDl0otUphWIaSvbKg27ATG4KTtmLQZ2ADdgAzSA==" + "version": "1.318.0", + "resolved": "https://registry.npmjs.org/windmill-sql-datatype-parser-wasm/-/windmill-sql-datatype-parser-wasm-1.318.0.tgz", + "integrity": "sha512-jlRw6abUJi4vDm+7xDSjhb7dvm4tC+lBXv0EEwn52Veadwcl5EB1yGHb9XVqQEfcYr9JU62xfJlN6DoGQmYE/g==" }, "node_modules/wordwrap": { "version": "1.0.0", diff --git a/frontend/package.json b/frontend/package.json index 7c88ce572a..b3bed95644 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -133,8 +133,8 @@ "vscode-languageclient": "~9.0.1", "vscode-uri": "~3.0.8", "vscode-ws-jsonrpc": "~3.1.0", - "windmill-parser-wasm": "^1.317.1", - "windmill-sql-datatype-parser-wasm": "^1.317.1", + "windmill-parser-wasm": "^1.318.0", + "windmill-sql-datatype-parser-wasm": "^1.318.0", "y-monaco": "^0.1.4", "y-websocket": "^1.5.0", "yaml": "^2.3.4", diff --git a/frontend/src/lib/consts.ts b/frontend/src/lib/consts.ts index c45e8f9a7a..fcd9874ddf 100644 --- a/frontend/src/lib/consts.ts +++ b/frontend/src/lib/consts.ts @@ -77,7 +77,11 @@ export const POSTGRES_TYPES = [ 'TIME', 'TIME[]', 'TIMESTAMP', - 'TIMESTAMP[]' + 'TIMESTAMP[]', + 'JSON', + 'JSON[]', + 'JSONB', + 'JSONB[]' ] export const MYSQL_TYPES = [