@hdnax/sqlingo.js 0.0.4 → 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 +12 -0
- package/README.md +8 -14
- package/README.npm.md +8 -14
- 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});var _chunkUHWHUDLEcjs = require('../chunk-UHWHUDLE.cjs');require('../chunk-YSS2WVCM.cjs');require('../chunk-XZQFOICX.cjs');require('../chunk-DOKMTZYO.cjs');require('../chunk-R7C3ZHVK.cjs');var _chunk2Z3O2CFMcjs = require('../chunk-2Z3O2CFM.cjs');var _,x,f,s=class extends(x=_chunkUHWHUDLEcjs.a.Tokenizer,_=[_chunk2Z3O2CFMcjs.r],x){static get HEX_STRINGS(){return["0x",["X'","'"]]}};f=_chunk2Z3O2CFMcjs.a.call(void 0, x),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"HEX_STRINGS",_,s),_chunk2Z3O2CFMcjs.b.call(void 0, f,s),_chunk2Z3O2CFMcjs.c.call(void 0, f,3,s);var N,O,l,e,t=class extends(l=_chunkUHWHUDLEcjs.a.Generator,O=[_chunk2Z3O2CFMcjs.r],N=[_chunk2Z3O2CFMcjs.r],l){static get AFTER_HAVING_MODIFIER_TRANSFORMS(){let p=new Map(super.AFTER_HAVING_MODIFIER_TRANSFORMS);return["cluster","distribute","sort"].forEach(c=>p.delete(c)),p}static get ORIGINAL_TRANSFORMS(){return new Map([..._chunkUHWHUDLEcjs.a.Generator.TRANSFORMS,[_chunk2Z3O2CFMcjs.Gc,function(c){return`0x${c.args.this}`}]])}};e=_chunk2Z3O2CFMcjs.a.call(void 0, l),_chunk2Z3O2CFMcjs.d.call(void 0, e,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",O,t),_chunk2Z3O2CFMcjs.d.call(void 0, e,10,"ORIGINAL_TRANSFORMS",N,t),_chunk2Z3O2CFMcjs.b.call(void 0, e,t),_chunk2Z3O2CFMcjs.c.call(void 0, e,3,t),t.SUPPORTS_DECODE_CASE=!1,t.TRY_SUPPORTED=!1,t.SUPPORTS_UESCAPE=!1;var r=class extends _chunkUHWHUDLEcjs.a{};r.DIALECT_NAME="dune",r.Tokenizer=s,r.Generator=t;_chunk2Z3O2CFMcjs.op.register("dune",r);exports.Dune = r;
|
|
2
|
+
//# sourceMappingURL=dune.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/dialects/dune.cjs","../../src/dialects/dune.ts"],"names":["_HEX_STRINGS_dec","_a","_init","DuneTokenizer","Trino","cache","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_ORIGINAL_TRANSFORMS_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","DuneGenerator","modifiers","m","HexStringExpr","e"],"mappings":"AAAA,kIAAyC,iCAA8B,iCAA8B,iCAA8B,iCAA8B,yDAAsF,ICAvPA,CAAAA,CAAAC,CAAAA,CAAAC,CAAAA,CAsBMC,CAAAA,CAAN,MAAA,OAAA,CAA4BF,CAAAA,CAAAG,mBAAAA,CAAM,SAAA,CAChCJ,CAAAA,CAAA,CAACK,mBAAAA,CAAAA,CADyBJ,CAAAA,CAAgB,CAE1C,OAAA,IAAW,WAAA,CAAA,CAA4B,CACrC,MAAO,CACL,IAAA,CACA,CACE,IAAA,CACA,GACF,CACF,CACF,CACF,CAAA,CAXAC,CAAAA,CAAAI,iCAAAA,CAAAL,CAAAA,CAEEM,iCAAAA,CAAAL,CAAA,EAAA,CAAW,aAAA,CADXF,CAAAA,CADIG,CAAAA,CAAAA,CAANK,iCAAAA,CAAAN,CAAMC,CAAAA,CAAAA,CAANM,iCAAAA,CAAAP,CAAA,CAAA,CAAMC,CAAAA,CAAAA,CAtBN,IAAAO,CAAAA,CAAAC,CAAAA,CAAAV,CAAAA,CAAAC,CAAAA,CAmCMU,CAAAA,CAAN,MAAA,OAAA,CAA4BX,CAAAA,CAAAG,mBAAAA,CAAM,SAAA,CAEhCO,CAAAA,CAAA,CAACN,mBAAAA,CAAAA,CAkBDK,CAAAA,CAAA,CAACL,mBAAAA,CAAAA,CApByBJ,CAAAA,CAAgB,CAG1C,OAAA,IAAW,gCAAA,CAAA,CAAoC,CAC7C,IAAMY,CAAAA,CAAY,IAAI,GAAA,CAAI,KAAA,CAAM,gCAAgC,CAAA,CAChE,MAAA,CACE,SAAA,CACA,YAAA,CACA,MACF,CAAA,CAAE,OAAA,CAASC,CAAAA,EAAMD,CAAAA,CAAU,MAAA,CAAOC,CAAC,CAAC,CAAA,CAC7BD,CACT,CAWA,OAAA,IAAW,mBAAA,CAAA,CAAoF,CAW7F,OATmB,IAAI,GAAA,CAA4D,CACjF,GAAGT,mBAAAA,CAAM,SAAA,CAAU,UAAA,CACnB,CACEW,oBAAAA,CACA,QAAA,CAA2BC,CAAAA,CAAG,CAC5B,MAAO,CAAA,EAAA,EAAKA,CAAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAAA","file":"/home/huydna/projects/sqlingo.js/dist/dialects/dune.cjs","sourcesContent":[null,"import type {\n Expression,\n} from '../expressions';\nimport {\n HexStringExpr,\n} from '../expressions';\nimport type {\n Generator,\n} from '../generator';\nimport {\n cache,\n} from '../port_internals';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n Dialect, Dialects,\n} from './dialect';\nimport {\n Trino,\n} from './trino';\n\nclass DuneTokenizer extends Trino.Tokenizer {\n @cache\n static get HEX_STRINGS (): TokenPair[] {\n return [\n '0x',\n [\n 'X\\'',\n '\\'',\n ],\n ];\n }\n}\n\nclass DuneGenerator extends Trino.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 TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\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 ...Trino.Generator.TRANSFORMS,\n [\n HexStringExpr,\n function (this: Generator, e) {\n return `0x${e.args.this}`;\n },\n ],\n ]);\n return transforms;\n }\n}\n\nexport class Dune extends Trino {\n static DIALECT_NAME = Dialects.DUNE;\n static Tokenizer = DuneTokenizer;\n static Generator = DuneGenerator;\n}\n\nDialect.register(Dialects.DUNE, Dune);\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { d as Dialects, _ as TokenPair, G as Generator, E as Expression } from '../tokens-VcMD09XM.cjs';
|
|
2
|
+
import { Trino } from './trino.cjs';
|
|
3
|
+
import './presto.cjs';
|
|
4
|
+
|
|
5
|
+
declare class DuneTokenizer extends Trino.Tokenizer {
|
|
6
|
+
static get HEX_STRINGS(): TokenPair[];
|
|
7
|
+
}
|
|
8
|
+
declare class DuneGenerator extends Trino.Generator {
|
|
9
|
+
static get AFTER_HAVING_MODIFIER_TRANSFORMS(): Map<string, (this: Generator, e: Expression) => string>;
|
|
10
|
+
static SUPPORTS_DECODE_CASE: boolean;
|
|
11
|
+
static TRY_SUPPORTED: boolean;
|
|
12
|
+
static SUPPORTS_UESCAPE: boolean;
|
|
13
|
+
static get ORIGINAL_TRANSFORMS(): Map<typeof Expression, (this: Generator, e: any) => string>;
|
|
14
|
+
}
|
|
15
|
+
declare class Dune extends Trino {
|
|
16
|
+
static DIALECT_NAME: Dialects;
|
|
17
|
+
static Tokenizer: typeof DuneTokenizer;
|
|
18
|
+
static Generator: typeof DuneGenerator;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { Dune };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { d as Dialects, _ as TokenPair, G as Generator, E as Expression } from '../tokens-VcMD09XM.js';
|
|
2
|
+
import { Trino } from './trino.js';
|
|
3
|
+
import './presto.js';
|
|
4
|
+
|
|
5
|
+
declare class DuneTokenizer extends Trino.Tokenizer {
|
|
6
|
+
static get HEX_STRINGS(): TokenPair[];
|
|
7
|
+
}
|
|
8
|
+
declare class DuneGenerator extends Trino.Generator {
|
|
9
|
+
static get AFTER_HAVING_MODIFIER_TRANSFORMS(): Map<string, (this: Generator, e: Expression) => string>;
|
|
10
|
+
static SUPPORTS_DECODE_CASE: boolean;
|
|
11
|
+
static TRY_SUPPORTED: boolean;
|
|
12
|
+
static SUPPORTS_UESCAPE: boolean;
|
|
13
|
+
static get ORIGINAL_TRANSFORMS(): Map<typeof Expression, (this: Generator, e: any) => string>;
|
|
14
|
+
}
|
|
15
|
+
declare class Dune extends Trino {
|
|
16
|
+
static DIALECT_NAME: Dialects;
|
|
17
|
+
static Tokenizer: typeof DuneTokenizer;
|
|
18
|
+
static Generator: typeof DuneGenerator;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { Dune };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as i}from"../chunk-IPCIXWCY.js";import"../chunk-PXUASP5I.js";import"../chunk-Z5V6VOIN.js";import"../chunk-ZBFGQPJR.js";import"../chunk-O2J5RKBN.js";import{Gc as A,a as E,b as R,c as S,d as o,op as T,r as a}from"../chunk-KCNOE4DZ.js";var _,x,f,s=class extends(x=i.Tokenizer,_=[a],x){static get HEX_STRINGS(){return["0x",["X'","'"]]}};f=E(x),o(f,10,"HEX_STRINGS",_,s),R(f,s),S(f,3,s);var N,O,l,e,t=class extends(l=i.Generator,O=[a],N=[a],l){static get AFTER_HAVING_MODIFIER_TRANSFORMS(){let p=new Map(super.AFTER_HAVING_MODIFIER_TRANSFORMS);return["cluster","distribute","sort"].forEach(c=>p.delete(c)),p}static get ORIGINAL_TRANSFORMS(){return new Map([...i.Generator.TRANSFORMS,[A,function(c){return`0x${c.args.this}`}]])}};e=E(l),o(e,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",O,t),o(e,10,"ORIGINAL_TRANSFORMS",N,t),R(e,t),S(e,3,t),t.SUPPORTS_DECODE_CASE=!1,t.TRY_SUPPORTED=!1,t.SUPPORTS_UESCAPE=!1;var r=class extends i{};r.DIALECT_NAME="dune",r.Tokenizer=s,r.Generator=t;T.register("dune",r);export{r as Dune};
|
|
2
|
+
//# sourceMappingURL=dune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dialects/dune.ts"],"sourcesContent":["import type {\n Expression,\n} from '../expressions';\nimport {\n HexStringExpr,\n} from '../expressions';\nimport type {\n Generator,\n} from '../generator';\nimport {\n cache,\n} from '../port_internals';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n Dialect, Dialects,\n} from './dialect';\nimport {\n Trino,\n} from './trino';\n\nclass DuneTokenizer extends Trino.Tokenizer {\n @cache\n static get HEX_STRINGS (): TokenPair[] {\n return [\n '0x',\n [\n 'X\\'',\n '\\'',\n ],\n ];\n }\n}\n\nclass DuneGenerator extends Trino.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 TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\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 ...Trino.Generator.TRANSFORMS,\n [\n HexStringExpr,\n function (this: Generator, e) {\n return `0x${e.args.this}`;\n },\n ],\n ]);\n return transforms;\n }\n}\n\nexport class Dune extends Trino {\n static DIALECT_NAME = Dialects.DUNE;\n static Tokenizer = DuneTokenizer;\n static Generator = DuneGenerator;\n}\n\nDialect.register(Dialects.DUNE, Dune);\n"],"mappings":"kPAAA,IAAAA,EAAAC,EAAAC,EAsBMC,EAAN,cAA4BF,EAAAG,EAAM,UAChCJ,EAAA,CAACK,GADyBJ,EAAgB,CAE1C,WAAW,aAA4B,CACrC,MAAO,CACL,KACA,CACE,KACA,GACF,CACF,CACF,CACF,EAXAC,EAAAI,EAAAL,GAEEM,EAAAL,EAAA,GAAW,cADXF,EADIG,GAANK,EAAAN,EAAMC,GAANM,EAAAP,EAAA,EAAMC,GAtBN,IAAAO,EAAAC,EAAAV,EAAAC,EAmCMU,EAAN,cAA4BX,EAAAG,EAAM,UAEhCO,EAAA,CAACN,GAkBDK,EAAA,CAACL,GApByBJ,EAAgB,CAG1C,WAAW,kCAAoC,CAC7C,IAAMY,EAAY,IAAI,IAAI,MAAM,gCAAgC,EAChE,OACE,UACA,aACA,MACF,EAAE,QAASC,GAAMD,EAAU,OAAOC,CAAC,CAAC,EAC7BD,CACT,CAWA,WAAW,qBAAoF,CAW7F,OATmB,IAAI,IAA4D,CACjF,GAAGT,EAAM,UAAU,WACnB,CACEW,EACA,SAA2BC,EAAG,CAC5B,MAAO,KAAKA,EAAE,KAAK,IAAI,EACzB,CACF,CACF,CAAC,CAEH,CACF,EAnCAd,EAAAI,EAAAL,GAGEM,EAAAL,EAAA,GAAW,mCADXS,EAFIC,GAsBJL,EAAAL,EAAA,GAAW,sBAFXQ,EApBIE,GAANJ,EAAAN,EAAMU,GAANH,EAAAP,EAAA,EAAMU,KAcG,qBAAuB,GAd1BA,EAgBG,cAAgB,GAhBnBA,EAkBG,iBAAmB,GAmBrB,IAAMK,EAAN,cAAmBb,CAAM,CAIhC,EAJaa,EACJ,aAAe,OADXA,EAEJ,UAAYd,EAFRc,EAGJ,UAAYL,EAGrBM,EAAQ,gBAAwBD,CAAI","names":["_HEX_STRINGS_dec","_a","_init","DuneTokenizer","Trino","cache","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_ORIGINAL_TRANSFORMS_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","DuneGenerator","modifiers","m","HexStringExpr","e","Dune","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 xt=new Set(["DAY","WEEK","MONTH","YEAR","HOUR","MINUTE","SECOND"]);function Hr(r){let e=r.text("length")==="256"?"HASH_SHA256":"HASH_SHA512";return this.func(e,[r.args.this])}function er(r){let n=r.text("unit").toUpperCase()||"DAY";return xt.has(n)?this.func(`${n}S_BETWEEN`,[r.args.this,r.args.expression]):(this.unsupported(`'${n}' is not supported in Exasol.`),this.functionFallbackSql(r))}function Ur(r){let n=new (0, _chunk2Z3O2CFMcjs.Ke)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, r,0),expression:_chunk2Z3O2CFMcjs.Bo.call(void 0, )});return new (0, _chunk2Z3O2CFMcjs._i)({this:n,true:_chunk2Z3O2CFMcjs.$c.number(0),false:_chunk2Z3O2CFMcjs.ca.call(void 0, r,0)})}function br(r){let n=new (0, _chunk2Z3O2CFMcjs.Ce)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, r,0),expression:_chunk2Z3O2CFMcjs.$c.number(0)});return new (0, _chunk2Z3O2CFMcjs._i)({this:n,true:_chunk2Z3O2CFMcjs.Bo.call(void 0, ),false:_chunk2Z3O2CFMcjs.ca.call(void 0, r,0)})}function yr(r){if(r instanceof _chunk2Z3O2CFMcjs.Wd){let n={};_optionalChain([r, 'access', _2 => _2.args, 'access', _3 => _3.expressions, 'optionalAccess', _4 => _4.forEach, 'call', _5 => _5(s=>{if(s instanceof _chunk2Z3O2CFMcjs.hc){let c=s.args.alias;c instanceof _chunk2Z3O2CFMcjs.rb&&(n[c.name]=c.args.quoted||!1)}})]);let t=_optionalChain([r, 'access', _6 => _6.find, 'call', _7 => _7(_chunk2Z3O2CFMcjs.Tb), 'optionalAccess', _8 => _8.args, 'access', _9 => _9.this]);t instanceof _chunk2Z3O2CFMcjs.rb&&t.name.toUpperCase()==="LOCAL"&&!t.args.quoted&&t.replace(_chunk2Z3O2CFMcjs.eo.call(void 0, t.name.toUpperCase(),{quoted:!0}));let E=(s,c)=>{if(s instanceof _chunk2Z3O2CFMcjs.Ic&&!s.args.table){let T=s.args.this.name;if(T in c)return new (0, _chunk2Z3O2CFMcjs.Ic)({this:_chunk2Z3O2CFMcjs.eo.call(void 0, T,{quoted:c[T]}),table:_chunk2Z3O2CFMcjs.eo.call(void 0, "LOCAL",{quoted:!1})})}return s};["where","group","having"].forEach(s=>{let c=r.args[s];c instanceof _chunk2Z3O2CFMcjs.Ca&&r.setArgKey(s,c.transform(T=>E(T,n)))});let f={},h=[];_optionalChain([r, 'access', _10 => _10.args, 'access', _11 => _11.expressions, 'optionalAccess', _12 => _12.forEach, 'call', _13 => _13(s=>{if(s instanceof _chunk2Z3O2CFMcjs.hc){let c=_optionalChain([s, 'access', _14 => _14.args, 'access', _15 => _15.this, 'optionalAccess', _16 => _16.transform, 'call', _17 => _17(p=>E(p,f))]);s.setArgKey("this",c);let T=s.args.alias;T instanceof _chunk2Z3O2CFMcjs.rb&&(f[T.name]=T.args.quoted||!1),h.push(s)}else h.push(s.transform(c=>E(c,f)))})]),r.setArgKey("expressions",h)}return r}function Lr(r,n){let e=n.text("unit"),t=n.args.this instanceof _chunk2Z3O2CFMcjs.Cg?n.args.this.args.this:n.args.this,E=this.sql(t);return t instanceof _chunk2Z3O2CFMcjs.$c&&t.isString&&(E=r==="TIMESTAMP"?`${r} '${(_nullishCoalesce(t.args.this, () => (""))).replace("T"," ")}'`:`DATE '${_nullishCoalesce(t.args.this, () => (""))}'`),`DATE_TRUNC('${e}', ${E})`}function qr(r){return Lr.call(this,"DATE",r)}function nr(r){return Lr.call(this,"TIMESTAMP",r)}function sr(r){return r instanceof _chunk2Z3O2CFMcjs.Gg&&r.text("expression").toUpperCase()==="UTF8_LCASE"}function Yr(r){let n=r.args.this,e=r.args.delimiter,t=e instanceof _chunk2Z3O2CFMcjs.Ca?e:_chunk2Z3O2CFMcjs.$c.number(_nullishCoalesce(e, () => (0))),E=r.args.count,f=this.sql(r,"count"),h=E instanceof _chunk2Z3O2CFMcjs.$c&&E.isNumber?parseFloat(_nullishCoalesce(E.args.this, () => ("0"))):0,s=this.sql(n);if(h===0)return this.func("SUBSTR",[s,"1","0"]);let c=h<0,T=c?"-1":"1",p=c?this.func("ABS",[f]):f,N=this.sql(t),C=this.func("INSTR",[n instanceof _chunk2Z3O2CFMcjs.Ca&&sr(n)?this.func("LOWER",[s]):s,sr(t)?this.func("LOWER",[N]):N,T,p]),U=this.func("NULLIF",[C,"0"]);if(c){let Gr=this.func("NVL",[`${U} + ${this.func("LENGTH",[N])}`,T]);return this.func("SUBSTR",[s,Gr])}let Pr=this.func("NVL",[`${U} - 1`,this.func("LENGTH",[s])]);return this.func("SUBSTR",[s,T,Pr])}function wr(r){if(!(r instanceof _chunk2Z3O2CFMcjs.Wd))return r;let n=r.args.expressions||[],e=p=>p instanceof _chunk2Z3O2CFMcjs._b&&!p.args.this,t=!1,E=null;for(let p of n){let N=e(p);if(N&&E===null?E=p:N||(t=!0),E&&t)break}if(!(E&&t))return r;let f=_chunk2Z3O2CFMcjs.U.call(void 0, r);if(!f||!f.selectedSources||Object.keys(f.selectedSources).length===0)return r;let h=[];for(let[p,N]of Object.entries(f.selectedSources)){let[C]=N,U=C instanceof _chunk2Z3O2CFMcjs.Tb&&C.args.this instanceof _chunk2Z3O2CFMcjs.rb?C.args.this.copy():_chunk2Z3O2CFMcjs.eo.call(void 0, p);h.push(U)}let s=E,c=h.map(p=>new (0, _chunk2Z3O2CFMcjs.Ic)({this:s.copy(),table:p})),T=[];for(let p of n)e(p)?T.push(...c):T.push(p);return r.setArgKey("expressions",T),r}function gt(r){let n=r.args.expression instanceof _chunk2Z3O2CFMcjs.fe?r.args.expression:null,e=(n?n.text("unit")||"DAY":r.text("unit")||"DAY").toUpperCase();if(!xt.has(e))return this.unsupported(`'${e}' is not supported in Exasol.`),this.functionFallbackSql(r);if(!r.args.expression)return this.functionFallbackSql(r);let t=r.args.expression;if(n){if(!n.args.this)return this.functionFallbackSql(r);t=n.args.this}return r instanceof _chunk2Z3O2CFMcjs.wh&&(t=new (0, _chunk2Z3O2CFMcjs.We)({this:t})),this.func(`ADD_${e}S`,[r.args.this,t])}var ir,ar,or,B,O=class extends(or=_chunk2Z3O2CFMcjs.Xq,ar=[_chunk2Z3O2CFMcjs.r],ir=[_chunk2Z3O2CFMcjs.r],or){static get IDENTIFIERS(){return['"',["[","]"]]}static get ORIGINAL_KEYWORDS(){let e={..._chunk2Z3O2CFMcjs.Xq.KEYWORDS,USER:"currentUser",ENDIF:"end","LONG VARCHAR":"text",SEPARATOR:"separator",SYSTIMESTAMP:"systimestamp"};return delete e.DIV,e}};B=_chunk2Z3O2CFMcjs.a.call(void 0, or),_chunk2Z3O2CFMcjs.d.call(void 0, B,10,"IDENTIFIERS",ar,O),_chunk2Z3O2CFMcjs.d.call(void 0, B,10,"ORIGINAL_KEYWORDS",ir,O),_chunk2Z3O2CFMcjs.b.call(void 0, B,O),_chunk2Z3O2CFMcjs.c.call(void 0, B,3,O);var Er,cr,ur,Tr,pr,Sr,fr,lr,Ar,I,A=class extends(Ar=_chunk2Z3O2CFMcjs.za,lr=[_chunk2Z3O2CFMcjs.r],fr=[_chunk2Z3O2CFMcjs.r],Sr=[_chunk2Z3O2CFMcjs.r],pr=[_chunk2Z3O2CFMcjs.r],Tr=[_chunk2Z3O2CFMcjs.r],ur=[_chunk2Z3O2CFMcjs.r],cr=[_chunk2Z3O2CFMcjs.r],Er=[_chunk2Z3O2CFMcjs.r],Ar){static get ID_VAR_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.ID_VAR_TOKENS,"sessionUser","currentCatalog","straightJoin"])}static get NO_PAREN_FUNCTIONS(){let e={systimestamp:_chunk2Z3O2CFMcjs.eh,..._chunk2Z3O2CFMcjs.za.NO_PAREN_FUNCTIONS};return delete e.localtime,delete e.localtimestamp,e}static get FUNCTIONS(){return(()=>{let e={..._chunk2Z3O2CFMcjs.za.FUNCTIONS,BIT_AND:_chunk2Z3O2CFMcjs.iq.call(void 0, _chunk2Z3O2CFMcjs.ue),BIT_OR:_chunk2Z3O2CFMcjs.iq.call(void 0, _chunk2Z3O2CFMcjs.we),BIT_XOR:_chunk2Z3O2CFMcjs.iq.call(void 0, _chunk2Z3O2CFMcjs.ye),BIT_NOT:t=>new (0, _chunk2Z3O2CFMcjs.Te)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0)}),BIT_LSHIFT:_chunk2Z3O2CFMcjs.iq.call(void 0, _chunk2Z3O2CFMcjs.ve),BIT_RSHIFT:_chunk2Z3O2CFMcjs.iq.call(void 0, _chunk2Z3O2CFMcjs.xe),DATE_TRUNC:t=>new (0, _chunk2Z3O2CFMcjs.bi)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,1),unit:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0)}),DIV:_chunk2Z3O2CFMcjs.iq.call(void 0, _chunk2Z3O2CFMcjs.Je),EVERY:t=>new (0, _chunk2Z3O2CFMcjs.mm)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0)}),EDIT_DISTANCE:t=>_chunk2Z3O2CFMcjs.Rj.fromArgList(t),HASH_SHA:t=>_chunk2Z3O2CFMcjs.fl.fromArgList(t),HASH_SHA1:t=>_chunk2Z3O2CFMcjs.fl.fromArgList(t),HASH_MD5:t=>_chunk2Z3O2CFMcjs.gk.fromArgList(t),HASHTYPE_MD5:t=>_chunk2Z3O2CFMcjs.hk.fromArgList(t),REGEXP_SUBSTR:t=>_chunk2Z3O2CFMcjs.Ik.fromArgList(t),REGEXP_REPLACE:t=>new (0, _chunk2Z3O2CFMcjs.Kk)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),expression:_chunk2Z3O2CFMcjs.ca.call(void 0, t,1),replacement:_chunk2Z3O2CFMcjs.ca.call(void 0, t,2),position:_chunk2Z3O2CFMcjs.ca.call(void 0, t,3),occurrence:_chunk2Z3O2CFMcjs.ca.call(void 0, t,4)}),HASH_SHA256:t=>new (0, _chunk2Z3O2CFMcjs.gl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),length:_chunk2Z3O2CFMcjs.$c.number(256)}),HASH_SHA512:t=>new (0, _chunk2Z3O2CFMcjs.gl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),length:_chunk2Z3O2CFMcjs.$c.number(512)}),TRUNC:t=>_chunk2Z3O2CFMcjs.kq.call(void 0, t,{dialect:"exasol"}),TRUNCATE:t=>_chunk2Z3O2CFMcjs.kq.call(void 0, t,{dialect:"exasol"}),VAR_POP:t=>_chunk2Z3O2CFMcjs.Sn.fromArgList(t),APPROXIMATE_COUNT_DISTINCT:t=>_chunk2Z3O2CFMcjs.Lm.fromArgList(t),TO_CHAR:t=>_chunk2Z3O2CFMcjs.Rq.call(void 0, t,{dialect:"exasol"}),TO_DATE:_chunk2Z3O2CFMcjs.Kp.call(void 0, _chunk2Z3O2CFMcjs.Pl,{dialect:"exasol"}),CONVERT_TZ:t=>new (0, _chunk2Z3O2CFMcjs.$f)({timestamp:t[0],sourceTz:_chunk2Z3O2CFMcjs.ca.call(void 0, t,1),targetTz:t[2],options:[_chunk2Z3O2CFMcjs.ca.call(void 0, t,3)]}),NULLIFZERO:br,ZEROIFNULL:Ur,WEEKOFYEAR:t=>_chunk2Z3O2CFMcjs.Lh.fromArgList(t)};return xt.forEach(t=>{e[`ADD_${t}S`]=_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.uh,void 0,{defaultUnit:t}),e[`${t}S_BETWEEN`]=_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.xh,void 0,{defaultUnit:t})}),e})()}static get CONSTRAINT_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.CONSTRAINT_PARSERS,COMMENT:function(){return this.expression(_chunk2Z3O2CFMcjs.Nc,{this:this.match("is")&&this.parseString()})}}}static get FUNC_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.FUNC_TOKENS,"systimestamp"])}static get FUNCTION_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.FUNCTION_PARSERS,...Object.fromEntries(["GROUP_CONCAT","LISTAGG"].map(e=>[e,function(){return this.parseGroupConcat()}]))}}static get ODBC_DATETIME_LITERALS(){return{d:_chunk2Z3O2CFMcjs.li,ts:_chunk2Z3O2CFMcjs.Zh}}parseColumn(){let e=super.parseColumn();if(!(e instanceof _chunk2Z3O2CFMcjs.Ic))return e;let t=e.args.table;return t instanceof _chunk2Z3O2CFMcjs.rb&&t.name.toUpperCase()==="LOCAL"&&!t.args.quoted&&e.setArgKey("table",void 0),e}static get TABLE_ALIAS_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.TABLE_ALIAS_TOKENS,"straightJoin"])}};I=_chunk2Z3O2CFMcjs.a.call(void 0, Ar),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"ID_VAR_TOKENS",lr,A),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"NO_PAREN_FUNCTIONS",fr,A),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"FUNCTIONS",Sr,A),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"CONSTRAINT_PARSERS",pr,A),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"FUNC_TOKENS",Tr,A),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"FUNCTION_PARSERS",ur,A),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"ODBC_DATETIME_LITERALS",cr,A),_chunk2Z3O2CFMcjs.d.call(void 0, I,10,"TABLE_ALIAS_TOKENS",Er,A),_chunk2Z3O2CFMcjs.b.call(void 0, I,A),_chunk2Z3O2CFMcjs.c.call(void 0, I,3,A);var hr,Ir,Rr,gr,Nr,d,l=class l extends(Nr=_chunk2Z3O2CFMcjs.lp,gr=[_chunk2Z3O2CFMcjs.r],Rr=[_chunk2Z3O2CFMcjs.r],Ir=[_chunk2Z3O2CFMcjs.r],hr=[_chunk2Z3O2CFMcjs.r],Nr){static get AFTER_HAVING_MODIFIER_TRANSFORMS(){let e=new Map(super.AFTER_HAVING_MODIFIER_TRANSFORMS);return["cluster","distribute","sort"].forEach(t=>e.delete(t)),e}static get STRING_TYPE_MAPPING(){return new Map([["blob","VARCHAR"],["longblob","VARCHAR"],["longtext","VARCHAR"],["mediumblob","VARCHAR"],["mediumtext","VARCHAR"],["tinyblob","VARCHAR"],["tinytext","VARCHAR"],["text","LONG VARCHAR"],["varbinary","VARCHAR"]])}static get TYPE_MAPPING(){return new Map([..._chunk2Z3O2CFMcjs.lp.TYPE_MAPPING,...l.STRING_TYPE_MAPPING,["tinyint","SMALLINT"],["mediumint","INT"],["decimal32","DECIMAL"],["decimal64","DECIMAL"],["decimal128","DECIMAL"],["decimal256","DECIMAL"],["datetime","TIMESTAMP"],["timestamptz","TIMESTAMP"],["timestampltz","TIMESTAMP"],["timestampntz","TIMESTAMP"]])}dataTypeSql(e){return e.isType(["timestampltz"])?"TIMESTAMP WITH LOCAL TIME ZONE":super.dataTypeSql(e)}static get ORIGINAL_TRANSFORMS(){return new Map([..._chunk2Z3O2CFMcjs.lp.TRANSFORMS,[_chunk2Z3O2CFMcjs.mm,_chunk2Z3O2CFMcjs.pp.call(void 0, "EVERY")],[_chunk2Z3O2CFMcjs.ue,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_AND")],[_chunk2Z3O2CFMcjs.we,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_OR")],[_chunk2Z3O2CFMcjs.Te,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_NOT")],[_chunk2Z3O2CFMcjs.ve,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_LSHIFT")],[_chunk2Z3O2CFMcjs.xe,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_RSHIFT")],[_chunk2Z3O2CFMcjs.ye,_chunk2Z3O2CFMcjs.pp.call(void 0, "BIT_XOR")],[_chunk2Z3O2CFMcjs.xh,function(t){return er.call(this,t)}],[_chunk2Z3O2CFMcjs.uh,function(t){return gt.call(this,t)}],[_chunk2Z3O2CFMcjs.Nl,function(t){return gt.call(this,t)}],[_chunk2Z3O2CFMcjs.wh,function(t){return gt.call(this,t)}],[_chunk2Z3O2CFMcjs.Je,_chunk2Z3O2CFMcjs.pp.call(void 0, "DIV")],[_chunk2Z3O2CFMcjs.Ol,function(t){return er.call(this,t)}],[_chunk2Z3O2CFMcjs.yh,function(t){return qr.call(this,t)}],[_chunk2Z3O2CFMcjs.Fh,function(t){return`CAST(TO_CHAR(${this.sql(t,"this")}, 'D') AS INTEGER)`}],[_chunk2Z3O2CFMcjs.Dh,function(t){return nr.call(this,t)}],[_chunk2Z3O2CFMcjs.in,function(t){return _chunk2Z3O2CFMcjs.Qq.call(this,t,{funcName:"LISTAGG",withinGroup:!0})}],[_chunk2Z3O2CFMcjs.Rj,function(t){return _chunk2Z3O2CFMcjs.kp.call(this,t,"insCost","delCost","subCost","maxDist"),_chunk2Z3O2CFMcjs.pp.call(void 0, "EDIT_DISTANCE").call(this,t)}],[_chunk2Z3O2CFMcjs.Pe,_chunk2Z3O2CFMcjs.pp.call(void 0, "MOD")],[_chunk2Z3O2CFMcjs.$f,function(t){return this.func("CONVERT_TZ",[t.args.timestamp,t.args.sourceTz,t.args.targetTz,..._nullishCoalesce(t.args.options, () => ([]))])}],[_chunk2Z3O2CFMcjs.Ik,function(t){return _chunk2Z3O2CFMcjs.kp.call(this,t,"parameters","group"),_chunk2Z3O2CFMcjs.pp.call(void 0, "REGEXP_SUBSTR").call(this,t)}],[_chunk2Z3O2CFMcjs.Kk,function(t){return _chunk2Z3O2CFMcjs.kp.call(this,t,"modifiers"),_chunk2Z3O2CFMcjs.pp.call(void 0, "REGEXP_REPLACE").call(this,t)}],[_chunk2Z3O2CFMcjs.Sn,_chunk2Z3O2CFMcjs.pp.call(void 0, "VAR_POP")],[_chunk2Z3O2CFMcjs.Lm,function(t){return _chunk2Z3O2CFMcjs.kp.call(this,t,"accuracy"),_chunk2Z3O2CFMcjs.pp.call(void 0, "APPROXIMATE_COUNT_DISTINCT").call(this,t)}],[_chunk2Z3O2CFMcjs.Qf,function(t){return this.func("TO_CHAR",[t.args.this,this.formatTime(t)])}],[_chunk2Z3O2CFMcjs.Pl,function(t){return this.func("TO_DATE",[t.args.this,this.formatTime(t)])}],[_chunk2Z3O2CFMcjs.Hl,function(t){return this.func("TO_CHAR",[t.args.this,this.formatTime(t)])}],[_chunk2Z3O2CFMcjs.Kl,function(t){return _chunk2Z3O2CFMcjs.Wp.call(this,t)}],[_chunk2Z3O2CFMcjs.bi,function(t){return nr.call(this,t)}],[_chunk2Z3O2CFMcjs.xl,function(t){return this.func("TO_DATE",[t.args.this,this.formatTime(t)])}],[_chunk2Z3O2CFMcjs.kh,()=>"CURRENT_USER"],[_chunk2Z3O2CFMcjs.kc,function(t){return this.func("CONVERT_TZ",[t.args.this,"'UTC'",t.args.zone])}],[_chunk2Z3O2CFMcjs.tl,function(t){return _chunk2Z3O2CFMcjs.Ep.call(this,t,{funcName:"INSTR",supportsPosition:!0,supportsOccurrence:!0})}],[_chunk2Z3O2CFMcjs.fl,_chunk2Z3O2CFMcjs.pp.call(void 0, "HASH_SHA")],[_chunk2Z3O2CFMcjs.gl,function(t){return Hr.call(this,t)}],[_chunk2Z3O2CFMcjs.gk,_chunk2Z3O2CFMcjs.pp.call(void 0, "HASH_MD5")],[_chunk2Z3O2CFMcjs.hk,_chunk2Z3O2CFMcjs.pp.call(void 0, "HASHTYPE_MD5")],[_chunk2Z3O2CFMcjs.Nc,function(t){return`COMMENT IS ${this.sql(t,"this")}`}],[_chunk2Z3O2CFMcjs.Wd,_chunk2Z3O2CFMcjs.Po.call(void 0, [wr,yr])],[_chunk2Z3O2CFMcjs.ql,function(t){return Yr.call(this,t)}],[_chunk2Z3O2CFMcjs.Lh,_chunk2Z3O2CFMcjs.pp.call(void 0, "WEEK")],[_chunk2Z3O2CFMcjs.li,_chunk2Z3O2CFMcjs.pp.call(void 0, "TO_DATE")],[_chunk2Z3O2CFMcjs.Zh,_chunk2Z3O2CFMcjs.pp.call(void 0, "TO_TIMESTAMP")],[_chunk2Z3O2CFMcjs.Bk,function(t){return`CEIL(MONTH(TO_DATE(${this.sql(t,"this")}))/3)`}],[_chunk2Z3O2CFMcjs.Qh,_chunk2Z3O2CFMcjs.xq]])}ifSql(e){let t=this.sql(e,"this"),E=this.sql(e,"true"),f=this.sql(e,"false");return`IF ${t} THEN ${E} ELSE ${f} ENDIF`}collateSql(e){return this.sql(e.args.this)}rankSql(e){return e.args.expressions&&0<e.args.expressions.length&&this.unsupported("Exasol does not support arguments in RANK"),this.func("RANK",[])}convertTimezoneSql(e){let t=e.args.timestamp,E=e.args.sourceTz,f=e.args.targetTz,h=e.args.options;return this.func("CONVERT_TZ",[t,E,f,..._nullishCoalesce(h, () => ([]))])}};d=_chunk2Z3O2CFMcjs.a.call(void 0, Nr),_chunk2Z3O2CFMcjs.d.call(void 0, d,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",gr,l),_chunk2Z3O2CFMcjs.d.call(void 0, d,10,"STRING_TYPE_MAPPING",Rr,l),_chunk2Z3O2CFMcjs.d.call(void 0, d,10,"TYPE_MAPPING",Ir,l),_chunk2Z3O2CFMcjs.d.call(void 0, d,10,"ORIGINAL_TRANSFORMS",hr,l),_chunk2Z3O2CFMcjs.b.call(void 0, d,l),_chunk2Z3O2CFMcjs.c.call(void 0, d,3,l),l.SUPPORTS_DECODE_CASE=!1,l.SELECT_KINDS=[],l.TRY_SUPPORTED=!1,l.SUPPORTS_UESCAPE=!1,l.SUPPORTS_CONVERT_TIMEZONE=!0;var Nt=l,xr,mr,Or,Dr,dr,Cr,_r,Mr,g,S= exports.Exasol =class extends(Mr=_chunk2Z3O2CFMcjs.op,_r=[_chunk2Z3O2CFMcjs.r],Cr=[_chunk2Z3O2CFMcjs.r],dr=[_chunk2Z3O2CFMcjs.r],Dr=[_chunk2Z3O2CFMcjs.r],Or=[_chunk2Z3O2CFMcjs.r],mr=[_chunk2Z3O2CFMcjs.r],xr=[_chunk2Z3O2CFMcjs.r],Mr){static get NORMALIZATION_STRATEGY(){return"uppercase"}static get SUPPORTS_USER_DEFINED_TYPES(){return!1}static get SUPPORTS_SEMI_ANTI_JOIN(){return!1}static get SUPPORTS_COLUMN_JOIN_MARKS(){return!0}static get NULL_ORDERING(){return"nulls_are_last"}static get CONCAT_COALESCE(){return!0}static get TIME_MAPPING(){return{yyyy:"%Y",YYYY:"%Y",yy:"%y",YY:"%y",mm:"%m",MM:"%m",MONTH:"%B",MON:"%b",dd:"%d",DD:"%d",DAY:"%A",DY:"%a",H12:"%I",H24:"%H",HH:"%H",ID:"%u",vW:"%V",IW:"%V",vYYY:"%G",IYYY:"%G",MI:"%M",SS:"%S",uW:"%W",UW:"%U",Z:"%z"}}};g=_chunk2Z3O2CFMcjs.a.call(void 0, Mr),_chunk2Z3O2CFMcjs.d.call(void 0, g,10,"NORMALIZATION_STRATEGY",_r,S),_chunk2Z3O2CFMcjs.d.call(void 0, g,10,"SUPPORTS_USER_DEFINED_TYPES",Cr,S),_chunk2Z3O2CFMcjs.d.call(void 0, g,10,"SUPPORTS_SEMI_ANTI_JOIN",dr,S),_chunk2Z3O2CFMcjs.d.call(void 0, g,10,"SUPPORTS_COLUMN_JOIN_MARKS",Dr,S),_chunk2Z3O2CFMcjs.d.call(void 0, g,10,"NULL_ORDERING",Or,S),_chunk2Z3O2CFMcjs.d.call(void 0, g,10,"CONCAT_COALESCE",mr,S),_chunk2Z3O2CFMcjs.d.call(void 0, g,10,"TIME_MAPPING",xr,S),_chunk2Z3O2CFMcjs.b.call(void 0, g,S),_chunk2Z3O2CFMcjs.c.call(void 0, g,3,S),S.DIALECT_NAME="exasol",S.Tokenizer=O,S.Parser=A,S.Generator=Nt;_chunk2Z3O2CFMcjs.op.register("exasol",S);exports.Exasol = S;
|
|
2
|
+
//# sourceMappingURL=exasol.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/dialects/exasol.cjs","../../src/dialects/exasol.ts"],"names":["DATE_UNITS","sha2Sql","expression","funcName","dateDiffSql","unit"],"mappings":"AAAA,0uBAAyvB,ICwGnvBA,EAAAA,CAAa,IAAI,GAAA,CAAI,CACzB,KAAA,CACA,MAAA,CACA,OAAA,CACA,MAAA,CACA,MAAA,CACA,QAAA,CACA,QACF,CAAC,CAAA,CAED,SAASC,EAAAA,CAAgCC,CAAAA,CAA8B,CAErE,IAAMC,CAAAA,CADSD,CAAAA,CAAW,IAAA,CAAK,QAAQ,CAAA,GACX,KAAA,CAAQ,aAAA,CAAgB,aAAA,CACpD,OAAO,IAAA,CAAK,IAAA,CAAKC,CAAAA,CAAU,CACzBD,CAAAA,CAAW,IAAA,CAAK,IAClB,CAAC,CACH,CAEA,SAASE,EAAAA,CAAoCF,CAAAA,CAAmD,CAC9F,IAAMG,CAAAA,CAAOH,CAAAA,CAAW,IAAA,CAAK,MAAM,CAAA,CAAE,WAAA,CAAY,CAAA,EAAK,KAAA,CAEtD,OAAKF,EAAAA,CAAW,GAAA,CAAIK,CAAI,CAAA,CAKjB,IAAA,CAAK,IAAA,CAAK,CAAA,EAAA","file":"/home/huydna/projects/sqlingo.js/dist/dialects/exasol.cjs","sourcesContent":[null,"import {\n cache,\n} from '../port_internals';\nimport {\n Generator, unsupportedArgs,\n} from '../generator';\nimport {\n Parser,\n} from '../parser';\nimport {\n Tokenizer, TokenType, type TokenPair,\n} from '../tokens';\nimport {\n Expression,\n toIdentifier,\n SelectExpr,\n AliasExpr,\n IdentifierExpr,\n TableExpr,\n ColumnExpr,\n StarExpr,\n LiteralExpr,\n IfExpr,\n IsExpr,\n EqExpr,\n CastExpr,\n CollateExpr,\n IntervalExpr,\n NegExpr,\n BitwiseAndExpr,\n BitwiseOrExpr,\n BitwiseXorExpr,\n BitwiseNotExpr,\n BitwiseLeftShiftExpr,\n BitwiseRightShiftExpr,\n IntDivExpr,\n AllExpr,\n LevenshteinExpr,\n ShaExpr,\n Sha2Expr,\n Md5Expr,\n Md5DigestExpr,\n RegexpExtractExpr,\n RegexpReplaceExpr,\n VariancePopExpr,\n ApproxDistinctExpr,\n ToCharExpr,\n TsOrDsToDateExpr,\n TimeToStrExpr,\n TimeStrToTimeExpr,\n TimestampTruncExpr,\n StrToTimeExpr,\n CurrentUserExpr,\n AtTimeZoneExpr,\n StrPositionExpr,\n GroupConcatExpr,\n ModExpr,\n DateAddExpr,\n DateSubExpr,\n DateDiffExpr,\n TsOrDsAddExpr,\n TsOrDsDiffExpr,\n DateTruncExpr,\n DatetimeTruncExpr,\n DayOfWeekExpr,\n WeekOfYearExpr,\n QuarterExpr,\n LastDayExpr,\n DateExpr,\n TimestampExpr,\n CommentColumnConstraintExpr,\n SubstringIndexExpr,\n SystimestampExpr,\n ConvertTimezoneExpr,\n type RankExpr,\n type DataTypeExpr,\n DataTypeExprKind,\n type SelectExprArgs,\n null_,\n} from '../expressions';\nimport {\n seqGet,\n} from '../helper';\nimport {\n preprocess,\n} from '../transforms';\nimport {\n buildScope,\n} from '../optimizer/scope';\nimport {\n Dialect, Dialects, NormalizationStrategy,\n renameFunc,\n buildFormattedTime,\n buildTimeToStrOrToChar,\n buildDateDelta,\n binaryFromFunction,\n buildTrunc,\n groupConcatSql,\n strPositionSql,\n timeStrToTimeSql,\n noLastDaySql,\n NullOrdering,\n} from './dialect';\n\nconst DATE_UNITS = new Set([\n 'DAY',\n 'WEEK',\n 'MONTH',\n 'YEAR',\n 'HOUR',\n 'MINUTE',\n 'SECOND',\n]);\n\nfunction sha2Sql (this: ExasolGenerator, expression: Sha2Expr): string {\n const length = expression.text('length');\n const funcName = length === '256' ? 'HASH_SHA256' : 'HASH_SHA512';\n return this.func(funcName, [\n expression.args.this,\n ]);\n}\n\nfunction dateDiffSql (this: ExasolGenerator, expression: DateDiffExpr | TsOrDsDiffExpr): string {\n const unit = expression.text('unit').toUpperCase() || 'DAY';\n\n if (!DATE_UNITS.has(unit)) {\n this.unsupported(`'${unit}' is not supported in Exasol.`);\n return this.functionFallbackSql(expression);\n }\n\n return this.func(`${unit}S_BETWEEN`, [\n expression.args.this,\n expression.args.expression,\n ]);\n}\n\n/**\n * https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/zeroifnull.htm\n */\nfunction buildZeroIfNull (args: Expression[]): IfExpr {\n const cond = new IsExpr({\n this: seqGet(args, 0),\n expression: null_(),\n });\n return new IfExpr({\n this: cond,\n true: LiteralExpr.number(0),\n false: seqGet(args, 0),\n });\n}\n\n/**\n * https://docs.exasol.com/db/latest/sql_references/functions/alphabeticallistfunctions/nullifzero.htm\n */\nfunction buildNullIfZero (args: Expression[]): IfExpr {\n const cond = new EqExpr({\n this: seqGet(args, 0),\n expression: LiteralExpr.number(0),\n });\n return new IfExpr({\n this: cond,\n true: null_(),\n false: seqGet(args, 0),\n });\n}\n\n/**\n * https://docs.exasol.com/db/latest/sql/select.htm#:~:text=If%20you%20have,local.x%3E10\n */\nfunction addLocalPrefixForAliases (expression: Expression): Expression {\n if (expression instanceof SelectExpr) {\n const aliases: Record<string, boolean> = {};\n expression.args.expressions?.forEach((sel) => {\n if (sel instanceof AliasExpr) {\n const aliasNode = sel.args.alias;\n if (aliasNode instanceof IdentifierExpr) {\n aliases[aliasNode.name] = aliasNode.args.quoted || false;\n }\n }\n });\n\n const table = expression.find(TableExpr);\n const tableIdent = table?.args.this;\n\n if (\n tableIdent instanceof IdentifierExpr\n && tableIdent.name.toUpperCase() === 'LOCAL'\n && !tableIdent.args.quoted\n ) {\n tableIdent.replace(toIdentifier(tableIdent.name.toUpperCase(), {\n quoted: true,\n }));\n }\n\n const prefixLocal = (node: Expression, visibleAliases: Record<string, boolean>): Expression => {\n if (node instanceof ColumnExpr && !node.args.table) {\n const colName = (node.args.this as IdentifierExpr).name;\n if (colName in visibleAliases) {\n return new ColumnExpr({\n this: toIdentifier(colName, {\n quoted: visibleAliases[colName],\n }),\n table: toIdentifier('LOCAL', {\n quoted: false,\n }),\n });\n }\n }\n return node;\n };\n\n [\n 'where',\n 'group',\n 'having',\n ].forEach((key) => {\n const arg = expression.args[key as keyof SelectExprArgs];\n if (arg instanceof Expression) {\n expression.setArgKey(key, arg.transform((node) => prefixLocal(node, aliases)));\n }\n });\n\n const seenAliases: Record<string, boolean> = {};\n const newSelects: Expression[] = [\n ];\n expression.args.expressions?.forEach((sel) => {\n if (sel instanceof AliasExpr) {\n const inner = sel.args.this?.transform((node) => prefixLocal(node, seenAliases));\n sel.setArgKey('this', inner);\n\n const aliasNode = sel.args.alias;\n if (aliasNode instanceof IdentifierExpr) {\n seenAliases[aliasNode.name] = aliasNode.args.quoted || false;\n }\n newSelects.push(sel);\n } else {\n newSelects.push(sel.transform((node: Expression) => prefixLocal(node, seenAliases)));\n }\n });\n expression.setArgKey('expressions', newSelects);\n }\n\n return expression;\n}\n\ntype TruncableExpr = DateTruncExpr | TimestampTruncExpr | DatetimeTruncExpr;\n\nfunction truncSql (this: ExasolGenerator, kind: string, expression: TruncableExpr): string {\n const unit = expression.text('unit');\n const node = expression.args.this instanceof CastExpr ? expression.args.this.args.this : expression.args.this;\n let exprSql = this.sql(node);\n\n if (node instanceof LiteralExpr && node.isString) {\n exprSql =\n kind === 'TIMESTAMP'\n ? `${kind} '${(node.args.this ?? '').replace('T', ' ')}'`\n : `DATE '${node.args.this ?? ''}'`;\n }\n return `DATE_TRUNC('${unit}', ${exprSql})`;\n}\n\nfunction dateTruncSql (this: ExasolGenerator, expression: DateTruncExpr): string {\n return truncSql.call(this, 'DATE', expression);\n}\n\nfunction timestampTruncSql (this: ExasolGenerator, expression: TruncableExpr): string {\n return truncSql.call(this, 'TIMESTAMP', expression);\n}\n\nfunction isCaseInsensitive (node: Expression): boolean {\n return node instanceof CollateExpr && node.text('expression').toUpperCase() === 'UTF8_LCASE';\n}\n\nfunction substringIndexSql (this: ExasolGenerator, expression: SubstringIndexExpr): string {\n const thisNode = expression.args.this;\n const delimiterNode = expression.args.delimiter;\n const delimiterExpr: Expression = delimiterNode instanceof Expression ? delimiterNode : LiteralExpr.number(delimiterNode ?? 0);\n const countNode = expression.args.count;\n const countSql = this.sql(expression, 'count');\n const num = countNode instanceof LiteralExpr && countNode.isNumber ? parseFloat(countNode.args.this ?? '0') : 0;\n\n const haystackSql = this.sql(thisNode);\n if (num === 0) {\n return this.func('SUBSTR', [\n haystackSql,\n '1',\n '0',\n ]);\n }\n\n const fromRight = num < 0;\n const direction = fromRight ? '-1' : '1';\n const occur = fromRight\n ? this.func('ABS', [\n countSql,\n ])\n : countSql;\n\n const delimiterSql = this.sql(delimiterExpr);\n\n const position = this.func('INSTR', [\n thisNode instanceof Expression && isCaseInsensitive(thisNode)\n ? this.func('LOWER', [\n haystackSql,\n ])\n : haystackSql,\n isCaseInsensitive(delimiterExpr)\n ? this.func('LOWER', [\n delimiterSql,\n ])\n : delimiterSql,\n direction,\n occur,\n ]);\n const nullablePos = this.func('NULLIF', [\n position,\n '0',\n ]);\n\n if (fromRight) {\n const start = this.func('NVL', [\n `${nullablePos} + ${this.func('LENGTH', [\n delimiterSql,\n ])}`,\n direction,\n ]);\n return this.func('SUBSTR', [\n haystackSql,\n start,\n ]);\n }\n\n const length = this.func('NVL', [\n `${nullablePos} - 1`,\n this.func('LENGTH', [\n haystackSql,\n ]),\n ]);\n return this.func('SUBSTR', [\n haystackSql,\n direction,\n length,\n ]);\n}\n\n/**\n * Exasol doesn't support a bare * alongside other select items.\n * Rewrite: SELECT *, <other> FROM <Table> Into: SELECT T.*, <other> FROM <Table> AS T\n */\nfunction qualifyUnscopedStar (expression: Expression): Expression {\n if (!(expression instanceof SelectExpr)) {\n return expression;\n }\n\n const selectExpressions = expression.args.expressions || [\n ];\n\n const isBareStar = (expr: Expression): boolean => expr instanceof StarExpr && !expr.args.this;\n\n let hasOtherExpression = false;\n let bareStarExpr: Expression | null = null;\n for (const expr of selectExpressions) {\n const hasBareStar = isBareStar(expr);\n if (hasBareStar && bareStarExpr === null) {\n bareStarExpr = expr;\n } else if (!hasBareStar) {\n hasOtherExpression = true;\n }\n if (bareStarExpr && hasOtherExpression) break;\n }\n\n if (!(bareStarExpr && hasOtherExpression)) {\n return expression;\n }\n\n const scope = buildScope(expression);\n if (!scope || !scope.selectedSources || Object.keys(scope.selectedSources).length === 0) {\n return expression;\n }\n\n const tableIdentifiers: IdentifierExpr[] = [\n ];\n for (const [\n sourceName,\n sourceEntries,\n ] of Object.entries(scope.selectedSources)) {\n const [\n sourceExpr,\n ] = sourceEntries as Expression[];\n const ident =\n sourceExpr instanceof TableExpr && sourceExpr.args.this instanceof IdentifierExpr\n ? (sourceExpr.args.this.copy() as IdentifierExpr)\n : toIdentifier(sourceName);\n tableIdentifiers.push(ident);\n }\n\n // bareStarExpr is guaranteed non-null here (early return above)\n const nonNullBareStar = bareStarExpr as Expression;\n const qualifiedStarColumns = tableIdentifiers.map(\n (ident) => new ColumnExpr({\n this: nonNullBareStar.copy(),\n table: ident,\n }),\n );\n\n const newSelectExpressions: Expression[] = [\n ];\n for (const selectExpr of selectExpressions) {\n if (isBareStar(selectExpr)) {\n newSelectExpressions.push(...qualifiedStarColumns);\n } else {\n newSelectExpressions.push(selectExpr);\n }\n }\n\n expression.setArgKey('expressions', newSelectExpressions);\n return expression;\n}\n\nfunction addDateSql (this: ExasolGenerator, expression: DateAddExpr | DateSubExpr | TsOrDsAddExpr): string {\n const interval = expression.args.expression instanceof IntervalExpr ? expression.args.expression : null;\n\n const unit = (\n interval ? (interval.text('unit') || 'DAY') : (expression.text('unit') || 'DAY')\n ).toUpperCase();\n\n if (!DATE_UNITS.has(unit)) {\n this.unsupported(`'${unit}' is not supported in Exasol.`);\n return this.functionFallbackSql(expression);\n }\n\n if (!expression.args.expression) return this.functionFallbackSql(expression);\n let offsetExpr: Expression = expression.args.expression;\n if (interval) {\n if (!interval.args.this) return this.functionFallbackSql(expression);\n offsetExpr = interval.args.this;\n }\n\n if (expression instanceof DateSubExpr) {\n offsetExpr = new NegExpr({\n this: offsetExpr,\n });\n }\n\n return this.func(`ADD_${unit}S`, [\n expression.args.this,\n offsetExpr,\n ]);\n}\n\nclass ExasolTokenizer extends Tokenizer {\n @cache\n static get IDENTIFIERS (): TokenPair[] {\n return [\n '\"',\n [\n '[',\n ']',\n ],\n ];\n }\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n const keywords = {\n ...Tokenizer.KEYWORDS,\n 'USER': TokenType.CURRENT_USER,\n 'ENDIF': TokenType.END,\n 'LONG VARCHAR': TokenType.TEXT,\n 'SEPARATOR': TokenType.SEPARATOR,\n 'SYSTIMESTAMP': TokenType.SYSTIMESTAMP,\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delete (keywords as any)['DIV'];\n return keywords;\n }\n}\n\nclass ExasolParser extends Parser {\n @cache\n static get ID_VAR_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.ID_VAR_TOKENS,\n TokenType.SESSION_USER,\n TokenType.CURRENT_CATALOG,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get NO_PAREN_FUNCTIONS () {\n const noParenFunctions = {\n [TokenType.SYSTIMESTAMP]: SystimestampExpr,\n ...Parser.NO_PAREN_FUNCTIONS,\n };\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return (() => {\n const functions: Record<string, (args: Expression[]) => Expression> = {\n ...Parser.FUNCTIONS,\n BIT_AND: binaryFromFunction(BitwiseAndExpr),\n BIT_OR: binaryFromFunction(BitwiseOrExpr),\n BIT_XOR: binaryFromFunction(BitwiseXorExpr),\n BIT_NOT: (args: Expression[]) => new BitwiseNotExpr({\n this: seqGet(args, 0),\n }),\n BIT_LSHIFT: binaryFromFunction(BitwiseLeftShiftExpr),\n BIT_RSHIFT: binaryFromFunction(BitwiseRightShiftExpr),\n DATE_TRUNC: (args: Expression[]) => new TimestampTruncExpr({\n this: seqGet(args, 1),\n unit: seqGet(args, 0),\n }),\n DIV: binaryFromFunction(IntDivExpr),\n EVERY: (args: Expression[]) => new AllExpr({\n this: seqGet(args, 0),\n }),\n EDIT_DISTANCE: (args: unknown[]) => LevenshteinExpr.fromArgList(args),\n HASH_SHA: (args: unknown[]) => ShaExpr.fromArgList(args),\n HASH_SHA1: (args: unknown[]) => ShaExpr.fromArgList(args),\n HASH_MD5: (args: unknown[]) => Md5Expr.fromArgList(args),\n HASHTYPE_MD5: (args: unknown[]) => Md5DigestExpr.fromArgList(args),\n REGEXP_SUBSTR: (args: unknown[]) => RegexpExtractExpr.fromArgList(args),\n REGEXP_REPLACE: (args: Expression[]) => new RegexpReplaceExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n replacement: seqGet(args, 2),\n position: seqGet(args, 3),\n occurrence: seqGet(args, 4),\n }),\n HASH_SHA256: (args: Expression[]) => new Sha2Expr({\n this: seqGet(args, 0),\n length: LiteralExpr.number(256),\n }),\n HASH_SHA512: (args: Expression[]) => new Sha2Expr({\n this: seqGet(args, 0),\n length: LiteralExpr.number(512),\n }),\n TRUNC: (args: Expression[]) => buildTrunc(args, {\n dialect: Dialects.EXASOL,\n }),\n TRUNCATE: (args: Expression[]) => buildTrunc(args, {\n dialect: Dialects.EXASOL,\n }),\n VAR_POP: (args: unknown[]) => VariancePopExpr.fromArgList(args),\n APPROXIMATE_COUNT_DISTINCT: (args: unknown[]) => ApproxDistinctExpr.fromArgList(args),\n TO_CHAR: (args: Expression[]) => buildTimeToStrOrToChar(args, {\n dialect: Dialects.EXASOL,\n }),\n TO_DATE: buildFormattedTime(TsOrDsToDateExpr, {\n dialect: Dialects.EXASOL,\n }),\n CONVERT_TZ: (args: Expression[]) => new ConvertTimezoneExpr({\n timestamp: args[0],\n sourceTz: seqGet(args, 1),\n targetTz: args[2],\n options: [\n seqGet(args, 3)!,\n ],\n }),\n NULLIFZERO: buildNullIfZero,\n ZEROIFNULL: buildZeroIfNull,\n WEEKOFYEAR: (args: unknown[]) => WeekOfYearExpr.fromArgList(args),\n };\n\n DATE_UNITS.forEach((unit) => {\n functions[`ADD_${unit}S`] = buildDateDelta(DateAddExpr, undefined, {\n defaultUnit: unit,\n });\n functions[`${unit}S_BETWEEN`] = buildDateDelta(DateDiffExpr, undefined, {\n defaultUnit: unit,\n });\n });\n\n return functions;\n })();\n }\n\n @cache\n static get CONSTRAINT_PARSERS (): Partial<Record<string, (this: Parser, ...args: unknown[]) => Expression | Expression[] | undefined>> {\n return {\n ...Parser.CONSTRAINT_PARSERS,\n COMMENT: function (this: Parser) {\n return this.expression(\n CommentColumnConstraintExpr,\n {\n this: (this as ExasolParser).match(TokenType.IS) && this.parseString(),\n },\n );\n },\n };\n }\n\n @cache\n static get FUNC_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.FUNC_TOKENS,\n TokenType.SYSTIMESTAMP,\n ]);\n }\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.FUNCTION_PARSERS,\n ...Object.fromEntries([\n 'GROUP_CONCAT',\n 'LISTAGG',\n ].map((k) => [\n k,\n function (this: Parser) {\n return this.parseGroupConcat();\n },\n ])),\n };\n }\n\n @cache\n static get ODBC_DATETIME_LITERALS () {\n return {\n d: DateExpr,\n ts: TimestampExpr,\n };\n }\n\n parseColumn (): Expression | undefined {\n const column = super.parseColumn();\n if (!(column instanceof ColumnExpr)) return column;\n\n const tableIdent = column.args.table;\n if (\n tableIdent instanceof IdentifierExpr\n && tableIdent.name.toUpperCase() === 'LOCAL'\n && !tableIdent.args.quoted\n ) {\n column.setArgKey('table', undefined);\n }\n return column;\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.TABLE_ALIAS_TOKENS,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n}\n\nclass ExasolGenerator 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 SUPPORTS_CONVERT_TIMEZONE = true;\n\n @cache\n static get STRING_TYPE_MAPPING (): Map<DataTypeExprKind, string> {\n return new Map<DataTypeExprKind, string>([\n [\n DataTypeExprKind.BLOB,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.LONGBLOB,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.LONGTEXT,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.MEDIUMBLOB,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.MEDIUMTEXT,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.TINYBLOB,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.TINYTEXT,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.TEXT,\n 'LONG VARCHAR',\n ],\n [\n DataTypeExprKind.VARBINARY,\n 'VARCHAR',\n ],\n ]);\n }\n\n @cache\n static get TYPE_MAPPING () {\n return new Map([\n ...Generator.TYPE_MAPPING,\n ...ExasolGenerator.STRING_TYPE_MAPPING,\n [\n DataTypeExprKind.TINYINT,\n 'SMALLINT',\n ],\n [\n DataTypeExprKind.MEDIUMINT,\n 'INT',\n ],\n [\n DataTypeExprKind.DECIMAL32,\n 'DECIMAL',\n ],\n [\n DataTypeExprKind.DECIMAL64,\n 'DECIMAL',\n ],\n [\n DataTypeExprKind.DECIMAL128,\n 'DECIMAL',\n ],\n [\n DataTypeExprKind.DECIMAL256,\n 'DECIMAL',\n ],\n [\n DataTypeExprKind.DATETIME,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPLTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'TIMESTAMP',\n ],\n ]);\n }\n\n dataTypeSql (expression: DataTypeExpr): string {\n if (expression.isType([\n DataTypeExprKind.TIMESTAMPLTZ,\n ])) {\n return 'TIMESTAMP WITH LOCAL TIME ZONE';\n }\n return super.dataTypeSql(expression);\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,\n [\n AllExpr,\n renameFunc('EVERY'),\n ],\n [\n BitwiseAndExpr,\n renameFunc('BIT_AND'),\n ],\n [\n BitwiseOrExpr,\n renameFunc('BIT_OR'),\n ],\n [\n BitwiseNotExpr,\n renameFunc('BIT_NOT'),\n ],\n [\n BitwiseLeftShiftExpr,\n renameFunc('BIT_LSHIFT'),\n ],\n [\n BitwiseRightShiftExpr,\n renameFunc('BIT_RSHIFT'),\n ],\n [\n BitwiseXorExpr,\n renameFunc('BIT_XOR'),\n ],\n [\n DateDiffExpr,\n function (this: Generator, e: DateDiffExpr) {\n return dateDiffSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n DateAddExpr,\n function (this: Generator, e: DateAddExpr) {\n return addDateSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n TsOrDsAddExpr,\n function (this: Generator, e: TsOrDsAddExpr) {\n return addDateSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n DateSubExpr,\n function (this: Generator, e: DateSubExpr) {\n return addDateSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n IntDivExpr,\n renameFunc('DIV'),\n ],\n [\n TsOrDsDiffExpr,\n function (this: Generator, e: TsOrDsDiffExpr) {\n return dateDiffSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n DateTruncExpr,\n function (this: Generator, e: DateTruncExpr) {\n return dateTruncSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n DayOfWeekExpr,\n function (this: Generator, e: DayOfWeekExpr) {\n return `CAST(TO_CHAR(${this.sql(e, 'this')}, 'D') AS INTEGER)`;\n },\n ],\n [\n DatetimeTruncExpr,\n function (this: Generator, e: DatetimeTruncExpr) {\n return timestampTruncSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n GroupConcatExpr,\n function (this: Generator, e: GroupConcatExpr) {\n return groupConcatSql.call(this, e, {\n funcName: 'LISTAGG',\n withinGroup: true,\n });\n },\n ],\n [\n LevenshteinExpr,\n function (this: Generator, e: LevenshteinExpr) {\n unsupportedArgs.call(this, e, 'insCost', 'delCost', 'subCost', 'maxDist');\n return renameFunc('EDIT_DISTANCE').call(this, e);\n },\n ],\n [\n ModExpr,\n renameFunc('MOD'),\n ],\n [\n ConvertTimezoneExpr,\n function (this: Generator, e: ConvertTimezoneExpr) {\n return this.func('CONVERT_TZ', [\n e.args.timestamp,\n e.args.sourceTz,\n e.args.targetTz,\n ...e.args.options ?? [\n ],\n ]);\n },\n ],\n [\n RegexpExtractExpr,\n function (this: Generator, e: Expression) {\n unsupportedArgs.call(this, e, 'parameters', 'group');\n return renameFunc('REGEXP_SUBSTR').call(this, e);\n },\n ],\n [\n RegexpReplaceExpr,\n function (this: Generator, e: Expression) {\n unsupportedArgs.call(this, e, 'modifiers');\n return renameFunc('REGEXP_REPLACE').call(this, e);\n },\n ],\n [\n VariancePopExpr,\n renameFunc('VAR_POP'),\n ],\n [\n ApproxDistinctExpr,\n function (this: Generator, e: Expression) {\n unsupportedArgs.call(this, e, 'accuracy');\n return renameFunc('APPROXIMATE_COUNT_DISTINCT').call(this, e);\n },\n ],\n [\n ToCharExpr,\n function (this: Generator, e: ToCharExpr) {\n return this.func('TO_CHAR', [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n TsOrDsToDateExpr,\n function (this: Generator, e: TsOrDsToDateExpr) {\n return this.func('TO_DATE', [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n TimeToStrExpr,\n function (this: Generator, e: TimeToStrExpr) {\n return this.func('TO_CHAR', [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n TimeStrToTimeExpr,\n function (this: Generator, e: TimeStrToTimeExpr) {\n return timeStrToTimeSql.call(this, e);\n },\n ],\n [\n TimestampTruncExpr,\n function (this: Generator, e: TimestampTruncExpr) {\n return timestampTruncSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n StrToTimeExpr,\n function (this: Generator, e: StrToTimeExpr) {\n return this.func('TO_DATE', [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n CurrentUserExpr,\n () => 'CURRENT_USER',\n ],\n [\n AtTimeZoneExpr,\n function (this: Generator, e: AtTimeZoneExpr) {\n return this.func('CONVERT_TZ', [\n e.args.this,\n '\\'UTC\\'',\n e.args.zone,\n ]);\n },\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr) {\n return strPositionSql.call(this, e, {\n funcName: 'INSTR',\n supportsPosition: true,\n supportsOccurrence: true,\n });\n },\n ],\n [\n ShaExpr,\n renameFunc('HASH_SHA'),\n ],\n [\n Sha2Expr,\n function (this: Generator, e: Sha2Expr) {\n return sha2Sql.call(this as ExasolGenerator, e);\n },\n ],\n [\n Md5Expr,\n renameFunc('HASH_MD5'),\n ],\n [\n Md5DigestExpr,\n renameFunc('HASHTYPE_MD5'),\n ],\n [\n CommentColumnConstraintExpr,\n function (this: Generator, e: CommentColumnConstraintExpr) {\n return `COMMENT IS ${this.sql(e, 'this')}`;\n },\n ],\n [\n SelectExpr,\n preprocess([\n qualifyUnscopedStar,\n addLocalPrefixForAliases,\n ]),\n ],\n [\n SubstringIndexExpr,\n function (this: Generator, e: SubstringIndexExpr) {\n return substringIndexSql.call(this as ExasolGenerator, e);\n },\n ],\n [\n WeekOfYearExpr,\n renameFunc('WEEK'),\n ],\n [\n DateExpr,\n renameFunc('TO_DATE'),\n ],\n [\n TimestampExpr,\n renameFunc('TO_TIMESTAMP'),\n ],\n [\n QuarterExpr,\n function (this: Generator, e: QuarterExpr) {\n return `CEIL(MONTH(TO_DATE(${this.sql(e, 'this')}))/3)`;\n },\n ],\n [\n LastDayExpr,\n noLastDaySql,\n ],\n ]);\n return transforms;\n }\n\n ifSql (expression: IfExpr): string {\n const thisSql = this.sql(expression, 'this');\n const trueSql = this.sql(expression, 'true');\n const falseSql = this.sql(expression, 'false');\n return `IF ${thisSql} THEN ${trueSql} ELSE ${falseSql} ENDIF`;\n }\n\n collateSql (expression: CollateExpr): string {\n return this.sql(expression.args.this);\n }\n\n rankSql (expression: RankExpr): string {\n if (expression.args.expressions && 0 < expression.args.expressions.length) {\n this.unsupported('Exasol does not support arguments in RANK');\n }\n return this.func('RANK', [\n ]);\n }\n\n convertTimezoneSql (expression: ConvertTimezoneExpr): string {\n const timestamp = expression.args.timestamp;\n const sourceTz = expression.args.sourceTz;\n const targetTz = expression.args.targetTz;\n const options = expression.args.options;\n return this.func('CONVERT_TZ', [\n timestamp,\n sourceTz,\n targetTz,\n ...options ?? [\n ],\n ]);\n }\n}\n\nexport class Exasol extends Dialect {\n static DIALECT_NAME = Dialects.EXASOL;\n\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.UPPERCASE;\n }\n\n @cache\n static get SUPPORTS_USER_DEFINED_TYPES () {\n return false;\n }\n\n @cache\n static get SUPPORTS_SEMI_ANTI_JOIN () {\n return false;\n }\n\n @cache\n static get SUPPORTS_COLUMN_JOIN_MARKS () {\n return true;\n }\n\n @cache\n static get NULL_ORDERING () {\n return NullOrdering.NULLS_ARE_LAST;\n }\n\n @cache\n static get CONCAT_COALESCE () {\n return true;\n }\n\n @cache\n static get TIME_MAPPING () {\n return {\n yyyy: '%Y',\n YYYY: '%Y',\n yy: '%y',\n YY: '%y',\n mm: '%m',\n MM: '%m',\n MONTH: '%B',\n MON: '%b',\n dd: '%d',\n DD: '%d',\n DAY: '%A',\n DY: '%a',\n H12: '%I',\n H24: '%H',\n HH: '%H',\n ID: '%u',\n vW: '%V',\n IW: '%V',\n vYYY: '%G',\n IYYY: '%G',\n MI: '%M',\n SS: '%S',\n uW: '%W',\n UW: '%U',\n Z: '%z',\n };\n }\n\n static Tokenizer = ExasolTokenizer;\n static Parser = ExasolParser;\n static Generator = ExasolGenerator;\n}\n\nDialect.register(Dialects.EXASOL, Exasol);\n"]}
|