@malloydata/render 0.0.261-dev250410215229 → 0.0.261-dev250410224545

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.
@@ -120060,7 +120060,7 @@ ${(0, bW.indent)(r)}
120060
120060
  case "record": {
120061
120061
  const r = [];
120062
120062
  for (const i of e.fields)
120063
- (0, zs.isAtomic)(i) && r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);
120063
+ (0, zs.isAtomic)(i) && r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);
120064
120064
  return `ROW(${r.join(",")})`;
120065
120065
  }
120066
120066
  case "sql native":
@@ -120069,7 +120069,7 @@ ${(0, bW.indent)(r)}
120069
120069
  if ((0, zs.isRepeatedRecord)(e)) {
120070
120070
  const r = [];
120071
120071
  for (const i of e.fields)
120072
- (0, zs.isAtomic)(i) && r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);
120072
+ (0, zs.isAtomic)(i) && r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);
120073
120073
  return `ARRAY<ROW(${r.join(",")})>`;
120074
120074
  }
120075
120075
  return `ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`;
@@ -1000,7 +1000,7 @@ AS (
1000
1000
  ${(0,rae.indent)(r)}
1001
1001
  );
1002
1002
  `}sqlCreateFunctionCombineLastStage(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`SELECT ARRAY_AGG(CAST(ROW(${i}) as ROW(${s}))) FROM ${e}
