@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dialects/exasol.ts"],"sourcesContent":["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"],"mappings":"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","names":["DATE_UNITS","sha2Sql","expression","funcName","dateDiffSql","unit","buildZeroIfNull","args","cond","IsExpr","seqGet","null_","IfExpr","LiteralExpr","buildNullIfZero","EqExpr","addLocalPrefixForAliases","SelectExpr","aliases","sel","AliasExpr","aliasNode","IdentifierExpr","tableIdent","TableExpr","toIdentifier","prefixLocal","node","visibleAliases","ColumnExpr","colName","key","arg","Expression","seenAliases","newSelects","inner","truncSql","kind","CastExpr","exprSql","dateTruncSql","timestampTruncSql","isCaseInsensitive","CollateExpr","substringIndexSql","thisNode","delimiterNode","delimiterExpr","countNode","countSql","num","haystackSql","fromRight","direction","occur","delimiterSql","position","nullablePos","start","length","qualifyUnscopedStar","selectExpressions","isBareStar","expr","StarExpr","hasOtherExpression","bareStarExpr","hasBareStar","scope","buildScope","tableIdentifiers","sourceName","sourceEntries","sourceExpr","ident","nonNullBareStar","qualifiedStarColumns","newSelectExpressions","selectExpr","addDateSql","interval","IntervalExpr","offsetExpr","DateSubExpr","NegExpr","_ORIGINAL_KEYWORDS_dec","_IDENTIFIERS_dec","_a","_init","ExasolTokenizer","Tokenizer","cache","keywords","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_TABLE_ALIAS_TOKENS_dec","_ODBC_DATETIME_LITERALS_dec","_FUNCTION_PARSERS_dec","_FUNC_TOKENS_dec","_CONSTRAINT_PARSERS_dec","_FUNCTIONS_dec","_NO_PAREN_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","ExasolParser","Parser","noParenFunctions","SystimestampExpr","functions","binaryFromFunction","BitwiseAndExpr","BitwiseOrExpr","BitwiseXorExpr","BitwiseNotExpr","BitwiseLeftShiftExpr","BitwiseRightShiftExpr","TimestampTruncExpr","IntDivExpr","AllExpr","LevenshteinExpr","ShaExpr","Md5Expr","Md5DigestExpr","RegexpExtractExpr","RegexpReplaceExpr","Sha2Expr","buildTrunc","VariancePopExpr","ApproxDistinctExpr","buildTimeToStrOrToChar","buildFormattedTime","TsOrDsToDateExpr","ConvertTimezoneExpr","WeekOfYearExpr","buildDateDelta","DateAddExpr","DateDiffExpr","CommentColumnConstraintExpr","k","DateExpr","TimestampExpr","column","_ORIGINAL_TRANSFORMS_dec","_TYPE_MAPPING_dec","_STRING_TYPE_MAPPING_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","_ExasolGenerator","Generator","modifiers","m","renameFunc","e","TsOrDsAddExpr","TsOrDsDiffExpr","DateTruncExpr","DayOfWeekExpr","DatetimeTruncExpr","GroupConcatExpr","groupConcatSql","unsupportedArgs","ModExpr","ToCharExpr","TimeToStrExpr","TimeStrToTimeExpr","timeStrToTimeSql","StrToTimeExpr","CurrentUserExpr","AtTimeZoneExpr","StrPositionExpr","strPositionSql","preprocess","SubstringIndexExpr","QuarterExpr","LastDayExpr","noLastDaySql","thisSql","trueSql","falseSql","timestamp","sourceTz","targetTz","options","ExasolGenerator","_TIME_MAPPING_dec","_CONCAT_COALESCE_dec","_NULL_ORDERING_dec","_SUPPORTS_COLUMN_JOIN_MARKS_dec","_SUPPORTS_SEMI_ANTI_JOIN_dec","_SUPPORTS_USER_DEFINED_TYPES_dec","_NORMALIZATION_STRATEGY_dec","Exasol","Dialect"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkC4CLTVOWcjs = require('../chunk-C4CLTVOW.cjs');var _chunk2Z3O2CFMcjs = require('../chunk-2Z3O2CFM.cjs');function _(n,T=6){let t=n.find(_chunk2Z3O2CFMcjs.$b),e=T;if(t&&t.args.this instanceof _chunk2Z3O2CFMcjs.$c&&t.args.this.isNumber){let s=Number(t.args.this.toString());e=Math.min(s,T)}return new (0, _chunk2Z3O2CFMcjs.ac)({this:n.args.this,expressions:[new (0, _chunk2Z3O2CFMcjs.$b)({this:_chunk2Z3O2CFMcjs.Ao.call(void 0, e)})]})}function st(n){if(n instanceof _chunk2Z3O2CFMcjs.Ja&&n.args.kind==="table"&&n.args.this instanceof _chunk2Z3O2CFMcjs.Vb){for(let T of n.args.this.args.expressions||[])if(T instanceof _chunk2Z3O2CFMcjs.Za){let t=T.args.kind;t instanceof _chunk2Z3O2CFMcjs.ac&&["varchar","char"].includes(t.args.this)&&(!t.args.expressions||t.args.expressions.length===0)&&t.setArgKey("expressions",[_chunk2Z3O2CFMcjs.Eo.call(void 0, "MAX")])}}return n}var k,$,P,f= exports.FabricTokenizer =class extends($=_chunkC4CLTVOWcjs.d.Tokenizer,k=[_chunk2Z3O2CFMcjs.r],$){static get ORIGINAL_KEYWORDS(){return{..._chunkC4CLTVOWcjs.d.Tokenizer.ORIGINAL_KEYWORDS,TIMESTAMP:"timestamp",UTINYINT:"utinyint"}}};P=_chunk2Z3O2CFMcjs.a.call(void 0, $),_chunk2Z3O2CFMcjs.d.call(void 0, P,10,"ORIGINAL_KEYWORDS",k,f),_chunk2Z3O2CFMcjs.b.call(void 0, P,f),_chunk2Z3O2CFMcjs.c.call(void 0, P,3,f);var W,J,Q,X,M,A= exports.FabricParser =class extends(X=_chunkC4CLTVOWcjs.d.Parser,Q=[_chunk2Z3O2CFMcjs.r],J=[_chunk2Z3O2CFMcjs.r],W=[_chunk2Z3O2CFMcjs.r],X){static get ID_VAR_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.ID_VAR_TOKENS,"sessionUser","currentCatalog","straightJoin"])}static get NO_PAREN_FUNCTIONS(){let t={..._chunkC4CLTVOWcjs.d.Parser.NO_PAREN_FUNCTIONS};return delete t.localtime,delete t.localtimestamp,t}parseCreate(){let t=super.parseCreate();if(t instanceof _chunk2Z3O2CFMcjs.Ja&&t.args.kind==="table"&&t.args.this instanceof _chunk2Z3O2CFMcjs.Vb){for(let e of t.args.this.args.expressions||[])if(e instanceof _chunk2Z3O2CFMcjs.Za){let s=e.args.kind;s instanceof _chunk2Z3O2CFMcjs.ac&&["varchar","char"].includes(s.args.this)&&(!s.args.expressions||s.args.expressions.length===0)&&s.setArgKey("expressions",[_chunk2Z3O2CFMcjs.Ao.call(void 0, 1)])}}return t}static get TABLE_ALIAS_TOKENS(){return new Set([..._chunkC4CLTVOWcjs.d.Parser.TABLE_ALIAS_TOKENS,"straightJoin"])}};M=_chunk2Z3O2CFMcjs.a.call(void 0, X),_chunk2Z3O2CFMcjs.d.call(void 0, M,10,"ID_VAR_TOKENS",Q,A),_chunk2Z3O2CFMcjs.d.call(void 0, M,10,"NO_PAREN_FUNCTIONS",J,A),_chunk2Z3O2CFMcjs.d.call(void 0, M,10,"TABLE_ALIAS_TOKENS",W,A),_chunk2Z3O2CFMcjs.b.call(void 0, M,A),_chunk2Z3O2CFMcjs.c.call(void 0, M,3,A);var v,z,j,F,d,r= exports.FabricGenerator =class extends(F=_chunkC4CLTVOWcjs.d.Generator,j=[_chunk2Z3O2CFMcjs.r],z=[_chunk2Z3O2CFMcjs.r],v=[_chunk2Z3O2CFMcjs.r],F){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 TYPE_MAPPING(){let t=new Map(_chunkC4CLTVOWcjs.d.Generator.TYPE_MAPPING);return t.set("datetime","DATETIME2"),t.set("decimal","DECIMAL"),t.set("image","VARBINARY"),t.set("int","INT"),t.set("json","VARCHAR"),t.set("money","DECIMAL"),t.set("nchar","CHAR"),t.set("nvarchar","VARCHAR"),t.set("rowversion","ROWVERSION"),t.set("smalldatetime","DATETIME2"),t.set("smallmoney","DECIMAL"),t.set("timestamp","DATETIME2"),t.set("timestampntz","DATETIME2"),t.set("timestamptz","DATETIME2"),t.set("tinyint","SMALLINT"),t.set("utinyint","SMALLINT"),t.set("uuid","UNIQUEIDENTIFIER"),t.set("xml","VARCHAR"),t}static get ORIGINAL_TRANSFORMS(){let t=new Map(_chunkC4CLTVOWcjs.d.Generator.ORIGINAL_TRANSFORMS);return t.set(_chunk2Z3O2CFMcjs.Ja,_chunk2Z3O2CFMcjs.Po.call(void 0, [st])),t}dataTypeSql(t){return t.isType(_chunk2Z3O2CFMcjs.ac.TEMPORAL_TYPES)&&t.args.this!=="date"&&(t=_(t)),super.dataTypeSql(t)}castSql(t,e={}){let{safePrefix:s}=e;if(t.isType("timestamptz")){if(!(t.findAncestor(_chunk2Z3O2CFMcjs.kc,_chunk2Z3O2CFMcjs.Wd)instanceof _chunk2Z3O2CFMcjs.kc))return super.castSql(t,{safePrefix:s});let E=_(t.args.to,6).find(_chunk2Z3O2CFMcjs.$b),l=E&&E.args.this instanceof _chunk2Z3O2CFMcjs.$c&&E.args.this.isNumber?Number(E.args.this.toString()):6;return`CAST(${this.sql(t,"this")} AS DATETIMEOFFSET(${l}))`}return super.castSql(t,{safePrefix:s})}atTimeZoneSql(t){let e=t.find(_chunk2Z3O2CFMcjs.Cg);if(e&&e.isType("timestamptz")){let s=e.args.to,c=_(s,6).find(_chunk2Z3O2CFMcjs.$b),E=c&&c.args.this instanceof _chunk2Z3O2CFMcjs.$c&&c.args.this.isNumber?Number(c.args.this.toString()):6;return`CAST(${super.atTimeZoneSql(t)} AS DATETIME2(${E}))`}return super.atTimeZoneSql(t)}unixToTimeSql(t){let e=t.args.scale,s=t.args.this;if(e!==void 0&&e!==_chunk2Z3O2CFMcjs.Zl.SECONDS)return this.unsupported(`UnixToTime scale ${e} is not supported by Fabric`),"";if(!s)return"";let O=s.mul(_chunk2Z3O2CFMcjs.$c.number("1e6")),c=_chunk2Z3O2CFMcjs.no.call(void 0, "round",O,_chunk2Z3O2CFMcjs.Ao.call(void 0, 0)),E=_chunk2Z3O2CFMcjs.mo.call(void 0, c,"bigint"),l=new (0, _chunk2Z3O2CFMcjs.ac)({this:"datetime2",expressions:[new (0, _chunk2Z3O2CFMcjs.$b)({this:_chunk2Z3O2CFMcjs.Ao.call(void 0, 6)})]}),U=_chunk2Z3O2CFMcjs.mo.call(void 0, "'1970-01-01'",l),et=new (0, _chunk2Z3O2CFMcjs.uh)({this:U,expression:E,unit:_chunk2Z3O2CFMcjs.Ao.call(void 0, "MICROSECONDS")});return this.sql(et)}};d=_chunk2Z3O2CFMcjs.a.call(void 0, F),_chunk2Z3O2CFMcjs.d.call(void 0, d,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",j,r),_chunk2Z3O2CFMcjs.d.call(void 0, d,10,"TYPE_MAPPING",z,r),_chunk2Z3O2CFMcjs.d.call(void 0, d,10,"ORIGINAL_TRANSFORMS",v,r),_chunk2Z3O2CFMcjs.b.call(void 0, d,r),_chunk2Z3O2CFMcjs.c.call(void 0, d,3,r),r.SUPPORTS_DECODE_CASE=!1,r.TRY_SUPPORTED=!1,r.SUPPORTS_UESCAPE=!1;var b,tt,L,a= exports.Fabric =class extends(tt=_chunkC4CLTVOWcjs.d,b=[_chunk2Z3O2CFMcjs.r],tt){static get NORMALIZATION_STRATEGY(){return"caseSensitive"}};L=_chunk2Z3O2CFMcjs.a.call(void 0, tt),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"NORMALIZATION_STRATEGY",b,a),_chunk2Z3O2CFMcjs.b.call(void 0, L,a),_chunk2Z3O2CFMcjs.c.call(void 0, L,3,a),a.DIALECT_NAME="fabric",a.Tokenizer=f,a.Parser=A,a.Generator=r;_chunk2Z3O2CFMcjs.op.register("fabric",a);exports.Fabric = a; exports.FabricGenerator = r; exports.FabricParser = A; exports.FabricTokenizer = f;
|
|
2
|
+
//# sourceMappingURL=fabric.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/dialects/fabric.cjs","../../src/dialects/fabric.ts"],"names":["capDataTypePrecision","expression","maxPrecision","precisionParam","DataTypeParamExpr","targetPrecision","LiteralExpr","currentPrecision","DataTypeExpr","literal","addDefaultPrecisionToVarchar","CreateExpr","SchemaExpr","columnDef","ColumnDefExpr","columnType","var_","_ORIGINAL_KEYWORDS_dec","_a","_init","FabricTokenizer","TSQL","cache","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_TABLE_ALIAS_TOKENS_dec","_NO_PAREN_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","FabricParser","Parser","noParenFunctions","create","_ORIGINAL_TRANSFORMS_dec","_TYPE_MAPPING_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","FabricGenerator","modifiers","m","mapping","preprocess","options","safePrefix","AtTimeZoneExpr","SelectExpr","precisionValue","timestamptzCast","CastExpr","dataType","precision","scale","timestamp","UnixToTimeExpr","microseconds","rounded","func","roundedMsAsBigint","cast","datetime2Type","epochStart","dateadd","DateAddExpr","_NORMALIZATION_STRATEGY_dec","Fabric","Dialect"],"mappings":"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","file":"/home/huydna/projects/sqlingo.js/dist/dialects/fabric.cjs","sourcesContent":[null,"import type {\n Generator,\n} from '../generator';\nimport {\n TokenType,\n} from '../tokens';\nimport {\n type Expression,\n DataTypeExpr,\n DataTypeParamExpr,\n LiteralExpr,\n CreateExpr,\n CreateExprKind,\n type CommandExpr,\n SchemaExpr,\n ColumnDefExpr,\n DataTypeExprKind,\n AtTimeZoneExpr,\n SelectExpr,\n CastExpr,\n UnixToTimeExpr,\n DateAddExpr,\n var_,\n cast,\n func,\n literal,\n} from '../expressions';\nimport {\n preprocess,\n} from '../transforms';\nimport {\n cache,\n} from '../port_internals';\nimport {\n Parser,\n} from '../parser';\nimport {\n TSQL,\n} from './tsql';\nimport {\n Dialect, NormalizationStrategy, Dialects,\n} from './dialect';\n\nfunction capDataTypePrecision (expression: DataTypeExpr, maxPrecision: number = 6): DataTypeExpr {\n const precisionParam = expression.find(DataTypeParamExpr);\n\n let targetPrecision = maxPrecision;\n if (precisionParam && precisionParam.args.this instanceof LiteralExpr && precisionParam.args.this.isNumber) {\n const currentPrecision = Number(precisionParam.args.this.toString());\n targetPrecision = Math.min(currentPrecision, maxPrecision);\n }\n\n return new DataTypeExpr({\n this: expression.args.this,\n expressions: [\n new DataTypeParamExpr({\n this: literal(targetPrecision),\n }),\n ],\n });\n}\n\nfunction addDefaultPrecisionToVarchar (expression: Expression): Expression {\n if (\n expression instanceof CreateExpr\n && expression.args.kind === CreateExprKind.TABLE\n && expression.args.this instanceof SchemaExpr\n ) {\n for (const columnDef of expression.args.this.args.expressions || [\n ]) {\n if (columnDef instanceof ColumnDefExpr) {\n const columnType = columnDef.args.kind;\n if (\n columnType instanceof DataTypeExpr\n && [\n DataTypeExprKind.VARCHAR,\n DataTypeExprKind.CHAR,\n ].includes(columnType.args.this as DataTypeExprKind)\n && (!columnType.args.expressions || columnType.args.expressions.length === 0)\n ) {\n columnType.setArgKey('expressions', [\n var_('MAX'),\n ]);\n }\n }\n }\n }\n\n return expression;\n}\n\nexport class FabricTokenizer extends TSQL.Tokenizer {\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n return {\n ...TSQL.Tokenizer.ORIGINAL_KEYWORDS,\n TIMESTAMP: TokenType.TIMESTAMP,\n UTINYINT: TokenType.UTINYINT,\n };\n }\n}\n\nexport class FabricParser extends TSQL.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 ...TSQL.Parser.NO_PAREN_FUNCTIONS,\n };\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n public parseCreate (): CreateExpr | CommandExpr {\n const create = super.parseCreate();\n\n if (create instanceof CreateExpr) {\n if (create.args.kind === CreateExprKind.TABLE && create.args.this instanceof SchemaExpr) {\n for (const columnDef of create.args.this.args.expressions || [\n ]) {\n if (columnDef instanceof ColumnDefExpr) {\n const columnType = columnDef.args.kind;\n if (\n columnType instanceof DataTypeExpr\n && [\n DataTypeExprKind.VARCHAR,\n DataTypeExprKind.CHAR,\n ].includes(columnType.args.this as DataTypeExprKind)\n && (!columnType.args.expressions || columnType.args.expressions.length === 0)\n ) {\n columnType.setArgKey('expressions', [\n literal(1),\n ]);\n }\n }\n }\n }\n }\n\n return create;\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...TSQL.Parser.TABLE_ALIAS_TOKENS,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n}\n\nexport class FabricGenerator extends TSQL.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 static get TYPE_MAPPING (): Map<DataTypeExprKind | string, string> {\n const mapping = new Map(TSQL.Generator.TYPE_MAPPING);\n mapping.set(DataTypeExprKind.DATETIME, 'DATETIME2');\n mapping.set(DataTypeExprKind.DECIMAL, 'DECIMAL');\n mapping.set(DataTypeExprKind.IMAGE, 'VARBINARY');\n mapping.set(DataTypeExprKind.INT, 'INT');\n mapping.set(DataTypeExprKind.JSON, 'VARCHAR');\n mapping.set(DataTypeExprKind.MONEY, 'DECIMAL');\n mapping.set(DataTypeExprKind.NCHAR, 'CHAR');\n mapping.set(DataTypeExprKind.NVARCHAR, 'VARCHAR');\n mapping.set(DataTypeExprKind.ROWVERSION, 'ROWVERSION');\n mapping.set(DataTypeExprKind.SMALLDATETIME, 'DATETIME2');\n mapping.set(DataTypeExprKind.SMALLMONEY, 'DECIMAL');\n mapping.set(DataTypeExprKind.TIMESTAMP, 'DATETIME2');\n mapping.set(DataTypeExprKind.TIMESTAMPNTZ, 'DATETIME2');\n mapping.set(DataTypeExprKind.TIMESTAMPTZ, 'DATETIME2');\n mapping.set(DataTypeExprKind.TINYINT, 'SMALLINT');\n mapping.set(DataTypeExprKind.UTINYINT, 'SMALLINT');\n mapping.set(DataTypeExprKind.UUID, 'UNIQUEIDENTIFIER');\n mapping.set(DataTypeExprKind.XML, 'VARCHAR');\n return mapping;\n };\n\n @cache\n static get ORIGINAL_TRANSFORMS (): Map<typeof Expression, (this: Generator, e: Expression) => string> {\n const m = new Map<typeof Expression, (this: Generator, e: Expression) => string>(TSQL.Generator.ORIGINAL_TRANSFORMS);\n m.set(CreateExpr, preprocess([\n addDefaultPrecisionToVarchar,\n ]));\n return m;\n };\n\n public dataTypeSql (expression: DataTypeExpr): string {\n if (\n expression.isType(DataTypeExpr.TEMPORAL_TYPES)\n && expression.args.this !== DataTypeExprKind.DATE\n ) {\n expression = capDataTypePrecision(expression);\n }\n\n return super.dataTypeSql(expression);\n }\n\n public castSql (expression: CastExpr, options: {safePrefix?: string} = {}): string {\n const {\n safePrefix,\n } = options;\n if (expression.isType(DataTypeExprKind.TIMESTAMPTZ)) {\n const atTimeZone = expression.findAncestor<AtTimeZoneExpr | SelectExpr>(AtTimeZoneExpr, SelectExpr);\n\n if (!(atTimeZone instanceof AtTimeZoneExpr)) {\n return super.castSql(expression, {\n safePrefix,\n });\n }\n\n const cappedDataType = capDataTypePrecision(expression.args.to as DataTypeExpr, 6);\n const precisionParam = cappedDataType.find(DataTypeParamExpr);\n const precisionValue = (precisionParam && precisionParam.args.this instanceof LiteralExpr && precisionParam.args.this.isNumber)\n ? Number(precisionParam.args.this.toString())\n : 6;\n\n const datetimeoffset = `CAST(${this.sql(expression, 'this')} AS DATETIMEOFFSET(${precisionValue}))`;\n\n return datetimeoffset;\n }\n\n return super.castSql(expression, {\n safePrefix,\n });\n }\n\n public atTimeZoneSql (expression: AtTimeZoneExpr): string {\n const timestamptzCast = expression.find(CastExpr);\n if (timestamptzCast && timestamptzCast.isType(DataTypeExprKind.TIMESTAMPTZ)) {\n const dataType = timestamptzCast.args.to as DataTypeExpr;\n const cappedDataType = capDataTypePrecision(dataType, 6);\n const precisionParam = cappedDataType.find(DataTypeParamExpr);\n const precision = (precisionParam && precisionParam.args.this instanceof LiteralExpr && precisionParam.args.this.isNumber)\n ? Number(precisionParam.args.this.toString())\n : 6;\n\n const atTimeZoneSqlResult = super.atTimeZoneSql(expression);\n\n return `CAST(${atTimeZoneSqlResult} AS DATETIME2(${precision}))`;\n }\n\n return super.atTimeZoneSql(expression);\n }\n\n public unixToTimeSql (expression: UnixToTimeExpr): string {\n const scale = expression.args.scale;\n const timestamp = expression.args.this;\n\n if (scale !== undefined && scale !== UnixToTimeExpr.SECONDS) {\n this.unsupported(`UnixToTime scale ${scale} is not supported by Fabric`);\n return '';\n }\n\n if (!timestamp) return '';\n const microseconds = timestamp.mul(LiteralExpr.number('1e6'));\n const rounded = func('round', microseconds, literal(0));\n const roundedMsAsBigint = cast(rounded, DataTypeExprKind.BIGINT);\n\n const datetime2Type = new DataTypeExpr({\n this: DataTypeExprKind.DATETIME2,\n expressions: [\n new DataTypeParamExpr({\n this: literal(6),\n }),\n ],\n });\n const epochStart = cast('\\'1970-01-01\\'', datetime2Type);\n\n const dateadd = new DateAddExpr({\n this: epochStart,\n expression: roundedMsAsBigint,\n unit: literal('MICROSECONDS'),\n });\n return this.sql(dateadd);\n }\n}\n\nexport class Fabric extends TSQL {\n static DIALECT_NAME = Dialects.FABRIC;\n\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.CASE_SENSITIVE;\n }\n\n static Tokenizer = FabricTokenizer;\n static Parser = FabricParser;\n static Generator = FabricGenerator;\n}\n\nDialect.register(Dialects.FABRIC, Fabric);\n"]}
|