@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/typing/mysql.ts","../src/dialects/mysql.ts"],"sourcesContent":["import type {\n Expression,\n} from '../expressions/expressions';\nimport {\n cache,\n} from '../port_internals';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n Atan2Expr,\n DegreesExpr,\n CurrentVersionExpr,\n EltExpr,\n DayOfMonthExpr,\n DayOfWeekExpr,\n DayOfYearExpr,\n MonthExpr,\n SecondExpr,\n WeekExpr,\n LocaltimeExpr,\n} from '../expressions/expressions';\nimport type {\n ExpressionMetadata,\n} from './dialect';\nimport {\n DialectTyping,\n} from './dialect';\n\nexport class MySQLTyping {\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n // Clone the base metadata to apply dialect-specific overrides\n const map: ExpressionMetadata = new Map(DialectTyping.EXPRESSION_METADATA);\n\n const extend = (types: (typeof Expression)[], data: Record<string, unknown>) => {\n for (const type of types) map.set(type, data);\n };\n\n extend([\n Atan2Expr,\n DegreesExpr,\n ], {\n returns: DataTypeExprKind.DOUBLE,\n });\n\n extend([\n CurrentVersionExpr,\n EltExpr,\n ], {\n returns: DataTypeExprKind.VARCHAR,\n });\n\n extend([\n DayOfMonthExpr,\n DayOfWeekExpr,\n DayOfYearExpr,\n MonthExpr,\n SecondExpr,\n WeekExpr,\n ], {\n returns: DataTypeExprKind.INT,\n });\n\n map.set(LocaltimeExpr, {\n returns: DataTypeExprKind.DATETIME,\n });\n\n return map;\n }\n}\n","import {\n cache,\n} from '../port_internals';\nimport {\n Generator, unsupportedArgs,\n} from '../generator';\nimport type {\n GeneratedAsRowColumnConstraintExpr, PrimaryKeyColumnConstraintExpr, PrimaryKeyExpr,\n ArrayExpr,\n ArrayContainsAllExpr,\n DPipeExpr,\n ExtractExpr,\n TimestampTruncExpr,\n AtTimeZoneExpr,\n IsAsciiExpr,\n IgnoreNullsExpr,\n AlterRenameExpr,\n AlterColumnExpr,\n FuncExpr,\n} from '../expressions';\nimport {\n AlterIndexExpr, ColumnExpr, PartitionExpr, PartitionListExpr, PartitionRangeExpr,\n BitwiseAndAggExpr,\n BitwiseCountExpr,\n BitwiseOrAggExpr,\n BitwiseXorAggExpr,\n ConvertTimezoneExpr,\n CurrentDateExpr,\n DateTruncExpr,\n EqExpr,\n JsonArrayContainsExpr,\n ShowExpr,\n SoundexExpr,\n TimeToStrExpr,\n TsOrDsToDateExpr,\n Expression,\n StrToDateExpr,\n StrToTimeExpr,\n UnixToTimeExpr,\n CastExpr,\n MaxExpr,\n MinExpr,\n StrPositionExpr,\n DateAddExpr,\n DateSubExpr,\n DataTypeExpr,\n DataTypeExprKind,\n LiteralExpr,\n TryCastExpr,\n TableSampleExpr,\n PivotExpr,\n ILikeExpr,\n DivExpr,\n func,\n AndExpr,\n XorExpr,\n OrExpr,\n DayExpr,\n DayOfMonthExpr,\n DayOfWeekExpr,\n DayOfYearExpr,\n NumberToStrExpr,\n LengthExpr,\n TimeFromPartsExpr,\n MonthExpr,\n CurrentSchemaExpr,\n TimestampDiffExpr,\n DateDiffExpr,\n VarExpr,\n CurrentVersionExpr,\n WeekExpr,\n WeekOfYearExpr,\n YearExpr,\n AnonymousExpr,\n SetItemExpr,\n LockPropertyExpr,\n PartitionByRangePropertyExpr,\n PartitionByListPropertyExpr,\n SetItemExprKind,\n ZeroFillColumnConstraintExpr,\n GeneratedAsIdentityColumnConstraintExpr,\n ComputedColumnConstraintExpr,\n ColumnPrefixExpr,\n IndexColumnConstraintExpr,\n IndexConstraintOptionExpr,\n ArrayAggExpr,\n ChrExpr,\n IntervalExpr,\n PropertiesLocation,\n TransientPropertyExpr,\n VolatilePropertyExpr,\n PartitionedByPropertyExpr,\n SelectExpr,\n GroupConcatExpr,\n LogicalOrExpr,\n LogicalAndExpr,\n NullSafeEqExpr,\n NullSafeNeqExpr,\n JsonExtractScalarExpr,\n StuffExpr,\n SessionUserExpr,\n TimestampAddExpr,\n TimestampSubExpr,\n TimeStrToUnixExpr,\n TimeStrToTimeExpr,\n TrimExpr,\n TruncExpr,\n TsOrDsAddExpr,\n TsOrDsDiffExpr,\n UnicodeExpr,\n UtcTimestampExpr,\n UtcTimeExpr,\n DateStrToDateExpr,\n} from '../expressions';\nimport {\n type ExpressionMetadata,\n} from '../typing/dialect';\nimport {\n MySQLTyping,\n} from '../typing/mysql';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n Tokenizer, TokenType,\n} from '../tokens';\nimport {\n seqGet,\n} from '../helper';\nimport {\n Parser,\n} from '../parser';\nimport {\n eliminateDistinctOn, eliminateFullOuterJoin, eliminateQualify, eliminateSemiAndAntiJoins, preprocess, unnestGenerateDateArrayUsingRecursiveCte,\n} from '../transforms';\nimport {\n isnullToIsNull,\n lengthOrCharLengthSql,\n maxOrGreatest,\n minOrLeast,\n noIlikeSql,\n noParenCurrentDateSql,\n noPivotSql,\n noTablesampleSql,\n noTrycastSql,\n strPositionSql,\n trimSql,\n arrowJsonExtractSql,\n dateAddIntervalSql,\n dateStrToDateSql,\n timeStrToTimeSql,\n unitToVar,\n renameFunc,\n NormalizationStrategy,\n Dialect,\n buildDateDeltaWithInterval,\n Dialects,\n buildFormattedTime,\n buildDateDelta,\n NullOrderingSupported,\n} from './dialect';\n\n/**\n * A higher-order function that returns a parser for MySQL SHOW statements.\n * @param args - Arguments to pass to the internal MySQL SHOW parser.\n * @param kwargs - Keyword arguments to pass to the internal MySQL SHOW parser.\n * @returns A function that takes a MySQL Parser and returns a ShowExpr.\n */\nexport function showParser (\n thisArg: string,\n options: {\n target?: boolean | string;\n full?: boolean;\n global?: boolean;\n } = {},\n): (this: Parser) => ShowExpr {\n return function (this: Parser): ShowExpr {\n return (this as MySQLParser).parseShowMysql(thisArg, options);\n };\n}\n\n/**\n * Transpiles the DATE_TRUNC expression into MySQL-compatible SQL.\n * Since MySQL lacks a native DATE_TRUNC, this uses string concatenation and conversion.\n * @param self - The MySQL Generator instance.\n * @param expression - The DateTruncExpr node to transpile.\n * @returns The generated SQL string.\n */\nexport function dateTruncSql (this: Generator, expression: DateTruncExpr): string {\n const expr = this.sql(expression, 'this');\n const unit = expression.text('unit').toUpperCase();\n\n let concat: string;\n let dateFormat: string;\n\n if (unit === 'WEEK') {\n concat = `CONCAT(YEAR(${expr}), ' ', WEEK(${expr}, 1), ' 1')`;\n dateFormat = '%Y %u %w';\n } else if (unit === 'MONTH') {\n concat = `CONCAT(YEAR(${expr}), ' ', MONTH(${expr}), ' 1')`;\n dateFormat = '%Y %c %e';\n } else if (unit === 'QUARTER') {\n concat = `CONCAT(YEAR(${expr}), ' ', QUARTER(${expr}) * 3 - 2, ' 1')`;\n dateFormat = '%Y %c %e';\n } else if (unit === 'YEAR') {\n concat = `CONCAT(YEAR(${expr}), ' 1 1')`;\n dateFormat = '%Y %c %e';\n } else {\n if (unit !== 'DAY') {\n this.unsupported(`Unexpected interval unit: ${unit}`);\n }\n return this.func('DATE', [\n expr,\n ]);\n }\n\n return this.func('STR_TO_DATE', [\n concat,\n `'${dateFormat}'`,\n ]);\n}\n\n/**\n * All specifiers for time parts (as opposed to date parts)\n * Reference: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format\n */\nexport const TIME_SPECIFIERS = new Set([\n 'f',\n 'H',\n 'h',\n 'I',\n 'i',\n 'k',\n 'l',\n 'p',\n 'r',\n 'S',\n 's',\n 'T',\n]);\n\n/**\n * Checks if a MySQL date format string contains any time-specific specifiers.\n */\nfunction hasTimeSpecifier (dateFormat: string): boolean {\n let i = 0;\n const length = dateFormat.length;\n\n while (i < length) {\n if (dateFormat[i] === '%') {\n i += 1;\n if (i < length && TIME_SPECIFIERS.has(dateFormat[i])) {\n return true;\n }\n }\n i += 1;\n }\n return false;\n}\n\n/**\n * Parser builder for STR_TO_DATE. Decides whether to return a StrToDateExpr or StrToTimeExpr\n * based on the presence of time specifiers in the format string.\n */\nexport function buildStrToDate (args: [Expression, ...(string | Expression | undefined)[]]): StrToDateExpr | StrToTimeExpr {\n const mysqlDateFormat = seqGet(args, 1);\n const dateFormat = MySQL.formatTime(mysqlDateFormat);\n const thisArg = seqGet(args, 0) as Expression;\n\n if (mysqlDateFormat && hasTimeSpecifier(mysqlDateFormat instanceof Expression ? mysqlDateFormat.name : mysqlDateFormat)) {\n return new StrToTimeExpr({\n this: thisArg,\n format: dateFormat || '',\n });\n }\n\n return new StrToDateExpr({\n this: thisArg,\n format: dateFormat,\n });\n}\n\n/**\n * Generator for STR_TO_DATE.\n */\nexport function strToDateSql (\n this: Generator,\n expression: StrToDateExpr | StrToTimeExpr | TsOrDsToDateExpr,\n): string {\n return this.func('STR_TO_DATE', [\n expression.args.this,\n this.formatTime(expression),\n ]);\n}\n\n/**\n * Generator for UNIX_TO_TIME. Handles optional scale for sub-second precision.\n */\nexport function unixToTimeSql (this: Generator, expression: UnixToTimeExpr): string {\n const scale = expression.args.scale;\n const timestamp = expression.args.this;\n\n if (scale === undefined || scale.toValue() === UnixToTimeExpr.SECONDS.toValue()) {\n return this.func('FROM_UNIXTIME', [\n timestamp,\n this.formatTime(expression),\n ]);\n }\n\n return this.func(\n 'FROM_UNIXTIME',\n [\n new DivExpr({\n this: timestamp,\n expression: func('POW', '10', scale.toString()),\n }),\n this.formatTime(expression),\n ],\n );\n}\n\n/**\n * Higher-order function to generate MySQL DATE_ADD or DATE_SUB calls.\n * @param kind - Either 'ADD' or 'SUB'.\n * @returns A function that generates the MySQL-specific DATE logic.\n */\nexport function dateAddSql (kind: string): (this: Generator, expression: DateAddExpr) => string {\n return function (this: Generator, expression: DateAddExpr): string {\n return this.func(\n `DATE_${kind}`,\n [\n expression.args.this,\n new IntervalExpr({\n this: expression.args.expression,\n unit: unitToVar(expression),\n }),\n ],\n );\n };\n}\n\n/**\n * Handles converting a Timestamp or DateString to a Date in MySQL.\n * @param self - The MySQL Generator.\n * @param expression - The TsOrDsToDateExpr node.\n */\nexport function tsOrDsToDateSql (this: Generator, expression: TsOrDsToDateExpr): string {\n const timeFormat = expression.args.format;\n return timeFormat\n ? strToDateSql.call(this, expression)\n : this.func('DATE', [\n expression.args.this,\n ]);\n}\n\n/**\n * Optimization that removes redundant TsOrDsToDate wrappers when the parent\n * function can handle raw types.\n */\nexport function removeTsOrDsToDate<T extends FuncExpr> (\n toSql?: (this: Generator, expression: T) => string,\n args: string[] = [\n 'this',\n ],\n): (this: Generator, expression: T) => string {\n return function (this: Generator, expression: T): string {\n for (const argKey of args) {\n const arg = expression.getArgKey(argKey);\n if (arg instanceof TsOrDsToDateExpr && !arg.args.format) {\n expression.setArgKey(argKey, arg.args.this);\n }\n }\n\n return toSql ? toSql.call(this, expression) : this.functionFallbackSql(expression);\n };\n}\n\nclass MySQLTokenizer extends Tokenizer {\n static QUOTES: TokenPair[] = [\n '\\'',\n '\"',\n ];\n static COMMENTS: TokenPair[] = [\n '--',\n '#',\n [\n '/*',\n '*/',\n ],\n ];\n\n static IDENTIFIERS: TokenPair[] = [\n '`',\n ];\n static STRING_ESCAPES: string[] = [\n '\\'',\n '\"',\n '\\\\',\n ];\n\n static BIT_STRINGS: TokenPair[] = [\n [\n 'b\\'',\n '\\'',\n ],\n [\n 'B\\'',\n '\\'',\n ],\n [\n '0b',\n '',\n ],\n ];\n\n static HEX_STRINGS: TokenPair[] = [\n [\n 'x\\'',\n '\\'',\n ],\n [\n 'X\\'',\n '\\'',\n ],\n [\n '0x',\n '',\n ],\n ];\n\n /**\n * Special characters that are recognized after an escape character (\\) in MySQL.\n * Reference: https://dev.mysql.com/doc/refman/8.4/en/string-literals.html\n */\n public ESCAPE_FOLLOW_CHARS = [\n '0',\n 'b',\n 'n',\n 'r',\n 't',\n 'Z',\n '%',\n '_',\n ];\n\n public NESTED_COMMENTS = false;\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n return {\n ...Tokenizer.KEYWORDS,\n 'BLOB': TokenType.BLOB,\n 'CHARSET': TokenType.CHARACTER_SET,\n 'DISTINCTROW': TokenType.DISTINCT,\n 'EXPLAIN': TokenType.DESCRIBE,\n 'FORCE': TokenType.FORCE,\n 'IGNORE': TokenType.IGNORE,\n 'KEY': TokenType.KEY,\n 'LOCK TABLES': TokenType.COMMAND,\n 'LONGBLOB': TokenType.LONGBLOB,\n 'LONGTEXT': TokenType.LONGTEXT,\n 'MEDIUMBLOB': TokenType.MEDIUMBLOB,\n 'MEDIUMINT': TokenType.MEDIUMINT,\n 'MEDIUMTEXT': TokenType.MEDIUMTEXT,\n 'MEMBER OF': TokenType.MEMBER_OF,\n 'MOD': TokenType.MOD,\n 'SEPARATOR': TokenType.SEPARATOR,\n 'SERIAL': TokenType.SERIAL,\n 'SIGNED': TokenType.BIGINT,\n 'SIGNED INTEGER': TokenType.BIGINT,\n 'SOUNDS LIKE': TokenType.SOUNDS_LIKE,\n 'START': TokenType.BEGIN,\n 'TIMESTAMP': TokenType.TIMESTAMPTZ,\n 'TINYBLOB': TokenType.TINYBLOB,\n 'TINYTEXT': TokenType.TINYTEXT,\n 'UNLOCK TABLES': TokenType.COMMAND,\n 'UNSIGNED': TokenType.UBIGINT,\n 'UNSIGNED INTEGER': TokenType.UBIGINT,\n 'YEAR': TokenType.YEAR,\n '_ARMSCII8': TokenType.INTRODUCER,\n '_ASCII': TokenType.INTRODUCER,\n '_BIG5': TokenType.INTRODUCER,\n '_BINARY': TokenType.INTRODUCER,\n '_CP1250': TokenType.INTRODUCER,\n '_CP1251': TokenType.INTRODUCER,\n '_CP1256': TokenType.INTRODUCER,\n '_CP1257': TokenType.INTRODUCER,\n '_CP850': TokenType.INTRODUCER,\n '_CP852': TokenType.INTRODUCER,\n '_CP866': TokenType.INTRODUCER,\n '_CP932': TokenType.INTRODUCER,\n '_DEC8': TokenType.INTRODUCER,\n '_EUCJPMS': TokenType.INTRODUCER,\n '_EUCKR': TokenType.INTRODUCER,\n '_GB18030': TokenType.INTRODUCER,\n '_GB2312': TokenType.INTRODUCER,\n '_GBK': TokenType.INTRODUCER,\n '_GEOSTD8': TokenType.INTRODUCER,\n '_GREEK': TokenType.INTRODUCER,\n '_HEBREW': TokenType.INTRODUCER,\n '_HP8': TokenType.INTRODUCER,\n '_KEYBCS2': TokenType.INTRODUCER,\n '_KOI8R': TokenType.INTRODUCER,\n '_KOI8U': TokenType.INTRODUCER,\n '_LATIN1': TokenType.INTRODUCER,\n '_LATIN2': TokenType.INTRODUCER,\n '_LATIN5': TokenType.INTRODUCER,\n '_LATIN7': TokenType.INTRODUCER,\n '_MACCE': TokenType.INTRODUCER,\n '_MACROMAN': TokenType.INTRODUCER,\n '_SJIS': TokenType.INTRODUCER,\n '_SWE7': TokenType.INTRODUCER,\n '_TIS620': TokenType.INTRODUCER,\n '_UCS2': TokenType.INTRODUCER,\n '_UJIS': TokenType.INTRODUCER,\n '_UTF8': TokenType.INTRODUCER,\n '_UTF16': TokenType.INTRODUCER,\n '_UTF16LE': TokenType.INTRODUCER,\n '_UTF32': TokenType.INTRODUCER,\n '_UTF8MB3': TokenType.INTRODUCER,\n '_UTF8MB4': TokenType.INTRODUCER,\n '@@': TokenType.SESSION_PARAMETER,\n };\n }\n\n @cache\n static get COMMANDS () {\n const commands = new Set([\n ...Tokenizer.COMMANDS,\n TokenType.REPLACE,\n ]);\n commands.delete(TokenType.SHOW);\n return commands;\n };\n};\n\nclass MySQLParser extends Parser {\n // port from _Dialect metaclass logic\n @cache\n static get ID_VAR_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.ID_VAR_TOKENS,\n TokenType.CURRENT_CATALOG,\n ]);\n }\n\n @cache\n static get FUNC_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.FUNC_TOKENS,\n TokenType.DATABASE,\n TokenType.MOD,\n TokenType.SCHEMA,\n TokenType.VALUES,\n TokenType.CHARACTER_SET,\n ]);\n }\n\n @cache\n static get CONJUNCTION (): Partial<Record<TokenType, typeof Expression>> {\n return {\n ...Parser.CONJUNCTION,\n [TokenType.DAMP]: AndExpr,\n [TokenType.XOR]: XorExpr,\n };\n }\n\n @cache\n static get DISJUNCTION (): Partial<Record<TokenType, typeof Expression>> {\n return {\n ...Parser.DISJUNCTION,\n [TokenType.DPIPE]: OrExpr,\n };\n }\n\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return (() => {\n const tokens = new Set(Parser.TABLE_ALIAS_TOKENS);\n for (const hint of Parser.TABLE_INDEX_HINT_TOKENS) {\n tokens.delete(hint);\n }\n return tokens;\n })();\n }\n\n @cache\n static get RANGE_PARSERS (): Partial<Record<TokenType, (this: Parser, this_: Expression) => Expression | undefined>> {\n return {\n ...Parser.RANGE_PARSERS,\n [TokenType.SOUNDS_LIKE]: function (this: Parser, thisArg: Expression): EqExpr {\n return this.expression(EqExpr, {\n this: this.expression(SoundexExpr, {\n this: thisArg,\n }),\n expression: this.expression(SoundexExpr, {\n this: this.parseTerm(),\n }),\n });\n },\n [TokenType.MEMBER_OF]: function (this: Parser, thisArg: Expression): JsonArrayContainsExpr {\n return this.expression(JsonArrayContainsExpr, {\n this: thisArg,\n expression: this.parseWrapped(this.parseExpression.bind(this)),\n });\n },\n };\n }\n\n @cache\n static get FUNCTIONS (): typeof Parser.FUNCTIONS {\n return {\n ...Parser.FUNCTIONS,\n BIT_AND: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BIT_OR: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BIT_XOR: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BIT_COUNT: (args: unknown[]) => BitwiseCountExpr.fromArgList(args),\n CONVERT_TZ: (args: Expression[]): ConvertTimezoneExpr =>\n new ConvertTimezoneExpr({\n sourceTz: seqGet(args, 1),\n targetTz: seqGet(args, 2),\n timestamp: seqGet(args, 0),\n }),\n CURDATE: (args: unknown[]) => CurrentDateExpr.fromArgList(args),\n DATE: (args: Expression[]): TsOrDsToDateExpr =>\n new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n DATE_ADD: (args: Expression[]) => buildDateDeltaWithInterval(DateAddExpr)(args),\n DATE_FORMAT: buildFormattedTime(TimeToStrExpr, {\n dialect: Dialects.MYSQL,\n }),\n DATE_SUB: (args: Expression[]) => buildDateDeltaWithInterval(DateSubExpr)(args),\n DAY: (args: Expression[]): DayExpr =>\n new DayExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n DAYOFMONTH: (args: Expression[]): DayOfMonthExpr =>\n new DayOfMonthExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n DAYOFWEEK: (args: Expression[]): DayOfWeekExpr =>\n new DayOfWeekExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n DAYOFYEAR: (args: Expression[]): DayOfYearExpr =>\n new DayOfYearExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n FORMAT: (args: unknown[]) => NumberToStrExpr.fromArgList(args),\n FROM_UNIXTIME: buildFormattedTime(UnixToTimeExpr, {\n dialect: Dialects.MYSQL,\n }),\n ISNULL: isnullToIsNull,\n LENGTH: (args: Expression[]): LengthExpr =>\n new LengthExpr({\n this: seqGet(args, 0),\n binary: true,\n }),\n MAKETIME: (args: unknown[]) => TimeFromPartsExpr.fromArgList(args),\n MONTH: (args: Expression[]): MonthExpr =>\n new MonthExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n MONTHNAME: (args: Expression[]): TimeToStrExpr =>\n new TimeToStrExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n format: new LiteralExpr({\n this: '%B',\n isString: true,\n }),\n }),\n SCHEMA: (args: unknown[]) => CurrentSchemaExpr.fromArgList(args),\n DATABASE: (args: unknown[]) => CurrentSchemaExpr.fromArgList(args),\n STR_TO_DATE: buildStrToDate as (args: Expression[]) => Expression,\n TIMESTAMPDIFF: buildDateDelta(TimestampDiffExpr),\n TO_DAYS: (args: Expression[]) => {\n const diff = new DateDiffExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n expression: new TsOrDsToDateExpr({\n this: new LiteralExpr({\n this: '0000-01-01',\n isString: true,\n }),\n }),\n unit: new VarExpr({\n this: 'DAY',\n }),\n });\n return diff.add(1); // Standardized parenthesized expression with offset\n },\n VERSION: (args: unknown[]) => CurrentVersionExpr.fromArgList(args),\n WEEK: (args: Expression[]): WeekExpr =>\n new WeekExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n mode: seqGet(args, 1),\n }),\n WEEKOFYEAR: (args: Expression[]): WeekOfYearExpr =>\n new WeekOfYearExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n YEAR: (args: Expression[]): YearExpr =>\n new YearExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n };\n }\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.FUNCTION_PARSERS,\n GROUP_CONCAT: function (this: Parser) {\n return this.parseGroupConcat();\n },\n VALUES: function (this: Parser): AnonymousExpr {\n return this.expression(AnonymousExpr, {\n this: 'VALUES',\n expressions: [\n this.parseIdVar(),\n ],\n });\n },\n JSON_VALUE: function (this: Parser): Expression {\n return this.parseJsonValue();\n },\n SUBSTR: function (this: Parser): Expression {\n return this.parseSubstring();\n },\n };\n }\n\n @cache\n static get STATEMENT_PARSERS (): Partial<Record<TokenType, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.STATEMENT_PARSERS,\n [TokenType.SHOW]: function (this: Parser) {\n return this.parseShow();\n },\n };\n }\n\n static SHOW_PARSERS: typeof Parser.SHOW_PARSERS = ({\n 'BINARY LOGS': showParser('BINARY LOGS'),\n 'MASTER LOGS': showParser('BINARY LOGS'),\n 'BINLOG EVENTS': showParser('BINLOG EVENTS'),\n 'CHARACTER SET': showParser('CHARACTER SET'),\n 'CHARSET': showParser('CHARACTER SET'),\n 'COLLATION': showParser('COLLATION'),\n 'FULL COLUMNS': showParser('COLUMNS', {\n target: 'FROM',\n full: true,\n }),\n 'COLUMNS': showParser('COLUMNS', {\n target: 'FROM',\n }),\n 'CREATE DATABASE': showParser('CREATE DATABASE', {\n target: true,\n }),\n 'CREATE EVENT': showParser('CREATE EVENT', {\n target: true,\n }),\n 'CREATE FUNCTION': showParser('CREATE FUNCTION', {\n target: true,\n }),\n 'CREATE PROCEDURE': showParser('CREATE PROCEDURE', {\n target: true,\n }),\n 'CREATE TABLE': showParser('CREATE TABLE', {\n target: true,\n }),\n 'CREATE TRIGGER': showParser('CREATE TRIGGER', {\n target: true,\n }),\n 'CREATE VIEW': showParser('CREATE VIEW', {\n target: true,\n }),\n 'DATABASES': showParser('DATABASES'),\n 'SCHEMAS': showParser('DATABASES'),\n 'ENGINE': showParser('ENGINE', {\n target: true,\n }),\n 'STORAGE ENGINES': showParser('ENGINES'),\n 'ENGINES': showParser('ENGINES'),\n 'ERRORS': showParser('ERRORS'),\n 'EVENTS': showParser('EVENTS'),\n 'FUNCTION CODE': showParser('FUNCTION CODE', {\n target: true,\n }),\n 'FUNCTION STATUS': showParser('FUNCTION STATUS'),\n 'GRANTS': showParser('GRANTS', {\n target: 'FOR',\n }),\n 'INDEX': showParser('INDEX', {\n target: 'FROM',\n }),\n 'MASTER STATUS': showParser('MASTER STATUS'),\n 'OPEN TABLES': showParser('OPEN TABLES'),\n 'PLUGINS': showParser('PLUGINS'),\n 'PROCEDURE CODE': showParser('PROCEDURE CODE', {\n target: true,\n }),\n 'PROCEDURE STATUS': showParser('PROCEDURE STATUS'),\n 'PRIVILEGES': showParser('PRIVILEGES'),\n 'FULL PROCESSLIST': showParser('PROCESSLIST', {\n full: true,\n }),\n 'PROCESSLIST': showParser('PROCESSLIST'),\n 'PROFILE': showParser('PROFILE'),\n 'PROFILES': showParser('PROFILES'),\n 'RELAYLOG EVENTS': showParser('RELAYLOG EVENTS'),\n 'REPLICAS': showParser('REPLICAS'),\n 'SLAVE HOSTS': showParser('REPLICAS'),\n 'REPLICA STATUS': showParser('REPLICA STATUS'),\n 'SLAVE STATUS': showParser('REPLICA STATUS'),\n 'GLOBAL STATUS': showParser('STATUS', {\n global: true,\n }),\n 'SESSION STATUS': showParser('STATUS'),\n 'STATUS': showParser('STATUS'),\n 'TABLE STATUS': showParser('TABLE STATUS'),\n 'FULL TABLES': showParser('TABLES', {\n full: true,\n }),\n 'TABLES': showParser('TABLES'),\n 'TRIGGERS': showParser('TRIGGERS'),\n 'GLOBAL VARIABLES': showParser('VARIABLES', {\n global: true,\n }),\n 'SESSION VARIABLES': showParser('VARIABLES'),\n 'VARIABLES': showParser('VARIABLES'),\n 'WARNINGS': showParser('WARNINGS'),\n });\n\n @cache\n static get PROPERTY_PARSERS (): Record<string, (this: Parser, ...args: unknown[]) => Expression | Expression[] | undefined> {\n return {\n ...Parser.PROPERTY_PARSERS,\n 'LOCK': function (this: Parser) {\n return this.parsePropertyAssignment(LockPropertyExpr);\n },\n 'PARTITION BY': function (this: Parser) {\n return (this as MySQLParser).parsePartitionProperty();\n },\n };\n }\n\n @cache\n static get SET_PARSERS (): Record<string, (this: Parser) => Expression | undefined> {\n return {\n ...Parser.SET_PARSERS,\n 'PERSIST': function (this: Parser) {\n return (this as MySQLParser).parseSetItemAssignment({\n kind: SetItemExprKind.PERSIST,\n });\n },\n 'PERSIST_ONLY': function (this: Parser) {\n return this.parseSetItemAssignment({\n kind: 'PERSIST_ONLY',\n });\n },\n 'CHARACTER SET': function (this: Parser): Expression {\n return (this as MySQLParser).parseSetItemCharset('CHARACTER SET');\n },\n 'CHARSET': function (this: Parser): Expression {\n return (this as MySQLParser).parseSetItemCharset('CHARACTER SET');\n },\n 'NAMES': function (this: Parser) {\n return (this as MySQLParser).parseSetItemNames();\n },\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 FULLTEXT: function (this: Parser) {\n return (this as MySQLParser).parseIndexConstraint('FULLTEXT');\n },\n INDEX: function (this: Parser) {\n return (this as MySQLParser).parseIndexConstraint();\n },\n KEY: function (this: Parser) {\n return (this as MySQLParser).parseIndexConstraint();\n },\n SPATIAL: function (this: Parser) {\n return (this as MySQLParser).parseIndexConstraint('SPATIAL');\n },\n ZEROFILL: function (this: Parser) {\n return this.expression(ZeroFillColumnConstraintExpr);\n },\n };\n }\n\n @cache\n static get ALTER_PARSERS (): Partial<Record<string, (this: Parser) => Expression | Expression[] | undefined>> {\n return {\n ...Parser.ALTER_PARSERS,\n MODIFY: function (this: Parser) {\n return this.parseAlterTableAlter();\n },\n };\n }\n\n @cache\n static get ALTER_ALTER_PARSERS (): Partial<Record<string, (this: Parser) => Expression>> {\n return {\n ...Parser.ALTER_ALTER_PARSERS,\n INDEX: function (this: Parser) {\n return (this as MySQLParser).parseAlterTableAlterIndex();\n },\n };\n }\n\n @cache\n static get SCHEMA_UNNAMED_CONSTRAINTS (): Set<string> {\n return new Set([\n ...Parser.SCHEMA_UNNAMED_CONSTRAINTS,\n 'FULLTEXT',\n 'INDEX',\n 'KEY',\n 'SPATIAL',\n ]);\n }\n\n @cache\n static get PROFILE_TYPES () {\n return {\n ALL: [\n ],\n CPU: [\n ],\n IPC: [\n ],\n MEMORY: [\n ],\n SOURCE: [\n ],\n SWAPS: [\n ],\n BLOCK: [\n 'IO',\n ],\n CONTEXT: [\n 'SWITCHES',\n ],\n PAGE: [\n 'FAULTS',\n ],\n };\n }\n\n @cache\n static get TYPE_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.TYPE_TOKENS,\n TokenType.SET,\n ]);\n }\n\n @cache\n static get ENUM_TYPE_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.ENUM_TYPE_TOKENS,\n TokenType.SET,\n ]);\n }\n\n /**\n * Modifiers that can appear in a MySQL SELECT statement.\n */\n @cache\n static get OPERATION_MODIFIERS (): Set<string> {\n return new Set([\n 'HIGH_PRIORITY',\n 'STRAIGHT_JOIN',\n 'SQL_SMALL_RESULT',\n 'SQL_BIG_RESULT',\n 'SQL_BUFFER_RESULT',\n 'SQL_NO_CACHE',\n 'SQL_CALC_FOUND_ROWS',\n ]);\n }\n\n static LOG_DEFAULTS_TO_LN = true;\n static STRING_ALIASES = true;\n static VALUES_FOLLOWED_BY_PAREN = false;\n static SUPPORTS_PARTITION_SELECTION = true;\n\n /**\n * Handles MySQL's GENERATED ALWAYS AS logic, including VIRTUAL vs STORED persistence.\n */\n public parseGeneratedAsIdentity ():\n | GeneratedAsIdentityColumnConstraintExpr\n | ComputedColumnConstraintExpr\n | GeneratedAsRowColumnConstraintExpr {\n let thisExpr = super.parseGeneratedAsIdentity();\n\n if (this.matchTexts([\n 'STORED',\n 'VIRTUAL',\n ])) {\n const persisted = this.prev?.text.toUpperCase() === 'STORED';\n\n if (thisExpr instanceof ComputedColumnConstraintExpr) {\n thisExpr.setArgKey('persisted', persisted);\n } else if (thisExpr instanceof GeneratedAsIdentityColumnConstraintExpr) {\n // Pivot to a ComputedColumnConstraint if persistence is explicitly specified\n thisExpr = this.expression(ComputedColumnConstraintExpr, {\n this: thisExpr.args.expression,\n persisted: persisted,\n });\n }\n }\n\n return thisExpr;\n }\n\n /**\n * Parses MySQL-specific primary key parts which allow column prefixes (e.g. KEY(col(10))).\n */\n public parsePrimaryKeyPart (): Expression | undefined {\n const thisExpr = this.parseIdVar();\n if (!this.match(TokenType.L_PAREN)) {\n return thisExpr;\n }\n\n const expression = this.parseNumber();\n this.matchRParen();\n\n return this.expression(ColumnPrefixExpr, {\n this: thisExpr,\n expression: expression,\n });\n }\n\n /**\n * Parses MySQL index constraints, including support for KEY_BLOCK_SIZE,\n * custom parsers, and visibility toggles.\n */\n protected parseIndexConstraint (kind?: string): IndexColumnConstraintExpr {\n if (kind) {\n this.matchTexts([\n 'INDEX',\n 'KEY',\n ]);\n }\n\n const thisExpr = this.parseIdVar({\n anyToken: false,\n });\n const indexType = this.match(TokenType.USING) && this.advanceAny() && this.prev?.text;\n const expressions = this.parseWrappedCsv(this.parseOrdered.bind(this));\n\n const options: IndexConstraintOptionExpr[] = [\n ];\n while (true) {\n let opt: IndexConstraintOptionExpr | undefined = undefined;\n\n if (this.matchTextSeq([\n 'KEY_BLOCK_SIZE',\n ])) {\n this.match(TokenType.EQ);\n opt = new IndexConstraintOptionExpr({\n keyBlockSize: this.parseNumber(),\n });\n } else if (this.match(TokenType.USING)) {\n opt = new IndexConstraintOptionExpr({\n using: this.advanceAny() && this.prev?.text,\n });\n } else if (this.matchTextSeq([\n 'WITH',\n 'PARSER',\n ])) {\n opt = new IndexConstraintOptionExpr({\n parser: this.parseVar({\n anyToken: true,\n }),\n });\n } else if (this.match(TokenType.COMMENT)) {\n opt = new IndexConstraintOptionExpr({\n comment: this.parseString(),\n });\n } else if (this.matchTextSeq([\n 'VISIBLE',\n ])) {\n opt = new IndexConstraintOptionExpr({\n visible: true,\n });\n } else if (this.matchTextSeq([\n 'INVISIBLE',\n ])) {\n opt = new IndexConstraintOptionExpr({\n visible: false,\n });\n } else if (this.matchTextSeq([\n 'ENGINE_ATTRIBUTE',\n ])) {\n this.match(TokenType.EQ);\n opt = new IndexConstraintOptionExpr({\n engineAttr: this.parseString(),\n });\n } else if (this.matchTextSeq([\n 'SECONDARY_ENGINE_ATTRIBUTE',\n ])) {\n this.match(TokenType.EQ);\n opt = new IndexConstraintOptionExpr({\n secondaryEngineAttr: this.parseString(),\n });\n }\n\n if (!opt) break;\n options.push(opt);\n }\n\n return this.expression(IndexColumnConstraintExpr, {\n this: thisExpr,\n expressions: expressions,\n kind: kind,\n indexType: indexType,\n options: options,\n });\n }\n\n /**\n * Core internal parser for the varied MySQL SHOW statement variants.\n */\n public parseShowMysql (\n thisArg: string,\n options: {\n target?: boolean | string;\n full?: boolean;\n global?: boolean;\n } = {},\n ): ShowExpr {\n const {\n target = false,\n full,\n global,\n } = options;\n const json = this.matchTextSeq([\n 'JSON',\n ]);\n let targetId: Expression | undefined = undefined;\n\n if (target) {\n if (typeof target === 'string') {\n this.matchTextSeq(target.split(' '));\n }\n targetId = this.parseIdVar();\n }\n\n const log = this.matchTextSeq([\n 'IN',\n ])\n ? this.parseString()\n : undefined;\n let position: Expression | undefined = undefined;\n let db: Expression | undefined = undefined;\n\n if (thisArg === 'BINLOG EVENTS' || thisArg === 'RELAYLOG EVENTS') {\n position = this.matchTextSeq([\n 'FROM',\n ])\n ? this.parseNumber()\n : undefined;\n } else {\n if (this.match(TokenType.FROM)) {\n db = this.parseIdVar();\n } else if (this.match(TokenType.DOT)) {\n db = targetId;\n targetId = this.parseIdVar();\n }\n }\n\n const channel = this.matchTextSeq([\n 'FOR',\n 'CHANNEL',\n ])\n ? this.parseIdVar()\n : undefined;\n const like = this.matchTextSeq([\n 'LIKE',\n ])\n ? this.parseString()\n : undefined;\n const where = this.parseWhere();\n\n let types: Expression[] | undefined = undefined;\n let query: Expression | undefined = undefined;\n let offset: Expression | undefined = undefined;\n let limit: Expression | undefined = undefined;\n\n if (thisArg === 'PROFILE') {\n types = this.parseCsv(() => this.parseVarFromOptions(MySQLParser.PROFILE_TYPES));\n query = this.matchTextSeq([\n 'FOR',\n 'QUERY',\n ])\n ? this.parseNumber()\n : undefined;\n offset = this.matchTextSeq([\n 'OFFSET',\n ])\n ? this.parseNumber()\n : undefined;\n limit = this.matchTextSeq([\n 'LIMIT',\n ])\n ? this.parseNumber()\n : undefined;\n } else {\n [\n offset,\n limit,\n ] = this.parseOldstyleLimit();\n }\n\n let mutex: boolean | undefined = undefined;\n if (this.matchTextSeq([\n 'MUTEX',\n ])) mutex = true;\n if (this.matchTextSeq([\n 'STATUS',\n ])) mutex = false;\n\n const forTable = this.matchTextSeq([\n 'FOR',\n 'TABLE',\n ])\n ? this.parseIdVar()\n : undefined;\n const forGroup = this.matchTextSeq([\n 'FOR',\n 'GROUP',\n ])\n ? this.parseString()\n : undefined;\n const forUser = this.matchTextSeq([\n 'FOR',\n 'USER',\n ])\n ? this.parseString()\n : undefined;\n const forRole = this.matchTextSeq([\n 'FOR',\n 'ROLE',\n ])\n ? this.parseString()\n : undefined;\n const intoOutfile = this.matchTextSeq([\n 'INTO',\n 'OUTFILE',\n ])\n ? this.parseString()\n : undefined;\n\n return this.expression(ShowExpr, {\n this: thisArg,\n target: targetId,\n full: full,\n log: log,\n position: position,\n db: db,\n channel: channel,\n like: like,\n where: where,\n types: types,\n query: query,\n offset: offset,\n limit: limit,\n mutex: mutex,\n forTable: forTable,\n forGroup: forGroup,\n forUser: forUser,\n forRole: forRole,\n intoOutfile: intoOutfile,\n json: json,\n global: global,\n });\n }\n\n protected parseOldstyleLimit (): [Expression | undefined, Expression | undefined] {\n let limit: Expression | undefined = undefined;\n let offset: Expression | undefined = undefined;\n\n if (this.matchTextSeq([\n 'LIMIT',\n ])) {\n const parts = this.parseCsv(this.parseNumber.bind(this));\n if (parts.length === 1) {\n limit = parts[0];\n } else if (parts.length === 2) {\n limit = parts[1];\n offset = parts[0];\n }\n }\n\n return [\n offset,\n limit,\n ];\n }\n\n protected parseSetItemCharset (kind: string): Expression {\n const thisExpr = this.parseString() || this.parseUnquotedField();\n return this.expression(SetItemExpr, {\n this: thisExpr,\n kind: kind,\n });\n }\n\n protected parseSetItemNames (): Expression {\n const charset = this.parseString() || this.parseUnquotedField();\n let collate: Expression | undefined = undefined;\n\n if (this.matchTextSeq([\n 'COLLATE',\n ])) {\n collate = this.parseString() || this.parseUnquotedField();\n }\n\n return this.expression(SetItemExpr, {\n this: charset,\n collate: collate,\n kind: 'NAMES',\n });\n }\n\n /**\n * Overrides core type parsing to handle MySQL's unique 'BINARY' modifier\n * which can act as a cast without parentheses.\n */\n public parseType (options: {\n parseInterval?: boolean;\n fallbackToIdentifier?: boolean;\n } = {}): Expression | undefined {\n const {\n parseInterval = true,\n fallbackToIdentifier = false,\n } = options;\n if (this.match(TokenType.BINARY, {\n advance: false,\n })) {\n const dataType = this.parseTypes({\n checkFunc: true,\n allowIdentifiers: false,\n });\n\n if (dataType instanceof DataTypeExpr) {\n return this.expression(CastExpr, {\n this: this.parseColumn(),\n to: dataType,\n });\n }\n }\n\n return super.parseType({\n parseInterval,\n fallbackToIdentifier,\n });\n }\n\n protected parseAlterTableAlterIndex (): AlterIndexExpr {\n const index = this.parseField({\n anyToken: true,\n });\n let visible: boolean | undefined = undefined;\n\n if (this.matchTextSeq([\n 'VISIBLE',\n ])) {\n visible = true;\n } else if (this.matchTextSeq([\n 'INVISIBLE',\n ])) {\n visible = false;\n }\n\n return this.expression(AlterIndexExpr, {\n this: index,\n visible: visible,\n });\n }\n\n /**\n * Parses MySQL partitioning properties for RANGE and LIST schemes.\n */\n protected parsePartitionProperty (): Expression | Expression[] | undefined {\n let partitionCls: typeof Expression | undefined = undefined;\n let valueParser: (() => Expression | undefined) | undefined = undefined;\n\n if (this.matchTextSeq([\n 'RANGE',\n ])) {\n partitionCls = PartitionByRangePropertyExpr;\n valueParser = this.parsePartitionRangeValue.bind(this);\n } else if (this.matchTextSeq([\n 'LIST',\n ])) {\n partitionCls = PartitionByListPropertyExpr;\n valueParser = this.parsePartitionListValue.bind(this);\n }\n\n if (!partitionCls || !valueParser) {\n return undefined;\n }\n\n const partitionExpressions = this.parseWrappedCsv(this.parseAssignment.bind(this));\n\n // For Doris and Starrocks compatibility check\n if (!this.matchTextSeq([\n '(',\n 'PARTITION',\n ], {\n advance: false,\n })) {\n return partitionExpressions;\n }\n\n const createExpressions = this.parseWrappedCsv(valueParser);\n\n return this.expression(partitionCls, {\n partitionExpressions: partitionExpressions,\n createExpressions: createExpressions,\n });\n }\n\n protected parsePartitionRangeValue (): Expression | undefined {\n this.matchTextSeq([\n 'PARTITION',\n ]);\n const name = this.parseIdVar();\n\n if (!this.matchTextSeq([\n 'VALUES',\n 'LESS',\n 'THAN',\n ])) {\n return name;\n }\n\n let values = this.parseWrappedCsv(this.parseExpression.bind(this));\n\n if (\n values.length === 1\n && values[0] instanceof ColumnExpr\n && values[0].name.toUpperCase() === 'MAXVALUE'\n ) {\n values = [\n new VarExpr({\n this: 'MAXVALUE',\n }),\n ];\n }\n\n const partRange = this.expression(PartitionRangeExpr, {\n this: name,\n expressions: values,\n });\n return this.expression(PartitionExpr, {\n expressions: [\n partRange,\n ],\n });\n }\n\n protected parsePartitionListValue (): PartitionExpr {\n this.matchTextSeq([\n 'PARTITION',\n ]);\n const name = this.parseIdVar();\n this.matchTextSeq([\n 'VALUES',\n 'IN',\n ]);\n const values = this.parseWrappedCsv(this.parseExpression.bind(this));\n\n const partList = this.expression(PartitionListExpr, {\n this: name,\n expressions: values,\n });\n return this.expression(PartitionExpr, {\n expressions: [\n partList,\n ],\n });\n }\n\n public parsePrimaryKey (\n options: {\n wrappedOptional?: boolean;\n inProps?: boolean;\n namedPrimaryKey?: boolean;\n } = {},\n ): PrimaryKeyColumnConstraintExpr | PrimaryKeyExpr {\n const {\n wrappedOptional = false,\n inProps = false,\n namedPrimaryKey: _namedPrimaryKey = false,\n } = options;\n // MySQL always supports named primary keys in this context\n return super.parsePrimaryKey({\n wrappedOptional,\n inProps,\n namedPrimaryKey: true,\n });\n }\n}\n\nclass MySQLGenerator 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 INTERVAL_ALLOWS_PLURAL_FORM: boolean = false;\n static LOCKING_READS_SUPPORTED: boolean = true;\n\n @cache\n static get NULL_ORDERING_SUPPORTED () {\n return NullOrderingSupported.UNSUPPORTED;\n }\n\n static JOIN_HINTS: boolean = false;\n static TABLE_HINTS: boolean = true;\n static DUPLICATE_KEY_UPDATE_WITH_SET: boolean = false;\n static QUERY_HINT_SEP: string = ' ';\n static VALUES_AS_TABLE: boolean = false;\n static NVL2_SUPPORTED: boolean = false;\n static LAST_DAY_SUPPORTS_DATE_PART: boolean = false;\n static JSON_TYPE_REQUIRED_FOR_EXTRACTION: boolean = true;\n static JSON_PATH_BRACKETED_KEY_SUPPORTED: boolean = false;\n static JSON_KEY_VALUE_PAIR_SEP: string = ',';\n static SUPPORTS_TO_NUMBER: boolean = false;\n static PARSE_JSON_NAME: string | undefined = undefined;\n static PAD_FILL_PATTERN_IS_REQUIRED: boolean = true;\n static WRAP_DERIVED_VALUES: boolean = false;\n static VARCHAR_REQUIRES_SIZE: boolean = true;\n static SUPPORTS_MEDIAN: boolean = false;\n static UPDATE_STATEMENT_SUPPORTS_FROM: boolean = false;\n static SUPPORTS_CONVERT_TIMEZONE = true;\n\n @cache\n static get ORIGINAL_TRANSFORMS () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Generator.TRANSFORMS,\n [\n ArrayAggExpr,\n renameFunc('GROUP_CONCAT'),\n ],\n [\n BitwiseAndAggExpr,\n renameFunc('BIT_AND'),\n ],\n [\n BitwiseOrAggExpr,\n renameFunc('BIT_OR'),\n ],\n [\n BitwiseXorAggExpr,\n renameFunc('BIT_XOR'),\n ],\n [\n BitwiseCountExpr,\n renameFunc('BIT_COUNT'),\n ],\n [\n ChrExpr,\n function (this: Generator, e: ChrExpr): string {\n return this.chrSql(e, {\n name: 'CHAR',\n });\n },\n ],\n [\n CurrentDateExpr,\n noParenCurrentDateSql,\n ],\n [\n CurrentVersionExpr,\n renameFunc('VERSION'),\n ],\n [\n DateDiffExpr,\n removeTsOrDsToDate(\n function (this: Generator, e: DateDiffExpr): string {\n return this.func('DATEDIFF', [\n e.args.this,\n e.args.expression,\n ]);\n },\n [\n 'this',\n 'expression',\n ],\n ),\n ],\n [\n DateAddExpr,\n removeTsOrDsToDate(dateAddSql('ADD')),\n ],\n [\n DateStrToDateExpr,\n dateStrToDateSql,\n ],\n [\n DateSubExpr,\n removeTsOrDsToDate(dateAddSql('SUB')),\n ],\n [\n DateTruncExpr,\n dateTruncSql,\n ],\n [\n DayExpr,\n removeTsOrDsToDate(),\n ],\n [\n DayOfMonthExpr,\n removeTsOrDsToDate(renameFunc('DAYOFMONTH')),\n ],\n [\n DayOfWeekExpr,\n removeTsOrDsToDate(renameFunc('DAYOFWEEK')),\n ],\n [\n DayOfYearExpr,\n removeTsOrDsToDate(renameFunc('DAYOFYEAR')),\n ],\n [\n GroupConcatExpr,\n function (this: Generator, e: GroupConcatExpr): string {\n return `GROUP_CONCAT(${this.sql(e, 'this')} SEPARATOR ${this.sql(e, 'separator') || '\\',\\''})`;\n },\n ],\n [\n ILikeExpr,\n noIlikeSql,\n ],\n [\n JsonExtractScalarExpr,\n arrowJsonExtractSql,\n ],\n [\n LengthExpr,\n lengthOrCharLengthSql,\n ],\n [\n LogicalOrExpr,\n renameFunc('MAX'),\n ],\n [\n LogicalAndExpr,\n renameFunc('MIN'),\n ],\n [\n MaxExpr,\n maxOrGreatest,\n ],\n [\n MinExpr,\n minOrLeast,\n ],\n [\n MonthExpr,\n removeTsOrDsToDate(),\n ],\n [\n NullSafeEqExpr,\n function (this: Generator, e: NullSafeEqExpr): string {\n return this.binary(e, '<=>');\n },\n ],\n [\n NullSafeNeqExpr,\n function (this: Generator, e: NullSafeNeqExpr): string {\n return `NOT ${this.binary(e, '<=>')}`;\n },\n ],\n [\n NumberToStrExpr,\n renameFunc('FORMAT'),\n ],\n [\n PivotExpr,\n noPivotSql,\n ],\n [\n SelectExpr,\n preprocess([\n eliminateDistinctOn,\n eliminateSemiAndAntiJoins,\n eliminateQualify,\n eliminateFullOuterJoin,\n unnestGenerateDateArrayUsingRecursiveCte,\n ]),\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr): string {\n return strPositionSql.call(this, e, {\n funcName: 'LOCATE',\n supportsPosition: true,\n });\n },\n ],\n [\n StrToDateExpr,\n strToDateSql,\n ],\n [\n StrToTimeExpr,\n strToDateSql,\n ],\n [\n StuffExpr,\n renameFunc('INSERT'),\n ],\n [\n SessionUserExpr,\n () => 'SESSION_USER()',\n ],\n [\n TableSampleExpr,\n noTablesampleSql,\n ],\n [\n TimeFromPartsExpr,\n renameFunc('MAKETIME'),\n ],\n [\n TimestampAddExpr,\n dateAddIntervalSql('DATE', 'ADD'),\n ],\n [\n TimestampDiffExpr,\n function (this: Generator, e: TimestampDiffExpr): string {\n return this.func('TIMESTAMPDIFF', [\n unitToVar(e),\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n TimestampSubExpr,\n dateAddIntervalSql('DATE', 'SUB'),\n ],\n [\n TimeStrToUnixExpr,\n renameFunc('UNIX_TIMESTAMP'),\n ],\n [\n TimeStrToTimeExpr,\n function (this: Generator, e: TimeStrToTimeExpr): string {\n return timeStrToTimeSql.call(this, e, {\n includePrecision: !e.args.zone,\n });\n },\n ],\n [\n TimeToStrExpr,\n removeTsOrDsToDate(function (this: Generator, e: TimeToStrExpr) {\n return this.func('DATE_FORMAT', [\n e.args.this,\n this.formatTime(e),\n ]);\n }),\n ],\n [\n TrimExpr,\n trimSql,\n ],\n [\n TruncExpr,\n renameFunc('TRUNCATE'),\n ],\n [\n TryCastExpr,\n noTrycastSql,\n ],\n [\n TsOrDsAddExpr,\n dateAddSql('ADD'),\n ],\n [\n TsOrDsDiffExpr,\n function (this: Generator, e: TsOrDsDiffExpr): string {\n return this.func('DATEDIFF', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n TsOrDsToDateExpr,\n tsOrDsToDateSql,\n ],\n [\n UnicodeExpr,\n function (this: Generator, e: UnicodeExpr): string {\n return `ORD(CONVERT(${this.sql(e.args.this)} USING utf32))`;\n },\n ],\n [\n UnixToTimeExpr,\n unixToTimeSql,\n ],\n [\n WeekExpr,\n removeTsOrDsToDate(),\n ],\n [\n WeekOfYearExpr,\n removeTsOrDsToDate(renameFunc('WEEKOFYEAR')),\n ],\n [\n YearExpr,\n removeTsOrDsToDate(),\n ],\n [\n UtcTimestampExpr,\n renameFunc('UTC_TIMESTAMP'),\n ],\n [\n UtcTimeExpr,\n renameFunc('UTC_TIME'),\n ],\n ]);\n }\n\n /**\n * Maps unsigned types to their standard MySQL counterparts.\n * MySQL adds the 'UNSIGNED' attribute during generation based on the DataTypeExpr.\n */\n @cache\n static get UNSIGNED_TYPE_MAPPING (): Map<DataTypeExprKind, string> {\n return new Map<DataTypeExprKind, string>([\n [\n DataTypeExprKind.UBIGINT,\n 'BIGINT',\n ],\n [\n DataTypeExprKind.UINT,\n 'INT',\n ],\n [\n DataTypeExprKind.UMEDIUMINT,\n 'MEDIUMINT',\n ],\n [\n DataTypeExprKind.USMALLINT,\n 'SMALLINT',\n ],\n [\n DataTypeExprKind.UTINYINT,\n 'TINYINT',\n ],\n [\n DataTypeExprKind.UDECIMAL,\n 'DECIMAL',\n ],\n [\n DataTypeExprKind.UDOUBLE,\n 'DOUBLE',\n ],\n ]);\n }\n\n /**\n * Standardizes various timestamp types to MySQL's DATETIME or TIMESTAMP.\n */\n @cache\n static get TIMESTAMP_TYPE_MAPPING (): Map<DataTypeExprKind, string> {\n return new Map<DataTypeExprKind, string>([\n [\n DataTypeExprKind.DATETIME2,\n 'DATETIME',\n ],\n [\n DataTypeExprKind.SMALLDATETIME,\n 'DATETIME',\n ],\n [\n DataTypeExprKind.TIMESTAMP,\n 'DATETIME',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'DATETIME',\n ],\n [\n DataTypeExprKind.TIMESTAMPTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPLTZ,\n 'TIMESTAMP',\n ],\n ]);\n }\n\n @cache\n static get TYPE_MAPPING (): Map<DataTypeExprKind | string, string> {\n const mapping = new Map(Generator.TYPE_MAPPING);\n\n for (const [\n k,\n v,\n ] of MySQLGenerator.UNSIGNED_TYPE_MAPPING) {\n mapping.set(k, v);\n }\n for (const [\n k,\n v,\n ] of MySQLGenerator.TIMESTAMP_TYPE_MAPPING) {\n mapping.set(k, v);\n }\n\n // Remove types that MySQL handles natively or via special attributes\n mapping.delete(DataTypeExprKind.MEDIUMTEXT);\n mapping.delete(DataTypeExprKind.LONGTEXT);\n mapping.delete(DataTypeExprKind.TINYTEXT);\n mapping.delete(DataTypeExprKind.BLOB);\n mapping.delete(DataTypeExprKind.MEDIUMBLOB);\n mapping.delete(DataTypeExprKind.LONGBLOB);\n mapping.delete(DataTypeExprKind.TINYBLOB);\n\n return mapping;\n }\n\n @cache\n static get PROPERTIES_LOCATION (): Map<typeof Expression, PropertiesLocation> {\n const map = new Map(Generator.PROPERTIES_LOCATION);\n map.set(TransientPropertyExpr, PropertiesLocation.UNSUPPORTED);\n map.set(VolatilePropertyExpr, PropertiesLocation.UNSUPPORTED);\n map.set(PartitionedByPropertyExpr, PropertiesLocation.UNSUPPORTED);\n map.set(PartitionByRangePropertyExpr, PropertiesLocation.POST_SCHEMA);\n map.set(PartitionByListPropertyExpr, PropertiesLocation.POST_SCHEMA);\n return map;\n }\n\n static LIMIT_FETCH: string = 'LIMIT';\n static LIMIT_ONLY_LITERALS: boolean = true;\n\n /**\n * MySQL CAST targets for character-based types.\n */\n @cache\n static get CHAR_CAST_MAPPING () {\n return [\n DataTypeExprKind.LONGTEXT,\n DataTypeExprKind.LONGBLOB,\n DataTypeExprKind.MEDIUMBLOB,\n DataTypeExprKind.MEDIUMTEXT,\n DataTypeExprKind.TEXT,\n DataTypeExprKind.TINYBLOB,\n DataTypeExprKind.TINYTEXT,\n DataTypeExprKind.VARCHAR,\n ].reduce((acc, type) => ({\n ...acc,\n [type]: 'CHAR',\n }), {});\n }\n\n /**\n * MySQL CAST targets for integer-based types.\n */\n @cache\n static get SIGNED_CAST_MAPPING () {\n return [\n DataTypeExprKind.BIGINT,\n DataTypeExprKind.BOOLEAN,\n DataTypeExprKind.INT,\n DataTypeExprKind.SMALLINT,\n DataTypeExprKind.TINYINT,\n DataTypeExprKind.MEDIUMINT,\n ].reduce((acc, type) => ({\n ...acc,\n [type]: 'SIGNED',\n }), {});\n }\n\n /**\n * MySQL is restricted in which types it can use as a CAST target.\n * Reference: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast\n */\n @cache\n static get CAST_MAPPING (): Record<string, string> {\n return {\n ...MySQLGenerator.CHAR_CAST_MAPPING,\n ...MySQLGenerator.SIGNED_CAST_MAPPING,\n [DataTypeExprKind.UBIGINT]: 'UNSIGNED',\n };\n }\n\n /**\n * Types that require specific function-like syntax for timestamp manipulation.\n */\n @cache\n static get TIMESTAMP_FUNC_TYPES (): Set<string> {\n return new Set([\n DataTypeExprKind.TIMESTAMPTZ,\n DataTypeExprKind.TIMESTAMPLTZ,\n ]);\n }\n\n /**\n * Comprehensive list of MySQL reserved keywords for identifier quoting.\n * Reference: https://dev.mysql.com/doc/refman/8.0/en/keywords.html\n */\n @cache\n static get RESERVED_KEYWORDS (): Set<string> {\n return new Set([\n 'accessible',\n 'add',\n 'all',\n 'alter',\n 'analyze',\n 'and',\n 'as',\n 'asc',\n 'asensitive',\n 'before',\n 'between',\n 'bigint',\n 'binary',\n 'blob',\n 'both',\n 'by',\n 'call',\n 'cascade',\n 'case',\n 'change',\n 'char',\n 'character',\n 'check',\n 'collate',\n 'column',\n 'condition',\n 'constraint',\n 'continue',\n 'convert',\n 'create',\n 'cross',\n 'cube',\n 'cume_dist',\n 'current_date',\n 'current_time',\n 'current_timestamp',\n 'current_user',\n 'cursor',\n 'database',\n 'databases',\n 'day_hour',\n 'day_microsecond',\n 'day_minute',\n 'day_second',\n 'dec',\n 'decimal',\n 'declare',\n 'default',\n 'delayed',\n 'delete',\n 'dense_rank',\n 'desc',\n 'describe',\n 'deterministic',\n 'distinct',\n 'distinctrow',\n 'div',\n 'double',\n 'drop',\n 'dual',\n 'each',\n 'else',\n 'elseif',\n 'empty',\n 'enclosed',\n 'escaped',\n 'except',\n 'exists',\n 'exit',\n 'explain',\n 'false',\n 'fetch',\n 'first_value',\n 'float',\n 'float4',\n 'float8',\n 'for',\n 'force',\n 'foreign',\n 'from',\n 'fulltext',\n 'function',\n 'generated',\n 'get',\n 'grant',\n 'group',\n 'grouping',\n 'groups',\n 'having',\n 'high_priority',\n 'hour_microsecond',\n 'hour_minute',\n 'hour_second',\n 'if',\n 'ignore',\n 'in',\n 'index',\n 'infile',\n 'inner',\n 'inout',\n 'insensitive',\n 'insert',\n 'int',\n 'int1',\n 'int2',\n 'int3',\n 'int4',\n 'int8',\n 'integer',\n 'intersect',\n 'interval',\n 'into',\n 'io_after_gtids',\n 'io_before_gtids',\n 'is',\n 'iterate',\n 'join',\n 'json_table',\n 'key',\n 'keys',\n 'kill',\n 'lag',\n 'last_value',\n 'lateral',\n 'lead',\n 'leading',\n 'leave',\n 'left',\n 'like',\n 'limit',\n 'linear',\n 'lines',\n 'load',\n 'localtime',\n 'localtimestamp',\n 'lock',\n 'long',\n 'longblob',\n 'longtext',\n 'loop',\n 'low_priority',\n 'master_bind',\n 'master_ssl_verify_server_cert',\n 'match',\n 'maxvalue',\n 'mediumblob',\n 'mediumint',\n 'mediumtext',\n 'middleint',\n 'minute_microsecond',\n 'minute_second',\n 'mod',\n 'modifies',\n 'natural',\n 'not',\n 'no_write_to_binlog',\n 'nth_value',\n 'ntile',\n 'undefined',\n 'numeric',\n 'of',\n 'on',\n 'optimize',\n 'optimizer_costs',\n 'option',\n 'optionally',\n 'or',\n 'order',\n 'out',\n 'outer',\n 'outfile',\n 'over',\n 'partition',\n 'percent_rank',\n 'precision',\n 'primary',\n 'procedure',\n 'purge',\n 'range',\n 'rank',\n 'read',\n 'reads',\n 'read_write',\n 'real',\n 'recursive',\n 'references',\n 'regexp',\n 'release',\n 'rename',\n 'repeat',\n 'replace',\n 'require',\n 'resignal',\n 'restrict',\n 'return',\n 'revoke',\n 'right',\n 'rlike',\n 'row',\n 'rows',\n 'row_number',\n 'schema',\n 'schemas',\n 'second_microsecond',\n 'select',\n 'sensitive',\n 'separator',\n 'set',\n 'show',\n 'signal',\n 'smallint',\n 'spatial',\n 'specific',\n 'sql',\n 'sqlexception',\n 'sqlstate',\n 'sqlwarning',\n 'sql_big_result',\n 'sql_calc_found_rows',\n 'sql_small_result',\n 'ssl',\n 'starting',\n 'stored',\n 'straight_join',\n 'system',\n 'table',\n 'terminated',\n 'then',\n 'tinyblob',\n 'tinyint',\n 'tinytext',\n 'to',\n 'trailing',\n 'trigger',\n 'true',\n 'undo',\n 'union',\n 'unique',\n 'unlock',\n 'unsigned',\n 'update',\n 'usage',\n 'use',\n 'using',\n 'utc_date',\n 'utc_time',\n 'utc_timestamp',\n 'values',\n 'varbinary',\n 'varchar',\n 'varcharacter',\n 'varying',\n 'virtual',\n 'when',\n 'where',\n 'while',\n 'window',\n 'with',\n 'write',\n 'xor',\n 'year_month',\n 'zerofill',\n ]);\n }\n\n public computedColumnConstraintSql (expression: ComputedColumnConstraintExpr): string {\n const persisted = expression.args.persisted ? 'STORED' : 'VIRTUAL';\n return `GENERATED ALWAYS AS (${this.sql(expression.args.this?.unnest())}) ${persisted}`;\n }\n\n public arraySql (expression: ArrayExpr): string {\n this.unsupported('Arrays are not supported by MySQL');\n return this.functionFallbackSql(expression);\n }\n\n public arrayContainsAllSql (expression: ArrayContainsAllExpr): string {\n this.unsupported('Array operations are not supported by MySQL');\n return this.functionFallbackSql(expression);\n }\n\n public dpipeSql (expression: DPipeExpr): string {\n return this.func('CONCAT', [\n ...expression.flatten(),\n ]);\n }\n\n public extractSql (expression: ExtractExpr): string {\n const unit = expression.name;\n if (unit && unit.toLowerCase() === 'epoch') {\n return this.func('UNIX_TIMESTAMP', [\n expression.args.expression as Expression,\n ]);\n }\n\n return super.extractSql(expression);\n }\n\n public dataTypeSql (expression: DataTypeExpr): string {\n if (\n (this.constructor as typeof MySQLGenerator).VARCHAR_REQUIRES_SIZE\n && expression.isType(DataTypeExprKind.VARCHAR)\n && !expression.args.expressions?.length\n ) {\n // `VARCHAR` must always have a size - if it doesn't, we always generate `TEXT`\n return 'TEXT';\n }\n\n let result = super.dataTypeSql(expression);\n if (MySQLGenerator.UNSIGNED_TYPE_MAPPING.has(expression.args.this as DataTypeExprKind)) {\n result = `${result} UNSIGNED`;\n }\n\n return result;\n }\n\n public jsonArrayContainsSql (expression: JsonArrayContainsExpr): string {\n return `${this.sql(expression, 'this')} MEMBER OF(${this.sql(expression, 'expression')})`;\n }\n\n public castSql (expression: CastExpr, _options: {safePrefix?: string} = {}): string {\n const toExpr = expression.args.to;\n if (toExpr instanceof DataTypeExpr) {\n const toThis = toExpr.args.this as string;\n if ((this._constructor as typeof MySQLGenerator).TIMESTAMP_FUNC_TYPES.has(toThis)) {\n return this.func('TIMESTAMP', [\n expression.args.this as Expression,\n ]);\n }\n const to = (this._constructor as typeof MySQLGenerator).CAST_MAPPING[toThis];\n if (to) {\n toExpr.setArgKey('this', to);\n }\n }\n return super.castSql(expression);\n }\n\n public showSql (expression: ShowExpr): string {\n const thisName = ` ${expression.name}`;\n const full = expression.args.full ? ' FULL' : '';\n const global_ = expression.args.global ? ' GLOBAL' : '';\n\n let target = this.sql(expression, 'target');\n target = target ? ` ${target}` : '';\n\n if ([\n 'COLUMNS',\n 'INDEX',\n ].includes(expression.name)) {\n target = ` FROM${target}`;\n } else if (expression.name === 'GRANTS') {\n target = ` FOR${target}`;\n } else if ([\n 'LINKS',\n 'PARTITIONS',\n ].includes(expression.name)) {\n target = target ? ` ON${target}` : '';\n } else if (expression.name === 'PROJECTIONS') {\n target = target ? ` ON TABLE${target}` : '';\n }\n\n const db = this.prefixedSql('FROM', expression, 'db');\n const like = this.prefixedSql('LIKE', expression, 'like');\n const where = this.sql(expression, 'where');\n\n let types = this.expressions(expression, {\n key: 'types',\n });\n types = types ? ` ${types}` : types;\n const query = this.prefixedSql('FOR QUERY', expression, 'query');\n\n let offset = '';\n let limit = '';\n if (expression.name === 'PROFILE') {\n offset = this.prefixedSql('OFFSET', expression, 'offset');\n limit = this.prefixedSql('LIMIT', expression, 'limit');\n } else {\n limit = this.oldStyleLimitSql(expression);\n }\n\n const log = this.prefixedSql('IN', expression, 'log');\n const position = this.prefixedSql('FROM', expression, 'position');\n const channel = this.prefixedSql('FOR CHANNEL', expression, 'channel');\n\n let mutexOrStatus = '';\n if (expression.name === 'ENGINE') {\n mutexOrStatus = expression.args.mutex ? ' MUTEX' : ' STATUS';\n }\n\n const forTable = this.prefixedSql('FOR TABLE', expression, 'forTable');\n const forGroup = this.prefixedSql('FOR GROUP', expression, 'forGroup');\n const forUser = this.prefixedSql('FOR USER', expression, 'forUser');\n const forRole = this.prefixedSql('FOR ROLE', expression, 'forRole');\n const intoOutfile = this.prefixedSql('INTO OUTFILE', expression, 'intoOutfile');\n const json = expression.args.json ? ' JSON' : '';\n\n return `SHOW${full}${global_}${thisName}${json}${target}${forTable}${types}${db}${query}${log}${position}${channel}${mutexOrStatus}${like}${where}${offset}${limit}${forGroup}${forUser}${forRole}${intoOutfile}`;\n }\n\n /**\n * MySQL doesn't use the TO keyword in ALTER ... RENAME.\n */\n public alterRenameSql (expression: AlterRenameExpr, _options: {includeTo?: boolean} = {}): string {\n return super.alterRenameSql(expression, {\n includeTo: false,\n });\n }\n\n /**\n * MySQL uses MODIFY COLUMN for changing column data types.\n */\n public alterColumnSql (expression: AlterColumnExpr): string {\n const dtype = this.sql(expression, 'dtype');\n if (!dtype) {\n return super.alterColumnSql(expression);\n }\n\n const thisExpr = this.sql(expression, 'this');\n return `MODIFY COLUMN ${thisExpr} ${dtype}`;\n }\n\n protected prefixedSql (prefix: string, expression: Expression, arg: string): string {\n const sql = this.sql(expression, arg);\n return sql ? ` ${prefix} ${sql}` : '';\n }\n\n protected oldStyleLimitSql (expression: ShowExpr): string {\n const limit = this.sql(expression, 'limit');\n const offset = this.sql(expression, 'offset');\n if (limit) {\n const limitOffset = offset ? `${offset}, ${limit}` : limit;\n return ` LIMIT ${limitOffset}`;\n }\n return '';\n }\n\n /**\n * Simulates TIMESTAMP_TRUNC using TIMESTAMPDIFF and DATE_ADD math.\n */\n public timestampTruncSql (expression: TimestampTruncExpr): string {\n const unit = expression.args.unit;\n const startTs = '\\'0000-01-01 00:00:00\\'';\n\n // Calculate diff between 0000-01-01 and target, then add that interval back to the base\n const timestampDiff = buildDateDelta(TimestampDiffExpr)([\n unit as Expression,\n new LiteralExpr({\n this: startTs,\n isString: true,\n }),\n expression.args.this as Expression,\n ]);\n const interval = new IntervalExpr({\n this: timestampDiff,\n unit: unit,\n });\n const dateAdd = buildDateDeltaWithInterval(DateAddExpr)([\n new LiteralExpr({\n this: startTs,\n isString: true,\n }),\n interval,\n ]);\n\n return this.sql(dateAdd);\n }\n\n public convertTimezoneSql (expression: ConvertTimezoneExpr): string {\n const fromTz = expression.args.sourceTz;\n const toTz = expression.args.targetTz;\n const dt = expression.args.timestamp;\n\n return this.func('CONVERT_TZ', [\n dt,\n fromTz,\n toTz,\n ] as Expression[]);\n }\n\n public attimezoneSql (expression: AtTimeZoneExpr): string {\n this.unsupported('AT TIME ZONE is not supported by MySQL');\n return this.sql(expression.args.this);\n }\n\n public isasciiSql (expression: IsAsciiExpr): string {\n return `REGEXP_LIKE(${this.sql(expression.args.this)}, '^[[:ascii:]]*$')`;\n }\n\n public ignoreNullsSql (expression: IgnoreNullsExpr): string {\n this.unsupported('MySQL does not support IGNORE NULLS.');\n return this.sql(expression.args.this);\n }\n\n public currentSchemaSql (_expression: CurrentSchemaExpr): string {\n unsupportedArgs.call(this, _expression, 'this');\n return this.func('SCHEMA', [\n ]);\n }\n\n public partitionSql (expression: PartitionExpr): string {\n const parent = expression.parent;\n if (parent instanceof PartitionByRangePropertyExpr || parent instanceof PartitionByListPropertyExpr) {\n return this.expressions(expression, {\n flat: true,\n });\n }\n return super.partitionSql(expression);\n }\n\n public partitionByRangeOrListSql (\n expression: PartitionByRangePropertyExpr | PartitionByListPropertyExpr,\n kind: string,\n ): string {\n const partitions = this.expressions(expression, {\n key: 'partitionExpressions',\n flat: true,\n });\n const create = this.expressions(expression, {\n key: 'createExpressions',\n flat: true,\n });\n return `PARTITION BY ${kind} (${partitions}) (${create})`;\n }\n\n public partitionByRangePropertySql (expression: PartitionByRangePropertyExpr): string {\n return this.partitionByRangeOrListSql(expression, 'RANGE');\n }\n\n public partitionByListPropertySql (expression: PartitionByListPropertyExpr): string {\n return this.partitionByRangeOrListSql(expression, 'LIST');\n }\n\n public partitionListSql (expression: PartitionListExpr): string {\n const name = this.sql(expression, 'this');\n const values = this.expressions(expression, {\n flat: true,\n });\n return `PARTITION ${name} VALUES IN (${values})`;\n }\n\n public partitionRangeSql (expression: PartitionRangeExpr): string {\n const name = this.sql(expression, 'this');\n const values = this.expressions(expression, {\n flat: true,\n });\n return `PARTITION ${name} VALUES LESS THAN (${values})`;\n }\n}\n\nexport class MySQL extends Dialect {\n static DIALECT_NAME = Dialects.MYSQL;\n static PROMOTE_TO_INFERRED_DATETIME_TYPE: boolean = true;\n\n // MySQL allows identifiers to start with digits if they are quoted or in specific contexts\n // Reference: https://dev.mysql.com/doc/refman/8.0/en/identifiers.html\n static IDENTIFIERS_CAN_START_WITH_DIGIT: boolean = true;\n\n /**\n * We default to treating all identifiers as case-sensitive, since it matches MySQL's\n * behavior on Linux systems. For MacOS and Windows systems, one can override this\n * setting by specifying `dialect=\"mysql, normalization_strategy = lowercase\"`.\n * * Reference: https://dev.mysql.com/doc/refman/8.2/en/identifier-case-sensitivity.html\n */\n @cache\n static get NORMALIZATION_STRATEGY (): NormalizationStrategy {\n return NormalizationStrategy.CASE_SENSITIVE;\n }\n\n static TIME_FORMAT: string = '\\'%Y-%m-%d %T\\'';\n static DPIPE_IS_STRING_CONCAT: boolean = false;\n static SUPPORTS_USER_DEFINED_TYPES: boolean = false;\n static SUPPORTS_SEMI_ANTI_JOIN: boolean = false;\n static SAFE_DIVISION: boolean = true;\n static SAFE_TO_ELIMINATE_DOUBLE_NEGATION: boolean = false;\n static LEAST_GREATEST_IGNORES_NULLS: boolean = false;\n\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n return new Map(MySQLTyping.EXPRESSION_METADATA);\n }\n\n /**\n * MySQL-specific time format mapping.\n * Reference: https://prestodb.io/docs/current/functions/datetime.html#mysql-date-functions\n */\n @cache\n static get TIME_MAPPING (): Record<string, string> {\n return {\n '%M': '%B',\n '%c': '%-m',\n '%e': '%-d',\n '%h': '%I',\n '%i': '%M',\n '%s': '%S',\n '%u': '%W',\n '%k': '%-H',\n '%l': '%-I',\n '%T': '%H:%M:%S',\n '%W': '%A',\n };\n }\n\n /**\n * Valid interval units supported by MySQL.\n * Includes standard units plus MySQL-specific compound units.\n */\n @cache\n static get VALID_INTERVAL_UNITS () {\n return new Set([\n ...Dialect.VALID_INTERVAL_UNITS,\n 'SECOND_MICROSECOND',\n 'MINUTE_MICROSECOND',\n 'MINUTE_SECOND',\n 'HOUR_MICROSECOND',\n 'HOUR_SECOND',\n 'HOUR_MINUTE',\n 'DAY_MICROSECOND',\n 'DAY_SECOND',\n 'DAY_MINUTE',\n 'DAY_HOUR',\n 'YEAR_MONTH',\n ]);\n }\n\n static Tokenizer = MySQLTokenizer;\n static Parser = MySQLParser;\n static Generator = MySQLGenerator;\n}\nDialect.register(Dialects.MYSQL, MySQL);\n"],"mappings":"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CACE1G,GACA2G,EACF,EACA,CACEC,GACAb,EAAW,KAAK,CAClB,EACA,CACEc,GACAd,EAAW,KAAK,CAClB,EACA,CACEe,GACAC,EACF,EACA,CACEC,GACAC,EACF,EACA,CACE/G,EACAjE,EAAmB,CACrB,EACA,CACEiL,GACA,SAA2BjB,EAA2B,CACpD,OAAO,KAAK,OAAOA,EAAG,KAAK,CAC7B,CACF,EACA,CACEkB,GACA,SAA2BlB,EAA4B,CACrD,MAAO,OAAO,KAAK,OAAOA,EAAG,KAAK,CAAC,EACrC,CACF,EACA,CACEnG,GACAiG,EAAW,QAAQ,CACrB,EACA,CACEqB,GACAC,EACF,EACA,CACEC,GACAC,GAAW,CACTC,GACAC,GACAC,GACAC,GACAC,EACF,CAAC,CACH,EACA,CACEC,GACA,SAA2B5B,EAA4B,CACrD,OAAO6B,GAAe,KAAK,KAAM7B,EAAG,CAClC,SAAU,SACV,iBAAkB,EACpB,CAAC,CACH,CACF,EACA,CACE7K,GACAC,EACF,EACA,CACEF,GACAE,EACF,EACA,CACE0M,GACAhC,EAAW,QAAQ,CACrB,EACA,CACEiC,GACA,IAAM,gBACR,EACA,CACEC,GACAC,EACF,EACA,CACEjI,GACA8F,EAAW,UAAU,CACvB,EACA,CACEoC,GACAC,GAAmB,OAAQ,KAAK,CAClC,EACA,CACE9H,EACA,SAA2B2F,EAA8B,CACvD,OAAO,KAAK,KAAK,gBAAiB,CAChClK,GAAUkK,CAAC,EACXA,EAAE,KAAK,WACPA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACEoC,GACAD,GAAmB,OAAQ,KAAK,CAClC,EACA,CACEE,GACAvC,EAAW,gBAAgB,CAC7B,EACA,CACEwC,GACA,SAA2BtC,EAA8B,CACvD,OAAOuC,GAAiB,KAAK,KAAMvC,EAAG,CACpC,iBAAkB,CAACA,EAAE,KAAK,IAC5B,CAAC,CACH,CACF,EACA,CACEzG,EACAvD,EAAmB,SAA2BgK,EAAkB,CAC9D,OAAO,KAAK,KAAK,cAAe,CAC9BA,EAAE,KAAK,KACP,KAAK,WAAWA,CAAC,CACnB,CAAC,CACH,CAAC,CACH,EACA,CACEwC,GACAC,EACF,EACA,CACEC,GACA5C,EAAW,UAAU,CACvB,EACA,CACE6C,GACAC,EACF,EACA,CACEC,GACAlN,GAAW,KAAK,CAClB,EACA,CACEmN,GACA,SAA2B9C,EAA2B,CACpD,OAAO,KAAK,KAAK,WAAY,CAC3BA,EAAE,KAAK,KACPA,EAAE,KAAK,UACT,CAAC,CACH,CACF,EACA,CACE5J,EACAL,EACF,EACA,CACEgN,GACA,SAA2B/C,EAAwB,CACjD,MAAO,eAAe,KAAK,IAAIA,EAAE,KAAK,IAAI,CAAC,gBAC7C,CACF,EACA,CACExK,EACAH,EACF,EACA,CACEoF,EACAzE,EAAmB,CACrB,EACA,CACE0E,GACA1E,EAAmB8J,EAAW,YAAY,CAAC,CAC7C,EACA,CACEnF,GACA3E,EAAmB,CACrB,EACA,CACEgN,GACAlD,EAAW,eAAe,CAC5B,EACA,CACEmD,GACAnD,EAAW,UAAU,CACvB,CACF,CAAC,CACH,CAOA,WAAW,uBAAwD,CACjE,OAAO,IAAI,IAA8B,CACvC,WAEE,QACF,EACA,QAEE,KACF,EACA,cAEE,WACF,EACA,aAEE,UACF,EACA,YAEE,SACF,EACA,YAEE,SACF,EACA,WAEE,QACF,CACF,CAAC,CACH,CAMA,WAAW,wBAAyD,CAClE,OAAO,IAAI,IAA8B,CACvC,aAEE,UACF,EACA,iBAEE,UACF,EACA,aAEE,UACF,EACA,gBAEE,UACF,EACA,eAEE,WACF,EACA,gBAEE,WACF,CACF,CAAC,CACH,CAGA,WAAW,cAAwD,CACjE,IAAMoD,EAAU,IAAI,IAAIxD,EAAU,YAAY,EAE9C,OAAW,CACTyD,EACAC,CACF,IAAK3D,EAAe,sBAClByD,EAAQ,IAAIC,EAAGC,CAAC,EAElB,OAAW,CACTD,EACAC,CACF,IAAK3D,EAAe,uBAClByD,EAAQ,IAAIC,EAAGC,CAAC,EAIlB,OAAAF,EAAQ,mBAAkC,EAC1CA,EAAQ,iBAAgC,EACxCA,EAAQ,iBAAgC,EACxCA,EAAQ,aAA4B,EACpCA,EAAQ,mBAAkC,EAC1CA,EAAQ,iBAAgC,EACxCA,EAAQ,iBAAgC,EAEjCA,CACT,CAGA,WAAW,qBAAmE,CAC5E,IAAMG,EAAM,IAAI,IAAI3D,EAAU,mBAAmB,EACjD,OAAA2D,EAAI,IAAIC,gBAAqD,EAC7DD,EAAI,IAAIE,gBAAoD,EAC5DF,EAAI,IAAIG,gBAAyD,EACjEH,EAAI,IAAIxF,cAA4D,EACpEwF,EAAI,IAAIvF,cAA2D,EAC5DuF,CACT,CASA,WAAW,mBAAqB,CAC9B,MAAO,uFASP,EAAE,OAAO,CAACI,EAAKC,KAAU,CACvB,GAAGD,EACH,CAACC,CAAI,EAAG,MACV,GAAI,CAAC,CAAC,CACR,CAMA,WAAW,qBAAuB,CAChC,MAAO,0DAOP,EAAE,OAAO,CAACD,EAAKC,KAAU,CACvB,GAAGD,EACH,CAACC,CAAI,EAAG,QACV,GAAI,CAAC,CAAC,CACR,CAOA,WAAW,cAAwC,CACjD,MAAO,CACL,GAAGjE,EAAe,kBAClB,GAAGA,EAAe,oBACjB,QAA2B,UAC9B,CACF,CAMA,WAAW,sBAAqC,CAC9C,OAAO,IAAI,IAAI,6BAGf,CAAC,CACH,CAOA,WAAW,mBAAkC,CAC3C,OAAO,IAAI,IAAI,CACb,aACA,MACA,MACA,QACA,UACA,MACA,KACA,MACA,aACA,SACA,UACA,SACA,SACA,OACA,OACA,KACA,OACA,UACA,OACA,SACA,OACA,YACA,QACA,UACA,SACA,YACA,aACA,WACA,UACA,SACA,QACA,OACA,YACA,eACA,eACA,oBACA,eACA,SACA,WACA,YACA,WACA,kBACA,aACA,aACA,MACA,UACA,UACA,UACA,UACA,SACA,aACA,OACA,WACA,gBACA,WACA,cACA,MACA,SACA,OACA,OACA,OACA,OACA,SACA,QACA,WACA,UACA,SACA,SACA,OACA,UACA,QACA,QACA,cACA,QACA,SACA,SACA,MACA,QACA,UACA,OACA,WACA,WACA,YACA,MACA,QACA,QACA,WACA,SACA,SACA,gBACA,mBACA,cACA,cACA,KACA,SACA,KACA,QACA,SACA,QACA,QACA,cACA,SACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,YACA,WACA,OACA,iBACA,kBACA,KACA,UACA,OACA,aACA,MACA,OACA,OACA,MACA,aACA,UACA,OACA,UACA,QACA,OACA,OACA,QACA,SACA,QACA,OACA,YACA,iBACA,OACA,OACA,WACA,WACA,OACA,eACA,cACA,gCACA,QACA,WACA,aACA,YACA,aACA,YACA,qBACA,gBACA,MACA,WACA,UACA,MACA,qBACA,YACA,QACA,YACA,UACA,KACA,KACA,WACA,kBACA,SACA,aACA,KACA,QACA,MACA,QACA,UACA,OACA,YACA,eACA,YACA,UACA,YACA,QACA,QACA,OACA,OACA,QACA,aACA,OACA,YACA,aACA,SACA,UACA,SACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,QACA,QACA,MACA,OACA,aACA,SACA,UACA,qBACA,SACA,YACA,YACA,MACA,OACA,SACA,WACA,UACA,WACA,MACA,eACA,WACA,aACA,iBACA,sBACA,mBACA,MACA,WACA,SACA,gBACA,SACA,QACA,aACA,OACA,WACA,UACA,WACA,KACA,WACA,UACA,OACA,OACA,QACA,SACA,SACA,WACA,SACA,QACA,MACA,QACA,WACA,WACA,gBACA,SACA,YACA,UACA,eACA,UACA,UACA,OACA,QACA,QACA,SACA,OACA,QACA,MACA,aACA,UACF,CAAC,CACH,CAEO,4BAA6BtL,EAAkD,CACpF,IAAM6G,EAAY7G,EAAW,KAAK,UAAY,SAAW,UACzD,MAAO,wBAAwB,KAAK,IAAIA,EAAW,KAAK,MAAM,OAAO,CAAC,CAAC,KAAK6G,CAAS,EACvF,CAEO,SAAU7G,EAA+B,CAC9C,YAAK,YAAY,mCAAmC,EAC7C,KAAK,oBAAoBA,CAAU,CAC5C,CAEO,oBAAqBA,EAA0C,CACpE,YAAK,YAAY,6CAA6C,EACvD,KAAK,oBAAoBA,CAAU,CAC5C,CAEO,SAAUA,EAA+B,CAC9C,OAAO,KAAK,KAAK,SAAU,CACzB,GAAGA,EAAW,QAAQ,CACxB,CAAC,CACH,CAEO,WAAYA,EAAiC,CAClD,IAAME,EAAOF,EAAW,KACxB,OAAIE,GAA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","names":["_EXPRESSION_METADATA_dec","_init","cache","MySQLTyping","map","DialectTyping","extend","types","data","type","Atan2Expr","DegreesExpr","CurrentVersionExpr","EltExpr","DayOfMonthExpr","DayOfWeekExpr","DayOfYearExpr","MonthExpr","SecondExpr","WeekExpr","LocaltimeExpr","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","showParser","thisArg","options","dateTruncSql","expression","expr","unit","concat","dateFormat","TIME_SPECIFIERS","hasTimeSpecifier","i","length","buildStrToDate","args","mysqlDateFormat","seqGet","MySQL","Expression","StrToTimeExpr","StrToDateExpr","strToDateSql","unixToTimeSql","scale","timestamp","UnixToTimeExpr","DivExpr","func","dateAddSql","kind","IntervalExpr","unitToVar","tsOrDsToDateSql","removeTsOrDsToDate","toSql","argKey","arg","TsOrDsToDateExpr","_COMMANDS_dec","_ORIGINAL_KEYWORDS_dec","_a","_init","MySQLTokenizer","Tokenizer","cache","commands","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_OPERATION_MODIFIERS_dec","_ENUM_TYPE_TOKENS_dec","_TYPE_TOKENS_dec","_PROFILE_TYPES_dec","_SCHEMA_UNNAMED_CONSTRAINTS_dec","_ALTER_ALTER_PARSERS_dec","_ALTER_PARSERS_dec","_CONSTRAINT_PARSERS_dec","_SET_PARSERS_dec","_PROPERTY_PARSERS_dec","_STATEMENT_PARSERS_dec","_FUNCTION_PARSERS_dec","_FUNCTIONS_dec","_RANGE_PARSERS_dec","_TABLE_ALIAS_TOKENS_dec","_DISJUNCTION_dec","_CONJUNCTION_dec","_FUNC_TOKENS_dec","_ID_VAR_TOKENS_dec","_MySQLParser","Parser","AndExpr","XorExpr","OrExpr","tokens","hint","EqExpr","SoundexExpr","JsonArrayContainsExpr","BitwiseAndAggExpr","BitwiseOrAggExpr","BitwiseXorAggExpr","BitwiseCountExpr","ConvertTimezoneExpr","CurrentDateExpr","buildDateDeltaWithInterval","DateAddExpr","buildFormattedTime","TimeToStrExpr","DateSubExpr","DayExpr","DayOfMonthExpr","DayOfWeekExpr","DayOfYearExpr","NumberToStrExpr","isnullToIsNull","LengthExpr","TimeFromPartsExpr","MonthExpr","LiteralExpr","CurrentSchemaExpr","buildDateDelta","TimestampDiffExpr","DateDiffExpr","VarExpr","CurrentVersionExpr","WeekExpr","WeekOfYearExpr","YearExpr","AnonymousExpr","LockPropertyExpr","ZeroFillColumnConstraintExpr","thisExpr","persisted","ComputedColumnConstraintExpr","GeneratedAsIdentityColumnConstraintExpr","ColumnPrefixExpr","indexType","expressions","opt","IndexConstraintOptionExpr","IndexColumnConstraintExpr","target","full","global","json","targetId","log","position","db","channel","like","where","types","query","offset","limit","mutex","forTable","forGroup","forUser","forRole","intoOutfile","ShowExpr","parts","SetItemExpr","charset","collate","parseInterval","fallbackToIdentifier","dataType","DataTypeExpr","CastExpr","index","visible","AlterIndexExpr","partitionCls","valueParser","PartitionByRangePropertyExpr","PartitionByListPropertyExpr","partitionExpressions","createExpressions","name","values","ColumnExpr","partRange","PartitionRangeExpr","PartitionExpr","partList","PartitionListExpr","wrappedOptional","inProps","_namedPrimaryKey","MySQLParser","_RESERVED_KEYWORDS_dec","_TIMESTAMP_FUNC_TYPES_dec","_CAST_MAPPING_dec","_SIGNED_CAST_MAPPING_dec","_CHAR_CAST_MAPPING_dec","_PROPERTIES_LOCATION_dec","_TYPE_MAPPING_dec","_TIMESTAMP_TYPE_MAPPING_dec","_UNSIGNED_TYPE_MAPPING_dec","_ORIGINAL_TRANSFORMS_dec","_NULL_ORDERING_SUPPORTED_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","_MySQLGenerator","Generator","modifiers","m","ArrayAggExpr","renameFunc","ChrExpr","e","noParenCurrentDateSql","DateStrToDateExpr","dateStrToDateSql","DateTruncExpr","GroupConcatExpr","ILikeExpr","noIlikeSql","JsonExtractScalarExpr","arrowJsonExtractSql","lengthOrCharLengthSql","LogicalOrExpr","LogicalAndExpr","MaxExpr","maxOrGreatest","MinExpr","minOrLeast","NullSafeEqExpr","NullSafeNeqExpr","PivotExpr","noPivotSql","SelectExpr","preprocess","eliminateDistinctOn","eliminateSemiAndAntiJoins","eliminateQualify","eliminateFullOuterJoin","unnestGenerateDateArrayUsingRecursiveCte","StrPositionExpr","strPositionSql","StuffExpr","SessionUserExpr","TableSampleExpr","noTablesampleSql","TimestampAddExpr","dateAddIntervalSql","TimestampSubExpr","TimeStrToUnixExpr","TimeStrToTimeExpr","timeStrToTimeSql","TrimExpr","trimSql","TruncExpr","TryCastExpr","noTrycastSql","TsOrDsAddExpr","TsOrDsDiffExpr","UnicodeExpr","UtcTimestampExpr","UtcTimeExpr","mapping","k","v","map","TransientPropertyExpr","VolatilePropertyExpr","PartitionedByPropertyExpr","acc","type","result","_options","toExpr","toThis","to","thisName","global_","mutexOrStatus","dtype","prefix","sql","startTs","timestampDiff","interval","dateAdd","fromTz","toTz","dt","_expression","unsupportedArgs","parent","partitions","create","MySQLGenerator","_VALID_INTERVAL_UNITS_dec","_TIME_MAPPING_dec","_EXPRESSION_METADATA_dec","_NORMALIZATION_STRATEGY_dec","Dialect","MySQLTyping"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as Ct}from"./chunk-Z5V6VOIN.js";import{j as Mt}from"./chunk-O2J5RKBN.js";import{$c as h,$o as Re,Ae as rr,An as pe,Bi as Nr,Ca as l,Cb as Bt,Cg as S,Ck as Pr,Cl as Yr,Dd as Kt,Dl as $r,Ep as Me,Fe as er,Fh as Sr,Fp as Le,Gh as k,Hb as it,Hl as V,Hq as be,Ic as at,Ie as ir,Ig as pr,Ih as hr,Ik as St,Il as v,Iq as Be,Jk as ht,Jl as Kr,Jq as Nt,Kk as qr,Kl as Vr,Kp as Z,Lh as fr,Lj as yr,Ll as vr,Lm as se,Lo as Ae,Lq as dt,Mf as Et,Mi as dr,Mj as wr,Mq as We,Nl as Jr,Od as Vt,Oj as Ur,Ol as Zr,Om as It,Op as ye,Pe as sr,Pl as Qr,Po as x,Qe as nr,Qf as ar,Qh as xr,Qp as we,Rj as F,Ro as le,Sn as ue,So as Se,Sq as He,Tb as st,Te as q,Tl as zr,To as he,Uk as Fr,Ul as Rt,Um as gt,Up as Ue,Va as qt,Vb as nt,Vk as Gr,Vp as Pe,W as Ut,Wa as Ft,Wd as X,Wp as Ot,Xm as ne,Xp as qe,Xq as z,Y as y,Ya as et,Yb as Wt,Yl as jr,Ym as ae,Yo as fe,Yp as mt,Za as Gt,Zh as Rr,Zl as C,Zn as B,_h as Ir,_i as Cr,_l as te,_o as xe,a as g,ac as d,ae as vt,aj as Mr,ap as _t,b as _,bg as ot,bh as ur,bi as gr,bn as Ee,bp as Ie,c as O,ca as n,d as u,de as Jt,dp as ge,eg as Er,fh as pt,fl as br,fq as Dt,ge as Zt,gl as K,gm as re,hg as or,hk as G,hl as Br,ie as Qt,il as Wr,ip as _e,iq as Q,ji as _r,jl as Hr,jp as Oe,kc as Ht,kd as kt,kh as Ar,ki as Or,kl as Xr,kp as me,la as Pt,lc as Xt,lp as W,mg as Tt,mn as oe,mq as Fe,ne as zt,ni as lt,np as De,op as J,p as rt,pd as Yt,pg as ct,pp as o,qg as Tr,qn as Te,r as A,rb as bt,ri as mr,rn as ce,rp as Ne,rq as Ge,si as Y,tl as b,ud as $t,ue as w,uh as ut,uq as H,ve as jt,vm as ee,vp as de,we as U,wh as lr,wl as kr,wm as ie,xe as tr,xg as cr,xh as At,xl as ft,ye as P,yi as $,za as N,zi as Dr,zj as Lr,zl as xt,zp as Ce}from"./chunk-KCNOE4DZ.js";var Xe,Lt;Xe=[A];var m=class{static get EXPRESSION_METADATA(){let i=new Map(De.EXPRESSION_METADATA),t=(e,s)=>{for(let E of e)i.set(E,s)};return t([w,q,U,P,Ur,F,b,re],{returns:"bigint"}),t([pr,Nr,Fr,Hr],{annotator:(e,s)=>e.annotateByArgs(s,["this"])}),i.set(sr,{annotator:(e,s)=>e.annotateByArgs(s,["this","expression"])}),i.set(Pr,{annotator:(e,s)=>s.args.this?e.annotateByArgs(s,["this"]):e.setType(s,"double")}),i.set(G,{returns:"varbinary"}),i}};Lt=g(null),u(Lt,10,"EXPRESSION_METADATA",Xe,m),_(Lt,m),O(Lt,3,m);function ui(r){let i=r.args.expression;return i&&!(i.isString&&i.args.this===this.dialect._constructor.INITCAP_DEFAULT_DELIMITER_CHARS)&&this.unsupported("INITCAP does not support custom delimiters in Presto."),`REGEXP_REPLACE(${this.sql(r,"this")}, '(\\w)(\\w*)', x -> UPPER(x[1]) || LOWER(x[2]))`}function Ai(r){let i;return r.args.asc instanceof vt&&!r.args.asc.args.this&&(i="(a, b) -> CASE WHEN a < b THEN 1 WHEN a > b THEN -1 ELSE 0 END"),this.func("ARRAY_SORT",[r.args.this,i])}function li(r){if(r.parent instanceof $t){r.transform(t=>t instanceof bt?t.name:t,{copy:!1});let i=r.args.expressions?.map(t=>t instanceof Zt||t instanceof it?this.sql(t):this.sql(t,"this"))||[];return this.sql(new Et({expressions:i.map(t=>new h({this:t,isString:!0}))}))}if(r.parent){let i=r.parent.findAll(nt);for(let t of i){if(t===r)continue;let e=[...t.findAll(Gt)];0<e.length&&t.parent instanceof it&&r.args.expressions?.push(...e)}}return this.schemaSql(r)}function Si(r){return this.unsupported("Presto does not support exact quantiles; using APPROX_PERCENTILE."),this.func("APPROX_PERCENTILE",[r.args.this,r.args.quantile])}function wt(r){return this.func("DATE_PARSE",[r.args.this,this.formatTime(r)])}function hi(r){let i=this.formatTime(r);if(i&&i!==T.TIME_FORMAT&&i!==T.DATE_FORMAT){let t=wt.call(this,r);return this.sql(new S({this:t,to:"date".toUpperCase()}))}return this.sql(new S({this:new S({this:r.args.this,to:"timestamp".toUpperCase()}),to:"date".toUpperCase()}))}function fi(r){let i=Ge(r),t=H(i);return this.func("DATE_ADD",[t,i.args.expression,i.args.this])}function xi(r){let i=new S({this:r.args.this,to:"timestamp".toUpperCase()}),t=new S({this:r.args.expression,to:"timestamp".toUpperCase()}),e=H(r);return this.func("DATE_DIFF",[e,t,i])}function Ri(r){return r.length===4?new B({this:n(r,0),weight:n(r,1),quantile:n(r,2),accuracy:n(r,3)}):r.length===3?new B({this:n(r,0),quantile:n(r,1),accuracy:n(r,2)}):B.fromArgList(r)}function Ii(r){return r.length===3?new C({this:n(r,0),hours:n(r,1),minutes:n(r,2)}):r.length===2?new C({this:n(r,0),zone:n(r,1)}):C.fromArgList(r)}function ke(r){return r.findAncestor(Bt,X)?this.functionFallbackSql(r):o("ARBITRARY").call(this,r)}function gi(r){let i=r.args.scale,t=this.sql(r,"this");return!i||i.toValue()===C.SECONDS.toValue()?o("FROM_UNIXTIME").call(this,r):`FROM_UNIXTIME(CAST(${t} AS DOUBLE) / POW(10, ${this.sql(i)}))`}function _i(r){return r.type||y(r,{dialect:this.dialect}),r.type instanceof l&&!d.INTEGER_TYPES.has(r.type.args.this)?new S({this:r,to:"bigint".toUpperCase()}):r}function Oi(r){let i=n(r,1);return i instanceof h&&i.setArgKey("this",(i.args.this??"").toUpperCase()),Z(V,{dialect:"teradata"})(r)}function yt(r,i={}){let{negateInterval:t=!1}=i;return function(e){let s=e.args.expression?_i.call(this,e.args.expression):new h({this:"0",isString:!1}),E=t?s.mul(-1):s;return this.func(r,[H(e),this.sql(E),this.sql(e,"this")])}}function mi(r){let i=r.args.this;if(i instanceof $){let t=i.args.this instanceof l?i.args.this.type:i.args.this,e=r.args.alias;if(e instanceof et&&t instanceof d&&t.isType("array")&&0<(t.args.expressions?.length||0)&&t.args.expressions?.[0].isType("struct")){let s=t.args.expressions[0].args.expressions;e.setArgKey("columns",s?.flatMap(E=>E instanceof l&&E.args.this instanceof l?E.args.this.copy():[]))}}else i instanceof Dr&&i.replace(new $({this:i.args.this instanceof l?i.args.this.copy():i.args.this?.toString()??""}));return We.call(this,r)}function Di(r){if(r instanceof X&&r.type){let i=r.args.laterals||[];for(let t of i){let e=t.args.alias;if(!(t.args.this instanceof $)||!(e instanceof et)||e.args.columns?.length!==1)continue;let s=e.args.this,E=e.args.columns[0]instanceof l?e.args.columns[0].name.toLowerCase():e.args.columns[0];for(let c of Ut(r,[at])){let p=c.args.db?.toString().toLowerCase(),L=c.args.table?.toString().toLowerCase(),tt=c.name.toLowerCase();p===E?c.setArgKey("table",c.args.db instanceof l?c.args.db.pop():c.args.db):L===E?c.setArgKey("table",s instanceof l?s.copy():s):tt===E&&c.parent instanceof rr&&c.parent.replace(new at({this:c.parent.args.expression,table:rt(s,"string",l)}))}}}return r}var Ye,$e,Ke,j,I=class extends(Ke=z,$e=[A],Ye=[A],Ke){static get HEX_STRINGS(){return[["x'","'"],["X'","'"]]}static get UNICODE_STRINGS(){let t=["U&","u&"],e=z.QUOTES,s=[];for(let E of e)for(let c of t)s.push([c+E,E]);return s}static get ORIGINAL_KEYWORDS(){let t={...z.KEYWORDS,"DEALLOCATE PREPARE":"command","DESCRIBE INPUT":"command","DESCRIBE OUTPUT":"command","RESET SESSION":"command",START:"begin",MATCH_RECOGNIZE:"matchRecognize",ROW:"struct",IPADDRESS:"ipaddress",IPPREFIX:"ipprefix",TDIGEST:"tdigest",HYPERLOGLOG:"hllsketch"};return delete t["/*+"],delete t.QUALIFY,t}};j=g(Ke),u(j,10,"UNICODE_STRINGS",$e,I),u(j,10,"ORIGINAL_KEYWORDS",Ye,I),_(j,I),O(j,3,I),I.NESTED_COMMENTS=!1;var Ve,ve,Je,Ze,Qe,M,f=class extends(Qe=N,Ze=[A],Je=[A],ve=[A],Ve=[A],Qe){static get ID_VAR_TOKENS(){return new Set([...N.ID_VAR_TOKENS,"sessionUser","currentCatalog","straightJoin"])}static get FUNCTIONS(){return{...N.FUNCTIONS,ARBITRARY:t=>gt.fromArgList(t),APPROX_DISTINCT:t=>se.fromArgList(t),APPROX_PERCENTILE:Ri,BITWISE_AND:Q(w),BITWISE_NOT:t=>new q({this:n(t,0)}),BITWISE_OR:Q(U),BITWISE_XOR:Q(P),CARDINALITY:t=>cr.fromArgList(t),CONTAINS:t=>Tt.fromArgList(t),DATE_ADD:t=>new ut({this:n(t,2),expression:n(t,1),unit:n(t,0)}),DATE_DIFF:t=>new At({this:n(t,2),expression:n(t,1),unit:n(t,0)}),DATE_FORMAT:Z(V,{dialect:"presto"}),DATE_PARSE:Z(ft,{dialect:"presto"}),DATE_TRUNC:ye,DAY_OF_WEEK:t=>k.fromArgList(t),DOW:t=>k.fromArgList(t),DOY:t=>hr.fromArgList(t),ELEMENT_AT:t=>new Jt({this:n(t,0),expressions:[t[1]],offset:1,safe:!0}),FROM_HEX:t=>Rt.fromArgList(t),FROM_UNIXTIME:Ii,FROM_UTF8:t=>new lt({this:n(t,0),replace:n(t,1),charset:new h({this:"utf-8",isString:!0})}),JSON_FORMAT:t=>new Lr({this:n(t,0),options:n(t,1),isJson:!0}),LEVENSHTEIN_DISTANCE:t=>F.fromArgList(t),NOW:t=>pt.fromArgList(t),REGEXP_EXTRACT:dt(St),REGEXP_EXTRACT_ALL:dt(ht),REGEXP_REPLACE:t=>new qr({this:n(t,0),expression:n(t,1),replacement:n(t,2)??""}),REPLACE:He,ROW:t=>Yr.fromArgList(t),SEQUENCE:t=>ot.fromArgList(t),SET_AGG:t=>It.fromArgList(t),SPLIT_TO_MAP:t=>xt.fromArgList(t),STRPOS:t=>new b({this:n(t,0),substr:n(t,1),occurrence:n(t,2)}),SLICE:t=>ct.fromArgList(t),TO_CHAR:Oi,TO_UNIXTIME:t=>v.fromArgList(t),TO_UTF8:t=>new Y({this:n(t,0),charset:new h({this:"utf-8",isString:!0})}),MD5:t=>G.fromArgList(t),SHA256:t=>new K({this:n(t,0),length:new h({this:"256",isString:!1})}),SHA512:t=>new K({this:n(t,0),length:new h({this:"512",isString:!1})}),WEEK:t=>fr.fromArgList(t)}}static get FUNCTION_PARSERS(){let t={...N.FUNCTION_PARSERS};return delete t.TRIM,t}static get TABLE_ALIAS_TOKENS(){return new Set([...N.TABLE_ALIAS_TOKENS,"straightJoin"])}};M=g(Qe),u(M,10,"ID_VAR_TOKENS",Ze,f),u(M,10,"FUNCTIONS",Je,f),u(M,10,"FUNCTION_PARSERS",ve,f),u(M,10,"TABLE_ALIAS_TOKENS",Ve,f),_(M,f),O(M,3,f),f.VALUES_FOLLOWED_BY_PAREN=!1,f.ZONE_AWARE_TIMESTAMP_CONSTRUCTOR=!0;var ze,je,ti,ri,ei,ii,si,R,a=class extends(si=W,ii=[A],ei=[A],ri=[A],ti=[A],je=[A],ze=[A],si){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 STRUCT_DELIMITER(){return["(",")"]}static get PROPERTIES_LOCATION(){return new Map([...W.PROPERTIES_LOCATION,[Yt,"unsupported"],[Vt,"unsupported"]])}static get TYPE_MAPPING(){return new Map([...W.TYPE_MAPPING,["binary","VARBINARY"],["bit","BOOLEAN"],["datetime","TIMESTAMP"],["datetime64","TIMESTAMP"],["float","REAL"],["hllsketch","HYPERLOGLOG"],["int","INTEGER"],["struct","ROW"],["text","VARCHAR"],["timestamptz","TIMESTAMP"],["timestampntz","TIMESTAMP"],["timetz","TIME"]])}static get ORIGINAL_TRANSFORMS(){return new Map([...W.TRANSFORMS,[gt,o("ARBITRARY")],[B,function(t){return this.func("APPROX_PERCENTILE",[t.args.this,t.args.weight,t.args.quantile,t.args.accuracy])}],[ee,o("MAX_BY")],[ie,o("MIN_BY")],[Et,x([Oe],function(t){return`ARRAY[${this.expressions(t,{flat:!0})}]`})],[Er,o("ANY_MATCH")],[or,o("CONCAT")],[Tt,o("CONTAINS")],[Tr,o("ARRAY_JOIN")],[It,o("SET_AGG")],[ct,o("SLICE")],[Ht,o("AT_TIMEZONE")],[w,function(t){return this.func("BITWISE_AND",[t.args.this,t.args.expression])}],[jt,function(t){return this.func("BITWISE_ARITHMETIC_SHIFT_LEFT",[t.args.this,t.args.expression])}],[q,function(t){return this.func("BITWISE_NOT",[t.args.this])}],[U,function(t){return this.func("BITWISE_OR",[t.args.this,t.args.expression])}],[tr,function(t){return this.func("BITWISE_ARITHMETIC_SHIFT_RIGHT",[t.args.this,t.args.expression])}],[P,function(t){return this.func("BITWISE_XOR",[t.args.this,t.args.expression])}],[S,x([_t])],[ur,()=>"CURRENT_TIME"],[pt,()=>"CURRENT_TIMESTAMP"],[Ar,()=>"CURRENT_USER"],[ut,yt("DATE_ADD")],[At,function(t){return this.func("DATE_DIFF",[H(t),t.args.expression,t.args.this])}],[_r,qe],[Or,function(t){return`CAST(DATE_FORMAT(${this.sql(t,"this")}, ${this.dialect._constructor.DATEINT_FORMAT}) AS INT)`}],[lr,yt("DATE_ADD",{negateInterval:!0})],[Sr,function(t){return`((${this.func("DAY_OF_WEEK",[t.args.this])} % 7) + 1)`}],[k,o("DAY_OF_WEEK")],[lt,function(t){return mt.call(this,t,"FROM_UTF8")}],[mr,function(t){return`CAST(DATE_PARSE(CAST(${this.sql(t,"this")} AS VARCHAR), ${this.dialect._constructor.DATEINT_FORMAT}) AS DATE)`}],[Y,function(t){return mt.call(this,t,"TO_UTF8")}],[kt,function(t){return`format=${this.sql(new h({this:t.name,isString:!0}))}`}],[ne,ke],[Xt,function(t){return`WITH_TIMEZONE(${this.sql(t,"this")}, ${this.sql(t,"zone")}) AT TIME ZONE 'UTC'`}],[ot,Nt],[dr,Nt],[Cr,Ne()],[ir,de],[Mr,ui],[ae,ke],[xr,function(t){return this.func("LAST_DAY_OF_MONTH",[t.args.this])}],[zt,mi],[yr,Ue],[F,function(t){return me.call(this,t,"insCost","delCost","subCost","maxDist"),o("LEVENSHTEIN_DISTANCE").call(this,t)}],[ce,o("BOOL_AND")],[Te,o("BOOL_OR")],[Wt,Ce],[pe,Si],[St,Dt],[ht,Dt],[wr,Pe],[nt,li],[Kt,function(t){return this.nakedProperty(t)}],[X,x([_e,he,Se,fe(1),Ie,Di])],[Xr,Ai],[b,function(t){return Me.call(this,t,{supportsOccurrence:!0})}],[kr,function(t){return`CAST(${wt.call(this,t)} AS DATE)`}],[xt,o("SPLIT_TO_MAP")],[ft,wt],[$r,Le],[st,x([le])],[Rr,function(t){return`CAST(${this.sql(t.args.this)} AS TIMESTAMP)`}],[Ir,yt("DATE_ADD")],[gr,we()],[Kr,Ot],[Vr,Ot],[vr,function(t){return this.func("TO_UNIXTIME",[this.func("DATE_PARSE",[t.args.this,this.dialect._constructor.TIME_FORMAT])])}],[V,function(t){return this.func("DATE_FORMAT",[t.args.this,this.formatTime(t)])}],[v,o("TO_UNIXTIME")],[ar,function(t){return this.func("DATE_FORMAT",[t.args.this,this.formatTime(t)])}],[Ee,x([_t])],[zr,function(t){return`CAST(SUBSTR(REPLACE(CAST(${this.sql(t,"this")} AS VARCHAR), '-', ''), 1, 8) AS INT)`}],[Jr,fi],[Zr,xi],[Qr,hi],[Rt,o("FROM_HEX")],[jr,function(t){return`DATE_FORMAT(FROM_UNIXTIME(${this.sql(t,"this")}), ${this.formatTime(t)})`}],[C,gi],[te,function(t){return`CAST(FROM_UNIXTIME(${this.sql(t,"this")}) AS VARCHAR)`}],[ue,o("VAR_POP")],[qt,x([Re])],[Ft,x([xe])],[Gr,o("TRUNCATE")],[oe,Fe],[G,o("MD5")],[br,o("SHA1")],[Br,o("SHA1")],[K,be],[Wr,Be]])}static get RESERVED_KEYWORDS(){return new Set(["alter","and","as","between","by","case","cast","constraint","create","cross","current_time","current_timestamp","deallocate","delete","describe","distinct","drop","else","end","escape","except","execute","exists","extract","false","for","from","full","group","having","in","inner","insert","intersect","into","is","join","left","like","natural","not","undefined","on","or","order","outer","prepare","right","select","table","then","true","union","using","values","when","where","with"])}extractSql(t){let e=t.name.toUpperCase();if(!e.startsWith("EPOCH"))return super.extractSql(t);let s;e==="EPOCH_MILLISECOND"?s=10**3:e==="EPOCH_MICROSECOND"?s=10**6:e==="EPOCH_NANOSECOND"&&(s=10**9);let E=t.args.expression,c=new S({this:E,to:d.build("TIMESTAMP")}),p=new v({this:c});return s&&(p=new nr({this:p,expression:new h({this:s.toString(),isString:!1})})),this.sql(p)}jsonFormatSql(t){let e=t.args.this,s=t.args.isJson;if(e&&!(s||e.type)&&(e=y(e,{dialect:this.dialect})),!(s||e?.isType("json"))){let E=new S({to:"json".toUpperCase()});e?.replace(E),E.setArgKey("this",e)}return this.functionFallbackSql(t)}md5Sql(t){let e=t.args.this;return!e?.type&&e&&(e=y(e,{dialect:this.dialect})),e?.isType(d.TEXT_TYPES)&&(e=new Y({this:e,charset:new h({this:"utf-8",isString:!0})})),this.func("LOWER",[this.func("TO_HEX",[this.func("MD5",[this.sql(e)])])])}strToUnixSql(t){let e=t.args.this,s=new S({this:e,to:"VARCHAR"}),E=e?.args.isString?new S({this:e,to:"timestamp".toUpperCase()}):e,c=this.func("DATE_PARSE",[s,this.formatTime(t)]),p=this.func("DATE_FORMAT",[E,this.formatTime(t)]),L=this.func("PARSE_DATETIME",[p,this.formatTime(t,Ct.INVERSE_TIME_MAPPING,Ct.INVERSE_TIME_TRIE)]),tt=this.func("COALESCE",[this.func("TRY",[c]),L]);return this.func("TO_UNIXTIME",[tt])}bracketSql(t){return t.args.safe?this.func("ELEMENT_AT",[t.args.this,t.args.this instanceof l?n(Pt(t.args.this,t.args.expressions??[],1-(t.args.offset||0),{dialect:this.dialect}),0):void 0]):super.bracketSql(t)}structSql(t){t.type||y(t,{dialect:this.dialect});let e=[],s=[],E=!1;for(let p of t.args.expressions||[])if(p instanceof er){if(Ae(p.type,"unknown"))E=!0;else{let L=typeof p.type=="string"?new d({this:p.type}):p.type;s.push(`${this.sql(p,"this")} ${this.sql(L)}`)}e.push(this.sql(p,"expression"))}else e.push(this.sql(p));let c=t.args.expressions?.length;return!c||s.length!==c?(E&&this.unsupported("Cannot convert untyped key-value definitions (try annotate_types)."),this.func("ROW",e)):`CAST(ROW(${e.join(", ")}) AS ROW(${s.join(", ")}))`}intervalSql(t){let e=t.text("unit").toUpperCase();return t.args.this&&e.startsWith("WEEK")?`(${t.args.this.name} * INTERVAL '7' DAY)`:super.intervalSql(t)}transactionSql(t){let e=t.args.modes;return`START TRANSACTION${e?` ${e.join(", ")}`:""}`}createSql(t){let e=t.args.this instanceof l?t.args.this:void 0;return t.args.kind==="view"&&e?.args.expressions&&e.setArgKey("expressions",void 0),super.createSql(t)}deleteSql(t){let e=t.args.tables||[t.args.this];if(1<e.length)return super.deleteSql(t);let s=e[0];if(t.setArgKey("this",s),t.setArgKey("tables",void 0),s instanceof st){let E=s.args.alias;E&&(E.pop(),t=t.transform(ge))}return super.deleteSql(t)}jsonExtractSql(t){let e=this.dialect.settings.variantExtractIsJsonExtract??!0;if(!t.args.variantExtract||e)return this.func("JSON_EXTRACT",[t.args.this,t.args.expression,...t.args.expressions||[]]);let s=this.sql(t,"this"),E=[];for(let c of rt(t.args.expression,l)?.args.expressions?.slice(1)||[]){if(!(c instanceof Qt)){this.unsupported(`Cannot transpile JSONPath segment '${c}' to ROW access`);continue}let p=c.args.this?.toString();/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(p??"")||(p=`"${p}"`),E.push(`.${p}`)}return`${s}${E.join("")}`}groupConcatSql(t){return this.func("ARRAY_JOIN",[this.func("ARRAY_AGG",[t.args.this]),t.args.separator])}};R=g(si),u(R,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",ii,a),u(R,10,"STRUCT_DELIMITER",ei,a),u(R,10,"PROPERTIES_LOCATION",ri,a),u(R,10,"TYPE_MAPPING",ti,a),u(R,10,"ORIGINAL_TRANSFORMS",je,a),u(R,10,"RESERVED_KEYWORDS",ze,a),_(R,a),O(R,3,a),a.SUPPORTS_DECODE_CASE=!1,a.SELECT_KINDS=[],a.INTERVAL_ALLOWS_PLURAL_FORM=!1,a.JOIN_HINTS=!1,a.TABLE_HINTS=!1,a.QUERY_HINTS=!1,a.IS_BOOL_ALLOWED=!1,a.TZ_TO_WITH_TIME_ZONE=!0,a.NVL2_SUPPORTED=!1,a.LIMIT_ONLY_LITERALS=!0,a.SUPPORTS_SINGLE_ARG_CONCAT=!1,a.LIKE_PROPERTY_INSIDE_SCHEMA=!0,a.MULTI_ARG_DISTINCT=!1,a.SUPPORTS_TO_NUMBER=!1,a.HEX_FUNC="TO_HEX",a.PARSE_JSON_NAME="JSON_PARSE",a.PAD_FILL_PATTERN_IS_REQUIRED=!0,a.EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE=!1,a.SUPPORTS_MEDIAN=!1,a.ARRAY_SIZE_NAME="CARDINALITY";var ni,ai,Ei,oi,Ti,ci,D,T=class extends(ci=J,Ti=[A],oi=[A],Ei=[A],ai=[A],ni=[A],ci){static get NULL_ORDERING(){return"nulls_are_last"}static get EXPRESSION_METADATA(){return new Map(m.EXPRESSION_METADATA)}static get TIME_FORMAT(){return Mt.TIME_FORMAT}static get TIME_MAPPING(){return Mt.TIME_MAPPING}static get NORMALIZATION_STRATEGY(){return"caseInsensitive"}static get SUPPORTED_SETTINGS(){return new Set([...J.SUPPORTED_SETTINGS,"variantExtractIsJsonExtract"])}};D=g(ci),u(D,10,"NULL_ORDERING",Ti,T),u(D,10,"TIME_FORMAT",oi,T),u(D,10,"TIME_MAPPING",Ei,T),u(D,10,"NORMALIZATION_STRATEGY",ai,T),u(D,10,"SUPPORTED_SETTINGS",ni,T),_(D,T),O(D,3,T),T.DIALECT_NAME="presto",T.UNNEST_REQUIRES_CROSS_JOIN=!0,T.INDEX_OFFSET=1,T.STRICT_STRING_CONCAT=!0,T.SUPPORTS_SEMI_ANTI_JOIN=!1,T.TYPED_DIVISION=!0,T.TABLESAMPLE_SIZE_IS_PERCENT=!0,T.LOG_BASE_FIRST=void 0,T.SUPPORTS_VALUES_DEFAULT=!1,T.LEAST_GREATEST_IGNORES_NULLS=!1,T.Tokenizer=I,T.Parser=f,T.Generator=a;J.register("presto",T);export{ui as a,Ai as b,li as c,Si as d,wt as e,hi as f,fi as g,xi as h,Ri as i,Ii as j,ke as k,gi as l,Oi as m,yt as n,mi as o,Di as p,T as q};
|
|
2
|
+
//# sourceMappingURL=chunk-PXUASP5I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/typing/presto.ts","../src/dialects/presto.ts"],"sourcesContent":["import type {\n Expression,\n} from '../expressions/expressions';\nimport {\n cache,\n} from '../port_internals';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n BitwiseAndExpr,\n BitwiseNotExpr,\n BitwiseOrExpr,\n BitwiseXorExpr,\n LengthExpr,\n LevenshteinExpr,\n StrPositionExpr,\n WidthBucketExpr,\n CeilExpr,\n FloorExpr,\n RoundExpr,\n SignExpr,\n ModExpr,\n RandExpr,\n Md5DigestExpr,\n} from '../expressions/expressions';\nimport type {\n TypeAnnotator,\n} from '../optimizer';\nimport {\n DialectTyping,\n} from './dialect';\nimport type {\n ExpressionMetadata,\n} from './dialect';\n\nexport class PrestoTyping {\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n // Clone the base metadata to apply dialect-specific overrides\n const map: ExpressionMetadata = new Map(DialectTyping.EXPRESSION_METADATA);\n\n const extend = (types: (typeof Expression)[], data: Record<string, unknown>) => {\n for (const type of types) map.set(type, data);\n };\n\n extend([\n BitwiseAndExpr,\n BitwiseNotExpr,\n BitwiseOrExpr,\n BitwiseXorExpr,\n LengthExpr,\n LevenshteinExpr,\n StrPositionExpr,\n WidthBucketExpr,\n ], {\n returns: DataTypeExprKind.BIGINT,\n });\n\n extend([\n CeilExpr,\n FloorExpr,\n RoundExpr,\n SignExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => s.annotateByArgs(e, [\n 'this',\n ]),\n });\n\n map.set(ModExpr, {\n annotator: (s: TypeAnnotator, e: ModExpr) => s.annotateByArgs(e, [\n 'this',\n 'expression',\n ]),\n });\n\n map.set(RandExpr, {\n annotator: (s: TypeAnnotator, e: RandExpr) =>\n e.args.this\n ? s.annotateByArgs(e, [\n 'this',\n ])\n : s.setType(e, DataTypeExprKind.DOUBLE),\n });\n\n map.set(Md5DigestExpr, {\n returns: DataTypeExprKind.VARBINARY,\n });\n\n return map;\n }\n}\n","import type {\n GroupConcatExpr,\n CreateExpr,\n DeleteExpr,\n TransactionExpr,\n JsonExtractExpr,\n IntervalExpr,\n StrToUnixExpr,\n Md5Expr,\n ExtractExpr,\n} from '../expressions';\nimport {\n Expression,\n ColumnExpr,\n DotExpr,\n DataTypeExprKind, LocationPropertyExpr, PropertyEqExpr, StructExpr,\n SchemaExpr,\n PartitionedByPropertyExpr,\n IdentifierExpr,\n ArrayExpr,\n LiteralExpr,\n ColumnDefExpr,\n PropertyExpr,\n BooleanExpr,\n FuncExpr,\n CastExpr,\n TableExpr,\n JsonPathKeyExpr,\n CreateExprKind,\n EncodeExpr,\n DataTypeExpr,\n MulExpr,\n TimeToUnixExpr,\n TimeStrToDateExpr,\n TimestampTruncExpr,\n TimeStrToUnixExpr,\n TimeStrToTimeExpr,\n TimestampAddExpr,\n TimestampExpr,\n RegexpReplaceExpr,\n LevenshteinExpr,\n CurrentTimestampExpr,\n RegexpExtractExpr,\n GenerateSeriesExpr,\n ArrayUniqueAggExpr,\n StrToMapExpr,\n StrPositionExpr,\n RegexpExtractAllExpr,\n ArraySliceExpr,\n Md5DigestExpr,\n Sha2Expr,\n WeekOfYearExpr,\n DateDiffExpr,\n TimeToStrExpr,\n DayOfWeekIsoExpr,\n DayOfYearExpr,\n UnhexExpr,\n DecodeExpr,\n AnyValueExpr,\n ApproxDistinctExpr,\n BitwiseAndExpr,\n BitwiseNotExpr,\n BitwiseOrExpr,\n BitwiseXorExpr,\n ArraySizeExpr,\n ArrayContainsExpr,\n DateAddExpr,\n PropertiesLocation,\n InitcapExpr,\n SortArrayExpr,\n QuantileExpr,\n StrToDateExpr,\n StrToTimeExpr,\n TsOrDsToDateExpr,\n BracketExpr,\n JsonFormatExpr,\n VolatilePropertyExpr,\n ApproxQuantileExpr,\n ArgMaxExpr,\n ArgMinExpr,\n ArrayAnyExpr,\n ArrayConcatExpr,\n ArrayToStringExpr,\n AtTimeZoneExpr,\n BitwiseLeftShiftExpr,\n BitwiseRightShiftExpr,\n CurrentTimeExpr,\n CurrentUserExpr,\n DateStrToDateExpr,\n DateToDiExpr,\n DateSubExpr,\n DayOfWeekExpr,\n DiToDateExpr,\n FileFormatPropertyExpr,\n FirstExpr,\n FromTimeZoneExpr,\n SelectExpr,\n SchemaCommentPropertyExpr,\n RightExpr,\n StructExtractExpr,\n PivotExpr,\n LogicalAndExpr,\n LogicalOrExpr,\n GenerateDateArrayExpr,\n IfExpr,\n ILikeExpr,\n LastExpr,\n LastDayExpr,\n LateralExpr,\n LeftExpr,\n Sha2DigestExpr,\n Sha1DigestExpr,\n ShaExpr,\n XorExpr,\n TruncExpr,\n WithinGroupExpr,\n WithExpr,\n VariancePopExpr,\n UnixToTimeStrExpr,\n UnixToTimeExpr,\n UnixToStrExpr,\n TsOrDsDiffExpr,\n TsOrDsAddExpr,\n TsOrDiToDiExpr,\n TryCastExpr,\n ToCharExpr,\n InlineExpr,\n ExplodeExpr,\n TableAliasExpr,\n MatchRecognizeExpr,\n isType,\n} from '../expressions';\nimport {\n annotateTypes, findAllInScope,\n} from '../optimizer';\nimport {\n Parser,\n} from '../parser';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n Tokenizer, TokenType,\n} from '../tokens';\nimport {\n Generator, unsupportedArgs,\n} from '../generator';\nimport {\n addRecursiveCteColumnNames,\n eliminateDistinctOn,\n eliminateQualify,\n eliminateSemiAndAntiJoins,\n eliminateWindowClause,\n epochCastToTs, explodeProjectionToUnnest, inheritStructFieldNames, preprocess, removeWithinGroupForPercentiles, unnestGenerateSeries, unqualifyColumns,\n} from '../transforms';\nimport {\n applyIndexOffset, seqGet,\n} from '../helper';\nimport {\n cache, narrowInstanceOf,\n} from '../port_internals';\nimport {\n PrestoTyping,\n} from '../typing/presto';\nimport type {\n DateAddOrSub,\n} from './dialect';\nimport {\n binaryFromFunction,\n boolXorSql,\n buildFormattedTime,\n buildRegexpExtract,\n buildReplaceWithOptionalReplacement,\n dateStrToDateSql,\n dateTruncToTime,\n Dialect, Dialects, encodeDecodeSql, explodeToUnnestSql, ifSql, leftToSubstringSql, noIlikeSql, noPivotSql, NormalizationStrategy,\n regexpExtractSql,\n renameFunc,\n rightToSubstringSql,\n sequenceSql,\n sha256Sql,\n sha2DigestSql,\n strPositionSql,\n structExtractSql,\n timestampTruncSql,\n timeStrToTimeSql,\n tsOrDsAddCast,\n unitToStr,\n NullOrdering,\n} from './dialect';\nimport {\n MySQL,\n} from './mysql';\nimport {\n Hive,\n} from './hive';\n\n/**\n * Presto doesn't have a native INITCAP. We simulate it using REGEXP_REPLACE with a lambda.\n * It transforms 'hello world' into 'Hello World'.\n */\nexport function initcapSql (this: Generator, expression: InitcapExpr): string {\n const delimiters = expression.args.expression;\n\n // Presto's simulation only supports default whitespace delimiters\n if (delimiters && !(delimiters.isString && delimiters.args.this === this.dialect._constructor.INITCAP_DEFAULT_DELIMITER_CHARS)) {\n this.unsupported('INITCAP does not support custom delimiters in Presto.');\n }\n\n const regex = '(\\\\w)(\\\\w*)';\n const lambda = 'x -> UPPER(x[1]) || LOWER(x[2])';\n return `REGEXP_REPLACE(${this.sql(expression, 'this')}, '${regex}', ${lambda})`;\n}\n\n/**\n * Presto uses ARRAY_SORT. If descending is requested, we provide a custom comparator lambda.\n */\nexport function noSortArray (this: Generator, expression: SortArrayExpr): string {\n let comparator: string | undefined;\n\n if (expression.args.asc instanceof BooleanExpr && !expression.args.asc.args.this) {\n comparator = '(a, b) -> CASE WHEN a < b THEN 1 WHEN a > b THEN -1 ELSE 0 END';\n }\n\n return this.func('ARRAY_SORT', [\n expression.args.this,\n comparator,\n ]);\n}\n\n/**\n * Handles schema generation, with special logic for PARTITIONED BY properties\n * where column names must be rendered as string literals within an array.\n */\nexport function schemaSql (this: Generator, expression: SchemaExpr): string {\n if (expression.parent instanceof PartitionedByPropertyExpr) {\n // Columns in the ARRAY[] string literals should not be quoted identifiers\n expression.transform((n) => {\n if (n instanceof IdentifierExpr) return n.name;\n return n;\n }, {\n copy: false,\n });\n\n const partitionExprs = expression.args.expressions?.map((c) => {\n return (c instanceof FuncExpr || c instanceof PropertyExpr)\n ? this.sql(c)\n : this.sql(c, 'this');\n }) || [\n ];\n\n return this.sql(\n new ArrayExpr({\n expressions: partitionExprs.map((c) => new LiteralExpr({\n this: c,\n isString: true,\n })),\n }),\n );\n }\n\n // Pre-process column definitions if they are nested in other properties\n if (expression.parent) {\n const siblings = expression.parent.findAll(SchemaExpr);\n for (const schema of siblings) {\n if (schema === expression) continue;\n\n const columnDefs = [\n ...schema.findAll(ColumnDefExpr),\n ];\n if (0 < columnDefs.length && schema.parent instanceof PropertyExpr) {\n expression.args.expressions?.push(...columnDefs);\n }\n }\n }\n\n return this.schemaSql(expression);\n}\n\n/**\n * Presto lacks exact quantiles, so we pivot to the approximate version.\n */\nexport function quantileSql (this: Generator, expression: QuantileExpr): string {\n this.unsupported('Presto does not support exact quantiles; using APPROX_PERCENTILE.');\n return this.func('APPROX_PERCENTILE', [\n expression.args.this,\n expression.args.quantile,\n ]);\n}\n\n/**\n * Maps StrToDate/Time to Presto's DATE_PARSE function.\n */\nexport function strToTimeSql (\n this: Generator,\n expression: StrToDateExpr | StrToTimeExpr | TsOrDsToDateExpr,\n): string {\n return this.func('DATE_PARSE', [\n expression.args.this,\n this.formatTime(expression),\n ]);\n}\n\n/**\n * Handles converting a Timestamp or DateString to a Date.\n * If a custom format is provided, it uses DATE_PARSE; otherwise, it performs a nested cast.\n */\nexport function tsOrDsToDateSql (this: Generator, expression: TsOrDsToDateExpr): string {\n const timeFormat = this.formatTime(expression);\n\n if (timeFormat && timeFormat !== Presto.TIME_FORMAT && timeFormat !== Presto.DATE_FORMAT) {\n const parsedTime = strToTimeSql.call(this, expression); // from previous step\n return this.sql(new CastExpr({\n this: parsedTime,\n to: DataTypeExprKind.DATE.toUpperCase(),\n }));\n }\n\n // Standard case: CAST(CAST(x AS TIMESTAMP) AS DATE)\n return this.sql(\n new CastExpr({\n this: new CastExpr({\n this: expression.args.this,\n to: DataTypeExprKind.TIMESTAMP.toUpperCase(),\n }),\n to: DataTypeExprKind.DATE.toUpperCase(),\n }),\n );\n}\n\nexport function tsOrDsAddSql (this: Generator, expression: TsOrDsAddExpr): string {\n const standardized = tsOrDsAddCast(expression);\n const unit = unitToStr(standardized);\n return this.func('DATE_ADD', [\n unit,\n standardized.args.expression,\n standardized.args.this,\n ]);\n}\n\nexport function tsOrDsDiffSql (this: Generator, expression: TsOrDsDiffExpr): string {\n const thisTs = new CastExpr({\n this: expression.args.this,\n to: DataTypeExprKind.TIMESTAMP.toUpperCase(),\n });\n const exprTs = new CastExpr({\n this: expression.args.expression,\n to: DataTypeExprKind.TIMESTAMP.toUpperCase(),\n });\n const unit = unitToStr(expression);\n return this.func('DATE_DIFF', [\n unit,\n exprTs,\n thisTs,\n ]);\n}\n\n/**\n * Builder for approximate percentiles which maps to ApproxQuantile AST nodes.\n */\nexport function buildApproxPercentile (args: Expression[]): ApproxQuantileExpr {\n if (args.length === 4) {\n return new ApproxQuantileExpr({\n this: seqGet(args, 0),\n weight: seqGet(args, 1),\n quantile: seqGet(args, 2),\n accuracy: seqGet(args, 3),\n });\n }\n if (args.length === 3) {\n return new ApproxQuantileExpr({\n this: seqGet(args, 0),\n quantile: seqGet(args, 1),\n accuracy: seqGet(args, 2),\n });\n }\n return ApproxQuantileExpr.fromArgList(args);\n}\n\n/**\n * Builder for FROM_UNIXTIME, supporting timezone and offset arguments.\n */\nexport function buildFromUnixtime (args: Expression[]): UnixToTimeExpr {\n if (args.length === 3) {\n return new UnixToTimeExpr({\n this: seqGet(args, 0),\n hours: seqGet(args, 1),\n minutes: seqGet(args, 2),\n });\n }\n if (args.length === 2) {\n return new UnixToTimeExpr({\n this: seqGet(args, 0),\n zone: seqGet(args, 1),\n });\n }\n\n return UnixToTimeExpr.fromArgList(args);\n}\n\n/**\n * In Trino, FIRST/LAST are navigation functions within MATCH_RECOGNIZE.\n * Everywhere else, they are treated as ARBITRARY.\n */\nexport function firstLastSql (this: Generator, expression: FuncExpr): string {\n if (expression.findAncestor<MatchRecognizeExpr | SelectExpr>(MatchRecognizeExpr, SelectExpr)) {\n return this.functionFallbackSql(expression);\n }\n return renameFunc('ARBITRARY').call(this, expression);\n}\n\n/**\n * Handles UNIX timestamp conversion, potentially scaling for milliseconds/microseconds.\n */\nexport function unixToTimeSql (this: Generator, expression: UnixToTimeExpr): string {\n const scale = expression.args.scale;\n const timestamp = this.sql(expression, 'this');\n\n if (!scale || scale.toValue() === UnixToTimeExpr.SECONDS.toValue()) {\n return renameFunc('FROM_UNIXTIME').call(this, expression);\n }\n\n // Presto expects seconds (Double) for from_unixtime\n return `FROM_UNIXTIME(CAST(${timestamp} AS DOUBLE) / POW(10, ${this.sql(scale)}))`;\n}\n\n/**\n * Ensures a value is an Integer for date arithmetic. Casts to BIGINT if necessary.\n */\nfunction toInt (this: Generator, expression: Expression): Expression {\n if (!expression.type) {\n annotateTypes(expression, {\n dialect: this.dialect,\n });\n }\n if (expression.type instanceof Expression && !DataTypeExpr.INTEGER_TYPES.has(expression.type.args.this as DataTypeExprKind)) {\n return new CastExpr({\n this: expression,\n to: DataTypeExprKind.BIGINT.toUpperCase(),\n });\n }\n return expression;\n}\n\n/**\n * Presto's TO_CHAR implementation actually follows Teradata's format conventions.\n */\nexport function buildToChar (args: Expression[]): TimeToStrExpr {\n const fmt = seqGet(args, 1);\n if (fmt instanceof LiteralExpr) {\n fmt.setArgKey('this', (fmt.args.this ?? '').toUpperCase());\n }\n return buildFormattedTime(TimeToStrExpr, {\n dialect: Dialects.TERADATA,\n })(args);\n}\n\n/**\n * Higher-order function to create SQL for date addition or subtraction.\n */\nexport function dateDeltaSql (name: string, options: {negateInterval?: boolean} = {}): (this: Generator, expression: DateAddOrSub) => string {\n const {\n negateInterval = false,\n } = options;\n return function (this: Generator, expression: DateAddOrSub): string {\n const interval = expression.args.expression\n ? toInt.call(this, expression.args.expression)\n : new LiteralExpr({\n this: '0',\n isString: false,\n });\n const finalInterval = negateInterval ? interval.mul(-1) : interval;\n\n return this.func(\n name,\n [\n unitToStr(expression),\n this.sql(finalInterval),\n this.sql(expression, 'this'),\n ],\n );\n };\n}\n\n/**\n * Converts Spark/Hive style EXPLODE into Presto UNNEST, with special handling for\n * Arrays of Structs which Presto flattens into multiple columns.\n */\nexport function explodeToUnnestSqlPresto (this: Generator, expression: LateralExpr): string {\n const explode = expression.args.this;\n\n if (explode instanceof ExplodeExpr) {\n const explodedType = explode.args.this instanceof Expression ? explode.args.this.type : explode.args.this;\n const alias = expression.args.alias;\n\n // Best-effort transpilation for LATERAL VIEW EXPLODE on a struct array\n if (\n alias instanceof TableAliasExpr\n && explodedType instanceof DataTypeExpr\n && explodedType.isType(DataTypeExprKind.ARRAY)\n && 0 < (explodedType.args.expressions?.length || 0)\n && explodedType.args.expressions?.[0].isType(DataTypeExprKind.STRUCT)\n ) {\n // Presto unnesting a ROW produces N columns. We fix the alias to match the internal struct fields.\n const structFields = explodedType.args.expressions[0].args.expressions;\n alias.setArgKey('columns', structFields?.flatMap((c) => c instanceof Expression && c.args.this instanceof Expression\n ? c.args.this.copy()\n : [\n ]));\n }\n } else if (explode instanceof InlineExpr) {\n // Presto doesn't have INLINE; we pivot to EXPLODE\n explode.replace(new ExplodeExpr({\n this: explode.args.this instanceof Expression ? explode.args.this.copy() : explode.args.this?.toString() ?? '',\n }));\n }\n\n return explodeToUnnestSql.call(this, expression);\n}\n\n/**\n * Fixes column qualifications in a SELECT scope after an EXPLODE -> UNNEST transformation.\n * Useful when transpiling from Spark where fields might be qualified with the struct name.\n */\nexport function amendExplodedColumnTable (expression: Expression): Expression {\n // Types must be inferred (annotated) for this amendment to work safely\n if (expression instanceof SelectExpr && expression.type) {\n const laterals = expression.args.laterals || [\n ];\n\n for (const lateral of laterals) {\n const alias = lateral.args.alias;\n\n if (\n !(lateral.args.this instanceof ExplodeExpr)\n || !(alias instanceof TableAliasExpr)\n || alias.args.columns?.length !== 1\n ) {\n continue;\n }\n\n const newTable = alias.args.this;\n const oldTable = alias.args.columns[0] instanceof Expression ? alias.args.columns[0].name.toLowerCase() : alias.args.columns[0];\n\n // Find all columns in the current scope that might be incorrectly qualified\n for (const column of findAllInScope(expression, [\n ColumnExpr,\n ])) {\n const colDb = column.args.db?.toString().toLowerCase();\n const colTable = column.args.table?.toString().toLowerCase();\n const colName = column.name.toLowerCase();\n\n if (colDb === oldTable) {\n // Move the 'db' reference to 'table' as part of the flattening\n column.setArgKey('table', column.args.db instanceof Expression ? column.args.db.pop() : column.args.db);\n } else if (colTable === oldTable) {\n // Re-map the table reference to the new unnested table alias\n column.setArgKey('table', newTable instanceof Expression ? newTable.copy() : newTable);\n } else if (colName === oldTable && column.parent instanceof DotExpr) {\n // Handle Dot notation (struct.field) by replacing it with a flat column reference\n column.parent.replace(new ColumnExpr({\n this: column.parent.args.expression,\n table: narrowInstanceOf(newTable as unknown, 'string', Expression),\n }));\n }\n }\n }\n }\n\n return expression;\n}\n\nclass PrestoTokenizer extends Tokenizer {\n static get HEX_STRINGS (): TokenPair[] {\n return [\n [\n 'x\\'',\n '\\'',\n ],\n [\n 'X\\'',\n '\\'',\n ],\n ];\n }\n\n @cache\n static get UNICODE_STRINGS (): TokenPair[] {\n const prefixes = [\n 'U&',\n 'u&',\n ];\n const quotes = Tokenizer.QUOTES as string[];\n const result: [string, string][] = [\n ];\n\n for (const q of quotes) {\n for (const p of prefixes) {\n result.push([\n p + q,\n q,\n ]);\n }\n }\n return result;\n }\n\n static NESTED_COMMENTS = false;\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n const keywords = {\n ...Tokenizer.KEYWORDS,\n 'DEALLOCATE PREPARE': TokenType.COMMAND,\n 'DESCRIBE INPUT': TokenType.COMMAND,\n 'DESCRIBE OUTPUT': TokenType.COMMAND,\n 'RESET SESSION': TokenType.COMMAND,\n 'START': TokenType.BEGIN,\n 'MATCH_RECOGNIZE': TokenType.MATCH_RECOGNIZE,\n 'ROW': TokenType.STRUCT,\n 'IPADDRESS': TokenType.IPADDRESS,\n 'IPPREFIX': TokenType.IPPREFIX,\n 'TDIGEST': TokenType.TDIGEST,\n 'HYPERLOGLOG': TokenType.HLLSKETCH,\n } as Record<string, TokenType>;\n\n // Remove Hive-style hints and BigQuery-style QUALIFY from base keywords\n delete keywords['/*+'];\n delete keywords['QUALIFY'];\n\n return keywords;\n }\n}\n\nclass PrestoParser 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 static VALUES_FOLLOWED_BY_PAREN = false;\n static ZONE_AWARE_TIMESTAMP_CONSTRUCTOR = true;\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return {\n ...Parser.FUNCTIONS,\n ARBITRARY: (args: unknown[]) => AnyValueExpr.fromArgList(args),\n APPROX_DISTINCT: (args: unknown[]) => ApproxDistinctExpr.fromArgList(args),\n APPROX_PERCENTILE: buildApproxPercentile,\n BITWISE_AND: binaryFromFunction(BitwiseAndExpr),\n BITWISE_NOT: (args: Expression[]) => new BitwiseNotExpr({\n this: seqGet(args, 0),\n }),\n BITWISE_OR: binaryFromFunction(BitwiseOrExpr),\n BITWISE_XOR: binaryFromFunction(BitwiseXorExpr),\n CARDINALITY: (args: unknown[]) => ArraySizeExpr.fromArgList(args),\n CONTAINS: (args: unknown[]) => ArrayContainsExpr.fromArgList(args),\n // Presto/Trino: DATE_ADD(unit, value, timestamp)\n DATE_ADD: (args: Expression[]) =>\n new DateAddExpr({\n this: seqGet(args, 2),\n expression: seqGet(args, 1),\n unit: seqGet(args, 0),\n }),\n DATE_DIFF: (args: Expression[]) =>\n new DateDiffExpr({\n this: seqGet(args, 2),\n expression: seqGet(args, 1),\n unit: seqGet(args, 0),\n }),\n DATE_FORMAT: buildFormattedTime(TimeToStrExpr, {\n dialect: Dialects.PRESTO,\n }),\n DATE_PARSE: buildFormattedTime(StrToTimeExpr, {\n dialect: Dialects.PRESTO,\n }),\n DATE_TRUNC: dateTruncToTime,\n DAY_OF_WEEK: (args: unknown[]) => DayOfWeekIsoExpr.fromArgList(args),\n DOW: (args: unknown[]) => DayOfWeekIsoExpr.fromArgList(args),\n DOY: (args: unknown[]) => DayOfYearExpr.fromArgList(args),\n // ELEMENT_AT is 1-indexed and returns NULL instead of throwing on out-of-bounds\n ELEMENT_AT: (args: Expression[]) =>\n new BracketExpr({\n this: seqGet(args, 0),\n expressions: [\n args[1],\n ],\n offset: 1,\n safe: true,\n }),\n FROM_HEX: (args: unknown[]) => UnhexExpr.fromArgList(args),\n FROM_UNIXTIME: buildFromUnixtime,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FROM_UTF8: (args: any[]) =>\n new DecodeExpr({\n this: seqGet(args, 0),\n replace: seqGet(args, 1),\n charset: new LiteralExpr({\n this: 'utf-8',\n isString: true,\n }),\n }),\n JSON_FORMAT: (args: Expression[]) =>\n new JsonFormatExpr({\n this: seqGet(args, 0),\n options: seqGet(args, 1),\n isJson: true,\n }),\n LEVENSHTEIN_DISTANCE: (args: unknown[]) => LevenshteinExpr.fromArgList(args),\n NOW: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n REGEXP_EXTRACT: buildRegexpExtract(RegexpExtractExpr),\n REGEXP_EXTRACT_ALL: buildRegexpExtract(RegexpExtractAllExpr),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n REGEXP_REPLACE: (args: any[]) =>\n new RegexpReplaceExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n replacement: seqGet(args, 2) ?? '',\n }),\n REPLACE: buildReplaceWithOptionalReplacement,\n ROW: (args: unknown[]) => StructExpr.fromArgList(args),\n SEQUENCE: (args: unknown[]) => GenerateSeriesExpr.fromArgList(args),\n SET_AGG: (args: unknown[]) => ArrayUniqueAggExpr.fromArgList(args),\n SPLIT_TO_MAP: (args: unknown[]) => StrToMapExpr.fromArgList(args),\n STRPOS: (args: Expression[]) =>\n new StrPositionExpr({\n this: seqGet(args, 0),\n substr: seqGet(args, 1),\n occurrence: seqGet(args, 2),\n }),\n SLICE: (args: unknown[]) => ArraySliceExpr.fromArgList(args),\n TO_CHAR: buildToChar,\n TO_UNIXTIME: (args: unknown[]) => TimeToUnixExpr.fromArgList(args),\n TO_UTF8: (args: Expression[]) =>\n new EncodeExpr({\n this: seqGet(args, 0),\n charset: new LiteralExpr({\n this: 'utf-8',\n isString: true,\n }),\n }),\n MD5: (args: unknown[]) => Md5DigestExpr.fromArgList(args),\n SHA256: (args: Expression[]) =>\n new Sha2Expr({\n this: seqGet(args, 0),\n length: new LiteralExpr({\n this: '256',\n isString: false,\n }),\n }),\n SHA512: (args: Expression[]) =>\n new Sha2Expr({\n this: seqGet(args, 0),\n length: new LiteralExpr({\n this: '512',\n isString: false,\n }),\n }),\n WEEK: (args: unknown[]) => WeekOfYearExpr.fromArgList(args),\n };\n }\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n const parsers = {\n ...Parser.FUNCTION_PARSERS,\n };\n // Presto uses its own TRIM logic, so we remove the base SQL parser\n delete parsers['TRIM'];\n return parsers;\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}\nclass PrestoGenerator 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 static INTERVAL_ALLOWS_PLURAL_FORM = false;\n static JOIN_HINTS = false;\n static TABLE_HINTS = false;\n static QUERY_HINTS = false;\n static IS_BOOL_ALLOWED = false;\n static TZ_TO_WITH_TIME_ZONE = true;\n static NVL2_SUPPORTED = false;\n @cache\n static get STRUCT_DELIMITER () {\n return [\n '(',\n ')',\n ] as [string, string];\n }\n\n static LIMIT_ONLY_LITERALS = true;\n static SUPPORTS_SINGLE_ARG_CONCAT = false;\n static LIKE_PROPERTY_INSIDE_SCHEMA = true;\n static MULTI_ARG_DISTINCT = false;\n static SUPPORTS_TO_NUMBER = false;\n static HEX_FUNC = 'TO_HEX';\n static PARSE_JSON_NAME = 'JSON_PARSE';\n static PAD_FILL_PATTERN_IS_REQUIRED = true;\n static EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = false;\n static SUPPORTS_MEDIAN = false;\n static ARRAY_SIZE_NAME = 'CARDINALITY';\n\n @cache\n static get PROPERTIES_LOCATION () {\n return new Map([\n ...Generator.PROPERTIES_LOCATION,\n [\n LocationPropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n [\n VolatilePropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n ]);\n }\n\n @cache\n static get TYPE_MAPPING () {\n return new Map([\n ...Generator.TYPE_MAPPING,\n [\n DataTypeExprKind.BINARY,\n 'VARBINARY',\n ],\n [\n DataTypeExprKind.BIT,\n 'BOOLEAN',\n ],\n [\n DataTypeExprKind.DATETIME,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.DATETIME64,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.FLOAT,\n 'REAL',\n ],\n [\n DataTypeExprKind.HLLSKETCH,\n 'HYPERLOGLOG',\n ],\n [\n DataTypeExprKind.INT,\n 'INTEGER',\n ],\n [\n DataTypeExprKind.STRUCT,\n 'ROW',\n ],\n [\n DataTypeExprKind.TEXT,\n 'VARCHAR',\n ],\n [\n DataTypeExprKind.TIMESTAMPTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMETZ,\n 'TIME',\n ],\n ]);\n }\n\n @cache\n static get ORIGINAL_TRANSFORMS () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Generator.TRANSFORMS,\n [\n AnyValueExpr,\n renameFunc('ARBITRARY'),\n ],\n [\n ApproxQuantileExpr,\n function (this: Generator, e: ApproxQuantileExpr) {\n return this.func(\n 'APPROX_PERCENTILE',\n [\n e.args.this,\n e.args.weight,\n e.args.quantile,\n e.args.accuracy,\n ],\n );\n },\n ],\n [\n ArgMaxExpr,\n renameFunc('MAX_BY'),\n ],\n [\n ArgMinExpr,\n renameFunc('MIN_BY'),\n ],\n [\n ArrayExpr,\n preprocess(\n [\n inheritStructFieldNames,\n ],\n function (this: Generator, e) {\n return `ARRAY[${this.expressions(e, {\n flat: true,\n })}]`;\n },\n ),\n ],\n [\n ArrayAnyExpr,\n renameFunc('ANY_MATCH'),\n ],\n [\n ArrayConcatExpr,\n renameFunc('CONCAT'),\n ],\n [\n ArrayContainsExpr,\n renameFunc('CONTAINS'),\n ],\n [\n ArrayToStringExpr,\n renameFunc('ARRAY_JOIN'),\n ],\n [\n ArrayUniqueAggExpr,\n renameFunc('SET_AGG'),\n ],\n [\n ArraySliceExpr,\n renameFunc('SLICE'),\n ],\n [\n AtTimeZoneExpr,\n renameFunc('AT_TIMEZONE'),\n ],\n [\n BitwiseAndExpr,\n function (this: Generator, e: BitwiseAndExpr) {\n return this.func('BITWISE_AND', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n BitwiseLeftShiftExpr,\n function (this: Generator, e: BitwiseLeftShiftExpr) {\n return this.func('BITWISE_ARITHMETIC_SHIFT_LEFT', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n BitwiseNotExpr,\n function (this: Generator, e: BitwiseNotExpr) {\n return this.func('BITWISE_NOT', [\n e.args.this,\n ]);\n },\n ],\n [\n BitwiseOrExpr,\n function (this: Generator, e: BitwiseOrExpr) {\n return this.func('BITWISE_OR', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n BitwiseRightShiftExpr,\n function (this: Generator, e: BitwiseRightShiftExpr) {\n return this.func('BITWISE_ARITHMETIC_SHIFT_RIGHT', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n BitwiseXorExpr,\n function (this: Generator, e: BitwiseXorExpr) {\n return this.func('BITWISE_XOR', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n CastExpr,\n preprocess([\n epochCastToTs,\n ]),\n ],\n [\n CurrentTimeExpr,\n () => 'CURRENT_TIME',\n ],\n [\n CurrentTimestampExpr,\n () => 'CURRENT_TIMESTAMP',\n ],\n [\n CurrentUserExpr,\n () => 'CURRENT_USER',\n ],\n [\n DateAddExpr,\n dateDeltaSql('DATE_ADD'),\n ],\n [\n DateDiffExpr,\n function (this: Generator, e: DateDiffExpr) {\n return this.func('DATE_DIFF', [\n unitToStr(e),\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n DateStrToDateExpr,\n dateStrToDateSql,\n ],\n [\n DateToDiExpr,\n function (this: Generator, e: Expression) {\n return `CAST(DATE_FORMAT(${this.sql(e, 'this')}, ${this.dialect._constructor.DATEINT_FORMAT}) AS INT)`;\n },\n ],\n [\n DateSubExpr,\n dateDeltaSql('DATE_ADD', {\n negateInterval: true,\n }),\n ],\n [\n DayOfWeekExpr,\n function (this: Generator, e: DayOfWeekExpr) {\n return `((${this.func('DAY_OF_WEEK', [\n e.args.this,\n ])} % 7) + 1)`;\n },\n ],\n [\n DayOfWeekIsoExpr,\n renameFunc('DAY_OF_WEEK'),\n ],\n [\n DecodeExpr,\n function (this: Generator, e: DecodeExpr) {\n return encodeDecodeSql.call(this, e, 'FROM_UTF8');\n },\n ],\n [\n DiToDateExpr,\n function (this: Generator, e: Expression) {\n return `CAST(DATE_PARSE(CAST(${this.sql(e, 'this')} AS VARCHAR), ${this.dialect._constructor.DATEINT_FORMAT}) AS DATE)`;\n },\n ],\n [\n EncodeExpr,\n function (this: Generator, e: EncodeExpr) {\n return encodeDecodeSql.call(this, e, 'TO_UTF8');\n },\n ],\n [\n FileFormatPropertyExpr,\n function (this: Generator, e: Expression) {\n return `format=${this.sql(new LiteralExpr({\n this: e.name,\n isString: true,\n }))}`;\n },\n ],\n [\n FirstExpr,\n firstLastSql,\n ],\n [\n FromTimeZoneExpr,\n function (this: Generator, e: Expression) {\n return `WITH_TIMEZONE(${this.sql(e, 'this')}, ${this.sql(e, 'zone')}) AT TIME ZONE 'UTC'`;\n },\n ],\n [\n GenerateSeriesExpr,\n sequenceSql,\n ],\n [\n GenerateDateArrayExpr,\n sequenceSql,\n ],\n [\n IfExpr,\n ifSql(),\n ],\n [\n ILikeExpr,\n noIlikeSql,\n ],\n [\n InitcapExpr,\n initcapSql,\n ],\n [\n LastExpr,\n firstLastSql,\n ],\n [\n LastDayExpr,\n function (this: Generator, e: LastDayExpr) {\n return this.func('LAST_DAY_OF_MONTH', [\n e.args.this,\n ]);\n },\n ],\n [\n LateralExpr,\n explodeToUnnestSqlPresto,\n ],\n [\n LeftExpr,\n leftToSubstringSql,\n ],\n [\n LevenshteinExpr,\n function (this: Generator, e: Expression) {\n unsupportedArgs.call(this, e, 'insCost', 'delCost', 'subCost', 'maxDist');\n return renameFunc('LEVENSHTEIN_DISTANCE').call(this, e);\n },\n ],\n [\n LogicalAndExpr,\n renameFunc('BOOL_AND'),\n ],\n [\n LogicalOrExpr,\n renameFunc('BOOL_OR'),\n ],\n [\n PivotExpr,\n noPivotSql,\n ],\n [\n QuantileExpr,\n quantileSql,\n ],\n [\n RegexpExtractExpr,\n regexpExtractSql,\n ],\n [\n RegexpExtractAllExpr,\n regexpExtractSql,\n ],\n [\n RightExpr,\n rightToSubstringSql,\n ],\n [\n SchemaExpr,\n schemaSql,\n ],\n [\n SchemaCommentPropertyExpr,\n function (this: Generator, e: SchemaCommentPropertyExpr) {\n return this.nakedProperty(e);\n },\n ],\n [\n SelectExpr,\n preprocess([\n eliminateWindowClause,\n eliminateQualify,\n eliminateDistinctOn,\n explodeProjectionToUnnest(1),\n eliminateSemiAndAntiJoins,\n amendExplodedColumnTable,\n ]),\n ],\n [\n SortArrayExpr,\n noSortArray,\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr) {\n return strPositionSql.call(this, e, {\n supportsOccurrence: true,\n });\n },\n ],\n [\n StrToDateExpr,\n function (this: Generator, e: StrPositionExpr) {\n return `CAST(${strToTimeSql.call(this, e)} AS DATE)`;\n },\n ],\n [\n StrToMapExpr,\n renameFunc('SPLIT_TO_MAP'),\n ],\n [\n StrToTimeExpr,\n strToTimeSql,\n ],\n [\n StructExtractExpr,\n structExtractSql,\n ],\n [\n TableExpr,\n preprocess([\n unnestGenerateSeries,\n ]),\n ],\n [\n TimestampExpr,\n function (this: Generator, e: TimestampExpr) {\n // Presto doesn't support the TIMESTAMP keyword in the same way as Postgres/Spark\n return `CAST(${this.sql(e.args.this)} AS TIMESTAMP)`;\n },\n ],\n [\n TimestampAddExpr,\n dateDeltaSql('DATE_ADD'),\n ],\n [\n TimestampTruncExpr,\n timestampTruncSql(),\n ],\n [\n TimeStrToDateExpr,\n timeStrToTimeSql,\n ],\n [\n TimeStrToTimeExpr,\n timeStrToTimeSql,\n ],\n [\n TimeStrToUnixExpr,\n function (this: Generator, e: TimeStrToUnixExpr) {\n return this.func('TO_UNIXTIME', [\n this.func('DATE_PARSE', [\n e.args.this,\n this.dialect._constructor.TIME_FORMAT,\n ]),\n ]);\n },\n ],\n [\n TimeToStrExpr,\n function (this: Generator, e: TimeToStrExpr) {\n return this.func('DATE_FORMAT', [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n TimeToUnixExpr,\n renameFunc('TO_UNIXTIME'),\n ],\n [\n ToCharExpr,\n function (this: Generator, e: ToCharExpr) {\n return this.func('DATE_FORMAT', [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n TryCastExpr,\n preprocess([\n epochCastToTs,\n ]),\n ],\n [\n TsOrDiToDiExpr,\n function (this: Generator, e: TsOrDiToDiExpr) {\n return `CAST(SUBSTR(REPLACE(CAST(${this.sql(e, 'this')} AS VARCHAR), '-', ''), 1, 8) AS INT)`;\n },\n ],\n [\n TsOrDsAddExpr,\n tsOrDsAddSql,\n ],\n [\n TsOrDsDiffExpr,\n tsOrDsDiffSql,\n ],\n [\n TsOrDsToDateExpr,\n tsOrDsToDateSql,\n ],\n [\n UnhexExpr,\n renameFunc('FROM_HEX'),\n ],\n [\n UnixToStrExpr,\n function (this: Generator, e: Expression) {\n return `DATE_FORMAT(FROM_UNIXTIME(${this.sql(e, 'this')}), ${this.formatTime(e)})`;\n },\n ],\n [\n UnixToTimeExpr,\n unixToTimeSql,\n ],\n [\n UnixToTimeStrExpr,\n function (this: Generator, e: Expression) {\n return `CAST(FROM_UNIXTIME(${this.sql(e, 'this')}) AS VARCHAR)`;\n },\n ],\n [\n VariancePopExpr,\n renameFunc('VAR_POP'),\n ],\n [\n WithExpr,\n preprocess([\n addRecursiveCteColumnNames,\n ]),\n ],\n [\n WithinGroupExpr,\n preprocess([\n removeWithinGroupForPercentiles,\n ]),\n ],\n [\n TruncExpr,\n renameFunc('TRUNCATE'),\n ],\n [\n XorExpr,\n boolXorSql,\n ],\n [\n Md5DigestExpr,\n renameFunc('MD5'),\n ],\n [\n ShaExpr,\n renameFunc('SHA1'),\n ],\n [\n Sha1DigestExpr,\n renameFunc('SHA1'),\n ],\n [\n Sha2Expr,\n sha256Sql,\n ],\n [\n Sha2DigestExpr,\n sha2DigestSql,\n ],\n ]);\n }\n\n @cache\n static get RESERVED_KEYWORDS () {\n return new Set([\n 'alter',\n 'and',\n 'as',\n 'between',\n 'by',\n 'case',\n 'cast',\n 'constraint',\n 'create',\n 'cross',\n 'current_time',\n 'current_timestamp',\n 'deallocate',\n 'delete',\n 'describe',\n 'distinct',\n 'drop',\n 'else',\n 'end',\n 'escape',\n 'except',\n 'execute',\n 'exists',\n 'extract',\n 'false',\n 'for',\n 'from',\n 'full',\n 'group',\n 'having',\n 'in',\n 'inner',\n 'insert',\n 'intersect',\n 'into',\n 'is',\n 'join',\n 'left',\n 'like',\n 'natural',\n 'not',\n 'undefined',\n 'on',\n 'or',\n 'order',\n 'outer',\n 'prepare',\n 'right',\n 'select',\n 'table',\n 'then',\n 'true',\n 'union',\n 'using',\n 'values',\n 'when',\n 'where',\n 'with',\n ]);\n }\n\n /**\n * Handles Presto's specific EXTRACT logic for high-precision EPOCHs.\n * Converts EPOCH_MILLISECOND, etc., into Unix time math.\n */\n public extractSql (expression: ExtractExpr): string {\n const datePart = expression.name.toUpperCase();\n\n if (!datePart.startsWith('EPOCH')) {\n return super.extractSql(expression);\n }\n\n let scale: number | undefined = undefined;\n if (datePart === 'EPOCH_MILLISECOND') scale = 10 ** 3;\n else if (datePart === 'EPOCH_MICROSECOND') scale = 10 ** 6;\n else if (datePart === 'EPOCH_NANOSECOND') scale = 10 ** 9;\n\n const value = expression.args.expression;\n const ts = new CastExpr({\n this: value,\n to: DataTypeExpr.build('TIMESTAMP'),\n });\n let toUnix: Expression = new TimeToUnixExpr({\n this: ts,\n });\n\n if (scale) {\n toUnix = new MulExpr({\n this: toUnix,\n expression: new LiteralExpr({\n this: scale.toString(),\n isString: false,\n }),\n });\n }\n\n return this.sql(toUnix);\n }\n\n /**\n * Presto requires the input to JSON_FORMAT to be of type JSON.\n */\n public jsonFormatSql (expression: JsonFormatExpr): string {\n let thisArg = expression.args.this;\n const isJson = expression.args.isJson;\n\n if (thisArg && !(isJson || thisArg.type)) {\n thisArg = annotateTypes(thisArg, {\n dialect: this.dialect,\n });\n }\n\n if (!(isJson || thisArg?.isType(DataTypeExprKind.JSON))) {\n const castExpr = new CastExpr({\n to: DataTypeExprKind.JSON.toUpperCase(),\n });\n thisArg?.replace(castExpr);\n castExpr.setArgKey('this', thisArg);\n }\n\n return this.functionFallbackSql(expression);\n }\n\n /**\n * Presto's MD5 returns VARBINARY, so it needs to be hexed and lowercased\n * for standard string representation.\n */\n public md5Sql (expression: Md5Expr): string {\n let thisArg = expression.args.this;\n\n if (!thisArg?.type && thisArg) {\n thisArg = annotateTypes(thisArg, {\n dialect: this.dialect,\n });\n }\n\n // Presto requires strings to be encoded to UTF-8 before hashing\n if (thisArg?.isType(DataTypeExpr.TEXT_TYPES)) {\n thisArg = new EncodeExpr({\n this: thisArg,\n charset: new LiteralExpr({\n this: 'utf-8',\n isString: true,\n }),\n });\n }\n\n return this.func(\n 'LOWER',\n [\n this.func('TO_HEX', [\n this.func('MD5', [\n this.sql(thisArg),\n ]),\n ]),\n ],\n );\n }\n\n /**\n * Converts a string to a Unix timestamp.\n * Uses a COALESCE(TRY(DATE_PARSE), PARSE_DATETIME) pattern to handle\n * standard formats and those containing timezones (Hive style).\n */\n public strToUnixSql (expression: StrToUnixExpr): string {\n const thisArg = expression.args.this;\n const valueAsText = new CastExpr({\n this: thisArg,\n to: 'VARCHAR',\n });\n const valueAsTimestamp = thisArg?.args.isString\n ? new CastExpr({\n this: thisArg,\n to: DataTypeExprKind.TIMESTAMP.toUpperCase(),\n })\n : thisArg;\n\n const parseWithoutTz = this.func('DATE_PARSE', [\n valueAsText,\n this.formatTime(expression),\n ]);\n\n const formattedValue = this.func('DATE_FORMAT', [\n valueAsTimestamp,\n this.formatTime(expression),\n ]);\n\n const parseWithTz = this.func(\n 'PARSE_DATETIME',\n [\n formattedValue,\n this.formatTime(\n expression,\n Hive.INVERSE_TIME_MAPPING,\n Hive.INVERSE_TIME_TRIE,\n ),\n ],\n );\n\n const coalesced = this.func('COALESCE', [\n this.func('TRY', [\n parseWithoutTz,\n ]),\n parseWithTz,\n ]);\n return this.func('TO_UNIXTIME', [\n coalesced,\n ]);\n }\n\n public bracketSql (expression: BracketExpr): string {\n if (expression.args.safe) {\n return this.func(\n 'ELEMENT_AT',\n [\n expression.args.this,\n expression.args.this instanceof Expression\n ? seqGet(\n applyIndexOffset(\n expression.args.this,\n expression.args.expressions ?? [\n ],\n 1 - (expression.args.offset || 0),\n {\n dialect: this.dialect,\n },\n ),\n 0,\n )\n : undefined,\n ],\n );\n }\n return super.bracketSql(expression);\n }\n\n /**\n * Presto uses ROW(...) for structs. If types are known, it casts the row\n * to a specific ROW schema to maintain field naming.\n */\n public structSql (expression: StructExpr): string {\n if (!expression.type) {\n annotateTypes(expression, {\n dialect: this.dialect,\n });\n }\n\n const values: string[] = [\n ];\n const schema: string[] = [\n ];\n let unknownType = false;\n\n for (const e of expression.args.expressions || [\n ]) {\n if (e instanceof PropertyEqExpr) {\n if (isType(e.type, DataTypeExprKind.UNKNOWN)) {\n unknownType = true;\n } else {\n const eType = typeof e.type === 'string'\n ? new DataTypeExpr({\n this: e.type as DataTypeExprKind,\n })\n : e.type;\n schema.push(`${this.sql(e, 'this')} ${this.sql(eType)}`);\n }\n values.push(this.sql(e, 'expression'));\n } else {\n values.push(this.sql(e));\n }\n }\n\n const size = expression.args.expressions?.length;\n\n if (!size || schema.length !== size) {\n if (unknownType) {\n this.unsupported('Cannot convert untyped key-value definitions (try annotate_types).');\n }\n return this.func('ROW', values);\n }\n\n return `CAST(ROW(${values.join(', ')}) AS ROW(${schema.join(', ')}))`;\n }\n\n public intervalSql (expression: IntervalExpr): string {\n const unit = expression.text('unit').toUpperCase();\n if (expression.args.this && unit.startsWith('WEEK')) {\n // Presto interval doesn't support weeks directly in some versions; convert to days.\n return `(${expression.args.this.name} * INTERVAL '7' DAY)`;\n }\n return super.intervalSql(expression);\n }\n\n public transactionSql (expression: TransactionExpr): string {\n const modes = expression.args.modes;\n const modesStr = modes ? ` ${modes.join(', ')}` : '';\n return `START TRANSACTION${modesStr}`;\n }\n\n public createSql (expression: CreateExpr): string {\n // Presto CREATE VIEW does not support explicit column lists in the header.\n const createThis = expression.args.this instanceof Expression ? expression.args.this : undefined;\n if (expression.args.kind === CreateExprKind.VIEW && createThis?.args.expressions) {\n createThis.setArgKey('expressions', undefined);\n }\n return super.createSql(expression);\n }\n\n /**\n * Presto DELETE is restrictive (no aliases, single table).\n */\n public deleteSql (expression: DeleteExpr): string {\n const tables = expression.args.tables || [\n expression.args.this,\n ];\n if (1 < tables.length) {\n return super.deleteSql(expression);\n }\n\n const table = tables[0];\n expression.setArgKey('this', table);\n expression.setArgKey('tables', undefined);\n\n if (table instanceof TableExpr) {\n const tableAlias = table.args.alias;\n if (tableAlias) {\n tableAlias.pop(); // Remove alias as Presto doesn't support it in DELETE\n expression = expression.transform(unqualifyColumns) as DeleteExpr;\n }\n }\n\n return super.deleteSql(expression);\n }\n\n public jsonExtractSql (expression: JsonExtractExpr): string {\n const isJsonExtract = this.dialect.settings.variantExtractIsJsonExtract ?? true;\n\n if (!expression.args.variantExtract || isJsonExtract) {\n return this.func('JSON_EXTRACT', [\n expression.args.this,\n expression.args.expression,\n ...expression.args.expressions || [\n ],\n ]);\n }\n\n const thisArg = this.sql(expression, 'this');\n const segments: string[] = [\n ];\n\n // Convert JSONPath '$.x.y' to ROW access 'col.x.y'\n for (const pathKey of narrowInstanceOf(expression.args.expression, Expression)?.args.expressions?.slice(1) || [\n ]) {\n if (!(pathKey instanceof JsonPathKeyExpr)) {\n this.unsupported(`Cannot transpile JSONPath segment '${pathKey}' to ROW access`);\n continue;\n }\n let key = pathKey.args.this?.toString();\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key ?? '')) {\n key = `\"${key}\"`;\n }\n segments.push(`.${key}`);\n }\n\n return `${thisArg}${segments.join('')}`;\n }\n\n public groupConcatSql (expression: GroupConcatExpr): string {\n // Presto simulates GROUP_CONCAT by aggregating into an array and joining it.\n return this.func(\n 'ARRAY_JOIN',\n [\n this.func('ARRAY_AGG', [\n expression.args.this,\n ]),\n expression.args.separator,\n ],\n );\n }\n}\n\nexport class Presto extends Dialect {\n static DIALECT_NAME = Dialects.PRESTO;\n static UNNEST_REQUIRES_CROSS_JOIN = true; // inherited by Trino\n static INDEX_OFFSET = 1;\n\n @cache\n static get NULL_ORDERING () {\n return NullOrdering.NULLS_ARE_LAST;\n }\n\n static get EXPRESSION_METADATA () {\n return new Map(PrestoTyping.EXPRESSION_METADATA);\n }\n\n @cache\n static get TIME_FORMAT () {\n return MySQL.TIME_FORMAT;\n }\n\n static STRICT_STRING_CONCAT = true;\n static SUPPORTS_SEMI_ANTI_JOIN = false;\n static TYPED_DIVISION = true;\n static TABLESAMPLE_SIZE_IS_PERCENT = true;\n static LOG_BASE_FIRST: boolean | undefined = undefined;\n static SUPPORTS_VALUES_DEFAULT = false;\n static LEAST_GREATEST_IGNORES_NULLS = false;\n\n @cache\n static get TIME_MAPPING () {\n return MySQL.TIME_MAPPING;\n }\n\n // Presto/Trino follow a case-insensitive strategy for identifiers\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.CASE_INSENSITIVE;\n }\n\n @cache\n static get SUPPORTED_SETTINGS () {\n return new Set([\n ...Dialect.SUPPORTED_SETTINGS,\n 'variantExtractIsJsonExtract',\n ]);\n }\n\n static Tokenizer = PrestoTokenizer;\n static Parser = PrestoParser;\n static Generator = PrestoGenerator;\n}\n\nDialect.register(Dialects.PRESTO, Presto);\n"],"mappings":"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J,EACF,EACA,CACEoJ,GACA,SAA2BhC,EAAgB,CACzC,OAAO,KAAK,KAAK,oBAAqB,CACpCA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACEiC,GACAhI,EACF,EACA,CACEiI,GACAC,EACF,EACA,CACElE,EACA,SAA2B+B,EAAe,CACxC,OAAAoC,GAAgB,KAAK,KAAMpC,EAAG,UAAW,UAAW,UAAW,SAAS,EACjEjH,EAAW,sBAAsB,EAAE,KAAK,KAAMiH,CAAC,CACxD,CACF,EACA,CACEqC,GACAtJ,EAAW,UAAU,CACvB,EACA,CACEuJ,GACAvJ,EAAW,SAAS,CACtB,EACA,CACEwJ,GACAC,EACF,EACA,CACEC,GACAlL,EACF,EACA,CACE6G,GACAsE,EACF,EACA,CACErE,GACAqE,EACF,EACA,CACEC,GACAC,EACF,EACA,CACEzL,GACAX,EACF,EACA,CACEqM,GACA,SAA2B7C,EAA8B,CACvD,OAAO,KAAK,cAAcA,CAAC,CAC7B,CACF,EACA,CACElH,EACAqH,EAAW,CACT2C,GACAC,GACAC,GACAC,GAA0B,CAAC,EAC3BC,GACAxI,EACF,CAAC,CACH,EACA,CACEyI,GACA9M,EACF,EACA,CACEuI,EACA,SAA2BoB,EAAoB,CAC7C,OAAOoD,GAAe,KAAK,KAAMpD,EAAG,CAClC,mBAAoB,EACtB,CAAC,CACH,CACF,EACA,CACEqD,GACA,SAA2BrD,EAAoB,CAC7C,MAAO,QAAQxI,GAAa,KAAK,KAAMwI,CAAC,CAAC,WAC3C,CACF,EACA,CACErB,GACA5F,EAAW,cAAc,CAC3B,EACA,CACE0E,GACAjG,EACF,EACA,CACE8L,GACAC,EACF,EACA,CACEC,GACArD,EAAW,CACTsD,EACF,CAAC,CACH,EACA,CACEC,GACA,SAA2B1D,EAAkB,CAE3C,MAAO,QAAQ,KAAK,IAAIA,EAAE,KAAK,IAAI,CAAC,gBACtC,CACF,EACA,CACE2D,GACAhK,GAAa,UAAU,CACzB,EACA,CACEiK,GACAC,GAAkB,CACpB,EACA,CACEC,GACAC,EACF,EACA,CACEC,GACAD,EACF,EACA,CACEE,GACA,SAA2BjE,EAAsB,CAC/C,OAAO,KAAK,KAAK,cAAe,CAC9B,KAAK,KAAK,aAAc,CACtBA,EAAE,KAAK,KACP,KAAK,QAAQ,aAAa,WAC5B,CAAC,CACH,CAAC,CACH,CACF,EACA,CACEtG,EACA,SAA2BsG,EAAkB,CAC3C,OAAO,KAAK,KAAK,cAAe,CAC9BA,EAAE,KAAK,KACP,KAAK,WAAWA,CAAC,CACnB,CAAC,CACH,CACF,EACA,CACElB,EACA/F,EAAW,aAAa,CAC1B,EACA,CACEmL,GACA,SAA2BlE,EAAe,CACxC,OAAO,KAAK,KAAK,cAAe,CAC9BA,EAAE,KAAK,KACP,KAAK,WAAWA,CAAC,CACnB,CAAC,CACH,CACF,EACA,CACEmE,GACAhE,EAAW,CACTQ,EACF,CAAC,CACH,EACA,CACEyD,GACA,SAA2BpE,EAAmB,CAC5C,MAAO,4BAA4B,KAAK,IAAIA,EAAG,MAAM,CAAC,uCACxD,CACF,EACA,CACEqE,GACAvM,EACF,EACA,CACEwM,GACAnM,EACF,EACA,CACEoM,GACA9M,EACF,EACA,CACEqG,GACA/E,EAAW,UAAU,CACvB,EACA,CACEyL,GACA,SAA2BxE,EAAe,CACxC,MAAO,6BAA6B,KAAK,IAAIA,EAAG,MAAM,CAAC,MAAM,KAAK,WAAWA,CAAC,CAAC,GACjF,CACF,EACA,CACErH,EACAK,EACF,EACA,CACEyL,GACA,SAA2BzE,EAAe,CACxC,MAAO,sBAAsB,KAAK,IAAIA,EAAG,MAAM,CAAC,eAClD,CACF,EACA,CACE0E,GACA3L,EAAW,SAAS,CACtB,EACA,CACE4L,GACAxE,EAAW,CACTyE,EACF,CAAC,CACH,EACA,CACEC,GACA1E,EAAW,CACT2E,EACF,CAAC,CACH,EACA,CACEC,GACAhM,EAAW,UAAU,CACvB,EACA,CACEiM,GACAC,EACF,EACA,CACEjG,EACAjG,EAAW,KAAK,CAClB,EACA,CACEmM,GACAnM,EAAW,MAAM,CACnB,EACA,CACEoM,GACApM,EAAW,MAAM,CACnB,EACA,CACEkG,EACAmG,EACF,EACA,CACEC,GACAC,EACF,CACF,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","names":["_EXPRESSION_METADATA_dec","_init","cache","PrestoTyping","map","DialectTyping","extend","types","data","type","BitwiseAndExpr","BitwiseNotExpr","BitwiseOrExpr","BitwiseXorExpr","LengthExpr","LevenshteinExpr","StrPositionExpr","WidthBucketExpr","CeilExpr","FloorExpr","RoundExpr","SignExpr","s","e","ModExpr","RandExpr","Md5DigestExpr","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","initcapSql","expression","delimiters","noSortArray","comparator","BooleanExpr","schemaSql","PartitionedByPropertyExpr","n","IdentifierExpr","partitionExprs","c","FuncExpr","PropertyExpr","ArrayExpr","LiteralExpr","siblings","SchemaExpr","schema","columnDefs","ColumnDefExpr","quantileSql","strToTimeSql","tsOrDsToDateSql","timeFormat","Presto","parsedTime","CastExpr","tsOrDsAddSql","standardized","tsOrDsAddCast","unit","unitToStr","tsOrDsDiffSql","thisTs","exprTs","buildApproxPercentile","args","ApproxQuantileExpr","seqGet","buildFromUnixtime","UnixToTimeExpr","firstLastSql","MatchRecognizeExpr","SelectExpr","renameFunc","unixToTimeSql","scale","timestamp","toInt","annotateTypes","Expression","DataTypeExpr","buildToChar","fmt","buildFormattedTime","TimeToStrExpr","dateDeltaSql","name","options","negateInterval","interval","finalInterval","explodeToUnnestSqlPresto","explode","ExplodeExpr","explodedType","alias","TableAliasExpr","structFields","InlineExpr","explodeToUnnestSql","amendExplodedColumnTable","laterals","lateral","newTable","oldTable","column","findAllInScope","ColumnExpr","colDb","colTable","colName","DotExpr","narrowInstanceOf","_ORIGINAL_KEYWORDS_dec","_UNICODE_STRINGS_dec","_a","_init","PrestoTokenizer","Tokenizer","cache","prefixes","quotes","result","q","p","keywords","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_TABLE_ALIAS_TOKENS_dec","_FUNCTION_PARSERS_dec","_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","PrestoParser","Parser","AnyValueExpr","ApproxDistinctExpr","binaryFromFunction","BitwiseAndExpr","BitwiseNotExpr","BitwiseOrExpr","BitwiseXorExpr","ArraySizeExpr","ArrayContainsExpr","DateAddExpr","DateDiffExpr","StrToTimeExpr","dateTruncToTime","DayOfWeekIsoExpr","DayOfYearExpr","BracketExpr","UnhexExpr","DecodeExpr","JsonFormatExpr","LevenshteinExpr","CurrentTimestampExpr","buildRegexpExtract","RegexpExtractExpr","RegexpExtractAllExpr","RegexpReplaceExpr","buildReplaceWithOptionalReplacement","StructExpr","GenerateSeriesExpr","ArrayUniqueAggExpr","StrToMapExpr","StrPositionExpr","ArraySliceExpr","TimeToUnixExpr","EncodeExpr","Md5DigestExpr","Sha2Expr","WeekOfYearExpr","parsers","_RESERVED_KEYWORDS_dec","_ORIGINAL_TRANSFORMS_dec","_TYPE_MAPPING_dec","_PROPERTIES_LOCATION_dec","_STRUCT_DELIMITER_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","PrestoGenerator","Generator","modifiers","m","LocationPropertyExpr","VolatilePropertyExpr","e","ArgMaxExpr","ArgMinExpr","preprocess","inheritStructFieldNames","ArrayAnyExpr","ArrayConcatExpr","ArrayToStringExpr","AtTimeZoneExpr","BitwiseLeftShiftExpr","BitwiseRightShiftExpr","epochCastToTs","CurrentTimeExpr","CurrentUserExpr","DateStrToDateExpr","dateStrToDateSql","DateToDiExpr","DateSubExpr","DayOfWeekExpr","encodeDecodeSql","DiToDateExpr","FileFormatPropertyExpr","FirstExpr","FromTimeZoneExpr","sequenceSql","GenerateDateArrayExpr","IfExpr","ifSql","ILikeExpr","noIlikeSql","InitcapExpr","LastExpr","LastDayExpr","LateralExpr","LeftExpr","leftToSubstringSql","unsupportedArgs","LogicalAndExpr","LogicalOrExpr","PivotExpr","noPivotSql","QuantileExpr","regexpExtractSql","RightExpr","rightToSubstringSql","SchemaCommentPropertyExpr","eliminateWindowClause","eliminateQualify","eliminateDistinctOn","explodeProjectionToUnnest","eliminateSemiAndAntiJoins","SortArrayExpr","strPositionSql","StrToDateExpr","StructExtractExpr","structExtractSql","TableExpr","unnestGenerateSeries","TimestampExpr","TimestampAddExpr","TimestampTruncExpr","timestampTruncSql","TimeStrToDateExpr","timeStrToTimeSql","TimeStrToTimeExpr","TimeStrToUnixExpr","ToCharExpr","TryCastExpr","TsOrDiToDiExpr","TsOrDsAddExpr","TsOrDsDiffExpr","TsOrDsToDateExpr","UnixToStrExpr","UnixToTimeStrExpr","VariancePopExpr","WithExpr","addRecursiveCteColumnNames","WithinGroupExpr","removeWithinGroupForPercentiles","TruncExpr","XorExpr","boolXorSql","ShaExpr","Sha1DigestExpr","sha256Sql","Sha2DigestExpr","sha2DigestSql","datePart","value","ts","toUnix","MulExpr","thisArg","isJson","castExpr","valueAsText","valueAsTimestamp","parseWithoutTz","formattedValue","parseWithTz","Hive","coalesced","applyIndexOffset","values","unknownType","PropertyEqExpr","isType","eType","size","modes","createThis","tables","table","tableAlias","unqualifyColumns","isJsonExtract","segments","pathKey","JsonPathKeyExpr","key","_SUPPORTED_SETTINGS_dec","_NORMALIZATION_STRATEGY_dec","_TIME_MAPPING_dec","_TIME_FORMAT_dec","_NULL_ORDERING_dec","Dialect","PrestoTyping","MySQL"]}
|