1003
- `}sqlSelectAliasAsStruct(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`CAST(ROW(${i}) as ROW(${s})`}sqlAlterTimeExpr(e){let r=e.units,i=e.kids.delta.sql;return r==="quarter"&&(r="month",i=`${i}*3`),r==="week"&&(r="day",i=`${i}*7`),e.op==="-"&&(i=`(${i})*-1`),`DATE_ADD('${r}', ${i}, ${e.kids.base.sql})`}sqlCast(e,r){const{op:i,srcTypeDef:s,dstTypeDef:o,dstSQLType:u}=this.sqlCastPrep(r),a=V$(e),l=r.e.sql||"";return i==="timestamp::date"&&a?`CAST((${`CAST(${l} as TIMESTAMP)`}) AT TIME ZONE '${a}' AS DATE)`:i==="date::timestamp"&&a?`CAST(CONCAT(CAST(CAST(${l} AS TIMESTAMP) AS VARCHAR), ' ${a}') AS TIMESTAMP WITH TIME ZONE)`:yo.TD.eq(s,o)?l:`${r.safe?"TRY_CAST":"CAST"}(${l} AS ${u})`}sqlRegexpMatch(e){return`REGEXP_LIKE(${e.kids.expr.sql}, ${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const r={microsecond:{use:"microsecond",ratio:1},millisecond:{use:"microsecond",ratio:1e3},second:{use:"millisecond",ratio:1e3},minute:{use:"second",ratio:60},hour:{use:"minute",ratio:60},day:{use:"hour",ratio:24},week:{use:"day",ratio:7}},i=e.kids.left,s=e.kids.right;let o=i.sql,u=s.sql;if(r[e.units]){const{use:a,ratio:l}=r[e.units];if(!sJe(a))throw new Error(`Measure in '${a} not implemented`);if(!yo.TD.eq(i.typeDef,s.typeDef))throw new Error("Can't measure difference between different types");yo.TD.isDate(i.typeDef)&&(o=`CAST(${o} AS TIMESTAMP)`,u=`CAST(${u} AS TIMESTAMP)`);let c=`DATE_DIFF('${a}',${o},${u})`;return l!==1&&(c=`FLOOR(CAST(${c} AS DOUBLE)/${l.toString()}.0)`),c}throw new Error(`Measure '${e.units} not implemented`)}sqlSampleTable(e,r){if(r!==void 0){if((0,yo.isSamplingEnable)(r)&&r.enable&&(r=this.defaultSampling),(0,yo.isSamplingRows)(r))throw new Error("Trino doesn't support sampling by rows only percent");if((0,yo.isSamplingPercent)(r))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${r.percent}))`}return e}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,W$.expandOverrideMap)(iJe.TRINO_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,W$.expandBlueprintMap)(sae.TRINO_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){switch(e.type){case"number":return e.numberType==="integer"?"BIGINT":"DOUBLE";case"string":return"VARCHAR";case"record":{const r=[];for(const i of e.fields)(0,yo.isAtomic)(i)&&r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);return`ROW(${r.join(",")})`}case"sql native":return e.rawType||"UNKNOWN-NATIVE";case"array":{if((0,yo.isRepeatedRecord)(e)){const r=[];for(const i of e.fields)(0,yo.isAtomic)(i)&&r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);return`ARRAY<ROW(${r.join(",")})>`}return`ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`}default:return e.type.toUpperCase()}}sqlTypeToMalloyType(e){var r,i,s;const o=(i=(r=e.match(/^(\w+)/))===null||r===void 0?void 0:r.at(0))!==null&&i!==void 0?i:e;return(s=oJe[o])!==null&&s!==void 0?s:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}sqlMakeUnnestKey(e,r){return`CAST(${e} as VARCHAR) || 'x' || CAST(${r} as VARCHAR)`}sqlStringAggDistinct(e,r,i){return`
1003
+ `}sqlSelectAliasAsStruct(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`CAST(ROW(${i}) as ROW(${s})`}sqlAlterTimeExpr(e){let r=e.units,i=e.kids.delta.sql;return r==="quarter"&&(r="month",i=`${i}*3`),r==="week"&&(r="day",i=`${i}*7`),e.op==="-"&&(i=`(${i})*-1`),`DATE_ADD('${r}', ${i}, ${e.kids.base.sql})`}sqlCast(e,r){const{op:i,srcTypeDef:s,dstTypeDef:o,dstSQLType:u}=this.sqlCastPrep(r),a=V$(e),l=r.e.sql||"";return i==="timestamp::date"&&a?`CAST((${`CAST(${l} as TIMESTAMP)`}) AT TIME ZONE '${a}' AS DATE)`:i==="date::timestamp"&&a?`CAST(CONCAT(CAST(CAST(${l} AS TIMESTAMP) AS VARCHAR), ' ${a}') AS TIMESTAMP WITH TIME ZONE)`:yo.TD.eq(s,o)?l:`${r.safe?"TRY_CAST":"CAST"}(${l} AS ${u})`}sqlRegexpMatch(e){return`REGEXP_LIKE(${e.kids.expr.sql}, ${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const r={microsecond:{use:"microsecond",ratio:1},millisecond:{use:"microsecond",ratio:1e3},second:{use:"millisecond",ratio:1e3},minute:{use:"second",ratio:60},hour:{use:"minute",ratio:60},day:{use:"hour",ratio:24},week:{use:"day",ratio:7}},i=e.kids.left,s=e.kids.right;let o=i.sql,u=s.sql;if(r[e.units]){const{use:a,ratio:l}=r[e.units];if(!sJe(a))throw new Error(`Measure in '${a} not implemented`);if(!yo.TD.eq(i.typeDef,s.typeDef))throw new Error("Can't measure difference between different types");yo.TD.isDate(i.typeDef)&&(o=`CAST(${o} AS TIMESTAMP)`,u=`CAST(${u} AS TIMESTAMP)`);let c=`DATE_DIFF('${a}',${o},${u})`;return l!==1&&(c=`FLOOR(CAST(${c} AS DOUBLE)/${l.toString()}.0)`),c}throw new Error(`Measure '${e.units} not implemented`)}sqlSampleTable(e,r){if(r!==void 0){if((0,yo.isSamplingEnable)(r)&&r.enable&&(r=this.defaultSampling),(0,yo.isSamplingRows)(r))throw new Error("Trino doesn't support sampling by rows only percent");if((0,yo.isSamplingPercent)(r))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${r.percent}))`}return e}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,W$.expandOverrideMap)(iJe.TRINO_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,W$.expandBlueprintMap)(sae.TRINO_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){switch(e.type){case"number":return e.numberType==="integer"?"BIGINT":"DOUBLE";case"string":return"VARCHAR";case"record":{const r=[];for(const i of e.fields)(0,yo.isAtomic)(i)&&r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);return`ROW(${r.join(",")})`}case"sql native":return e.rawType||"UNKNOWN-NATIVE";case"array":{if((0,yo.isRepeatedRecord)(e)){const r=[];for(const i of e.fields)(0,yo.isAtomic)(i)&&r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);return`ARRAY<ROW(${r.join(",")})>`}return`ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`}default:return e.type.toUpperCase()}}sqlTypeToMalloyType(e){var r,i,s;const o=(i=(r=e.match(/^(\w+)/))===null||r===void 0?void 0:r.at(0))!==null&&i!==void 0?i:e;return(s=oJe[o])!==null&&s!==void 0?s:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}sqlMakeUnnestKey(e,r){return`CAST(${e} as VARCHAR) || 'x' || CAST(${r} as VARCHAR)`}sqlStringAggDistinct(e,r,i){return`
1004
1004
  ARRAY_JOIN(TRANSFORM(ARRAY_AGG(DISTINCT ARRAY[CAST(${r} AS VARCHAR),CAST(${e} as VARCHAR)]), x -> x[1]),${i.length>0?i:"','"})`}validateTypeName(e){return e.match(/^[A-Za-z\s(),<>0-9]*$/)!==null}sqlLiteralTime(e,r){if(yo.TD.isDate(r.typeDef))return`DATE '${r.literal}'`;const i=r.timezone||V$(e);return i?`TIMESTAMP '${r.literal} ${i}'`:`TIMESTAMP '${r.literal}'`}sqlTimeExtractExpr(e,r){const i=iae.timeExtractMap[r.units]||r.units;let s=r.e.sql||"";if(yo.TD.isTimestamp(r.e.typeDef)){const u=V$(e);u&&(s=`at_timezone(${s},'${u}')`)}const o=`EXTRACT(${i} FROM ${s})`;return r.units==="day_of_week"?`mod(${o}+1,7)`:o}sqlLiteralRecord(e){var r,i;const s=[],o=[];for(const u of e.typeDef.fields)if((0,yo.isAtomic)(u)){const a=(r=u.as)!==null&&r!==void 0?r:u.name;s.push((i=e.kids[a].sql)!==null&&i!==void 0?i:"internal-error-record-literal");const l=this.malloyTypeToSQLType(u);o.push(`${a} ${l}`)}return`CAST(ROW(${s.join(",")}) AS ROW(${o.join(",")}))`}}Hp.TrinoDialect=Sc,Sc.dtype="DECIMAL(38,0)";class uJe extends Sc{constructor(){super(...arguments),this.name="presto",this.supportsPipelinesInViews=!1,this.supportsLeftJoinUnnest=!1}sqlGenerateUUID(){return"CAST(UUID() AS VARCHAR)"}sqlUnnestAlias(e,r,i,s,o,u){return o?s?`-- Simulate a left join
1005
1005
  CROSS JOIN UNNEST(COALESCE(${e},ARRAY[NULL])) WITH ORDINALITY as ${r}(value, __row_id_almost_${r})
1006
1006
  CROSS JOIN UNNEST(ARRAY[CASE WHEN ${e} IS NOT NULL THEN __row_id_almost_${r} END]) as ${r}_ignore(__row_id_from_${r})`:`CROSS JOIN UNNEST(COALESCE(${e}, ARRAY[NULL])) as ${r}(value) `:s?`-- Simulate a left join
@@ -123873,7 +123873,7 @@ ${(0, nV.indent)(r)}
123873
123873
  case "record": {
123874
123874
  const r = [];
123875
123875
  for (const i of e.fields)
123876
- (0, eo.isAtomic)(i) && r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);
123876
+ (0, eo.isAtomic)(i) && r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);
123877
123877
  return `ROW(${r.join(",")})`;
123878
123878
  }
123879
123879
  case "sql native":
@@ -123882,7 +123882,7 @@ ${(0, nV.indent)(r)}
123882
123882
  if ((0, eo.isRepeatedRecord)(e)) {
123883
123883
  const r = [];
123884
123884
  for (const i of e.fields)
123885
- (0, eo.isAtomic)(i) && r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);
123885
+ (0, eo.isAtomic)(i) && r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);
123886
123886
  return `ARRAY<ROW(${r.join(",")})>`;
123887
123887
  }
