@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.
@@ -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.parseCursor, n = this.next("id"), r = this.sqlID(n);
3000
- let i;
3001
- if (r === "VARCHAR" && this.peek().type === "size" && this.next(), (r === "DECIMAL" || r === "NUMERIC") && this.peek().type === "precision")
3002
- this.next(), i = { type: "number", numberType: "float" };
3003
- else if (r === "TIMESTAMP")
3004
- this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"), i = { type: "timestamp" };
3005
- else if (aO[r])
3006
- i = aO[r];
3007
- else if (r === "STRUCT")
3008
- for (this.next("("), i = { type: "record", fields: [] }; ; ) {
3009
- const s = this.next();
3010
- if (s.type === "qsingle" || s.type === "qdouble" || s.type === "id") {
3011
- const o = this.typeDef();
3012
- i.fields.push((0, jx.mkFieldDef)(o, this.unquoteName(s)));
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 (s.type !== ")")
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 (n.type === "id") {
3021
- for (; ; ) {
3022
- const s = this.peek();
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, this.parseCursor - e + 1)
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(), i.type === "record" ? i = {
3031
+ this.next(), r.type === "record" ? r = {
3035
3032
  type: "array",
3036
3033
  elementTypeDef: { type: "record_element" },
3037
- fields: i.fields
3038
- } : i = {
3034
+ fields: r.fields
3035
+ } : r = {
3039
3036
  type: "array",
3040
- elementTypeDef: i
3037
+ elementTypeDef: r
3041
3038
  };
3042
- return i;
3039
+ return r;
3043
3040
  }
3044
3041
  }
3045
3042
  (function(t) {
@@ -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.parseCursor,n=this.next("id"),r=this.sqlID(n);let i;if(r==="VARCHAR"&&this.peek().type==="size"&&this.next(),(r==="DECIMAL"||r==="NUMERIC")&&this.peek().type==="precision")this.next(),i={type:"number",numberType:"float"};else if(r==="TIMESTAMP")this.peek().text==="WITH"&&this.nextText("WITH","TIME","ZONE"),i={type:"timestamp"};else if(TT[r])i=TT[r];else if(r==="STRUCT")for(this.next("("),i={type:"record",fields:[]};;){const s=this.next();if(s.type==="qsingle"||s.type==="qdouble"||s.type==="id"){const o=this.typeDef();i.fields.push((0,Tx.mkFieldDef)(o,this.unquoteName(s)))}else{if(s.type!==")")throw this.parseError("Expected identifier or ) to end STRUCT");break}this.peek().type===","&&this.next()}else if(n.type==="id"){for(;;){const s=this.peek();if(s.type==="arrayOf"||s.type==="eof")break;this.next()}i={type:"sql native",rawType:this.input.slice(e,this.parseCursor-e+1)}}else throw this.parseError("Could not understand type");for(;this.peek().type==="arrayOf";)this.next(),i.type==="record"?i={type:"array",elementTypeDef:{type:"record_element"},fields:i.fields}:i={type:"array",elementTypeDef:i};return i}}(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=>`
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.parseCursor, n = this.next("id"), r = this.sqlID(n);
3917
- let i;
3918
- if (r === "VARCHAR" && this.peek().type === "size" && this.next(), (r === "DECIMAL" || r === "NUMERIC") && this.peek().type === "precision")
3919
- this.next(), i = { type: "number", numberType: "float" };
3920
- else if (r === "TIMESTAMP")
3921
- this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"), i = { type: "timestamp" };
3922
- else if (ZO[r])
3923
- i = ZO[r];
3924
- else if (r === "STRUCT")
3925
- for (this.next("("), i = { type: "record", fields: [] }; ; ) {
3926
- const s = this.next();
3927
- if (s.type === "qsingle" || s.type === "qdouble" || s.type === "id") {
3928
- const o = this.typeDef();
3929
- i.fields.push((0, yd.mkFieldDef)(o, this.unquoteName(s)));
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 (s.type !== ")")
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 (n.type === "id") {
3938
- for (; ; ) {
3939
- const s = this.peek();
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, this.parseCursor - e + 1)
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(), i.type === "record" ? i = {
3948
+ this.next(), r.type === "record" ? r = {
3952
3949
  type: "array",
3953
3950
  elementTypeDef: { type: "record_element" },
3954
- fields: i.fields
3955
- } : i = {
3951
+ fields: r.fields
3952
+ } : r = {
3956
3953
  type: "array",
3957
- elementTypeDef: i
3954
+ elementTypeDef: r
3958
3955
  };
3959
- return i;
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.parseCursor,n=this.next("id"),r=this.sqlID(n);let i;if(r==="VARCHAR"&&this.peek().type==="size"&&this.next(),(r==="DECIMAL"||r==="NUMERIC")&&this.peek().type==="precision")this.next(),i={type:"number",numberType:"float"};else if(r==="TIMESTAMP")this.peek().text==="WITH"&&this.nextText("WITH","TIME","ZONE"),i={type:"timestamp"};else if(A6[r])i=A6[r];else if(r==="STRUCT")for(this.next("("),i={type:"record",fields:[]};;){const s=this.next();if(s.type==="qsingle"||s.type==="qdouble"||s.type==="id"){const o=this.typeDef();i.fields.push((0,nd.mkFieldDef)(o,this.unquoteName(s)))}else{if(s.type!==")")throw this.parseError("Expected identifier or ) to end STRUCT");break}this.peek().type===","&&this.next()}else if(n.type==="id"){for(;;){const s=this.peek();if(s.type==="arrayOf"||s.type==="eof")break;this.next()}i={type:"sql native",rawType:this.input.slice(e,this.parseCursor-e+1)}}else throw this.parseError("Could not understand type");for(;this.peek().type==="arrayOf";)this.next(),i.type==="record"?i={type:"array",elementTypeDef:{type:"record_element"},fields:i.fields}:i={type:"array",elementTypeDef:i};return i}}(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=>`
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.parseCursor, n = this.next("id"), r = this.sqlID(n);
3917
- let i;
3918
- if (r === "VARCHAR" && this.peek().type === "size" && this.next(), (r === "DECIMAL" || r === "NUMERIC") && this.peek().type === "precision")
3919
- this.next(), i = { type: "number", numberType: "float" };
3920
- else if (r === "TIMESTAMP")
3921
- this.peek().text === "WITH" && this.nextText("WITH", "TIME", "ZONE"), i = { type: "timestamp" };
3922
- else if (ZO[r])
3923
- i = ZO[r];
3924
- else if (r === "STRUCT")
3925
- for (this.next("("), i = { type: "record", fields: [] }; ; ) {
3926
- const s = this.next();
3927
- if (s.type === "qsingle" || s.type === "qdouble" || s.type === "id") {
3928
- const o = this.typeDef();
3929
- i.fields.push((0, yd.mkFieldDef)(o, this.unquoteName(s)));
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 (s.type !== ")")
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 (n.type === "id") {
3938
- for (; ; ) {
3939
- const s = this.peek();
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, this.parseCursor - e + 1)
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(), i.type === "record" ? i = {
3948
+ this.next(), r.type === "record" ? r = {
3952
3949
  type: "array",
3953
3950
  elementTypeDef: { type: "record_element" },
3954
- fields: i.fields
3955
- } : i = {
3951
+ fields: r.fields
3952
+ } : r = {
3956
3953
  type: "array",
3957
- elementTypeDef: i
3954
+ elementTypeDef: r
3958
3955
  };
3959
- return i;
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.parseCursor,n=this.next("id"),r=this.sqlID(n);let i;if(r==="VARCHAR"&&this.peek().type==="size"&&this.next(),(r==="DECIMAL"||r==="NUMERIC")&&this.peek().type==="precision")this.next(),i={type:"number",numberType:"float"};else if(r==="TIMESTAMP")this.peek().text==="WITH"&&this.nextText("WITH","TIME","ZONE"),i={type:"timestamp"};else if(E6[r])i=E6[r];else if(r==="STRUCT")for(this.next("("),i={type:"record",fields:[]};;){const s=this.next();if(s.type==="qsingle"||s.type==="qdouble"||s.type==="id"){const o=this.typeDef();i.fields.push((0,nd.mkFieldDef)(o,this.unquoteName(s)))}else{if(s.type!==")")throw this.parseError("Expected identifier or ) to end STRUCT");break}this.peek().type===","&&this.next()}else if(n.type==="id"){for(;;){const s=this.peek();if(s.type==="arrayOf"||s.type==="eof")break;this.next()}i={type:"sql native",rawType:this.input.slice(e,this.parseCursor-e+1)}}else throw this.parseError("Could not understand type");for(;this.peek().type==="arrayOf";)this.next(),i.type==="record"?i={type:"array",elementTypeDef:{type:"record_element"},fields:i.fields}:i={type:"array",elementTypeDef:i};return i}}(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=>`
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-dev250113204439",
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-dev250113204439",
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",