@malloydata/render 0.0.226-dev250113204439 → 0.0.226-dev250113232339
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module/index.mjs
CHANGED
|
@@ -2728,8 +2728,10 @@ ${" ".repeat(this.parseCursor)}^`;
|
|
|
2728
2728
|
if (o) {
|
|
2729
2729
|
r = !1;
|
|
2730
2730
|
let u = o[0];
|
|
2731
|
+
const a = this.parseCursor;
|
|
2731
2732
|
if (this.parseCursor += u.length, i !== "space") {
|
|
2732
2733
|
i[0] === "q" && (u = u.slice(1, -1)), yield {
|
|
2734
|
+
cursor: a,
|
|
2733
2735
|
type: i === "char" ? u : i,
|
|
2734
2736
|
text: u
|
|
2735
2737
|
};
|
|
@@ -2738,7 +2740,7 @@ ${" ".repeat(this.parseCursor)}^`;
|
|
|
2738
2740
|
}
|
|
2739
2741
|
}
|
|
2740
2742
|
if (r) {
|
|
2741
|
-
yield { type: "unexpected token", text: e };
|
|
2743
|
+
yield { cursor: this.parseCursor, type: "unexpected token", text: e };
|
|
2742
2744
|
return;
|
|
2743
2745
|
}
|
|
2744
2746
|
}
|
|
@@ -2996,50 +2998,45 @@ class pce extends JQ.TinyParser {
|
|
|
2996
2998
|
return e.text.toUpperCase();
|
|
2997
2999
|
}
|
|
2998
3000
|
typeDef() {
|
|
2999
|
-
const e = this.
|
|
3000
|
-
let
|
|
3001
|
-
if (
|
|
3002
|
-
this.next(),
|
|
3003
|
-
else if (
|
|
3004
|
-
this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"),
|
|
3005
|
-
else if (aO[
|
|
3006
|
-
|
|
3007
|
-
else if (
|
|
3008
|
-
for (this.next("("),
|
|
3009
|
-
const
|
|
3010
|
-
if (
|
|
3011
|
-
const
|
|
3012
|
-
|
|
3001
|
+
const e = this.next("id"), n = this.sqlID(e);
|
|
3002
|
+
let r;
|
|
3003
|
+
if (n === "VARCHAR" && this.peek().type === "size" && this.next(), (n === "DECIMAL" || n === "NUMERIC") && this.peek().type === "precision")
|
|
3004
|
+
this.next(), r = { type: "number", numberType: "float" };
|
|
3005
|
+
else if (n === "TIMESTAMP")
|
|
3006
|
+
this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"), r = { type: "timestamp" };
|
|
3007
|
+
else if (aO[n])
|
|
3008
|
+
r = aO[n];
|
|
3009
|
+
else if (n === "STRUCT")
|
|
3010
|
+
for (this.next("("), r = { type: "record", fields: [] }; ; ) {
|
|
3011
|
+
const i = this.next();
|
|
3012
|
+
if (i.type === "qsingle" || i.type === "qdouble" || i.type === "id") {
|
|
3013
|
+
const s = this.typeDef();
|
|
3014
|
+
r.fields.push((0, jx.mkFieldDef)(s, this.unquoteName(i)));
|
|
3013
3015
|
} else {
|
|
3014
|
-
if (
|
|
3016
|
+
if (i.type !== ")")
|
|
3015
3017
|
throw this.parseError("Expected identifier or ) to end STRUCT");
|
|
3016
3018
|
break;
|
|
3017
3019
|
}
|
|
3018
3020
|
this.peek().type === "," && this.next();
|
|
3019
3021
|
}
|
|
3020
|
-
else if (
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
if (s.type === "arrayOf" || s.type === "eof")
|
|
3024
|
-
break;
|
|
3025
|
-
this.next();
|
|
3026
|
-
}
|
|
3027
|
-
i = {
|
|
3022
|
+
else if (e.type === "id") {
|
|
3023
|
+
let i = e.cursor + e.text.length;
|
|
3024
|
+
this.peek().type === "precision" && this.next(), this.peek().type === "eof" && (i = this.input.length), r = {
|
|
3028
3025
|
type: "sql native",
|
|
3029
|
-
rawType: this.input.slice(e,
|
|
3026
|
+
rawType: this.input.slice(e.cursor, i)
|
|
3030
3027
|
};
|
|
3031
3028
|
} else
|
|
3032
3029
|
throw this.parseError("Could not understand type");
|
|
3033
3030
|
for (; this.peek().type === "arrayOf"; )
|
|
3034
|
-
this.next(),
|
|
3031
|
+
this.next(), r.type === "record" ? r = {
|
|
3035
3032
|
type: "array",
|
|
3036
3033
|
elementTypeDef: { type: "record_element" },
|
|
3037
|
-
fields:
|
|
3038
|
-
} :
|
|
3034
|
+
fields: r.fields
|
|
3035
|
+
} : r = {
|
|
3039
3036
|
type: "array",
|
|
3040
|
-
elementTypeDef:
|
|
3037
|
+
elementTypeDef: r
|
|
3041
3038
|
};
|
|
3042
|
-
return
|
|
3039
|
+
return r;
|
|
3043
3040
|
}
|
|
3044
3041
|
}
|
|
3045
3042
|
(function(t) {
|
package/dist/module/index.umd.js
CHANGED
|
@@ -37,7 +37,7 @@ $$ LANGUAGE SQL;
|
|
|
37
37
|
) a
|
|
38
38
|
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,CT.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,CT.isSamplingRows)(n))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM_ROWS(${n.rows}))`;if((0,CT.isSamplingPercent)(n))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${n.percent}))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,j$.expandOverrideMap)(Z0e.POSTGRES_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,j$.expandBlueprintMap)(X0e.POSTGRES_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}sqlTypeToMalloyType(e){var n,r,i;const s=(r=(n=e.match(/^([\w\s]+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:e;return(i=tce[s.trim().toLowerCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlLiteralRecord(e){const n=[];for(const[r,i]of Object.entries(e.kids))n.push(`'${r}',${i.sql}`);return`JSONB_BUILD_OBJECT(${n.join(", ")})`}sqlLiteralArray(e){return"JSONB_BUILD_ARRAY("+e.kids.values.map(r=>r.sql).join(",")+")"}}my.PostgresDialect=nce,function(t){var e=T&&T.__createBinding||(Object.create?function(r,i,s,o){o===void 0&&(o=s);var u=Object.getOwnPropertyDescriptor(i,s);(!u||("get"in u?!i.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,o,u)}:function(r,i,s,o){o===void 0&&(o=s),r[o]=i[s]}),n=T&&T.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(my,t)}(_T);var ST={},_y={},vy={};Object.defineProperty(vy,"__esModule",{value:!0}),vy.DUCKDB_DIALECT_FUNCTIONS=void 0;const q$=et,rce={takes:{value:{array:{generic:"T"}},index:"number"},generic:{T:["any"]},returns:{generic:"T"},impl:{sql:"list_extract(${value}, ${index})"}},ice={takes:{date_value:["date","timestamp"]},returns:"string",impl:{function:"DAYNAME"}},sce={takes:{part:"string",interval:{sql_native:"interval"}},returns:"number",impl:{function:"DATE_PART"}},oce={takes:{seconds:"number"},returns:{sql_native:"interval"},impl:{function:"TO_SECONDS"}},uce={takes:{epoch_seconds:"number"},returns:"timestamp",impl:{function:"TO_TIMESTAMP"}},ace={takes:{value:{dimension:"any"}},returns:{measure:"number"},impl:{function:"APPROX_COUNT_DISTINCT"},isSymmetric:!0},bT={default_separator:{takes:{value:{dimension:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{sql:"STRING_AGG(${value}${order_by:})",defaultOrderByArgIndex:0}},with_separator:{takes:{value:{dimension:"string"},separator:{literal:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{sql:"STRING_AGG(${value}, ${separator}${order_by:})",defaultOrderByArgIndex:0}}},lce={default_separator:{...bT.default_separator,isSymmetric:!0,impl:{sql:"STRING_AGG(DISTINCT ${value}${order_by:})",defaultOrderByArgIndex:0}},with_separator:{...bT.with_separator,isSymmetric:!0,impl:{sql:"STRING_AGG(DISTINCT ${value}, ${separator}${order_by:})",defaultOrderByArgIndex:0}}};vy.DUCKDB_DIALECT_FUNCTIONS={list_extract:rce,count_approx:ace,dayname:ice,to_timestamp:uce,string_agg:bT,string_agg_distinct:lce,to_seconds:oce,date_part:sce,...(0,q$.def)("repeat",{str:"string",n:"number"},"string"),...(0,q$.def)("reverse",{str:"string"},"string")};var Cy={};Object.defineProperty(Cy,"__esModule",{value:!0}),Cy.DUCKDB_MALLOY_STANDARD_OVERLOADS=void 0;function H$(t){return"CASE WHEN LEN(LIST_FILTER([${...values}], x -> x is null)) > 0 THEN NULL ELSE "+t+"(${...values}) END"}Cy.DUCKDB_MALLOY_STANDARD_OVERLOADS={byte_length:{sql:"(BIT_LENGTH(${value}) / 8)"},div:{sql:"CASE WHEN ${dividend} / ${divisor} < 0 THEN CEIL(${dividend} / ${divisor}) ELSE FLOOR(${dividend} / ${divisor}) END"},ends_with:{sql:"COALESCE(SUFFIX(${value}, ${suffix}), false)"},greatest:{sql:H$("GREATEST")},is_inf:{sql:"COALESCE(ISINF(${value}), false)"},is_nan:{sql:"COALESCE(ISNAN(${value}), false)"},log:{sql:"(LN(${value}) / LN(${base}))"},least:{sql:H$("LEAST")},rand:{function:"RANDOM"},replace:{regular_expression:{sql:"REGEXP_REPLACE(${value}, ${pattern}, ${replacement}, 'g')"}},trunc:{to_integer:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value}) ELSE FLOOR(${value}) END"},to_precision:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value} * POW(10, ${precision})) / POW(10, ${precision}) ELSE FLOOR(${value} * POW(10, ${precision})) / POW(10, ${precision}) END"}},unicode:{sql:"CASE WHEN ${value} = '' THEN 0 ELSE UNICODE(${value}) END"}};var fc={};Object.defineProperty(fc,"__esModule",{value:!0}),fc.TinyParser=fc.TinyParseError=void 0;class z$ extends Error{}fc.TinyParseError=z$;class cce{constructor(e,n){this.input=e,this.parseCursor=0,this.tokenMap=n??{space:/^\s+/,char:/^[,:[\]()-]/,id:/^\w+/,qstr:/^"\w+"/},this.tokens=this.tokenize(e)}parseError(e){const n=`INTERNAL ERROR parsing schema: ${e}
|
|
39
39
|
${this.input}
|
|
40
|
-
${" ".repeat(this.parseCursor)}^`;return new z$(n)}peek(){if(this.lookAhead)return this.lookAhead;{const{value:e}=this.tokens.next(),n=e??{type:"eof",text:""};return this.lookAhead=n,n}}getNext(){var e;const n=(e=this.lookAhead)!==null&&e!==void 0?e:this.peek();return this.lookAhead=void 0,n}next(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.type!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected token type '${r}'`)}nextText(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.text!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected '${r}'`)}skipTo(e){for(;;){const n=this.next();if(n.type==="eof")throw this.parseError(`Expected token '${e}`);if(n.type===e)return}}dump(){const e=this.parseCursor,n=[...this.tokenize(this.input)];return this.parseCursor=e,n}*tokenize(e){const n=this.tokenMap;for(;this.parseCursor<e.length;){let r=!0;for(const i in n){const o=e.slice(this.parseCursor).match(n[i]);if(o){r=!1;let u=o[0];if(this.parseCursor+=u.length,i!=="space"){i[0]==="q"&&(u=u.slice(1,-1)),yield{type:i==="char"?u:i,text:u};break}}}if(r){yield{type:"unexpected token",text:e};return}}}}fc.TinyParser=cce,Object.defineProperty(_y,"__esModule",{value:!0}),_y.DuckDBDialect=void 0;const Tx=We,fce=Ot,Q$=El,xce=ml,dce=yy,hce=vy,pce=Cy,G$=fc,W$="-- hack: split on this",TT={BIGINT:{type:"number",numberType:"integer"},INTEGER:{type:"number",numberType:"integer"},TINYINT:{type:"number",numberType:"integer"},SMALLINT:{type:"number",numberType:"integer"},UBIGINT:{type:"number",numberType:"integer"},UINTEGER:{type:"number",numberType:"integer"},UTINYINT:{type:"number",numberType:"integer"},USMALLINT:{type:"number",numberType:"integer"},HUGEINT:{type:"number",numberType:"integer"},DOUBLE:{type:"number",numberType:"float"},FLOAT:{type:"number",numberType:"float"},VARCHAR:{type:"string"},DATE:{type:"date"},TIMESTAMP:{type:"timestamp"},TIME:{type:"string"},DECIMAL:{type:"number",numberType:"float"},BOOLEAN:{type:"boolean"}};class gce extends dce.PostgresBase{constructor(){super(...arguments),this.name="duckdb",this.experimental=!1,this.defaultNumberType="DOUBLE",this.defaultDecimalType="NUMERIC",this.hasFinalStage=!1,this.divisionIsInteger=!0,this.supportsSumDistinctFunction=!0,this.unnestWithNumbers=!1,this.defaultSampling={rows:5e4},this.supportUnnestArrayAgg=!0,this.supportsAggDistinct=!0,this.supportsCTEinCoorelatedSubQueries=!0,this.dontUnionIndex=!0,this.supportsQualify=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.supportsCountApprox=!0}get udfPrefix(){return`__udf${Math.floor(Math.random()*1e5)}`}quoteTablePath(e){return e.match(/[/*:]/)?`'${e}'`:e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT UNNEST(GENERATE_SERIES(0,${e},1)) as group_set ) as group_set`}sqlAnyValue(e,n){return`FIRST(${n}) FILTER (WHERE ${n} IS NOT NULL)`}sqlLiteralNumber(e){return e.includes(".")?`${e}::${this.defaultNumberType}`:e}mapFields(e){return e.join(", ")}sqlAggregateTurtle(e,n,r,i){let s="";return i!==void 0&&(s+=`[1:${i}]`),`COALESCE(LIST({${n.map(u=>`
|
|
40
|
+
${" ".repeat(this.parseCursor)}^`;return new z$(n)}peek(){if(this.lookAhead)return this.lookAhead;{const{value:e}=this.tokens.next(),n=e??{type:"eof",text:""};return this.lookAhead=n,n}}getNext(){var e;const n=(e=this.lookAhead)!==null&&e!==void 0?e:this.peek();return this.lookAhead=void 0,n}next(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.type!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected token type '${r}'`)}nextText(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.text!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected '${r}'`)}skipTo(e){for(;;){const n=this.next();if(n.type==="eof")throw this.parseError(`Expected token '${e}`);if(n.type===e)return}}dump(){const e=this.parseCursor,n=[...this.tokenize(this.input)];return this.parseCursor=e,n}*tokenize(e){const n=this.tokenMap;for(;this.parseCursor<e.length;){let r=!0;for(const i in n){const o=e.slice(this.parseCursor).match(n[i]);if(o){r=!1;let u=o[0];const a=this.parseCursor;if(this.parseCursor+=u.length,i!=="space"){i[0]==="q"&&(u=u.slice(1,-1)),yield{cursor:a,type:i==="char"?u:i,text:u};break}}}if(r){yield{cursor:this.parseCursor,type:"unexpected token",text:e};return}}}}fc.TinyParser=cce,Object.defineProperty(_y,"__esModule",{value:!0}),_y.DuckDBDialect=void 0;const Tx=We,fce=Ot,Q$=El,xce=ml,dce=yy,hce=vy,pce=Cy,G$=fc,W$="-- hack: split on this",TT={BIGINT:{type:"number",numberType:"integer"},INTEGER:{type:"number",numberType:"integer"},TINYINT:{type:"number",numberType:"integer"},SMALLINT:{type:"number",numberType:"integer"},UBIGINT:{type:"number",numberType:"integer"},UINTEGER:{type:"number",numberType:"integer"},UTINYINT:{type:"number",numberType:"integer"},USMALLINT:{type:"number",numberType:"integer"},HUGEINT:{type:"number",numberType:"integer"},DOUBLE:{type:"number",numberType:"float"},FLOAT:{type:"number",numberType:"float"},VARCHAR:{type:"string"},DATE:{type:"date"},TIMESTAMP:{type:"timestamp"},TIME:{type:"string"},DECIMAL:{type:"number",numberType:"float"},BOOLEAN:{type:"boolean"}};class gce extends dce.PostgresBase{constructor(){super(...arguments),this.name="duckdb",this.experimental=!1,this.defaultNumberType="DOUBLE",this.defaultDecimalType="NUMERIC",this.hasFinalStage=!1,this.divisionIsInteger=!0,this.supportsSumDistinctFunction=!0,this.unnestWithNumbers=!1,this.defaultSampling={rows:5e4},this.supportUnnestArrayAgg=!0,this.supportsAggDistinct=!0,this.supportsCTEinCoorelatedSubQueries=!0,this.dontUnionIndex=!0,this.supportsQualify=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.supportsCountApprox=!0}get udfPrefix(){return`__udf${Math.floor(Math.random()*1e5)}`}quoteTablePath(e){return e.match(/[/*:]/)?`'${e}'`:e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT UNNEST(GENERATE_SERIES(0,${e},1)) as group_set ) as group_set`}sqlAnyValue(e,n){return`FIRST(${n}) FILTER (WHERE ${n} IS NOT NULL)`}sqlLiteralNumber(e){return e.includes(".")?`${e}::${this.defaultNumberType}`:e}mapFields(e){return e.join(", ")}sqlAggregateTurtle(e,n,r,i){let s="";return i!==void 0&&(s+=`[1:${i}]`),`COALESCE(LIST({${n.map(u=>`
|
|
41
41
|
${u.sqlOutputName}: ${u.sqlExpression}`).join(", ")}} ${r}) FILTER (WHERE group_set=${e})${s},[])`}sqlAnyValueTurtle(e,n){const r=n.map(i=>`${i.sqlExpression} as ${i.sqlOutputName}`).join(", ");return`ANY_VALUE(CASE WHEN group_set=${e} THEN STRUCT_PACK(${r}))`}sqlAnyValueLastTurtle(e,n,r){return`MAX(CASE WHEN group_set=${n} THEN ${e} END) as ${r}`}sqlCoaleseMeasuresInline(e,n){const r=n.map(s=>`${s.sqlOutputName}: ${s.sqlExpression} `).join(", "),i=n.map(s=>`${s.sqlOutputName}: NULL`).join(", ");return`COALESCE(FIRST({${r}}) FILTER(WHERE group_set=${e}), {${i}})`}sqlUnnestAlias(e,n,r,i,s,o){return this.unnestWithNumbers?`LEFT JOIN (select UNNEST(generate_series(1,
|
|
42
42
|
${o?"100000":`array_length(${e})`},
|
|
43
43
|
1)) as __row_id) as ${n} ON ${n}.__row_id <= array_length(${e})`:i?`LEFT JOIN LATERAL (SELECT UNNEST(GENERATE_SERIES(1, length(${e}),1)) as __row_id, UNNEST(${e}), 1 as ignoreme) as ${n}_outer(__row_id, ${n},ignoreme) ON ${n}_outer.ignoreme=1`:`LEFT JOIN LATERAL (SELECT UNNEST(${e}), 1 as ignoreme) as ${n}_outer(${n},ignoreme) ON ${n}_outer.ignoreme=1`}sqlSumDistinctHashedKey(e){return"uses sumDistinctFunction, should not be called"}sqlGenerateUUID(){return"GEN_RANDOM_UUID()"}sqlDateToString(e){return`(${e})::date::varchar`}sqlFieldReference(e,n,r,i){return!this.unnestWithNumbers&&r==="__row_id"?`${e}_outer.__row_id`:n==="array[scalar]"?e:`${e}.${this.sqlMaybeQuoteIdentifier(r)}`}sqlUnnestPipelineHead(e,n){let r=n;return e&&(r=`[${r}]`),`(SELECT UNNEST(${r}) as base)`}sqlCreateFunction(e,n){return`DROP MACRO IF EXISTS ${e};
|
|
@@ -57,7 +57,7 @@ ${W$}
|
|
|
57
57
|
FROM (
|
|
58
58
|
SELECT UNNEST(list(distinct {key:${e}, ${n.map((i,s)=>`val${s}: ${i}`).join(",")}})) a
|
|
59
59
|
)
|
|
60
|
-
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,Tx.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,Tx.isSamplingRows)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.rows})`;if((0,Tx.isSamplingPercent)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.percent} PERCENT (bernoulli))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,Q$.expandOverrideMap)(pce.DUCKDB_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,Q$.expandBlueprintMap)(hce.DUCKDB_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}parseDuckDBType(e){const n=new mce(e);try{return n.typeDef()}catch(r){if(r instanceof G$.TinyParseError)return{type:"sql native",rawType:e};throw r}}sqlTypeToMalloyType(e){var n,r,i;const s=e.replace(/^DECIMAL\(\d+,\d+\)/g,"DECIMAL"),o=(r=(n=s.match(/^(\w+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:s;return(i=TT[o.toUpperCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e.toLowerCase()}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlAlterTimeExpr(e){let n=e.units,r=e.kids.delta.sql;n==="quarter"?(n="month",r=`${r}*3`):n==="week"&&(n="day",r=`${r}*7`);const i=`INTERVAL (${r}) ${n}`;return`${e.kids.base.sql} ${e.op} ${i}`}sqlRegexpMatch(e){return`REGEXP_MATCHES(${e.kids.expr.sql},${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const n=e.kids.left,r=e.kids.right;let i=n.sql||"",s=r.sql||"";return(0,xce.inDays)(e.units)||(Tx.TD.isDate(n.typeDef)&&(i=`${i}::TIMESTAMP`),Tx.TD.isDate(r.typeDef)&&(s=`${s}::TIMESTAMP`)),`DATE_SUB('${e.units}', ${i}, ${s})`}sqlLiteralRecord(e){return"{"+Object.entries(e.kids).map(([r,i])=>`${this.sqlMaybeQuoteIdentifier(r)}:${i.sql}`).join(",")+"}"}}_y.DuckDBDialect=gce;class mce extends G$.TinyParser{constructor(e){super(e,{space:/^\s+/,qsingle:/^'([^']|'')*'/,qdouble:/^"([^"]|"")*"/,size:/^\(\d+\)/,precision:/^\(\d+,\d+\)/,arrayOf:/^\[]/,char:/^[,:[\]()-]/,id:/^\w+/})}unquoteName(e){return e.type==="qsingle"?e.text.replace("''",""):e.type==="qdouble"?e.text.replace('""',""):e.text}sqlID(e){return e.text.toUpperCase()}typeDef(){const e=this.
|
|
60
|
+
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,Tx.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,Tx.isSamplingRows)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.rows})`;if((0,Tx.isSamplingPercent)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.percent} PERCENT (bernoulli))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,Q$.expandOverrideMap)(pce.DUCKDB_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,Q$.expandBlueprintMap)(hce.DUCKDB_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}parseDuckDBType(e){const n=new mce(e);try{return n.typeDef()}catch(r){if(r instanceof G$.TinyParseError)return{type:"sql native",rawType:e};throw r}}sqlTypeToMalloyType(e){var n,r,i;const s=e.replace(/^DECIMAL\(\d+,\d+\)/g,"DECIMAL"),o=(r=(n=s.match(/^(\w+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:s;return(i=TT[o.toUpperCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e.toLowerCase()}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlAlterTimeExpr(e){let n=e.units,r=e.kids.delta.sql;n==="quarter"?(n="month",r=`${r}*3`):n==="week"&&(n="day",r=`${r}*7`);const i=`INTERVAL (${r}) ${n}`;return`${e.kids.base.sql} ${e.op} ${i}`}sqlRegexpMatch(e){return`REGEXP_MATCHES(${e.kids.expr.sql},${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const n=e.kids.left,r=e.kids.right;let i=n.sql||"",s=r.sql||"";return(0,xce.inDays)(e.units)||(Tx.TD.isDate(n.typeDef)&&(i=`${i}::TIMESTAMP`),Tx.TD.isDate(r.typeDef)&&(s=`${s}::TIMESTAMP`)),`DATE_SUB('${e.units}', ${i}, ${s})`}sqlLiteralRecord(e){return"{"+Object.entries(e.kids).map(([r,i])=>`${this.sqlMaybeQuoteIdentifier(r)}:${i.sql}`).join(",")+"}"}}_y.DuckDBDialect=gce;class mce extends G$.TinyParser{constructor(e){super(e,{space:/^\s+/,qsingle:/^'([^']|'')*'/,qdouble:/^"([^"]|"")*"/,size:/^\(\d+\)/,precision:/^\(\d+,\d+\)/,arrayOf:/^\[]/,char:/^[,:[\]()-]/,id:/^\w+/})}unquoteName(e){return e.type==="qsingle"?e.text.replace("''",""):e.type==="qdouble"?e.text.replace('""',""):e.text}sqlID(e){return e.text.toUpperCase()}typeDef(){const e=this.next("id"),n=this.sqlID(e);let r;if(n==="VARCHAR"&&this.peek().type==="size"&&this.next(),(n==="DECIMAL"||n==="NUMERIC")&&this.peek().type==="precision")this.next(),r={type:"number",numberType:"float"};else if(n==="TIMESTAMP")this.peek().text==="WITH"&&this.nextText("WITH","TIME","ZONE"),r={type:"timestamp"};else if(TT[n])r=TT[n];else if(n==="STRUCT")for(this.next("("),r={type:"record",fields:[]};;){const i=this.next();if(i.type==="qsingle"||i.type==="qdouble"||i.type==="id"){const s=this.typeDef();r.fields.push((0,Tx.mkFieldDef)(s,this.unquoteName(i)))}else{if(i.type!==")")throw this.parseError("Expected identifier or ) to end STRUCT");break}this.peek().type===","&&this.next()}else if(e.type==="id"){let i=e.cursor+e.text.length;this.peek().type==="precision"&&this.next(),this.peek().type==="eof"&&(i=this.input.length),r={type:"sql native",rawType:this.input.slice(e.cursor,i)}}else throw this.parseError("Could not understand type");for(;this.peek().type==="arrayOf";)this.next(),r.type==="record"?r={type:"array",elementTypeDef:{type:"record_element"},fields:r.fields}:r={type:"array",elementTypeDef:r};return r}}(function(t){var e=T&&T.__createBinding||(Object.create?function(r,i,s,o){o===void 0&&(o=s);var u=Object.getOwnPropertyDescriptor(i,s);(!u||("get"in u?!i.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,o,u)}:function(r,i,s,o){o===void 0&&(o=s),r[o]=i[s]}),n=T&&T.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(_y,t)})(ST);var RT={},Sy={},by={};Object.defineProperty(by,"__esModule",{value:!0}),by.SNOWFLAKE_DIALECT_FUNCTIONS=void 0;const Cs=et,yce={generic:"T"},Ty={node:"aggregate_order_by",prefix:" WITHIN GROUP(",suffix:")"},OT={default_separator:{takes:{value:{dimension:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{expr:(0,Cs.sql)`LISTAGG(${(0,Cs.arg)("value")}, ',')${Ty}`}},with_separator:{takes:{value:{dimension:"string"},separator:{literal:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{expr:(0,Cs.sql)`LISTAGG(${(0,Cs.arg)("value")}, ${(0,Cs.arg)("separator")})${Ty}`}}},Ece={default_separator:{...OT.default_separator,isSymmetric:!0,impl:{expr:(0,Cs.sql)`LISTAGG(DISTINCT ${(0,Cs.arg)("value")}, ',')${Ty}`}},with_separator:{...OT.with_separator,isSymmetric:!0,impl:{expr:(0,Cs.sql)`LISTAGG(DISTINCT ${(0,Cs.arg)("value")}, ${(0,Cs.arg)("separator")})${Ty}`}}};by.SNOWFLAKE_DIALECT_FUNCTIONS={string_agg:OT,string_agg_distinct:Ece,hll_accumulate:{default:{takes:{value:{dimension:yce}},returns:{measure:{sql_native:"hyperloglog"}},generic:{T:["string","number"]},isSymmetric:!0,impl:{function:"hll_accumulate"}}},hll_combine:{takes:{value:{sql_native:"hyperloglog"}},returns:{measure:{sql_native:"hyperloglog"}},impl:{function:"hll_combine"},isSymmetric:!0},hll_estimate:{takes:{value:{sql_native:"hyperloglog"}},returns:{dimension:"number"},impl:{function:"hll_estimate"}},hll_export:{takes:{value:{sql_native:"hyperloglog"}},returns:{dimension:{sql_native:"bytes"}},impl:{function:"hll_export"}},hll_import:{takes:{value:{sql_native:"bytes"}},returns:{dimension:{sql_native:"hyperloglog"}},impl:{function:"hll_import"}},...(0,Cs.def)("repeat",{str:"string",n:"number"},"string"),...(0,Cs.def)("reverse",{str:"string"},"string")};var Ry={};Object.defineProperty(Ry,"__esModule",{value:!0}),Ry.SNOWFLAKE_MALLOY_STANDARD_OVERLOADS=void 0,Ry.SNOWFLAKE_MALLOY_STANDARD_OVERLOADS={chr:{sql:"COALESCE(CHR(${value}), '')"},div:{sql:"CASE WHEN DIV0(${dividend}, ${divisor}) < 0 THEN CEIL(DIV0(${dividend}, ${divisor})) ELSE FLOOR(DIV0(${dividend}, ${divisor})) END"},is_inf:{sql:"COALESCE(${value} = 'inf'::FLOAT OR ${value} = '-inf'::FLOAT, false)"},is_nan:{sql:"COALESCE(${value} = 'NAN'::FLOAT, false)"},length:{function:"LENGTH"},byte_length:{sql:"CEIL(BIT_LENGTH(${value}) / 8)"},log:{sql:"LOG(${base}, ${value})"},rand:{sql:"UNIFORM(0::FLOAT, 1::FLOAT, RANDOM())"},regexp_extract:{sql:"REGEXP_SUBSTR(${value}, ${pattern}, 1, 1, 'e')"},starts_with:{sql:"COALESCE(STARTSWITH(${value}, ${prefix}), false)"},ends_with:{sql:"COALESCE(ENDSWITH(${value}, ${suffix}), false)"},strpos:{sql:"POSITION(${search_string}, ${test_string})"},trunc:{to_integer:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value}) ELSE FLOOR(${value}) END"},to_precision:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value} * POW(10, ${precision})) / POW(10, ${precision}) ELSE FLOOR(${value} * POW(10, ${precision})) / POW(10, ${precision}) END"}}},Object.defineProperty(Sy,"__esModule",{value:!0}),Sy.SnowflakeDialect=void 0;const Ace=Ot,zi=We,V$=El,O2=ml,_ce=by,vce=Ry,Cce={day_of_week:"dayofweek",day_of_year:"dayofyear"},Sce={varchar:{type:"string"},text:{type:"string"},string:{type:"string"},char:{type:"string"},character:{type:"string"},nvarchar:{type:"string"},nvarchar2:{type:"string"},"char varying":{type:"string"},"nchar varying":{type:"string"},number:{type:"number",numberType:"integer"},numeric:{type:"number",numberType:"integer"},decimal:{type:"number",numberType:"integer"},dec:{type:"number",numberType:"integer"},integer:{type:"number",numberType:"integer"},int:{type:"number",numberType:"integer"},bigint:{type:"number",numberType:"integer"},smallint:{type:"number",numberType:"integer"},tinyint:{type:"number",numberType:"integer"},byteint:{type:"number",numberType:"integer"},float:{type:"number",numberType:"float"},float4:{type:"number",numberType:"float"},float8:{type:"number",numberType:"float"},double:{type:"number",numberType:"float"},"double precision":{type:"number",numberType:"float"},real:{type:"number",numberType:"float"},boolean:{type:"boolean"},date:{type:"date"},timestamp:{type:"timestamp"},timestampntz:{type:"timestamp"},timestamp_ntz:{type:"timestamp"},"timestamp without time zone":{type:"timestamp"},timestamptz:{type:"timestamp"},timestamp_tz:{type:"timestamp"},"timestamp with time zone":{type:"timestamp"}};class bce extends O2.Dialect{constructor(){super(...arguments),this.name="snowflake",this.experimental=!1,this.defaultNumberType="NUMBER",this.defaultDecimalType="NUMBER",this.udfPrefix="__udf",this.hasFinalStage=!1,this.divisionIsInteger=!1,this.supportsSumDistinctFunction=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.defaultSampling={rows:5e4},this.supportsHyperLogLog=!0,this.unnestWithNumbers=!1,this.supportUnnestArrayAgg=!1,this.supportsAggDistinct=!1,this.supportsCTEinCoorelatedSubQueries=!1,this.dontUnionIndex=!1,this.supportsQualify=!1,this.supportsPipelinesInViews=!1,this.supportsComplexFilteredSources=!1}quoteTablePath(e){return e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT index as group_set FROM TABLE(FLATTEN(ARRAY_GENERATE_RANGE(0, ${e+1}))))`}sqlAnyValue(e,n){return`(ARRAY_AGG(CASE WHEN group_set=${e} THEN ${n} END) WITHIN GROUP (ORDER BY ${n} ASC NULLS LAST))[0]`}mapFields(e){return e.map(n=>`
|
|
61
61
|
${n.sqlExpression} as ${n.sqlOutputName}`).join(", ")}mapFieldsForObjectConstruct(e){return e.map(n=>`'${n.rawName}', (${n.sqlExpression})`).join(", ")}sqlAggregateTurtle(e,n,r,i){const s=this.mapFieldsForObjectConstruct(n),o=r?` WITHIN GROUP (${r})`:"",u=`ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${s}) END)${o}`;return i===void 0?`COALESCE(${u}, [])`:`COALESCE(ARRAY_SLICE(${u}, 0, ${i}), [])`}sqlAnyValueTurtle(e,n){const r=this.mapFieldsForObjectConstruct(n);return`(ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${r}) END) WITHIN GROUP (ORDER BY 1 ASC NULLS LAST))[0]`}sqlAnyValueLastTurtle(e,n,r){return`(ARRAY_AGG(CASE WHEN group_set=${n} THEN ${e} END) WITHIN GROUP (ORDER BY ${e} ASC NULLS LAST))[0] AS ${r}`}sqlCoaleseMeasuresInline(e,n){const r=this.mapFieldsForObjectConstruct(n),i=n.map(s=>`'${s.sqlOutputName}', NULL`).join(", ");return`COALESCE(ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${r}) END)[0], OBJECT_CONSTRUCT_KEEP_NULL(${i}))`}sqlUnnestAlias(e,n,r,i,s,o){const u=this.sqlMaybeQuoteIdentifier(n);return s?`LEFT JOIN lateral flatten(input => ${e}) as ${u}`:`LEFT JOIN LATERAL FLATTEN(INPUT => ifnull(${e},[1])) AS ${u}`}sqlSumDistinctHashedKey(e){e=`${e}::STRING`;const n=`to_number(substr(md5_hex(${e}), 1, 15), repeat('X', 15)) * 4294967296`,r=`to_number(substr(md5_hex(${e}), 16, 8), repeat('X', 8))`;return`(${n} + ${r})`}sqlSumDistinct(e,n,r){const i=this.sqlSumDistinctHashedKey(e),s=1e8,o=`(COALESCE(${n},0)*${s})`,u=`(SUM(DISTINCT ${i} + ${o}) - SUM(DISTINCT ${i}))/${s}`;if(r==="SUM")return u;if(r==="AVG")return`(${u})/NULLIF(COUNT(DISTINCT CASE WHEN ${n} IS NOT NULL THEN ${e} END),0)`;throw new Error(`Unknown Symmetric Aggregate function ${r}`)}sqlGenerateUUID(){return"UUID_STRING()"}sqlFieldReference(e,n,r,i){const s=this.sqlMaybeQuoteIdentifier(r);if(r==="__row_id")return`"${e}".INDEX::varchar`;if(n.startsWith("array")){let o=`"${e}".value`;switch(n==="array[record]"&&(o+=`:${s}`),i){case"record":case"array":i="VARIANT";break;case"string":i="VARCHAR";break;case"number":i="DOUBLE";break;case"struct":throw new Error("NOT STRUCT PLEASE")}return`${o}::${i}`}else if(n==="record")return`${e}:${s}`;return`${e}.${s}`}sqlUnnestPipelineHead(e,n){let r=n;return e&&(r=`[${r}]`),`TABLE(FLATTEN(input =>${r}))`}sqlCreateFunction(e,n){throw new Error("not implemented yet")}sqlCreateFunctionCombineLastStage(e){throw new Error("not implemented yet")}sqlSelectAliasAsStruct(e){return`OBJECT_CONSTRUCT_KEEP_NULL(${e}.*)`}sqlMaybeQuoteIdentifier(e){return'"'+e.replace(/"/g,'""')+'"'}sqlCreateTableAsSelect(e,n){return`
|
|
62
62
|
CREATE TEMP TABLE IF NOT EXISTS \`${e}\`
|
|
63
63
|
AS (
|
|
@@ -3645,8 +3645,10 @@ ${" ".repeat(this.parseCursor)}^`;
|
|
|
3645
3645
|
if (o) {
|
|
3646
3646
|
r = !1;
|
|
3647
3647
|
let u = o[0];
|
|
3648
|
+
const a = this.parseCursor;
|
|
3648
3649
|
if (this.parseCursor += u.length, i !== "space") {
|
|
3649
3650
|
i[0] === "q" && (u = u.slice(1, -1)), yield {
|
|
3651
|
+
cursor: a,
|
|
3650
3652
|
type: i === "char" ? u : i,
|
|
3651
3653
|
text: u
|
|
3652
3654
|
};
|
|
@@ -3655,7 +3657,7 @@ ${" ".repeat(this.parseCursor)}^`;
|
|
|
3655
3657
|
}
|
|
3656
3658
|
}
|
|
3657
3659
|
if (r) {
|
|
3658
|
-
yield { type: "unexpected token", text: e };
|
|
3660
|
+
yield { cursor: this.parseCursor, type: "unexpected token", text: e };
|
|
3659
3661
|
return;
|
|
3660
3662
|
}
|
|
3661
3663
|
}
|
|
@@ -3913,50 +3915,45 @@ class fxe extends ZG.TinyParser {
|
|
|
3913
3915
|
return e.text.toUpperCase();
|
|
3914
3916
|
}
|
|
3915
3917
|
typeDef() {
|
|
3916
|
-
const e = this.
|
|
3917
|
-
let
|
|
3918
|
-
if (
|
|
3919
|
-
this.next(),
|
|
3920
|
-
else if (
|
|
3921
|
-
this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"),
|
|
3922
|
-
else if (ZO[
|
|
3923
|
-
|
|
3924
|
-
else if (
|
|
3925
|
-
for (this.next("("),
|
|
3926
|
-
const
|
|
3927
|
-
if (
|
|
3928
|
-
const
|
|
3929
|
-
|
|
3918
|
+
const e = this.next("id"), n = this.sqlID(e);
|
|
3919
|
+
let r;
|
|
3920
|
+
if (n === "VARCHAR" && this.peek().type === "size" && this.next(), (n === "DECIMAL" || n === "NUMERIC") && this.peek().type === "precision")
|
|
3921
|
+
this.next(), r = { type: "number", numberType: "float" };
|
|
3922
|
+
else if (n === "TIMESTAMP")
|
|
3923
|
+
this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"), r = { type: "timestamp" };
|
|
3924
|
+
else if (ZO[n])
|
|
3925
|
+
r = ZO[n];
|
|
3926
|
+
else if (n === "STRUCT")
|
|
3927
|
+
for (this.next("("), r = { type: "record", fields: [] }; ; ) {
|
|
3928
|
+
const i = this.next();
|
|
3929
|
+
if (i.type === "qsingle" || i.type === "qdouble" || i.type === "id") {
|
|
3930
|
+
const s = this.typeDef();
|
|
3931
|
+
r.fields.push((0, yd.mkFieldDef)(s, this.unquoteName(i)));
|
|
3930
3932
|
} else {
|
|
3931
|
-
if (
|
|
3933
|
+
if (i.type !== ")")
|
|
3932
3934
|
throw this.parseError("Expected identifier or ) to end STRUCT");
|
|
3933
3935
|
break;
|
|
3934
3936
|
}
|
|
3935
3937
|
this.peek().type === "," && this.next();
|
|
3936
3938
|
}
|
|
3937
|
-
else if (
|
|
3938
|
-
|
|
3939
|
-
|
|
3940
|
-
if (s.type === "arrayOf" || s.type === "eof")
|
|
3941
|
-
break;
|
|
3942
|
-
this.next();
|
|
3943
|
-
}
|
|
3944
|
-
i = {
|
|
3939
|
+
else if (e.type === "id") {
|
|
3940
|
+
let i = e.cursor + e.text.length;
|
|
3941
|
+
this.peek().type === "precision" && this.next(), this.peek().type === "eof" && (i = this.input.length), r = {
|
|
3945
3942
|
type: "sql native",
|
|
3946
|
-
rawType: this.input.slice(e,
|
|
3943
|
+
rawType: this.input.slice(e.cursor, i)
|
|
3947
3944
|
};
|
|
3948
3945
|
} else
|
|
3949
3946
|
throw this.parseError("Could not understand type");
|
|
3950
3947
|
for (; this.peek().type === "arrayOf"; )
|
|
3951
|
-
this.next(),
|
|
3948
|
+
this.next(), r.type === "record" ? r = {
|
|
3952
3949
|
type: "array",
|
|
3953
3950
|
elementTypeDef: { type: "record_element" },
|
|
3954
|
-
fields:
|
|
3955
|
-
} :
|
|
3951
|
+
fields: r.fields
|
|
3952
|
+
} : r = {
|
|
3956
3953
|
type: "array",
|
|
3957
|
-
elementTypeDef:
|
|
3954
|
+
elementTypeDef: r
|
|
3958
3955
|
};
|
|
3959
|
-
return
|
|
3956
|
+
return r;
|
|
3960
3957
|
}
|
|
3961
3958
|
}
|
|
3962
3959
|
(function(t) {
|
|
@@ -37,7 +37,7 @@ $$ LANGUAGE SQL;
|
|
|
37
37
|
) a
|
|
38
38
|
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,m6.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,m6.isSamplingRows)(n))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM_ROWS(${n.rows}))`;if((0,m6.isSamplingPercent)(n))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${n.percent}))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,$k.expandOverrideMap)(Gfe.POSTGRES_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,$k.expandBlueprintMap)(Qfe.POSTGRES_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}sqlTypeToMalloyType(e){var n,r,i;const s=(r=(n=e.match(/^([\w\s]+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:e;return(i=Vfe[s.trim().toLowerCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlLiteralRecord(e){const n=[];for(const[r,i]of Object.entries(e.kids))n.push(`'${r}',${i.sql}`);return`JSONB_BUILD_OBJECT(${n.join(", ")})`}sqlLiteralArray(e){return"JSONB_BUILD_ARRAY("+e.kids.values.map(r=>r.sql).join(",")+")"}}hE.PostgresDialect=Yfe,function(t){var e=T&&T.__createBinding||(Object.create?function(r,i,s,o){o===void 0&&(o=s);var u=Object.getOwnPropertyDescriptor(i,s);(!u||("get"in u?!i.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,o,u)}:function(r,i,s,o){o===void 0&&(o=s),r[o]=i[s]}),n=T&&T.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(hE,t)}(p6);var y6={},yE={},EE={};Object.defineProperty(EE,"__esModule",{value:!0}),EE.DUCKDB_DIALECT_FUNCTIONS=void 0;const Pk=it,Kfe={takes:{value:{array:{generic:"T"}},index:"number"},generic:{T:["any"]},returns:{generic:"T"},impl:{sql:"list_extract(${value}, ${index})"}},Jfe={takes:{date_value:["date","timestamp"]},returns:"string",impl:{function:"DAYNAME"}},Xfe={takes:{part:"string",interval:{sql_native:"interval"}},returns:"number",impl:{function:"DATE_PART"}},Zfe={takes:{seconds:"number"},returns:{sql_native:"interval"},impl:{function:"TO_SECONDS"}},exe={takes:{epoch_seconds:"number"},returns:"timestamp",impl:{function:"TO_TIMESTAMP"}},txe={takes:{value:{dimension:"any"}},returns:{measure:"number"},impl:{function:"APPROX_COUNT_DISTINCT"},isSymmetric:!0},E6={default_separator:{takes:{value:{dimension:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{sql:"STRING_AGG(${value}${order_by:})",defaultOrderByArgIndex:0}},with_separator:{takes:{value:{dimension:"string"},separator:{literal:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{sql:"STRING_AGG(${value}, ${separator}${order_by:})",defaultOrderByArgIndex:0}}},nxe={default_separator:{...E6.default_separator,isSymmetric:!0,impl:{sql:"STRING_AGG(DISTINCT ${value}${order_by:})",defaultOrderByArgIndex:0}},with_separator:{...E6.with_separator,isSymmetric:!0,impl:{sql:"STRING_AGG(DISTINCT ${value}, ${separator}${order_by:})",defaultOrderByArgIndex:0}}};EE.DUCKDB_DIALECT_FUNCTIONS={list_extract:Kfe,count_approx:txe,dayname:Jfe,to_timestamp:exe,string_agg:E6,string_agg_distinct:nxe,to_seconds:Zfe,date_part:Xfe,...(0,Pk.def)("repeat",{str:"string",n:"number"},"string"),...(0,Pk.def)("reverse",{str:"string"},"string")};var AE={};Object.defineProperty(AE,"__esModule",{value:!0}),AE.DUCKDB_MALLOY_STANDARD_OVERLOADS=void 0;function Mk(t){return"CASE WHEN LEN(LIST_FILTER([${...values}], x -> x is null)) > 0 THEN NULL ELSE "+t+"(${...values}) END"}AE.DUCKDB_MALLOY_STANDARD_OVERLOADS={byte_length:{sql:"(BIT_LENGTH(${value}) / 8)"},div:{sql:"CASE WHEN ${dividend} / ${divisor} < 0 THEN CEIL(${dividend} / ${divisor}) ELSE FLOOR(${dividend} / ${divisor}) END"},ends_with:{sql:"COALESCE(SUFFIX(${value}, ${suffix}), false)"},greatest:{sql:Mk("GREATEST")},is_inf:{sql:"COALESCE(ISINF(${value}), false)"},is_nan:{sql:"COALESCE(ISNAN(${value}), false)"},log:{sql:"(LN(${value}) / LN(${base}))"},least:{sql:Mk("LEAST")},rand:{function:"RANDOM"},replace:{regular_expression:{sql:"REGEXP_REPLACE(${value}, ${pattern}, ${replacement}, 'g')"}},trunc:{to_integer:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value}) ELSE FLOOR(${value}) END"},to_precision:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value} * POW(10, ${precision})) / POW(10, ${precision}) ELSE FLOOR(${value} * POW(10, ${precision})) / POW(10, ${precision}) END"}},unicode:{sql:"CASE WHEN ${value} = '' THEN 0 ELSE UNICODE(${value}) END"}};var Bc={};Object.defineProperty(Bc,"__esModule",{value:!0}),Bc.TinyParser=Bc.TinyParseError=void 0;class jk extends Error{}Bc.TinyParseError=jk;class rxe{constructor(e,n){this.input=e,this.parseCursor=0,this.tokenMap=n??{space:/^\s+/,char:/^[,:[\]()-]/,id:/^\w+/,qstr:/^"\w+"/},this.tokens=this.tokenize(e)}parseError(e){const n=`INTERNAL ERROR parsing schema: ${e}
|
|
39
39
|
${this.input}
|
|
40
|
-
${" ".repeat(this.parseCursor)}^`;return new jk(n)}peek(){if(this.lookAhead)return this.lookAhead;{const{value:e}=this.tokens.next(),n=e??{type:"eof",text:""};return this.lookAhead=n,n}}getNext(){var e;const n=(e=this.lookAhead)!==null&&e!==void 0?e:this.peek();return this.lookAhead=void 0,n}next(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.type!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected token type '${r}'`)}nextText(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.text!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected '${r}'`)}skipTo(e){for(;;){const n=this.next();if(n.type==="eof")throw this.parseError(`Expected token '${e}`);if(n.type===e)return}}dump(){const e=this.parseCursor,n=[...this.tokenize(this.input)];return this.parseCursor=e,n}*tokenize(e){const n=this.tokenMap;for(;this.parseCursor<e.length;){let r=!0;for(const i in n){const o=e.slice(this.parseCursor).match(n[i]);if(o){r=!1;let u=o[0];if(this.parseCursor+=u.length,i!=="space"){i[0]==="q"&&(u=u.slice(1,-1)),yield{type:i==="char"?u:i,text:u};break}}}if(r){yield{type:"unexpected token",text:e};return}}}}Bc.TinyParser=rxe,Object.defineProperty(yE,"__esModule",{value:!0}),yE.DuckDBDialect=void 0;const nd=Ke,ixe=Nt,Uk=Ul,sxe=Ml,oxe=pE,uxe=EE,axe=AE,qk=Bc,Hk="-- hack: split on this",A6={BIGINT:{type:"number",numberType:"integer"},INTEGER:{type:"number",numberType:"integer"},TINYINT:{type:"number",numberType:"integer"},SMALLINT:{type:"number",numberType:"integer"},UBIGINT:{type:"number",numberType:"integer"},UINTEGER:{type:"number",numberType:"integer"},UTINYINT:{type:"number",numberType:"integer"},USMALLINT:{type:"number",numberType:"integer"},HUGEINT:{type:"number",numberType:"integer"},DOUBLE:{type:"number",numberType:"float"},FLOAT:{type:"number",numberType:"float"},VARCHAR:{type:"string"},DATE:{type:"date"},TIMESTAMP:{type:"timestamp"},TIME:{type:"string"},DECIMAL:{type:"number",numberType:"float"},BOOLEAN:{type:"boolean"}};class lxe extends oxe.PostgresBase{constructor(){super(...arguments),this.name="duckdb",this.experimental=!1,this.defaultNumberType="DOUBLE",this.defaultDecimalType="NUMERIC",this.hasFinalStage=!1,this.divisionIsInteger=!0,this.supportsSumDistinctFunction=!0,this.unnestWithNumbers=!1,this.defaultSampling={rows:5e4},this.supportUnnestArrayAgg=!0,this.supportsAggDistinct=!0,this.supportsCTEinCoorelatedSubQueries=!0,this.dontUnionIndex=!0,this.supportsQualify=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.supportsCountApprox=!0}get udfPrefix(){return`__udf${Math.floor(Math.random()*1e5)}`}quoteTablePath(e){return e.match(/[/*:]/)?`'${e}'`:e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT UNNEST(GENERATE_SERIES(0,${e},1)) as group_set ) as group_set`}sqlAnyValue(e,n){return`FIRST(${n}) FILTER (WHERE ${n} IS NOT NULL)`}sqlLiteralNumber(e){return e.includes(".")?`${e}::${this.defaultNumberType}`:e}mapFields(e){return e.join(", ")}sqlAggregateTurtle(e,n,r,i){let s="";return i!==void 0&&(s+=`[1:${i}]`),`COALESCE(LIST({${n.map(u=>`
|
|
40
|
+
${" ".repeat(this.parseCursor)}^`;return new jk(n)}peek(){if(this.lookAhead)return this.lookAhead;{const{value:e}=this.tokens.next(),n=e??{type:"eof",text:""};return this.lookAhead=n,n}}getNext(){var e;const n=(e=this.lookAhead)!==null&&e!==void 0?e:this.peek();return this.lookAhead=void 0,n}next(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.type!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected token type '${r}'`)}nextText(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.text!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected '${r}'`)}skipTo(e){for(;;){const n=this.next();if(n.type==="eof")throw this.parseError(`Expected token '${e}`);if(n.type===e)return}}dump(){const e=this.parseCursor,n=[...this.tokenize(this.input)];return this.parseCursor=e,n}*tokenize(e){const n=this.tokenMap;for(;this.parseCursor<e.length;){let r=!0;for(const i in n){const o=e.slice(this.parseCursor).match(n[i]);if(o){r=!1;let u=o[0];const a=this.parseCursor;if(this.parseCursor+=u.length,i!=="space"){i[0]==="q"&&(u=u.slice(1,-1)),yield{cursor:a,type:i==="char"?u:i,text:u};break}}}if(r){yield{cursor:this.parseCursor,type:"unexpected token",text:e};return}}}}Bc.TinyParser=rxe,Object.defineProperty(yE,"__esModule",{value:!0}),yE.DuckDBDialect=void 0;const nd=Ke,ixe=Nt,Uk=Ul,sxe=Ml,oxe=pE,uxe=EE,axe=AE,qk=Bc,Hk="-- hack: split on this",A6={BIGINT:{type:"number",numberType:"integer"},INTEGER:{type:"number",numberType:"integer"},TINYINT:{type:"number",numberType:"integer"},SMALLINT:{type:"number",numberType:"integer"},UBIGINT:{type:"number",numberType:"integer"},UINTEGER:{type:"number",numberType:"integer"},UTINYINT:{type:"number",numberType:"integer"},USMALLINT:{type:"number",numberType:"integer"},HUGEINT:{type:"number",numberType:"integer"},DOUBLE:{type:"number",numberType:"float"},FLOAT:{type:"number",numberType:"float"},VARCHAR:{type:"string"},DATE:{type:"date"},TIMESTAMP:{type:"timestamp"},TIME:{type:"string"},DECIMAL:{type:"number",numberType:"float"},BOOLEAN:{type:"boolean"}};class lxe extends oxe.PostgresBase{constructor(){super(...arguments),this.name="duckdb",this.experimental=!1,this.defaultNumberType="DOUBLE",this.defaultDecimalType="NUMERIC",this.hasFinalStage=!1,this.divisionIsInteger=!0,this.supportsSumDistinctFunction=!0,this.unnestWithNumbers=!1,this.defaultSampling={rows:5e4},this.supportUnnestArrayAgg=!0,this.supportsAggDistinct=!0,this.supportsCTEinCoorelatedSubQueries=!0,this.dontUnionIndex=!0,this.supportsQualify=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.supportsCountApprox=!0}get udfPrefix(){return`__udf${Math.floor(Math.random()*1e5)}`}quoteTablePath(e){return e.match(/[/*:]/)?`'${e}'`:e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT UNNEST(GENERATE_SERIES(0,${e},1)) as group_set ) as group_set`}sqlAnyValue(e,n){return`FIRST(${n}) FILTER (WHERE ${n} IS NOT NULL)`}sqlLiteralNumber(e){return e.includes(".")?`${e}::${this.defaultNumberType}`:e}mapFields(e){return e.join(", ")}sqlAggregateTurtle(e,n,r,i){let s="";return i!==void 0&&(s+=`[1:${i}]`),`COALESCE(LIST({${n.map(u=>`
|
|
41
41
|
${u.sqlOutputName}: ${u.sqlExpression}`).join(", ")}} ${r}) FILTER (WHERE group_set=${e})${s},[])`}sqlAnyValueTurtle(e,n){const r=n.map(i=>`${i.sqlExpression} as ${i.sqlOutputName}`).join(", ");return`ANY_VALUE(CASE WHEN group_set=${e} THEN STRUCT_PACK(${r}))`}sqlAnyValueLastTurtle(e,n,r){return`MAX(CASE WHEN group_set=${n} THEN ${e} END) as ${r}`}sqlCoaleseMeasuresInline(e,n){const r=n.map(s=>`${s.sqlOutputName}: ${s.sqlExpression} `).join(", "),i=n.map(s=>`${s.sqlOutputName}: NULL`).join(", ");return`COALESCE(FIRST({${r}}) FILTER(WHERE group_set=${e}), {${i}})`}sqlUnnestAlias(e,n,r,i,s,o){return this.unnestWithNumbers?`LEFT JOIN (select UNNEST(generate_series(1,
|
|
42
42
|
${o?"100000":`array_length(${e})`},
|
|
43
43
|
1)) as __row_id) as ${n} ON ${n}.__row_id <= array_length(${e})`:i?`LEFT JOIN LATERAL (SELECT UNNEST(GENERATE_SERIES(1, length(${e}),1)) as __row_id, UNNEST(${e}), 1 as ignoreme) as ${n}_outer(__row_id, ${n},ignoreme) ON ${n}_outer.ignoreme=1`:`LEFT JOIN LATERAL (SELECT UNNEST(${e}), 1 as ignoreme) as ${n}_outer(${n},ignoreme) ON ${n}_outer.ignoreme=1`}sqlSumDistinctHashedKey(e){return"uses sumDistinctFunction, should not be called"}sqlGenerateUUID(){return"GEN_RANDOM_UUID()"}sqlDateToString(e){return`(${e})::date::varchar`}sqlFieldReference(e,n,r,i){return!this.unnestWithNumbers&&r==="__row_id"?`${e}_outer.__row_id`:n==="array[scalar]"?e:`${e}.${this.sqlMaybeQuoteIdentifier(r)}`}sqlUnnestPipelineHead(e,n){let r=n;return e&&(r=`[${r}]`),`(SELECT UNNEST(${r}) as base)`}sqlCreateFunction(e,n){return`DROP MACRO IF EXISTS ${e};
|
|
@@ -57,7 +57,7 @@ ${Hk}
|
|
|
57
57
|
FROM (
|
|
58
58
|
SELECT UNNEST(list(distinct {key:${e}, ${n.map((i,s)=>`val${s}: ${i}`).join(",")}})) a
|
|
59
59
|
)
|
|
60
|
-
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,nd.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,nd.isSamplingRows)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.rows})`;if((0,nd.isSamplingPercent)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.percent} PERCENT (bernoulli))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,Uk.expandOverrideMap)(axe.DUCKDB_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,Uk.expandBlueprintMap)(uxe.DUCKDB_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}parseDuckDBType(e){const n=new cxe(e);try{return n.typeDef()}catch(r){if(r instanceof qk.TinyParseError)return{type:"sql native",rawType:e};throw r}}sqlTypeToMalloyType(e){var n,r,i;const s=e.replace(/^DECIMAL\(\d+,\d+\)/g,"DECIMAL"),o=(r=(n=s.match(/^(\w+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:s;return(i=A6[o.toUpperCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e.toLowerCase()}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlAlterTimeExpr(e){let n=e.units,r=e.kids.delta.sql;n==="quarter"?(n="month",r=`${r}*3`):n==="week"&&(n="day",r=`${r}*7`);const i=`INTERVAL (${r}) ${n}`;return`${e.kids.base.sql} ${e.op} ${i}`}sqlRegexpMatch(e){return`REGEXP_MATCHES(${e.kids.expr.sql},${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const n=e.kids.left,r=e.kids.right;let i=n.sql||"",s=r.sql||"";return(0,sxe.inDays)(e.units)||(nd.TD.isDate(n.typeDef)&&(i=`${i}::TIMESTAMP`),nd.TD.isDate(r.typeDef)&&(s=`${s}::TIMESTAMP`)),`DATE_SUB('${e.units}', ${i}, ${s})`}sqlLiteralRecord(e){return"{"+Object.entries(e.kids).map(([r,i])=>`${this.sqlMaybeQuoteIdentifier(r)}:${i.sql}`).join(",")+"}"}}yE.DuckDBDialect=lxe;class cxe extends qk.TinyParser{constructor(e){super(e,{space:/^\s+/,qsingle:/^'([^']|'')*'/,qdouble:/^"([^"]|"")*"/,size:/^\(\d+\)/,precision:/^\(\d+,\d+\)/,arrayOf:/^\[]/,char:/^[,:[\]()-]/,id:/^\w+/})}unquoteName(e){return e.type==="qsingle"?e.text.replace("''",""):e.type==="qdouble"?e.text.replace('""',""):e.text}sqlID(e){return e.text.toUpperCase()}typeDef(){const e=this.
|
|
60
|
+
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,nd.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,nd.isSamplingRows)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.rows})`;if((0,nd.isSamplingPercent)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.percent} PERCENT (bernoulli))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,Uk.expandOverrideMap)(axe.DUCKDB_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,Uk.expandBlueprintMap)(uxe.DUCKDB_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}parseDuckDBType(e){const n=new cxe(e);try{return n.typeDef()}catch(r){if(r instanceof qk.TinyParseError)return{type:"sql native",rawType:e};throw r}}sqlTypeToMalloyType(e){var n,r,i;const s=e.replace(/^DECIMAL\(\d+,\d+\)/g,"DECIMAL"),o=(r=(n=s.match(/^(\w+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:s;return(i=A6[o.toUpperCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e.toLowerCase()}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlAlterTimeExpr(e){let n=e.units,r=e.kids.delta.sql;n==="quarter"?(n="month",r=`${r}*3`):n==="week"&&(n="day",r=`${r}*7`);const i=`INTERVAL (${r}) ${n}`;return`${e.kids.base.sql} ${e.op} ${i}`}sqlRegexpMatch(e){return`REGEXP_MATCHES(${e.kids.expr.sql},${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const n=e.kids.left,r=e.kids.right;let i=n.sql||"",s=r.sql||"";return(0,sxe.inDays)(e.units)||(nd.TD.isDate(n.typeDef)&&(i=`${i}::TIMESTAMP`),nd.TD.isDate(r.typeDef)&&(s=`${s}::TIMESTAMP`)),`DATE_SUB('${e.units}', ${i}, ${s})`}sqlLiteralRecord(e){return"{"+Object.entries(e.kids).map(([r,i])=>`${this.sqlMaybeQuoteIdentifier(r)}:${i.sql}`).join(",")+"}"}}yE.DuckDBDialect=lxe;class cxe extends qk.TinyParser{constructor(e){super(e,{space:/^\s+/,qsingle:/^'([^']|'')*'/,qdouble:/^"([^"]|"")*"/,size:/^\(\d+\)/,precision:/^\(\d+,\d+\)/,arrayOf:/^\[]/,char:/^[,:[\]()-]/,id:/^\w+/})}unquoteName(e){return e.type==="qsingle"?e.text.replace("''",""):e.type==="qdouble"?e.text.replace('""',""):e.text}sqlID(e){return e.text.toUpperCase()}typeDef(){const e=this.next("id"),n=this.sqlID(e);let r;if(n==="VARCHAR"&&this.peek().type==="size"&&this.next(),(n==="DECIMAL"||n==="NUMERIC")&&this.peek().type==="precision")this.next(),r={type:"number",numberType:"float"};else if(n==="TIMESTAMP")this.peek().text==="WITH"&&this.nextText("WITH","TIME","ZONE"),r={type:"timestamp"};else if(A6[n])r=A6[n];else if(n==="STRUCT")for(this.next("("),r={type:"record",fields:[]};;){const i=this.next();if(i.type==="qsingle"||i.type==="qdouble"||i.type==="id"){const s=this.typeDef();r.fields.push((0,nd.mkFieldDef)(s,this.unquoteName(i)))}else{if(i.type!==")")throw this.parseError("Expected identifier or ) to end STRUCT");break}this.peek().type===","&&this.next()}else if(e.type==="id"){let i=e.cursor+e.text.length;this.peek().type==="precision"&&this.next(),this.peek().type==="eof"&&(i=this.input.length),r={type:"sql native",rawType:this.input.slice(e.cursor,i)}}else throw this.parseError("Could not understand type");for(;this.peek().type==="arrayOf";)this.next(),r.type==="record"?r={type:"array",elementTypeDef:{type:"record_element"},fields:r.fields}:r={type:"array",elementTypeDef:r};return r}}(function(t){var e=T&&T.__createBinding||(Object.create?function(r,i,s,o){o===void 0&&(o=s);var u=Object.getOwnPropertyDescriptor(i,s);(!u||("get"in u?!i.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,o,u)}:function(r,i,s,o){o===void 0&&(o=s),r[o]=i[s]}),n=T&&T.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(yE,t)})(y6);var v6={},vE={},_E={};Object.defineProperty(_E,"__esModule",{value:!0}),_E.SNOWFLAKE_DIALECT_FUNCTIONS=void 0;const Ls=it,fxe={generic:"T"},SE={node:"aggregate_order_by",prefix:" WITHIN GROUP(",suffix:")"},_6={default_separator:{takes:{value:{dimension:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{expr:(0,Ls.sql)`LISTAGG(${(0,Ls.arg)("value")}, ',')${SE}`}},with_separator:{takes:{value:{dimension:"string"},separator:{literal:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{expr:(0,Ls.sql)`LISTAGG(${(0,Ls.arg)("value")}, ${(0,Ls.arg)("separator")})${SE}`}}},xxe={default_separator:{..._6.default_separator,isSymmetric:!0,impl:{expr:(0,Ls.sql)`LISTAGG(DISTINCT ${(0,Ls.arg)("value")}, ',')${SE}`}},with_separator:{..._6.with_separator,isSymmetric:!0,impl:{expr:(0,Ls.sql)`LISTAGG(DISTINCT ${(0,Ls.arg)("value")}, ${(0,Ls.arg)("separator")})${SE}`}}};_E.SNOWFLAKE_DIALECT_FUNCTIONS={string_agg:_6,string_agg_distinct:xxe,hll_accumulate:{default:{takes:{value:{dimension:fxe}},returns:{measure:{sql_native:"hyperloglog"}},generic:{T:["string","number"]},isSymmetric:!0,impl:{function:"hll_accumulate"}}},hll_combine:{takes:{value:{sql_native:"hyperloglog"}},returns:{measure:{sql_native:"hyperloglog"}},impl:{function:"hll_combine"},isSymmetric:!0},hll_estimate:{takes:{value:{sql_native:"hyperloglog"}},returns:{dimension:"number"},impl:{function:"hll_estimate"}},hll_export:{takes:{value:{sql_native:"hyperloglog"}},returns:{dimension:{sql_native:"bytes"}},impl:{function:"hll_export"}},hll_import:{takes:{value:{sql_native:"bytes"}},returns:{dimension:{sql_native:"hyperloglog"}},impl:{function:"hll_import"}},...(0,Ls.def)("repeat",{str:"string",n:"number"},"string"),...(0,Ls.def)("reverse",{str:"string"},"string")};var CE={};Object.defineProperty(CE,"__esModule",{value:!0}),CE.SNOWFLAKE_MALLOY_STANDARD_OVERLOADS=void 0,CE.SNOWFLAKE_MALLOY_STANDARD_OVERLOADS={chr:{sql:"COALESCE(CHR(${value}), '')"},div:{sql:"CASE WHEN DIV0(${dividend}, ${divisor}) < 0 THEN CEIL(DIV0(${dividend}, ${divisor})) ELSE FLOOR(DIV0(${dividend}, ${divisor})) END"},is_inf:{sql:"COALESCE(${value} = 'inf'::FLOAT OR ${value} = '-inf'::FLOAT, false)"},is_nan:{sql:"COALESCE(${value} = 'NAN'::FLOAT, false)"},length:{function:"LENGTH"},byte_length:{sql:"CEIL(BIT_LENGTH(${value}) / 8)"},log:{sql:"LOG(${base}, ${value})"},rand:{sql:"UNIFORM(0::FLOAT, 1::FLOAT, RANDOM())"},regexp_extract:{sql:"REGEXP_SUBSTR(${value}, ${pattern}, 1, 1, 'e')"},starts_with:{sql:"COALESCE(STARTSWITH(${value}, ${prefix}), false)"},ends_with:{sql:"COALESCE(ENDSWITH(${value}, ${suffix}), false)"},strpos:{sql:"POSITION(${search_string}, ${test_string})"},trunc:{to_integer:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value}) ELSE FLOOR(${value}) END"},to_precision:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value} * POW(10, ${precision})) / POW(10, ${precision}) ELSE FLOOR(${value} * POW(10, ${precision})) / POW(10, ${precision}) END"}}},Object.defineProperty(vE,"__esModule",{value:!0}),vE.SnowflakeDialect=void 0;const dxe=Nt,es=Ke,zk=Ul,hp=Ml,hxe=_E,pxe=CE,gxe={day_of_week:"dayofweek",day_of_year:"dayofyear"},mxe={varchar:{type:"string"},text:{type:"string"},string:{type:"string"},char:{type:"string"},character:{type:"string"},nvarchar:{type:"string"},nvarchar2:{type:"string"},"char varying":{type:"string"},"nchar varying":{type:"string"},number:{type:"number",numberType:"integer"},numeric:{type:"number",numberType:"integer"},decimal:{type:"number",numberType:"integer"},dec:{type:"number",numberType:"integer"},integer:{type:"number",numberType:"integer"},int:{type:"number",numberType:"integer"},bigint:{type:"number",numberType:"integer"},smallint:{type:"number",numberType:"integer"},tinyint:{type:"number",numberType:"integer"},byteint:{type:"number",numberType:"integer"},float:{type:"number",numberType:"float"},float4:{type:"number",numberType:"float"},float8:{type:"number",numberType:"float"},double:{type:"number",numberType:"float"},"double precision":{type:"number",numberType:"float"},real:{type:"number",numberType:"float"},boolean:{type:"boolean"},date:{type:"date"},timestamp:{type:"timestamp"},timestampntz:{type:"timestamp"},timestamp_ntz:{type:"timestamp"},"timestamp without time zone":{type:"timestamp"},timestamptz:{type:"timestamp"},timestamp_tz:{type:"timestamp"},"timestamp with time zone":{type:"timestamp"}};class yxe extends hp.Dialect{constructor(){super(...arguments),this.name="snowflake",this.experimental=!1,this.defaultNumberType="NUMBER",this.defaultDecimalType="NUMBER",this.udfPrefix="__udf",this.hasFinalStage=!1,this.divisionIsInteger=!1,this.supportsSumDistinctFunction=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.defaultSampling={rows:5e4},this.supportsHyperLogLog=!0,this.unnestWithNumbers=!1,this.supportUnnestArrayAgg=!1,this.supportsAggDistinct=!1,this.supportsCTEinCoorelatedSubQueries=!1,this.dontUnionIndex=!1,this.supportsQualify=!1,this.supportsPipelinesInViews=!1,this.supportsComplexFilteredSources=!1}quoteTablePath(e){return e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT index as group_set FROM TABLE(FLATTEN(ARRAY_GENERATE_RANGE(0, ${e+1}))))`}sqlAnyValue(e,n){return`(ARRAY_AGG(CASE WHEN group_set=${e} THEN ${n} END) WITHIN GROUP (ORDER BY ${n} ASC NULLS LAST))[0]`}mapFields(e){return e.map(n=>`
|
|
61
61
|
${n.sqlExpression} as ${n.sqlOutputName}`).join(", ")}mapFieldsForObjectConstruct(e){return e.map(n=>`'${n.rawName}', (${n.sqlExpression})`).join(", ")}sqlAggregateTurtle(e,n,r,i){const s=this.mapFieldsForObjectConstruct(n),o=r?` WITHIN GROUP (${r})`:"",u=`ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${s}) END)${o}`;return i===void 0?`COALESCE(${u}, [])`:`COALESCE(ARRAY_SLICE(${u}, 0, ${i}), [])`}sqlAnyValueTurtle(e,n){const r=this.mapFieldsForObjectConstruct(n);return`(ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${r}) END) WITHIN GROUP (ORDER BY 1 ASC NULLS LAST))[0]`}sqlAnyValueLastTurtle(e,n,r){return`(ARRAY_AGG(CASE WHEN group_set=${n} THEN ${e} END) WITHIN GROUP (ORDER BY ${e} ASC NULLS LAST))[0] AS ${r}`}sqlCoaleseMeasuresInline(e,n){const r=this.mapFieldsForObjectConstruct(n),i=n.map(s=>`'${s.sqlOutputName}', NULL`).join(", ");return`COALESCE(ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${r}) END)[0], OBJECT_CONSTRUCT_KEEP_NULL(${i}))`}sqlUnnestAlias(e,n,r,i,s,o){const u=this.sqlMaybeQuoteIdentifier(n);return s?`LEFT JOIN lateral flatten(input => ${e}) as ${u}`:`LEFT JOIN LATERAL FLATTEN(INPUT => ifnull(${e},[1])) AS ${u}`}sqlSumDistinctHashedKey(e){e=`${e}::STRING`;const n=`to_number(substr(md5_hex(${e}), 1, 15), repeat('X', 15)) * 4294967296`,r=`to_number(substr(md5_hex(${e}), 16, 8), repeat('X', 8))`;return`(${n} + ${r})`}sqlSumDistinct(e,n,r){const i=this.sqlSumDistinctHashedKey(e),s=1e8,o=`(COALESCE(${n},0)*${s})`,u=`(SUM(DISTINCT ${i} + ${o}) - SUM(DISTINCT ${i}))/${s}`;if(r==="SUM")return u;if(r==="AVG")return`(${u})/NULLIF(COUNT(DISTINCT CASE WHEN ${n} IS NOT NULL THEN ${e} END),0)`;throw new Error(`Unknown Symmetric Aggregate function ${r}`)}sqlGenerateUUID(){return"UUID_STRING()"}sqlFieldReference(e,n,r,i){const s=this.sqlMaybeQuoteIdentifier(r);if(r==="__row_id")return`"${e}".INDEX::varchar`;if(n.startsWith("array")){let o=`"${e}".value`;switch(n==="array[record]"&&(o+=`:${s}`),i){case"record":case"array":i="VARIANT";break;case"string":i="VARCHAR";break;case"number":i="DOUBLE";break;case"struct":throw new Error("NOT STRUCT PLEASE")}return`${o}::${i}`}else if(n==="record")return`${e}:${s}`;return`${e}.${s}`}sqlUnnestPipelineHead(e,n){let r=n;return e&&(r=`[${r}]`),`TABLE(FLATTEN(input =>${r}))`}sqlCreateFunction(e,n){throw new Error("not implemented yet")}sqlCreateFunctionCombineLastStage(e){throw new Error("not implemented yet")}sqlSelectAliasAsStruct(e){return`OBJECT_CONSTRUCT_KEEP_NULL(${e}.*)`}sqlMaybeQuoteIdentifier(e){return'"'+e.replace(/"/g,'""')+'"'}sqlCreateTableAsSelect(e,n){return`
|
|
62
62
|
CREATE TEMP TABLE IF NOT EXISTS \`${e}\`
|
|
63
63
|
AS (
|
|
@@ -3645,8 +3645,10 @@ ${" ".repeat(this.parseCursor)}^`;
|
|
|
3645
3645
|
if (o) {
|
|
3646
3646
|
r = !1;
|
|
3647
3647
|
let u = o[0];
|
|
3648
|
+
const a = this.parseCursor;
|
|
3648
3649
|
if (this.parseCursor += u.length, i !== "space") {
|
|
3649
3650
|
i[0] === "q" && (u = u.slice(1, -1)), yield {
|
|
3651
|
+
cursor: a,
|
|
3650
3652
|
type: i === "char" ? u : i,
|
|
3651
3653
|
text: u
|
|
3652
3654
|
};
|
|
@@ -3655,7 +3657,7 @@ ${" ".repeat(this.parseCursor)}^`;
|
|
|
3655
3657
|
}
|
|
3656
3658
|
}
|
|
3657
3659
|
if (r) {
|
|
3658
|
-
yield { type: "unexpected token", text: e };
|
|
3660
|
+
yield { cursor: this.parseCursor, type: "unexpected token", text: e };
|
|
3659
3661
|
return;
|
|
3660
3662
|
}
|
|
3661
3663
|
}
|
|
@@ -3913,50 +3915,45 @@ class fxe extends ZG.TinyParser {
|
|
|
3913
3915
|
return e.text.toUpperCase();
|
|
3914
3916
|
}
|
|
3915
3917
|
typeDef() {
|
|
3916
|
-
const e = this.
|
|
3917
|
-
let
|
|
3918
|
-
if (
|
|
3919
|
-
this.next(),
|
|
3920
|
-
else if (
|
|
3921
|
-
this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"),
|
|
3922
|
-
else if (ZO[
|
|
3923
|
-
|
|
3924
|
-
else if (
|
|
3925
|
-
for (this.next("("),
|
|
3926
|
-
const
|
|
3927
|
-
if (
|
|
3928
|
-
const
|
|
3929
|
-
|
|
3918
|
+
const e = this.next("id"), n = this.sqlID(e);
|
|
3919
|
+
let r;
|
|
3920
|
+
if (n === "VARCHAR" && this.peek().type === "size" && this.next(), (n === "DECIMAL" || n === "NUMERIC") && this.peek().type === "precision")
|
|
3921
|
+
this.next(), r = { type: "number", numberType: "float" };
|
|
3922
|
+
else if (n === "TIMESTAMP")
|
|
3923
|
+
this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"), r = { type: "timestamp" };
|
|
3924
|
+
else if (ZO[n])
|
|
3925
|
+
r = ZO[n];
|
|
3926
|
+
else if (n === "STRUCT")
|
|
3927
|
+
for (this.next("("), r = { type: "record", fields: [] }; ; ) {
|
|
3928
|
+
const i = this.next();
|
|
3929
|
+
if (i.type === "qsingle" || i.type === "qdouble" || i.type === "id") {
|
|
3930
|
+
const s = this.typeDef();
|
|
3931
|
+
r.fields.push((0, yd.mkFieldDef)(s, this.unquoteName(i)));
|
|
3930
3932
|
} else {
|
|
3931
|
-
if (
|
|
3933
|
+
if (i.type !== ")")
|
|
3932
3934
|
throw this.parseError("Expected identifier or ) to end STRUCT");
|
|
3933
3935
|
break;
|
|
3934
3936
|
}
|
|
3935
3937
|
this.peek().type === "," && this.next();
|
|
3936
3938
|
}
|
|
3937
|
-
else if (
|
|
3938
|
-
|
|
3939
|
-
|
|
3940
|
-
if (s.type === "arrayOf" || s.type === "eof")
|
|
3941
|
-
break;
|
|
3942
|
-
this.next();
|
|
3943
|
-
}
|
|
3944
|
-
i = {
|
|
3939
|
+
else if (e.type === "id") {
|
|
3940
|
+
let i = e.cursor + e.text.length;
|
|
3941
|
+
this.peek().type === "precision" && this.next(), this.peek().type === "eof" && (i = this.input.length), r = {
|
|
3945
3942
|
type: "sql native",
|
|
3946
|
-
rawType: this.input.slice(e,
|
|
3943
|
+
rawType: this.input.slice(e.cursor, i)
|
|
3947
3944
|
};
|
|
3948
3945
|
} else
|
|
3949
3946
|
throw this.parseError("Could not understand type");
|
|
3950
3947
|
for (; this.peek().type === "arrayOf"; )
|
|
3951
|
-
this.next(),
|
|
3948
|
+
this.next(), r.type === "record" ? r = {
|
|
3952
3949
|
type: "array",
|
|
3953
3950
|
elementTypeDef: { type: "record_element" },
|
|
3954
|
-
fields:
|
|
3955
|
-
} :
|
|
3951
|
+
fields: r.fields
|
|
3952
|
+
} : r = {
|
|
3956
3953
|
type: "array",
|
|
3957
|
-
elementTypeDef:
|
|
3954
|
+
elementTypeDef: r
|
|
3958
3955
|
};
|
|
3959
|
-
return
|
|
3956
|
+
return r;
|
|
3960
3957
|
}
|
|
3961
3958
|
}
|
|
3962
3959
|
(function(t) {
|
|
@@ -37,7 +37,7 @@ $$ LANGUAGE SQL;
|
|
|
37
37
|
) a
|
|
38
38
|
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,g6.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,g6.isSamplingRows)(n))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM_ROWS(${n.rows}))`;if((0,g6.isSamplingPercent)(n))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${n.percent}))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,Bk.expandOverrideMap)(Gfe.POSTGRES_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,Bk.expandBlueprintMap)(Qfe.POSTGRES_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}sqlTypeToMalloyType(e){var n,r,i;const s=(r=(n=e.match(/^([\w\s]+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:e;return(i=Vfe[s.trim().toLowerCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlLiteralRecord(e){const n=[];for(const[r,i]of Object.entries(e.kids))n.push(`'${r}',${i.sql}`);return`JSONB_BUILD_OBJECT(${n.join(", ")})`}sqlLiteralArray(e){return"JSONB_BUILD_ARRAY("+e.kids.values.map(r=>r.sql).join(",")+")"}}dE.PostgresDialect=Yfe,function(t){var e=T&&T.__createBinding||(Object.create?function(r,i,s,o){o===void 0&&(o=s);var u=Object.getOwnPropertyDescriptor(i,s);(!u||("get"in u?!i.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,o,u)}:function(r,i,s,o){o===void 0&&(o=s),r[o]=i[s]}),n=T&&T.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(dE,t)}(h6);var m6={},mE={},yE={};Object.defineProperty(yE,"__esModule",{value:!0}),yE.DUCKDB_DIALECT_FUNCTIONS=void 0;const kk=it,Kfe={takes:{value:{array:{generic:"T"}},index:"number"},generic:{T:["any"]},returns:{generic:"T"},impl:{sql:"list_extract(${value}, ${index})"}},Jfe={takes:{date_value:["date","timestamp"]},returns:"string",impl:{function:"DAYNAME"}},Xfe={takes:{part:"string",interval:{sql_native:"interval"}},returns:"number",impl:{function:"DATE_PART"}},Zfe={takes:{seconds:"number"},returns:{sql_native:"interval"},impl:{function:"TO_SECONDS"}},exe={takes:{epoch_seconds:"number"},returns:"timestamp",impl:{function:"TO_TIMESTAMP"}},txe={takes:{value:{dimension:"any"}},returns:{measure:"number"},impl:{function:"APPROX_COUNT_DISTINCT"},isSymmetric:!0},y6={default_separator:{takes:{value:{dimension:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{sql:"STRING_AGG(${value}${order_by:})",defaultOrderByArgIndex:0}},with_separator:{takes:{value:{dimension:"string"},separator:{literal:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{sql:"STRING_AGG(${value}, ${separator}${order_by:})",defaultOrderByArgIndex:0}}},nxe={default_separator:{...y6.default_separator,isSymmetric:!0,impl:{sql:"STRING_AGG(DISTINCT ${value}${order_by:})",defaultOrderByArgIndex:0}},with_separator:{...y6.with_separator,isSymmetric:!0,impl:{sql:"STRING_AGG(DISTINCT ${value}, ${separator}${order_by:})",defaultOrderByArgIndex:0}}};yE.DUCKDB_DIALECT_FUNCTIONS={list_extract:Kfe,count_approx:txe,dayname:Jfe,to_timestamp:exe,string_agg:y6,string_agg_distinct:nxe,to_seconds:Zfe,date_part:Xfe,...(0,kk.def)("repeat",{str:"string",n:"number"},"string"),...(0,kk.def)("reverse",{str:"string"},"string")};var EE={};Object.defineProperty(EE,"__esModule",{value:!0}),EE.DUCKDB_MALLOY_STANDARD_OVERLOADS=void 0;function Pk(t){return"CASE WHEN LEN(LIST_FILTER([${...values}], x -> x is null)) > 0 THEN NULL ELSE "+t+"(${...values}) END"}EE.DUCKDB_MALLOY_STANDARD_OVERLOADS={byte_length:{sql:"(BIT_LENGTH(${value}) / 8)"},div:{sql:"CASE WHEN ${dividend} / ${divisor} < 0 THEN CEIL(${dividend} / ${divisor}) ELSE FLOOR(${dividend} / ${divisor}) END"},ends_with:{sql:"COALESCE(SUFFIX(${value}, ${suffix}), false)"},greatest:{sql:Pk("GREATEST")},is_inf:{sql:"COALESCE(ISINF(${value}), false)"},is_nan:{sql:"COALESCE(ISNAN(${value}), false)"},log:{sql:"(LN(${value}) / LN(${base}))"},least:{sql:Pk("LEAST")},rand:{function:"RANDOM"},replace:{regular_expression:{sql:"REGEXP_REPLACE(${value}, ${pattern}, ${replacement}, 'g')"}},trunc:{to_integer:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value}) ELSE FLOOR(${value}) END"},to_precision:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value} * POW(10, ${precision})) / POW(10, ${precision}) ELSE FLOOR(${value} * POW(10, ${precision})) / POW(10, ${precision}) END"}},unicode:{sql:"CASE WHEN ${value} = '' THEN 0 ELSE UNICODE(${value}) END"}};var Bc={};Object.defineProperty(Bc,"__esModule",{value:!0}),Bc.TinyParser=Bc.TinyParseError=void 0;class Mk extends Error{}Bc.TinyParseError=Mk;class rxe{constructor(e,n){this.input=e,this.parseCursor=0,this.tokenMap=n??{space:/^\s+/,char:/^[,:[\]()-]/,id:/^\w+/,qstr:/^"\w+"/},this.tokens=this.tokenize(e)}parseError(e){const n=`INTERNAL ERROR parsing schema: ${e}
|
|
39
39
|
${this.input}
|
|
40
|
-
${" ".repeat(this.parseCursor)}^`;return new Mk(n)}peek(){if(this.lookAhead)return this.lookAhead;{const{value:e}=this.tokens.next(),n=e??{type:"eof",text:""};return this.lookAhead=n,n}}getNext(){var e;const n=(e=this.lookAhead)!==null&&e!==void 0?e:this.peek();return this.lookAhead=void 0,n}next(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.type!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected token type '${r}'`)}nextText(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.text!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected '${r}'`)}skipTo(e){for(;;){const n=this.next();if(n.type==="eof")throw this.parseError(`Expected token '${e}`);if(n.type===e)return}}dump(){const e=this.parseCursor,n=[...this.tokenize(this.input)];return this.parseCursor=e,n}*tokenize(e){const n=this.tokenMap;for(;this.parseCursor<e.length;){let r=!0;for(const i in n){const o=e.slice(this.parseCursor).match(n[i]);if(o){r=!1;let u=o[0];if(this.parseCursor+=u.length,i!=="space"){i[0]==="q"&&(u=u.slice(1,-1)),yield{type:i==="char"?u:i,text:u};break}}}if(r){yield{type:"unexpected token",text:e};return}}}}Bc.TinyParser=rxe,Object.defineProperty(mE,"__esModule",{value:!0}),mE.DuckDBDialect=void 0;const nd=Ke,ixe=Nt,jk=Ul,sxe=Ml,oxe=hE,uxe=yE,axe=EE,Uk=Bc,qk="-- hack: split on this",E6={BIGINT:{type:"number",numberType:"integer"},INTEGER:{type:"number",numberType:"integer"},TINYINT:{type:"number",numberType:"integer"},SMALLINT:{type:"number",numberType:"integer"},UBIGINT:{type:"number",numberType:"integer"},UINTEGER:{type:"number",numberType:"integer"},UTINYINT:{type:"number",numberType:"integer"},USMALLINT:{type:"number",numberType:"integer"},HUGEINT:{type:"number",numberType:"integer"},DOUBLE:{type:"number",numberType:"float"},FLOAT:{type:"number",numberType:"float"},VARCHAR:{type:"string"},DATE:{type:"date"},TIMESTAMP:{type:"timestamp"},TIME:{type:"string"},DECIMAL:{type:"number",numberType:"float"},BOOLEAN:{type:"boolean"}};class lxe extends oxe.PostgresBase{constructor(){super(...arguments),this.name="duckdb",this.experimental=!1,this.defaultNumberType="DOUBLE",this.defaultDecimalType="NUMERIC",this.hasFinalStage=!1,this.divisionIsInteger=!0,this.supportsSumDistinctFunction=!0,this.unnestWithNumbers=!1,this.defaultSampling={rows:5e4},this.supportUnnestArrayAgg=!0,this.supportsAggDistinct=!0,this.supportsCTEinCoorelatedSubQueries=!0,this.dontUnionIndex=!0,this.supportsQualify=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.supportsCountApprox=!0}get udfPrefix(){return`__udf${Math.floor(Math.random()*1e5)}`}quoteTablePath(e){return e.match(/[/*:]/)?`'${e}'`:e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT UNNEST(GENERATE_SERIES(0,${e},1)) as group_set ) as group_set`}sqlAnyValue(e,n){return`FIRST(${n}) FILTER (WHERE ${n} IS NOT NULL)`}sqlLiteralNumber(e){return e.includes(".")?`${e}::${this.defaultNumberType}`:e}mapFields(e){return e.join(", ")}sqlAggregateTurtle(e,n,r,i){let s="";return i!==void 0&&(s+=`[1:${i}]`),`COALESCE(LIST({${n.map(u=>`
|
|
40
|
+
${" ".repeat(this.parseCursor)}^`;return new Mk(n)}peek(){if(this.lookAhead)return this.lookAhead;{const{value:e}=this.tokens.next(),n=e??{type:"eof",text:""};return this.lookAhead=n,n}}getNext(){var e;const n=(e=this.lookAhead)!==null&&e!==void 0?e:this.peek();return this.lookAhead=void 0,n}next(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.type!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected token type '${r}'`)}nextText(...e){if(e.length===0)return this.getNext();let n,r=e[0];for(const i of e)if(n=this.getNext(),r=i,n.text!==i){n=void 0;break}if(n)return n;throw this.parseError(`Expected '${r}'`)}skipTo(e){for(;;){const n=this.next();if(n.type==="eof")throw this.parseError(`Expected token '${e}`);if(n.type===e)return}}dump(){const e=this.parseCursor,n=[...this.tokenize(this.input)];return this.parseCursor=e,n}*tokenize(e){const n=this.tokenMap;for(;this.parseCursor<e.length;){let r=!0;for(const i in n){const o=e.slice(this.parseCursor).match(n[i]);if(o){r=!1;let u=o[0];const a=this.parseCursor;if(this.parseCursor+=u.length,i!=="space"){i[0]==="q"&&(u=u.slice(1,-1)),yield{cursor:a,type:i==="char"?u:i,text:u};break}}}if(r){yield{cursor:this.parseCursor,type:"unexpected token",text:e};return}}}}Bc.TinyParser=rxe,Object.defineProperty(mE,"__esModule",{value:!0}),mE.DuckDBDialect=void 0;const nd=Ke,ixe=Nt,jk=Ul,sxe=Ml,oxe=hE,uxe=yE,axe=EE,Uk=Bc,qk="-- hack: split on this",E6={BIGINT:{type:"number",numberType:"integer"},INTEGER:{type:"number",numberType:"integer"},TINYINT:{type:"number",numberType:"integer"},SMALLINT:{type:"number",numberType:"integer"},UBIGINT:{type:"number",numberType:"integer"},UINTEGER:{type:"number",numberType:"integer"},UTINYINT:{type:"number",numberType:"integer"},USMALLINT:{type:"number",numberType:"integer"},HUGEINT:{type:"number",numberType:"integer"},DOUBLE:{type:"number",numberType:"float"},FLOAT:{type:"number",numberType:"float"},VARCHAR:{type:"string"},DATE:{type:"date"},TIMESTAMP:{type:"timestamp"},TIME:{type:"string"},DECIMAL:{type:"number",numberType:"float"},BOOLEAN:{type:"boolean"}};class lxe extends oxe.PostgresBase{constructor(){super(...arguments),this.name="duckdb",this.experimental=!1,this.defaultNumberType="DOUBLE",this.defaultDecimalType="NUMERIC",this.hasFinalStage=!1,this.divisionIsInteger=!0,this.supportsSumDistinctFunction=!0,this.unnestWithNumbers=!1,this.defaultSampling={rows:5e4},this.supportUnnestArrayAgg=!0,this.supportsAggDistinct=!0,this.supportsCTEinCoorelatedSubQueries=!0,this.dontUnionIndex=!0,this.supportsQualify=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.supportsCountApprox=!0}get udfPrefix(){return`__udf${Math.floor(Math.random()*1e5)}`}quoteTablePath(e){return e.match(/[/*:]/)?`'${e}'`:e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT UNNEST(GENERATE_SERIES(0,${e},1)) as group_set ) as group_set`}sqlAnyValue(e,n){return`FIRST(${n}) FILTER (WHERE ${n} IS NOT NULL)`}sqlLiteralNumber(e){return e.includes(".")?`${e}::${this.defaultNumberType}`:e}mapFields(e){return e.join(", ")}sqlAggregateTurtle(e,n,r,i){let s="";return i!==void 0&&(s+=`[1:${i}]`),`COALESCE(LIST({${n.map(u=>`
|
|
41
41
|
${u.sqlOutputName}: ${u.sqlExpression}`).join(", ")}} ${r}) FILTER (WHERE group_set=${e})${s},[])`}sqlAnyValueTurtle(e,n){const r=n.map(i=>`${i.sqlExpression} as ${i.sqlOutputName}`).join(", ");return`ANY_VALUE(CASE WHEN group_set=${e} THEN STRUCT_PACK(${r}))`}sqlAnyValueLastTurtle(e,n,r){return`MAX(CASE WHEN group_set=${n} THEN ${e} END) as ${r}`}sqlCoaleseMeasuresInline(e,n){const r=n.map(s=>`${s.sqlOutputName}: ${s.sqlExpression} `).join(", "),i=n.map(s=>`${s.sqlOutputName}: NULL`).join(", ");return`COALESCE(FIRST({${r}}) FILTER(WHERE group_set=${e}), {${i}})`}sqlUnnestAlias(e,n,r,i,s,o){return this.unnestWithNumbers?`LEFT JOIN (select UNNEST(generate_series(1,
|
|
42
42
|
${o?"100000":`array_length(${e})`},
|
|
43
43
|
1)) as __row_id) as ${n} ON ${n}.__row_id <= array_length(${e})`:i?`LEFT JOIN LATERAL (SELECT UNNEST(GENERATE_SERIES(1, length(${e}),1)) as __row_id, UNNEST(${e}), 1 as ignoreme) as ${n}_outer(__row_id, ${n},ignoreme) ON ${n}_outer.ignoreme=1`:`LEFT JOIN LATERAL (SELECT UNNEST(${e}), 1 as ignoreme) as ${n}_outer(${n},ignoreme) ON ${n}_outer.ignoreme=1`}sqlSumDistinctHashedKey(e){return"uses sumDistinctFunction, should not be called"}sqlGenerateUUID(){return"GEN_RANDOM_UUID()"}sqlDateToString(e){return`(${e})::date::varchar`}sqlFieldReference(e,n,r,i){return!this.unnestWithNumbers&&r==="__row_id"?`${e}_outer.__row_id`:n==="array[scalar]"?e:`${e}.${this.sqlMaybeQuoteIdentifier(r)}`}sqlUnnestPipelineHead(e,n){let r=n;return e&&(r=`[${r}]`),`(SELECT UNNEST(${r}) as base)`}sqlCreateFunction(e,n){return`DROP MACRO IF EXISTS ${e};
|
|
@@ -57,7 +57,7 @@ ${qk}
|
|
|
57
57
|
FROM (
|
|
58
58
|
SELECT UNNEST(list(distinct {key:${e}, ${n.map((i,s)=>`val${s}: ${i}`).join(",")}})) a
|
|
59
59
|
)
|
|
60
|
-
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,nd.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,nd.isSamplingRows)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.rows})`;if((0,nd.isSamplingPercent)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.percent} PERCENT (bernoulli))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,jk.expandOverrideMap)(axe.DUCKDB_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,jk.expandBlueprintMap)(uxe.DUCKDB_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}parseDuckDBType(e){const n=new cxe(e);try{return n.typeDef()}catch(r){if(r instanceof Uk.TinyParseError)return{type:"sql native",rawType:e};throw r}}sqlTypeToMalloyType(e){var n,r,i;const s=e.replace(/^DECIMAL\(\d+,\d+\)/g,"DECIMAL"),o=(r=(n=s.match(/^(\w+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:s;return(i=E6[o.toUpperCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e.toLowerCase()}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlAlterTimeExpr(e){let n=e.units,r=e.kids.delta.sql;n==="quarter"?(n="month",r=`${r}*3`):n==="week"&&(n="day",r=`${r}*7`);const i=`INTERVAL (${r}) ${n}`;return`${e.kids.base.sql} ${e.op} ${i}`}sqlRegexpMatch(e){return`REGEXP_MATCHES(${e.kids.expr.sql},${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const n=e.kids.left,r=e.kids.right;let i=n.sql||"",s=r.sql||"";return(0,sxe.inDays)(e.units)||(nd.TD.isDate(n.typeDef)&&(i=`${i}::TIMESTAMP`),nd.TD.isDate(r.typeDef)&&(s=`${s}::TIMESTAMP`)),`DATE_SUB('${e.units}', ${i}, ${s})`}sqlLiteralRecord(e){return"{"+Object.entries(e.kids).map(([r,i])=>`${this.sqlMaybeQuoteIdentifier(r)}:${i.sql}`).join(",")+"}"}}mE.DuckDBDialect=lxe;class cxe extends Uk.TinyParser{constructor(e){super(e,{space:/^\s+/,qsingle:/^'([^']|'')*'/,qdouble:/^"([^"]|"")*"/,size:/^\(\d+\)/,precision:/^\(\d+,\d+\)/,arrayOf:/^\[]/,char:/^[,:[\]()-]/,id:/^\w+/})}unquoteName(e){return e.type==="qsingle"?e.text.replace("''",""):e.type==="qdouble"?e.text.replace('""',""):e.text}sqlID(e){return e.text.toUpperCase()}typeDef(){const e=this.
|
|
60
|
+
)`}sqlSampleTable(e,n){if(n!==void 0){if((0,nd.isSamplingEnable)(n)&&n.enable&&(n=this.defaultSampling),(0,nd.isSamplingRows)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.rows})`;if((0,nd.isSamplingPercent)(n))return`(SELECT * FROM ${e} USING SAMPLE ${n.percent} PERCENT (bernoulli))`}return e}sqlOrderBy(e){return`ORDER BY ${e.map(n=>`${n} NULLS LAST`).join(",")}`}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,jk.expandOverrideMap)(axe.DUCKDB_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,jk.expandBlueprintMap)(uxe.DUCKDB_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){return e.type==="number"?e.numberType==="integer"?"integer":"double precision":e.type==="string"?"varchar":e.type}parseDuckDBType(e){const n=new cxe(e);try{return n.typeDef()}catch(r){if(r instanceof Uk.TinyParseError)return{type:"sql native",rawType:e};throw r}}sqlTypeToMalloyType(e){var n,r,i;const s=e.replace(/^DECIMAL\(\d+,\d+\)/g,"DECIMAL"),o=(r=(n=s.match(/^(\w+)/))===null||n===void 0?void 0:n.at(0))!==null&&r!==void 0?r:s;return(i=E6[o.toUpperCase()])!==null&&i!==void 0?i:{type:"sql native",rawType:e.toLowerCase()}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}validateTypeName(e){return e.match(/^[A-Za-z\s(),[\]0-9]*$/)!==null}sqlAlterTimeExpr(e){let n=e.units,r=e.kids.delta.sql;n==="quarter"?(n="month",r=`${r}*3`):n==="week"&&(n="day",r=`${r}*7`);const i=`INTERVAL (${r}) ${n}`;return`${e.kids.base.sql} ${e.op} ${i}`}sqlRegexpMatch(e){return`REGEXP_MATCHES(${e.kids.expr.sql},${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const n=e.kids.left,r=e.kids.right;let i=n.sql||"",s=r.sql||"";return(0,sxe.inDays)(e.units)||(nd.TD.isDate(n.typeDef)&&(i=`${i}::TIMESTAMP`),nd.TD.isDate(r.typeDef)&&(s=`${s}::TIMESTAMP`)),`DATE_SUB('${e.units}', ${i}, ${s})`}sqlLiteralRecord(e){return"{"+Object.entries(e.kids).map(([r,i])=>`${this.sqlMaybeQuoteIdentifier(r)}:${i.sql}`).join(",")+"}"}}mE.DuckDBDialect=lxe;class cxe extends Uk.TinyParser{constructor(e){super(e,{space:/^\s+/,qsingle:/^'([^']|'')*'/,qdouble:/^"([^"]|"")*"/,size:/^\(\d+\)/,precision:/^\(\d+,\d+\)/,arrayOf:/^\[]/,char:/^[,:[\]()-]/,id:/^\w+/})}unquoteName(e){return e.type==="qsingle"?e.text.replace("''",""):e.type==="qdouble"?e.text.replace('""',""):e.text}sqlID(e){return e.text.toUpperCase()}typeDef(){const e=this.next("id"),n=this.sqlID(e);let r;if(n==="VARCHAR"&&this.peek().type==="size"&&this.next(),(n==="DECIMAL"||n==="NUMERIC")&&this.peek().type==="precision")this.next(),r={type:"number",numberType:"float"};else if(n==="TIMESTAMP")this.peek().text==="WITH"&&this.nextText("WITH","TIME","ZONE"),r={type:"timestamp"};else if(E6[n])r=E6[n];else if(n==="STRUCT")for(this.next("("),r={type:"record",fields:[]};;){const i=this.next();if(i.type==="qsingle"||i.type==="qdouble"||i.type==="id"){const s=this.typeDef();r.fields.push((0,nd.mkFieldDef)(s,this.unquoteName(i)))}else{if(i.type!==")")throw this.parseError("Expected identifier or ) to end STRUCT");break}this.peek().type===","&&this.next()}else if(e.type==="id"){let i=e.cursor+e.text.length;this.peek().type==="precision"&&this.next(),this.peek().type==="eof"&&(i=this.input.length),r={type:"sql native",rawType:this.input.slice(e.cursor,i)}}else throw this.parseError("Could not understand type");for(;this.peek().type==="arrayOf";)this.next(),r.type==="record"?r={type:"array",elementTypeDef:{type:"record_element"},fields:r.fields}:r={type:"array",elementTypeDef:r};return r}}(function(t){var e=T&&T.__createBinding||(Object.create?function(r,i,s,o){o===void 0&&(o=s);var u=Object.getOwnPropertyDescriptor(i,s);(!u||("get"in u?!i.__esModule:u.writable||u.configurable))&&(u={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,o,u)}:function(r,i,s,o){o===void 0&&(o=s),r[o]=i[s]}),n=T&&T.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(t,"__esModule",{value:!0}),n(mE,t)})(m6);var A6={},AE={},vE={};Object.defineProperty(vE,"__esModule",{value:!0}),vE.SNOWFLAKE_DIALECT_FUNCTIONS=void 0;const Ls=it,fxe={generic:"T"},_E={node:"aggregate_order_by",prefix:" WITHIN GROUP(",suffix:")"},v6={default_separator:{takes:{value:{dimension:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{expr:(0,Ls.sql)`LISTAGG(${(0,Ls.arg)("value")}, ',')${_E}`}},with_separator:{takes:{value:{dimension:"string"},separator:{literal:"string"}},returns:{measure:"string"},supportsOrderBy:!0,impl:{expr:(0,Ls.sql)`LISTAGG(${(0,Ls.arg)("value")}, ${(0,Ls.arg)("separator")})${_E}`}}},xxe={default_separator:{...v6.default_separator,isSymmetric:!0,impl:{expr:(0,Ls.sql)`LISTAGG(DISTINCT ${(0,Ls.arg)("value")}, ',')${_E}`}},with_separator:{...v6.with_separator,isSymmetric:!0,impl:{expr:(0,Ls.sql)`LISTAGG(DISTINCT ${(0,Ls.arg)("value")}, ${(0,Ls.arg)("separator")})${_E}`}}};vE.SNOWFLAKE_DIALECT_FUNCTIONS={string_agg:v6,string_agg_distinct:xxe,hll_accumulate:{default:{takes:{value:{dimension:fxe}},returns:{measure:{sql_native:"hyperloglog"}},generic:{T:["string","number"]},isSymmetric:!0,impl:{function:"hll_accumulate"}}},hll_combine:{takes:{value:{sql_native:"hyperloglog"}},returns:{measure:{sql_native:"hyperloglog"}},impl:{function:"hll_combine"},isSymmetric:!0},hll_estimate:{takes:{value:{sql_native:"hyperloglog"}},returns:{dimension:"number"},impl:{function:"hll_estimate"}},hll_export:{takes:{value:{sql_native:"hyperloglog"}},returns:{dimension:{sql_native:"bytes"}},impl:{function:"hll_export"}},hll_import:{takes:{value:{sql_native:"bytes"}},returns:{dimension:{sql_native:"hyperloglog"}},impl:{function:"hll_import"}},...(0,Ls.def)("repeat",{str:"string",n:"number"},"string"),...(0,Ls.def)("reverse",{str:"string"},"string")};var SE={};Object.defineProperty(SE,"__esModule",{value:!0}),SE.SNOWFLAKE_MALLOY_STANDARD_OVERLOADS=void 0,SE.SNOWFLAKE_MALLOY_STANDARD_OVERLOADS={chr:{sql:"COALESCE(CHR(${value}), '')"},div:{sql:"CASE WHEN DIV0(${dividend}, ${divisor}) < 0 THEN CEIL(DIV0(${dividend}, ${divisor})) ELSE FLOOR(DIV0(${dividend}, ${divisor})) END"},is_inf:{sql:"COALESCE(${value} = 'inf'::FLOAT OR ${value} = '-inf'::FLOAT, false)"},is_nan:{sql:"COALESCE(${value} = 'NAN'::FLOAT, false)"},length:{function:"LENGTH"},byte_length:{sql:"CEIL(BIT_LENGTH(${value}) / 8)"},log:{sql:"LOG(${base}, ${value})"},rand:{sql:"UNIFORM(0::FLOAT, 1::FLOAT, RANDOM())"},regexp_extract:{sql:"REGEXP_SUBSTR(${value}, ${pattern}, 1, 1, 'e')"},starts_with:{sql:"COALESCE(STARTSWITH(${value}, ${prefix}), false)"},ends_with:{sql:"COALESCE(ENDSWITH(${value}, ${suffix}), false)"},strpos:{sql:"POSITION(${search_string}, ${test_string})"},trunc:{to_integer:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value}) ELSE FLOOR(${value}) END"},to_precision:{sql:"CASE WHEN ${value} < 0 THEN CEIL(${value} * POW(10, ${precision})) / POW(10, ${precision}) ELSE FLOOR(${value} * POW(10, ${precision})) / POW(10, ${precision}) END"}}},Object.defineProperty(AE,"__esModule",{value:!0}),AE.SnowflakeDialect=void 0;const dxe=Nt,es=Ke,Hk=Ul,xp=Ml,hxe=vE,pxe=SE,gxe={day_of_week:"dayofweek",day_of_year:"dayofyear"},mxe={varchar:{type:"string"},text:{type:"string"},string:{type:"string"},char:{type:"string"},character:{type:"string"},nvarchar:{type:"string"},nvarchar2:{type:"string"},"char varying":{type:"string"},"nchar varying":{type:"string"},number:{type:"number",numberType:"integer"},numeric:{type:"number",numberType:"integer"},decimal:{type:"number",numberType:"integer"},dec:{type:"number",numberType:"integer"},integer:{type:"number",numberType:"integer"},int:{type:"number",numberType:"integer"},bigint:{type:"number",numberType:"integer"},smallint:{type:"number",numberType:"integer"},tinyint:{type:"number",numberType:"integer"},byteint:{type:"number",numberType:"integer"},float:{type:"number",numberType:"float"},float4:{type:"number",numberType:"float"},float8:{type:"number",numberType:"float"},double:{type:"number",numberType:"float"},"double precision":{type:"number",numberType:"float"},real:{type:"number",numberType:"float"},boolean:{type:"boolean"},date:{type:"date"},timestamp:{type:"timestamp"},timestampntz:{type:"timestamp"},timestamp_ntz:{type:"timestamp"},"timestamp without time zone":{type:"timestamp"},timestamptz:{type:"timestamp"},timestamp_tz:{type:"timestamp"},"timestamp with time zone":{type:"timestamp"}};class yxe extends xp.Dialect{constructor(){super(...arguments),this.name="snowflake",this.experimental=!1,this.defaultNumberType="NUMBER",this.defaultDecimalType="NUMBER",this.udfPrefix="__udf",this.hasFinalStage=!1,this.divisionIsInteger=!1,this.supportsSumDistinctFunction=!0,this.supportsSafeCast=!0,this.supportsNesting=!0,this.defaultSampling={rows:5e4},this.supportsHyperLogLog=!0,this.unnestWithNumbers=!1,this.supportUnnestArrayAgg=!1,this.supportsAggDistinct=!1,this.supportsCTEinCoorelatedSubQueries=!1,this.dontUnionIndex=!1,this.supportsQualify=!1,this.supportsPipelinesInViews=!1,this.supportsComplexFilteredSources=!1}quoteTablePath(e){return e}sqlGroupSetTable(e){return`CROSS JOIN (SELECT index as group_set FROM TABLE(FLATTEN(ARRAY_GENERATE_RANGE(0, ${e+1}))))`}sqlAnyValue(e,n){return`(ARRAY_AGG(CASE WHEN group_set=${e} THEN ${n} END) WITHIN GROUP (ORDER BY ${n} ASC NULLS LAST))[0]`}mapFields(e){return e.map(n=>`
|
|
61
61
|
${n.sqlExpression} as ${n.sqlOutputName}`).join(", ")}mapFieldsForObjectConstruct(e){return e.map(n=>`'${n.rawName}', (${n.sqlExpression})`).join(", ")}sqlAggregateTurtle(e,n,r,i){const s=this.mapFieldsForObjectConstruct(n),o=r?` WITHIN GROUP (${r})`:"",u=`ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${s}) END)${o}`;return i===void 0?`COALESCE(${u}, [])`:`COALESCE(ARRAY_SLICE(${u}, 0, ${i}), [])`}sqlAnyValueTurtle(e,n){const r=this.mapFieldsForObjectConstruct(n);return`(ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${r}) END) WITHIN GROUP (ORDER BY 1 ASC NULLS LAST))[0]`}sqlAnyValueLastTurtle(e,n,r){return`(ARRAY_AGG(CASE WHEN group_set=${n} THEN ${e} END) WITHIN GROUP (ORDER BY ${e} ASC NULLS LAST))[0] AS ${r}`}sqlCoaleseMeasuresInline(e,n){const r=this.mapFieldsForObjectConstruct(n),i=n.map(s=>`'${s.sqlOutputName}', NULL`).join(", ");return`COALESCE(ARRAY_AGG(CASE WHEN group_set=${e} THEN OBJECT_CONSTRUCT_KEEP_NULL(${r}) END)[0], OBJECT_CONSTRUCT_KEEP_NULL(${i}))`}sqlUnnestAlias(e,n,r,i,s,o){const u=this.sqlMaybeQuoteIdentifier(n);return s?`LEFT JOIN lateral flatten(input => ${e}) as ${u}`:`LEFT JOIN LATERAL FLATTEN(INPUT => ifnull(${e},[1])) AS ${u}`}sqlSumDistinctHashedKey(e){e=`${e}::STRING`;const n=`to_number(substr(md5_hex(${e}), 1, 15), repeat('X', 15)) * 4294967296`,r=`to_number(substr(md5_hex(${e}), 16, 8), repeat('X', 8))`;return`(${n} + ${r})`}sqlSumDistinct(e,n,r){const i=this.sqlSumDistinctHashedKey(e),s=1e8,o=`(COALESCE(${n},0)*${s})`,u=`(SUM(DISTINCT ${i} + ${o}) - SUM(DISTINCT ${i}))/${s}`;if(r==="SUM")return u;if(r==="AVG")return`(${u})/NULLIF(COUNT(DISTINCT CASE WHEN ${n} IS NOT NULL THEN ${e} END),0)`;throw new Error(`Unknown Symmetric Aggregate function ${r}`)}sqlGenerateUUID(){return"UUID_STRING()"}sqlFieldReference(e,n,r,i){const s=this.sqlMaybeQuoteIdentifier(r);if(r==="__row_id")return`"${e}".INDEX::varchar`;if(n.startsWith("array")){let o=`"${e}".value`;switch(n==="array[record]"&&(o+=`:${s}`),i){case"record":case"array":i="VARIANT";break;case"string":i="VARCHAR";break;case"number":i="DOUBLE";break;case"struct":throw new Error("NOT STRUCT PLEASE")}return`${o}::${i}`}else if(n==="record")return`${e}:${s}`;return`${e}.${s}`}sqlUnnestPipelineHead(e,n){let r=n;return e&&(r=`[${r}]`),`TABLE(FLATTEN(input =>${r}))`}sqlCreateFunction(e,n){throw new Error("not implemented yet")}sqlCreateFunctionCombineLastStage(e){throw new Error("not implemented yet")}sqlSelectAliasAsStruct(e){return`OBJECT_CONSTRUCT_KEEP_NULL(${e}.*)`}sqlMaybeQuoteIdentifier(e){return'"'+e.replace(/"/g,'""')+'"'}sqlCreateTableAsSelect(e,n){return`
|
|
62
62
|
CREATE TEMP TABLE IF NOT EXISTS \`${e}\`
|
|
63
63
|
AS (
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@malloydata/render",
|
|
3
|
-
"version": "0.0.226-
|
|
3
|
+
"version": "0.0.226-dev250113232339",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/module/index.umd.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"build-types": "tsc --build --declaration --emitDeclarationOnly"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@malloydata/malloy": "^0.0.226-
|
|
34
|
+
"@malloydata/malloy": "^0.0.226-dev250113232339",
|
|
35
35
|
"@tanstack/solid-virtual": "^3.10.4",
|
|
36
36
|
"component-register": "^0.8.6",
|
|
37
37
|
"lodash": "^4.17.20",
|