123888
123888
  return `ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`;
@@ -1395,7 +1395,7 @@ AS (
1395
1395
  ${(0,ile.indent)(r)}
1396
1396
  );
1397
1397
  `}sqlCreateFunctionCombineLastStage(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`SELECT ARRAY_AGG(CAST(ROW(${i}) as ROW(${s}))) FROM ${e}
1398
- `}sqlSelectAliasAsStruct(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`CAST(ROW(${i}) as ROW(${s})`}sqlAlterTimeExpr(e){let r=e.units,i=e.kids.delta.sql;return r==="quarter"&&(r="month",i=`${i}*3`),r==="week"&&(r="day",i=`${i}*7`),e.op==="-"&&(i=`(${i})*-1`),`DATE_ADD('${r}', ${i}, ${e.kids.base.sql})`}sqlCast(e,r){const{op:i,srcTypeDef:s,dstTypeDef:o,dstSQLType:u}=this.sqlCastPrep(r),a=hB(e),l=r.e.sql||"";return i==="timestamp::date"&&a?`CAST((${`CAST(${l} as TIMESTAMP)`}) AT TIME ZONE '${a}' AS DATE)`:i==="date::timestamp"&&a?`CAST(CONCAT(CAST(CAST(${l} AS TIMESTAMP) AS VARCHAR), ' ${a}') AS TIMESTAMP WITH TIME ZONE)`:To.TD.eq(s,o)?l:`${r.safe?"TRY_CAST":"CAST"}(${l} AS ${u})`}sqlRegexpMatch(e){return`REGEXP_LIKE(${e.kids.expr.sql}, ${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const r={microsecond:{use:"microsecond",ratio:1},millisecond:{use:"microsecond",ratio:1e3},second:{use:"millisecond",ratio:1e3},minute:{use:"second",ratio:60},hour:{use:"minute",ratio:60},day:{use:"hour",ratio:24},week:{use:"day",ratio:7}},i=e.kids.left,s=e.kids.right;let o=i.sql,u=s.sql;if(r[e.units]){const{use:a,ratio:l}=r[e.units];if(!JZe(a))throw new Error(`Measure in '${a} not implemented`);if(!To.TD.eq(i.typeDef,s.typeDef))throw new Error("Can't measure difference between different types");To.TD.isDate(i.typeDef)&&(o=`CAST(${o} AS TIMESTAMP)`,u=`CAST(${u} AS TIMESTAMP)`);let c=`DATE_DIFF('${a}',${o},${u})`;return l!==1&&(c=`FLOOR(CAST(${c} AS DOUBLE)/${l.toString()}.0)`),c}throw new Error(`Measure '${e.units} not implemented`)}sqlSampleTable(e,r){if(r!==void 0){if((0,To.isSamplingEnable)(r)&&r.enable&&(r=this.defaultSampling),(0,To.isSamplingRows)(r))throw new Error("Trino doesn't support sampling by rows only percent");if((0,To.isSamplingPercent)(r))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${r.percent}))`}return e}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,dB.expandOverrideMap)(KZe.TRINO_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,dB.expandBlueprintMap)(ole.TRINO_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){switch(e.type){case"number":return e.numberType==="integer"?"BIGINT":"DOUBLE";case"string":return"VARCHAR";case"record":{const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);return`ROW(${r.join(",")})`}case"sql native":return e.rawType||"UNKNOWN-NATIVE";case"array":{if((0,To.isRepeatedRecord)(e)){const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);return`ARRAY<ROW(${r.join(",")})>`}return`ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`}default:return e.type.toUpperCase()}}sqlTypeToMalloyType(e){var r,i,s;const o=(i=(r=e.match(/^(\w+)/))===null||r===void 0?void 0:r.at(0))!==null&&i!==void 0?i:e;return(s=XZe[o])!==null&&s!==void 0?s:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}sqlMakeUnnestKey(e,r){return`CAST(${e} as VARCHAR) || 'x' || CAST(${r} as VARCHAR)`}sqlStringAggDistinct(e,r,i){return`
1398
+ `}sqlSelectAliasAsStruct(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`CAST(ROW(${i}) as ROW(${s})`}sqlAlterTimeExpr(e){let r=e.units,i=e.kids.delta.sql;return r==="quarter"&&(r="month",i=`${i}*3`),r==="week"&&(r="day",i=`${i}*7`),e.op==="-"&&(i=`(${i})*-1`),`DATE_ADD('${r}', ${i}, ${e.kids.base.sql})`}sqlCast(e,r){const{op:i,srcTypeDef:s,dstTypeDef:o,dstSQLType:u}=this.sqlCastPrep(r),a=hB(e),l=r.e.sql||"";return i==="timestamp::date"&&a?`CAST((${`CAST(${l} as TIMESTAMP)`}) AT TIME ZONE '${a}' AS DATE)`:i==="date::timestamp"&&a?`CAST(CONCAT(CAST(CAST(${l} AS TIMESTAMP) AS VARCHAR), ' ${a}') AS TIMESTAMP WITH TIME ZONE)`:To.TD.eq(s,o)?l:`${r.safe?"TRY_CAST":"CAST"}(${l} AS ${u})`}sqlRegexpMatch(e){return`REGEXP_LIKE(${e.kids.expr.sql}, ${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const r={microsecond:{use:"microsecond",ratio:1},millisecond:{use:"microsecond",ratio:1e3},second:{use:"millisecond",ratio:1e3},minute:{use:"second",ratio:60},hour:{use:"minute",ratio:60},day:{use:"hour",ratio:24},week:{use:"day",ratio:7}},i=e.kids.left,s=e.kids.right;let o=i.sql,u=s.sql;if(r[e.units]){const{use:a,ratio:l}=r[e.units];if(!JZe(a))throw new Error(`Measure in '${a} not implemented`);if(!To.TD.eq(i.typeDef,s.typeDef))throw new Error("Can't measure difference between different types");To.TD.isDate(i.typeDef)&&(o=`CAST(${o} AS TIMESTAMP)`,u=`CAST(${u} AS TIMESTAMP)`);let c=`DATE_DIFF('${a}',${o},${u})`;return l!==1&&(c=`FLOOR(CAST(${c} AS DOUBLE)/${l.toString()}.0)`),c}throw new Error(`Measure '${e.units} not implemented`)}sqlSampleTable(e,r){if(r!==void 0){if((0,To.isSamplingEnable)(r)&&r.enable&&(r=this.defaultSampling),(0,To.isSamplingRows)(r))throw new Error("Trino doesn't support sampling by rows only percent");if((0,To.isSamplingPercent)(r))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${r.percent}))`}return e}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,dB.expandOverrideMap)(KZe.TRINO_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,dB.expandBlueprintMap)(ole.TRINO_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){switch(e.type){case"number":return e.numberType==="integer"?"BIGINT":"DOUBLE";case"string":return"VARCHAR";case"record":{const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);return`ROW(${r.join(",")})`}case"sql native":return e.rawType||"UNKNOWN-NATIVE";case"array":{if((0,To.isRepeatedRecord)(e)){const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);return`ARRAY<ROW(${r.join(",")})>`}return`ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`}default:return e.type.toUpperCase()}}sqlTypeToMalloyType(e){var r,i,s;const o=(i=(r=e.match(/^(\w+)/))===null||r===void 0?void 0:r.at(0))!==null&&i!==void 0?i:e;return(s=XZe[o])!==null&&s!==void 0?s:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}sqlMakeUnnestKey(e,r){return`CAST(${e} as VARCHAR) || 'x' || CAST(${r} as VARCHAR)`}sqlStringAggDistinct(e,r,i){return`
1399
1399
  ARRAY_JOIN(TRANSFORM(ARRAY_AGG(DISTINCT ARRAY[CAST(${r} AS VARCHAR),CAST(${e} as VARCHAR)]), x -> x[1]),${i.length>0?i:"','"})`}validateTypeName(e){return e.match(/^[A-Za-z\s(),<>0-9]*$/)!==null}sqlLiteralTime(e,r){if(To.TD.isDate(r.typeDef))return`DATE '${r.literal}'`;const i=r.timezone||hB(e);return i?`TIMESTAMP '${r.literal} ${i}'`:`TIMESTAMP '${r.literal}'`}sqlTimeExtractExpr(e,r){const i=sle.timeExtractMap[r.units]||r.units;let s=r.e.sql||"";if(To.TD.isTimestamp(r.e.typeDef)){const u=hB(e);u&&(s=`at_timezone(${s},'${u}')`)}const o=`EXTRACT(${i} FROM ${s})`;return r.units==="day_of_week"?`mod(${o}+1,7)`:o}sqlLiteralRecord(e){var r,i;const s=[],o=[];for(const u of e.typeDef.fields)if((0,To.isAtomic)(u)){const a=(r=u.as)!==null&&r!==void 0?r:u.name;s.push((i=e.kids[a].sql)!==null&&i!==void 0?i:"internal-error-record-literal");const l=this.malloyTypeToSQLType(u);o.push(`${a} ${l}`)}return`CAST(ROW(${s.join(",")}) AS ROW(${o.join(",")}))`}}A2.TrinoDialect=zc,zc.dtype="DECIMAL(38,0)";class ZZe extends zc{constructor(){super(...arguments),this.name="presto",this.supportsPipelinesInViews=!1,this.supportsLeftJoinUnnest=!1}sqlGenerateUUID(){return"CAST(UUID() AS VARCHAR)"}sqlUnnestAlias(e,r,i,s,o,u){return o?s?`-- Simulate a left join
1400
1400
  CROSS JOIN UNNEST(COALESCE(${e},ARRAY[NULL])) WITH ORDINALITY as ${r}(value, __row_id_almost_${r})
1401
1401
  CROSS JOIN UNNEST(ARRAY[CASE WHEN ${e} IS NOT NULL THEN __row_id_almost_${r} END]) as ${r}_ignore(__row_id_from_${r})`:`CROSS JOIN UNNEST(COALESCE(${e}, ARRAY[NULL])) as ${r}(value) `:s?`-- Simulate a left join
@@ -123873,7 +123873,7 @@ ${(0, nV.indent)(r)}
123873
123873
  case "record": {
123874
123874
  const r = [];
123875
123875
  for (const i of e.fields)
123876
- (0, eo.isAtomic)(i) && r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);
123876
+ (0, eo.isAtomic)(i) && r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);
123877
123877
  return `ROW(${r.join(",")})`;
123878
123878
  }
123879
123879
  case "sql native":
@@ -123882,7 +123882,7 @@ ${(0, nV.indent)(r)}
123882
123882
  if ((0, eo.isRepeatedRecord)(e)) {
123883
123883
  const r = [];
123884
123884
  for (const i of e.fields)
123885
- (0, eo.isAtomic)(i) && r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);
123885
+ (0, eo.isAtomic)(i) && r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);
123886
123886
  return `ARRAY<ROW(${r.join(",")})>`;
123887
123887
  }
