@hdnax/sqlingo.js 0.0.5 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.repo.md +1 -2
- package/dist/chunk-2YNOERAO.cjs +2 -0
- package/dist/chunk-2YNOERAO.cjs.map +1 -0
- package/dist/chunk-2Z3O2CFM.cjs +19 -0
- package/dist/chunk-2Z3O2CFM.cjs.map +1 -0
- package/dist/chunk-4ZMKB6PV.cjs +2 -0
- package/dist/chunk-4ZMKB6PV.cjs.map +1 -0
- package/dist/chunk-53OWF4GG.js +2 -0
- package/dist/chunk-53OWF4GG.js.map +1 -0
- package/dist/chunk-C4CLTVOW.cjs +2 -0
- package/dist/chunk-C4CLTVOW.cjs.map +1 -0
- package/dist/chunk-DOKMTZYO.cjs +4 -0
- package/dist/chunk-DOKMTZYO.cjs.map +1 -0
- package/dist/chunk-FCGUTI7Y.js +2 -0
- package/dist/chunk-FCGUTI7Y.js.map +1 -0
- package/dist/chunk-IPCIXWCY.js +2 -0
- package/dist/chunk-IPCIXWCY.js.map +1 -0
- package/dist/chunk-KCNOE4DZ.js +19 -0
- package/dist/chunk-KCNOE4DZ.js.map +1 -0
- package/dist/chunk-NRJHX2GZ.js +2 -0
- package/dist/chunk-NRJHX2GZ.js.map +1 -0
- package/dist/chunk-O2J5RKBN.js +2 -0
- package/dist/chunk-O2J5RKBN.js.map +1 -0
- package/dist/chunk-PXUASP5I.js +2 -0
- package/dist/chunk-PXUASP5I.js.map +1 -0
- package/dist/chunk-R7C3ZHVK.cjs +2 -0
- package/dist/chunk-R7C3ZHVK.cjs.map +1 -0
- package/dist/chunk-UHWHUDLE.cjs +2 -0
- package/dist/chunk-UHWHUDLE.cjs.map +1 -0
- package/dist/chunk-WRNYJ54A.cjs +2 -0
- package/dist/chunk-WRNYJ54A.cjs.map +1 -0
- package/dist/chunk-XZQFOICX.cjs +3 -0
- package/dist/chunk-XZQFOICX.cjs.map +1 -0
- package/dist/chunk-YLOQRUXC.js +2 -0
- package/dist/chunk-YLOQRUXC.js.map +1 -0
- package/dist/chunk-YSS2WVCM.cjs +2 -0
- package/dist/chunk-YSS2WVCM.cjs.map +1 -0
- package/dist/chunk-Z5V6VOIN.js +3 -0
- package/dist/chunk-Z5V6VOIN.js.map +1 -0
- package/dist/chunk-ZBFGQPJR.js +4 -0
- package/dist/chunk-ZBFGQPJR.js.map +1 -0
- package/dist/dialects/athena.cjs +2 -0
- package/dist/dialects/athena.cjs.map +1 -0
- package/dist/dialects/athena.d.cts +66 -0
- package/dist/dialects/athena.d.ts +66 -0
- package/dist/dialects/athena.js +2 -0
- package/dist/dialects/athena.js.map +1 -0
- package/dist/dialects/bigquery.cjs +3 -0
- package/dist/dialects/bigquery.cjs.map +1 -0
- package/dist/dialects/bigquery.d.cts +651 -0
- package/dist/dialects/bigquery.d.ts +651 -0
- package/dist/dialects/bigquery.js +3 -0
- package/dist/dialects/bigquery.js.map +1 -0
- package/dist/dialects/clickhouse.cjs +2 -0
- package/dist/dialects/clickhouse.cjs.map +1 -0
- package/dist/dialects/clickhouse.d.cts +634 -0
- package/dist/dialects/clickhouse.d.ts +634 -0
- package/dist/dialects/clickhouse.js +2 -0
- package/dist/dialects/clickhouse.js.map +1 -0
- package/dist/dialects/databricks.cjs +2 -0
- package/dist/dialects/databricks.cjs.map +1 -0
- package/dist/dialects/databricks.d.cts +484 -0
- package/dist/dialects/databricks.d.ts +484 -0
- package/dist/dialects/databricks.js +2 -0
- package/dist/dialects/databricks.js.map +1 -0
- package/dist/dialects/doris.cjs +2 -0
- package/dist/dialects/doris.cjs.map +1 -0
- package/dist/dialects/doris.d.cts +484 -0
- package/dist/dialects/doris.d.ts +484 -0
- package/dist/dialects/doris.js +2 -0
- package/dist/dialects/doris.js.map +1 -0
- package/dist/dialects/dremio.cjs +2 -0
- package/dist/dialects/dremio.cjs.map +1 -0
- package/dist/dialects/dremio.d.cts +522 -0
- package/dist/dialects/dremio.d.ts +522 -0
- package/dist/dialects/dremio.js +2 -0
- package/dist/dialects/dremio.js.map +1 -0
- package/dist/dialects/drill.cjs +2 -0
- package/dist/dialects/drill.cjs.map +1 -0
- package/dist/dialects/drill.d.cts +512 -0
- package/dist/dialects/drill.d.ts +512 -0
- package/dist/dialects/drill.js +2 -0
- package/dist/dialects/drill.js.map +1 -0
- package/dist/dialects/druid.cjs +2 -0
- package/dist/dialects/druid.cjs.map +1 -0
- package/dist/dialects/druid.d.cts +17 -0
- package/dist/dialects/druid.d.ts +17 -0
- package/dist/dialects/druid.js +2 -0
- package/dist/dialects/druid.js.map +1 -0
- package/dist/dialects/duckdb.cjs +86 -0
- package/dist/dialects/duckdb.cjs.map +1 -0
- package/dist/dialects/duckdb.d.cts +756 -0
- package/dist/dialects/duckdb.d.ts +756 -0
- package/dist/dialects/duckdb.js +86 -0
- package/dist/dialects/duckdb.js.map +1 -0
- package/dist/dialects/dune.cjs +2 -0
- package/dist/dialects/dune.cjs.map +1 -0
- package/dist/dialects/dune.d.cts +21 -0
- package/dist/dialects/dune.d.ts +21 -0
- package/dist/dialects/dune.js +2 -0
- package/dist/dialects/dune.js.map +1 -0
- package/dist/dialects/exasol.cjs +2 -0
- package/dist/dialects/exasol.cjs.map +1 -0
- package/dist/dialects/exasol.d.cts +507 -0
- package/dist/dialects/exasol.d.ts +507 -0
- package/dist/dialects/exasol.js +2 -0
- package/dist/dialects/exasol.js.map +1 -0
- package/dist/dialects/fabric.cjs +2 -0
- package/dist/dialects/fabric.cjs.map +1 -0
- package/dist/dialects/fabric.d.cts +463 -0
- package/dist/dialects/fabric.d.ts +463 -0
- package/dist/dialects/fabric.js +2 -0
- package/dist/dialects/fabric.js.map +1 -0
- package/dist/dialects/hive.cjs +2 -0
- package/dist/dialects/hive.cjs.map +1 -0
- package/dist/dialects/hive.d.cts +585 -0
- package/dist/dialects/hive.d.ts +585 -0
- package/dist/dialects/hive.js +2 -0
- package/dist/dialects/hive.js.map +1 -0
- package/dist/dialects/materialize.cjs +2 -0
- package/dist/dialects/materialize.cjs.map +1 -0
- package/dist/dialects/materialize.d.cts +890 -0
- package/dist/dialects/materialize.d.ts +890 -0
- package/dist/dialects/materialize.js +2 -0
- package/dist/dialects/materialize.js.map +1 -0
- package/dist/dialects/mysql.cjs +2 -0
- package/dist/dialects/mysql.cjs.map +1 -0
- package/dist/dialects/mysql.d.cts +292 -0
- package/dist/dialects/mysql.d.ts +292 -0
- package/dist/dialects/mysql.js +2 -0
- package/dist/dialects/mysql.js.map +1 -0
- package/dist/dialects/oracle.cjs +2 -0
- package/dist/dialects/oracle.cjs.map +1 -0
- package/dist/dialects/oracle.d.cts +539 -0
- package/dist/dialects/oracle.d.ts +539 -0
- package/dist/dialects/oracle.js +2 -0
- package/dist/dialects/oracle.js.map +1 -0
- package/dist/dialects/postgres.cjs +2 -0
- package/dist/dialects/postgres.cjs.map +1 -0
- package/dist/dialects/postgres.d.cts +587 -0
- package/dist/dialects/postgres.d.ts +587 -0
- package/dist/dialects/postgres.js +2 -0
- package/dist/dialects/postgres.js.map +1 -0
- package/dist/dialects/presto.cjs +2 -0
- package/dist/dialects/presto.cjs.map +1 -0
- package/dist/dialects/presto.d.cts +173 -0
- package/dist/dialects/presto.d.ts +173 -0
- package/dist/dialects/presto.js +2 -0
- package/dist/dialects/presto.js.map +1 -0
- package/dist/dialects/prql.cjs +2 -0
- package/dist/dialects/prql.cjs.map +1 -0
- package/dist/dialects/prql.d.cts +496 -0
- package/dist/dialects/prql.d.ts +496 -0
- package/dist/dialects/prql.js +2 -0
- package/dist/dialects/prql.js.map +1 -0
- package/dist/dialects/redshift.cjs +2 -0
- package/dist/dialects/redshift.cjs.map +1 -0
- package/dist/dialects/redshift.d.cts +132 -0
- package/dist/dialects/redshift.d.ts +132 -0
- package/dist/dialects/redshift.js +2 -0
- package/dist/dialects/redshift.js.map +1 -0
- package/dist/dialects/risingwave.cjs +2 -0
- package/dist/dialects/risingwave.cjs.map +1 -0
- package/dist/dialects/risingwave.d.cts +478 -0
- package/dist/dialects/risingwave.d.ts +478 -0
- package/dist/dialects/risingwave.js +2 -0
- package/dist/dialects/risingwave.js.map +1 -0
- package/dist/dialects/singlestore.cjs +2 -0
- package/dist/dialects/singlestore.cjs.map +1 -0
- package/dist/dialects/singlestore.d.cts +73 -0
- package/dist/dialects/singlestore.d.ts +73 -0
- package/dist/dialects/singlestore.js +2 -0
- package/dist/dialects/singlestore.js.map +1 -0
- package/dist/dialects/snowflake.cjs +3 -0
- package/dist/dialects/snowflake.cjs.map +1 -0
- package/dist/dialects/snowflake.d.cts +320 -0
- package/dist/dialects/snowflake.d.ts +320 -0
- package/dist/dialects/snowflake.js +3 -0
- package/dist/dialects/snowflake.js.map +1 -0
- package/dist/dialects/solr.cjs +2 -0
- package/dist/dialects/solr.cjs.map +1 -0
- package/dist/dialects/solr.d.cts +458 -0
- package/dist/dialects/solr.d.ts +458 -0
- package/dist/dialects/solr.js +2 -0
- package/dist/dialects/solr.js.map +1 -0
- package/dist/dialects/spark.cjs +2 -0
- package/dist/dialects/spark.cjs.map +1 -0
- package/dist/dialects/spark.d.cts +484 -0
- package/dist/dialects/spark.d.ts +484 -0
- package/dist/dialects/spark.js +2 -0
- package/dist/dialects/spark.js.map +1 -0
- package/dist/dialects/spark2.cjs +2 -0
- package/dist/dialects/spark2.cjs.map +1 -0
- package/dist/dialects/spark2.d.cts +486 -0
- package/dist/dialects/spark2.d.ts +486 -0
- package/dist/dialects/spark2.js +2 -0
- package/dist/dialects/spark2.js.map +1 -0
- package/dist/dialects/sqlite.cjs +2 -0
- package/dist/dialects/sqlite.cjs.map +1 -0
- package/dist/dialects/sqlite.d.cts +510 -0
- package/dist/dialects/sqlite.d.ts +510 -0
- package/dist/dialects/sqlite.js +2 -0
- package/dist/dialects/sqlite.js.map +1 -0
- package/dist/dialects/starrocks.cjs +2 -0
- package/dist/dialects/starrocks.cjs.map +1 -0
- package/dist/dialects/starrocks.d.cts +518 -0
- package/dist/dialects/starrocks.d.ts +518 -0
- package/dist/dialects/starrocks.js +2 -0
- package/dist/dialects/starrocks.js.map +1 -0
- package/dist/dialects/tableau.cjs +2 -0
- package/dist/dialects/tableau.cjs.map +1 -0
- package/dist/dialects/tableau.d.cts +466 -0
- package/dist/dialects/tableau.d.ts +466 -0
- package/dist/dialects/tableau.js +2 -0
- package/dist/dialects/tableau.js.map +1 -0
- package/dist/dialects/teradata.cjs +2 -0
- package/dist/dialects/teradata.cjs.map +1 -0
- package/dist/dialects/teradata.d.cts +539 -0
- package/dist/dialects/teradata.d.ts +539 -0
- package/dist/dialects/teradata.js +2 -0
- package/dist/dialects/teradata.js.map +1 -0
- package/dist/dialects/trino.cjs +2 -0
- package/dist/dialects/trino.cjs.map +1 -0
- package/dist/dialects/trino.d.cts +465 -0
- package/dist/dialects/trino.d.ts +465 -0
- package/dist/dialects/trino.js +2 -0
- package/dist/dialects/trino.js.map +1 -0
- package/dist/dialects/tsql.cjs +2 -0
- package/dist/dialects/tsql.cjs.map +1 -0
- package/dist/dialects/tsql.d.cts +703 -0
- package/dist/dialects/tsql.d.ts +703 -0
- package/dist/dialects/tsql.js +2 -0
- package/dist/dialects/tsql.js.map +1 -0
- package/dist/index.cjs +5 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -14178
- package/dist/index.d.ts +3 -14178
- package/dist/index.js +5 -25
- package/dist/index.js.map +1 -1
- package/dist/tokens-VcMD09XM.d.cts +15805 -0
- package/dist/tokens-VcMD09XM.d.ts +15805 -0
- package/package.json +171 -5
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk2YNOERAOcjs = require('./chunk-2YNOERAO.cjs');var _chunkXZQFOICXcjs = require('./chunk-XZQFOICX.cjs');var _chunk2Z3O2CFMcjs = require('./chunk-2Z3O2CFM.cjs');var Vt,X;Vt=[_chunk2Z3O2CFMcjs.r];var m=class{static get EXPRESSION_METADATA(){let s=new Map(_chunk2YNOERAOcjs.a.EXPRESSION_METADATA),t=(r,u)=>{for(let ne of r)s.set(ne,u)};return t([_chunk2Z3O2CFMcjs.if],{returns:"double"}),t([_chunk2Z3O2CFMcjs.Hg,_chunk2Z3O2CFMcjs.hh,_chunk2Z3O2CFMcjs.lk,_chunk2Z3O2CFMcjs.Ek,_chunk2Z3O2CFMcjs.qh],{returns:"varchar"}),s.set(_chunk2Z3O2CFMcjs.vf,{returns:"bigint"}),s.set(_chunk2Z3O2CFMcjs.dh,{returns:"timestampntz"}),s.set(_chunk2Z3O2CFMcjs.Ei,{returns:"binary"}),s.set(_chunk2Z3O2CFMcjs.Eh,{returns:"date"}),s.set(_chunk2Z3O2CFMcjs.xg,{returns:"int"}),s.set(_chunk2Z3O2CFMcjs.sk,{annotator:(r,u)=>r.annotateByArgs(u,["this"])}),s}};X=_chunk2Z3O2CFMcjs.a.call(void 0, null),_chunk2Z3O2CFMcjs.d.call(void 0, X,10,"EXPRESSION_METADATA",Vt,m),_chunk2Z3O2CFMcjs.b.call(void 0, X,m),_chunk2Z3O2CFMcjs.c.call(void 0, X,3,m);function Kt(e){let s,t=_chunk2Z3O2CFMcjs.ca.call(void 0, e,0),r=_chunk2Z3O2CFMcjs.ca.call(void 0, e,1);return e.length===3&&(s=_chunk2Z3O2CFMcjs.Eo.call(void 0, _optionalChain([t, 'optionalAccess', _2 => _2.name])),t=e[2]),new (0, _chunk2Z3O2CFMcjs.xh)({this:new (0, _chunk2Z3O2CFMcjs.Pl)({this:t}),expression:new (0, _chunk2Z3O2CFMcjs.Pl)({this:r}),unit:s})}function v(e){let s=_chunk2Z3O2CFMcjs.ca.call(void 0, e,1);return e.length===2?new (0, _chunk2Z3O2CFMcjs.Nl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, e,0),expression:s,unit:_chunk2Z3O2CFMcjs.$c.string("DAY")}):new (0, _chunk2Z3O2CFMcjs._h)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, e,2),expression:s,unit:_chunk2Z3O2CFMcjs.ca.call(void 0, e,0)})}function oe(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"?_chunk2Z3O2CFMcjs.eo.call(void 0, e.toString()):e instanceof _chunk2Z3O2CFMcjs.$c?_chunk2Z3O2CFMcjs.eo.call(void 0, e.name):e}function Wt(e){if(!e.args.unit||e instanceof _chunk2Z3O2CFMcjs.Nl&&e.text("unit").toUpperCase()==="DAY")return this.func("DATE_ADD",[e.args.this,e.args.expression]);let t=this.func("DATE_ADD",[_chunk2Z3O2CFMcjs.vq.call(void 0, e),e.args.expression,e.args.this]);if(e instanceof _chunk2Z3O2CFMcjs.Nl){let r=e.returnType;_optionalChain([r, 'optionalAccess', _3 => _3.isType, 'call', _4 => _4(["timestamp","datetime"])])||(t=`CAST(${t} AS ${r})`)}return t}function ae(e){if(this.dialect.version.major<4){let s=new (0, _chunk2Z3O2CFMcjs.qg)({this:new (0, _chunk2Z3O2CFMcjs.Nm)({this:e.args.this}),expression:e.args.separator||_chunk2Z3O2CFMcjs.$c.string("")});return this.sql(s)}return _chunk2Z3O2CFMcjs.Qq.call(this,e)}var Zt,Xt,J,R=class extends(Xt=_chunk2YNOERAOcjs.d.Tokenizer,Zt=[_chunk2Z3O2CFMcjs.r],Xt){static get RAW_STRINGS(){return _chunk2YNOERAOcjs.d.Tokenizer.QUOTES.flatMap(t=>[[`r${t}`,t],[`R${t}`,t]])}};J=_chunk2Z3O2CFMcjs.a.call(void 0, Xt),_chunk2Z3O2CFMcjs.d.call(void 0, J,10,"RAW_STRINGS",Zt,R),_chunk2Z3O2CFMcjs.b.call(void 0, J,R),_chunk2Z3O2CFMcjs.c.call(void 0, J,3,R),R.STRING_ESCAPES_ALLOWED_IN_RAW_STRINGS=!1;var vt,Jt,$t,Ht,Qt,jt,zt,c,A=class extends(zt=_chunk2YNOERAOcjs.d.Parser,jt=[_chunk2Z3O2CFMcjs.r],Qt=[_chunk2Z3O2CFMcjs.r],Ht=[_chunk2Z3O2CFMcjs.r],$t=[_chunk2Z3O2CFMcjs.r],Jt=[_chunk2Z3O2CFMcjs.r],vt=[_chunk2Z3O2CFMcjs.r],zt){static get NO_PAREN_FUNCTIONS(){let t={..._chunk2YNOERAOcjs.d.Parser.NO_PAREN_FUNCTIONS};return t.sessionUser=_chunk2Z3O2CFMcjs.qh,delete t.localtime,delete t.localtimestamp,t}static get ID_VAR_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.ID_VAR_TOKENS,"currentCatalog","straightJoin"])}static get FUNCTIONS(){return{..._chunk2YNOERAOcjs.d.Parser.FUNCTIONS,ANY_VALUE:_chunkXZQFOICXcjs.b.call(void 0, _chunk2Z3O2CFMcjs.Um),ARRAY_INSERT:t=>new (0, _chunk2Z3O2CFMcjs.jg)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),position:_chunk2Z3O2CFMcjs.ca.call(void 0, t,1),expression:_chunk2Z3O2CFMcjs.ca.call(void 0, t,2),offset:1}),BIT_AND:t=>_chunk2Z3O2CFMcjs.om.fromArgList(t),BIT_OR:t=>_chunk2Z3O2CFMcjs.pm.fromArgList(t),BIT_XOR:t=>_chunk2Z3O2CFMcjs.qm.fromArgList(t),BIT_COUNT:t=>_chunk2Z3O2CFMcjs.tf.fromArgList(t),DATE_ADD:v,DATEADD:v,TIMESTAMPADD:v,TIMESTAMPDIFF:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.ai),TRY_ADD:t=>_chunk2Z3O2CFMcjs.$k.fromArgList(t),TRY_MULTIPLY:t=>_chunk2Z3O2CFMcjs.bl.fromArgList(t),TRY_SUBTRACT:t=>_chunk2Z3O2CFMcjs.dl.fromArgList(t),DATEDIFF:Kt,DATE_DIFF:Kt,JSON_OBJECT_KEYS:t=>_chunk2Z3O2CFMcjs.ij.fromArgList(t),LISTAGG:t=>_chunk2Z3O2CFMcjs.in.fromArgList(t),TIMESTAMP_LTZ:_chunk2YNOERAOcjs.b.call(void 0, "TIMESTAMP_LTZ"),TIMESTAMP_NTZ:_chunk2YNOERAOcjs.b.call(void 0, "TIMESTAMP_NTZ"),TRY_ELEMENT_AT:t=>new (0, _chunk2Z3O2CFMcjs.de)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),expressions:[t[1]],offset:1,safe:!0}),LIKE:_chunk2Z3O2CFMcjs.Kq.call(void 0, _chunk2Z3O2CFMcjs.Me),ILIKE:_chunk2Z3O2CFMcjs.Kq.call(void 0, _chunk2Z3O2CFMcjs.Ie)}}static get PLACEHOLDER_PARSERS(){return{..._chunk2YNOERAOcjs.d.Parser.PLACEHOLDER_PARSERS,lBrace:function(){return this.parseQueryParameter()}}}static get FUNCTION_PARSERS(){return{..._chunk2YNOERAOcjs.d.Parser.FUNCTION_PARSERS,SUBSTR:function(){return this.parseSubstring()}}}parseQueryParameter(){let t=this.parseIdVar();return this.match("rBrace"),this.expression(_chunk2Z3O2CFMcjs._d,{this:t,widget:!0})}parseGeneratedAsIdentity(){let t=super.parseGeneratedAsIdentity();return t.args.expression?this.expression(_chunk2Z3O2CFMcjs.Yc,{this:t.args.expression}):t}parsePivotAggregation(){let t=this.parseFunction()||this.parseDisjunction();return this.parseAlias(t)}static get TABLE_ALIAS_TOKENS(){return new Set([..._chunk2YNOERAOcjs.d.Parser.TABLE_ALIAS_TOKENS,"straightJoin"])}};c=_chunk2Z3O2CFMcjs.a.call(void 0, zt),_chunk2Z3O2CFMcjs.d.call(void 0, c,10,"NO_PAREN_FUNCTIONS",jt,A),_chunk2Z3O2CFMcjs.d.call(void 0, c,10,"ID_VAR_TOKENS",Qt,A),_chunk2Z3O2CFMcjs.d.call(void 0, c,10,"FUNCTIONS",Ht,A),_chunk2Z3O2CFMcjs.d.call(void 0, c,10,"PLACEHOLDER_PARSERS",$t,A),_chunk2Z3O2CFMcjs.d.call(void 0, c,10,"FUNCTION_PARSERS",Jt,A),_chunk2Z3O2CFMcjs.d.call(void 0, c,10,"TABLE_ALIAS_TOKENS",vt,A),_chunk2Z3O2CFMcjs.b.call(void 0, c,A),_chunk2Z3O2CFMcjs.c.call(void 0, c,3,A);var kt,te,ee,I,n=class extends(ee=_chunk2YNOERAOcjs.d.Generator,te=[_chunk2Z3O2CFMcjs.r],kt=[_chunk2Z3O2CFMcjs.r],ee){static get TYPE_MAPPING(){return new Map([..._chunk2YNOERAOcjs.d.Generator.TYPE_MAPPING,["money","DECIMAL(15, 4)"],["smallmoney","DECIMAL(6, 4)"],["uuid","STRING"],["timestampltz","TIMESTAMP_LTZ"],["timestampntz","TIMESTAMP_NTZ"]])}static get ORIGINAL_TRANSFORMS(){let t=new Map([..._chunk2YNOERAOcjs.d.Generator.TRANSFORMS.entries(),[_chunk2Z3O2CFMcjs.lg,function(r){return this.func("ARRAY_COMPACT",[this.func("ARRAY",r.args.expressions||[])])}],[_chunk2Z3O2CFMcjs.fg,_chunk2Z3O2CFMcjs.Gp.call(void 0, "ARRAY_APPEND")],[_chunk2Z3O2CFMcjs.gg,_chunk2Z3O2CFMcjs.Gp.call(void 0, "ARRAY_PREPEND")],[_chunk2Z3O2CFMcjs.om,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_AND")],[_chunk2Z3O2CFMcjs.pm,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_OR")],[_chunk2Z3O2CFMcjs.qm,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_XOR")],[_chunk2Z3O2CFMcjs.tf,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_COUNT")],[_chunk2Z3O2CFMcjs.Ja,_chunk2Z3O2CFMcjs.Po.call(void 0, [_chunk2Z3O2CFMcjs.ep,r=>_chunk2Z3O2CFMcjs.fp.call(void 0, r,_chunk2YNOERAOcjs.c),_chunk2Z3O2CFMcjs.hp])],[_chunk2Z3O2CFMcjs.Yg,_chunk2Z3O2CFMcjs.pp.call(void 0, "VERSION")],[_chunk2Z3O2CFMcjs.Eh,_chunk2Z3O2CFMcjs.pp.call(void 0, "DATE_FROM_UNIX_DATE")],[_chunk2Z3O2CFMcjs.Ah,_chunk2Z3O2CFMcjs.tq.call(void 0, {cast:!1})],[_chunk2Z3O2CFMcjs.Bh,_chunk2Z3O2CFMcjs.tq.call(void 0, {cast:!1})],[_chunk2Z3O2CFMcjs.in,ae],[_chunk2Z3O2CFMcjs.sl,_chunk2Z3O2CFMcjs.pp.call(void 0, "ENDSWITH")],[_chunk2Z3O2CFMcjs.ij,_chunk2Z3O2CFMcjs.pp.call(void 0, "JSON_OBJECT_KEYS")],[_chunk2Z3O2CFMcjs.ud,function(r){return`PARTITIONED BY ${this.wrap(this.expressions(void 0,{sqls:_optionalChain([r, 'access', _5 => _5.args, 'access', _6 => _6.this, 'optionalAccess', _7 => _7.args, 'access', _8 => _8.expressions, 'optionalAccess', _9 => _9.map, 'call', _10 => _10(u=>oe(u))]),skipFirst:!0}))}`}],[_chunk2Z3O2CFMcjs.$k,_chunk2Z3O2CFMcjs.pp.call(void 0, "TRY_ADD")],[_chunk2Z3O2CFMcjs.bl,_chunk2Z3O2CFMcjs.pp.call(void 0, "TRY_MULTIPLY")],[_chunk2Z3O2CFMcjs.dl,_chunk2Z3O2CFMcjs.pp.call(void 0, "TRY_SUBTRACT")],[_chunk2Z3O2CFMcjs.rl,_chunk2Z3O2CFMcjs.pp.call(void 0, "STARTSWITH")],[_chunk2Z3O2CFMcjs.di,_chunk2Z3O2CFMcjs.tq.call(void 0, {cast:!1})],[_chunk2Z3O2CFMcjs.ei,_chunk2Z3O2CFMcjs.tq.call(void 0, {cast:!1})],[_chunk2Z3O2CFMcjs.Nl,Wt],[_chunk2Z3O2CFMcjs._h,Wt],[_chunk2Z3O2CFMcjs.$h,_chunk2Z3O2CFMcjs.tq.call(void 0, {cast:!1})],[_chunk2Z3O2CFMcjs.Ch,_chunk2Z3O2CFMcjs.Nq],[_chunk2Z3O2CFMcjs.ai,_chunk2Z3O2CFMcjs.Nq],[_chunk2Z3O2CFMcjs.bn,function(r){return r.args.safe?this.tryCastSql(r):this.castSql(r)}]]);return t.delete(_chunk2Z3O2CFMcjs.Um),t.delete(_chunk2Z3O2CFMcjs.xh),t}bracketSql(t){if(t.args.safe){let r=_chunk2Z3O2CFMcjs.ca.call(void 0, this.bracketOffsetExpressions(t,{indexOffset:1}),0);return this.func("TRY_ELEMENT_AT",[t.args.this,r])}return super.bracketSql(t)}computedColumnConstraintSql(t){return`GENERATED ALWAYS AS (${this.sql(t,"this")})`}anyValueSql(t){return this.functionFallbackSql(t)}dateDiffSql(t){let r=this.sql(t,"this"),u=this.sql(t,"expression");return t.args.unit?this.func("DATEDIFF",[_chunk2Z3O2CFMcjs.vq.call(void 0, t),u,r]):this.func("DATEDIFF",[r,u])}placeholderSql(t){return t.args.widget?`{${t.name}}`:super.placeholderSql(t)}renameColumnSql(t){return _chunk2Z3O2CFMcjs.lp.prototype.renameColumnSql.call(this,t)}readParquetSql(t){return _optionalChain([t, 'access', _11 => _11.args, 'access', _12 => _12.expressions, 'optionalAccess', _13 => _13.length])!==1?(this.unsupported("READ_PARQUET with multiple arguments is not supported"),""):`parquet.\`${t.args.expressions[0].name}\``}};I=_chunk2Z3O2CFMcjs.a.call(void 0, ee),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"TYPE_MAPPING",te,n),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"ORIGINAL_TRANSFORMS",kt,n),_chunk2Z3O2CFMcjs.b.call(void 0, I,n),_chunk2Z3O2CFMcjs.c.call(void 0, I,3,n),n.TRY_SUPPORTED=!1,n.SUPPORTS_UESCAPE=!1,n.SUPPORTS_TO_NUMBER=!0,n.PAD_FILL_PATTERN_IS_REQUIRED=!1,n.SUPPORTS_CONVERT_TIMEZONE=!0,n.SUPPORTS_MEDIAN=!0,n.SUPPORTS_UNIX_SECONDS=!0,n.SUPPORTS_DECODE_CASE=!0,n.PARSE_JSON_NAME=void 0;var re,se,$,p= exports.a =class extends(se=_chunk2YNOERAOcjs.d,re=[_chunk2Z3O2CFMcjs.r],se){static get EXPRESSION_METADATA(){return new Map(m.EXPRESSION_METADATA)}};$=_chunk2Z3O2CFMcjs.a.call(void 0, se),_chunk2Z3O2CFMcjs.d.call(void 0, $,10,"EXPRESSION_METADATA",re,p),_chunk2Z3O2CFMcjs.b.call(void 0, $,p),_chunk2Z3O2CFMcjs.c.call(void 0, $,3,p),p.DIALECT_NAME="spark",p.SUPPORTS_ORDER_BY_ALL=!0,p.SUPPORTS_NULL_TYPE=!0,p.ARRAY_FUNCS_PROPAGATES_NULLS=!0,p.Tokenizer=R,p.Parser=A,p.Generator=n;_chunk2Z3O2CFMcjs.op.register("spark",p);exports.a = p;
|
|
2
|
+
//# sourceMappingURL=chunk-4ZMKB6PV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/chunk-4ZMKB6PV.cjs","../src/typing/spark.ts","../src/dialects/spark.ts"],"names":["_EXPRESSION_METADATA_dec","_init","cache","SparkTyping","map","Spark2Typing","extend","types","data","type","SecExpr","CollationExpr","CurrentTimezoneExpr","MonthnameExpr","RandstrExpr","SessionUserExpr","BitmapCountExpr","LocaltimestampExpr","ToBinaryExpr","DateFromUnixDateExpr","ArraySizeExpr","OverlayExpr","s","e","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","buildDatediff","args","unit","thisNode","seqGet","expression","var_","DateDiffExpr","TsOrDsToDateExpr","buildDateAdd","TsOrDsAddExpr","LiteralExpr","TimestampAddExpr","normalizePartition","toIdentifier","dateAddSql","thisSql","unitToVar","returnType","groupConcatSql","expr","ArrayToStringExpr","ArrayAggExpr","_RAW_STRINGS_dec","_a","SparkTokenizer","Spark2","q"],"mappings":"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","file":"/home/huydna/projects/sqlingo.js/dist/chunk-4ZMKB6PV.cjs","sourcesContent":[null,"import type {\n Expression,\n} from '../expressions/expressions';\nimport {\n cache,\n} from '../port_internals';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n SecExpr,\n CollationExpr,\n CurrentTimezoneExpr,\n MonthnameExpr,\n RandstrExpr,\n SessionUserExpr,\n BitmapCountExpr,\n LocaltimestampExpr,\n ToBinaryExpr,\n DateFromUnixDateExpr,\n ArraySizeExpr,\n OverlayExpr,\n} from '../expressions/expressions';\nimport type {\n TypeAnnotator,\n} from '../optimizer';\nimport {\n Spark2Typing,\n} from './spark2';\nimport type {\n ExpressionMetadata,\n} from './dialect';\n\nexport class SparkTyping {\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n // Clone the Spark 2 base metadata to apply specific overrides\n const map: ExpressionMetadata = new Map(Spark2Typing.EXPRESSION_METADATA);\n\n const extend = (types: (typeof Expression)[], data: Record<string, unknown>) => {\n for (const type of types) map.set(type, data);\n };\n\n extend([\n SecExpr,\n ], {\n returns: DataTypeExprKind.DOUBLE,\n });\n\n extend([\n CollationExpr,\n CurrentTimezoneExpr,\n MonthnameExpr,\n RandstrExpr,\n SessionUserExpr,\n ], {\n returns: DataTypeExprKind.VARCHAR,\n });\n\n map.set(BitmapCountExpr, {\n returns: DataTypeExprKind.BIGINT,\n });\n map.set(LocaltimestampExpr, {\n returns: DataTypeExprKind.TIMESTAMPNTZ,\n });\n map.set(ToBinaryExpr, {\n returns: DataTypeExprKind.BINARY,\n });\n map.set(DateFromUnixDateExpr, {\n returns: DataTypeExprKind.DATE,\n });\n map.set(ArraySizeExpr, {\n returns: DataTypeExprKind.INT,\n });\n\n map.set(OverlayExpr, {\n annotator: (s: TypeAnnotator, e: Expression) => s.annotateByArgs(e, [\n 'this',\n ]),\n });\n\n return map;\n }\n}\n","import {\n cache,\n} from '../port_internals';\nimport type {\n Expression,\n ExpressionValue,\n GeneratedAsIdentityColumnConstraintExpr,\n GeneratedAsRowColumnConstraintExpr,\n ReadParquetExpr,\n RenameColumnExpr,\n} from '../expressions';\nimport {\n TryCastExpr,\n GroupConcatExpr,\n ComputedColumnConstraintExpr,\n PlaceholderExpr,\n AnyValueExpr,\n ArrayAppendExpr,\n ArrayConstructCompactExpr,\n ArrayPrependExpr,\n BitwiseAndAggExpr,\n BitwiseCountExpr,\n BitwiseOrAggExpr,\n BitwiseXorAggExpr,\n CurrentVersionExpr,\n DateDiffExpr,\n DateFromUnixDateExpr,\n DatetimeAddExpr,\n DatetimeDiffExpr,\n DatetimeSubExpr,\n EndsWithExpr,\n SafeAddExpr,\n SafeMultiplyExpr,\n SafeSubtractExpr,\n StartsWithExpr,\n TimeAddExpr,\n TimeSubExpr,\n TimestampAddExpr,\n TimestampDiffExpr,\n TimestampSubExpr,\n TsOrDsToDateExpr,\n DataTypeExprKind,\n ArrayInsertExpr,\n ILikeExpr,\n var_,\n TsOrDsAddExpr,\n LiteralExpr,\n toIdentifier,\n ArrayToStringExpr,\n ArrayAggExpr,\n LikeExpr,\n BracketExpr,\n JsonKeysExpr,\n CreateExpr,\n PartitionedByPropertyExpr,\n SessionUserExpr,\n} from '../expressions';\nimport {\n Generator,\n} from '../generator';\nimport {\n seqGet,\n} from '../helper';\nimport {\n Parser,\n} from '../parser';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n TokenType,\n} from '../tokens';\nimport {\n ctasWithTmpTablesToCreateTmpView, movePartitionedByToSchemaColumns, preprocess, removeUniqueConstraints,\n} from '../transforms';\nimport {\n SparkTyping,\n} from '../typing/spark';\nimport {\n arrayAppendSql,\n dateDeltaToBinaryIntervalOp,\n unitToVar,\n Dialect, Dialects,\n renameFunc,\n groupConcatSql as baseGroupConcatSql,\n buildLike,\n buildDateDelta,\n timestampDiffSql,\n} from './dialect';\nimport {\n buildWithIgnoreNulls,\n} from './hive';\nimport {\n buildAsCast, Spark2,\n temporaryStorageProvider,\n} from './spark2';\n\n/**\n * Although Spark docs don't mention the \"unit\" argument, Spark3 added support for\n * it at some point. Databricks also supports this variant.\n */\nfunction buildDatediff (args: Expression[]): Expression {\n let unit: Expression | undefined = undefined;\n let thisNode = seqGet(args, 0);\n const expression = seqGet(args, 1);\n\n if (args.length === 3) {\n unit = var_(thisNode?.name);\n thisNode = args[2];\n }\n\n return new DateDiffExpr({\n this: new TsOrDsToDateExpr({\n this: thisNode,\n }),\n expression: new TsOrDsToDateExpr({\n this: expression,\n }),\n unit: unit,\n });\n}\n\nfunction buildDateAdd (args: Expression[]): Expression {\n const expression = seqGet(args, 1);\n\n if (args.length === 2) {\n // DATE_ADD(startDate, numDays INTEGER)\n return new TsOrDsAddExpr({\n this: seqGet(args, 0),\n expression: expression,\n unit: LiteralExpr.string('DAY'),\n });\n }\n\n // DATE_ADD / DATEADD / TIMESTAMPADD(unit, value integer, expr)\n return new TimestampAddExpr({\n this: seqGet(args, 2),\n expression: expression,\n unit: seqGet(args, 0),\n });\n}\n\nfunction normalizePartition (e: Exclude<ExpressionValue, undefined>): Expression {\n /** Normalize the expressions in PARTITION BY (<expression>, <expression>, ...) */\n if (typeof e === 'string' || typeof e === 'number' || typeof e === 'boolean') {\n return toIdentifier(e.toString());\n }\n if (e instanceof LiteralExpr) {\n return toIdentifier(e.name);\n }\n return e;\n}\n\nfunction dateAddSql (this: Generator, expression: TsOrDsAddExpr | TimestampAddExpr): string {\n const unit = expression.args.unit;\n\n if (\n !unit\n || (expression instanceof TsOrDsAddExpr && expression.text('unit').toUpperCase() === 'DAY')\n ) {\n // Coming from Hive/Spark2 DATE_ADD or roundtripping the 2-arg version of Spark3/DB\n return this.func('DATE_ADD', [\n expression.args.this,\n expression.args.expression,\n ]);\n }\n\n let thisSql = this.func('DATE_ADD', [\n unitToVar(expression),\n expression.args.expression,\n expression.args.this,\n ]);\n\n if (expression instanceof TsOrDsAddExpr) {\n // The 3 arg version of DATE_ADD produces a timestamp in Spark3/DB\n const returnType = expression.returnType;\n if (!returnType?.isType([\n DataTypeExprKind.TIMESTAMP,\n DataTypeExprKind.DATETIME,\n ])) {\n thisSql = `CAST(${thisSql} AS ${returnType})`;\n }\n }\n\n return thisSql;\n}\n\nfunction groupConcatSql (this: Generator, expression: GroupConcatExpr): string {\n if (this.dialect.version.major < 4) {\n const expr = new ArrayToStringExpr({\n this: new ArrayAggExpr({\n this: expression.args.this,\n }),\n expression: expression.args.separator || LiteralExpr.string(''),\n });\n return this.sql(expr);\n }\n\n return baseGroupConcatSql.call(this, expression);\n}\n\nclass SparkTokenizer extends Spark2.Tokenizer {\n static STRING_ESCAPES_ALLOWED_IN_RAW_STRINGS = false;\n\n @cache\n static get RAW_STRINGS (): TokenPair[] {\n return Spark2.Tokenizer.QUOTES.flatMap((q) => [\n [\n `r${q}`,\n q,\n ],\n [\n `R${q}`,\n q,\n ],\n ]) as TokenPair[];\n }\n}\n\nclass SparkParser extends Spark2.Parser {\n // port from _Dialect metaclass logic\n @cache\n static get NO_PAREN_FUNCTIONS () {\n const noParenFunctions = {\n ...Spark2.Parser.NO_PAREN_FUNCTIONS,\n };\n noParenFunctions[TokenType.SESSION_USER] = SessionUserExpr;\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n @cache\n static get ID_VAR_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.ID_VAR_TOKENS,\n TokenType.CURRENT_CATALOG,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return {\n ...Spark2.Parser.FUNCTIONS,\n ANY_VALUE: buildWithIgnoreNulls(AnyValueExpr),\n ARRAY_INSERT: (args: Expression[]) =>\n new ArrayInsertExpr({\n this: seqGet(args, 0),\n position: seqGet(args, 1),\n expression: seqGet(args, 2),\n offset: 1,\n }),\n BIT_AND: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BIT_OR: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BIT_XOR: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BIT_COUNT: (args: unknown[]) => BitwiseCountExpr.fromArgList(args),\n DATE_ADD: buildDateAdd,\n DATEADD: buildDateAdd,\n TIMESTAMPADD: buildDateAdd,\n TIMESTAMPDIFF: buildDateDelta(TimestampDiffExpr),\n TRY_ADD: (args: unknown[]) => SafeAddExpr.fromArgList(args),\n TRY_MULTIPLY: (args: unknown[]) => SafeMultiplyExpr.fromArgList(args),\n TRY_SUBTRACT: (args: unknown[]) => SafeSubtractExpr.fromArgList(args),\n DATEDIFF: buildDatediff,\n DATE_DIFF: buildDatediff,\n JSON_OBJECT_KEYS: (args: unknown[]) => JsonKeysExpr.fromArgList(args),\n LISTAGG: (args: unknown[]) => GroupConcatExpr.fromArgList(args),\n TIMESTAMP_LTZ: buildAsCast('TIMESTAMP_LTZ'),\n TIMESTAMP_NTZ: buildAsCast('TIMESTAMP_NTZ'),\n TRY_ELEMENT_AT: (args: Expression[]) =>\n new BracketExpr({\n this: seqGet(args, 0),\n expressions: [\n args[1],\n ],\n offset: 1,\n safe: true,\n }),\n LIKE: buildLike(LikeExpr),\n ILIKE: buildLike(ILikeExpr),\n };\n }\n\n @cache\n static get PLACEHOLDER_PARSERS (): Partial<Record<TokenType, (this: Parser) => Expression | undefined>> {\n return {\n ...Spark2.Parser.PLACEHOLDER_PARSERS,\n [TokenType.L_BRACE]: function (this: Parser) {\n return (this as SparkParser).parseQueryParameter();\n },\n };\n }\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return {\n ...Spark2.Parser.FUNCTION_PARSERS,\n SUBSTR: function (this: Parser) {\n return this.parseSubstring();\n },\n };\n }\n\n parseQueryParameter (): Expression | undefined {\n const thisNode = this.parseIdVar();\n this.match(TokenType.R_BRACE);\n return this.expression(PlaceholderExpr, {\n this: thisNode,\n widget: true,\n });\n }\n\n parseGeneratedAsIdentity (): GeneratedAsIdentityColumnConstraintExpr | ComputedColumnConstraintExpr | GeneratedAsRowColumnConstraintExpr {\n const thisNode = super.parseGeneratedAsIdentity();\n if (thisNode.args.expression) {\n return this.expression(ComputedColumnConstraintExpr, {\n this: thisNode.args.expression,\n });\n }\n return thisNode;\n }\n\n parsePivotAggregation (): Expression | undefined {\n const aggregateExpr = this.parseFunction() || this.parseDisjunction();\n return this.parseAlias(aggregateExpr);\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Spark2.Parser.TABLE_ALIAS_TOKENS,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n}\n\nclass SparkGenerator extends Spark2.Generator {\n // port from _Dialect metaclass logic\n static TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\n static SUPPORTS_TO_NUMBER = true;\n static PAD_FILL_PATTERN_IS_REQUIRED = false;\n static SUPPORTS_CONVERT_TIMEZONE = true;\n static SUPPORTS_MEDIAN = true;\n static SUPPORTS_UNIX_SECONDS = true;\n static SUPPORTS_DECODE_CASE = true;\n static PARSE_JSON_NAME?: string;\n\n @cache\n static get TYPE_MAPPING () {\n return new Map([\n ...Spark2.Generator.TYPE_MAPPING,\n [\n DataTypeExprKind.MONEY,\n 'DECIMAL(15, 4)',\n ],\n [\n DataTypeExprKind.SMALLMONEY,\n 'DECIMAL(6, 4)',\n ],\n [\n DataTypeExprKind.UUID,\n 'STRING',\n ],\n [\n DataTypeExprKind.TIMESTAMPLTZ,\n 'TIMESTAMP_LTZ',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'TIMESTAMP_NTZ',\n ],\n ]);\n }\n\n @cache\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static get ORIGINAL_TRANSFORMS (): Map<typeof Expression, (this: Generator, e: any) => string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transforms = new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Spark2.Generator.TRANSFORMS.entries(),\n [\n ArrayConstructCompactExpr,\n function (this: Generator, e: ArrayConstructCompactExpr) {\n return this.func('ARRAY_COMPACT', [\n this.func('ARRAY', e.args.expressions || [\n ]),\n ]);\n },\n ],\n [\n ArrayAppendExpr,\n arrayAppendSql('ARRAY_APPEND'),\n ],\n [\n ArrayPrependExpr,\n arrayAppendSql('ARRAY_PREPEND'),\n ],\n [\n BitwiseAndAggExpr,\n renameFunc('BIT_AND'),\n ],\n [\n BitwiseOrAggExpr,\n renameFunc('BIT_OR'),\n ],\n [\n BitwiseXorAggExpr,\n renameFunc('BIT_XOR'),\n ],\n [\n BitwiseCountExpr,\n renameFunc('BIT_COUNT'),\n ],\n [\n CreateExpr,\n preprocess([\n removeUniqueConstraints,\n (e) => ctasWithTmpTablesToCreateTmpView(e, temporaryStorageProvider),\n movePartitionedByToSchemaColumns,\n ]),\n ],\n [\n CurrentVersionExpr,\n renameFunc('VERSION'),\n ],\n [\n DateFromUnixDateExpr,\n renameFunc('DATE_FROM_UNIX_DATE'),\n ],\n [\n DatetimeAddExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n DatetimeSubExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n GroupConcatExpr,\n groupConcatSql,\n ],\n [\n EndsWithExpr,\n renameFunc('ENDSWITH'),\n ],\n [\n JsonKeysExpr,\n renameFunc('JSON_OBJECT_KEYS'),\n ],\n [\n PartitionedByPropertyExpr,\n function (this: Generator, e: PartitionedByPropertyExpr) {\n return `PARTITIONED BY ${this.wrap(\n this.expressions(undefined, {\n sqls: e.args.this?.args.expressions?.map((expr) => normalizePartition(expr as ExpressionValue)),\n skipFirst: true,\n }),\n )}`;\n },\n ],\n [\n SafeAddExpr,\n renameFunc('TRY_ADD'),\n ],\n [\n SafeMultiplyExpr,\n renameFunc('TRY_MULTIPLY'),\n ],\n [\n SafeSubtractExpr,\n renameFunc('TRY_SUBTRACT'),\n ],\n [\n StartsWithExpr,\n renameFunc('STARTSWITH'),\n ],\n [\n TimeAddExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n TimeSubExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n TsOrDsAddExpr,\n dateAddSql,\n ],\n [\n TimestampAddExpr,\n dateAddSql,\n ],\n [\n TimestampSubExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n DatetimeDiffExpr,\n timestampDiffSql,\n ],\n [\n TimestampDiffExpr,\n timestampDiffSql,\n ],\n [\n TryCastExpr,\n function (this: Generator, e: TryCastExpr) {\n return e.args.safe ? this.tryCastSql(e) : this.castSql(e);\n },\n ],\n ]);\n\n transforms.delete(AnyValueExpr);\n transforms.delete(DateDiffExpr);\n\n return transforms;\n }\n\n bracketSql (expression: BracketExpr): string {\n if (expression.args.safe) {\n const key = seqGet(this.bracketOffsetExpressions(expression, {\n indexOffset: 1,\n }), 0);\n return this.func('TRY_ELEMENT_AT', [\n expression.args.this,\n key,\n ]);\n }\n return super.bracketSql(expression);\n }\n\n computedColumnConstraintSql (expression: ComputedColumnConstraintExpr): string {\n return `GENERATED ALWAYS AS (${this.sql(expression, 'this')})`;\n }\n\n anyValueSql (expression: AnyValueExpr): string {\n return this.functionFallbackSql(expression);\n }\n\n dateDiffSql (expression: DateDiffExpr): string {\n const end = this.sql(expression, 'this');\n const start = this.sql(expression, 'expression');\n\n if (expression.args.unit) {\n return this.func('DATEDIFF', [\n unitToVar(expression),\n start,\n end,\n ]);\n }\n return this.func('DATEDIFF', [\n end,\n start,\n ]);\n }\n\n placeholderSql (expression: PlaceholderExpr): string {\n if (!expression.args.widget) {\n return super.placeholderSql(expression);\n }\n return `{${expression.name}}`;\n }\n\n renameColumnSql (expression: RenameColumnExpr): string {\n return Generator.prototype.renameColumnSql.call(this, expression);\n }\n\n readParquetSql (expression: ReadParquetExpr): string {\n if (expression.args.expressions?.length !== 1) {\n this.unsupported('READ_PARQUET with multiple arguments is not supported');\n return '';\n }\n const parquetFile = expression.args.expressions[0];\n return `parquet.\\`${parquetFile.name}\\``;\n }\n}\n\nexport class Spark extends Spark2 {\n static DIALECT_NAME = Dialects.SPARK;\n static SUPPORTS_ORDER_BY_ALL = true;\n static SUPPORTS_NULL_TYPE = true;\n static ARRAY_FUNCS_PROPAGATES_NULLS = true;\n @cache\n static get EXPRESSION_METADATA () {\n return new Map(SparkTyping.EXPRESSION_METADATA);\n }\n\n static Tokenizer = SparkTokenizer;\n static Parser = SparkParser;\n static Generator = SparkGenerator;\n}\n\nDialect.register(Dialects.SPARK, Spark);\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as Gt,b as Z,c as bt,d as E}from"./chunk-YLOQRUXC.js";import{b as Ft}from"./chunk-Z5V6VOIN.js";import{$c as _,$h as Rt,$k as M,Ah as xt,Bh as lt,Ch as mt,Eh as D,Ei as _t,Ek as It,Eo as Ot,Gp as b,Hg as At,Ie as et,Ja as Q,Kq as K,Me as rt,Mp as Yt,Nl as S,Nm as Ct,Nq as W,Pl as U,Po as Mt,Qq as qt,Um as q,Yc as j,Yg as ut,_d as k,_h as C,a as f,ai as g,b as x,bl as L,bn as gt,c as l,ca as T,d as i,de as tt,dh as ct,di as dt,dl as y,ei as St,eo as G,ep as Lt,fg as it,fp as yt,gg as ot,hh as ft,hp as Ut,if as st,ij as O,in as F,jg as at,lg as Et,lk as Pt,lp as wt,om as w,op as Bt,pm as B,pp as a,qg as pt,qh as P,qm as Y,r as o,rl as Nt,sk as Dt,sl as ht,tf as N,tq as d,ud as z,vf as nt,vq as V,xg as Tt,xh as h,za as H}from"./chunk-KCNOE4DZ.js";var Vt,X;Vt=[o];var m=class{static get EXPRESSION_METADATA(){let s=new Map(Gt.EXPRESSION_METADATA),t=(r,u)=>{for(let ne of r)s.set(ne,u)};return t([st],{returns:"double"}),t([At,ft,Pt,It,P],{returns:"varchar"}),s.set(nt,{returns:"bigint"}),s.set(ct,{returns:"timestampntz"}),s.set(_t,{returns:"binary"}),s.set(D,{returns:"date"}),s.set(Tt,{returns:"int"}),s.set(Dt,{annotator:(r,u)=>r.annotateByArgs(u,["this"])}),s}};X=f(null),i(X,10,"EXPRESSION_METADATA",Vt,m),x(X,m),l(X,3,m);function Kt(e){let s,t=T(e,0),r=T(e,1);return e.length===3&&(s=Ot(t?.name),t=e[2]),new h({this:new U({this:t}),expression:new U({this:r}),unit:s})}function v(e){let s=T(e,1);return e.length===2?new S({this:T(e,0),expression:s,unit:_.string("DAY")}):new C({this:T(e,2),expression:s,unit:T(e,0)})}function oe(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"?G(e.toString()):e instanceof _?G(e.name):e}function Wt(e){if(!e.args.unit||e instanceof S&&e.text("unit").toUpperCase()==="DAY")return this.func("DATE_ADD",[e.args.this,e.args.expression]);let t=this.func("DATE_ADD",[V(e),e.args.expression,e.args.this]);if(e instanceof S){let r=e.returnType;r?.isType(["timestamp","datetime"])||(t=`CAST(${t} AS ${r})`)}return t}function ae(e){if(this.dialect.version.major<4){let s=new pt({this:new Ct({this:e.args.this}),expression:e.args.separator||_.string("")});return this.sql(s)}return qt.call(this,e)}var Zt,Xt,J,R=class extends(Xt=E.Tokenizer,Zt=[o],Xt){static get RAW_STRINGS(){return E.Tokenizer.QUOTES.flatMap(t=>[[`r${t}`,t],[`R${t}`,t]])}};J=f(Xt),i(J,10,"RAW_STRINGS",Zt,R),x(J,R),l(J,3,R),R.STRING_ESCAPES_ALLOWED_IN_RAW_STRINGS=!1;var vt,Jt,$t,Ht,Qt,jt,zt,c,A=class extends(zt=E.Parser,jt=[o],Qt=[o],Ht=[o],$t=[o],Jt=[o],vt=[o],zt){static get NO_PAREN_FUNCTIONS(){let t={...E.Parser.NO_PAREN_FUNCTIONS};return t.sessionUser=P,delete t.localtime,delete t.localtimestamp,t}static get ID_VAR_TOKENS(){return new Set([...H.ID_VAR_TOKENS,"currentCatalog","straightJoin"])}static get FUNCTIONS(){return{...E.Parser.FUNCTIONS,ANY_VALUE:Ft(q),ARRAY_INSERT:t=>new at({this:T(t,0),position:T(t,1),expression:T(t,2),offset:1}),BIT_AND:t=>w.fromArgList(t),BIT_OR:t=>B.fromArgList(t),BIT_XOR:t=>Y.fromArgList(t),BIT_COUNT:t=>N.fromArgList(t),DATE_ADD:v,DATEADD:v,TIMESTAMPADD:v,TIMESTAMPDIFF:Yt(g),TRY_ADD:t=>M.fromArgList(t),TRY_MULTIPLY:t=>L.fromArgList(t),TRY_SUBTRACT:t=>y.fromArgList(t),DATEDIFF:Kt,DATE_DIFF:Kt,JSON_OBJECT_KEYS:t=>O.fromArgList(t),LISTAGG:t=>F.fromArgList(t),TIMESTAMP_LTZ:Z("TIMESTAMP_LTZ"),TIMESTAMP_NTZ:Z("TIMESTAMP_NTZ"),TRY_ELEMENT_AT:t=>new tt({this:T(t,0),expressions:[t[1]],offset:1,safe:!0}),LIKE:K(rt),ILIKE:K(et)}}static get PLACEHOLDER_PARSERS(){return{...E.Parser.PLACEHOLDER_PARSERS,lBrace:function(){return this.parseQueryParameter()}}}static get FUNCTION_PARSERS(){return{...E.Parser.FUNCTION_PARSERS,SUBSTR:function(){return this.parseSubstring()}}}parseQueryParameter(){let t=this.parseIdVar();return this.match("rBrace"),this.expression(k,{this:t,widget:!0})}parseGeneratedAsIdentity(){let t=super.parseGeneratedAsIdentity();return t.args.expression?this.expression(j,{this:t.args.expression}):t}parsePivotAggregation(){let t=this.parseFunction()||this.parseDisjunction();return this.parseAlias(t)}static get TABLE_ALIAS_TOKENS(){return new Set([...E.Parser.TABLE_ALIAS_TOKENS,"straightJoin"])}};c=f(zt),i(c,10,"NO_PAREN_FUNCTIONS",jt,A),i(c,10,"ID_VAR_TOKENS",Qt,A),i(c,10,"FUNCTIONS",Ht,A),i(c,10,"PLACEHOLDER_PARSERS",$t,A),i(c,10,"FUNCTION_PARSERS",Jt,A),i(c,10,"TABLE_ALIAS_TOKENS",vt,A),x(c,A),l(c,3,A);var kt,te,ee,I,n=class extends(ee=E.Generator,te=[o],kt=[o],ee){static get TYPE_MAPPING(){return new Map([...E.Generator.TYPE_MAPPING,["money","DECIMAL(15, 4)"],["smallmoney","DECIMAL(6, 4)"],["uuid","STRING"],["timestampltz","TIMESTAMP_LTZ"],["timestampntz","TIMESTAMP_NTZ"]])}static get ORIGINAL_TRANSFORMS(){let t=new Map([...E.Generator.TRANSFORMS.entries(),[Et,function(r){return this.func("ARRAY_COMPACT",[this.func("ARRAY",r.args.expressions||[])])}],[it,b("ARRAY_APPEND")],[ot,b("ARRAY_PREPEND")],[w,a("BIT_AND")],[B,a("BIT_OR")],[Y,a("BIT_XOR")],[N,a("BIT_COUNT")],[Q,Mt([Lt,r=>yt(r,bt),Ut])],[ut,a("VERSION")],[D,a("DATE_FROM_UNIX_DATE")],[xt,d({cast:!1})],[lt,d({cast:!1})],[F,ae],[ht,a("ENDSWITH")],[O,a("JSON_OBJECT_KEYS")],[z,function(r){return`PARTITIONED BY ${this.wrap(this.expressions(void 0,{sqls:r.args.this?.args.expressions?.map(u=>oe(u)),skipFirst:!0}))}`}],[M,a("TRY_ADD")],[L,a("TRY_MULTIPLY")],[y,a("TRY_SUBTRACT")],[Nt,a("STARTSWITH")],[dt,d({cast:!1})],[St,d({cast:!1})],[S,Wt],[C,Wt],[Rt,d({cast:!1})],[mt,W],[g,W],[gt,function(r){return r.args.safe?this.tryCastSql(r):this.castSql(r)}]]);return t.delete(q),t.delete(h),t}bracketSql(t){if(t.args.safe){let r=T(this.bracketOffsetExpressions(t,{indexOffset:1}),0);return this.func("TRY_ELEMENT_AT",[t.args.this,r])}return super.bracketSql(t)}computedColumnConstraintSql(t){return`GENERATED ALWAYS AS (${this.sql(t,"this")})`}anyValueSql(t){return this.functionFallbackSql(t)}dateDiffSql(t){let r=this.sql(t,"this"),u=this.sql(t,"expression");return t.args.unit?this.func("DATEDIFF",[V(t),u,r]):this.func("DATEDIFF",[r,u])}placeholderSql(t){return t.args.widget?`{${t.name}}`:super.placeholderSql(t)}renameColumnSql(t){return wt.prototype.renameColumnSql.call(this,t)}readParquetSql(t){return t.args.expressions?.length!==1?(this.unsupported("READ_PARQUET with multiple arguments is not supported"),""):`parquet.\`${t.args.expressions[0].name}\``}};I=f(ee),i(I,10,"TYPE_MAPPING",te,n),i(I,10,"ORIGINAL_TRANSFORMS",kt,n),x(I,n),l(I,3,n),n.TRY_SUPPORTED=!1,n.SUPPORTS_UESCAPE=!1,n.SUPPORTS_TO_NUMBER=!0,n.PAD_FILL_PATTERN_IS_REQUIRED=!1,n.SUPPORTS_CONVERT_TIMEZONE=!0,n.SUPPORTS_MEDIAN=!0,n.SUPPORTS_UNIX_SECONDS=!0,n.SUPPORTS_DECODE_CASE=!0,n.PARSE_JSON_NAME=void 0;var re,se,$,p=class extends(se=E,re=[o],se){static get EXPRESSION_METADATA(){return new Map(m.EXPRESSION_METADATA)}};$=f(se),i($,10,"EXPRESSION_METADATA",re,p),x($,p),l($,3,p),p.DIALECT_NAME="spark",p.SUPPORTS_ORDER_BY_ALL=!0,p.SUPPORTS_NULL_TYPE=!0,p.ARRAY_FUNCS_PROPAGATES_NULLS=!0,p.Tokenizer=R,p.Parser=A,p.Generator=n;Bt.register("spark",p);export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-53OWF4GG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/typing/spark.ts","../src/dialects/spark.ts"],"sourcesContent":["import type {\n Expression,\n} from '../expressions/expressions';\nimport {\n cache,\n} from '../port_internals';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n SecExpr,\n CollationExpr,\n CurrentTimezoneExpr,\n MonthnameExpr,\n RandstrExpr,\n SessionUserExpr,\n BitmapCountExpr,\n LocaltimestampExpr,\n ToBinaryExpr,\n DateFromUnixDateExpr,\n ArraySizeExpr,\n OverlayExpr,\n} from '../expressions/expressions';\nimport type {\n TypeAnnotator,\n} from '../optimizer';\nimport {\n Spark2Typing,\n} from './spark2';\nimport type {\n ExpressionMetadata,\n} from './dialect';\n\nexport class SparkTyping {\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n // Clone the Spark 2 base metadata to apply specific overrides\n const map: ExpressionMetadata = new Map(Spark2Typing.EXPRESSION_METADATA);\n\n const extend = (types: (typeof Expression)[], data: Record<string, unknown>) => {\n for (const type of types) map.set(type, data);\n };\n\n extend([\n SecExpr,\n ], {\n returns: DataTypeExprKind.DOUBLE,\n });\n\n extend([\n CollationExpr,\n CurrentTimezoneExpr,\n MonthnameExpr,\n RandstrExpr,\n SessionUserExpr,\n ], {\n returns: DataTypeExprKind.VARCHAR,\n });\n\n map.set(BitmapCountExpr, {\n returns: DataTypeExprKind.BIGINT,\n });\n map.set(LocaltimestampExpr, {\n returns: DataTypeExprKind.TIMESTAMPNTZ,\n });\n map.set(ToBinaryExpr, {\n returns: DataTypeExprKind.BINARY,\n });\n map.set(DateFromUnixDateExpr, {\n returns: DataTypeExprKind.DATE,\n });\n map.set(ArraySizeExpr, {\n returns: DataTypeExprKind.INT,\n });\n\n map.set(OverlayExpr, {\n annotator: (s: TypeAnnotator, e: Expression) => s.annotateByArgs(e, [\n 'this',\n ]),\n });\n\n return map;\n }\n}\n","import {\n cache,\n} from '../port_internals';\nimport type {\n Expression,\n ExpressionValue,\n GeneratedAsIdentityColumnConstraintExpr,\n GeneratedAsRowColumnConstraintExpr,\n ReadParquetExpr,\n RenameColumnExpr,\n} from '../expressions';\nimport {\n TryCastExpr,\n GroupConcatExpr,\n ComputedColumnConstraintExpr,\n PlaceholderExpr,\n AnyValueExpr,\n ArrayAppendExpr,\n ArrayConstructCompactExpr,\n ArrayPrependExpr,\n BitwiseAndAggExpr,\n BitwiseCountExpr,\n BitwiseOrAggExpr,\n BitwiseXorAggExpr,\n CurrentVersionExpr,\n DateDiffExpr,\n DateFromUnixDateExpr,\n DatetimeAddExpr,\n DatetimeDiffExpr,\n DatetimeSubExpr,\n EndsWithExpr,\n SafeAddExpr,\n SafeMultiplyExpr,\n SafeSubtractExpr,\n StartsWithExpr,\n TimeAddExpr,\n TimeSubExpr,\n TimestampAddExpr,\n TimestampDiffExpr,\n TimestampSubExpr,\n TsOrDsToDateExpr,\n DataTypeExprKind,\n ArrayInsertExpr,\n ILikeExpr,\n var_,\n TsOrDsAddExpr,\n LiteralExpr,\n toIdentifier,\n ArrayToStringExpr,\n ArrayAggExpr,\n LikeExpr,\n BracketExpr,\n JsonKeysExpr,\n CreateExpr,\n PartitionedByPropertyExpr,\n SessionUserExpr,\n} from '../expressions';\nimport {\n Generator,\n} from '../generator';\nimport {\n seqGet,\n} from '../helper';\nimport {\n Parser,\n} from '../parser';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n TokenType,\n} from '../tokens';\nimport {\n ctasWithTmpTablesToCreateTmpView, movePartitionedByToSchemaColumns, preprocess, removeUniqueConstraints,\n} from '../transforms';\nimport {\n SparkTyping,\n} from '../typing/spark';\nimport {\n arrayAppendSql,\n dateDeltaToBinaryIntervalOp,\n unitToVar,\n Dialect, Dialects,\n renameFunc,\n groupConcatSql as baseGroupConcatSql,\n buildLike,\n buildDateDelta,\n timestampDiffSql,\n} from './dialect';\nimport {\n buildWithIgnoreNulls,\n} from './hive';\nimport {\n buildAsCast, Spark2,\n temporaryStorageProvider,\n} from './spark2';\n\n/**\n * Although Spark docs don't mention the \"unit\" argument, Spark3 added support for\n * it at some point. Databricks also supports this variant.\n */\nfunction buildDatediff (args: Expression[]): Expression {\n let unit: Expression | undefined = undefined;\n let thisNode = seqGet(args, 0);\n const expression = seqGet(args, 1);\n\n if (args.length === 3) {\n unit = var_(thisNode?.name);\n thisNode = args[2];\n }\n\n return new DateDiffExpr({\n this: new TsOrDsToDateExpr({\n this: thisNode,\n }),\n expression: new TsOrDsToDateExpr({\n this: expression,\n }),\n unit: unit,\n });\n}\n\nfunction buildDateAdd (args: Expression[]): Expression {\n const expression = seqGet(args, 1);\n\n if (args.length === 2) {\n // DATE_ADD(startDate, numDays INTEGER)\n return new TsOrDsAddExpr({\n this: seqGet(args, 0),\n expression: expression,\n unit: LiteralExpr.string('DAY'),\n });\n }\n\n // DATE_ADD / DATEADD / TIMESTAMPADD(unit, value integer, expr)\n return new TimestampAddExpr({\n this: seqGet(args, 2),\n expression: expression,\n unit: seqGet(args, 0),\n });\n}\n\nfunction normalizePartition (e: Exclude<ExpressionValue, undefined>): Expression {\n /** Normalize the expressions in PARTITION BY (<expression>, <expression>, ...) */\n if (typeof e === 'string' || typeof e === 'number' || typeof e === 'boolean') {\n return toIdentifier(e.toString());\n }\n if (e instanceof LiteralExpr) {\n return toIdentifier(e.name);\n }\n return e;\n}\n\nfunction dateAddSql (this: Generator, expression: TsOrDsAddExpr | TimestampAddExpr): string {\n const unit = expression.args.unit;\n\n if (\n !unit\n || (expression instanceof TsOrDsAddExpr && expression.text('unit').toUpperCase() === 'DAY')\n ) {\n // Coming from Hive/Spark2 DATE_ADD or roundtripping the 2-arg version of Spark3/DB\n return this.func('DATE_ADD', [\n expression.args.this,\n expression.args.expression,\n ]);\n }\n\n let thisSql = this.func('DATE_ADD', [\n unitToVar(expression),\n expression.args.expression,\n expression.args.this,\n ]);\n\n if (expression instanceof TsOrDsAddExpr) {\n // The 3 arg version of DATE_ADD produces a timestamp in Spark3/DB\n const returnType = expression.returnType;\n if (!returnType?.isType([\n DataTypeExprKind.TIMESTAMP,\n DataTypeExprKind.DATETIME,\n ])) {\n thisSql = `CAST(${thisSql} AS ${returnType})`;\n }\n }\n\n return thisSql;\n}\n\nfunction groupConcatSql (this: Generator, expression: GroupConcatExpr): string {\n if (this.dialect.version.major < 4) {\n const expr = new ArrayToStringExpr({\n this: new ArrayAggExpr({\n this: expression.args.this,\n }),\n expression: expression.args.separator || LiteralExpr.string(''),\n });\n return this.sql(expr);\n }\n\n return baseGroupConcatSql.call(this, expression);\n}\n\nclass SparkTokenizer extends Spark2.Tokenizer {\n static STRING_ESCAPES_ALLOWED_IN_RAW_STRINGS = false;\n\n @cache\n static get RAW_STRINGS (): TokenPair[] {\n return Spark2.Tokenizer.QUOTES.flatMap((q) => [\n [\n `r${q}`,\n q,\n ],\n [\n `R${q}`,\n q,\n ],\n ]) as TokenPair[];\n }\n}\n\nclass SparkParser extends Spark2.Parser {\n // port from _Dialect metaclass logic\n @cache\n static get NO_PAREN_FUNCTIONS () {\n const noParenFunctions = {\n ...Spark2.Parser.NO_PAREN_FUNCTIONS,\n };\n noParenFunctions[TokenType.SESSION_USER] = SessionUserExpr;\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n @cache\n static get ID_VAR_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.ID_VAR_TOKENS,\n TokenType.CURRENT_CATALOG,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return {\n ...Spark2.Parser.FUNCTIONS,\n ANY_VALUE: buildWithIgnoreNulls(AnyValueExpr),\n ARRAY_INSERT: (args: Expression[]) =>\n new ArrayInsertExpr({\n this: seqGet(args, 0),\n position: seqGet(args, 1),\n expression: seqGet(args, 2),\n offset: 1,\n }),\n BIT_AND: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BIT_OR: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BIT_XOR: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BIT_COUNT: (args: unknown[]) => BitwiseCountExpr.fromArgList(args),\n DATE_ADD: buildDateAdd,\n DATEADD: buildDateAdd,\n TIMESTAMPADD: buildDateAdd,\n TIMESTAMPDIFF: buildDateDelta(TimestampDiffExpr),\n TRY_ADD: (args: unknown[]) => SafeAddExpr.fromArgList(args),\n TRY_MULTIPLY: (args: unknown[]) => SafeMultiplyExpr.fromArgList(args),\n TRY_SUBTRACT: (args: unknown[]) => SafeSubtractExpr.fromArgList(args),\n DATEDIFF: buildDatediff,\n DATE_DIFF: buildDatediff,\n JSON_OBJECT_KEYS: (args: unknown[]) => JsonKeysExpr.fromArgList(args),\n LISTAGG: (args: unknown[]) => GroupConcatExpr.fromArgList(args),\n TIMESTAMP_LTZ: buildAsCast('TIMESTAMP_LTZ'),\n TIMESTAMP_NTZ: buildAsCast('TIMESTAMP_NTZ'),\n TRY_ELEMENT_AT: (args: Expression[]) =>\n new BracketExpr({\n this: seqGet(args, 0),\n expressions: [\n args[1],\n ],\n offset: 1,\n safe: true,\n }),\n LIKE: buildLike(LikeExpr),\n ILIKE: buildLike(ILikeExpr),\n };\n }\n\n @cache\n static get PLACEHOLDER_PARSERS (): Partial<Record<TokenType, (this: Parser) => Expression | undefined>> {\n return {\n ...Spark2.Parser.PLACEHOLDER_PARSERS,\n [TokenType.L_BRACE]: function (this: Parser) {\n return (this as SparkParser).parseQueryParameter();\n },\n };\n }\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return {\n ...Spark2.Parser.FUNCTION_PARSERS,\n SUBSTR: function (this: Parser) {\n return this.parseSubstring();\n },\n };\n }\n\n parseQueryParameter (): Expression | undefined {\n const thisNode = this.parseIdVar();\n this.match(TokenType.R_BRACE);\n return this.expression(PlaceholderExpr, {\n this: thisNode,\n widget: true,\n });\n }\n\n parseGeneratedAsIdentity (): GeneratedAsIdentityColumnConstraintExpr | ComputedColumnConstraintExpr | GeneratedAsRowColumnConstraintExpr {\n const thisNode = super.parseGeneratedAsIdentity();\n if (thisNode.args.expression) {\n return this.expression(ComputedColumnConstraintExpr, {\n this: thisNode.args.expression,\n });\n }\n return thisNode;\n }\n\n parsePivotAggregation (): Expression | undefined {\n const aggregateExpr = this.parseFunction() || this.parseDisjunction();\n return this.parseAlias(aggregateExpr);\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Spark2.Parser.TABLE_ALIAS_TOKENS,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n}\n\nclass SparkGenerator extends Spark2.Generator {\n // port from _Dialect metaclass logic\n static TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\n static SUPPORTS_TO_NUMBER = true;\n static PAD_FILL_PATTERN_IS_REQUIRED = false;\n static SUPPORTS_CONVERT_TIMEZONE = true;\n static SUPPORTS_MEDIAN = true;\n static SUPPORTS_UNIX_SECONDS = true;\n static SUPPORTS_DECODE_CASE = true;\n static PARSE_JSON_NAME?: string;\n\n @cache\n static get TYPE_MAPPING () {\n return new Map([\n ...Spark2.Generator.TYPE_MAPPING,\n [\n DataTypeExprKind.MONEY,\n 'DECIMAL(15, 4)',\n ],\n [\n DataTypeExprKind.SMALLMONEY,\n 'DECIMAL(6, 4)',\n ],\n [\n DataTypeExprKind.UUID,\n 'STRING',\n ],\n [\n DataTypeExprKind.TIMESTAMPLTZ,\n 'TIMESTAMP_LTZ',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'TIMESTAMP_NTZ',\n ],\n ]);\n }\n\n @cache\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static get ORIGINAL_TRANSFORMS (): Map<typeof Expression, (this: Generator, e: any) => string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transforms = new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Spark2.Generator.TRANSFORMS.entries(),\n [\n ArrayConstructCompactExpr,\n function (this: Generator, e: ArrayConstructCompactExpr) {\n return this.func('ARRAY_COMPACT', [\n this.func('ARRAY', e.args.expressions || [\n ]),\n ]);\n },\n ],\n [\n ArrayAppendExpr,\n arrayAppendSql('ARRAY_APPEND'),\n ],\n [\n ArrayPrependExpr,\n arrayAppendSql('ARRAY_PREPEND'),\n ],\n [\n BitwiseAndAggExpr,\n renameFunc('BIT_AND'),\n ],\n [\n BitwiseOrAggExpr,\n renameFunc('BIT_OR'),\n ],\n [\n BitwiseXorAggExpr,\n renameFunc('BIT_XOR'),\n ],\n [\n BitwiseCountExpr,\n renameFunc('BIT_COUNT'),\n ],\n [\n CreateExpr,\n preprocess([\n removeUniqueConstraints,\n (e) => ctasWithTmpTablesToCreateTmpView(e, temporaryStorageProvider),\n movePartitionedByToSchemaColumns,\n ]),\n ],\n [\n CurrentVersionExpr,\n renameFunc('VERSION'),\n ],\n [\n DateFromUnixDateExpr,\n renameFunc('DATE_FROM_UNIX_DATE'),\n ],\n [\n DatetimeAddExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n DatetimeSubExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n GroupConcatExpr,\n groupConcatSql,\n ],\n [\n EndsWithExpr,\n renameFunc('ENDSWITH'),\n ],\n [\n JsonKeysExpr,\n renameFunc('JSON_OBJECT_KEYS'),\n ],\n [\n PartitionedByPropertyExpr,\n function (this: Generator, e: PartitionedByPropertyExpr) {\n return `PARTITIONED BY ${this.wrap(\n this.expressions(undefined, {\n sqls: e.args.this?.args.expressions?.map((expr) => normalizePartition(expr as ExpressionValue)),\n skipFirst: true,\n }),\n )}`;\n },\n ],\n [\n SafeAddExpr,\n renameFunc('TRY_ADD'),\n ],\n [\n SafeMultiplyExpr,\n renameFunc('TRY_MULTIPLY'),\n ],\n [\n SafeSubtractExpr,\n renameFunc('TRY_SUBTRACT'),\n ],\n [\n StartsWithExpr,\n renameFunc('STARTSWITH'),\n ],\n [\n TimeAddExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n TimeSubExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n TsOrDsAddExpr,\n dateAddSql,\n ],\n [\n TimestampAddExpr,\n dateAddSql,\n ],\n [\n TimestampSubExpr,\n dateDeltaToBinaryIntervalOp({\n cast: false,\n }),\n ],\n [\n DatetimeDiffExpr,\n timestampDiffSql,\n ],\n [\n TimestampDiffExpr,\n timestampDiffSql,\n ],\n [\n TryCastExpr,\n function (this: Generator, e: TryCastExpr) {\n return e.args.safe ? this.tryCastSql(e) : this.castSql(e);\n },\n ],\n ]);\n\n transforms.delete(AnyValueExpr);\n transforms.delete(DateDiffExpr);\n\n return transforms;\n }\n\n bracketSql (expression: BracketExpr): string {\n if (expression.args.safe) {\n const key = seqGet(this.bracketOffsetExpressions(expression, {\n indexOffset: 1,\n }), 0);\n return this.func('TRY_ELEMENT_AT', [\n expression.args.this,\n key,\n ]);\n }\n return super.bracketSql(expression);\n }\n\n computedColumnConstraintSql (expression: ComputedColumnConstraintExpr): string {\n return `GENERATED ALWAYS AS (${this.sql(expression, 'this')})`;\n }\n\n anyValueSql (expression: AnyValueExpr): string {\n return this.functionFallbackSql(expression);\n }\n\n dateDiffSql (expression: DateDiffExpr): string {\n const end = this.sql(expression, 'this');\n const start = this.sql(expression, 'expression');\n\n if (expression.args.unit) {\n return this.func('DATEDIFF', [\n unitToVar(expression),\n start,\n end,\n ]);\n }\n return this.func('DATEDIFF', [\n end,\n start,\n ]);\n }\n\n placeholderSql (expression: PlaceholderExpr): string {\n if (!expression.args.widget) {\n return super.placeholderSql(expression);\n }\n return `{${expression.name}}`;\n }\n\n renameColumnSql (expression: RenameColumnExpr): string {\n return Generator.prototype.renameColumnSql.call(this, expression);\n }\n\n readParquetSql (expression: ReadParquetExpr): string {\n if (expression.args.expressions?.length !== 1) {\n this.unsupported('READ_PARQUET with multiple arguments is not supported');\n return '';\n }\n const parquetFile = expression.args.expressions[0];\n return `parquet.\\`${parquetFile.name}\\``;\n }\n}\n\nexport class Spark extends Spark2 {\n static DIALECT_NAME = Dialects.SPARK;\n static SUPPORTS_ORDER_BY_ALL = true;\n static SUPPORTS_NULL_TYPE = true;\n static ARRAY_FUNCS_PROPAGATES_NULLS = true;\n @cache\n static get EXPRESSION_METADATA () {\n return new Map(SparkTyping.EXPRESSION_METADATA);\n }\n\n static Tokenizer = SparkTokenizer;\n static Parser = SparkParser;\n static Generator = SparkGenerator;\n}\n\nDialect.register(Dialects.SPARK, Spark);\n"],"mappings":"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","names":["_EXPRESSION_METADATA_dec","_init","cache","SparkTyping","map","Spark2Typing","extend","types","data","type","SecExpr","CollationExpr","CurrentTimezoneExpr","MonthnameExpr","RandstrExpr","SessionUserExpr","BitmapCountExpr","LocaltimestampExpr","ToBinaryExpr","DateFromUnixDateExpr","ArraySizeExpr","OverlayExpr","s","e","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","buildDatediff","args","unit","thisNode","seqGet","expression","var_","DateDiffExpr","TsOrDsToDateExpr","buildDateAdd","TsOrDsAddExpr","LiteralExpr","TimestampAddExpr","normalizePartition","toIdentifier","dateAddSql","thisSql","unitToVar","returnType","groupConcatSql","expr","ArrayToStringExpr","ArrayAggExpr","_RAW_STRINGS_dec","_a","_init","SparkTokenizer","Spark2","cache","q","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_TABLE_ALIAS_TOKENS_dec","_FUNCTION_PARSERS_dec","_PLACEHOLDER_PARSERS_dec","_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","_NO_PAREN_FUNCTIONS_dec","SparkParser","noParenFunctions","SessionUserExpr","Parser","buildWithIgnoreNulls","AnyValueExpr","ArrayInsertExpr","BitwiseAndAggExpr","BitwiseOrAggExpr","BitwiseXorAggExpr","BitwiseCountExpr","buildDateDelta","TimestampDiffExpr","SafeAddExpr","SafeMultiplyExpr","SafeSubtractExpr","JsonKeysExpr","GroupConcatExpr","buildAsCast","BracketExpr","buildLike","LikeExpr","ILikeExpr","PlaceholderExpr","ComputedColumnConstraintExpr","aggregateExpr","_ORIGINAL_TRANSFORMS_dec","_TYPE_MAPPING_dec","SparkGenerator","transforms","ArrayConstructCompactExpr","e","ArrayAppendExpr","arrayAppendSql","ArrayPrependExpr","renameFunc","CreateExpr","preprocess","removeUniqueConstraints","ctasWithTmpTablesToCreateTmpView","temporaryStorageProvider","movePartitionedByToSchemaColumns","CurrentVersionExpr","DateFromUnixDateExpr","DatetimeAddExpr","dateDeltaToBinaryIntervalOp","DatetimeSubExpr","EndsWithExpr","PartitionedByPropertyExpr","StartsWithExpr","TimeAddExpr","TimeSubExpr","TimestampSubExpr","DatetimeDiffExpr","timestampDiffSql","TryCastExpr","key","end","start","Generator","_EXPRESSION_METADATA_dec","Spark","SparkTyping","Dialect"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk2Z3O2CFMcjs = require('./chunk-2Z3O2CFM.cjs');var _s,Ut;_s=[_chunk2Z3O2CFMcjs.r];var C=class{static get EXPRESSION_METADATA(){let n=new Map(_chunk2Z3O2CFMcjs.np.EXPRESSION_METADATA),t=(e,s)=>{for(let i of e)n.set(i,s)};return t([_chunk2Z3O2CFMcjs.$e,_chunk2Z3O2CFMcjs.af,_chunk2Z3O2CFMcjs.bf,_chunk2Z3O2CFMcjs.cf,_chunk2Z3O2CFMcjs.ff,_chunk2Z3O2CFMcjs.df,_chunk2Z3O2CFMcjs.kf,_chunk2Z3O2CFMcjs.lf],{returns:"float"}),t([_chunk2Z3O2CFMcjs.ll,_chunk2Z3O2CFMcjs.El],{returns:"varchar"}),n.set(_chunk2Z3O2CFMcjs.hh,{returns:"nvarchar"}),n.set(_chunk2Z3O2CFMcjs.Tk,{annotator:(e,s)=>e.annotateByArgs(s,["this"])}),n}};Ut=_chunk2Z3O2CFMcjs.a.call(void 0, null),_chunk2Z3O2CFMcjs.d.call(void 0, Ut,10,"EXPRESSION_METADATA",_s,C),_chunk2Z3O2CFMcjs.b.call(void 0, Ut,C),_chunk2Z3O2CFMcjs.c.call(void 0, Ut,3,C);var mr={weekday:"%A",dw:"%A",w:"%A",month:"%B",mm:"%B",m:"%B"},et={year:"year",yyyy:"year",yy:"year",quarter:"quarter",qq:"quarter",q:"quarter",month:"month",mm:"month",m:"month",week:"week",ww:"week",wk:"week",day:"day",dd:"day",d:"day"},Rr={WEEKISO:"ISO_WEEK",DAYOFWEEK:"WEEKDAY",TIMEZONE_MINUTE:"TZOFFSET"},xr=new Set(["N","C"]),Or=/([dD]{1,2})|([mM]{1,2})|([yY]{1,4})|([hH]{1,2})|([sS]{1,2})/,gr=new Set(["MAX_GRANT_PERCENT","MIN_GRANT_PERCENT","LABEL"]),Mr=new Set([_chunk2Z3O2CFMcjs.Ce,_chunk2Z3O2CFMcjs.Re,_chunk2Z3O2CFMcjs.Ke,_chunk2Z3O2CFMcjs.Ye,_chunk2Z3O2CFMcjs.Wd,_chunk2Z3O2CFMcjs.hc]),_r={DISABLE_OPTIMIZED_PLAN_FORCING:[],FAST:[],IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:[],LABEL:[],MAXDOP:[],MAXRECURSION:[],MAX_GRANT_PERCENT:[],MIN_GRANT_PERCENT:[],NO_PERFORMANCE_SPOOL:[],QUERYTRACEON:[],RECOMPILE:[],CONCAT:["UNION"],DISABLE:["EXTERNALPUSHDOWN","SCALEOUTEXECUTION"],EXPAND:["VIEWS"],FORCE:["EXTERNALPUSHDOWN","ORDER","SCALEOUTEXECUTION"],HASH:["GROUP","JOIN","UNION"],KEEP:["PLAN"],KEEPFIXED:["PLAN"],LOOP:["JOIN"],MERGE:["JOIN","UNION"],OPTIMIZE:[["FOR","UNKNOWN"]],ORDER:["GROUP"],PARAMETERIZATION:["FORCED","SIMPLE"],ROBUST:["PLAN"],USE:["PLAN"]},Pr={AUTO:[],EXPLICIT:[],TYPE:[],ELEMENTS:["XSINIL","ABSENT"],BINARY:["BASE64"]},Dr=new Date(Date.UTC(1900,0,1));function Ps(r,n=!1){return t=>{let e=_chunk2Z3O2CFMcjs.ca.call(void 0, t,0);if(e&&r){let i=_nullishCoalesce(_optionalChain([e, 'access', _2 => _2.name, 'optionalAccess', _3 => _3.toLowerCase, 'call', _4 => _4()]), () => (""));e=_chunk2Z3O2CFMcjs.Eo.call(void 0, (_nullishCoalesce(_nullishCoalesce(r[i], () => (e.name)), () => (i))).toUpperCase())}let s=_chunk2Z3O2CFMcjs.ca.call(void 0, t,1);if(_optionalChain([s, 'optionalAccess', _5 => _5.isNumber])){let i=s instanceof _chunk2Z3O2CFMcjs.We?"-"+String(s.args.this.args.this):String(s.args.this);if(i.includes("."))return new (0, _chunk2Z3O2CFMcjs.xh)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,2),expression:s,unit:e,bigInt:n});{let a=Number(i),d=new Date(Dr.getTime()+a*864e5).toISOString().split("T")[0];s=_chunk2Z3O2CFMcjs.$c.string(d)}}return new (0, _chunk2Z3O2CFMcjs.xh)({this:new (0, _chunk2Z3O2CFMcjs.Kl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,2)}),expression:new (0, _chunk2Z3O2CFMcjs.Kl)({this:s}),unit:e,bigInt:n})}}function Cr(r){return n=>{let t=_chunk2Z3O2CFMcjs.ca.call(void 0, n,0);if(t){let s=_nullishCoalesce(_optionalChain([t, 'access', _6 => _6.name, 'optionalAccess', _7 => _7.toLowerCase, 'call', _8 => _8()]), () => ("")),a=(r?{...l.TIME_MAPPING,...mr}:{...l.TIME_MAPPING})[s];a&&(t=_chunk2Z3O2CFMcjs.$c.string(a))}let e=_chunk2Z3O2CFMcjs.ca.call(void 0, n,1);return e&&(e=_chunk2Z3O2CFMcjs.mo.call(void 0, e,"datetime2")),new (0, _chunk2Z3O2CFMcjs.Hl)({this:e,format:t})}}function yr(r){let n=_chunk2Z3O2CFMcjs.ca.call(void 0, r,0),t=_chunk2Z3O2CFMcjs.ca.call(void 0, r,1),e=_chunk2Z3O2CFMcjs.ca.call(void 0, r,2),s=_nullishCoalesce(_optionalChain([t, 'optionalAccess', _9 => _9.name]), () => (""));if(s&&(xr.has(s)||!Or.test(s)))return new (0, _chunk2Z3O2CFMcjs.Al)({this:n,format:t,culture:e});let a=t;if(t){let T=s.length===1?l.FORMAT_TIME_MAPPING[s]:l.TIME_MAPPING[s];T&&(a=_chunk2Z3O2CFMcjs.$c.string(T))}return new (0, _chunk2Z3O2CFMcjs.Hl)({this:n,format:a,culture:e})}function Ur(r){let n=new (0, _chunk2Z3O2CFMcjs.Pl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, r,0)}),t=_chunk2Z3O2CFMcjs.ca.call(void 0, r,1),e;if(t===void 0)e=n;else{let s=et.month;e=new (0, _chunk2Z3O2CFMcjs.uh)({this:n,expression:t,unit:s?_chunk2Z3O2CFMcjs.Eo.call(void 0, s.toUpperCase()):void 0})}return new (0, _chunk2Z3O2CFMcjs.Qh)({this:e})}function Lr(r){let n=r[0],t=r[1],e=_optionalChain([n, 'optionalAccess', _10 => _10.isString])?(_nullishCoalesce(n.name, () => (""))).toUpperCase():"";return e==="MD5"?(r.splice(0,1),new (0, _chunk2Z3O2CFMcjs.gk)({this:t})):e==="SHA"||e==="SHA1"?(r.splice(0,1),new (0, _chunk2Z3O2CFMcjs.fl)({this:t})):e==="SHA2_256"?new (0, _chunk2Z3O2CFMcjs.gl)({this:t,length:_chunk2Z3O2CFMcjs.$c.number(256)}):e==="SHA2_512"?new (0, _chunk2Z3O2CFMcjs.gl)({this:t,length:_chunk2Z3O2CFMcjs.$c.number(512)}):_chunk2Z3O2CFMcjs.no.call(void 0, "HASHBYTES",...r)}function Fr(r){return new (0, _chunk2Z3O2CFMcjs.dm)({year:_chunk2Z3O2CFMcjs.ca.call(void 0, r,0),month:_chunk2Z3O2CFMcjs.ca.call(void 0, r,1),day:_chunk2Z3O2CFMcjs.ca.call(void 0, r,2),hour:_chunk2Z3O2CFMcjs.ca.call(void 0, r,3),min:_chunk2Z3O2CFMcjs.ca.call(void 0, r,4),sec:_chunk2Z3O2CFMcjs.ca.call(void 0, r,5),milli:_chunk2Z3O2CFMcjs.ca.call(void 0, r,6)})}function qr(r){let n=_chunk2Z3O2CFMcjs.ca.call(void 0, r,3);return new (0, _chunk2Z3O2CFMcjs.ii)({hour:_chunk2Z3O2CFMcjs.ca.call(void 0, r,0),min:_chunk2Z3O2CFMcjs.ca.call(void 0, r,1),sec:_chunk2Z3O2CFMcjs.ca.call(void 0, r,2),fractions:n?[n]:void 0,precision:_chunk2Z3O2CFMcjs.ca.call(void 0, r,4)})}function Lt(r){return n=>{let t=_chunk2Z3O2CFMcjs.ca.call(void 0, n,0);t&&!t.isString&&(t=_chunk2Z3O2CFMcjs.mo.call(void 0, t,"text"));let e=_chunk2Z3O2CFMcjs.ca.call(void 0, n,1),s={this:t};return e&&(s.expression=e),new r(s)}}function wr(r){if(r.length===2&&r.every(n=>n.isString||n.isNumber)){let n=r[0],t=r[1],e=n.name.split(".").length;if(e<=4)return new (0, _chunk2Z3O2CFMcjs.ol)({this:n,delimiter:_chunk2Z3O2CFMcjs.$c.string("."),partIndex:_chunk2Z3O2CFMcjs.$c.number(e+1-Number(t.name))})}return _chunk2Z3O2CFMcjs.no.call(void 0, "PARSENAME",...r)}function br(r,n){return r.length===1&&r.push(_chunk2Z3O2CFMcjs.$c.string("$")),_chunk2Z3O2CFMcjs.ua.call(void 0, (0, _chunk2Z3O2CFMcjs.uj))(r,n)}function Yr(r){let n=_chunk2Z3O2CFMcjs.ca.call(void 0, r,0),t=_chunk2Z3O2CFMcjs.ca.call(void 0, r,1);return t&&t.isString&&(t=_chunk2Z3O2CFMcjs.mo.call(void 0, t,"datetime2")),new (0, _chunk2Z3O2CFMcjs.bi)({this:t,unit:n})}function Ds(r){let n=r.args.alias;if((r instanceof _chunk2Z3O2CFMcjs.Fc||r instanceof _chunk2Z3O2CFMcjs.Xd)&&n instanceof _chunk2Z3O2CFMcjs.Ya&&!_optionalChain([n, 'access', _11 => _11.columns, 'optionalAccess', _12 => _12.length])){let t=r.args.this;if(!(t instanceof _chunk2Z3O2CFMcjs.Wd))return r;let e=(_nullishCoalesce(t.selects, () => ([]))).map((a,T)=>a instanceof _chunk2Z3O2CFMcjs.Ic&&!a.alias?T:-1).filter(a=>a!==-1),s=(_nullishCoalesce(t.selects, () => ([]))).map((a,T)=>a instanceof _chunk2Z3O2CFMcjs.Xd||a instanceof _chunk2Z3O2CFMcjs.hc||a instanceof _chunk2Z3O2CFMcjs.jc||a.isStar?a:_chunk2Z3O2CFMcjs.ho.call(void 0, a,a.outputName||`_col_${T}`,{copy:!1}));t.setArgKey("expressions",s);let i=_nullishCoalesce(t.selects, () => ([]));for(let a of e){let T=i[a];if(T instanceof _chunk2Z3O2CFMcjs.hc){let d=T.args.this;if(d instanceof _chunk2Z3O2CFMcjs.Ic&&d.args.this instanceof _chunk2Z3O2CFMcjs.rb){let N=T.args.alias;N instanceof _chunk2Z3O2CFMcjs.rb&&N.setArgKey("quoted",d.args.this.quoted)}}}}return r}function Hr(r){return[r.catalog,r.db,r.name].filter(Boolean).join(".")}function Cs(r){let n=r.args.format,t;if(r instanceof _chunk2Z3O2CFMcjs.Al)t=n?this.sql(n):"";else if(_optionalChain([n, 'optionalAccess', _13 => _13.isString])){let e=_chunk2Z3O2CFMcjs.na.call(void 0, n.name,l.INVERSE_TIME_MAPPING,l.INVERSE_TIME_TRIE);t=this.sql(_chunk2Z3O2CFMcjs.$c.string(e))}else t=_nullishCoalesce(_optionalChain([this, 'access', _14 => _14.formatTime, 'optionalCall', _15 => _15(r)]), () => ((n?this.sql(n):"")));return this.func("FORMAT",[r.args.this,t,r.args.culture])}function Br(r){let n=r.args.this,t=r.find(_chunk2Z3O2CFMcjs.nc);t&&(this.unsupported("T-SQL STRING_AGG doesn't support DISTINCT."),n=_optionalChain([t, 'access', _16 => _16.pop, 'call', _17 => _17(), 'access', _18 => _18.args, 'access', _19 => _19.expressions, 'optionalAccess', _20 => _20[0]]));let e="";if(r.args.this instanceof _chunk2Z3O2CFMcjs.Fb){let i=r.args.this;i.args.this&&(n=i.args.this.pop()),e=` WITHIN GROUP (${this.sql(i).slice(1)})`}let s=_nullishCoalesce(r.args.separator, () => (_chunk2Z3O2CFMcjs.$c.string(",")));return`STRING_AGG(${this.formatArgs([n,s])})${e}`}function ys(r){let n=this.func("JSON_QUERY",[r.args.this,r.args.expression]),t=this.func("JSON_VALUE",[r.args.this,r.args.expression]);return this.func("ISNULL",[n,t])}var Us,Ls,Fs,qs,ws,bs,Ys,x,I= exports.a =class extends(Ys=_chunk2Z3O2CFMcjs.Xq,bs=[_chunk2Z3O2CFMcjs.r],ws=[_chunk2Z3O2CFMcjs.r],qs=[_chunk2Z3O2CFMcjs.r],Fs=[_chunk2Z3O2CFMcjs.r],Ls=[_chunk2Z3O2CFMcjs.r],Us=[_chunk2Z3O2CFMcjs.r],Ys){static get IDENTIFIERS(){return[["[","]"],'"']}static get QUOTES(){return["'",'"']}static get HEX_STRINGS(){return[["0x",""],["0X",""]]}static get VAR_SINGLE_TOKENS(){return new Set(["@","$","#"])}static get ORIGINAL_KEYWORDS(){let t={..._chunk2Z3O2CFMcjs.Xq.KEYWORDS,"CLUSTERED INDEX":"index",DATETIME2:"datetime2",DATETIMEOFFSET:"timestamptz",DECLARE:"declare",EXEC:"command","FOR SYSTEM_TIME":"timestampSnapshot",GO:"command",IMAGE:"image",MONEY:"money","NONCLUSTERED INDEX":"index",NTEXT:"text",OPTION:"option",OUTPUT:"returning",PRINT:"command",PROC:"procedure",REAL:"float",ROWVERSION:"rowversion",SMALLDATETIME:"smalldatetime",SMALLMONEY:"smallmoney",SQL_VARIANT:"variant",SYSTEM_USER:"currentUser",TOP:"top",TIMESTAMP:"rowversion",TINYINT:"utinyint",UNIQUEIDENTIFIER:"uuid","UPDATE STATISTICS":"command",XML:"xml"};return delete t["/*+"],t}static get COMMANDS(){return new Set([...Array.from(_chunk2Z3O2CFMcjs.Xq.COMMANDS),"end"])}};x=_chunk2Z3O2CFMcjs.a.call(void 0, Ys),_chunk2Z3O2CFMcjs.d.call(void 0, x,10,"IDENTIFIERS",bs,I),_chunk2Z3O2CFMcjs.d.call(void 0, x,10,"QUOTES",ws,I),_chunk2Z3O2CFMcjs.d.call(void 0, x,10,"HEX_STRINGS",qs,I),_chunk2Z3O2CFMcjs.d.call(void 0, x,10,"VAR_SINGLE_TOKENS",Fs,I),_chunk2Z3O2CFMcjs.d.call(void 0, x,10,"ORIGINAL_KEYWORDS",Ls,I),_chunk2Z3O2CFMcjs.d.call(void 0, x,10,"COMMANDS",Us,I),_chunk2Z3O2CFMcjs.b.call(void 0, x,I),_chunk2Z3O2CFMcjs.c.call(void 0, x,3,I);var Hs,Bs,Ks,Vs,Gs,$s,ks,Ws,Xs,vs,Js,Zs,js,zs,Qs,tr,er,sr,rr,nr,f,A= exports.b =class extends(nr=_chunk2Z3O2CFMcjs.za,rr=[_chunk2Z3O2CFMcjs.r],sr=[_chunk2Z3O2CFMcjs.r],er=[_chunk2Z3O2CFMcjs.r],tr=[_chunk2Z3O2CFMcjs.r],Qs=[_chunk2Z3O2CFMcjs.r],zs=[_chunk2Z3O2CFMcjs.r],js=[_chunk2Z3O2CFMcjs.r],Zs=[_chunk2Z3O2CFMcjs.r],Js=[_chunk2Z3O2CFMcjs.r],vs=[_chunk2Z3O2CFMcjs.r],Xs=[_chunk2Z3O2CFMcjs.r],Ws=[_chunk2Z3O2CFMcjs.r],ks=[_chunk2Z3O2CFMcjs.r],$s=[_chunk2Z3O2CFMcjs.r],Gs=[_chunk2Z3O2CFMcjs.r],Vs=[_chunk2Z3O2CFMcjs.r],Ks=[_chunk2Z3O2CFMcjs.r],Bs=[_chunk2Z3O2CFMcjs.r],Hs=[_chunk2Z3O2CFMcjs.r],nr){static get NO_PAREN_FUNCTIONS(){let t={..._chunk2Z3O2CFMcjs.za.NO_PAREN_FUNCTIONS};return t.sessionUser=_chunk2Z3O2CFMcjs.qh,delete t.localtime,delete t.localtimestamp,t}static get ID_VAR_TOKENS(){return new Set([...[..._chunk2Z3O2CFMcjs.za.ID_VAR_TOKENS].filter(t=>t!=="begin")])}static get QUERY_MODIFIER_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.QUERY_MODIFIER_PARSERS,option:function(){return["options",this.parseOptions()]},for:function(){return["for",this.parseFor()]}}}static get ALIAS_TOKENS(){return new Set([...Array.from(_chunk2Z3O2CFMcjs.za.ALIAS_TOKENS)].filter(t=>t!=="begin"))}static get TABLE_ALIAS_TOKENS(){return new Set([...[..._chunk2Z3O2CFMcjs.za.TABLE_ALIAS_TOKENS].filter(t=>t!=="begin")])}static get COMMENT_TABLE_ALIAS_TOKENS(){return new Set([...Array.from(_chunk2Z3O2CFMcjs.za.COMMENT_TABLE_ALIAS_TOKENS)].filter(t=>t!=="begin"))}static get UPDATE_ALIAS_TOKENS(){return new Set([...Array.from(_chunk2Z3O2CFMcjs.za.UPDATE_ALIAS_TOKENS)].filter(t=>t!=="begin"))}static get FUNCTIONS(){return{..._chunk2Z3O2CFMcjs.za.FUNCTIONS,ATN2:t=>_chunk2Z3O2CFMcjs.cf.fromArgList(t),CHARINDEX:t=>new (0, _chunk2Z3O2CFMcjs.tl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,1),substr:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),position:_chunk2Z3O2CFMcjs.ca.call(void 0, t,2)}),COUNT:t=>new (0, _chunk2Z3O2CFMcjs.en)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),expressions:t.slice(1),bigInt:!1}),COUNT_BIG:t=>new (0, _chunk2Z3O2CFMcjs.en)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),expressions:t.slice(1),bigInt:!0}),DATEADD:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.uh,et),DATEDIFF:Ps(et),DATEDIFF_BIG:Ps(et,!0),DATENAME:Cr(!0),DATEFROMPARTS:t=>new (0, _chunk2Z3O2CFMcjs.hi)({year:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),month:_chunk2Z3O2CFMcjs.ca.call(void 0, t,1),day:_chunk2Z3O2CFMcjs.ca.call(void 0, t,2)}),DATETIMEFROMPARTS:Fr,EOMONTH:Ur,FORMAT:yr,GETDATE:t=>_chunk2Z3O2CFMcjs.fh.fromArgList(t),HASHBYTES:Lr,ISNULL:t=>_chunk2Z3O2CFMcjs.xa.call(void 0, t,{isNull:!0}),JSON_QUERY:br,JSON_VALUE:_chunk2Z3O2CFMcjs.ua.call(void 0, _chunk2Z3O2CFMcjs.wj),LEN:Lt(_chunk2Z3O2CFMcjs.Oj),LEFT:Lt(_chunk2Z3O2CFMcjs.Lj),NEWID:t=>_chunk2Z3O2CFMcjs.cm.fromArgList(t),RIGHT:Lt(_chunk2Z3O2CFMcjs.Mj),PARSENAME:wr,REPLICATE:t=>_chunk2Z3O2CFMcjs.Rk.fromArgList(t),SCHEMA_NAME:t=>_chunk2Z3O2CFMcjs.jh.fromArgList(t),SQUARE:t=>new (0, _chunk2Z3O2CFMcjs.zk)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),expression:_chunk2Z3O2CFMcjs.$c.number(2)}),SYSDATETIME:t=>_chunk2Z3O2CFMcjs.fh.fromArgList(t),SUSER_NAME:t=>_chunk2Z3O2CFMcjs.kh.fromArgList(t),SUSER_SNAME:t=>_chunk2Z3O2CFMcjs.kh.fromArgList(t),SYSDATETIMEOFFSET:t=>_chunk2Z3O2CFMcjs.gh.fromArgList(t),SYSTEM_USER:t=>_chunk2Z3O2CFMcjs.kh.fromArgList(t),TIMEFROMPARTS:qr,DATETRUNC:Yr}}static get JOIN_HINTS(){return new Set(["LOOP","HASH","MERGE","REMOTE"])}static get PROCEDURE_OPTIONS(){return{ENCRYPTION:[],RECOMPILE:[],SCHEMABINDING:[],NATIVE_COMPILATION:[],EXECUTE:[]}}static get COLUMN_DEFINITION_MODES(){return new Set(["OUT","OUTPUT","READONLY"])}static get RETURNS_TABLE_TOKENS(){return new Set([...Array.from(_chunk2Z3O2CFMcjs.za.ID_VAR_TOKENS)].filter(t=>t!=="table"&&!_chunk2Z3O2CFMcjs.za.TYPE_TOKENS.has(t)))}static get STATEMENT_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.STATEMENT_PARSERS,declare:function(){return this.parseDeclare()},dcolon:function(){return this.expression(_chunk2Z3O2CFMcjs.xc,{expression:this.parseFunction()||this.parseVar({anyToken:!0})})}}}static get RANGE_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.RANGE_PARSERS,dcolon:function(t){return this.expression(_chunk2Z3O2CFMcjs.xc,{this:t,expression:this.parseFunction()||this.parseVar({anyToken:!0})})}}}static get NO_PAREN_FUNCTION_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.NO_PAREN_FUNCTION_PARSERS,NEXT:function(){return this.parseNextValueFor()}}}static get FUNCTION_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.FUNCTION_PARSERS,JSON_ARRAYAGG:function(){let t=this;return t.expression(_chunk2Z3O2CFMcjs.pn,{this:t.parseBitwise(),order:t.parseOrder(),nullHandling:t.parseOnHandling("NULL",["NULL","ABSENT"])})},DATEPART:function(){return this.parseDatepart()}}}static get COLUMN_OPERATORS(){return{..._chunk2Z3O2CFMcjs.za.COLUMN_OPERATORS,dcolon:function(t,e){return e instanceof _chunk2Z3O2CFMcjs.ac&&e.args.this!=="user-defined"?this.expression(_chunk2Z3O2CFMcjs.Cg,{this:t,to:e}):this.expression(_chunk2Z3O2CFMcjs.xc,{this:t,expression:e})}}}static get SET_OP_MODIFIERS(){return new Set(["offset"])}static get ODBC_DATETIME_LITERALS(){return{d:_chunk2Z3O2CFMcjs.li,t:_chunk2Z3O2CFMcjs.Gl,ts:_chunk2Z3O2CFMcjs.Zh}}parseDatepart(){let t=this.parseVar({tokens:new Set(["identifier"])}),e=this.match("comma")&&this.parseBitwise(),s=_chunk2Z3O2CFMcjs.wq.call(void 0, t,{dialect:this.dialect});return this.expression(_chunk2Z3O2CFMcjs.Wh,{this:s,expression:e})}parseAlterTableSet(){return this.parseWrapped(()=>super.parseAlterTableSet())}parseWrappedSelect(t={}){if(this.match("merge")){let e=this.prevComments,s=this.parseMerge();return s.addComments(e,{prepend:!0}),s}return super.parseWrappedSelect(t)}parseDcolon(){return this.matchSet(this._constructor.TYPE_TOKENS,{advance:!1})?this.parseTypes():this.parseFunction()||this.parseTypes()}parseOptions(){if(!this.match("option"))return;let t=()=>{let e=this.parseVarFromOptions(_r);if(e)return this.match("eq"),this.expression(_chunk2Z3O2CFMcjs.Qb,{this:e,expression:this.parsePrimaryOrVar()})};return this.parseWrappedCsv(t)}parseXmlKeyValueOption(){let t=this.parsePrimaryOrVar(),e;return this.match("lParen",{advance:!1})?e=this.parseWrapped(()=>this.parseString()):e=void 0,new (0, _chunk2Z3O2CFMcjs.Bc)({this:t,expression:e})}parseFor(){if(!this.matchPair("for","xml"))return;let t=()=>this.expression(_chunk2Z3O2CFMcjs.Qb,{this:this.parseVarFromOptions(Pr,{raiseUnmatched:!1})||this.parseXmlKeyValueOption()});return this.parseCsv(t)}parseProjections(){return super.parseProjections().map(t=>t instanceof _chunk2Z3O2CFMcjs.Ce&&t.args.this instanceof _chunk2Z3O2CFMcjs.Ic?_chunk2Z3O2CFMcjs.ho.call(void 0, t.args.expression,t.args.this.args.this,{copy:!1}):t)}parseCommitOrRollback(){let t=_optionalChain([this, 'access', _21 => _21.prev, 'optionalAccess', _22 => _22.tokenType])==="rollback";this.matchTexts(["TRAN","TRANSACTION"]);let e=this.parseIdVar();if(t)return this.expression(_chunk2Z3O2CFMcjs.dc,{this:e});let s;return this.matchPair("with","lParen")&&(this.matchTextSeq("DELAYED_DURABILITY"),this.match("eq"),this.matchTextSeq("OFF")?s=!1:(this.match("on"),s=!0),this.matchRParen()),this.expression(_chunk2Z3O2CFMcjs.cc,{this:e,durability:s})}parseTransaction(){if(this.matchTexts(["TRAN","TRANSACTION"])){let t=this.parseIdVar(),e=this.expression(_chunk2Z3O2CFMcjs.bc,{this:t});return this.matchTextSeq(["WITH","MARK"])&&e.setArgKey("mark",this.parseString()),e}return this.parseAsCommand(this.prev)}parseReturns(){let t=this.parseIdVar({anyToken:!1,tokens:this._constructor.RETURNS_TABLE_TOKENS}),e=super.parseReturns();return e.setArgKey("table",t),e}parseConvert(t){let{safe:e}=t,s=this.parseTypes();this.match("comma");let i=[s,...this.parseCsv(()=>this.parseAssignment())],a=_chunk2Z3O2CFMcjs.Zf.fromArgList(i);return a.setArgKey("safe",e),a}parseColumnDef(t,e={}){let{computedColumn:s=!0}=e,i=super.parseColumnDef(t,{computedColumn:s});if(i)return this.match("eq")&&i.setArgKey("default",this.parseDisjunction()),this.matchTexts(this._constructor.COLUMN_DEFINITION_MODES)&&i.setArgKey("output",_optionalChain([this, 'access', _23 => _23.prev, 'optionalAccess', _24 => _24.text])),i}parseUserDefinedFunction(t={}){let{kind:e}=t,s=super.parseUserDefinedFunction(t);if(e==="function"||s instanceof _chunk2Z3O2CFMcjs.Ua||this.match("alias",{advance:!1}))return s;let i;return this.match("with",{advance:!1})||(i=this.parseCsv(()=>this.parseFunctionParameter())),this.expression(_chunk2Z3O2CFMcjs.Ua,{this:s,expressions:i})}parseInto(){let t=super.parseInto();if(t instanceof _chunk2Z3O2CFMcjs.ob){let e=t.find(_chunk2Z3O2CFMcjs.Tb);if(e instanceof _chunk2Z3O2CFMcjs.Tb){let s=e.args.this;_optionalChain([_chunk2Z3O2CFMcjs.p.call(void 0, s,_chunk2Z3O2CFMcjs.Ca), 'optionalAccess', _25 => _25.getArgKey, 'call', _26 => _26("temporary")])&&t.setArgKey("temporary",!0)}}return t}parseIdVar(t={}){let{anyToken:e=!0,tokens:s}=t,i=this.match("hash"),a=i&&this.match("hash"),T=super.parseIdVar({anyToken:e,tokens:s});return T&&(a?T.setArgKey("global",!0):i&&T.setArgKey("temporary",!0)),T}parseCreate(){let t=super.parseCreate();if(t instanceof _chunk2Z3O2CFMcjs.Ja){let e=t.args.this instanceof _chunk2Z3O2CFMcjs.Vb?t.args.this.args.this:t.args.this;e instanceof _chunk2Z3O2CFMcjs.Tb&&_optionalChain([_chunk2Z3O2CFMcjs.p.call(void 0, e.args.this,_chunk2Z3O2CFMcjs.Ca), 'optionalAccess', _27 => _27.getArgKey, 'call', _28 => _28("temporary")])&&(t.args.properties||t.setArgKey("properties",new (0, _chunk2Z3O2CFMcjs.Td)({expressions:[]})),t.args.properties.append("expressions",new _chunk2Z3O2CFMcjs.Kd))}return t}parseIf(){let t=this.index;if(this.matchTextSeq("OBJECT_ID")){if(this.parseWrappedCsv(()=>this.parseString()),this.matchTextSeq(["IS","NOT","NULL"])&&this.match("drop"))return this.parseDrop({exists:!0});this.retreat(t)}return super.parseIf()}parseUnique(){let t;if(this.matchTexts(["CLUSTERED","NONCLUSTERED"])){let e=this._constructor.CONSTRAINT_PARSERS;t=_chunk2Z3O2CFMcjs.ca.call(void 0, _chunk2Z3O2CFMcjs.da.call(void 0, _optionalChain([e, 'access', _29 => _29[_nullishCoalesce(_optionalChain([this, 'access', _30 => _30.prev, 'optionalAccess', _31 => _31.text, 'access', _32 => _32.toUpperCase, 'call', _33 => _33()]), () => (""))], 'optionalAccess', _34 => _34.call, 'call', _35 => _35(this)])),0)}else t=_nullishCoalesce(this.parseSchema({this:this.parseIdVar({anyToken:!1})}), () => (new (0, _chunk2Z3O2CFMcjs.Ub)({})));return this.expression(_chunk2Z3O2CFMcjs.Wc,{this:t})}parseUpdate(){let t=super.parseUpdate();return t.setArgKey("options",this.parseOptions()),t}parsePartition(){if(!this.matchTextSeq(["WITH","(","PARTITIONS"]))return;let t=()=>{let i=this.parseBitwise(),a=this.matchTextSeq("TO")?this.parseBitwise():void 0;return a?this.expression(_chunk2Z3O2CFMcjs.vb,{this:i,expression:a}):_nullishCoalesce(i, () => (this.expression(_chunk2Z3O2CFMcjs.vb,{})))},e=this.parseWrappedCsv(t),s=this.expression(_chunk2Z3O2CFMcjs.ub,{expressions:e});return this.matchRParen(),s}parseDeclareitem(){let t=this.parseIdVar();if(t)return this.match("alias"),this.expression(_chunk2Z3O2CFMcjs.Pa,{this:t,kind:this.match("table")?this.parseSchema():this.parseTypes(),default:this.match("eq")?this.parseBitwise():void 0})}parseAlterTableAlter(){let t=super.parseAlterTableAlter();if(t){let e=t.getArgKey("collate");if(e instanceof _chunk2Z3O2CFMcjs.Ic&&e.args.this instanceof _chunk2Z3O2CFMcjs.rb){let s=e.args.this;e.setArgKey("this",new (0, _chunk2Z3O2CFMcjs.Ub)({this:s.name}))}}return t}parsePrimaryKeyPart(){return this.parseOrdered()}};f=_chunk2Z3O2CFMcjs.a.call(void 0, nr),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"NO_PAREN_FUNCTIONS",rr,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"ID_VAR_TOKENS",sr,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"QUERY_MODIFIER_PARSERS",er,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"ALIAS_TOKENS",tr,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"TABLE_ALIAS_TOKENS",Qs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"COMMENT_TABLE_ALIAS_TOKENS",zs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"UPDATE_ALIAS_TOKENS",js,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"FUNCTIONS",Zs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"JOIN_HINTS",Js,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"PROCEDURE_OPTIONS",vs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"COLUMN_DEFINITION_MODES",Xs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"RETURNS_TABLE_TOKENS",Ws,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"STATEMENT_PARSERS",ks,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"RANGE_PARSERS",$s,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"NO_PAREN_FUNCTION_PARSERS",Gs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"FUNCTION_PARSERS",Vs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"COLUMN_OPERATORS",Ks,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"SET_OP_MODIFIERS",Bs,A),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"ODBC_DATETIME_LITERALS",Hs,A),_chunk2Z3O2CFMcjs.b.call(void 0, f,A),_chunk2Z3O2CFMcjs.c.call(void 0, f,3,A),A.SET_REQUIRES_ASSIGNMENT_DELIMITER=!1,A.LOG_DEFAULTS_TO_LN=!0,A.STRING_ALIASES=!0,A.NO_PAREN_IF_COMMANDS=!1;var ir,ar,Er,or,pr,cr,ur,Tr,R,c= exports.c =class extends(Tr=_chunk2Z3O2CFMcjs.lp,ur=[_chunk2Z3O2CFMcjs.r],cr=[_chunk2Z3O2CFMcjs.r],pr=[_chunk2Z3O2CFMcjs.r],or=[_chunk2Z3O2CFMcjs.r],Er=[_chunk2Z3O2CFMcjs.r],ar=[_chunk2Z3O2CFMcjs.r],ir=[_chunk2Z3O2CFMcjs.r],Tr){static get AFTER_HAVING_MODIFIER_TRANSFORMS(){let t=new Map(super.AFTER_HAVING_MODIFIER_TRANSFORMS);return["cluster","distribute","sort"].forEach(e=>t.delete(e)),t}static get NULL_ORDERING_SUPPORTED(){return"unsupported"}static get EXPRESSIONS_WITHOUT_NESTED_CTES(){return new Set([_chunk2Z3O2CFMcjs.Ja,_chunk2Z3O2CFMcjs.fb,_chunk2Z3O2CFMcjs._c,_chunk2Z3O2CFMcjs.re,_chunk2Z3O2CFMcjs.qe,_chunk2Z3O2CFMcjs.me,_chunk2Z3O2CFMcjs.Wd,_chunk2Z3O2CFMcjs.Xd,_chunk2Z3O2CFMcjs.pe,_chunk2Z3O2CFMcjs.Vd])}static get SUPPORTED_JSON_PATH_PARTS(){return new Set([_chunk2Z3O2CFMcjs.ie,_chunk2Z3O2CFMcjs.je,_chunk2Z3O2CFMcjs.ke])}static get TYPE_MAPPING(){let t=new Map([..._chunk2Z3O2CFMcjs.lp.TYPE_MAPPING.entries(),["boolean","BIT"],["datetime2","DATETIME2"],["decimal","NUMERIC"],["double","FLOAT"],["int","INTEGER"],["rowversion","ROWVERSION"],["text","VARCHAR(MAX)"],["timestamp","DATETIME2"],["timestampntz","DATETIME2"],["timestamptz","DATETIMEOFFSET"],["smalldatetime","SMALLDATETIME"],["utinyint","TINYINT"],["variant","SQL_VARIANT"],["uuid","UNIQUEIDENTIFIER"]]);return t.delete("nchar"),t.delete("nvarchar"),t}static get ORIGINAL_TRANSFORMS(){let t=new Map([..._chunk2Z3O2CFMcjs.lp.TRANSFORMS.entries(),[_chunk2Z3O2CFMcjs.Um,_chunk2Z3O2CFMcjs.lq],[_chunk2Z3O2CFMcjs.cf,_chunk2Z3O2CFMcjs.pp.call(void 0, "ATN2")],[_chunk2Z3O2CFMcjs.qg,_chunk2Z3O2CFMcjs.pp.call(void 0, "STRING_AGG")],[_chunk2Z3O2CFMcjs.Kc,()=>"IDENTITY"],[_chunk2Z3O2CFMcjs.Ig,_chunk2Z3O2CFMcjs.pp.call(void 0, "CEILING")],[_chunk2Z3O2CFMcjs.Kg,_chunk2Z3O2CFMcjs.pp.call(void 0, "CHAR")],[_chunk2Z3O2CFMcjs.uh,_chunk2Z3O2CFMcjs.sq.call(void 0, "DATEADD")],[_chunk2Z3O2CFMcjs.Fc,_chunk2Z3O2CFMcjs.Po.call(void 0, [Ds])],[_chunk2Z3O2CFMcjs.$g,_chunk2Z3O2CFMcjs.pp.call(void 0, "GETDATE")],[_chunk2Z3O2CFMcjs.fh,_chunk2Z3O2CFMcjs.pp.call(void 0, "GETDATE")],[_chunk2Z3O2CFMcjs.gh,_chunk2Z3O2CFMcjs.pp.call(void 0, "SYSDATETIMEOFFSET")],[_chunk2Z3O2CFMcjs.ji,_chunk2Z3O2CFMcjs.Xp],[_chunk2Z3O2CFMcjs.Pc,_chunk2Z3O2CFMcjs.pq],[_chunk2Z3O2CFMcjs.in,Br],[_chunk2Z3O2CFMcjs._i,_chunk2Z3O2CFMcjs.pp.call(void 0, "IIF")],[_chunk2Z3O2CFMcjs.uj,ys],[_chunk2Z3O2CFMcjs.wj,ys],[_chunk2Z3O2CFMcjs.Qh,function(e){return this.func("EOMONTH",[e.args.this])}],[_chunk2Z3O2CFMcjs.Sj,_chunk2Z3O2CFMcjs.pp.call(void 0, "LOG")],[_chunk2Z3O2CFMcjs.sn,_chunk2Z3O2CFMcjs.$p],[_chunk2Z3O2CFMcjs.gk,function(e){return this.func("HASHBYTES",[_chunk2Z3O2CFMcjs.$c.string("MD5"),e.args.this])}],[_chunk2Z3O2CFMcjs.vn,_chunk2Z3O2CFMcjs._p],[_chunk2Z3O2CFMcjs.Al,Cs],[_chunk2Z3O2CFMcjs.Rk,_chunk2Z3O2CFMcjs.pp.call(void 0, "REPLICATE")],[_chunk2Z3O2CFMcjs.jh,_chunk2Z3O2CFMcjs.pp.call(void 0, "SCHEMA_NAME")],[_chunk2Z3O2CFMcjs.Wd,_chunk2Z3O2CFMcjs.Po.call(void 0, [_chunk2Z3O2CFMcjs.So,_chunk2Z3O2CFMcjs.bp,_chunk2Z3O2CFMcjs.To,_chunk2Z3O2CFMcjs.Qo])],[_chunk2Z3O2CFMcjs.Pn,_chunk2Z3O2CFMcjs.pp.call(void 0, "STDEV")],[_chunk2Z3O2CFMcjs.tl,function(e){return _chunk2Z3O2CFMcjs.Ep.call(this,e,{funcName:"CHARINDEX",supportsPosition:!0})}],[_chunk2Z3O2CFMcjs.Xd,_chunk2Z3O2CFMcjs.Po.call(void 0, [Ds])],[_chunk2Z3O2CFMcjs.fl,function(e){return this.func("HASHBYTES",[_chunk2Z3O2CFMcjs.$c.string("SHA1"),e.args.this])}],[_chunk2Z3O2CFMcjs.hl,function(e){return this.func("HASHBYTES",[_chunk2Z3O2CFMcjs.$c.string("SHA1"),e.args.this])}],[_chunk2Z3O2CFMcjs.gl,function(e){return this.func("HASHBYTES",[_chunk2Z3O2CFMcjs.$c.string(`SHA2_${e.args.length||256}`),e.args.this])}],[_chunk2Z3O2CFMcjs.Kd,()=>""],[_chunk2Z3O2CFMcjs.Kl,_chunk2Z3O2CFMcjs.Wp],[_chunk2Z3O2CFMcjs.Hl,Cs],[_chunk2Z3O2CFMcjs.Ml,_chunk2Z3O2CFMcjs.bq],[_chunk2Z3O2CFMcjs.Nl,_chunk2Z3O2CFMcjs.sq.call(void 0, "DATEADD",{cast:!0})],[_chunk2Z3O2CFMcjs.Ol,_chunk2Z3O2CFMcjs.sq.call(void 0, "DATEDIFF")],[_chunk2Z3O2CFMcjs.bi,function(e){return this.func("DATETRUNC",[e.args.unit,e.args.this])}],[_chunk2Z3O2CFMcjs.Vk,function(e){return this.func("ROUND",[e.args.this,e.args.decimals||_chunk2Z3O2CFMcjs.$c.number(0),_chunk2Z3O2CFMcjs.$c.number(1)])}],[_chunk2Z3O2CFMcjs.cm,()=>"NEWID()"],[_chunk2Z3O2CFMcjs.hi,_chunk2Z3O2CFMcjs.pp.call(void 0, "DATEFROMPARTS")],[_chunk2Z3O2CFMcjs.ob,function(e){if(e.args.expressions&&0<e.args.expressions.length&&this.unsupported("Oracle-style SELECT INTO with variables is not supported in TSQL"),e.args.temporary){let s=e.find(_chunk2Z3O2CFMcjs.Tb);s&&s.args.this instanceof _chunk2Z3O2CFMcjs.rb&&s.args.this.setArgKey("temporary",!0)}return`${this.seg("INTO")} ${this.sql(e,"this")}`}]]);return t.delete(_chunk2Z3O2CFMcjs.Cd),t}static get PROPERTIES_LOCATION(){return new Map([..._chunk2Z3O2CFMcjs.lp.PROPERTIES_LOCATION.entries(),[_chunk2Z3O2CFMcjs.Od,"unsupported"]])}scopeResolution(t,e){return`${e}::${t}`}selectSql(t){let e=t.args.limit,s=t.args.offset;return e instanceof _chunk2Z3O2CFMcjs.xb&&!s&&(s=new (0, _chunk2Z3O2CFMcjs.Eb)({expression:_chunk2Z3O2CFMcjs.$c.number(0)}),t.setArgKey("offset",s)),s&&(t.args.order||t.orderBy(new (0, _chunk2Z3O2CFMcjs.Wd)({expressions:[new _chunk2Z3O2CFMcjs.$d]}).subquery(),{copy:!1}),e instanceof _chunk2Z3O2CFMcjs.Ab&&e.replace(new (0, _chunk2Z3O2CFMcjs.xb)({direction:"FIRST",count:e.args.expression}))),super.selectSql(t)}convertSql(t){let e=t.args.safe?"TRY_CONVERT":"CONVERT";return this.func(e,[t.args.this,t.args.expression,t.args.style])}queryOptionSql(t){let e=this.sql(t,"this"),s=this.sql(t,"expression");if(s){let i=gr.has(e)?"= ":"";return`${e} ${i}${s}`}return e}lateralOp(t){let e=t.args.crossApply;return e===!0?"CROSS APPLY":e===!1?"OUTER APPLY":(this.unsupported("LATERAL clause is not supported."),"LATERAL")}splitPartSql(t){let e=t.args.this,s=e instanceof _chunk2Z3O2CFMcjs.$c?e.name.split(".").length:0,i=t.args.delimiter,a=t.args.partIndex;if(!(e instanceof _chunk2Z3O2CFMcjs.$c&&i instanceof _chunk2Z3O2CFMcjs.$c&&a instanceof _chunk2Z3O2CFMcjs.$c)||i&&i.name!=="."||!a||4<s)return this.unsupported("SPLIT_PART can be transpiled to PARSENAME only for '.' delimiter and literal values"),"";let T=s+1-Number(a.name);return this.func("PARSENAME",[e,_chunk2Z3O2CFMcjs.$c.number(T)])}extractSql(t){let e=t.args.this,s=typeof e=="string"?e.toUpperCase():_nullishCoalesce(_optionalChain([e, 'optionalAccess', _36 => _36.name, 'optionalAccess', _37 => _37.toUpperCase, 'call', _38 => _38()]), () => ("")),i=Rr[s]||e;return this.func("DATEPART",[i,t.args.expression])}timeFromPartsSql(t){let e=t.args.nano;return e!==void 0&&(e.pop(),this.unsupported("Specifying nanoseconds is not supported in TIMEFROMPARTS.")),t.args.fractions===void 0&&t.setArgKey("fractions",_chunk2Z3O2CFMcjs.$c.number(0)),t.args.precision===void 0&&t.setArgKey("precision",_chunk2Z3O2CFMcjs.$c.number(0)),_chunk2Z3O2CFMcjs.pp.call(void 0, "TIMEFROMPARTS").call(this,t)}timestampFromPartsSql(t){let e=t.args.zone;e!==void 0&&(e.pop(),this.unsupported("Time zone is not supported in DATETIMEFROMPARTS."));let s=t.args.nano;return s!==void 0&&(s.pop(),this.unsupported("Specifying nanoseconds is not supported in DATETIMEFROMPARTS.")),t.args.milli===void 0&&t.setArgKey("milli",_chunk2Z3O2CFMcjs.$c.number(0)),_chunk2Z3O2CFMcjs.pp.call(void 0, "DATETIMEFROMPARTS").call(this,t)}setItemSql(t){let e=t.args.this;return e instanceof _chunk2Z3O2CFMcjs.Ce&&!(e.args.this instanceof _chunk2Z3O2CFMcjs.Zd)?`${this.sql(e.args.this)} ${this.sql(e.args.expression)}`:super.setItemSql(t)}booleanSql(t){let e=t.parent,s=t.findAncestor(_chunk2Z3O2CFMcjs.se,_chunk2Z3O2CFMcjs.Wd);return e&&Mr.has(e._constructor)||s instanceof _chunk2Z3O2CFMcjs.se?t.args.this?"1":"0":t.args.this?"(1 = 1)":"(1 = 0)"}isSql(t){return t.args.expression instanceof _chunk2Z3O2CFMcjs.ae?this.binary(t,"="):this.binary(t,"IS")}createableSql(t){let e=this.sql(t,"this"),s=t.args.properties;return e[0]!=="#"&&_optionalChain([s, 'optionalAccess', _39 => _39.args, 'optionalAccess', _40 => _40.expressions, 'optionalAccess', _41 => _41.some, 'call', _42 => _42(i=>i instanceof _chunk2Z3O2CFMcjs.Kd)])&&(e=e.startsWith("[")?`[#${e.slice(1)}`:`#${e}`),e}createSql(t){let e=t.args.kind,s=t.args.exists;t.setArgKey("exists",void 0);let i=t.find(_chunk2Z3O2CFMcjs.od),a=i?i.args.this:t.args.expression;if(e==="view"){_optionalChain([t, 'access', _43 => _43.args, 'access', _44 => _44.this, 'optionalAccess', _45 => _45.setArgKey, 'call', _46 => _46("catalog",void 0)]);let N=t.args.with;a&&N&&a.setArgKey("with",N.pop())}let T=t.find(_chunk2Z3O2CFMcjs.Tb),d;if(e==="table"&&a){a instanceof _chunk2Z3O2CFMcjs.Wd&&(a=a.subquery());let st=(_nullishCoalesce((t.args.properties||new (0, _chunk2Z3O2CFMcjs.Td)({expressions:[]})).args.expressions, () => ([]))).some(H=>H instanceof _chunk2Z3O2CFMcjs.Kd),g=new (0, _chunk2Z3O2CFMcjs.Wd)({expressions:[new _chunk2Z3O2CFMcjs._b]}).from(_chunk2Z3O2CFMcjs.ho.call(void 0, a,"temp",{table:!0}));g.setArgKey("into",new (0, _chunk2Z3O2CFMcjs.ob)({this:T,temporary:st})),i&&g.limit(0,{copy:!1}),d=this.sql(g)}else d=super.createSql(t);if(s){let N=this.sql(_chunk2Z3O2CFMcjs.$c.string(T?Hr(T):"")),st=this.prependCtes(t,d),g=this.sql(_chunk2Z3O2CFMcjs.$c.string(st));if(e==="schema")return`IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ${N}) EXEC(${g})`;if(e==="table")return`IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE ${[`TABLE_NAME = ${this.sql(_chunk2Z3O2CFMcjs.$c.string(T.name))}`,T.db?`TABLE_SCHEMA = ${this.sql(_chunk2Z3O2CFMcjs.$c.string(T.db))}`:null,T.catalog?`TABLE_CATALOG = ${this.sql(_chunk2Z3O2CFMcjs.$c.string(T.catalog))}`:null].filter(Boolean).join(" AND ")}) EXEC(${g})`;if(e==="index"){let H=this.sql(_chunk2Z3O2CFMcjs.$c.string(_optionalChain([t, 'access', _47 => _47.args, 'access', _48 => _48.this, 'optionalAccess', _49 => _49.text, 'call', _50 => _50("this")])||""));return`IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = object_id(${N}) AND name = ${H}) EXEC(${g})`}}else t.args.replace&&(d=d.replace("CREATE OR REPLACE ","CREATE OR ALTER "));return this.prependCtes(t,d)}intoSql(t){if(t.args.temporary){let e=t.find(_chunk2Z3O2CFMcjs.Tb);e&&e.args.this instanceof _chunk2Z3O2CFMcjs.rb&&e.args.this.setArgKey("temporary",!0)}return`${this.seg("INTO")} ${this.sql(t,"this")}`}countSql(t){let e=t.args.bigInt?"COUNT_BIG":"COUNT";return _chunk2Z3O2CFMcjs.pp.call(void 0, e).call(this,t)}dateDiffSql(t){let e=t.args.bigInt?"DATEDIFF_BIG":"DATEDIFF";return _chunk2Z3O2CFMcjs.sq.call(void 0, e).call(this,t)}offsetSql(t){return`${super.offsetSql(t)} ROWS`}versionSql(t){let e=t.name==="TIMESTAMP"?"SYSTEM_TIME":t.name,s=t.text("kind"),i=t.args.expression,a="";if(s==="FROM"||s==="BETWEEN"){let T=_nullishCoalesce(_optionalChain([i, 'optionalAccess', _51 => _51.args, 'access', _52 => _52.expressions]), () => ([])),d=s==="FROM"?"TO":"AND";a=`${this.sql(_chunk2Z3O2CFMcjs.ca.call(void 0, T,0))} ${d} ${this.sql(_chunk2Z3O2CFMcjs.ca.call(void 0, T,1))}`}else a=this.sql(i);return`FOR ${e} ${s}${a?" "+a:""}`}returnsPropertySql(t){let e=t.args.table;return`RETURNS ${e?`${e} `:""}${this.sql(t,"this")}`}returningSql(t){let e=this.sql(t,"into"),s=e?this.seg(`INTO ${e}`):"";return`${this.seg("OUTPUT")} ${this.expressions(t,{flat:!0})}${s}`}transactionSql(t){let e=t.args.this?` ${this.sql(t,"this")}`:"",s=t.args.mark?` WITH MARK ${this.sql(t,"mark")}`:"";return`BEGIN TRANSACTION${e}${s}`}commitSql(t){let e=t.args.this?` ${this.sql(t,"this")}`:"",s=t.args.durability!==void 0?` WITH (DELAYED_DURABILITY = ${t.args.durability?"ON":"OFF"})`:"";return`COMMIT TRANSACTION${e}${s}`}rollbackSql(t){return`ROLLBACK TRANSACTION${t.args.this?` ${this.sql(t,"this")}`:""}`}identifierSql(t){let e=super.identifierSql(t);return t.args.global?e=`##${e}`:t.args.temporary&&(e=`#${e}`),e}constraintSql(t){return`CONSTRAINT ${this.sql(t,"this")} ${this.expressions(t,{flat:!0,sep:" "})}`}lengthSql(t){return this.uncastText(t,"LEN")}rightSql(t){return this.uncastText(t,"RIGHT")}leftSql(t){return this.uncastText(t,"LEFT")}uncastText(t,e){let s=t.args.this,i=s instanceof _chunk2Z3O2CFMcjs.Cg&&s.isType("text")?this.sql(s,"this"):this.sql(s),a=this.sql(t,"expression");return this.func(e,[i,a||void 0])}partitionSql(t){return`WITH (PARTITIONS(${this.expressions(t,{flat:!0})}))`}alterSql(t){let e=_chunk2Z3O2CFMcjs.ca.call(void 0, _nullishCoalesce(t.args.actions, () => ([])),0);return e instanceof _chunk2Z3O2CFMcjs.bb?`EXEC sp_rename '${this.sql(t,"this")}', '${_nullishCoalesce(_optionalChain([e, 'access', _53 => _53.args, 'access', _54 => _54.this, 'optionalAccess', _55 => _55.name]), () => (""))}'`:super.alterSql(t)}dropSql(t){return t.args.kind==="view"&&_optionalChain([t, 'access', _56 => _56.args, 'access', _57 => _57.this, 'optionalAccess', _58 => _58.setArgKey, 'call', _59 => _59("catalog",void 0)]),super.dropSql(t)}optionsModifier(t){let e=this.expressions(t,{key:"options"});return e?` OPTION${this.wrap(e)}`:""}dPipeSql(t){let e=[...t.flatten()].reduce((s,i)=>new (0, _chunk2Z3O2CFMcjs.te)({this:s,expression:i}));return this.sql(e)}isAsciiSql(t){return`(PATINDEX(CONVERT(VARCHAR(MAX), 0x255b5e002d7f5d25) COLLATE Latin1_General_BIN, ${this.sql(t.args.this)}) = 0)`}columnDefSql(t,e={}){let s=super.columnDefSql(t,e),i=t.args.default?` = ${this.sql(t,"default")}`:"",a=t.args.output?` ${this.sql(t,"output")}`:"";return`${s}${i}${a}`}coalesceSql(t){let e=t.args.isNull?"ISNULL":"COALESCE";return _chunk2Z3O2CFMcjs.pp.call(void 0, e).call(this,t)}};R=_chunk2Z3O2CFMcjs.a.call(void 0, Tr),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",ur,c),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"NULL_ORDERING_SUPPORTED",cr,c),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"EXPRESSIONS_WITHOUT_NESTED_CTES",pr,c),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"SUPPORTED_JSON_PATH_PARTS",or,c),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"TYPE_MAPPING",Er,c),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"ORIGINAL_TRANSFORMS",ar,c),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"PROPERTIES_LOCATION",ir,c),_chunk2Z3O2CFMcjs.b.call(void 0, R,c),_chunk2Z3O2CFMcjs.c.call(void 0, R,3,c),c.SUPPORTS_DECODE_CASE=!1,c.SELECT_KINDS=[],c.TRY_SUPPORTED=!1,c.SUPPORTS_UESCAPE=!1,c.LIMIT_IS_TOP=!0,c.QUERY_HINTS=!1,c.RETURNING_END=!1,c.NVL2_SUPPORTED=!1,c.ALTER_TABLE_INCLUDE_COLUMN_KEYWORD=!1,c.LIMIT_FETCH="FETCH",c.COMPUTED_COLUMN_WITH_TYPE=!1,c.CTE_RECURSIVE_KEYWORD_REQUIRED=!1,c.ENSURE_BOOLS=!0,c.SUPPORTS_SINGLE_ARG_CONCAT=!1,c.TABLESAMPLE_SEED_KEYWORD="REPEATABLE",c.SUPPORTS_SELECT_INTO=!0,c.JSON_PATH_BRACKETED_KEY_SUPPORTED=!1,c.SUPPORTS_TO_NUMBER=!1,c.SET_OP_MODIFIERS=!1,c.COPY_PARAMS_EQ_REQUIRED=!0,c.PARSE_JSON_NAME=void 0,c.EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE=!1,c.ALTER_SET_WRAPPED=!0,c.ALTER_SET_TYPE="";var Ar,lr,fr,Sr,hr,dr,Ir,O,l= exports.d =class extends(Ir=_chunk2Z3O2CFMcjs.op,dr=[_chunk2Z3O2CFMcjs.r],hr=[_chunk2Z3O2CFMcjs.r],Sr=[_chunk2Z3O2CFMcjs.r],fr=[_chunk2Z3O2CFMcjs.r],lr=[_chunk2Z3O2CFMcjs.r],Ar=[_chunk2Z3O2CFMcjs.r],Ir){static get NORMALIZATION_STRATEGY(){return"caseInsensitive"}static get EXPRESSION_METADATA(){return new Map(C.EXPRESSION_METADATA)}static get DATE_PART_MAPPING(){return{..._chunk2Z3O2CFMcjs.op.DATE_PART_MAPPING,QQ:"QUARTER",M:"MONTH",Y:"DAYOFYEAR",WW:"WEEK",N:"MINUTE",SS:"SECOND",MCS:"MICROSECOND",TZOFFSET:"TIMEZONE_MINUTE",TZ:"TIMEZONE_MINUTE",ISO_WEEK:"WEEKISO",ISOWK:"WEEKISO",ISOWW:"WEEKISO"}}static get TIME_MAPPING(){return{year:"%Y",dayofyear:"%j",day:"%d",dy:"%d",y:"%Y",week:"%W",ww:"%W",wk:"%W",isowk:"%V",isoww:"%V",isoWeek:"%V",hour:"%h",hh:"%I",minute:"%M",mi:"%M",n:"%M",second:"%S",ss:"%S",s:"%-S",millisecond:"%f",ms:"%f",weekday:"%w",dw:"%w",month:"%m",mm:"%M",m:"%-M",Y:"%Y",YYYY:"%Y",YY:"%y",MMMM:"%B",MMM:"%b",MM:"%m",M:"%-m",dddd:"%A",dd:"%d",d:"%-d",HH:"%H",H:"%-H",h:"%-I",ffffff:"%f",yyyy:"%Y",yy:"%y"}}static get CONVERT_FORMAT_MAPPING(){return{0:"%b %d %Y %-I:%M%p",1:"%m/%d/%y",2:"%y.%m.%d",3:"%d/%m/%y",4:"%d.%m.%y",5:"%d-%m-%y",6:"%d %b %y",7:"%b %d, %y",8:"%H:%M:%S",9:"%b %d %Y %-I:%M:%S:%f%p",10:"mm-dd-yy",11:"yy/mm/dd",12:"yymmdd",13:"%d %b %Y %H:%M:ss:%f",14:"%H:%M:%S:%f",20:"%Y-%m-%d %H:%M:%S",21:"%Y-%m-%d %H:%M:%S.%f",22:"%m/%d/%y %-I:%M:%S %p",23:"%Y-%m-%d",24:"%H:%M:%S",25:"%Y-%m-%d %H:%M:%S.%f",100:"%b %d %Y %-I:%M%p",101:"%m/%d/%Y",102:"%Y.%m.%d",103:"%d/%m/%Y",104:"%d.%m.%Y",105:"%d-%m-%Y",106:"%d %b %Y",107:"%b %d, %Y",108:"%H:%M:%S",109:"%b %d %Y %-I:%M:%S:%f%p",110:"%m-%d-%Y",111:"%Y/%m/%d",112:"%Y%m%d",113:"%d %b %Y %H:%M:%S:%f",114:"%H:%M:%S:%f",120:"%Y-%m-%d %H:%M:%S",121:"%Y-%m-%d %H:%M:%S.%f",126:"%Y-%m-%dT%H:%M:%S.%f"}}static get FORMAT_TIME_MAPPING(){return{y:"%B %Y",d:"%m/%d/%Y",H:"%-H",h:"%-I",s:"%Y-%m-%d %H:%M:%S",D:"%A,%B,%Y",f:"%A,%B,%Y %-I:%M %p",F:"%A,%B,%Y %-I:%M:%S %p",g:"%m/%d/%Y %-I:%M %p",G:"%m/%d/%Y %-I:%M:%S %p",M:"%B %-d",m:"%B %-d",O:"%Y-%m-%dT%H:%M:%S",u:"%Y-%M-%D %H:%M:%S%z",U:"%A, %B %D, %Y %H:%M:%S%z",T:"%-I:%M:%S %p",t:"%-I:%M",Y:"%a %Y"}}};O=_chunk2Z3O2CFMcjs.a.call(void 0, Ir),_chunk2Z3O2CFMcjs.d.call(void 0, O,10,"NORMALIZATION_STRATEGY",dr,l),_chunk2Z3O2CFMcjs.d.call(void 0, O,10,"EXPRESSION_METADATA",hr,l),_chunk2Z3O2CFMcjs.d.call(void 0, O,10,"DATE_PART_MAPPING",Sr,l),_chunk2Z3O2CFMcjs.d.call(void 0, O,10,"TIME_MAPPING",fr,l),_chunk2Z3O2CFMcjs.d.call(void 0, O,10,"CONVERT_FORMAT_MAPPING",lr,l),_chunk2Z3O2CFMcjs.d.call(void 0, O,10,"FORMAT_TIME_MAPPING",Ar,l),_chunk2Z3O2CFMcjs.b.call(void 0, O,l),_chunk2Z3O2CFMcjs.c.call(void 0, O,3,l),l.DIALECT_NAME="tsql",l.SUPPORTS_SEMI_ANTI_JOIN=!1,l.LOG_BASE_FIRST=!1,l.TYPED_DIVISION=!0,l.CONCAT_COALESCE=!0,l.ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN=!1,l.TIME_FORMAT="'yyyy-mm-dd hh:mm:ss'",l.Tokenizer=I,l.Parser=A,l.Generator=c;_chunk2Z3O2CFMcjs.op.register("tsql",l);_chunk2Z3O2CFMcjs.op.register("mssql",l);exports.a = I; exports.b = A; exports.c = c; exports.d = l;
|
|
2
|
+
//# sourceMappingURL=chunk-C4CLTVOW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/chunk-C4CLTVOW.cjs","../src/typing/tsql.ts","../src/dialects/tsql.ts"],"names":["_EXPRESSION_METADATA_dec","_init","cache","TSQLTyping","map","DialectTyping","extend","types","data","type","AcosExpr","AsinExpr","AtanExpr","Atan2Expr","CosExpr","CotExpr","SinExpr","TanExpr","SoundexExpr","StuffExpr","CurrentTimezoneExpr","RadiansExpr","s","e","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","FULL_FORMAT_TIME_MAPPING","DATE_DELTA_INTERVAL","DATE_PART_UNMAPPING","TRANSPILE_SAFE_NUMBER_FMT","DATE_FMT_RE","OPTIONS_THAT_REQUIRE_EQUAL","BIT_TYPES","EqExpr","NeqExpr","IsExpr","InExpr","SelectExpr","AliasExpr","OPTIONS","XML_OPTIONS","DEFAULT_START_DATE","buildTsqlDateDiff","unitMapping","bigInt","args","unit","seqGet","unitName","var_","startDate","rawStr","NegExpr","DateDiffExpr","days","str","LiteralExpr","TimeStrToTimeExpr","buildBuiltinFormattedTime","fullFormatMapping","fmt","fmtName","mapped","TSQL","thisExpr","cast","TimeToStrExpr","buildFormat","culture","NumberToStrExpr","mappedFmt","buildEoMonth","date","TsOrDsToDateExpr","monthLag","DateAddExpr","LastDayExpr","buildHashBytes","kind","kindStr","Md5Expr","ShaExpr","Sha2Expr","func","buildDatetimeFromParts","TimestampFromPartsExpr","buildTimeFromParts","fractions","TimeFromPartsExpr","buildWithArgAsText","Klass","expression","kwargs","buildParseName","arg","partIndex","splitCount","SplitPartExpr","buildJsonQuery","options","buildExtractJsonWithPath","buildDatetrunc","TimestampTruncExpr","qualifyDerivedTableOutputs","tableAlias","CteExpr","SubqueryExpr","TableAliasExpr","query","unaliasedColumnIndexes","c","i","ColumnExpr","newSelections","selection","AliasesExpr","alias"],"mappings":"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","file":"/home/huydna/projects/sqlingo.js/dist/chunk-C4CLTVOW.cjs","sourcesContent":[null,"import type {\n Expression,\n} from '../expressions/expressions';\nimport {\n cache,\n} from '../port_internals';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n AcosExpr,\n AsinExpr,\n AtanExpr,\n Atan2Expr,\n CosExpr,\n CotExpr,\n SinExpr,\n TanExpr,\n SoundexExpr,\n StuffExpr,\n CurrentTimezoneExpr,\n RadiansExpr,\n} from '../expressions/expressions';\nimport type {\n TypeAnnotator,\n} from '../optimizer';\nimport {\n DialectTyping,\n} from './dialect';\nimport type {\n ExpressionMetadata,\n} from './dialect';\n\nexport class TSQLTyping {\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n // Clone the base metadata to apply dialect-specific overrides safely\n const map: ExpressionMetadata = new Map(DialectTyping.EXPRESSION_METADATA);\n\n const extend = (types: (typeof Expression)[], data: Record<string, unknown>) => {\n for (const type of types) map.set(type, data);\n };\n\n extend([\n AcosExpr,\n AsinExpr,\n AtanExpr,\n Atan2Expr,\n CosExpr,\n CotExpr,\n SinExpr,\n TanExpr,\n ], {\n returns: DataTypeExprKind.FLOAT,\n });\n\n extend([\n SoundexExpr,\n StuffExpr,\n ], {\n returns: DataTypeExprKind.VARCHAR,\n });\n\n map.set(CurrentTimezoneExpr, {\n returns: DataTypeExprKind.NVARCHAR,\n });\n\n map.set(RadiansExpr, {\n annotator: (s: TypeAnnotator, e: RadiansExpr) => s.annotateByArgs(e, [\n 'this',\n ]),\n });\n\n return map;\n }\n}\n","import {\n Generator,\n} from '../generator';\nimport {\n formatTime,\n} from '../time';\nimport {\n Parser, buildExtractJsonWithPath, buildCoalesce,\n} from '../parser';\nimport {\n Tokenizer, TokenType,\n} from '../tokens';\nimport type {\n DropExpr,\n CoalesceExpr,\n AlterSetExpr,\n SetItemExpr,\n LateralExpr,\n ConstraintExpr,\n VersionExpr,\n AlterExpr,\n CommandExpr,\n ReturningExpr,\n DPipeExpr,\n IsAsciiExpr,\n ExpressionValue,\n ColumnDefExpr,\n} from '../expressions';\nimport {\n Expression,\n DataTypeExpr,\n DataTypeExprKind,\n CreateExpr,\n CreateExprKind,\n SchemaExpr,\n SelectExpr,\n TableExpr,\n IntoExpr,\n LiteralExpr,\n NegExpr,\n ColumnExpr,\n alias,\n var_,\n cast,\n func,\n Atan2Expr,\n ArrayToStringExpr,\n AutoIncrementColumnConstraintExpr,\n CeilExpr,\n ChrExpr,\n DateAddExpr,\n DateDiffExpr,\n DateStrToDateExpr,\n GeneratedAsIdentityColumnConstraintExpr,\n GroupConcatExpr,\n IfExpr,\n JsonExtractExpr,\n JsonExtractScalarExpr,\n LastDayExpr,\n LnExpr,\n MaxExpr,\n Md5Expr,\n MinExpr,\n NumberToStrExpr,\n RepeatExpr,\n CurrentSchemaExpr,\n ShaExpr,\n Sha1DigestExpr,\n Sha2Expr,\n StddevExpr,\n StrPositionExpr,\n TemporaryPropertyExpr,\n TimeStrToTimeExpr,\n TimeToStrExpr,\n TrimExpr,\n TsOrDsAddExpr,\n TsOrDsDiffExpr,\n TsOrDsToDateExpr,\n TimestampTruncExpr,\n TruncExpr,\n UuidExpr,\n DateFromPartsExpr,\n AnyValueExpr,\n CurrentTimestampExpr,\n CurrentTimestampLtzExpr,\n CurrentUserExpr,\n CurrentDateExpr,\n CountExpr,\n SplitPartExpr,\n TimestampFromPartsExpr,\n TimeFromPartsExpr,\n ScopeResolutionExpr,\n CastExpr,\n EqExpr,\n AliasExpr,\n CommitExpr,\n RollbackExpr,\n TransactionExpr,\n DateExpr,\n TimeExpr,\n TimestampExpr,\n ExtractExpr,\n PropertiesExpr,\n ReturnsPropertyExpr,\n ConvertExpr,\n QueryOptionExpr,\n XmlKeyValueOptionExpr,\n JsonArrayAggExpr,\n LeftExpr,\n RightExpr,\n LengthExpr,\n PowExpr,\n UserDefinedFunctionExpr,\n IdentifierExpr,\n VarExpr,\n NullExpr,\n BooleanExpr,\n IsExpr,\n ParameterExpr,\n LikePropertyExpr,\n VolatilePropertyExpr,\n PropertiesLocation,\n CteExpr,\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n DeleteExpr,\n InsertExpr,\n IntersectExpr,\n ExceptExpr,\n MergeExpr,\n SubqueryExpr,\n UnionExpr,\n UpdateExpr,\n FetchExpr,\n LimitExpr,\n OffsetExpr,\n ValuesExpr,\n AlterRenameExpr,\n PartitionExpr,\n PartitionRangeExpr,\n DeclareItemExpr,\n UniqueColumnConstraintExpr,\n OrderExpr,\n DistinctExpr,\n NeqExpr,\n InExpr,\n AddExpr,\n DropExprKind,\n TableAliasExpr,\n AliasesExpr,\n StarExpr,\n SessionUserExpr,\n} from '../expressions';\nimport {\n ensureList, seqGet,\n} from '../helper';\nimport {\n eliminateDistinctOn, eliminateQualify, eliminateSemiAndAntiJoins, preprocess, unnestGenerateDateArrayUsingRecursiveCte,\n} from '../transforms';\nimport {\n TSQLTyping,\n} from '../typing/tsql';\nimport {\n narrowInstanceOf, cache,\n} from '../port_internals';\nimport {\n buildDateDelta,\n dateDeltaSql,\n dateStrToDateSql,\n generatedAsIdentityColumnConstraintSql,\n anyValueToMaxSql,\n maxOrGreatest,\n minOrLeast,\n strPositionSql,\n timeStrToTimeSql,\n trimSql,\n mapDatePart,\n Dialect, NormalizationStrategy, Dialects,\n renameFunc,\n NullOrderingSupported,\n} from './dialect';\n\nconst FULL_FORMAT_TIME_MAPPING: Record<string, string> = {\n weekday: '%A',\n dw: '%A',\n w: '%A',\n month: '%B',\n mm: '%B',\n m: '%B',\n};\n\nconst DATE_DELTA_INTERVAL: Record<string, string> = {\n year: 'year',\n yyyy: 'year',\n yy: 'year',\n quarter: 'quarter',\n qq: 'quarter',\n q: 'quarter',\n month: 'month',\n mm: 'month',\n m: 'month',\n week: 'week',\n ww: 'week',\n wk: 'week',\n day: 'day',\n dd: 'day',\n d: 'day',\n};\n\nconst DATE_PART_UNMAPPING: Record<string, string> = {\n WEEKISO: 'ISO_WEEK',\n DAYOFWEEK: 'WEEKDAY',\n TIMEZONE_MINUTE: 'TZOFFSET',\n};\n\nconst TRANSPILE_SAFE_NUMBER_FMT = new Set([\n 'N',\n 'C',\n]);\n\nconst DATE_FMT_RE = /([dD]{1,2})|([mM]{1,2})|([yY]{1,4})|([hH]{1,2})|([sS]{1,2})/;\n\nconst OPTIONS_THAT_REQUIRE_EQUAL = new Set([\n 'MAX_GRANT_PERCENT',\n 'MIN_GRANT_PERCENT',\n 'LABEL',\n]);\n\nconst BIT_TYPES: Set<typeof Expression> = new Set([\n EqExpr,\n NeqExpr,\n IsExpr,\n InExpr,\n SelectExpr,\n AliasExpr,\n]);\n\nconst OPTIONS: Record<string, (string | string[])[] | undefined> = {\n DISABLE_OPTIMIZED_PLAN_FORCING: [\n ],\n FAST: [\n ],\n IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX: [\n ],\n LABEL: [\n ],\n MAXDOP: [\n ],\n MAXRECURSION: [\n ],\n MAX_GRANT_PERCENT: [\n ],\n MIN_GRANT_PERCENT: [\n ],\n NO_PERFORMANCE_SPOOL: [\n ],\n QUERYTRACEON: [\n ],\n RECOMPILE: [\n ],\n CONCAT: [\n 'UNION',\n ],\n DISABLE: [\n 'EXTERNALPUSHDOWN',\n 'SCALEOUTEXECUTION',\n ],\n EXPAND: [\n 'VIEWS',\n ],\n FORCE: [\n 'EXTERNALPUSHDOWN',\n 'ORDER',\n 'SCALEOUTEXECUTION',\n ],\n HASH: [\n 'GROUP',\n 'JOIN',\n 'UNION',\n ],\n KEEP: [\n 'PLAN',\n ],\n KEEPFIXED: [\n 'PLAN',\n ],\n LOOP: [\n 'JOIN',\n ],\n MERGE: [\n 'JOIN',\n 'UNION',\n ],\n OPTIMIZE: [\n [\n 'FOR',\n 'UNKNOWN',\n ],\n ],\n ORDER: [\n 'GROUP',\n ],\n PARAMETERIZATION: [\n 'FORCED',\n 'SIMPLE',\n ],\n ROBUST: [\n 'PLAN',\n ],\n USE: [\n 'PLAN',\n ],\n};\n\nconst XML_OPTIONS: Record<string, (string | string[])[] | undefined> = {\n AUTO: [\n ],\n EXPLICIT: [\n ],\n TYPE: [\n ],\n ELEMENTS: [\n 'XSINIL',\n 'ABSENT',\n ],\n BINARY: [\n 'BASE64',\n ],\n};\n\nconst DEFAULT_START_DATE = new Date(Date.UTC(1900, 0, 1));\n\nfunction buildTsqlDateDiff (unitMapping: Record<string, string>, bigInt = false) {\n return (args: Expression[]): DateDiffExpr => {\n let unit = seqGet(args, 0);\n if (unit && unitMapping) {\n const unitName = unit.name?.toLowerCase() ?? '';\n unit = var_((unitMapping[unitName] ?? unit.name ?? unitName).toUpperCase());\n }\n let startDate = seqGet(args, 1);\n if (startDate?.isNumber) {\n const rawStr = startDate instanceof NegExpr\n ? '-' + String((startDate.args.this as LiteralExpr).args.this)\n : String((startDate as LiteralExpr).args.this);\n if (!rawStr.includes('.')) {\n const days = Number(rawStr);\n const adds = new Date(DEFAULT_START_DATE.getTime() + days * 86400000);\n const str = adds.toISOString().split('T')[0];\n startDate = LiteralExpr.string(str);\n } else {\n return new DateDiffExpr({\n this: seqGet(args, 2),\n expression: startDate,\n unit,\n bigInt,\n });\n }\n }\n return new DateDiffExpr({\n this: new TimeStrToTimeExpr({\n this: seqGet(args, 2),\n }),\n expression: new TimeStrToTimeExpr({\n this: startDate,\n }),\n unit,\n bigInt,\n });\n };\n}\n\nfunction buildBuiltinFormattedTime (\n fullFormatMapping: boolean,\n): (args: Expression[]) => TimeToStrExpr {\n return (args: Expression[]) => {\n let fmt = seqGet(args, 0);\n if (fmt) {\n const fmtName = (fmt as LiteralExpr).name?.toLowerCase() ?? '';\n const mapping: Record<string, string> = fullFormatMapping\n ? {\n ...TSQL.TIME_MAPPING,\n ...FULL_FORMAT_TIME_MAPPING,\n }\n : {\n ...TSQL.TIME_MAPPING,\n };\n const mapped = mapping[fmtName];\n if (mapped) {\n fmt = LiteralExpr.string(mapped);\n }\n }\n\n let thisExpr = seqGet(args, 1);\n if (thisExpr) {\n thisExpr = cast(thisExpr, DataTypeExprKind.DATETIME2);\n }\n\n return new TimeToStrExpr({\n this: thisExpr,\n format: fmt,\n });\n };\n}\n\nfunction buildFormat (args: Expression[]): NumberToStrExpr | TimeToStrExpr {\n const thisExpr = seqGet(args, 0);\n const fmt = seqGet(args, 1) as LiteralExpr | undefined;\n const culture = seqGet(args, 2);\n\n const fmtName = fmt?.name ?? '';\n const isNumberFmt = fmtName && (TRANSPILE_SAFE_NUMBER_FMT.has(fmtName) || !DATE_FMT_RE.test(fmtName));\n\n if (isNumberFmt) {\n return new NumberToStrExpr({\n this: thisExpr,\n format: fmt,\n culture,\n });\n }\n\n let mappedFmt: Expression | undefined = fmt;\n if (fmt) {\n const mapped = fmtName.length === 1\n ? (TSQL.FORMAT_TIME_MAPPING as Record<string, string>)[fmtName]\n : (TSQL.TIME_MAPPING as Record<string, string>)[fmtName];\n if (mapped) {\n mappedFmt = LiteralExpr.string(mapped);\n }\n }\n\n return new TimeToStrExpr({\n this: thisExpr,\n format: mappedFmt,\n culture,\n });\n}\n\nfunction buildEoMonth (args: Expression[]): LastDayExpr {\n const date = new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n });\n const monthLag = seqGet(args, 1);\n\n let thisExpr: Expression;\n if (monthLag === undefined) {\n thisExpr = date;\n } else {\n const unit = DATE_DELTA_INTERVAL['month'];\n thisExpr = new DateAddExpr({\n this: date,\n expression: monthLag,\n unit: unit ? var_(unit.toUpperCase()) : undefined,\n });\n }\n\n return new LastDayExpr({\n this: thisExpr,\n });\n}\n\nfunction buildHashBytes (args: Expression[]): Expression {\n const kind = args[0] as LiteralExpr;\n const data = args[1];\n const kindStr = kind?.isString ? (kind.name ?? '').toUpperCase() : '';\n\n if (kindStr === 'MD5') {\n args.splice(0, 1);\n return new Md5Expr({\n this: data,\n });\n }\n if (kindStr === 'SHA' || kindStr === 'SHA1') {\n args.splice(0, 1);\n return new ShaExpr({\n this: data,\n });\n }\n if (kindStr === 'SHA2_256') {\n return new Sha2Expr({\n this: data,\n length: LiteralExpr.number(256),\n });\n }\n if (kindStr === 'SHA2_512') {\n return new Sha2Expr({\n this: data,\n length: LiteralExpr.number(512),\n });\n }\n\n return func('HASHBYTES', ...args);\n}\n\nfunction buildDatetimeFromParts (args: Expression[]): TimestampFromPartsExpr {\n return new TimestampFromPartsExpr({\n year: seqGet(args, 0),\n month: seqGet(args, 1),\n day: seqGet(args, 2),\n hour: seqGet(args, 3),\n min: seqGet(args, 4),\n sec: seqGet(args, 5),\n milli: seqGet(args, 6),\n });\n}\n\nfunction buildTimeFromParts (args: Expression[]): TimeFromPartsExpr {\n const fractions = seqGet(args, 3);\n return new TimeFromPartsExpr({\n hour: seqGet(args, 0),\n min: seqGet(args, 1),\n sec: seqGet(args, 2),\n fractions: fractions\n ? [\n fractions,\n ]\n : undefined,\n precision: seqGet(args, 4),\n });\n}\n\nfunction buildWithArgAsText<T extends Expression> (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Klass: new (args: any) => T,\n): (args: Expression[]) => T {\n return (args: Expression[]): T => {\n let thisExpr = seqGet(args, 0);\n\n if (thisExpr && !(thisExpr as LiteralExpr).isString) {\n thisExpr = cast(thisExpr, DataTypeExprKind.TEXT);\n }\n\n const expression = seqGet(args, 1);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const kwargs: any = {\n this: thisExpr,\n };\n\n if (expression) {\n kwargs['expression'] = expression;\n }\n\n return new Klass(kwargs);\n };\n}\n\nfunction buildParseName (args: Expression[]): SplitPartExpr | Expression {\n if (args.length === 2 && args.every((arg) => (arg as LiteralExpr).isString || (arg as LiteralExpr).isNumber)) {\n const thisExpr = args[0] as LiteralExpr;\n const partIndex = args[1] as LiteralExpr;\n const splitCount = thisExpr.name.split('.').length;\n if (splitCount <= 4) {\n return new SplitPartExpr({\n this: thisExpr,\n delimiter: LiteralExpr.string('.'),\n partIndex: LiteralExpr.number(splitCount + 1 - Number(partIndex.name)),\n });\n }\n }\n\n return func('PARSENAME', ...args);\n}\n\nfunction buildJsonQuery (args: Expression[], options: {dialect: Dialect}): JsonExtractExpr {\n if (args.length === 1) {\n args.push(LiteralExpr.string('$'));\n }\n return buildExtractJsonWithPath(JsonExtractExpr)(args, options);\n}\n\nfunction buildDatetrunc (args: Expression[]): TimestampTruncExpr {\n const unit = seqGet(args, 0);\n let thisExpr = seqGet(args, 1);\n\n if (thisExpr && (thisExpr as LiteralExpr).isString) {\n thisExpr = cast(thisExpr, DataTypeExprKind.DATETIME2);\n }\n\n return new TimestampTruncExpr({\n this: thisExpr,\n unit,\n });\n}\n\nfunction qualifyDerivedTableOutputs (expression: Expression): Expression {\n const tableAlias = expression.args.alias;\n\n if (\n (expression instanceof CteExpr || expression instanceof SubqueryExpr)\n && tableAlias instanceof TableAliasExpr\n && !tableAlias.columns?.length\n ) {\n const query = expression.args.this;\n if (!(query instanceof SelectExpr)) return expression;\n\n const unaliasedColumnIndexes = (query.selects ?? [\n ])\n .map((c, i) => (c instanceof ColumnExpr && !c.alias ? i : -1))\n .filter((i) => i !== -1);\n\n const newSelections = (query.selects ?? [\n ]).map((selection, i) => {\n if (\n selection instanceof SubqueryExpr\n || selection instanceof AliasExpr\n || selection instanceof AliasesExpr\n || selection.isStar\n ) {\n return selection;\n }\n return alias(selection, selection.outputName || `_col_${i}`, {\n copy: false,\n }) as Expression;\n });\n query.setArgKey('expressions', newSelections);\n\n const querySelects = query.selects ?? [\n ];\n for (const selectIndex of unaliasedColumnIndexes) {\n const aliasNode = querySelects[selectIndex];\n if (aliasNode instanceof AliasExpr) {\n const column = aliasNode.args.this;\n if (column instanceof ColumnExpr && column.args.this instanceof IdentifierExpr) {\n const aliasIdent = aliasNode.args.alias;\n if (aliasIdent instanceof IdentifierExpr) {\n aliasIdent.setArgKey('quoted', column.args.this.quoted);\n }\n }\n }\n }\n }\n\n return expression;\n}\n\nfunction tableName (table: TableExpr): string {\n const parts = [\n table.catalog,\n table.db,\n table.name,\n ].filter(Boolean);\n return parts.join('.');\n}\n\nfunction formatSql (this: Generator, expression: NumberToStrExpr | TimeToStrExpr): string {\n const fmt = expression.args.format as LiteralExpr | undefined;\n let fmtSql: string;\n\n if (!(expression instanceof NumberToStrExpr)) {\n if (fmt?.isString) {\n const mappedFmt = formatTime(fmt.name, TSQL.INVERSE_TIME_MAPPING, TSQL.INVERSE_TIME_TRIE);\n fmtSql = this.sql(LiteralExpr.string(mappedFmt!));\n } else {\n fmtSql = this.formatTime?.(expression) ?? (fmt ? this.sql(fmt) : '');\n }\n } else {\n fmtSql = fmt ? this.sql(fmt) : '';\n }\n\n return this.func('FORMAT', [\n expression.args.this,\n fmtSql,\n expression.args.culture,\n ]);\n}\n\nfunction stringAggSql (this: Generator, expression: GroupConcatExpr): string {\n let thisExpr = expression.args.this;\n const distinct = expression.find(DistinctExpr);\n if (distinct) {\n this.unsupported('T-SQL STRING_AGG doesn\\'t support DISTINCT.');\n thisExpr = distinct.pop().args.expressions?.[0];\n }\n\n let order = '';\n if (expression.args.this instanceof OrderExpr) {\n const orderExpr = expression.args.this as OrderExpr;\n if (orderExpr.args.this) {\n thisExpr = orderExpr.args.this.pop();\n }\n const orderSql = this.sql(orderExpr);\n order = ` WITHIN GROUP (${orderSql.slice(1)})`;\n }\n\n const separator: Expression = (expression.args.separator as Expression | undefined) ?? LiteralExpr.string(',');\n return `STRING_AGG(${this.formatArgs([\n thisExpr,\n separator,\n ])})${order}`;\n}\n\nfunction jsonExtractSql (this: Generator, expression: JsonExtractExpr | JsonExtractScalarExpr): string {\n const jsonQuery = this.func('JSON_QUERY', [\n expression.args.this,\n expression.args.expression,\n ]);\n const jsonValue = this.func('JSON_VALUE', [\n expression.args.this,\n expression.args.expression,\n ]);\n return this.func('ISNULL', [\n jsonQuery,\n jsonValue,\n ]);\n}\n\nexport class TSQLTokenizer extends Tokenizer {\n @cache\n static get IDENTIFIERS (): (string | [string, string])[] {\n return [\n [\n '[',\n ']',\n ],\n '\"',\n ];\n }\n\n @cache\n static get QUOTES () {\n return [\n '\\'',\n '\"',\n ];\n }\n\n @cache\n static get HEX_STRINGS (): [string, string][] {\n return [\n [\n '0x',\n '',\n ],\n [\n '0X',\n '',\n ],\n ];\n }\n\n @cache\n static get VAR_SINGLE_TOKENS () {\n return new Set([\n '@',\n '$',\n '#',\n ]);\n }\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n const keywords: Record<string, TokenType> = {\n ...Tokenizer.KEYWORDS,\n 'CLUSTERED INDEX': TokenType.INDEX,\n 'DATETIME2': TokenType.DATETIME2,\n 'DATETIMEOFFSET': TokenType.TIMESTAMPTZ,\n 'DECLARE': TokenType.DECLARE,\n 'EXEC': TokenType.COMMAND,\n 'FOR SYSTEM_TIME': TokenType.TIMESTAMP_SNAPSHOT,\n 'GO': TokenType.COMMAND,\n 'IMAGE': TokenType.IMAGE,\n 'MONEY': TokenType.MONEY,\n 'NONCLUSTERED INDEX': TokenType.INDEX,\n 'NTEXT': TokenType.TEXT,\n 'OPTION': TokenType.OPTION,\n 'OUTPUT': TokenType.RETURNING,\n 'PRINT': TokenType.COMMAND,\n 'PROC': TokenType.PROCEDURE,\n 'REAL': TokenType.FLOAT,\n 'ROWVERSION': TokenType.ROWVERSION,\n 'SMALLDATETIME': TokenType.SMALLDATETIME,\n 'SMALLMONEY': TokenType.SMALLMONEY,\n 'SQL_VARIANT': TokenType.VARIANT,\n 'SYSTEM_USER': TokenType.CURRENT_USER,\n 'TOP': TokenType.TOP,\n 'TIMESTAMP': TokenType.ROWVERSION,\n 'TINYINT': TokenType.UTINYINT,\n 'UNIQUEIDENTIFIER': TokenType.UUID,\n 'UPDATE STATISTICS': TokenType.COMMAND,\n 'XML': TokenType.XML,\n };\n delete keywords['/*+'];\n return keywords;\n }\n\n @cache\n static get COMMANDS (): Set<TokenType> {\n return new Set([\n ...Array.from(Tokenizer.COMMANDS),\n TokenType.END,\n ]);\n };\n}\n\nexport class TSQLParser extends Parser {\n // port from _Dialect metaclass logic\n @cache\n static get NO_PAREN_FUNCTIONS () {\n const noParenFunctions = {\n ...Parser.NO_PAREN_FUNCTIONS,\n };\n noParenFunctions[TokenType.SESSION_USER] = SessionUserExpr;\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n @cache\n static get ID_VAR_TOKENS (): Set<TokenType> {\n return new Set([\n ...[\n ...Parser.ID_VAR_TOKENS,\n ].filter((token) => token !== TokenType.BEGIN),\n ]);\n }\n\n static SET_REQUIRES_ASSIGNMENT_DELIMITER = false;\n static LOG_DEFAULTS_TO_LN = true;\n static STRING_ALIASES = true;\n static NO_PAREN_IF_COMMANDS = false;\n\n @cache\n static get QUERY_MODIFIER_PARSERS (): Partial<Record<TokenType, (this: Parser) => [string, Expression | Expression[] | undefined]>> {\n return {\n ...Parser.QUERY_MODIFIER_PARSERS,\n [TokenType.OPTION]: function (this: Parser) {\n return [\n 'options',\n (this as TSQLParser).parseOptions(),\n ];\n },\n [TokenType.FOR]: function (this: Parser) {\n return [\n 'for',\n (this as TSQLParser).parseFor(),\n ];\n },\n };\n }\n\n // T-SQL does not allow BEGIN to be used as an identifier\n\n @cache\n static get ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Array.from(Parser.ALIAS_TOKENS),\n ].filter((t) => t !== TokenType.BEGIN));\n }\n\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...[\n ...Parser.TABLE_ALIAS_TOKENS,\n ].filter((token) => token !== TokenType.BEGIN),\n ]);\n }\n\n @cache\n static get COMMENT_TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Array.from(Parser.COMMENT_TABLE_ALIAS_TOKENS),\n ].filter((t) => t !== TokenType.BEGIN));\n }\n\n @cache\n static get UPDATE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Array.from(Parser.UPDATE_ALIAS_TOKENS),\n ].filter((t) => t !== TokenType.BEGIN));\n }\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return {\n ...Parser.FUNCTIONS,\n ATN2: (args: unknown[]) => Atan2Expr.fromArgList(args),\n CHARINDEX: (args: Expression[]) => new StrPositionExpr({\n this: seqGet(args, 1),\n substr: seqGet(args, 0),\n position: seqGet(args, 2),\n }),\n COUNT: (args: Expression[]) => new CountExpr({\n this: seqGet(args, 0),\n expressions: args.slice(1),\n bigInt: false,\n }),\n COUNT_BIG: (args: Expression[]) => new CountExpr({\n this: seqGet(args, 0),\n expressions: args.slice(1),\n bigInt: true,\n }),\n DATEADD: buildDateDelta(DateAddExpr, DATE_DELTA_INTERVAL),\n DATEDIFF: buildTsqlDateDiff(DATE_DELTA_INTERVAL),\n DATEDIFF_BIG: buildTsqlDateDiff(DATE_DELTA_INTERVAL, true),\n DATENAME: buildBuiltinFormattedTime(true),\n DATEFROMPARTS: (args: Expression[]) => new DateFromPartsExpr({\n year: seqGet(args, 0),\n month: seqGet(args, 1),\n day: seqGet(args, 2),\n }),\n DATETIMEFROMPARTS: buildDatetimeFromParts,\n EOMONTH: buildEoMonth,\n FORMAT: buildFormat,\n GETDATE: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n HASHBYTES: buildHashBytes,\n ISNULL: (args: Expression[]) => buildCoalesce(args, {\n isNull: true,\n }),\n JSON_QUERY: buildJsonQuery,\n JSON_VALUE: buildExtractJsonWithPath(JsonExtractScalarExpr),\n LEN: buildWithArgAsText(LengthExpr),\n LEFT: buildWithArgAsText(LeftExpr),\n NEWID: (args: unknown[]) => UuidExpr.fromArgList(args),\n RIGHT: buildWithArgAsText(RightExpr),\n PARSENAME: buildParseName,\n REPLICATE: (args: unknown[]) => RepeatExpr.fromArgList(args),\n SCHEMA_NAME: (args: unknown[]) => CurrentSchemaExpr.fromArgList(args),\n SQUARE: (args: Expression[]) => new PowExpr({\n this: seqGet(args, 0),\n expression: LiteralExpr.number(2),\n }),\n SYSDATETIME: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n SUSER_NAME: (args: unknown[]) => CurrentUserExpr.fromArgList(args),\n SUSER_SNAME: (args: unknown[]) => CurrentUserExpr.fromArgList(args),\n SYSDATETIMEOFFSET: (args: unknown[]) => CurrentTimestampLtzExpr.fromArgList(args),\n SYSTEM_USER: (args: unknown[]) => CurrentUserExpr.fromArgList(args),\n TIMEFROMPARTS: buildTimeFromParts,\n DATETRUNC: buildDatetrunc,\n };\n }\n\n @cache\n static get JOIN_HINTS () {\n return new Set([\n 'LOOP',\n 'HASH',\n 'MERGE',\n 'REMOTE',\n ]);\n }\n\n @cache\n static get PROCEDURE_OPTIONS (): Record<string, string[]> {\n return {\n ENCRYPTION: [\n ],\n RECOMPILE: [\n ],\n SCHEMABINDING: [\n ],\n NATIVE_COMPILATION: [\n ],\n EXECUTE: [\n ],\n };\n }\n\n @cache\n static get COLUMN_DEFINITION_MODES () {\n return new Set([\n 'OUT',\n 'OUTPUT',\n 'READONLY',\n ]);\n }\n\n @cache\n static get RETURNS_TABLE_TOKENS (): Set<TokenType> {\n return new Set(\n [\n ...Array.from(Parser.ID_VAR_TOKENS),\n ].filter((t) =>\n t !== TokenType.TABLE && !Parser.TYPE_TOKENS.has(t)),\n );\n }\n\n @cache\n static get STATEMENT_PARSERS (): Partial<Record<TokenType, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.STATEMENT_PARSERS,\n [TokenType.DECLARE]: function (this: Parser) {\n return (this as TSQLParser).parseDeclare();\n },\n [TokenType.DCOLON]: function (this: Parser) {\n return (this as TSQLParser).expression(ScopeResolutionExpr, {\n expression: (this as TSQLParser).parseFunction() || (this as TSQLParser).parseVar({\n anyToken: true,\n }),\n });\n },\n };\n }\n\n @cache\n static get RANGE_PARSERS (): Partial<Record<TokenType, (this: Parser, this_: Expression) => Expression | undefined>> {\n return {\n ...Parser.RANGE_PARSERS,\n [TokenType.DCOLON]: function (this: Parser, thisNode: Expression) {\n return (this as TSQLParser).expression(ScopeResolutionExpr, {\n this: thisNode,\n expression: this.parseFunction() || this.parseVar({\n anyToken: true,\n }),\n });\n },\n };\n }\n\n @cache\n static get NO_PAREN_FUNCTION_PARSERS (): Record<string, (this: Parser) => Expression> {\n return {\n ...Parser.NO_PAREN_FUNCTION_PARSERS,\n NEXT: function (this: Parser) {\n return (this as TSQLParser).parseNextValueFor()!;\n },\n };\n }\n\n @cache\n static get FUNCTION_PARSERS (): Record<string, (this: Parser) => Expression> {\n return {\n ...Parser.FUNCTION_PARSERS,\n JSON_ARRAYAGG: function (this: Parser) {\n const p = this as TSQLParser;\n return p.expression(JsonArrayAggExpr, {\n this: p.parseBitwise(),\n order: p.parseOrder(),\n nullHandling: p.parseOnHandling('NULL', [\n 'NULL',\n 'ABSENT',\n ]),\n });\n },\n DATEPART: function (this: Parser) {\n return (this as TSQLParser).parseDatepart();\n },\n };\n }\n\n @cache\n static get COLUMN_OPERATORS (): Partial<Record<TokenType, undefined | ((this: Parser, this_?: Expression, to?: Expression) => Expression)>> {\n return {\n ...Parser.COLUMN_OPERATORS,\n [TokenType.DCOLON]: function (this: Parser, thisNode?: Expression, to?: Expression) {\n return to instanceof DataTypeExpr && to.args.this !== DataTypeExprKind.USERDEFINED\n ? this.expression(CastExpr, {\n this: thisNode,\n to,\n })\n : this.expression(ScopeResolutionExpr, {\n this: thisNode,\n expression: to,\n });\n },\n };\n }\n\n @cache\n static get SET_OP_MODIFIERS () {\n return new Set([\n 'offset',\n ]);\n }\n\n @cache\n static get ODBC_DATETIME_LITERALS (): Record<string, typeof Expression> {\n return {\n d: DateExpr,\n t: TimeExpr,\n ts: TimestampExpr,\n };\n }\n\n parseDatepart (): ExtractExpr {\n const thisNode = this.parseVar({\n tokens: new Set([\n TokenType.IDENTIFIER,\n ]),\n });\n const expression = this.match(TokenType.COMMA) && this.parseBitwise();\n const name = mapDatePart(thisNode, {\n dialect: this.dialect,\n });\n\n return this.expression(ExtractExpr, {\n this: name,\n expression,\n });\n }\n\n parseAlterTableSet (): AlterSetExpr {\n return this.parseWrapped(() => super.parseAlterTableSet());\n }\n\n parseWrappedSelect (options: {table?: boolean} = {}): Expression | undefined {\n if (this.match(TokenType.MERGE)) {\n const comments = this.prevComments;\n const merge = this.parseMerge();\n merge.addComments(comments, {\n prepend: true,\n });\n return merge;\n }\n\n return super.parseWrappedSelect(options);\n }\n\n parseDcolon (): Expression | undefined {\n if (this.matchSet(this._constructor.TYPE_TOKENS, {\n advance: false,\n })) {\n return this.parseTypes();\n }\n\n return this.parseFunction() || this.parseTypes();\n }\n\n parseOptions (): Expression[] | undefined {\n if (!this.match(TokenType.OPTION)) {\n return undefined;\n }\n\n const parseOption = (): Expression | undefined => {\n const option = this.parseVarFromOptions(OPTIONS);\n if (!option) return undefined;\n\n this.match(TokenType.EQ);\n return this.expression(QueryOptionExpr, {\n this: option,\n expression: this.parsePrimaryOrVar(),\n });\n };\n\n return this.parseWrappedCsv(parseOption);\n }\n\n parseXmlKeyValueOption (): XmlKeyValueOptionExpr {\n const thisNode = this.parsePrimaryOrVar();\n let expression: Expression | undefined;\n\n if (this.match(TokenType.L_PAREN, {\n advance: false,\n })) {\n expression = this.parseWrapped(() => this.parseString());\n } else {\n expression = undefined;\n }\n\n return new XmlKeyValueOptionExpr({\n this: thisNode,\n expression,\n });\n }\n\n parseFor (): Expression[] | undefined {\n if (!this.matchPair(TokenType.FOR, TokenType.XML)) {\n return undefined;\n }\n\n const parseForXml = (): Expression | undefined => {\n return this.expression(QueryOptionExpr, {\n this: this.parseVarFromOptions(XML_OPTIONS, {\n raiseUnmatched: false,\n })\n || this.parseXmlKeyValueOption(),\n });\n };\n\n return this.parseCsv(parseForXml);\n }\n\n /**\n * T-SQL supports alias = expression in SELECT.\n * Converts EQ projections into Aliases.\n */\n parseProjections (): Expression[] {\n return super.parseProjections().map((projection) => {\n if (projection instanceof EqExpr && projection.args.this instanceof ColumnExpr) {\n return alias(projection.args.expression as Expression, projection.args.this.args.this as IdentifierExpr, {\n copy: false,\n });\n }\n return projection;\n });\n }\n\n parseCommitOrRollback (): CommitExpr | RollbackExpr {\n const rollback = this.prev?.tokenType === TokenType.ROLLBACK;\n\n this.matchTexts([\n 'TRAN',\n 'TRANSACTION',\n ]);\n const thisNode = this.parseIdVar();\n\n if (rollback) {\n return this.expression(RollbackExpr, {\n this: thisNode,\n });\n }\n\n let durability: boolean | undefined = undefined;\n if (this.matchPair(TokenType.WITH, TokenType.L_PAREN)) {\n this.matchTextSeq('DELAYED_DURABILITY');\n this.match(TokenType.EQ);\n\n if (this.matchTextSeq('OFF')) {\n durability = false;\n } else {\n this.match(TokenType.ON);\n durability = true;\n }\n\n this.matchRParen();\n }\n\n return this.expression(CommitExpr, {\n this: thisNode,\n durability,\n });\n }\n\n parseTransaction (): TransactionExpr | CommandExpr {\n if (this.matchTexts([\n 'TRAN',\n 'TRANSACTION',\n ])) {\n const transactionName = this.parseIdVar();\n const transaction = this.expression(TransactionExpr, {\n this: transactionName,\n });\n if (this.matchTextSeq([\n 'WITH',\n 'MARK',\n ])) {\n transaction.setArgKey('mark', this.parseString());\n }\n return transaction;\n }\n\n return this.parseAsCommand(this.prev);\n }\n\n parseReturns (): ReturnsPropertyExpr {\n const table = this.parseIdVar({\n anyToken: false,\n tokens: (this._constructor as typeof TSQLParser).RETURNS_TABLE_TOKENS,\n });\n const returns = super.parseReturns();\n returns.setArgKey('table', table);\n return returns;\n }\n\n parseConvert (options: {\n strict: boolean;\n safe?: boolean;\n }): Expression | undefined {\n const {\n safe,\n } = options;\n const thisNode = this.parseTypes();\n this.match(TokenType.COMMA);\n const args = [\n thisNode,\n ...this.parseCsv(() => this.parseAssignment()),\n ];\n const convert = ConvertExpr.fromArgList(args);\n convert.setArgKey('safe', safe);\n return convert;\n }\n\n parseColumnDef (thisNode?: Expression, options: {computedColumn?: boolean} = {}): Expression | undefined {\n const {\n computedColumn = true,\n } = options;\n const columnDef = super.parseColumnDef(thisNode, {\n computedColumn,\n });\n if (!columnDef) return undefined;\n\n if (this.match(TokenType.EQ)) {\n columnDef.setArgKey('default', this.parseDisjunction());\n }\n if (this.matchTexts((this._constructor as typeof TSQLParser).COLUMN_DEFINITION_MODES)) {\n columnDef.setArgKey('output', this.prev?.text);\n }\n return columnDef;\n }\n\n parseUserDefinedFunction (options: {kind?: TokenType} = {}): Expression | undefined {\n const {\n kind,\n } = options;\n const thisNode = super.parseUserDefinedFunction(options);\n\n if (\n kind === TokenType.FUNCTION\n || thisNode instanceof UserDefinedFunctionExpr\n || this.match(TokenType.ALIAS, {\n advance: false,\n })\n ) {\n return thisNode;\n }\n\n let expressions: Expression[] | undefined;\n if (!this.match(TokenType.WITH, {\n advance: false,\n })) {\n expressions = this.parseCsv(() => this.parseFunctionParameter());\n }\n\n return this.expression(UserDefinedFunctionExpr, {\n this: thisNode,\n expressions,\n });\n }\n\n parseInto (): IntoExpr | undefined {\n const into = super.parseInto();\n\n if (into instanceof IntoExpr) {\n const table = into.find(TableExpr);\n if (table instanceof TableExpr) {\n const tableIdentifier = table.args.this;\n if (narrowInstanceOf(tableIdentifier, Expression)?.getArgKey('temporary')) {\n into.setArgKey('temporary', true);\n }\n }\n }\n\n return into;\n }\n\n parseIdVar (options: {\n anyToken?: boolean;\n tokens?: Set<TokenType>;\n } = {}): Expression | undefined {\n const {\n anyToken = true, tokens,\n } = options;\n const isTemporary = this.match(TokenType.HASH);\n const isGlobal = isTemporary && this.match(TokenType.HASH);\n\n const thisNode = super.parseIdVar({\n anyToken,\n tokens,\n });\n if (thisNode) {\n if (isGlobal) {\n thisNode.setArgKey('global', true);\n } else if (isTemporary) {\n thisNode.setArgKey('temporary', true);\n }\n }\n\n return thisNode;\n }\n\n parseCreate (): CreateExpr | CommandExpr {\n const create = super.parseCreate();\n\n if (create instanceof CreateExpr) {\n const table = create.args.this instanceof SchemaExpr ? create.args.this.args.this : create.args.this;\n if (table instanceof TableExpr && narrowInstanceOf(table.args.this, Expression)?.getArgKey('temporary')) {\n if (!create.args.properties) {\n create.setArgKey('properties', new PropertiesExpr({\n expressions: [\n ],\n }));\n }\n (create.args.properties as PropertiesExpr).append('expressions', new TemporaryPropertyExpr());\n }\n }\n\n return create;\n }\n\n parseIf (): Expression | undefined {\n const index = this.index;\n\n if (this.matchTextSeq('OBJECT_ID')) {\n this.parseWrappedCsv(() => this.parseString());\n if (this.matchTextSeq([\n 'IS',\n 'NOT',\n 'NULL',\n ]) && this.match(TokenType.DROP)) {\n return this.parseDrop({\n exists: true,\n });\n }\n this.retreat(index);\n }\n\n return super.parseIf();\n }\n\n parseUnique (): UniqueColumnConstraintExpr {\n let thisNode: ExpressionValue | undefined;\n if (this.matchTexts([\n 'CLUSTERED',\n 'NONCLUSTERED',\n ])) {\n const parsers = this._constructor.CONSTRAINT_PARSERS;\n thisNode = seqGet(ensureList(parsers[this.prev?.text.toUpperCase() ?? '']?.call(this)), 0) as ExpressionValue;\n } else {\n thisNode = this.parseSchema({\n this: this.parseIdVar({\n anyToken: false,\n }),\n }) ?? new VarExpr({});\n }\n\n return this.expression(UniqueColumnConstraintExpr, {\n this: thisNode,\n });\n }\n\n parseUpdate (): UpdateExpr {\n const expression = super.parseUpdate();\n expression.setArgKey('options', this.parseOptions());\n return expression;\n }\n\n parsePartition (): PartitionExpr | undefined {\n if (!this.matchTextSeq([\n 'WITH',\n '(',\n 'PARTITIONS',\n ])) {\n return undefined;\n }\n\n const parseRange = (): Expression => {\n const low = this.parseBitwise();\n const high = this.matchTextSeq('TO') ? this.parseBitwise() : undefined;\n\n return high\n ? this.expression(PartitionRangeExpr, {\n this: low,\n expression: high,\n })\n : (low ?? this.expression(PartitionRangeExpr, {}));\n };\n\n const expressions = this.parseWrappedCsv(parseRange);\n const partition = this.expression(PartitionExpr, {\n expressions,\n });\n\n this.matchRParen();\n\n return partition;\n }\n\n parseDeclareitem (): DeclareItemExpr | undefined {\n const varNode = this.parseIdVar();\n if (!varNode) return undefined;\n\n this.match(TokenType.ALIAS);\n return this.expression(DeclareItemExpr, {\n this: varNode,\n kind: this.match(TokenType.TABLE) ? this.parseSchema() : this.parseTypes(),\n default: this.match(TokenType.EQ) ? this.parseBitwise() : undefined,\n });\n }\n\n parseAlterTableAlter (): Expression | undefined {\n const expression = super.parseAlterTableAlter();\n\n if (expression) {\n const collation = expression.getArgKey('collate');\n if (collation instanceof ColumnExpr && collation.args.this instanceof IdentifierExpr) {\n const identifier = collation.args.this;\n collation.setArgKey('this', new VarExpr({\n this: identifier.name,\n }));\n }\n }\n\n return expression;\n }\n\n parsePrimaryKeyPart (): Expression | undefined {\n return this.parseOrdered();\n }\n}\nexport class TSQLGenerator extends Generator {\n // port from _Dialect metaclass logic\n @cache\n static get AFTER_HAVING_MODIFIER_TRANSFORMS () {\n const modifiers = new Map(super.AFTER_HAVING_MODIFIER_TRANSFORMS);\n [\n 'cluster',\n 'distribute',\n 'sort',\n ].forEach((m) => modifiers.delete(m));\n return modifiers;\n }\n\n // port from _Dialect metaclass logic\n static SUPPORTS_DECODE_CASE = false;\n // port from _Dialect metaclass logic\n static readonly SELECT_KINDS: string[] = [\n ];\n // port from _Dialect metaclass logic\n static TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\n static LIMIT_IS_TOP = true;\n static QUERY_HINTS = false;\n static RETURNING_END = false;\n static NVL2_SUPPORTED = false;\n static ALTER_TABLE_INCLUDE_COLUMN_KEYWORD = false;\n static LIMIT_FETCH = 'FETCH';\n static COMPUTED_COLUMN_WITH_TYPE = false;\n static CTE_RECURSIVE_KEYWORD_REQUIRED = false;\n static ENSURE_BOOLS = true;\n @cache\n static get NULL_ORDERING_SUPPORTED () {\n return NullOrderingSupported.UNSUPPORTED;\n }\n\n static SUPPORTS_SINGLE_ARG_CONCAT = false;\n static TABLESAMPLE_SEED_KEYWORD = 'REPEATABLE';\n static SUPPORTS_SELECT_INTO = true;\n static JSON_PATH_BRACKETED_KEY_SUPPORTED = false;\n static SUPPORTS_TO_NUMBER = false;\n static SET_OP_MODIFIERS = false;\n static COPY_PARAMS_EQ_REQUIRED = true;\n static PARSE_JSON_NAME = undefined;\n static EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = false;\n static ALTER_SET_WRAPPED = true;\n static ALTER_SET_TYPE = '';\n\n @cache\n static get EXPRESSIONS_WITHOUT_NESTED_CTES () {\n return new Set([\n CreateExpr,\n DeleteExpr,\n InsertExpr,\n IntersectExpr,\n ExceptExpr,\n MergeExpr,\n SelectExpr,\n SubqueryExpr,\n UnionExpr,\n UpdateExpr,\n ]);\n }\n\n @cache\n static get SUPPORTED_JSON_PATH_PARTS (): Set<typeof Expression> {\n return new Set([\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n ]);\n }\n\n @cache\n static get TYPE_MAPPING (): Map<DataTypeExprKind | string, string> {\n const mapping = new Map<DataTypeExprKind | string, string>([\n ...Generator.TYPE_MAPPING.entries(),\n [\n DataTypeExprKind.BOOLEAN,\n 'BIT',\n ],\n [\n DataTypeExprKind.DATETIME2,\n 'DATETIME2',\n ],\n [\n DataTypeExprKind.DECIMAL,\n 'NUMERIC',\n ],\n [\n DataTypeExprKind.DOUBLE,\n 'FLOAT',\n ],\n [\n DataTypeExprKind.INT,\n 'INTEGER',\n ],\n [\n DataTypeExprKind.ROWVERSION,\n 'ROWVERSION',\n ],\n [\n DataTypeExprKind.TEXT,\n 'VARCHAR(MAX)',\n ],\n [\n DataTypeExprKind.TIMESTAMP,\n 'DATETIME2',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'DATETIME2',\n ],\n [\n DataTypeExprKind.TIMESTAMPTZ,\n 'DATETIMEOFFSET',\n ],\n [\n DataTypeExprKind.SMALLDATETIME,\n 'SMALLDATETIME',\n ],\n [\n DataTypeExprKind.UTINYINT,\n 'TINYINT',\n ],\n [\n DataTypeExprKind.VARIANT,\n 'SQL_VARIANT',\n ],\n [\n DataTypeExprKind.UUID,\n 'UNIQUEIDENTIFIER',\n ],\n ]);\n\n mapping.delete(DataTypeExprKind.NCHAR);\n mapping.delete(DataTypeExprKind.NVARCHAR);\n\n return mapping;\n }\n\n @cache\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static get ORIGINAL_TRANSFORMS (): Map<typeof Expression, (this: Generator, e: any) => string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transforms = new Map<typeof Expression, (this: Generator, e: any) => string>(([\n ...Generator.TRANSFORMS.entries(),\n [\n AnyValueExpr,\n anyValueToMaxSql,\n ],\n [\n Atan2Expr,\n renameFunc('ATN2'),\n ],\n [\n ArrayToStringExpr,\n renameFunc('STRING_AGG'),\n ],\n [\n AutoIncrementColumnConstraintExpr,\n () => 'IDENTITY',\n ],\n [\n CeilExpr,\n renameFunc('CEILING'),\n ],\n [\n ChrExpr,\n renameFunc('CHAR'),\n ],\n [\n DateAddExpr,\n dateDeltaSql('DATEADD'),\n ],\n [\n CteExpr,\n preprocess([\n qualifyDerivedTableOutputs,\n ]),\n ],\n [\n CurrentDateExpr,\n renameFunc('GETDATE'),\n ],\n [\n CurrentTimestampExpr,\n renameFunc('GETDATE'),\n ],\n [\n CurrentTimestampLtzExpr,\n renameFunc('SYSDATETIMEOFFSET'),\n ],\n [\n DateStrToDateExpr,\n dateStrToDateSql,\n ],\n [\n GeneratedAsIdentityColumnConstraintExpr,\n generatedAsIdentityColumnConstraintSql,\n ],\n [\n GroupConcatExpr,\n stringAggSql,\n ],\n [\n IfExpr,\n renameFunc('IIF'),\n ],\n [\n JsonExtractExpr,\n jsonExtractSql,\n ],\n [\n JsonExtractScalarExpr,\n jsonExtractSql,\n ],\n [\n LastDayExpr,\n function (this: Generator, e: LastDayExpr) {\n return this.func('EOMONTH', [\n e.args.this,\n ]);\n },\n ],\n [\n LnExpr,\n renameFunc('LOG'),\n ],\n [\n MaxExpr,\n maxOrGreatest,\n ],\n [\n Md5Expr,\n function (this: Generator, e: Md5Expr) {\n return this.func('HASHBYTES', [\n LiteralExpr.string('MD5'),\n e.args.this,\n ]);\n },\n ],\n [\n MinExpr,\n minOrLeast,\n ],\n [\n NumberToStrExpr,\n formatSql,\n ],\n [\n RepeatExpr,\n renameFunc('REPLICATE'),\n ],\n [\n CurrentSchemaExpr,\n renameFunc('SCHEMA_NAME'),\n ],\n [\n SelectExpr,\n preprocess([\n eliminateDistinctOn,\n eliminateSemiAndAntiJoins,\n eliminateQualify,\n unnestGenerateDateArrayUsingRecursiveCte,\n ]),\n ],\n [\n StddevExpr,\n renameFunc('STDEV'),\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr) {\n return strPositionSql.call(this, e, {\n funcName: 'CHARINDEX',\n supportsPosition: true,\n });\n },\n ],\n [\n SubqueryExpr,\n preprocess([\n qualifyDerivedTableOutputs,\n ]),\n ],\n [\n ShaExpr,\n function (this: Generator, e: ShaExpr) {\n return this.func('HASHBYTES', [\n LiteralExpr.string('SHA1'),\n e.args.this,\n ]);\n },\n ],\n [\n Sha1DigestExpr,\n function (this: Generator, e: Sha1DigestExpr) {\n return this.func('HASHBYTES', [\n LiteralExpr.string('SHA1'),\n e.args.this,\n ]);\n },\n ],\n [\n Sha2Expr,\n function (this: Generator, e: Sha2Expr) {\n return this.func('HASHBYTES', [\n LiteralExpr.string(`SHA2_${e.args.length || 256}`),\n e.args.this,\n ]);\n },\n ],\n [\n TemporaryPropertyExpr,\n () => '',\n ],\n [\n TimeStrToTimeExpr,\n timeStrToTimeSql,\n ],\n [\n TimeToStrExpr,\n formatSql,\n ],\n [\n TrimExpr,\n trimSql,\n ],\n [\n TsOrDsAddExpr,\n dateDeltaSql('DATEADD', {\n cast: true,\n }),\n ],\n [\n TsOrDsDiffExpr,\n dateDeltaSql('DATEDIFF'),\n ],\n [\n TimestampTruncExpr,\n function (this: Generator, e: TimestampTruncExpr) {\n return this.func('DATETRUNC', [\n e.args.unit,\n e.args.this,\n ]);\n },\n ],\n [\n TruncExpr,\n function (this: Generator, e: TruncExpr) {\n return this.func('ROUND', [\n e.args.this,\n e.args.decimals || LiteralExpr.number(0),\n LiteralExpr.number(1),\n ]);\n },\n ],\n [\n UuidExpr,\n () => 'NEWID()',\n ],\n [\n DateFromPartsExpr,\n renameFunc('DATEFROMPARTS'),\n ],\n [\n IntoExpr,\n function (this: Generator, e: IntoExpr) {\n // TSQL SELECT INTO only supports INTO <table>, not INTO with variable list (Oracle syntax)\n if (e.args.expressions && 0 < e.args.expressions.length) {\n this.unsupported('Oracle-style SELECT INTO with variables is not supported in TSQL');\n }\n if (e.args.temporary) {\n const table = e.find(TableExpr);\n if (table && table.args.this instanceof IdentifierExpr) {\n table.args.this.setArgKey('temporary', true);\n }\n }\n return `${this.seg('INTO')} ${this.sql(e, 'this')}`;\n },\n ],\n ]));\n\n transforms.delete(ReturnsPropertyExpr);\n\n return transforms;\n }\n\n @cache\n static get PROPERTIES_LOCATION (): Map<typeof Expression, PropertiesLocation> {\n return new Map<typeof Expression, PropertiesLocation>([\n ...Generator.PROPERTIES_LOCATION.entries(),\n [\n VolatilePropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n ]);\n }\n\n scopeResolution (rhs: string, scopeName: string): string {\n return `${scopeName}::${rhs}`;\n }\n\n selectSql (expression: SelectExpr): string {\n const limit = expression.args.limit;\n let offset = expression.args.offset;\n\n // T-SQL requires OFFSET in order to use FETCH\n if (limit instanceof FetchExpr && !offset) {\n offset = new OffsetExpr({\n expression: LiteralExpr.number(0),\n });\n expression.setArgKey('offset', offset);\n }\n\n if (offset) {\n if (!expression.args.order) {\n // T-SQL OFFSET requires an ORDER BY. Use a no-op subquery if none exists.\n //\n expression.orderBy(new SelectExpr({\n expressions: [\n new NullExpr(),\n ],\n }).subquery(), {\n copy: false,\n });\n }\n\n if (limit instanceof LimitExpr) {\n // TOP and OFFSET can't be combined; replace TOP with FETCH\n limit.replace(new FetchExpr({\n direction: 'FIRST',\n count: limit.args.expression,\n }));\n }\n }\n\n return super.selectSql(expression);\n }\n\n convertSql (expression: ConvertExpr): string {\n const name = expression.args.safe ? 'TRY_CONVERT' : 'CONVERT';\n return this.func(name, [\n expression.args.this,\n expression.args.expression,\n expression.args.style,\n ]);\n }\n\n queryOptionSql (expression: QueryOptionExpr): string {\n const option = this.sql(expression, 'this');\n const value = this.sql(expression, 'expression');\n\n if (value) {\n // T-SQL options like MAXDOP don't use '=', but others like LABEL do.\n const optionalEqualSign = OPTIONS_THAT_REQUIRE_EQUAL.has(option) ? '= ' : '';\n return `${option} ${optionalEqualSign}${value}`;\n }\n return option;\n }\n\n lateralOp (expression: LateralExpr): string {\n const crossApply = expression.args.crossApply;\n if (crossApply === true) {\n return 'CROSS APPLY';\n }\n if (crossApply === false) {\n return 'OUTER APPLY';\n }\n\n this.unsupported('LATERAL clause is not supported.');\n return 'LATERAL';\n }\n\n splitPartSql (expression: SplitPartExpr): string {\n const thisNode = expression.args.this;\n const splitCount = (thisNode instanceof LiteralExpr) ? thisNode.name.split('.').length : 0;\n const delimiter = expression.args.delimiter;\n const partIndex = expression.args.partIndex;\n\n if (\n !(thisNode instanceof LiteralExpr && delimiter instanceof LiteralExpr && partIndex instanceof LiteralExpr)\n || (delimiter && delimiter.name !== '.')\n || !partIndex\n || 4 < splitCount\n ) {\n this.unsupported(\n 'SPLIT_PART can be transpiled to PARSENAME only for \\'.\\' delimiter and literal values',\n );\n return '';\n }\n\n const reversedIndex = splitCount + 1 - Number(partIndex.name);\n return this.func('PARSENAME', [\n thisNode,\n LiteralExpr.number(reversedIndex),\n ]);\n }\n\n extractSql (expression: ExtractExpr): string {\n const part = expression.args.this;\n const partName = typeof part === 'string' ? part.toUpperCase() : part?.name?.toUpperCase() ?? '';\n const name = DATE_PART_UNMAPPING[partName] || part;\n\n return this.func('DATEPART', [\n name,\n expression.args.expression,\n ]);\n }\n\n timeFromPartsSql (expression: TimeFromPartsExpr): string {\n const nano = expression.args.nano;\n if (nano !== undefined) {\n nano.pop();\n this.unsupported('Specifying nanoseconds is not supported in TIMEFROMPARTS.');\n }\n\n if (expression.args.fractions === undefined) {\n expression.setArgKey('fractions', LiteralExpr.number(0));\n }\n if (expression.args.precision === undefined) {\n expression.setArgKey('precision', LiteralExpr.number(0));\n }\n\n return renameFunc('TIMEFROMPARTS').call(this, expression);\n }\n\n timestampFromPartsSql (expression: TimestampFromPartsExpr): string {\n const zone = expression.args.zone;\n if (zone !== undefined) {\n zone.pop();\n this.unsupported('Time zone is not supported in DATETIMEFROMPARTS.');\n }\n\n const nano = expression.args.nano;\n if (nano !== undefined) {\n nano.pop();\n this.unsupported('Specifying nanoseconds is not supported in DATETIMEFROMPARTS.');\n }\n\n if (expression.args.milli === undefined) {\n expression.setArgKey('milli', LiteralExpr.number(0));\n }\n\n return renameFunc('DATETIMEFROMPARTS').call(this, expression);\n }\n\n setItemSql (expression: SetItemExpr): string {\n const thisNode = expression.args.this;\n if (thisNode instanceof EqExpr && !(thisNode.args.this instanceof ParameterExpr)) {\n // T-SQL does not use '=' in SET command for system options (e.g., SET NOCOUNT ON),\n // except when the LHS is a variable (@var = val).\n return `${this.sql(thisNode.args.this)} ${this.sql(thisNode.args.expression)}`;\n }\n\n return super.setItemSql(expression);\n }\n\n booleanSql (expression: BooleanExpr): string {\n const parent = expression.parent;\n const valuesOrSelect = expression.findAncestor<ValuesExpr | SelectExpr>(ValuesExpr, SelectExpr);\n\n // T-SQL does not have a native BOOLEAN type; it uses BIT (0/1).\n // In predicates, we use (1=1) or (1=0).\n //\n if (\n (parent && BIT_TYPES.has(parent._constructor))\n || (valuesOrSelect instanceof ValuesExpr)\n ) {\n return expression.args.this ? '1' : '0';\n }\n\n return expression.args.this ? '(1 = 1)' : '(1 = 0)';\n }\n\n isSql (expression: IsExpr): string {\n if (expression.args.expression instanceof BooleanExpr) {\n return this.binary(expression, '=');\n }\n return this.binary(expression, 'IS');\n }\n\n createableSql (expression: CreateExpr): string {\n let sql = this.sql(expression, 'this');\n const properties = expression.args.properties;\n\n // T-SQL temporary tables must start with #.\n // We automatically prepend # if a TemporaryProperty is found.\n if (\n sql[0] !== '#'\n && properties?.args?.expressions?.some((prop) => prop instanceof TemporaryPropertyExpr)\n ) {\n sql = sql.startsWith('[') ? `[#${sql.slice(1)}` : `#${sql}`;\n }\n\n return sql;\n }\n\n createSql (expression: CreateExpr): string {\n const kind = expression.args.kind;\n const exists = expression.args.exists;\n expression.setArgKey('exists', undefined);\n\n const likeProperty = expression.find(LikePropertyExpr);\n let ctasExpression = likeProperty ? likeProperty.args.this : expression.args.expression;\n\n if (kind === CreateExprKind.VIEW) {\n expression.args.this?.setArgKey('catalog', undefined);\n const withClause = expression.args.with;\n if (ctasExpression && withClause) {\n // CREATE VIEW requires WITH after the query\n ctasExpression.setArgKey('with', withClause.pop());\n }\n }\n\n const table = expression.find(TableExpr);\n\n let sql: string;\n // Convert CTAS (Create Table As Select) to T-SQL's SELECT .. INTO ..\n if (kind === CreateExprKind.TABLE && ctasExpression) {\n if (ctasExpression instanceof SelectExpr) {\n ctasExpression = ctasExpression.subquery();\n }\n\n const properties = expression.args.properties || new PropertiesExpr({\n expressions: [\n ],\n });\n const isTemp = (properties.args.expressions ?? [\n ]).some((p) => p instanceof TemporaryPropertyExpr);\n\n const selectInto = new SelectExpr({\n expressions: [\n new StarExpr(),\n ],\n })\n .from(alias(ctasExpression, 'temp', {\n table: true,\n }));\n\n selectInto.setArgKey('into', new IntoExpr({\n this: table,\n temporary: isTemp,\n }));\n\n if (likeProperty) {\n selectInto.limit(0, {\n copy: false,\n });\n }\n\n sql = this.sql(selectInto);\n } else {\n sql = super.createSql(expression);\n }\n\n if (exists) {\n const idLiteral = this.sql(LiteralExpr.string(table ? tableName(table) : ''));\n const sqlWithCtes = this.prependCtes(expression, sql);\n const sqlLiteral = this.sql(LiteralExpr.string(sqlWithCtes));\n\n if (kind === CreateExprKind.SCHEMA) {\n return `IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ${idLiteral}) EXEC(${sqlLiteral})`;\n } else if (kind === CreateExprKind.TABLE) {\n const where = [\n `TABLE_NAME = ${this.sql(LiteralExpr.string((table as TableExpr).name))}`,\n (table as TableExpr).db ? `TABLE_SCHEMA = ${this.sql(LiteralExpr.string((table as TableExpr).db))}` : null,\n (table as TableExpr).catalog ? `TABLE_CATALOG = ${this.sql(LiteralExpr.string((table as TableExpr).catalog))}` : null,\n ].filter(Boolean).join(' AND ');\n\n return `IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE ${where}) EXEC(${sqlLiteral})`;\n } else if (kind === CreateExprKind.INDEX) {\n const indexName = this.sql(LiteralExpr.string(expression.args.this?.text('this') || ''));\n return `IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = object_id(${idLiteral}) AND name = ${indexName}) EXEC(${sqlLiteral})`;\n }\n } else if (expression.args.replace) {\n sql = sql.replace('CREATE OR REPLACE ', 'CREATE OR ALTER ');\n }\n\n return this.prependCtes(expression, sql);\n }\n\n intoSql (expression: IntoExpr): string {\n if (expression.args.temporary) {\n const table = expression.find(TableExpr);\n if (table && table.args.this instanceof IdentifierExpr) {\n table.args.this.setArgKey('temporary', true);\n }\n }\n return `${this.seg('INTO')} ${this.sql(expression, 'this')}`;\n }\n\n countSql (expression: CountExpr): string {\n const funcName = expression.args.bigInt ? 'COUNT_BIG' : 'COUNT';\n return renameFunc(funcName).call(this, expression);\n }\n\n dateDiffSql (expression: DateDiffExpr): string {\n const funcName = expression.args.bigInt ? 'DATEDIFF_BIG' : 'DATEDIFF';\n return dateDeltaSql(funcName).call(this, expression);\n }\n\n offsetSql (expression: OffsetExpr): string {\n return `${super.offsetSql(expression)} ROWS`;\n }\n\n versionSql (expression: VersionExpr): string {\n const name = expression.name === 'TIMESTAMP' ? 'SYSTEM_TIME' : expression.name;\n const kind = expression.text('kind');\n const expr = expression.args.expression;\n let exprSql = '';\n\n if (kind === 'FROM' || kind === 'BETWEEN') {\n const args = expr?.args.expressions as ExpressionValue[] ?? [\n ];\n const sep = kind === 'FROM' ? 'TO' : 'AND';\n exprSql = `${this.sql(seqGet(args, 0))} ${sep} ${this.sql(seqGet(args, 1))}`;\n } else {\n exprSql = this.sql(expr);\n }\n\n return `FOR ${name} ${kind}${exprSql ? ' ' + exprSql : ''}`;\n }\n\n returnsPropertySql (expression: ReturnsPropertyExpr): string {\n const table = expression.args.table;\n const tablePart = table ? `${table} ` : '';\n return `RETURNS ${tablePart}${this.sql(expression, 'this')}`;\n }\n\n returningSql (expression: ReturningExpr): string {\n const into = this.sql(expression, 'into');\n const intoPart = into ? this.seg(`INTO ${into}`) : '';\n return `${this.seg('OUTPUT')} ${this.expressions(expression, {\n flat: true,\n })}${intoPart}`;\n }\n\n transactionSql (expression: TransactionExpr): string {\n const thisPart = expression.args.this ? ` ${this.sql(expression, 'this')}` : '';\n const mark = expression.args.mark ? ` WITH MARK ${this.sql(expression, 'mark')}` : '';\n return `BEGIN TRANSACTION${thisPart}${mark}`;\n }\n\n commitSql (expression: CommitExpr): string {\n const thisPart = expression.args.this ? ` ${this.sql(expression, 'this')}` : '';\n const durability = expression.args.durability !== undefined\n ? ` WITH (DELAYED_DURABILITY = ${expression.args.durability ? 'ON' : 'OFF'})`\n : '';\n return `COMMIT TRANSACTION${thisPart}${durability}`;\n }\n\n rollbackSql (expression: RollbackExpr): string {\n const thisPart = expression.args.this ? ` ${this.sql(expression, 'this')}` : '';\n return `ROLLBACK TRANSACTION${thisPart}`;\n }\n\n identifierSql (expression: IdentifierExpr): string {\n let identifier = super.identifierSql(expression);\n if (expression.args.global) {\n identifier = `##${identifier}`;\n } else if (expression.args.temporary) {\n identifier = `#${identifier}`;\n }\n return identifier;\n }\n\n constraintSql (expression: ConstraintExpr): string {\n return `CONSTRAINT ${this.sql(expression, 'this')} ${this.expressions(expression, {\n flat: true,\n sep: ' ',\n })}`;\n }\n\n lengthSql (expression: LengthExpr): string {\n return this.uncastText(expression, 'LEN');\n }\n\n rightSql (expression: RightExpr): string {\n return this.uncastText(expression, 'RIGHT');\n }\n\n leftSql (expression: LeftExpr): string {\n return this.uncastText(expression, 'LEFT');\n }\n\n private uncastText (expression: Expression, name: string): string {\n const thisNode = expression.args.this;\n const thisSql = (thisNode instanceof CastExpr && thisNode.isType(DataTypeExprKind.TEXT))\n ? this.sql(thisNode, 'this')\n : this.sql(thisNode);\n const expressionSql = this.sql(expression, 'expression');\n return this.func(name, [\n thisSql,\n expressionSql || undefined,\n ]);\n }\n\n partitionSql (expression: PartitionExpr): string {\n return `WITH (PARTITIONS(${this.expressions(expression, {\n flat: true,\n })}))`;\n }\n\n alterSql (expression: AlterExpr): string {\n const action = seqGet(expression.args.actions ?? [\n ], 0);\n if (action instanceof AlterRenameExpr) {\n return `EXEC sp_rename '${this.sql(expression, 'this')}', '${(action.args.this)?.name ?? ''}'`;\n }\n return super.alterSql(expression);\n }\n\n dropSql (expression: DropExpr): string {\n if (expression.args.kind === DropExprKind.VIEW) {\n expression.args.this?.setArgKey('catalog', undefined);\n }\n return super.dropSql(expression);\n }\n\n optionsModifier (expression: Expression): string {\n const options = this.expressions(expression, {\n key: 'options',\n });\n return options ? ` OPTION${this.wrap(options)}` : '';\n }\n\n dPipeSql (expression: DPipeExpr): string {\n // Converts || concatenation into + for T-SQL\n const flattened = [\n ...expression.flatten(),\n ].reduce((acc: Expression, curr: Expression) =>\n new AddExpr({\n this: acc,\n expression: curr,\n }));\n return this.sql(flattened);\n }\n\n isAsciiSql (expression: IsAsciiExpr): string {\n // T-SQL implementation using PATINDEX and hex range\n return `(PATINDEX(CONVERT(VARCHAR(MAX), 0x255b5e002d7f5d25) COLLATE Latin1_General_BIN, ${this.sql(expression.args.this)}) = 0)`;\n }\n\n columnDefSql (expression: ColumnDefExpr, options: {sep?: string} = {}): string {\n const thisSql = super.columnDefSql(expression, options);\n const defaultValue = expression.args.default ? ` = ${this.sql(expression, 'default')}` : '';\n const output = expression.args.output ? ` ${this.sql(expression, 'output')}` : '';\n return `${thisSql}${defaultValue}${output}`;\n }\n\n coalesceSql (expression: CoalesceExpr): string {\n const funcName = expression.args.isNull ? 'ISNULL' : 'COALESCE';\n return renameFunc(funcName).call(this, expression);\n }\n}\n\nexport class TSQL extends Dialect {\n static DIALECT_NAME = Dialects.TSQL;\n static SUPPORTS_SEMI_ANTI_JOIN = false;\n static LOG_BASE_FIRST = false;\n static TYPED_DIVISION = true;\n static CONCAT_COALESCE = true;\n\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.CASE_INSENSITIVE;\n }\n\n static ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN = false;\n\n static TIME_FORMAT = '\\'yyyy-mm-dd hh:mm:ss\\'';\n\n @cache\n static get EXPRESSION_METADATA () {\n return new Map(TSQLTyping.EXPRESSION_METADATA);\n }\n\n @cache\n static get DATE_PART_MAPPING (): Record<string, string> {\n return {\n ...Dialect.DATE_PART_MAPPING,\n QQ: 'QUARTER',\n M: 'MONTH',\n Y: 'DAYOFYEAR',\n WW: 'WEEK',\n N: 'MINUTE',\n SS: 'SECOND',\n MCS: 'MICROSECOND',\n TZOFFSET: 'TIMEZONE_MINUTE',\n TZ: 'TIMEZONE_MINUTE',\n ISO_WEEK: 'WEEKISO',\n ISOWK: 'WEEKISO',\n ISOWW: 'WEEKISO',\n };\n }\n\n @cache\n static get TIME_MAPPING () {\n return {\n year: '%Y',\n dayofyear: '%j',\n day: '%d',\n dy: '%d',\n y: '%Y',\n week: '%W',\n ww: '%W',\n wk: '%W',\n isowk: '%V',\n isoww: '%V',\n isoWeek: '%V',\n hour: '%h',\n hh: '%I',\n minute: '%M',\n mi: '%M',\n n: '%M',\n second: '%S',\n ss: '%S',\n s: '%-S',\n millisecond: '%f',\n ms: '%f',\n weekday: '%w',\n dw: '%w',\n month: '%m',\n mm: '%M',\n m: '%-M',\n Y: '%Y',\n YYYY: '%Y',\n YY: '%y',\n MMMM: '%B',\n MMM: '%b',\n MM: '%m',\n M: '%-m',\n dddd: '%A',\n dd: '%d',\n d: '%-d',\n HH: '%H',\n H: '%-H',\n h: '%-I',\n ffffff: '%f',\n yyyy: '%Y',\n yy: '%y',\n };\n }\n\n @cache\n static get CONVERT_FORMAT_MAPPING () {\n return {\n 0: '%b %d %Y %-I:%M%p',\n 1: '%m/%d/%y',\n 2: '%y.%m.%d',\n 3: '%d/%m/%y',\n 4: '%d.%m.%y',\n 5: '%d-%m-%y',\n 6: '%d %b %y',\n 7: '%b %d, %y',\n 8: '%H:%M:%S',\n 9: '%b %d %Y %-I:%M:%S:%f%p',\n 10: 'mm-dd-yy',\n 11: 'yy/mm/dd',\n 12: 'yymmdd',\n 13: '%d %b %Y %H:%M:ss:%f',\n 14: '%H:%M:%S:%f',\n 20: '%Y-%m-%d %H:%M:%S',\n 21: '%Y-%m-%d %H:%M:%S.%f',\n 22: '%m/%d/%y %-I:%M:%S %p',\n 23: '%Y-%m-%d',\n 24: '%H:%M:%S',\n 25: '%Y-%m-%d %H:%M:%S.%f',\n 100: '%b %d %Y %-I:%M%p',\n 101: '%m/%d/%Y',\n 102: '%Y.%m.%d',\n 103: '%d/%m/%Y',\n 104: '%d.%m.%Y',\n 105: '%d-%m-%Y',\n 106: '%d %b %Y',\n 107: '%b %d, %Y',\n 108: '%H:%M:%S',\n 109: '%b %d %Y %-I:%M:%S:%f%p',\n 110: '%m-%d-%Y',\n 111: '%Y/%m/%d',\n 112: '%Y%m%d',\n 113: '%d %b %Y %H:%M:%S:%f',\n 114: '%H:%M:%S:%f',\n 120: '%Y-%m-%d %H:%M:%S',\n 121: '%Y-%m-%d %H:%M:%S.%f',\n 126: '%Y-%m-%dT%H:%M:%S.%f',\n };\n }\n\n @cache\n static get FORMAT_TIME_MAPPING () {\n return {\n y: '%B %Y',\n d: '%m/%d/%Y',\n H: '%-H',\n h: '%-I',\n s: '%Y-%m-%d %H:%M:%S',\n D: '%A,%B,%Y',\n f: '%A,%B,%Y %-I:%M %p',\n F: '%A,%B,%Y %-I:%M:%S %p',\n g: '%m/%d/%Y %-I:%M %p',\n G: '%m/%d/%Y %-I:%M:%S %p',\n M: '%B %-d',\n m: '%B %-d',\n O: '%Y-%m-%dT%H:%M:%S',\n u: '%Y-%M-%D %H:%M:%S%z',\n U: '%A, %B %D, %Y %H:%M:%S%z',\n T: '%-I:%M:%S %p',\n t: '%-I:%M',\n Y: '%a %Y',\n };\n }\n\n static Tokenizer = TSQLTokenizer;\n static Parser = TSQLParser;\n static Generator = TSQLGenerator;\n}\n\nDialect.register(Dialects.TSQL, TSQL);\nDialect.register('mssql', TSQL);\n"]}
|