123888
123888
  return `ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`;
@@ -1395,7 +1395,7 @@ AS (
1395
1395
  ${(0,rle.indent)(r)}
1396
1396
  );
1397
1397
  `}sqlCreateFunctionCombineLastStage(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`SELECT ARRAY_AGG(CAST(ROW(${i}) as ROW(${s}))) FROM ${e}
1398
- `}sqlSelectAliasAsStruct(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`CAST(ROW(${i}) as ROW(${s})`}sqlAlterTimeExpr(e){let r=e.units,i=e.kids.delta.sql;return r==="quarter"&&(r="month",i=`${i}*3`),r==="week"&&(r="day",i=`${i}*7`),e.op==="-"&&(i=`(${i})*-1`),`DATE_ADD('${r}', ${i}, ${e.kids.base.sql})`}sqlCast(e,r){const{op:i,srcTypeDef:s,dstTypeDef:o,dstSQLType:u}=this.sqlCastPrep(r),a=dB(e),l=r.e.sql||"";return i==="timestamp::date"&&a?`CAST((${`CAST(${l} as TIMESTAMP)`}) AT TIME ZONE '${a}' AS DATE)`:i==="date::timestamp"&&a?`CAST(CONCAT(CAST(CAST(${l} AS TIMESTAMP) AS VARCHAR), ' ${a}') AS TIMESTAMP WITH TIME ZONE)`:To.TD.eq(s,o)?l:`${r.safe?"TRY_CAST":"CAST"}(${l} AS ${u})`}sqlRegexpMatch(e){return`REGEXP_LIKE(${e.kids.expr.sql}, ${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const r={microsecond:{use:"microsecond",ratio:1},millisecond:{use:"microsecond",ratio:1e3},second:{use:"millisecond",ratio:1e3},minute:{use:"second",ratio:60},hour:{use:"minute",ratio:60},day:{use:"hour",ratio:24},week:{use:"day",ratio:7}},i=e.kids.left,s=e.kids.right;let o=i.sql,u=s.sql;if(r[e.units]){const{use:a,ratio:l}=r[e.units];if(!JZe(a))throw new Error(`Measure in '${a} not implemented`);if(!To.TD.eq(i.typeDef,s.typeDef))throw new Error("Can't measure difference between different types");To.TD.isDate(i.typeDef)&&(o=`CAST(${o} AS TIMESTAMP)`,u=`CAST(${u} AS TIMESTAMP)`);let c=`DATE_DIFF('${a}',${o},${u})`;return l!==1&&(c=`FLOOR(CAST(${c} AS DOUBLE)/${l.toString()}.0)`),c}throw new Error(`Measure '${e.units} not implemented`)}sqlSampleTable(e,r){if(r!==void 0){if((0,To.isSamplingEnable)(r)&&r.enable&&(r=this.defaultSampling),(0,To.isSamplingRows)(r))throw new Error("Trino doesn't support sampling by rows only percent");if((0,To.isSamplingPercent)(r))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${r.percent}))`}return e}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,xB.expandOverrideMap)(KZe.TRINO_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,xB.expandBlueprintMap)(sle.TRINO_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){switch(e.type){case"number":return e.numberType==="integer"?"BIGINT":"DOUBLE";case"string":return"VARCHAR";case"record":{const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);return`ROW(${r.join(",")})`}case"sql native":return e.rawType||"UNKNOWN-NATIVE";case"array":{if((0,To.isRepeatedRecord)(e)){const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${i.name} ${this.malloyTypeToSQLType(i)}`);return`ARRAY<ROW(${r.join(",")})>`}return`ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`}default:return e.type.toUpperCase()}}sqlTypeToMalloyType(e){var r,i,s;const o=(i=(r=e.match(/^(\w+)/))===null||r===void 0?void 0:r.at(0))!==null&&i!==void 0?i:e;return(s=XZe[o])!==null&&s!==void 0?s:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}sqlMakeUnnestKey(e,r){return`CAST(${e} as VARCHAR) || 'x' || CAST(${r} as VARCHAR)`}sqlStringAggDistinct(e,r,i){return`
1398
+ `}sqlSelectAliasAsStruct(e,r){const i=r.map(o=>o.sqlExpression).join(", "),s=this.buildTypeExpression(r);return`CAST(ROW(${i}) as ROW(${s})`}sqlAlterTimeExpr(e){let r=e.units,i=e.kids.delta.sql;return r==="quarter"&&(r="month",i=`${i}*3`),r==="week"&&(r="day",i=`${i}*7`),e.op==="-"&&(i=`(${i})*-1`),`DATE_ADD('${r}', ${i}, ${e.kids.base.sql})`}sqlCast(e,r){const{op:i,srcTypeDef:s,dstTypeDef:o,dstSQLType:u}=this.sqlCastPrep(r),a=dB(e),l=r.e.sql||"";return i==="timestamp::date"&&a?`CAST((${`CAST(${l} as TIMESTAMP)`}) AT TIME ZONE '${a}' AS DATE)`:i==="date::timestamp"&&a?`CAST(CONCAT(CAST(CAST(${l} AS TIMESTAMP) AS VARCHAR), ' ${a}') AS TIMESTAMP WITH TIME ZONE)`:To.TD.eq(s,o)?l:`${r.safe?"TRY_CAST":"CAST"}(${l} AS ${u})`}sqlRegexpMatch(e){return`REGEXP_LIKE(${e.kids.expr.sql}, ${e.kids.regex.sql})`}sqlMeasureTimeExpr(e){const r={microsecond:{use:"microsecond",ratio:1},millisecond:{use:"microsecond",ratio:1e3},second:{use:"millisecond",ratio:1e3},minute:{use:"second",ratio:60},hour:{use:"minute",ratio:60},day:{use:"hour",ratio:24},week:{use:"day",ratio:7}},i=e.kids.left,s=e.kids.right;let o=i.sql,u=s.sql;if(r[e.units]){const{use:a,ratio:l}=r[e.units];if(!JZe(a))throw new Error(`Measure in '${a} not implemented`);if(!To.TD.eq(i.typeDef,s.typeDef))throw new Error("Can't measure difference between different types");To.TD.isDate(i.typeDef)&&(o=`CAST(${o} AS TIMESTAMP)`,u=`CAST(${u} AS TIMESTAMP)`);let c=`DATE_DIFF('${a}',${o},${u})`;return l!==1&&(c=`FLOOR(CAST(${c} AS DOUBLE)/${l.toString()}.0)`),c}throw new Error(`Measure '${e.units} not implemented`)}sqlSampleTable(e,r){if(r!==void 0){if((0,To.isSamplingEnable)(r)&&r.enable&&(r=this.defaultSampling),(0,To.isSamplingRows)(r))throw new Error("Trino doesn't support sampling by rows only percent");if((0,To.isSamplingPercent)(r))return`(SELECT * FROM ${e} TABLESAMPLE SYSTEM (${r.percent}))`}return e}sqlLiteralString(e){return"'"+e.replace(/'/g,"''")+"'"}sqlLiteralRegexp(e){return"'"+e.replace(/'/g,"''")+"'"}getDialectFunctionOverrides(){return(0,xB.expandOverrideMap)(KZe.TRINO_MALLOY_STANDARD_OVERLOADS)}getDialectFunctions(){return(0,xB.expandBlueprintMap)(sle.TRINO_DIALECT_FUNCTIONS)}malloyTypeToSQLType(e){switch(e.type){case"number":return e.numberType==="integer"?"BIGINT":"DOUBLE";case"string":return"VARCHAR";case"record":{const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);return`ROW(${r.join(",")})`}case"sql native":return e.rawType||"UNKNOWN-NATIVE";case"array":{if((0,To.isRepeatedRecord)(e)){const r=[];for(const i of e.fields)(0,To.isAtomic)(i)&&r.push(`${this.sqlMaybeQuoteIdentifier(i.name)} ${this.malloyTypeToSQLType(i)}`);return`ARRAY<ROW(${r.join(",")})>`}return`ARRAY<${this.malloyTypeToSQLType(e.elementTypeDef)}>`}default:return e.type.toUpperCase()}}sqlTypeToMalloyType(e){var r,i,s;const o=(i=(r=e.match(/^(\w+)/))===null||r===void 0?void 0:r.at(0))!==null&&i!==void 0?i:e;return(s=XZe[o])!==null&&s!==void 0?s:{type:"sql native",rawType:e}}castToString(e){return`CAST(${e} as VARCHAR)`}concat(...e){return e.join(" || ")}sqlMakeUnnestKey(e,r){return`CAST(${e} as VARCHAR) || 'x' || CAST(${r} as VARCHAR)`}sqlStringAggDistinct(e,r,i){return`
1399
1399
  ARRAY_JOIN(TRANSFORM(ARRAY_AGG(DISTINCT ARRAY[CAST(${r} AS VARCHAR),CAST(${e} as VARCHAR)]), x -> x[1]),${i.length>0?i:"','"})`}validateTypeName(e){return e.match(/^[A-Za-z\s(),<>0-9]*$/)!==null}sqlLiteralTime(e,r){if(To.TD.isDate(r.typeDef))return`DATE '${r.literal}'`;const i=r.timezone||dB(e);return i?`TIMESTAMP '${r.literal} ${i}'`:`TIMESTAMP '${r.literal}'`}sqlTimeExtractExpr(e,r){const i=ile.timeExtractMap[r.units]||r.units;let s=r.e.sql||"";if(To.TD.isTimestamp(r.e.typeDef)){const u=dB(e);u&&(s=`at_timezone(${s},'${u}')`)}const o=`EXTRACT(${i} FROM ${s})`;return r.units==="day_of_week"?`mod(${o}+1,7)`:o}sqlLiteralRecord(e){var r,i;const s=[],o=[];for(const u of e.typeDef.fields)if((0,To.isAtomic)(u)){const a=(r=u.as)!==null&&r!==void 0?r:u.name;s.push((i=e.kids[a].sql)!==null&&i!==void 0?i:"internal-error-record-literal");const l=this.malloyTypeToSQLType(u);o.push(`${a} ${l}`)}return`CAST(ROW(${s.join(",")}) AS ROW(${o.join(",")}))`}}A2.TrinoDialect=zc,zc.dtype="DECIMAL(38,0)";class ZZe extends zc{constructor(){super(...arguments),this.name="presto",this.supportsPipelinesInViews=!1,this.supportsLeftJoinUnnest=!1}sqlGenerateUUID(){return"CAST(UUID() AS VARCHAR)"}sqlUnnestAlias(e,r,i,s,o,u){return o?s?`-- Simulate a left join
1400
1400
  CROSS JOIN UNNEST(COALESCE(${e},ARRAY[NULL])) WITH ORDINALITY as ${r}(value, __row_id_almost_${r})
1401
1401
  CROSS JOIN UNNEST(ARRAY[CASE WHEN ${e} IS NOT NULL THEN __row_id_almost_${r} END]) as ${r}_ignore(__row_id_from_${r})`:`CROSS JOIN UNNEST(COALESCE(${e}, ARRAY[NULL])) as ${r}(value) `:s?`-- Simulate a left join
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/render",
3
- "version": "0.0.261-dev250410215229",
3
+ "version": "0.0.261-dev250410224545",
4
4
  "license": "MIT",
5
5
  "main": "dist/module/index.umd.js",
6
6
  "types": "dist/index.d.ts",
@@ -41,9 +41,9 @@
41
41
  "generate-flow": "ts-node ../../scripts/gen-flow.ts"
42
42
  },
43
43
  "dependencies": {
44
- "@malloydata/malloy": "^0.0.261-dev250410215229",
45
- "@malloydata/malloy-interfaces": "^0.0.261-dev250410215229",
46
- "@malloydata/malloy-tag": "^0.0.261-dev250410215229",
44
+ "@malloydata/malloy": "^0.0.261-dev250410224545",
45
+ "@malloydata/malloy-interfaces": "^0.0.261-dev250410224545",
46
+ "@malloydata/malloy-tag": "^0.0.261-dev250410224545",
47
47
  "@tanstack/solid-virtual": "^3.10.4",
48
48
  "component-register": "^0.8.6",
49
49
  "lodash": "^4.17.20",
@@ -56,7 +56,7 @@
56
56
  "vega-lite": "^5.2.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@malloydata/db-duckdb": "^0.0.261-dev250410215229",
59
+ "@malloydata/db-duckdb": "^0.0.261-dev250410224545",
60
60
  "@storybook/addon-essentials": "^8.5.8",
61
61
  "@storybook/addon-interactions": "^8.5.8",
62
62
  "@storybook/addon-links": "^8.5.8",