@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.
Files changed (245) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +8 -14
  3. package/README.npm.md +8 -14
  4. package/README.repo.md +1 -2
  5. package/dist/chunk-2YNOERAO.cjs +2 -0
  6. package/dist/chunk-2YNOERAO.cjs.map +1 -0
  7. package/dist/chunk-2Z3O2CFM.cjs +19 -0
  8. package/dist/chunk-2Z3O2CFM.cjs.map +1 -0
  9. package/dist/chunk-4ZMKB6PV.cjs +2 -0
  10. package/dist/chunk-4ZMKB6PV.cjs.map +1 -0
  11. package/dist/chunk-53OWF4GG.js +2 -0
  12. package/dist/chunk-53OWF4GG.js.map +1 -0
  13. package/dist/chunk-C4CLTVOW.cjs +2 -0
  14. package/dist/chunk-C4CLTVOW.cjs.map +1 -0
  15. package/dist/chunk-DOKMTZYO.cjs +4 -0
  16. package/dist/chunk-DOKMTZYO.cjs.map +1 -0
  17. package/dist/chunk-FCGUTI7Y.js +2 -0
  18. package/dist/chunk-FCGUTI7Y.js.map +1 -0
  19. package/dist/chunk-IPCIXWCY.js +2 -0
  20. package/dist/chunk-IPCIXWCY.js.map +1 -0
  21. package/dist/chunk-KCNOE4DZ.js +19 -0
  22. package/dist/chunk-KCNOE4DZ.js.map +1 -0
  23. package/dist/chunk-NRJHX2GZ.js +2 -0
  24. package/dist/chunk-NRJHX2GZ.js.map +1 -0
  25. package/dist/chunk-O2J5RKBN.js +2 -0
  26. package/dist/chunk-O2J5RKBN.js.map +1 -0
  27. package/dist/chunk-PXUASP5I.js +2 -0
  28. package/dist/chunk-PXUASP5I.js.map +1 -0
  29. package/dist/chunk-R7C3ZHVK.cjs +2 -0
  30. package/dist/chunk-R7C3ZHVK.cjs.map +1 -0
  31. package/dist/chunk-UHWHUDLE.cjs +2 -0
  32. package/dist/chunk-UHWHUDLE.cjs.map +1 -0
  33. package/dist/chunk-WRNYJ54A.cjs +2 -0
  34. package/dist/chunk-WRNYJ54A.cjs.map +1 -0
  35. package/dist/chunk-XZQFOICX.cjs +3 -0
  36. package/dist/chunk-XZQFOICX.cjs.map +1 -0
  37. package/dist/chunk-YLOQRUXC.js +2 -0
  38. package/dist/chunk-YLOQRUXC.js.map +1 -0
  39. package/dist/chunk-YSS2WVCM.cjs +2 -0
  40. package/dist/chunk-YSS2WVCM.cjs.map +1 -0
  41. package/dist/chunk-Z5V6VOIN.js +3 -0
  42. package/dist/chunk-Z5V6VOIN.js.map +1 -0
  43. package/dist/chunk-ZBFGQPJR.js +4 -0
  44. package/dist/chunk-ZBFGQPJR.js.map +1 -0
  45. package/dist/dialects/athena.cjs +2 -0
  46. package/dist/dialects/athena.cjs.map +1 -0
  47. package/dist/dialects/athena.d.cts +66 -0
  48. package/dist/dialects/athena.d.ts +66 -0
  49. package/dist/dialects/athena.js +2 -0
  50. package/dist/dialects/athena.js.map +1 -0
  51. package/dist/dialects/bigquery.cjs +3 -0
  52. package/dist/dialects/bigquery.cjs.map +1 -0
  53. package/dist/dialects/bigquery.d.cts +651 -0
  54. package/dist/dialects/bigquery.d.ts +651 -0
  55. package/dist/dialects/bigquery.js +3 -0
  56. package/dist/dialects/bigquery.js.map +1 -0
  57. package/dist/dialects/clickhouse.cjs +2 -0
  58. package/dist/dialects/clickhouse.cjs.map +1 -0
  59. package/dist/dialects/clickhouse.d.cts +634 -0
  60. package/dist/dialects/clickhouse.d.ts +634 -0
  61. package/dist/dialects/clickhouse.js +2 -0
  62. package/dist/dialects/clickhouse.js.map +1 -0
  63. package/dist/dialects/databricks.cjs +2 -0
  64. package/dist/dialects/databricks.cjs.map +1 -0
  65. package/dist/dialects/databricks.d.cts +484 -0
  66. package/dist/dialects/databricks.d.ts +484 -0
  67. package/dist/dialects/databricks.js +2 -0
  68. package/dist/dialects/databricks.js.map +1 -0
  69. package/dist/dialects/doris.cjs +2 -0
  70. package/dist/dialects/doris.cjs.map +1 -0
  71. package/dist/dialects/doris.d.cts +484 -0
  72. package/dist/dialects/doris.d.ts +484 -0
  73. package/dist/dialects/doris.js +2 -0
  74. package/dist/dialects/doris.js.map +1 -0
  75. package/dist/dialects/dremio.cjs +2 -0
  76. package/dist/dialects/dremio.cjs.map +1 -0
  77. package/dist/dialects/dremio.d.cts +522 -0
  78. package/dist/dialects/dremio.d.ts +522 -0
  79. package/dist/dialects/dremio.js +2 -0
  80. package/dist/dialects/dremio.js.map +1 -0
  81. package/dist/dialects/drill.cjs +2 -0
  82. package/dist/dialects/drill.cjs.map +1 -0
  83. package/dist/dialects/drill.d.cts +512 -0
  84. package/dist/dialects/drill.d.ts +512 -0
  85. package/dist/dialects/drill.js +2 -0
  86. package/dist/dialects/drill.js.map +1 -0
  87. package/dist/dialects/druid.cjs +2 -0
  88. package/dist/dialects/druid.cjs.map +1 -0
  89. package/dist/dialects/druid.d.cts +17 -0
  90. package/dist/dialects/druid.d.ts +17 -0
  91. package/dist/dialects/druid.js +2 -0
  92. package/dist/dialects/druid.js.map +1 -0
  93. package/dist/dialects/duckdb.cjs +86 -0
  94. package/dist/dialects/duckdb.cjs.map +1 -0
  95. package/dist/dialects/duckdb.d.cts +756 -0
  96. package/dist/dialects/duckdb.d.ts +756 -0
  97. package/dist/dialects/duckdb.js +86 -0
  98. package/dist/dialects/duckdb.js.map +1 -0
  99. package/dist/dialects/dune.cjs +2 -0
  100. package/dist/dialects/dune.cjs.map +1 -0
  101. package/dist/dialects/dune.d.cts +21 -0
  102. package/dist/dialects/dune.d.ts +21 -0
  103. package/dist/dialects/dune.js +2 -0
  104. package/dist/dialects/dune.js.map +1 -0
  105. package/dist/dialects/exasol.cjs +2 -0
  106. package/dist/dialects/exasol.cjs.map +1 -0
  107. package/dist/dialects/exasol.d.cts +507 -0
  108. package/dist/dialects/exasol.d.ts +507 -0
  109. package/dist/dialects/exasol.js +2 -0
  110. package/dist/dialects/exasol.js.map +1 -0
  111. package/dist/dialects/fabric.cjs +2 -0
  112. package/dist/dialects/fabric.cjs.map +1 -0
  113. package/dist/dialects/fabric.d.cts +463 -0
  114. package/dist/dialects/fabric.d.ts +463 -0
  115. package/dist/dialects/fabric.js +2 -0
  116. package/dist/dialects/fabric.js.map +1 -0
  117. package/dist/dialects/hive.cjs +2 -0
  118. package/dist/dialects/hive.cjs.map +1 -0
  119. package/dist/dialects/hive.d.cts +585 -0
  120. package/dist/dialects/hive.d.ts +585 -0
  121. package/dist/dialects/hive.js +2 -0
  122. package/dist/dialects/hive.js.map +1 -0
  123. package/dist/dialects/materialize.cjs +2 -0
  124. package/dist/dialects/materialize.cjs.map +1 -0
  125. package/dist/dialects/materialize.d.cts +890 -0
  126. package/dist/dialects/materialize.d.ts +890 -0
  127. package/dist/dialects/materialize.js +2 -0
  128. package/dist/dialects/materialize.js.map +1 -0
  129. package/dist/dialects/mysql.cjs +2 -0
  130. package/dist/dialects/mysql.cjs.map +1 -0
  131. package/dist/dialects/mysql.d.cts +292 -0
  132. package/dist/dialects/mysql.d.ts +292 -0
  133. package/dist/dialects/mysql.js +2 -0
  134. package/dist/dialects/mysql.js.map +1 -0
  135. package/dist/dialects/oracle.cjs +2 -0
  136. package/dist/dialects/oracle.cjs.map +1 -0
  137. package/dist/dialects/oracle.d.cts +539 -0
  138. package/dist/dialects/oracle.d.ts +539 -0
  139. package/dist/dialects/oracle.js +2 -0
  140. package/dist/dialects/oracle.js.map +1 -0
  141. package/dist/dialects/postgres.cjs +2 -0
  142. package/dist/dialects/postgres.cjs.map +1 -0
  143. package/dist/dialects/postgres.d.cts +587 -0
  144. package/dist/dialects/postgres.d.ts +587 -0
  145. package/dist/dialects/postgres.js +2 -0
  146. package/dist/dialects/postgres.js.map +1 -0
  147. package/dist/dialects/presto.cjs +2 -0
  148. package/dist/dialects/presto.cjs.map +1 -0
  149. package/dist/dialects/presto.d.cts +173 -0
  150. package/dist/dialects/presto.d.ts +173 -0
  151. package/dist/dialects/presto.js +2 -0
  152. package/dist/dialects/presto.js.map +1 -0
  153. package/dist/dialects/prql.cjs +2 -0
  154. package/dist/dialects/prql.cjs.map +1 -0
  155. package/dist/dialects/prql.d.cts +496 -0
  156. package/dist/dialects/prql.d.ts +496 -0
  157. package/dist/dialects/prql.js +2 -0
  158. package/dist/dialects/prql.js.map +1 -0
  159. package/dist/dialects/redshift.cjs +2 -0
  160. package/dist/dialects/redshift.cjs.map +1 -0
  161. package/dist/dialects/redshift.d.cts +132 -0
  162. package/dist/dialects/redshift.d.ts +132 -0
  163. package/dist/dialects/redshift.js +2 -0
  164. package/dist/dialects/redshift.js.map +1 -0
  165. package/dist/dialects/risingwave.cjs +2 -0
  166. package/dist/dialects/risingwave.cjs.map +1 -0
  167. package/dist/dialects/risingwave.d.cts +478 -0
  168. package/dist/dialects/risingwave.d.ts +478 -0
  169. package/dist/dialects/risingwave.js +2 -0
  170. package/dist/dialects/risingwave.js.map +1 -0
  171. package/dist/dialects/singlestore.cjs +2 -0
  172. package/dist/dialects/singlestore.cjs.map +1 -0
  173. package/dist/dialects/singlestore.d.cts +73 -0
  174. package/dist/dialects/singlestore.d.ts +73 -0
  175. package/dist/dialects/singlestore.js +2 -0
  176. package/dist/dialects/singlestore.js.map +1 -0
  177. package/dist/dialects/snowflake.cjs +3 -0
  178. package/dist/dialects/snowflake.cjs.map +1 -0
  179. package/dist/dialects/snowflake.d.cts +320 -0
  180. package/dist/dialects/snowflake.d.ts +320 -0
  181. package/dist/dialects/snowflake.js +3 -0
  182. package/dist/dialects/snowflake.js.map +1 -0
  183. package/dist/dialects/solr.cjs +2 -0
  184. package/dist/dialects/solr.cjs.map +1 -0
  185. package/dist/dialects/solr.d.cts +458 -0
  186. package/dist/dialects/solr.d.ts +458 -0
  187. package/dist/dialects/solr.js +2 -0
  188. package/dist/dialects/solr.js.map +1 -0
  189. package/dist/dialects/spark.cjs +2 -0
  190. package/dist/dialects/spark.cjs.map +1 -0
  191. package/dist/dialects/spark.d.cts +484 -0
  192. package/dist/dialects/spark.d.ts +484 -0
  193. package/dist/dialects/spark.js +2 -0
  194. package/dist/dialects/spark.js.map +1 -0
  195. package/dist/dialects/spark2.cjs +2 -0
  196. package/dist/dialects/spark2.cjs.map +1 -0
  197. package/dist/dialects/spark2.d.cts +486 -0
  198. package/dist/dialects/spark2.d.ts +486 -0
  199. package/dist/dialects/spark2.js +2 -0
  200. package/dist/dialects/spark2.js.map +1 -0
  201. package/dist/dialects/sqlite.cjs +2 -0
  202. package/dist/dialects/sqlite.cjs.map +1 -0
  203. package/dist/dialects/sqlite.d.cts +510 -0
  204. package/dist/dialects/sqlite.d.ts +510 -0
  205. package/dist/dialects/sqlite.js +2 -0
  206. package/dist/dialects/sqlite.js.map +1 -0
  207. package/dist/dialects/starrocks.cjs +2 -0
  208. package/dist/dialects/starrocks.cjs.map +1 -0
  209. package/dist/dialects/starrocks.d.cts +518 -0
  210. package/dist/dialects/starrocks.d.ts +518 -0
  211. package/dist/dialects/starrocks.js +2 -0
  212. package/dist/dialects/starrocks.js.map +1 -0
  213. package/dist/dialects/tableau.cjs +2 -0
  214. package/dist/dialects/tableau.cjs.map +1 -0
  215. package/dist/dialects/tableau.d.cts +466 -0
  216. package/dist/dialects/tableau.d.ts +466 -0
  217. package/dist/dialects/tableau.js +2 -0
  218. package/dist/dialects/tableau.js.map +1 -0
  219. package/dist/dialects/teradata.cjs +2 -0
  220. package/dist/dialects/teradata.cjs.map +1 -0
  221. package/dist/dialects/teradata.d.cts +539 -0
  222. package/dist/dialects/teradata.d.ts +539 -0
  223. package/dist/dialects/teradata.js +2 -0
  224. package/dist/dialects/teradata.js.map +1 -0
  225. package/dist/dialects/trino.cjs +2 -0
  226. package/dist/dialects/trino.cjs.map +1 -0
  227. package/dist/dialects/trino.d.cts +465 -0
  228. package/dist/dialects/trino.d.ts +465 -0
  229. package/dist/dialects/trino.js +2 -0
  230. package/dist/dialects/trino.js.map +1 -0
  231. package/dist/dialects/tsql.cjs +2 -0
  232. package/dist/dialects/tsql.cjs.map +1 -0
  233. package/dist/dialects/tsql.d.cts +703 -0
  234. package/dist/dialects/tsql.d.ts +703 -0
  235. package/dist/dialects/tsql.js +2 -0
  236. package/dist/dialects/tsql.js.map +1 -0
  237. package/dist/index.cjs +5 -25
  238. package/dist/index.cjs.map +1 -1
  239. package/dist/index.d.cts +3 -14178
  240. package/dist/index.d.ts +3 -14178
  241. package/dist/index.js +5 -25
  242. package/dist/index.js.map +1 -1
  243. package/dist/tokens-VcMD09XM.d.cts +15805 -0
  244. package/dist/tokens-VcMD09XM.d.ts +15805 -0
  245. package/package.json +171 -5
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/chunk-YSS2WVCM.cjs","../src/typing/presto.ts","../src/dialects/presto.ts"],"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","PrestoTokenizer","Tokenizer","prefixes","quotes","result","q","p","keywords","_TABLE_ALIAS_TOKENS_dec","_FUNCTION_PARSERS_dec","_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","PrestoParser","Parser","AnyValueExpr","ApproxDistinctExpr","binaryFromFunction","ArraySizeExpr","ArrayContainsExpr","DateAddExpr","DateDiffExpr","StrToTimeExpr","dateTruncToTime","DayOfWeekIsoExpr","DayOfYearExpr","BracketExpr","UnhexExpr","DecodeExpr","JsonFormatExpr","CurrentTimestampExpr","buildRegexpExtract","RegexpReplaceExpr","buildReplaceWithOptionalReplacement","StructExpr","GenerateSeriesExpr","ArrayUniqueAggExpr","StrToMapExpr","ArraySliceExpr","TimeToUnixExpr","EncodeExpr","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","ArgMaxExpr","ArgMinExpr","preprocess","inheritStructFieldNames","ArrayAnyExpr","ArrayConcatExpr","ArrayToStringExpr","AtTimeZoneExpr","BitwiseLeftShiftExpr","BitwiseRightShiftExpr","epochCastToTs","CurrentTimeExpr","CurrentUserExpr","DateStrToDateExpr","dateStrToDateSql","DateToDiExpr","DateSubExpr","DayOfWeekExpr","encodeDecodeSql","DiToDateExpr","FileFormatPropertyExpr"],"mappings":"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","file":"/home/huydna/projects/sqlingo.js/dist/chunk-YSS2WVCM.cjs","sourcesContent":[null,"import type {\n Expression,\n} from '../expressions/expressions';\nimport {\n cache,\n} from '../port_internals';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n 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"]}
@@ -0,0 +1,3 @@
1
+ import{$b as W,$c as A,$p as je,Al as ee,An as lt,Ap as Xe,Ca as k,Ce as ur,Cg as mr,Ci as et,Dd as zt,Di as st,Dl as se,Dp as Ve,Ed as vt,Eo as xt,Ep as Je,Fb as Lt,Fe as j,Fh as Pr,Fp as ke,Gb as Ut,Hb as Ft,Hh as Mr,Hl as ne,Ic as bt,Ie as Sr,If as hr,Ik as ot,Il as ie,Ip as Rt,Ja as Mt,Jd as tr,Je as cr,Jg as Nr,Jk as pt,Jl as ae,Jq as Ot,Kk as Kr,Kl as b,Kp as F,Lb as qt,Lh as gr,Lj as $r,Lk as Wr,Ll as Ee,Lm as xe,Lp as mt,Lq as dt,Mc as Xt,Mf as G,Mi as qr,Mj as br,Ml as oe,Nb as wt,Nj as Xr,Nl as M,Nm as fe,Od as rr,Oh as Y,Ol as pe,Om as ct,Pd as er,Pk as y,Pl as m,Po as U,Qe as lr,Ra as gt,Rc as Vt,Ri as wr,Rj as Vr,Rk as Qr,Ro as Pe,Sc as Jt,Sk as Hr,So as Me,Tb as Gt,Td as sr,Tg as Ir,Tl as Te,To as ge,Ub as Bt,Uc as kt,Ud as nr,Ul as ue,Um as Re,Up as Ke,Va as Ct,Vc as Kt,Vj as Jr,Vl as Se,Vp as We,Wd as H,Wi as Gr,Wo as Ce,Wp as Qe,Xd as ir,Xm as me,Xo as ye,Xp as He,Xq as X,Yl as Tt,Ym as Ne,Z as Pt,Zd as ar,Zl as ut,Zm as Ie,Zn as ht,_a as K,_c as Wt,_i as $,_l as ce,_m as Oe,_p as Ze,a as d,ac as h,ae as Er,b as _,bg as z,bi as tt,bn as de,bq as ze,c as D,ca as T,cj as Br,d as o,dk as at,ek as Et,eo as At,ep as Le,fh as Or,fm as le,fp as Ue,fq as Nt,gp as Fe,gq as ve,hg as Ar,hk as kr,ie as or,je as pr,jh as dr,ji as Cr,jp as qe,kd as Qt,ke as Tr,kh as _r,ki as yr,kk as C,km as St,kp as we,le as Z,ll as Zr,lp as g,mi as rt,nc as Yt,nl as jr,np as Ge,nq as ts,op as ft,pc as $t,pp as u,qg as xr,qp as Be,qq as It,r as p,ri as Lr,rp as Ye,sd as Ht,si as Ur,sn as _e,tb as yt,tl as zr,ud as Q,uh as Dr,uj as Yr,uq as rs,vd as Zt,vm as he,vn as De,vp as $e,wd as jt,wh as v,wj as nt,wl as vr,wm as Ae,xg as fr,xh as B,xi as Fr,xl as te,xp as be,yg as Rr,yl as L,za as f,zj as it,zl as re}from"./chunk-KCNOE4DZ.js";var es,_t;es=[p];var P=class{static get EXPRESSION_METADATA(){let n=new Map(Ge.EXPRESSION_METADATA),t=(r,e)=>{for(let i of r)n.set(i,e)};return t([Ur,ue],{returns:"binary"}),t([le,Y],{returns:"double"}),t([Ir,dr,_r,wr,Qr,Hr,Zr],{returns:"varchar"}),t([L,Fr],{returns:"bigint"}),t([C,Gr],{returns:"int"}),n.set(Nr,{annotator:(r,e)=>r.annotateByArgs(e,["this","expressions"],{promote:!0})}),n.set($,{annotator:(r,e)=>r.annotateByArgs(e,["true","false"],{promote:!0})}),n.set(y,{returns:"ARRAY<STRING>"}),n.set(Xr,{annotator:(r,e)=>r.annotateByArgs(e,["this"])}),n}};_t=d(null),o(_t,10,"EXPRESSION_METADATA",es,P),_(_t,P),D(_t,3,P);var ys={YEAR:["ADD_MONTHS",12],MONTH:["ADD_MONTHS",1],QUARTER:["ADD_MONTHS",3],WEEK:["DATE_ADD",7],DAY:["DATE_ADD",1]},Fs={MILLISECOND:" * 1000",SECOND:"",MINUTE:" / 60",HOUR:" / 3600"},qs=new Set(["YEAR","QUARTER","MONTH"]);function Dt(s){if(s instanceof M&&!s.args.unit)return this.func("DATE_ADD",[s.args.this,s.args.expression]);let n=s.text("unit").toUpperCase(),[t,r]=ys[n]||["DATE_ADD",1];s instanceof v&&(r*=-1);let e=s.args.expression;if(e instanceof A){let i=e.isNumber?parseFloat(e.args.this??"0"):parseInt(e.args.this??"0");e=A.number(i*r)}else r!==1&&(e=new lr({this:e,expression:A.number(r)}));return this.func(t,[s.args.this,e])}function ss(s){let n=s.text("unit").toUpperCase(),t=Fs[n];if(t!==void 0){let O=this.sql(s,"this"),J=this.sql(s,"expression"),w=`UNIX_TIMESTAMP(${O}) - UNIX_TIMESTAMP(${J})`;return t?`(${w})${t}`:w}let r=qs.has(n),e=r?"MONTHS_BETWEEN":"DATEDIFF",i=ys[n]?.[1]||1,l=1<i?` / ${i}`:"",c=`${e}(${this.formatArgs([s.args.this,s.args.expression])})`;return(r||l)&&(c=`CAST(${c}${l} AS INT)`),c}function ws(s){let n=s.args.this;if(n&&ts(n)){if(n.args.this instanceof A&&n.args.this.isString){let t=A.string(`[${n.args.this.args.this}]`),r=this.func("FROM_JSON",[t,this.func("SCHEMA_OF_JSON",[t])]),e=this.func("TO_JSON",[r]);return this.func("REGEXP_EXTRACT",[e,A.string("'^.(.*).$'"),A.number(1)])}return this.sql(n)}return this.func("TO_JSON",[n,s.args.options])}function Gs(s){return s.args.expression&&this.unsupported("Unsupported arg 'expression' for ArraySort"),this.func("SORT_ARRAY",[s.args.this])}function Bs(s){return this.func("UNIX_TIMESTAMP",[s.args.this,mt("hive").call(this,s)])}function Ys(s){let n=this.sql(s,"this"),t=s.args.scale;return t===void 0||t.toValue()===ut.SECONDS.toValue()?u("FROM_UNIXTIME").call(this,s):`FROM_UNIXTIME(${n} / POW(10, ${t}))`}function $s(s){let n=this.sql(s,"this"),t=this.formatTime(s);return t!=null&&![E.TIME_FORMAT,E.DATE_FORMAT].includes(t)&&(n=`FROM_UNIXTIME(UNIX_TIMESTAMP(${n}, ${t}))`),`CAST(${n} AS DATE)`}function bs(s){let n=this.sql(s,"this"),t=this.formatTime(s);return t!=null&&![E.TIME_FORMAT,E.DATE_FORMAT].includes(t)&&(n=`FROM_UNIXTIME(UNIX_TIMESTAMP(${n}, ${t}))`),`CAST(${n} AS TIMESTAMP)`}function Xs(s){let n=this.formatTime(s);return n&&![E.TIME_FORMAT,E.DATE_FORMAT].includes(n)?this.func("TO_DATE",[s.args.this,n]):s.parent instanceof k&&this._constructor.TS_OR_DS_EXPRESSIONS.has(s.parent._constructor)?this.sql(s,"this"):this.func("TO_DATE",[s.args.this])}function V(s){return n=>{let t=new s({this:T(n,0)});return T(n,1)instanceof Er&&T(n,1)?.args.this===!0?new $t({this:t}):t}}function Vs(s){let n=F(m,{dialect:"hive"})(s);return n.setArgKey("safe",!0),n}function Js(s){let n=T(s,1);return n&&(n=n.mul(-1)),new M({this:T(s,0),expression:n,unit:xt("DAY")})}var ns,is,as,Es,os,ps,Ts,N,x=class extends(Ts=X,ps=[p],os=[p],Es=[p],as=[p],is=[p],ns=[p],Ts){static get QUOTES(){return["'",'"']}static get IDENTIFIERS(){return["`"]}static get STRING_ESCAPES(){return["\\"]}static get SINGLE_TOKENS(){return{...X.SINGLE_TOKENS,$:"parameter"}}static get ORIGINAL_KEYWORDS(){return{...X.KEYWORDS,"ADD ARCHIVE":"command","ADD ARCHIVES":"command","ADD FILE":"command","ADD FILES":"command","ADD JAR":"command","ADD JARS":"command",MINUS:"except","MSCK REPAIR":"command",REFRESH:"refresh","TIMESTAMP AS OF":"timestampSnapshot","VERSION AS OF":"versionSnapshot",SERDEPROPERTIES:"serdeProperties"}}static get NUMERIC_LITERALS(){return{L:"BIGINT",S:"SMALLINT",Y:"TINYINT",D:"DOUBLE",F:"FLOAT",BD:"DECIMAL"}}};N=d(Ts),o(N,10,"QUOTES",ps,x),o(N,10,"IDENTIFIERS",os,x),o(N,10,"STRING_ESCAPES",Es,x),o(N,10,"SINGLE_TOKENS",as,x),o(N,10,"ORIGINAL_KEYWORDS",is,x),o(N,10,"NUMERIC_LITERALS",ns,x),_(N,x),D(N,3,x);var us,Ss,cs,ls,hs,As,xs,fs,Rs,R,S=class extends(Rs=f,fs=[p],xs=[p],As=[p],hs=[p],ls=[p],cs=[p],Ss=[p],us=[p],Rs){static get ID_VAR_TOKENS(){return new Set([...f.ID_VAR_TOKENS,"sessionUser","currentCatalog","straightJoin"])}static get NO_PAREN_FUNCTIONS(){let t={...f.NO_PAREN_FUNCTIONS};return delete t.currentTime,delete t.localtime,delete t.localtimestamp,t}static get FUNCTION_PARSERS(){return{...f.FUNCTION_PARSERS,PERCENTILE:function(){return this.parseQuantileFunction(lt)},PERCENTILE_APPROX:function(){return this.parseQuantileFunction(ht)}}}static get FUNCTIONS(){return{...f.FUNCTIONS,ADD_MONTHS:t=>new M({this:T(t,0),expression:T(t,1),unit:xt("MONTH")}),BASE64:t=>st.fromArgList(t),COLLECT_LIST:t=>new fe({this:T(t,0),nullsExcluded:!0}),COLLECT_SET:t=>ct.fromArgList(t),DATE_ADD:t=>new M({this:T(t,0),expression:T(t,1),unit:new Bt({this:"DAY"})}),DATE_FORMAT:t=>F(ne,{dialect:"hive"})([new b({this:T(t,0)}),T(t,1)]),DATE_SUB:Js,DATEDIFF:t=>new B({this:new m({this:T(t,0)}),expression:new m({this:T(t,1)})}),DAY:t=>new rt({this:new m({this:T(t,0)})}),FIRST:V(me),FIRST_VALUE:V(Ie),FROM_UNIXTIME:F(Tt,{dialect:"hive",defaultValue:!0}),GET_JSON_OBJECT:(t,{dialect:r})=>new nt({this:T(t,0),expression:r.toJsonPath(T(t,1))}),LAST:V(Ne),LAST_VALUE:V(Oe),MAP:t=>{if(t.length===1&&t[0].isStar)return new at({this:t[0]});let r=[],e=[];for(let i=0;i<t.length;i+=2)r.push(t[i]),t[i+1]&&e.push(t[i+1]);return new Et({keys:new G({expressions:r}),values:new G({expressions:e})})},MONTH:t=>new C({this:new m({this:T(t,0)})}),REGEXP_EXTRACT:dt(ot),REGEXP_EXTRACT_ALL:dt(pt),SEQUENCE:t=>z.fromArgList(t),SIZE:t=>fr.fromArgList(t),SPLIT:t=>y.fromArgList(t),STR_TO_MAP:t=>new re({this:T(t,0),pairDelim:T(t,1)||A.string(","),keyValueDelim:T(t,2)||A.string(":")}),TO_DATE:Vs,TO_JSON:t=>it.fromArgList(t),TRUNC:t=>tt.fromArgList(t),UNBASE64:t=>et.fromArgList(t),UNIX_TIMESTAMP:t=>F(L,{dialect:"hive",defaultValue:!0})(0<t.length?t:[new Or({})]),YEAR:t=>new St({this:new m({this:T(t,0)})})}}static get NO_PAREN_FUNCTION_PARSERS(){return{...f.NO_PAREN_FUNCTION_PARSERS,TRANSFORM:function(){return this.parseTransform()}}}static get PROPERTY_PARSERS(){return{...f.PROPERTY_PARSERS,SERDEPROPERTIES:function(){return new vt({expressions:this.parseWrappedCsv(()=>this.parseProperty())})}}}static get ALTER_PARSERS(){return{...f.ALTER_PARSERS,CHANGE:function(){return this.parseAlterTableChange()}}}parseTransform(){if(!this.match("lParen",{advance:!1})){this.retreat(this.index-1);return}let t=this.parseWrappedCsv(()=>this.parseLambda()),r=this.parseRowFormat({matchRow:!0}),e;if(this.matchTextSeq("RECORDWRITER")&&(e=this.parseString()),!this.match("using"))return hr.fromArgList(t);let i=this.parseString();this.match("alias");let l=this.parseSchema(),c=this.parseRowFormat({matchRow:!0}),O;return this.matchTextSeq("RECORDREADER")&&(O=this.parseString()),this.expression(qt,{expressions:t,commandScript:i,schema:l,rowFormatBefore:r,recordWriter:e,rowFormatAfter:c,recordReader:O})}parseQuantileFunction(t){let r;this.match("distinct")?r=this.expression(Yt,{expressions:[this.parseLambda()]}):(this.match("all"),r=this.parseLambda());let e=[r];return this.match("comma")&&e.push(...this.parseFunctionArgs()),t.fromArgList(e)}parseTypes(t={}){let{checkFunc:r=!1,schema:e=!1,allowIdentifiers:i=!0}=t,l=super.parseTypes({checkFunc:r,schema:e,allowIdentifiers:i});return l&&!e?l.transform((c,O)=>c instanceof h&&c.isType(["char","varchar"])?c.replace(h.build("text")):c,{copy:!1}):l}parseAlterTableChange(){this.match("column");let t=this.parseField({anyToken:!0});if(this.constructor.CHANGE_COLUMN_ALTER_SYNTAX&&this.matchTextSeq("TYPE"))return this.expression(K,{this:t,dtype:this.parseTypes({schema:!0})});let r=this.parseField({anyToken:!0}),e=this.parseTypes({schema:!0}),i=this.match("comment")&&this.parseString();return(!t||!r||!e)&&this.raiseError("Expected 'CHANGE COLUMN' to be followed by 'column_name' 'column_name' 'data_type'"),this.expression(K,{this:t,renameTo:r,dtype:e,comment:i})}parsePartitionAndOrder(){return[this.matchSet(["partitionBy","distributeBy"])?this.parseCsv(()=>this.parseAssignment()):[],super.parseOrder({skipOrderToken:this.match("sortBy")})??void 0]}parseParameter(){this.match("lBrace");let t=this.parseIdentifier()||this.parsePrimaryOrVar(),r=this.match("colon")&&(this.parseIdentifier()||this.parsePrimaryOrVar());return this.match("rBrace"),this.expression(ar,{this:t,expression:r})}toPropEq(t,r){if(t.isStar)return t;let e;return t instanceof bt?e=t.args.this??At(`col${r+1}`):e=At(`col${r+1}`),this.expression(j,{this:e,expression:t})}static get TABLE_ALIAS_TOKENS(){return new Set([...f.TABLE_ALIAS_TOKENS,"straightJoin"])}};R=d(Rs),o(R,10,"ID_VAR_TOKENS",fs,S),o(R,10,"NO_PAREN_FUNCTIONS",xs,S),o(R,10,"FUNCTION_PARSERS",As,S),o(R,10,"FUNCTIONS",hs,S),o(R,10,"NO_PAREN_FUNCTION_PARSERS",ls,S),o(R,10,"PROPERTY_PARSERS",cs,S),o(R,10,"ALTER_PARSERS",Ss,S),o(R,10,"TABLE_ALIAS_TOKENS",us,S),_(R,S),D(R,3,S),S.LOG_DEFAULTS_TO_LN=!0,S.STRICT_CAST=!1,S.VALUES_FOLLOWED_BY_PAREN=!1,S.JOINS_HAVE_EQUAL_PRECEDENCE=!0,S.ADD_JOIN_ON_TRUE=!0,S.ALTER_TABLE_PARTITIONS=!0,S.CHANGE_COLUMN_ALTER_SYNTAX=!1;var ms,Ns,Is,Os,ds,_s,Ds,I,a=class extends(Ds=g,_s=[p],ds=[p],Os=[p],Is=[p],Ns=[p],ms=[p],Ds){static get EXPRESSIONS_WITHOUT_NESTED_CTES(){return new Set([Wt,H,ir,nr])}static get SUPPORTED_JSON_PATH_PARTS(){return new Set([or,pr,Tr,Z])}static get TYPE_MAPPING(){return new Map([...g.TYPE_MAPPING,["bit","BOOLEAN"],["blob","BINARY"],["datetime","TIMESTAMP"],["rowversion","BINARY"],["text","STRING"],["time","TIMESTAMP"],["timestampntz","TIMESTAMP"],["timestamptz","TIMESTAMP"],["utinyint","SMALLINT"],["varbinary","BINARY"]])}static get ORIGINAL_TRANSFORMS(){return new Map([...g.TRANSFORMS,[Ft,Ve],[Re,u("FIRST")],[xe,Be],[he,It("MAX_BY")],[Ae,It("MIN_BY")],[G,U([qe])],[Ar,u("CONCAT")],[xr,function(r){return this.func("CONCAT_WS",[r.args.expression,r.args.this])}],[Rr,function(r){return Gs.call(this,r)}],[Ct,be],[Dr,function(r){return Dt.call(this,r)}],[B,function(r){return ss.call(this,r)}],[Cr,He],[v,function(r){return Dt.call(this,r)}],[yr,function(r){return`CAST(DATE_FORMAT(${this.sql(r,"this")}, ${E.DATEINT_FORMAT}) AS INT)`}],[Lr,function(r){return`TO_DATE(CAST(${this.sql(r,"this")} AS STRING), ${E.DATEINT_FORMAT})`}],[tr,function(r){return`STORED BY ${this.sql(r,"this")}`}],[et,u("UNBASE64")],[z,Ot],[qr,Ot],[$,Ye()],[Sr,$e],[cr,function(r){return this.binary(r,"DIV")}],[Br,u("ISNAN")],[Yr,function(r){return this.func("GET_JSON_OBJECT",[r.args.this,r.args.expression])}],[nt,function(r){return this.func("GET_JSON_OBJECT",[r.args.this,r.args.expression])}],[it,function(r){return ws.call(this,r)}],[$r,Ke],[Jr,Rt],[_e,je],[kr,function(r){return this.func("UNHEX",[this.func("MD5",[r.args.this])])}],[De,Ze],[Y,function(r){return this.func("MONTHS_BETWEEN",[r.args.this,r.args.expression])}],[kt,function(r){return r.args.allowNull?"":"NOT NULL"}],[Et,Rt],[Mt,U([Le,Ue,Fe])],[lt,u("PERCENTILE")],[ht,u("PERCENTILE_APPROX")],[ot,Nt],[pt,Nt],[Kr,ve],[Wr,function(r){return this.binary(r,"RLIKE")}],[y,u("SPLIT")],[br,We],[zt,function(r){return this.nakedProperty(r)}],[ct,u("COLLECT_SET")],[jr,function(r){return this.func("SPLIT",[r.args.this,this.func("CONCAT",[A.string("\\Q"),r.args.expression,A.string("\\E")])])}],[H,U([ge,Me,r=>Ce(r,{unnestUsingArraysZip:!1}),ye])],[zr,function(r){return Je.call(this,r,{funcName:"LOCATE",supportsPosition:!0})}],[vr,function(r){return $s.call(this,r)}],[te,function(r){return bs.call(this,r)}],[L,function(r){return Bs.call(this,r)}],[se,ke],[at,u("MAP")],[Gt,U([Pe])],[ae,u("TO_DATE")],[b,Qe],[Ee,u("UNIX_TIMESTAMP")],[tt,function(r){return this.func("TRUNC",[r.args.this,rs(r)])}],[ie,u("UNIX_TIMESTAMP")],[st,u("BASE64")],[Te,function(r){return`CAST(SUBSTR(REPLACE(CAST(${this.sql(r,"this")} AS STRING), '-', ''), 1, 8) AS INT)`}],[M,function(r){return Dt.call(this,r)}],[pe,function(r){return ss.call(this,r)}],[m,function(r){return Xs.call(this,r)}],[de,Xe],[oe,ze],[Se,u("ASCII")],[Tt,function(r){return this.func("FROM_UNIXTIME",[r.args.this,mt("hive").call(this,r)])}],[ut,function(r){return Ys.call(this,r)}],[ce,u("FROM_UNIXTIME")],[Q,function(r){return`PARTITIONED BY ${this.sql(r,"this")}`}],[ee,u("FORMAT_NUMBER")],[yt,function(r){return this.nationalSql(r,{prefix:""})}],[Xt,function(r){return`(${this.expressions(r,{key:"this",indent:!1})})`}],[Vt,function(r){return`(${this.expressions(r,{key:"this",indent:!1})})`}],[Jt,()=>""],[Ht,()=>""],[Zt,function(r){return this.func("BUCKET",[r.args.expression,r.args.this])}],[jt,function(r){return this.func("TRUNCATE",[r.args.expression,r.args.this])}],[Kt,()=>"PRIMARY KEY"],[gr,u("WEEKOFYEAR")],[Mr,u("DAYOFMONTH")],[Pr,u("DAYOFWEEK")],[Vr,function(r){return we.call(this,r,"insCost","delCost","subCost","maxDist"),u("LEVENSHTEIN").call(this,r)}]])}static get PROPERTIES_LOCATION(){return new Map([...g.PROPERTIES_LOCATION,[Qt,"postSchema"],[Q,"postSchema"],[rr,"unsupported"],[er,"unsupported"]])}static get TS_OR_DS_EXPRESSIONS(){return new Set([B,rt,C,St])}unnestSql(t){return u("EXPLODE").call(this,t)}jsonPathKeySql(t){return t.args.this instanceof Z?(this.unsupported("Unsupported wildcard in JSONPathKey expression"),""):super.jsonPathKeySql(t)}parameterSql(t){let r=this.sql(t,"this"),e=this.sql(t,"expression"),i=t.parent;return r=e?`${r}:${e}`:r,i instanceof ur&&i.parent instanceof gt?r:`\${${r}}`}schemaSql(t){for(let r of t.findAll(Ut))r.args.desc===!1&&r.setArgKey("desc",void 0);return super.schemaSql(t)}constraintSql(t){for(let i of Array.from(t.findAll(sr)))i.pop();let r=this.sql(t,"this"),e=this.expressions(t,{sep:" ",flat:!0});return`CONSTRAINT ${r} ${e}`}rowFormatSerdePropertySql(t){let r=this.sql(t,"serdeProperties");return r=r?` ${r}`:"",`ROW FORMAT SERDE ${this.sql(t,"this")}${r}`}arrayAggSql(t){return this.func("COLLECT_LIST",[t.args.this instanceof Lt?t.args.this.args.this:t.args.this])}truncSql(t){return t.args.decimals&&this.unsupported("Unsupported arg 'decimals' for TRUNC"),this.sql(new mr({this:t.args.this,to:h.build("bigint")}))}dataTypeSql(t){if(t.isType(g.PARAMETERIZABLE_TEXT_TYPES)&&(!t.args.expressions||t.args.expressions[0].name==="MAX"))t=h.build("text")??t;else if(t.isType("text")&&t.args.expressions)t.setArgKey("this","varchar");else if(t.isType(h.TEMPORAL_TYPES))t=h.build(t.args.this)??t;else if(t.isType("float")){let r=t.find(W);r instanceof W&&(t=(parseInt(r.args.this?.args.this?.toString()??"0")<=32?h.build("float"):h.build("double"))??t)}return super.dataTypeSql(t)}versionSql(t){return super.versionSql(t).replace("FOR ","")}structSql(t){let r=[];return t.args.expressions?.forEach(e=>{if(e instanceof j){this.unsupported("Hive does not support named structs.");let i=e.args.expression;r.push(i instanceof k||typeof i=="string"?i:"")}else r.push(e)}),this.func("STRUCT",r)}columnDefSql(t,r={}){let{sep:e=" "}=r;return super.columnDefSql(t,{sep:t.parent instanceof h&&t.parent.isType("struct")?": ":e})}alterColumnSql(t){let r=this.sql(t,"this"),e=this.sql(t,"renameTo")||r,i=this.sql(t,"dtype"),l=this.sql(t,"comment"),c=l?` COMMENT ${l}`:"",O=this.sql(t,"default"),J=t.args.visible,w=t.args.allowNull,Ls=t.args.drop;return(O||Ls||J||w)&&this.unsupported("Unsupported CHANGE COLUMN syntax"),i||this.unsupported("CHANGE COLUMN without a type is not supported"),`CHANGE COLUMN ${r} ${e} ${i}${c}`}renameColumnSql(t){return this.unsupported("Cannot rename columns without data type defined in Hive"),""}alterSetSql(t){let r=this.expressions(t,{flat:!0});r=r?` ${r}`:"";let e=this.sql(t,"location");e=e?` LOCATION ${e}`:"";let i=this.expressions(t,{key:"fileFormat",flat:!0,sep:" "});i=i?` FILEFORMAT ${i}`:"";let l=this.sql(t,"serde");l=l?` SERDE ${l}`:"";let c=this.expressions(t,{key:"tag",flat:!0,sep:""});return c=c?` TAGS ${c}`:"",`SET${l}${r}${e}${i}${c}`}serdePropertiesSql(t){let r=t.args.with?"WITH ":"",e=this.expressions(t,{flat:!0});return`${r}SERDEPROPERTIES (${e})`}existsSql(t){return t.args.expression?this.functionFallbackSql(t):super.existsSql(t)}timeToStrSql(t){let r=t.args.this;return r instanceof b&&(r=r.args.this),this.func("DATE_FORMAT",[r,this.formatTime(t)])}fileFormatPropertySql(t){let r;return t.args.this instanceof wt?r=this.sql(t,"this"):r=t.name.toUpperCase(),`STORED AS ${r}`}};I=d(Ds),o(I,10,"EXPRESSIONS_WITHOUT_NESTED_CTES",_s,a),o(I,10,"SUPPORTED_JSON_PATH_PARTS",ds,a),o(I,10,"TYPE_MAPPING",Os,a),o(I,10,"ORIGINAL_TRANSFORMS",Is,a),o(I,10,"PROPERTIES_LOCATION",Ns,a),o(I,10,"TS_OR_DS_EXPRESSIONS",ms,a),_(I,a),D(I,3,a),a.SUPPORTS_DECODE_CASE=!1,a.SELECT_KINDS=[],a.TRY_SUPPORTED=!1,a.SUPPORTS_UESCAPE=!1,a.LIMIT_FETCH="LIMIT",a.TABLESAMPLE_WITH_METHOD=!1,a.JOIN_HINTS=!1,a.TABLE_HINTS=!1,a.QUERY_HINTS=!1,a.INDEX_ON="ON TABLE",a.EXTRACT_ALLOWS_QUOTES=!1,a.NVL2_SUPPORTED=!1,a.LAST_DAY_SUPPORTS_DATE_PART=!1,a.JSON_PATH_SINGLE_QUOTE_ESCAPE=!0,a.SUPPORTS_TO_NUMBER=!1,a.WITH_PROPERTIES_PREFIX="TBLPROPERTIES",a.PARSE_JSON_NAME=void 0,a.PAD_FILL_PATTERN_IS_REQUIRED=!0,a.SUPPORTS_MEDIAN=!1,a.ARRAY_SIZE_NAME="SIZE",a.ALTER_SET_TYPE="";var Ps,Ms,gs,Cs,q,E=class extends(Cs=ft,gs=[p],Ms=[p],Ps=[p],Cs){static get EXPRESSION_METADATA(){return new Map(P.EXPRESSION_METADATA)}static get COERCES_TO(){let t=new Map(Pt.COERCES_TO);for(let r of[...h.NUMERIC_TYPES,...h.TEMPORAL_TYPES,"interval"]){let e=t.get(r)??new Set;t.set(r,new Set([...e,...h.TEXT_TYPES]))}return t}static get NORMALIZATION_STRATEGY(){return"caseInsensitive"}static get TIME_MAPPING(){return{y:"%Y",Y:"%Y",YYYY:"%Y",yyyy:"%Y",YY:"%y",yy:"%y",MMMM:"%B",MMM:"%b",MM:"%m",M:"%-m",dd:"%d",d:"%-d",HH:"%H",H:"%-H",hh:"%I",h:"%-I",mm:"%M",m:"%-M",ss:"%S",s:"%-S",SSSSSS:"%f",a:"%p",DD:"%j",D:"%-j",E:"%a",EE:"%a",EEE:"%a",EEEE:"%A",z:"%Z",Z:"%z"}}};q=d(Cs),o(q,10,"COERCES_TO",gs,E),o(q,10,"NORMALIZATION_STRATEGY",Ms,E),o(q,10,"TIME_MAPPING",Ps,E),_(q,E),D(q,3,E),E.DIALECT_NAME="hive",E.ALIAS_POST_TABLESAMPLE=!0,E.IDENTIFIERS_CAN_START_WITH_DIGIT=!0,E.SUPPORTS_USER_DEFINED_TYPES=!1,E.SAFE_DIVISION=!0,E.ARRAY_AGG_INCLUDES_NULLS=void 0,E.REGEXP_EXTRACT_DEFAULT_GROUP=1,E.ALTER_TABLE_SUPPORTS_CASCADE=!0,E.INITCAP_DEFAULT_DELIMITER_CHARS=`
2
+ \r\f\v`,E.DATE_FORMAT="'yyyy-MM-dd'",E.DATEINT_FORMAT="'yyyyMMdd'",E.TIME_FORMAT="'yyyy-MM-dd HH:mm:ss'",E.Tokenizer=x,E.Parser=S,E.Generator=a;ft.register("hive",E);export{P as a,V as b,E as c};
3
+ //# sourceMappingURL=chunk-Z5V6VOIN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/typing/hive.ts","../src/dialects/hive.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 EncodeExpr,\n UnhexExpr,\n CorrExpr,\n MonthsBetweenExpr,\n CurrentDatabaseExpr,\n CurrentSchemaExpr,\n CurrentUserExpr,\n HexExpr,\n RepeatExpr,\n ReplaceExpr,\n SoundexExpr,\n StrToUnixExpr,\n FactorialExpr,\n MonthExpr,\n SecondExpr,\n CoalesceExpr,\n IfExpr,\n RegexpSplitExpr,\n ReverseExpr,\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 HiveTyping {\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 EncodeExpr,\n UnhexExpr,\n ], {\n returns: DataTypeExprKind.BINARY,\n });\n\n extend([\n CorrExpr,\n MonthsBetweenExpr,\n ], {\n returns: DataTypeExprKind.DOUBLE,\n });\n\n extend([\n CurrentDatabaseExpr,\n CurrentSchemaExpr,\n CurrentUserExpr,\n HexExpr,\n RepeatExpr,\n ReplaceExpr,\n SoundexExpr,\n ], {\n returns: DataTypeExprKind.VARCHAR,\n });\n\n extend([\n StrToUnixExpr,\n FactorialExpr,\n ], {\n returns: DataTypeExprKind.BIGINT,\n });\n\n extend([\n MonthExpr,\n SecondExpr,\n ], {\n returns: DataTypeExprKind.INT,\n });\n\n map.set(CoalesceExpr, {\n annotator: (s: TypeAnnotator, e: CoalesceExpr) => s.annotateByArgs(e, [\n 'this',\n 'expressions',\n ], {\n promote: true,\n }),\n });\n\n map.set(IfExpr, {\n annotator: (s: TypeAnnotator, e: IfExpr) => s.annotateByArgs(e, [\n 'true',\n 'false',\n ], {\n promote: true,\n }),\n });\n\n map.set(RegexpSplitExpr, {\n returns: 'ARRAY<STRING>',\n });\n\n map.set(ReverseExpr, {\n annotator: (s: TypeAnnotator, e: ReverseExpr) => s.annotateByArgs(e, [\n 'this',\n ]),\n });\n\n return map;\n }\n}\n","import {\n cache,\n} from '../port_internals';\nimport type {\n AlterSetExpr,\n ColumnDefExpr,\n ConstraintExpr,\n ExistsExpr,\n RowFormatSerdePropertyExpr,\n SchemaExpr,\n StructExpr,\n TruncExpr,\n VersionExpr,\n IdentifierExpr,\n ExpressionValue,\n StarExpr,\n UnnestExpr,\n} from '../expressions';\nimport {\n AlterColumnExpr,\n AnyValueExpr,\n ApproxDistinctExpr,\n ApproxQuantileExpr,\n ArgMaxExpr,\n ArgMinExpr,\n ArrayAggExpr,\n ArrayConcatExpr,\n ArrayExpr,\n ArraySizeExpr,\n ArraySortExpr,\n ArrayToStringExpr,\n ArrayUniqueAggExpr,\n BooleanExpr,\n CastExpr,\n ClusteredColumnConstraintExpr,\n ColumnExpr,\n CreateExpr,\n CurrentTimestampExpr,\n DataTypeExpr,\n DataTypeExprKind,\n DataTypeParamExpr,\n DateAddExpr,\n DateDiffExpr,\n DateStrToDateExpr,\n DateSubExpr,\n DateToDiExpr,\n DayExpr,\n DayOfMonthExpr,\n DayOfWeekExpr,\n DiToDateExpr,\n DistinctExpr,\n EqExpr,\n Expression,\n FileFormatPropertyExpr,\n FirstExpr,\n FirstValueExpr,\n FromBase64Expr,\n GenerateDateArrayExpr,\n GenerateSeriesExpr,\n IfExpr,\n ILikeExpr,\n IgnoreNullsExpr,\n InputOutputFormatExpr,\n InsertExpr,\n IntDivExpr,\n IsNanExpr,\n JsonExtractExpr,\n JsonExtractScalarExpr,\n JsonFormatExpr,\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n JsonPathWildcardExpr,\n LastExpr,\n LastValueExpr,\n LeftExpr,\n LevenshteinExpr,\n LiteralExpr,\n MapExpr,\n MaxExpr,\n Md5DigestExpr,\n MinExpr,\n MonthExpr,\n MonthsBetweenExpr,\n MulExpr,\n NationalExpr,\n NonClusteredColumnConstraintExpr,\n NotForReplicationColumnConstraintExpr,\n NotNullColumnConstraintExpr,\n NumberToStrExpr,\n OnPropertyExpr,\n OrderExpr,\n OrderedExpr,\n ParameterExpr,\n PartitionByTruncateExpr,\n PartitionedByBucketExpr,\n PartitionedByPropertyExpr,\n PrimaryKeyColumnConstraintExpr,\n PropertiesExpr,\n PropertiesLocation,\n PropertyEqExpr,\n PropertyExpr,\n QuantileExpr,\n QueryTransformExpr,\n RegexpExtractAllExpr,\n RegexpExtractExpr,\n RegexpLikeExpr,\n RegexpReplaceExpr,\n RegexpSplitExpr,\n RightExpr,\n SchemaCommentPropertyExpr,\n SelectExpr,\n SerdePropertiesExpr,\n SetItemExpr,\n SetOperationExpr,\n SplitExpr,\n StarMapExpr,\n StorageHandlerPropertyExpr,\n StrToMapExpr,\n StrPositionExpr,\n StrToDateExpr,\n StrToTimeExpr,\n StrToUnixExpr,\n StructExtractExpr,\n SubqueryExpr,\n TableExpr,\n TimeStrToDateExpr,\n TimeStrToTimeExpr,\n TimeStrToUnixExpr,\n TimeToStrExpr,\n TimeToUnixExpr,\n TimestampTruncExpr,\n ToBase64Expr,\n TransformExpr,\n TrimExpr,\n TryCastExpr,\n TsOrDiToDiExpr,\n TsOrDsAddExpr,\n TsOrDsDiffExpr,\n TsOrDsToDateExpr,\n UnicodeExpr,\n UnixToStrExpr,\n UnixToTimeExpr,\n UnixToTimeStrExpr,\n VarExpr,\n VarMapExpr,\n VolatilePropertyExpr,\n WeekOfYearExpr,\n WithDataPropertyExpr,\n WithExpr,\n YearExpr,\n toIdentifier,\n var_,\n} from '../expressions';\nimport {\n Generator, unsupportedArgs,\n} from '../generator';\nimport {\n seqGet,\n} from '../helper';\nimport {\n Parser,\n} from '../parser';\nimport {\n Tokenizer, TokenType,\n} from '../tokens';\nimport {\n anyToExists,\n ctasWithTmpTablesToCreateTmpView,\n eliminateDistinctOn,\n eliminateQualify,\n inheritStructFieldNames,\n moveSchemaColumnsToPartitionedBy,\n preprocess,\n removeUniqueConstraints,\n unnestGenerateSeries,\n unnestToExplode,\n} from '../transforms';\nimport {\n HiveTyping,\n} from '../typing/hive';\nimport {\n TypeAnnotator,\n} from '../optimizer';\nimport {\n approxCountDistinctSql,\n argMaxOrMinNoCount,\n buildFormattedTime,\n buildRegexpExtract,\n dateStrToDateSql,\n Dialect,\n Dialects,\n ifSql,\n isParseJson,\n leftToSubstringSql,\n maxOrGreatest,\n minOrLeast,\n noIlikeSql,\n noRecursiveCteSql,\n noTrycastSql,\n NormalizationStrategy,\n propertySql,\n regexpExtractSql,\n regexpReplaceSql,\n renameFunc,\n rightToSubstringSql,\n sequenceSql,\n strPositionSql,\n structExtractSql,\n timeFormat,\n timeStrToTimeSql,\n trimSql,\n unitToStr,\n varMapSql,\n} from './dialect';\n\nconst DATE_DELTA_INTERVAL: Record<string, [string, number]> = {\n YEAR: [\n 'ADD_MONTHS',\n 12,\n ],\n MONTH: [\n 'ADD_MONTHS',\n 1,\n ],\n QUARTER: [\n 'ADD_MONTHS',\n 3,\n ],\n WEEK: [\n 'DATE_ADD',\n 7,\n ],\n DAY: [\n 'DATE_ADD',\n 1,\n ],\n};\n\nconst TIME_DIFF_FACTOR: Record<string, string> = {\n MILLISECOND: ' * 1000',\n SECOND: '',\n MINUTE: ' / 60',\n HOUR: ' / 3600',\n};\n\nconst DIFF_MONTH_SWITCH = new Set([\n 'YEAR',\n 'QUARTER',\n 'MONTH',\n]);\n\nfunction addDateSql (this: Generator, expression: DateAddExpr | DateSubExpr | TsOrDsAddExpr): string {\n if (expression instanceof TsOrDsAddExpr && !expression.args.unit) {\n return this.func('DATE_ADD', [\n expression.args.this,\n expression.args.expression,\n ]);\n }\n\n const unit = expression.text('unit').toUpperCase();\n\n let [\n // eslint-disable-next-line prefer-const\n func,\n multiplier,\n ] = DATE_DELTA_INTERVAL[unit] || [\n 'DATE_ADD',\n 1,\n ];\n\n if (expression instanceof DateSubExpr) {\n multiplier *= -1;\n }\n\n let increment = expression.args.expression;\n if (increment instanceof LiteralExpr) {\n const value = increment.isNumber ? parseFloat(increment.args.this ?? '0') : parseInt(increment.args.this ?? '0');\n increment = LiteralExpr.number(value * multiplier);\n } else if (multiplier !== 1) {\n increment = new MulExpr({\n this: increment,\n expression: LiteralExpr.number(multiplier),\n });\n }\n\n return this.func(func, [\n expression.args.this,\n increment,\n ]);\n}\n\nfunction dateDiffSql (this: Generator, expression: DateDiffExpr | TsOrDsDiffExpr): string {\n const unit = expression.text('unit').toUpperCase();\n\n const factor = TIME_DIFF_FACTOR[unit];\n if (factor !== undefined) {\n const left = this.sql(expression, 'this');\n const right = this.sql(expression, 'expression');\n const secDiff = `UNIX_TIMESTAMP(${left}) - UNIX_TIMESTAMP(${right})`;\n return factor ? `(${secDiff})${factor}` : secDiff;\n }\n\n const monthsBetween = DIFF_MONTH_SWITCH.has(unit);\n const sqlFunc = monthsBetween ? 'MONTHS_BETWEEN' : 'DATEDIFF';\n const multiplier = DATE_DELTA_INTERVAL[unit]?.[1] || 1;\n const multiplierSql = 1 < multiplier ? ` / ${multiplier}` : '';\n\n let diffSql = `${sqlFunc}(${this.formatArgs([\n expression.args.this,\n expression.args.expression,\n ])})`;\n\n if (monthsBetween || multiplierSql) {\n diffSql = `CAST(${diffSql}${multiplierSql} AS INT)`;\n }\n\n return diffSql;\n}\n\nfunction jsonFormatSql (this: Generator, expression: JsonFormatExpr): string {\n const thisNode = expression.args.this;\n\n if (thisNode && isParseJson(thisNode)) {\n if (thisNode.args.this instanceof LiteralExpr && thisNode.args.this.isString) {\n const wrappedJson = LiteralExpr.string(`[${thisNode.args.this.args.this}]`);\n\n const fromJson = this.func('FROM_JSON', [\n wrappedJson,\n this.func('SCHEMA_OF_JSON', [\n wrappedJson,\n ]),\n ]);\n const toJson = this.func('TO_JSON', [\n fromJson,\n ]);\n\n return this.func('REGEXP_EXTRACT', [\n toJson,\n LiteralExpr.string('\\'^.(.*).$\\''),\n LiteralExpr.number(1),\n ]);\n }\n return this.sql(thisNode);\n }\n\n return this.func('TO_JSON', [\n thisNode,\n expression.args.options,\n ]);\n}\n\nfunction arraySortSql (this: Generator, expression: ArraySortExpr): string {\n if (expression.args.expression) {\n this.unsupported('Unsupported arg \\'expression\\' for ArraySort');\n }\n return this.func('SORT_ARRAY', [\n expression.args.this,\n ]);\n}\n\nfunction strToUnixSql (this: Generator, expression: StrToUnixExpr): string {\n return this.func('UNIX_TIMESTAMP', [\n expression.args.this,\n timeFormat('hive').call(this, expression),\n ]);\n}\n\nfunction unixToTimeSql (this: Generator, expression: UnixToTimeExpr): string {\n const timestamp = this.sql(expression, 'this');\n const scale = expression.args.scale;\n\n if (scale === undefined || scale.toValue() === UnixToTimeExpr.SECONDS.toValue()) {\n return renameFunc('FROM_UNIXTIME').call(this, expression);\n }\n\n return `FROM_UNIXTIME(${timestamp} / POW(10, ${scale}))`;\n}\n\nfunction strToDateSql (this: Generator, expression: StrToDateExpr): string {\n let thisSql = this.sql(expression, 'this');\n const timeFormatSql = this.formatTime(expression);\n\n if (timeFormatSql !== null && timeFormatSql !== undefined && ![\n Hive.TIME_FORMAT,\n Hive.DATE_FORMAT,\n ].includes(timeFormatSql)) {\n thisSql = `FROM_UNIXTIME(UNIX_TIMESTAMP(${thisSql}, ${timeFormatSql}))`;\n }\n\n return `CAST(${thisSql} AS DATE)`;\n}\n\nfunction strToTimeSql (this: Generator, expression: StrToTimeExpr): string {\n let thisSql = this.sql(expression, 'this');\n const timeFormatSql = this.formatTime(expression);\n\n if (timeFormatSql !== null && timeFormatSql !== undefined && ![\n Hive.TIME_FORMAT,\n Hive.DATE_FORMAT,\n ].includes(timeFormatSql)) {\n thisSql = `FROM_UNIXTIME(UNIX_TIMESTAMP(${thisSql}, ${timeFormatSql}))`;\n }\n\n return `CAST(${thisSql} AS TIMESTAMP)`;\n}\n\nfunction toDateSql (this: Generator, expression: TsOrDsToDateExpr): string {\n const timeFormatSql = this.formatTime(expression);\n\n if (timeFormatSql && ![\n Hive.TIME_FORMAT,\n Hive.DATE_FORMAT,\n ].includes(timeFormatSql)) {\n return this.func('TO_DATE', [\n expression.args.this,\n timeFormatSql,\n ]);\n }\n\n if (expression.parent instanceof Expression && (this._constructor as typeof HiveGenerator).TS_OR_DS_EXPRESSIONS.has(expression.parent._constructor)) {\n return this.sql(expression, 'this');\n }\n\n return this.func('TO_DATE', [\n expression.args.this,\n ]);\n}\n\nexport function buildWithIgnoreNulls (ExpClass: typeof Expression) {\n return (args: Expression[]) => {\n const thisNode = new ExpClass({\n this: seqGet(args, 0),\n });\n if (seqGet(args, 1) instanceof BooleanExpr && seqGet(args, 1)?.args.this === true) {\n return new IgnoreNullsExpr({\n this: thisNode,\n });\n }\n return thisNode;\n };\n}\n\nfunction buildToDate (args: Expression[]): TsOrDsToDateExpr {\n const expr = buildFormattedTime(TsOrDsToDateExpr, {\n dialect: 'hive',\n })(args);\n expr.setArgKey('safe', true);\n return expr;\n}\n\nfunction buildDateAdd (args: Expression[]): TsOrDsAddExpr {\n let expression = seqGet(args, 1);\n if (expression) {\n expression = expression.mul(-1);\n }\n\n return new TsOrDsAddExpr({\n this: seqGet(args, 0),\n expression: expression,\n unit: var_('DAY'),\n });\n}\n\nclass HiveTokenizer extends Tokenizer {\n @cache\n static get QUOTES () {\n return [\n '\\'',\n '\"',\n ];\n }\n\n @cache\n static get IDENTIFIERS () {\n return [\n '`',\n ];\n }\n\n @cache\n static get STRING_ESCAPES () {\n return [\n '\\\\',\n ];\n }\n\n @cache\n static get SINGLE_TOKENS () {\n return {\n ...Tokenizer.SINGLE_TOKENS,\n $: TokenType.PARAMETER,\n };\n }\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n return {\n ...Tokenizer.KEYWORDS,\n 'ADD ARCHIVE': TokenType.COMMAND,\n 'ADD ARCHIVES': TokenType.COMMAND,\n 'ADD FILE': TokenType.COMMAND,\n 'ADD FILES': TokenType.COMMAND,\n 'ADD JAR': TokenType.COMMAND,\n 'ADD JARS': TokenType.COMMAND,\n 'MINUS': TokenType.EXCEPT,\n 'MSCK REPAIR': TokenType.COMMAND,\n 'REFRESH': TokenType.REFRESH,\n 'TIMESTAMP AS OF': TokenType.TIMESTAMP_SNAPSHOT,\n 'VERSION AS OF': TokenType.VERSION_SNAPSHOT,\n 'SERDEPROPERTIES': TokenType.SERDE_PROPERTIES,\n };\n }\n\n @cache\n static get NUMERIC_LITERALS () {\n return {\n L: 'BIGINT',\n S: 'SMALLINT',\n Y: 'TINYINT',\n D: 'DOUBLE',\n F: 'FLOAT',\n BD: 'DECIMAL',\n };\n }\n}\n\nclass HiveParser extends Parser {\n @cache\n static get ID_VAR_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.ID_VAR_TOKENS,\n TokenType.SESSION_USER,\n TokenType.CURRENT_CATALOG,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get NO_PAREN_FUNCTIONS () {\n const noParenFunctions = {\n ...Parser.NO_PAREN_FUNCTIONS,\n };\n delete noParenFunctions[TokenType.CURRENT_TIME];\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n static LOG_DEFAULTS_TO_LN = true;\n static STRICT_CAST = false;\n static VALUES_FOLLOWED_BY_PAREN = false;\n static JOINS_HAVE_EQUAL_PRECEDENCE = true;\n static ADD_JOIN_ON_TRUE = true;\n static ALTER_TABLE_PARTITIONS = true;\n static CHANGE_COLUMN_ALTER_SYNTAX = false;\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.FUNCTION_PARSERS,\n PERCENTILE: function (this: Parser) {\n return (this as HiveParser).parseQuantileFunction(QuantileExpr);\n },\n PERCENTILE_APPROX: function (this: Parser) {\n return (this as HiveParser).parseQuantileFunction(ApproxQuantileExpr);\n },\n };\n }\n\n @cache\n static get FUNCTIONS (): Record<string, (expression: Expression[], options: {dialect: Dialect}) => Expression> {\n return {\n ...Parser.FUNCTIONS,\n ADD_MONTHS: (args: Expression[]): TsOrDsAddExpr => new TsOrDsAddExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n unit: var_('MONTH'),\n }),\n BASE64: (args: unknown[]) => ToBase64Expr.fromArgList(args),\n COLLECT_LIST: (args: Expression[]) => new ArrayAggExpr({\n this: seqGet(args, 0),\n nullsExcluded: true,\n }),\n COLLECT_SET: (args: unknown[]) => ArrayUniqueAggExpr.fromArgList(args),\n DATE_ADD: (args: Expression[]) => new TsOrDsAddExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n unit: new VarExpr({\n this: 'DAY',\n }),\n }),\n DATE_FORMAT: (args: Expression[]) => buildFormattedTime(TimeToStrExpr, {\n dialect: 'hive',\n })([\n new TimeStrToTimeExpr({\n this: seqGet(args, 0),\n }),\n seqGet(args, 1),\n ]),\n DATE_SUB: buildDateAdd,\n DATEDIFF: (args: Expression[]) => new DateDiffExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n expression: new TsOrDsToDateExpr({\n this: seqGet(args, 1),\n }),\n }),\n DAY: (args: Expression[]) => new DayExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n FIRST: buildWithIgnoreNulls(FirstExpr),\n FIRST_VALUE: buildWithIgnoreNulls(FirstValueExpr),\n FROM_UNIXTIME: buildFormattedTime(UnixToStrExpr, {\n dialect: 'hive',\n defaultValue: true,\n }),\n GET_JSON_OBJECT: (args: Expression[], {\n dialect,\n }: {dialect: Dialect}) => new JsonExtractScalarExpr({\n this: seqGet(args, 0),\n expression: dialect.toJsonPath(seqGet(args, 1)),\n }),\n LAST: buildWithIgnoreNulls(LastExpr),\n LAST_VALUE: buildWithIgnoreNulls(LastValueExpr),\n MAP: (args: Expression[]) => {\n if (args.length === 1 && args[0].isStar) {\n return new StarMapExpr({\n this: args[0],\n });\n }\n const keys: Expression[] = [\n ];\n const values: Expression[] = [\n ];\n for (let i = 0; i < args.length; i += 2) {\n keys.push(args[i]);\n if (args[i + 1]) values.push(args[i + 1]);\n }\n return new VarMapExpr({\n keys: new ArrayExpr({\n expressions: keys,\n }),\n values: new ArrayExpr({\n expressions: values,\n }),\n });\n },\n MONTH: (args: Expression[]) => new MonthExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n REGEXP_EXTRACT: buildRegexpExtract(RegexpExtractExpr),\n REGEXP_EXTRACT_ALL: buildRegexpExtract(RegexpExtractAllExpr),\n SEQUENCE: (args: unknown[]) => GenerateSeriesExpr.fromArgList(args),\n SIZE: (args: unknown[]) => ArraySizeExpr.fromArgList(args),\n SPLIT: (args: unknown[]) => RegexpSplitExpr.fromArgList(args),\n STR_TO_MAP: (args: Expression[]) => new StrToMapExpr({\n this: seqGet(args, 0),\n pairDelim: seqGet(args, 1) || LiteralExpr.string(','),\n keyValueDelim: seqGet(args, 2) || LiteralExpr.string(':'),\n }),\n TO_DATE: buildToDate,\n TO_JSON: (args: unknown[]) => JsonFormatExpr.fromArgList(args),\n TRUNC: (args: unknown[]) => TimestampTruncExpr.fromArgList(args),\n UNBASE64: (args: unknown[]) => FromBase64Expr.fromArgList(args),\n UNIX_TIMESTAMP: (args: Expression[]) => buildFormattedTime(StrToUnixExpr, {\n dialect: 'hive',\n defaultValue: true,\n })(\n 0 < args.length\n ? args\n : [\n new CurrentTimestampExpr({}),\n ],\n ),\n YEAR: (args: Expression[]) => new YearExpr({\n this: new TsOrDsToDateExpr({\n this: seqGet(args, 0),\n }),\n }),\n };\n }\n\n @cache\n static get NO_PAREN_FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.NO_PAREN_FUNCTION_PARSERS,\n TRANSFORM: function (this: Parser) {\n return (this as HiveParser).parseTransform();\n },\n };\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 SERDEPROPERTIES: function (this: Parser) {\n return new SerdePropertiesExpr({\n expressions: this.parseWrappedCsv(() => this.parseProperty() as Expression | undefined),\n });\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 CHANGE: function (this: Parser) {\n return (this as HiveParser).parseAlterTableChange();\n },\n };\n }\n\n parseTransform (): TransformExpr | QueryTransformExpr | undefined {\n if (!this.match(TokenType.L_PAREN, {\n advance: false,\n })) {\n this.retreat(this.index - 1);\n return undefined;\n }\n\n const args = this.parseWrappedCsv(() => (this as HiveParser).parseLambda());\n const rowFormatBefore = (this as HiveParser).parseRowFormat({\n matchRow: true,\n });\n\n let recordWriter: string | Expression | undefined = undefined;\n if (this.matchTextSeq('RECORDWRITER')) {\n recordWriter = (this as HiveParser).parseString();\n }\n\n if (!this.match(TokenType.USING)) {\n return TransformExpr.fromArgList(args);\n }\n\n const commandScript = (this as HiveParser).parseString();\n\n this.match(TokenType.ALIAS);\n const schema = this.parseSchema();\n\n const rowFormatAfter = (this as HiveParser).parseRowFormat({\n matchRow: true,\n });\n let recordReader: string | Expression | undefined = undefined;\n if (this.matchTextSeq('RECORDREADER')) {\n recordReader = (this as HiveParser).parseString();\n }\n\n return this.expression(QueryTransformExpr, {\n expressions: args,\n commandScript: commandScript,\n schema: schema,\n rowFormatBefore: rowFormatBefore,\n recordWriter: recordWriter,\n rowFormatAfter: rowFormatAfter,\n recordReader: recordReader,\n });\n }\n\n parseQuantileFunction (FuncClass: typeof QuantileExpr | typeof ApproxQuantileExpr): QuantileExpr | ApproxQuantileExpr {\n let firstArg: Expression | undefined;\n if (this.match(TokenType.DISTINCT)) {\n firstArg = this.expression(DistinctExpr, {\n expressions: [\n (this as HiveParser).parseLambda(),\n ],\n });\n } else {\n this.match(TokenType.ALL);\n firstArg = (this as HiveParser).parseLambda();\n }\n\n const args = [\n firstArg,\n ];\n if (this.match(TokenType.COMMA)) {\n args.push(...this.parseFunctionArgs());\n }\n\n return FuncClass.fromArgList(args);\n }\n\n parseTypes (options: {checkFunc?: boolean;\n schema?: boolean;\n allowIdentifiers?: boolean;} = {}): Expression | undefined {\n const {\n checkFunc = false, schema = false, allowIdentifiers = true,\n } = options;\n const thisNode = super.parseTypes({\n checkFunc,\n schema,\n allowIdentifiers,\n });\n\n if (thisNode && !schema) {\n return thisNode.transform((node: Expression, _opts: Record<string, unknown>): string | Expression | undefined => {\n if (node instanceof DataTypeExpr && node.isType([\n 'char',\n 'varchar',\n ])) {\n return node.replace(DataTypeExpr.build('text')) as Expression | undefined;\n }\n return node;\n }, {\n copy: false,\n });\n }\n\n return thisNode;\n }\n\n parseAlterTableChange (): Expression | undefined {\n this.match(TokenType.COLUMN);\n const thisNode = this.parseField({\n anyToken: true,\n });\n\n if ((this.constructor as typeof HiveParser).CHANGE_COLUMN_ALTER_SYNTAX && this.matchTextSeq('TYPE')) {\n return this.expression(AlterColumnExpr, {\n this: thisNode,\n dtype: this.parseTypes({\n schema: true,\n }),\n });\n }\n\n const columnNew = this.parseField({\n anyToken: true,\n });\n const dtype = this.parseTypes({\n schema: true,\n });\n\n const comment = this.match(TokenType.COMMENT) && (this as HiveParser).parseString();\n\n if (!thisNode || !columnNew || !dtype) {\n this.raiseError('Expected \\'CHANGE COLUMN\\' to be followed by \\'column_name\\' \\'column_name\\' \\'data_type\\'');\n }\n\n return this.expression(AlterColumnExpr, {\n this: thisNode,\n renameTo: columnNew,\n dtype: dtype,\n comment: comment,\n });\n }\n\n parsePartitionAndOrder (): [Expression[], Expression | undefined] {\n return [\n this.matchSet([\n TokenType.PARTITION_BY,\n TokenType.DISTRIBUTE_BY,\n ])\n ? this.parseCsv(() => this.parseAssignment())\n : [\n ],\n super.parseOrder({\n skipOrderToken: this.match(TokenType.SORT_BY),\n }) ?? undefined,\n ];\n }\n\n parseParameter (): ParameterExpr {\n this.match(TokenType.L_BRACE);\n const thisNode = this.parseIdentifier() || (this as HiveParser).parsePrimaryOrVar();\n const expression =\n this.match(TokenType.COLON) && (this.parseIdentifier() || (this as HiveParser).parsePrimaryOrVar());\n this.match(TokenType.R_BRACE);\n\n return this.expression(ParameterExpr, {\n this: thisNode,\n expression: expression,\n });\n }\n\n toPropEq (expression: Expression, index: number): Expression {\n if (expression.isStar) {\n return expression;\n }\n\n let key: ExpressionValue<IdentifierExpr | StarExpr>;\n if (expression instanceof ColumnExpr) {\n key = expression.args.this ?? toIdentifier(`col${index + 1}`);\n } else {\n key = toIdentifier(`col${index + 1}`);\n }\n\n return this.expression(PropertyEqExpr, {\n this: key,\n expression: expression,\n });\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 HiveGenerator extends Generator {\n // port from _Dialect metaclass logic\n static SUPPORTS_DECODE_CASE = false;\n // port from _Dialect metaclass logic\n static readonly SELECT_KINDS: string[] = [\n ];\n // port from _Dialect metaclass logic\n static TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\n static LIMIT_FETCH = 'LIMIT';\n static TABLESAMPLE_WITH_METHOD = false;\n static JOIN_HINTS = false;\n static TABLE_HINTS = false;\n static QUERY_HINTS = false;\n static INDEX_ON = 'ON TABLE';\n static EXTRACT_ALLOWS_QUOTES = false;\n static NVL2_SUPPORTED = false;\n static LAST_DAY_SUPPORTS_DATE_PART = false;\n static JSON_PATH_SINGLE_QUOTE_ESCAPE = true;\n static SUPPORTS_TO_NUMBER = false;\n static WITH_PROPERTIES_PREFIX = 'TBLPROPERTIES';\n static PARSE_JSON_NAME?: string = undefined;\n static PAD_FILL_PATTERN_IS_REQUIRED = true;\n static SUPPORTS_MEDIAN = false;\n static ARRAY_SIZE_NAME = 'SIZE';\n static ALTER_SET_TYPE = '';\n\n @cache\n static get EXPRESSIONS_WITHOUT_NESTED_CTES () {\n return new Set([\n InsertExpr,\n SelectExpr,\n SubqueryExpr,\n SetOperationExpr,\n ]);\n }\n\n @cache\n static get SUPPORTED_JSON_PATH_PARTS (): Set<typeof Expression> {\n return new Set([\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n JsonPathWildcardExpr,\n ]);\n }\n\n @cache\n static get TYPE_MAPPING () {\n return new Map([\n ...Generator.TYPE_MAPPING,\n [\n DataTypeExprKind.BIT,\n 'BOOLEAN',\n ],\n [\n DataTypeExprKind.BLOB,\n 'BINARY',\n ],\n [\n DataTypeExprKind.DATETIME,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.ROWVERSION,\n 'BINARY',\n ],\n [\n DataTypeExprKind.TEXT,\n 'STRING',\n ],\n [\n DataTypeExprKind.TIME,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.UTINYINT,\n 'SMALLINT',\n ],\n [\n DataTypeExprKind.VARBINARY,\n 'BINARY',\n ],\n ]);\n }\n\n @cache\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static get ORIGINAL_TRANSFORMS (): Map<typeof Expression, (this: Generator, e: any) => string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transforms = new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Generator.TRANSFORMS,\n [\n PropertyExpr,\n propertySql,\n ],\n [\n AnyValueExpr,\n renameFunc('FIRST'),\n ],\n [\n ApproxDistinctExpr,\n approxCountDistinctSql,\n ],\n [\n ArgMaxExpr,\n argMaxOrMinNoCount('MAX_BY'),\n ],\n [\n ArgMinExpr,\n argMaxOrMinNoCount('MIN_BY'),\n ],\n [\n ArrayExpr,\n preprocess([\n inheritStructFieldNames,\n ]),\n ],\n [\n ArrayConcatExpr,\n renameFunc('CONCAT'),\n ],\n [\n ArrayToStringExpr,\n function (this: Generator, e: ArrayToStringExpr) {\n return this.func('CONCAT_WS', [\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n ArraySortExpr,\n function (this: Generator, e: ArraySortExpr) {\n return arraySortSql.call(this as HiveGenerator, e);\n },\n ],\n [\n WithExpr,\n noRecursiveCteSql,\n ],\n [\n DateAddExpr,\n function (this: Generator, e: DateAddExpr) {\n return addDateSql.call(this as HiveGenerator, e);\n },\n ],\n [\n DateDiffExpr,\n function (this: Generator, e: DateDiffExpr) {\n return dateDiffSql.call(this as HiveGenerator, e);\n },\n ],\n [\n DateStrToDateExpr,\n dateStrToDateSql,\n ],\n [\n DateSubExpr,\n function (this: Generator, e: DateSubExpr) {\n return addDateSql.call(this as HiveGenerator, e);\n },\n ],\n [\n DateToDiExpr,\n function (this: Generator, e: DateToDiExpr) {\n return `CAST(DATE_FORMAT(${this.sql(e, 'this')}, ${Hive.DATEINT_FORMAT}) AS INT)`;\n },\n ],\n [\n DiToDateExpr,\n function (this: Generator, e: DiToDateExpr) {\n return `TO_DATE(CAST(${this.sql(e, 'this')} AS STRING), ${Hive.DATEINT_FORMAT})`;\n },\n ],\n [\n StorageHandlerPropertyExpr,\n function (this: Generator, e: StorageHandlerPropertyExpr) {\n return `STORED BY ${this.sql(e, 'this')}`;\n },\n ],\n [\n FromBase64Expr,\n renameFunc('UNBASE64'),\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 IntDivExpr,\n function (this: Generator, e: IntDivExpr) {\n return this.binary(e, 'DIV');\n },\n ],\n [\n IsNanExpr,\n renameFunc('ISNAN'),\n ],\n [\n JsonExtractExpr,\n function (this: Generator, e: JsonExtractExpr) {\n return this.func('GET_JSON_OBJECT', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n JsonExtractScalarExpr,\n function (this: Generator, e: JsonExtractScalarExpr) {\n return this.func('GET_JSON_OBJECT', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n JsonFormatExpr,\n function (this: Generator, e: JsonFormatExpr) {\n return jsonFormatSql.call(this as HiveGenerator, e);\n },\n ],\n [\n LeftExpr,\n leftToSubstringSql,\n ],\n [\n MapExpr,\n varMapSql,\n ],\n [\n MaxExpr,\n maxOrGreatest,\n ],\n [\n Md5DigestExpr,\n function (this: Generator, e: Md5DigestExpr) {\n return this.func('UNHEX', [\n this.func('MD5', [\n e.args.this,\n ]),\n ]);\n },\n ],\n [\n MinExpr,\n minOrLeast,\n ],\n [\n MonthsBetweenExpr,\n function (this: Generator, e: MonthsBetweenExpr) {\n return this.func('MONTHS_BETWEEN', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n NotNullColumnConstraintExpr,\n function (this: Generator, e: NotNullColumnConstraintExpr) {\n return e.args.allowNull ? '' : 'NOT NULL';\n },\n ],\n [\n VarMapExpr,\n varMapSql,\n ],\n [\n CreateExpr,\n preprocess([\n removeUniqueConstraints,\n ctasWithTmpTablesToCreateTmpView,\n moveSchemaColumnsToPartitionedBy,\n ]),\n ],\n [\n QuantileExpr,\n renameFunc('PERCENTILE'),\n ],\n [\n ApproxQuantileExpr,\n renameFunc('PERCENTILE_APPROX'),\n ],\n [\n RegexpExtractExpr,\n regexpExtractSql,\n ],\n [\n RegexpExtractAllExpr,\n regexpExtractSql,\n ],\n [\n RegexpReplaceExpr,\n regexpReplaceSql,\n ],\n [\n RegexpLikeExpr,\n function (this: Generator, e: RegexpLikeExpr) {\n return this.binary(e, 'RLIKE');\n },\n ],\n [\n RegexpSplitExpr,\n renameFunc('SPLIT'),\n ],\n [\n RightExpr,\n rightToSubstringSql,\n ],\n [\n SchemaCommentPropertyExpr,\n function (this: Generator, e: SchemaCommentPropertyExpr) {\n return this.nakedProperty(e);\n },\n ],\n [\n ArrayUniqueAggExpr,\n renameFunc('COLLECT_SET'),\n ],\n [\n SplitExpr,\n function (this: Generator, e: SplitExpr) {\n return this.func('SPLIT', [\n e.args.this,\n this.func('CONCAT', [\n LiteralExpr.string('\\\\Q'),\n e.args.expression,\n LiteralExpr.string('\\\\E'),\n ]),\n ]);\n },\n ],\n [\n SelectExpr,\n preprocess([\n eliminateQualify,\n eliminateDistinctOn,\n (e: Expression) => unnestToExplode(e, {\n unnestUsingArraysZip: false,\n }),\n anyToExists,\n ]),\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr) {\n return strPositionSql.call(this, e, {\n funcName: 'LOCATE',\n supportsPosition: true,\n });\n },\n ],\n [\n StrToDateExpr,\n function (this: Generator, e: StrToDateExpr) {\n return strToDateSql.call(this as HiveGenerator, e);\n },\n ],\n [\n StrToTimeExpr,\n function (this: Generator, e: StrToTimeExpr) {\n return strToTimeSql.call(this as HiveGenerator, e);\n },\n ],\n [\n StrToUnixExpr,\n function (this: Generator, e: StrToUnixExpr) {\n return strToUnixSql.call(this as HiveGenerator, e);\n },\n ],\n [\n StructExtractExpr,\n structExtractSql,\n ],\n [\n StarMapExpr,\n renameFunc('MAP'),\n ],\n [\n TableExpr,\n preprocess([\n unnestGenerateSeries,\n ]),\n ],\n [\n TimeStrToDateExpr,\n renameFunc('TO_DATE'),\n ],\n [\n TimeStrToTimeExpr,\n timeStrToTimeSql,\n ],\n [\n TimeStrToUnixExpr,\n renameFunc('UNIX_TIMESTAMP'),\n ],\n [\n TimestampTruncExpr,\n function (this: Generator, e: TimestampTruncExpr) {\n return this.func('TRUNC', [\n e.args.this,\n unitToStr(e),\n ]);\n },\n ],\n [\n TimeToUnixExpr,\n renameFunc('UNIX_TIMESTAMP'),\n ],\n [\n ToBase64Expr,\n renameFunc('BASE64'),\n ],\n [\n TsOrDiToDiExpr,\n function (this: Generator, e: TsOrDiToDiExpr) {\n return `CAST(SUBSTR(REPLACE(CAST(${this.sql(e, 'this')} AS STRING), '-', ''), 1, 8) AS INT)`;\n },\n ],\n [\n TsOrDsAddExpr,\n function (this: Generator, e: TsOrDsAddExpr) {\n return addDateSql.call(this as HiveGenerator, e);\n },\n ],\n [\n TsOrDsDiffExpr,\n function (this: Generator, e: TsOrDsDiffExpr) {\n return dateDiffSql.call(this as HiveGenerator, e);\n },\n ],\n [\n TsOrDsToDateExpr,\n function (this: Generator, e: TsOrDsToDateExpr) {\n return toDateSql.call(this as HiveGenerator, e);\n },\n ],\n [\n TryCastExpr,\n noTrycastSql,\n ],\n [\n TrimExpr,\n trimSql,\n ],\n [\n UnicodeExpr,\n renameFunc('ASCII'),\n ],\n [\n UnixToStrExpr,\n function (this: Generator, e: UnixToStrExpr) {\n return this.func('FROM_UNIXTIME', [\n e.args.this,\n timeFormat('hive').call(this, e),\n ]);\n },\n ],\n [\n UnixToTimeExpr,\n function (this: Generator, e: UnixToTimeExpr) {\n return unixToTimeSql.call(this as HiveGenerator, e);\n },\n ],\n [\n UnixToTimeStrExpr,\n renameFunc('FROM_UNIXTIME'),\n ],\n [\n PartitionedByPropertyExpr,\n function (this: Generator, e: PartitionedByPropertyExpr) {\n return `PARTITIONED BY ${this.sql(e, 'this')}`;\n },\n ],\n [\n NumberToStrExpr,\n renameFunc('FORMAT_NUMBER'),\n ],\n [\n NationalExpr,\n function (this: Generator, e: NationalExpr) {\n return this.nationalSql(e, {\n prefix: '',\n });\n },\n ],\n [\n ClusteredColumnConstraintExpr,\n function (this: Generator, e: ClusteredColumnConstraintExpr) {\n return `(${this.expressions(e, {\n key: 'this',\n indent: false,\n })})`;\n },\n ],\n [\n NonClusteredColumnConstraintExpr,\n function (this: Generator, e: NonClusteredColumnConstraintExpr) {\n return `(${this.expressions(e, {\n key: 'this',\n indent: false,\n })})`;\n },\n ],\n [\n NotForReplicationColumnConstraintExpr,\n () => '',\n ],\n [\n OnPropertyExpr,\n () => '',\n ],\n [\n PartitionedByBucketExpr,\n function (this: Generator, e: PartitionedByBucketExpr) {\n return this.func('BUCKET', [\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n PartitionByTruncateExpr,\n function (this: Generator, e: PartitionByTruncateExpr) {\n return this.func('TRUNCATE', [\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n PrimaryKeyColumnConstraintExpr,\n () => 'PRIMARY KEY',\n ],\n [\n WeekOfYearExpr,\n renameFunc('WEEKOFYEAR'),\n ],\n [\n DayOfMonthExpr,\n renameFunc('DAYOFMONTH'),\n ],\n [\n DayOfWeekExpr,\n renameFunc('DAYOFWEEK'),\n ],\n [\n LevenshteinExpr,\n function (this: Generator, e: Expression) {\n unsupportedArgs.call(this, e, 'insCost', 'delCost', 'subCost', 'maxDist');\n return renameFunc('LEVENSHTEIN').call(this, e);\n },\n ],\n ]);\n return transforms;\n }\n\n @cache\n static get PROPERTIES_LOCATION (): Map<typeof Expression, PropertiesLocation> {\n return new Map([\n ...Generator.PROPERTIES_LOCATION,\n [\n FileFormatPropertyExpr,\n PropertiesLocation.POST_SCHEMA,\n ],\n [\n PartitionedByPropertyExpr,\n PropertiesLocation.POST_SCHEMA,\n ],\n [\n VolatilePropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n [\n WithDataPropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n ] as [typeof Expression, PropertiesLocation][]);\n }\n\n @cache\n static get TS_OR_DS_EXPRESSIONS (): Set<typeof Expression> {\n return new Set([\n DateDiffExpr,\n DayExpr,\n MonthExpr,\n YearExpr,\n ]);\n }\n\n unnestSql (expression: UnnestExpr): string {\n return renameFunc('EXPLODE').call(this, expression);\n }\n\n jsonPathKeySql (expression: JsonPathKeyExpr): string {\n if (expression.args.this instanceof JsonPathWildcardExpr) {\n this.unsupported('Unsupported wildcard in JSONPathKey expression');\n return '';\n }\n\n return super.jsonPathKeySql(expression);\n }\n\n parameterSql (expression: ParameterExpr): string {\n let thisSql = this.sql(expression, 'this');\n const expressionSql = this.sql(expression, 'expression');\n\n const parent = expression.parent;\n thisSql = expressionSql ? `${thisSql}:${expressionSql}` : thisSql;\n\n if (parent instanceof EqExpr && parent.parent instanceof SetItemExpr) {\n return thisSql;\n }\n\n return `\\${${thisSql}}`;\n }\n\n schemaSql (expression: SchemaExpr): string {\n for (const ordered of expression.findAll(OrderedExpr)) {\n if (ordered.args.desc === false) {\n ordered.setArgKey('desc', undefined);\n }\n }\n\n return super.schemaSql(expression);\n }\n\n constraintSql (expression: ConstraintExpr): string {\n for (const prop of Array.from(expression.findAll(PropertiesExpr))) {\n prop.pop();\n }\n\n const thisSql = this.sql(expression, 'this');\n const expressions = this.expressions(expression, {\n sep: ' ',\n flat: true,\n });\n return `CONSTRAINT ${thisSql} ${expressions}`;\n }\n\n rowFormatSerdePropertySql (expression: RowFormatSerdePropertyExpr): string {\n let serdeProps = this.sql(expression, 'serdeProperties');\n serdeProps = serdeProps ? ` ${serdeProps}` : '';\n return `ROW FORMAT SERDE ${this.sql(expression, 'this')}${serdeProps}`;\n }\n\n arrayAggSql (expression: ArrayAggExpr): string {\n return this.func(\n 'COLLECT_LIST',\n [\n expression.args.this instanceof OrderExpr ? expression.args.this.args.this : expression.args.this,\n ],\n );\n }\n\n truncSql (expression: TruncExpr): string {\n if (expression.args.decimals) {\n this.unsupported('Unsupported arg \\'decimals\\' for TRUNC');\n }\n return this.sql(new CastExpr({\n this: expression.args.this,\n to: DataTypeExpr.build('bigint'),\n }));\n }\n\n dataTypeSql (expression: DataTypeExpr): string {\n if (\n expression.isType(Generator.PARAMETERIZABLE_TEXT_TYPES)\n && (!expression.args.expressions || (expression.args.expressions[0] as IdentifierExpr).name === 'MAX')\n ) {\n expression = DataTypeExpr.build('text') ?? expression;\n } else if (expression.isType(DataTypeExprKind.TEXT) && expression.args.expressions) {\n expression.setArgKey('this', DataTypeExprKind.VARCHAR);\n } else if (expression.isType(DataTypeExpr.TEMPORAL_TYPES)) {\n expression = DataTypeExpr.build(expression.args.this) ?? expression;\n } else if (expression.isType('float')) {\n const sizeExpression = expression.find(DataTypeParamExpr);\n if (sizeExpression instanceof DataTypeParamExpr) {\n const size = parseInt(sizeExpression.args.this?.args.this?.toString() ?? '0');\n expression = (size <= 32 ? DataTypeExpr.build('float') : DataTypeExpr.build('double')) ?? expression;\n }\n }\n\n return super.dataTypeSql(expression);\n }\n\n versionSql (expression: VersionExpr): string {\n const sql = super.versionSql(expression);\n return sql.replace('FOR ', '');\n }\n\n structSql (expression: StructExpr): string {\n const values: (string | Expression)[] = [\n ];\n\n expression.args.expressions?.forEach((e) => {\n if (e instanceof PropertyEqExpr) {\n this.unsupported('Hive does not support named structs.');\n const exprVal = e.args.expression;\n values.push((exprVal instanceof Expression || typeof exprVal === 'string') ? exprVal : '');\n } else {\n values.push(e);\n }\n });\n\n return this.func('STRUCT', values);\n }\n\n columnDefSql (expression: ColumnDefExpr, options: {sep?: string} = {}): string {\n const {\n sep = ' ',\n } = options;\n return super.columnDefSql(expression, {\n sep:\n expression.parent instanceof DataTypeExpr && expression.parent.isType('struct')\n ? ': '\n : sep,\n });\n }\n\n alterColumnSql (expression: AlterColumnExpr): string {\n const thisSql = this.sql(expression, 'this');\n const newName = this.sql(expression, 'renameTo') || thisSql;\n const dtype = this.sql(expression, 'dtype');\n const commentSql = this.sql(expression, 'comment');\n const comment = commentSql ? ` COMMENT ${commentSql}` : '';\n\n const defaultVal = this.sql(expression, 'default');\n const visible = expression.args.visible;\n const allowNoNull = expression.args.allowNull;\n const drop = expression.args.drop;\n\n if (defaultVal || drop || visible || allowNoNull) {\n this.unsupported('Unsupported CHANGE COLUMN syntax');\n }\n\n if (!dtype) {\n this.unsupported('CHANGE COLUMN without a type is not supported');\n }\n\n return `CHANGE COLUMN ${thisSql} ${newName} ${dtype}${comment}`;\n }\n\n renameColumnSql (_expr: Expression): string {\n this.unsupported('Cannot rename columns without data type defined in Hive');\n return '';\n }\n\n alterSetSql (expression: AlterSetExpr): string {\n let exprs = this.expressions(expression, {\n flat: true,\n });\n exprs = exprs ? ` ${exprs}` : '';\n\n let location = this.sql(expression, 'location');\n location = location ? ` LOCATION ${location}` : '';\n\n let fileFormat = this.expressions(expression, {\n key: 'fileFormat',\n flat: true,\n sep: ' ',\n });\n fileFormat = fileFormat ? ` FILEFORMAT ${fileFormat}` : '';\n\n let serde = this.sql(expression, 'serde');\n serde = serde ? ` SERDE ${serde}` : '';\n\n let tags = this.expressions(expression, {\n key: 'tag',\n flat: true,\n sep: '',\n });\n tags = tags ? ` TAGS ${tags}` : '';\n\n return `SET${serde}${exprs}${location}${fileFormat}${tags}`;\n }\n\n serdePropertiesSql (expression: SerdePropertiesExpr): string {\n const prefix = expression.args.with ? 'WITH ' : '';\n const exprs = this.expressions(expression, {\n flat: true,\n });\n\n return `${prefix}SERDEPROPERTIES (${exprs})`;\n }\n\n existsSql (expression: ExistsExpr): string {\n if (expression.args.expression) {\n return this.functionFallbackSql(expression);\n }\n\n return super.existsSql(expression);\n }\n\n timeToStrSql (expression: TimeToStrExpr): string {\n let thisNode = expression.args.this;\n if (thisNode instanceof TimeStrToTimeExpr) {\n thisNode = thisNode.args.this;\n }\n\n return this.func('DATE_FORMAT', [\n thisNode,\n this.formatTime(expression),\n ]);\n }\n\n fileFormatPropertySql (expression: FileFormatPropertyExpr): string {\n let thisSql: string;\n if (expression.args.this instanceof InputOutputFormatExpr) {\n thisSql = this.sql(expression, 'this');\n } else {\n thisSql = expression.name.toUpperCase();\n }\n\n return `STORED AS ${thisSql}`;\n }\n}\n\nexport class Hive extends Dialect {\n static DIALECT_NAME = Dialects.HIVE;\n static ALIAS_POST_TABLESAMPLE = true;\n static IDENTIFIERS_CAN_START_WITH_DIGIT = true;\n static SUPPORTS_USER_DEFINED_TYPES = false;\n\n static get EXPRESSION_METADATA () {\n return new Map(HiveTyping.EXPRESSION_METADATA);\n }\n\n @cache\n static get COERCES_TO (): Map<DataTypeExprKind, Set<DataTypeExprKind>> {\n const coercesTo = new Map(TypeAnnotator.COERCES_TO);\n for (const targetType of [\n ...DataTypeExpr.NUMERIC_TYPES,\n ...DataTypeExpr.TEMPORAL_TYPES,\n DataTypeExprKind.INTERVAL,\n ]) {\n const existing = coercesTo.get(targetType as DataTypeExprKind) ?? new Set<DataTypeExprKind>();\n coercesTo.set(targetType as DataTypeExprKind, new Set([\n ...existing,\n ...DataTypeExpr.TEXT_TYPES,\n ]));\n }\n return coercesTo;\n }\n\n static SAFE_DIVISION = true;\n static ARRAY_AGG_INCLUDES_NULLS = undefined;\n static REGEXP_EXTRACT_DEFAULT_GROUP = 1;\n static ALTER_TABLE_SUPPORTS_CASCADE = true;\n\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.CASE_INSENSITIVE;\n }\n\n static INITCAP_DEFAULT_DELIMITER_CHARS = ' \\t\\n\\r\\f\\u000b\\u001c\\u001d\\u001e\\u001f';\n\n @cache\n static get TIME_MAPPING () {\n return {\n y: '%Y',\n Y: '%Y',\n YYYY: '%Y',\n yyyy: '%Y',\n YY: '%y',\n yy: '%y',\n MMMM: '%B',\n MMM: '%b',\n MM: '%m',\n M: '%-m',\n dd: '%d',\n d: '%-d',\n HH: '%H',\n H: '%-H',\n hh: '%I',\n h: '%-I',\n mm: '%M',\n m: '%-M',\n ss: '%S',\n s: '%-S',\n SSSSSS: '%f',\n a: '%p',\n DD: '%j',\n D: '%-j',\n E: '%a',\n EE: '%a',\n EEE: '%a',\n EEEE: '%A',\n z: '%Z',\n Z: '%z',\n };\n }\n\n static DATE_FORMAT = '\\'yyyy-MM-dd\\'';\n static DATEINT_FORMAT = '\\'yyyyMMdd\\'';\n static TIME_FORMAT = '\\'yyyy-MM-dd HH:mm:ss\\'';\n\n static Tokenizer = HiveTokenizer;\n static Parser = HiveParser;\n static Generator = HiveGenerator;\n}\n\nDialect.register(Dialects.HIVE, Hive);\n"],"mappings":"qtDAAA,IAAAA,GAAAC,GAyCED,GAAA,CAACE,GADI,IAAMC,EAAN,KAAiB,CAEtB,WAAW,qBAA2C,CAEpD,IAAMC,EAA0B,IAAI,IAAIC,GAAc,mBAAmB,EAEnEC,EAAS,CAACC,EAA8BC,IAAkC,CAC9E,QAAWC,KAAQF,EAAOH,EAAI,IAAIK,EAAMD,CAAI,CAC9C,EAEA,OAAAF,EAAO,CACLI,GACAC,EACF,EAAG,CACD,gBACF,CAAC,EAEDL,EAAO,CACLM,GACAC,CACF,EAAG,CACD,gBACF,CAAC,EAEDP,EAAO,CACLQ,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACF,EAAG,CACD,iBACF,CAAC,EAEDd,EAAO,CACLe,EACAC,EACF,EAAG,CACD,gBACF,CAAC,EAEDhB,EAAO,CACLiB,EACAC,EACF,EAAG,CACD,aACF,CAAC,EAEDpB,EAAI,IAAIqB,GAAc,CACpB,UAAW,CAACC,EAAkB,IAAoBA,EAAE,eAAe,EAAG,CACpE,OACA,aACF,EAAG,CACD,QAAS,EACX,CAAC,CACH,CAAC,EAEDtB,EAAI,IAAIuB,EAAQ,CACd,UAAW,CAACD,EAAkB,IAAcA,EAAE,eAAe,EAAG,CAC9D,OACA,OACF,EAAG,CACD,QAAS,EACX,CAAC,CACH,CAAC,EAEDtB,EAAI,IAAIwB,EAAiB,CACvB,QAAS,eACX,CAAC,EAEDxB,EAAI,IAAIyB,GAAa,CACnB,UAAW,CAACH,EAAkB,IAAmBA,EAAE,eAAe,EAAG,CACnE,MACF,CAAC,CACH,CAAC,EAEMtB,CACT,CACF,EAhFOH,GAAA6B,EAAA,MAELC,EAAA9B,GAAA,GAAW,sBADXD,GADWG,GAAN6B,EAAA/B,GAAME,GAAN8B,EAAAhC,GAAA,EAAME,GCgLb,IAAM+B,GAAwD,CAC5D,KAAM,CACJ,aACA,EACF,EACA,MAAO,CACL,aACA,CACF,EACA,QAAS,CACP,aACA,CACF,EACA,KAAM,CACJ,WACA,CACF,EACA,IAAK,CACH,WACA,CACF,CACF,EAEMC,GAA2C,CAC/C,YAAa,UACb,OAAQ,GACR,OAAQ,QACR,KAAM,SACR,EAEMC,GAAoB,IAAI,IAAI,CAChC,OACA,UACA,OACF,CAAC,EAED,SAASC,GAA6BC,EAA+D,CACnG,GAAIA,aAAsBC,GAAiB,CAACD,EAAW,KAAK,KAC1D,OAAO,KAAK,KAAK,WAAY,CAC3BA,EAAW,KAAK,KAChBA,EAAW,KAAK,UAClB,CAAC,EAGH,IAAME,EAAOF,EAAW,KAAK,MAAM,EAAE,YAAY,EAE7C,CAEFG,EACAC,CACF,EAAIR,GAAoBM,CAAI,GAAK,CAC/B,WACA,CACF,EAEIF,aAAsBK,IACxBD,GAAc,IAGhB,IAAIE,EAAYN,EAAW,KAAK,WAChC,GAAIM,aAAqBC,EAAa,CACpC,IAAMC,EAAQF,EAAU,SAAW,WAAWA,EAAU,KAAK,MAAQ,GAAG,EAAI,SAASA,EAAU,KAAK,MAAQ,GAAG,EAC/GA,EAAYC,EAAY,OAAOC,EAAQJ,CAAU,CACnD,MAAWA,IAAe,IACxBE,EAAY,IAAIG,GAAQ,CACtB,KAAMH,EACN,WAAYC,EAAY,OAAOH,CAAU,CAC3C,CAAC,GAGH,OAAO,KAAK,KAAKD,EAAM,CACrBH,EAAW,KAAK,KAChBM,CACF,CAAC,CACH,CAEA,SAASI,GAA8BV,EAAmD,CACxF,IAAME,EAAOF,EAAW,KAAK,MAAM,EAAE,YAAY,EAE3CW,EAASd,GAAiBK,CAAI,EACpC,GAAIS,IAAW,OAAW,CACxB,IAAMC,EAAO,KAAK,IAAIZ,EAAY,MAAM,EAClCa,EAAQ,KAAK,IAAIb,EAAY,YAAY,EACzCc,EAAU,kBAAkBF,CAAI,sBAAsBC,CAAK,IACjE,OAAOF,EAAS,IAAIG,CAAO,IAAIH,CAAM,GAAKG,CAC5C,CAEA,IAAMC,EAAgBjB,GAAkB,IAAII,CAAI,EAC1Cc,EAAUD,EAAgB,iBAAmB,WAC7CX,EAAaR,GAAoBM,CAAI,IAAI,CAAC,GAAK,EAC/Ce,EAAgB,EAAIb,EAAa,MAAMA,CAAU,GAAK,GAExDc,EAAU,GAAGF,CAAO,IAAI,KAAK,WAAW,CAC1ChB,EAAW,KAAK,KAChBA,EAAW,KAAK,UAClB,CAAC,CAAC,IAEF,OAAIe,GAAiBE,KACnBC,EAAU,QAAQA,CAAO,GAAGD,CAAa,YAGpCC,CACT,CAEA,SAASC,GAAgCnB,EAAoC,CAC3E,IAAMoB,EAAWpB,EAAW,KAAK,KAEjC,GAAIoB,GAAYC,GAAYD,CAAQ,EAAG,CACrC,GAAIA,EAAS,KAAK,gBAAgBb,GAAea,EAAS,KAAK,KAAK,SAAU,CAC5E,IAAME,EAAcf,EAAY,OAAO,IAAIa,EAAS,KAAK,KAAK,KAAK,IAAI,GAAG,EAEpEG,EAAW,KAAK,KAAK,YAAa,CACtCD,EACA,KAAK,KAAK,iBAAkB,CAC1BA,CACF,CAAC,CACH,CAAC,EACKE,EAAS,KAAK,KAAK,UAAW,CAClCD,CACF,CAAC,EAED,OAAO,KAAK,KAAK,iBAAkB,CACjCC,EACAjB,EAAY,OAAO,YAAc,EACjCA,EAAY,OAAO,CAAC,CACtB,CAAC,CACH,CACA,OAAO,KAAK,IAAIa,CAAQ,CAC1B,CAEA,OAAO,KAAK,KAAK,UAAW,CAC1BA,EACApB,EAAW,KAAK,OAClB,CAAC,CACH,CAEA,SAASyB,GAA+BzB,EAAmC,CACzE,OAAIA,EAAW,KAAK,YAClB,KAAK,YAAY,4CAA8C,EAE1D,KAAK,KAAK,aAAc,CAC7BA,EAAW,KAAK,IAClB,CAAC,CACH,CAEA,SAAS0B,GAA+B1B,EAAmC,CACzE,OAAO,KAAK,KAAK,iBAAkB,CACjCA,EAAW,KAAK,KAChB2B,GAAW,MAAM,EAAE,KAAK,KAAM3B,CAAU,CAC1C,CAAC,CACH,CAEA,SAAS4B,GAAgC5B,EAAoC,CAC3E,IAAM6B,EAAY,KAAK,IAAI7B,EAAY,MAAM,EACvC8B,EAAQ9B,EAAW,KAAK,MAE9B,OAAI8B,IAAU,QAAaA,EAAM,QAAQ,IAAMC,GAAe,QAAQ,QAAQ,EACrEC,EAAW,eAAe,EAAE,KAAK,KAAMhC,CAAU,EAGnD,iBAAiB6B,CAAS,cAAcC,CAAK,IACtD,CAEA,SAASG,GAA+BjC,EAAmC,CACzE,IAAIkC,EAAU,KAAK,IAAIlC,EAAY,MAAM,EACnCmC,EAAgB,KAAK,WAAWnC,CAAU,EAEhD,OAAImC,GAAkB,MAAuC,CAAC,CAC5DC,EAAK,YACLA,EAAK,WACP,EAAE,SAASD,CAAa,IACtBD,EAAU,gCAAgCA,CAAO,KAAKC,CAAa,MAG9D,QAAQD,CAAO,WACxB,CAEA,SAASG,GAA+BrC,EAAmC,CACzE,IAAIkC,EAAU,KAAK,IAAIlC,EAAY,MAAM,EACnCmC,EAAgB,KAAK,WAAWnC,CAAU,EAEhD,OAAImC,GAAkB,MAAuC,CAAC,CAC5DC,EAAK,YACLA,EAAK,WACP,EAAE,SAASD,CAAa,IACtBD,EAAU,gCAAgCA,CAAO,KAAKC,CAAa,MAG9D,QAAQD,CAAO,gBACxB,CAEA,SAASI,GAA4BtC,EAAsC,CACzE,IAAMmC,EAAgB,KAAK,WAAWnC,CAAU,EAEhD,OAAImC,GAAiB,CAAC,CACpBC,EAAK,YACLA,EAAK,WACP,EAAE,SAASD,CAAa,EACf,KAAK,KAAK,UAAW,CAC1BnC,EAAW,KAAK,KAChBmC,CACF,CAAC,EAGCnC,EAAW,kBAAkBuC,GAAe,KAAK,aAAsC,qBAAqB,IAAIvC,EAAW,OAAO,YAAY,EACzI,KAAK,IAAIA,EAAY,MAAM,EAG7B,KAAK,KAAK,UAAW,CAC1BA,EAAW,KAAK,IAClB,CAAC,CACH,CAEO,SAASwC,EAAsBC,EAA6B,CACjE,OAAQC,GAAuB,CAC7B,IAAMtB,EAAW,IAAIqB,EAAS,CAC5B,KAAME,EAAOD,EAAM,CAAC,CACtB,CAAC,EACD,OAAIC,EAAOD,EAAM,CAAC,YAAaE,IAAeD,EAAOD,EAAM,CAAC,GAAG,KAAK,OAAS,GACpE,IAAIG,GAAgB,CACzB,KAAMzB,CACR,CAAC,EAEIA,CACT,CACF,CAEA,SAAS0B,GAAaJ,EAAsC,CAC1D,IAAMK,EAAOC,EAAmBC,EAAkB,CAChD,QAAS,MACX,CAAC,EAAEP,CAAI,EACP,OAAAK,EAAK,UAAU,OAAQ,EAAI,EACpBA,CACT,CAEA,SAASG,GAAcR,EAAmC,CACxD,IAAI1C,EAAa2C,EAAOD,EAAM,CAAC,EAC/B,OAAI1C,IACFA,EAAaA,EAAW,IAAI,EAAE,GAGzB,IAAIC,EAAc,CACvB,KAAM0C,EAAOD,EAAM,CAAC,EACpB,WAAY1C,EACZ,KAAMmD,GAAK,KAAK,CAClB,CAAC,CACH,CA9cA,IAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAgdMC,EAAN,cAA4BF,GAAAG,EAC1BJ,GAAA,CAACK,GAQDN,GAAA,CAACM,GAODP,GAAA,CAACO,GAODR,GAAA,CAACQ,GAQDT,GAAA,CAACS,GAmBDV,GAAA,CAACU,GAlDyBJ,GAAU,CAEpC,WAAW,QAAU,CACnB,MAAO,CACL,IACA,GACF,CACF,CAGA,WAAW,aAAe,CACxB,MAAO,CACL,GACF,CACF,CAGA,WAAW,gBAAkB,CAC3B,MAAO,CACL,IACF,CACF,CAGA,WAAW,eAAiB,CAC1B,MAAO,CACL,GAAGG,EAAU,cACb,aACF,CACF,CAGA,WAAW,mBAAgD,CACzD,MAAO,CACL,GAAGA,EAAU,SACb,wBACA,yBACA,qBACA,sBACA,oBACA,qBACA,eACA,wBACA,kBACA,sCACA,kCACA,iCACF,CACF,CAGA,WAAW,kBAAoB,CAC7B,MAAO,CACL,EAAG,SACH,EAAG,WACH,EAAG,UACH,EAAG,SACH,EAAG,QACH,GAAI,SACN,CACF,CACF,EA7DAF,EAAAI,EAAAL,IAEEM,EAAAL,EAAA,GAAW,SADXF,GADIG,GAUJI,EAAAL,EAAA,GAAW,cADXH,GATII,GAiBJI,EAAAL,EAAA,GAAW,iBADXJ,GAhBIK,GAwBJI,EAAAL,EAAA,GAAW,gBADXL,GAvBIM,GAgCJI,EAAAL,EAAA,GAAW,oBADXN,GA/BIO,GAmDJI,EAAAL,EAAA,GAAW,mBADXP,GAlDIQ,GAANK,EAAAN,EAAMC,GAANM,EAAAP,EAAA,EAAMC,GAhdN,IAAAO,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAhB,GAAAC,EA+gBMgB,EAAN,cAAyBjB,GAAAkB,EACvBF,GAAA,CAACZ,GAWDW,GAAA,CAACX,GAmBDU,GAAA,CAACV,GAaDS,GAAA,CAACT,GAsHDQ,GAAA,CAACR,GAUDO,GAAA,CAACP,GAYDM,GAAA,CAACN,GA+LDK,GAAA,CAACL,GAvXsBJ,GAAO,CAE9B,WAAW,eAAiC,CAC1C,OAAO,IAAI,IAAI,CACb,GAAGkB,EAAO,2DAIZ,CAAC,CACH,CAIA,WAAW,oBAAsB,CAC/B,IAAMC,EAAmB,CACvB,GAAGD,EAAO,kBACZ,EACA,cAAOC,EAAiB,YACxB,OAAOA,EAAiB,UACxB,OAAOA,EAAiB,eACjBA,CACT,CAWA,WAAW,kBAAuF,CAChG,MAAO,CACL,GAAGD,EAAO,iBACV,WAAY,UAAwB,CAClC,OAAQ,KAAoB,sBAAsBE,EAAY,CAChE,EACA,kBAAmB,UAAwB,CACzC,OAAQ,KAAoB,sBAAsBC,EAAkB,CACtE,CACF,CACF,CAGA,WAAW,WAAoG,CAC7G,MAAO,CACL,GAAGH,EAAO,UACV,WAAalC,GAAsC,IAAIzC,EAAc,CACnE,KAAM0C,EAAOD,EAAM,CAAC,EACpB,WAAYC,EAAOD,EAAM,CAAC,EAC1B,KAAMS,GAAK,OAAO,CACpB,CAAC,EACD,OAAST,GAAoBsC,GAAa,YAAYtC,CAAI,EAC1D,aAAeA,GAAuB,IAAIuC,GAAa,CACrD,KAAMtC,EAAOD,EAAM,CAAC,EACpB,cAAe,EACjB,CAAC,EACD,YAAcA,GAAoBwC,GAAmB,YAAYxC,CAAI,EACrE,SAAWA,GAAuB,IAAIzC,EAAc,CAClD,KAAM0C,EAAOD,EAAM,CAAC,EACpB,WAAYC,EAAOD,EAAM,CAAC,EAC1B,KAAM,IAAIyC,GAAQ,CAChB,KAAM,KACR,CAAC,CACH,CAAC,EACD,YAAczC,GAAuBM,EAAmBoC,GAAe,CACrE,QAAS,MACX,CAAC,EAAE,CACD,IAAIC,EAAkB,CACpB,KAAM1C,EAAOD,EAAM,CAAC,CACtB,CAAC,EACDC,EAAOD,EAAM,CAAC,CAChB,CAAC,EACD,SAAUQ,GACV,SAAWR,GAAuB,IAAI4C,EAAa,CACjD,KAAM,IAAIrC,EAAiB,CACzB,KAAMN,EAAOD,EAAM,CAAC,CACtB,CAAC,EACD,WAAY,IAAIO,EAAiB,CAC/B,KAAMN,EAAOD,EAAM,CAAC,CACtB,CAAC,CACH,CAAC,EACD,IAAMA,GAAuB,IAAI6C,GAAQ,CACvC,KAAM,IAAItC,EAAiB,CACzB,KAAMN,EAAOD,EAAM,CAAC,CACtB,CAAC,CACH,CAAC,EACD,MAAOF,EAAqBgD,EAAS,EACrC,YAAahD,EAAqBiD,EAAc,EAChD,cAAezC,EAAmB0C,GAAe,CAC/C,QAAS,OACT,aAAc,EAChB,CAAC,EACD,gBAAiB,CAAChD,EAAoB,CACpC,QAAAiD,CACF,IAA0B,IAAIC,GAAsB,CAClD,KAAMjD,EAAOD,EAAM,CAAC,EACpB,WAAYiD,EAAQ,WAAWhD,EAAOD,EAAM,CAAC,CAAC,CAChD,CAAC,EACD,KAAMF,EAAqBqD,EAAQ,EACnC,WAAYrD,EAAqBsD,EAAa,EAC9C,IAAMpD,GAAuB,CAC3B,GAAIA,EAAK,SAAW,GAAKA,EAAK,CAAC,EAAE,OAC/B,OAAO,IAAIqD,GAAY,CACrB,KAAMrD,EAAK,CAAC,CACd,CAAC,EAEH,IAAMsD,EAAqB,CAC3B,EACMC,EAAuB,CAC7B,EACA,QAAS,EAAI,EAAG,EAAIvD,EAAK,OAAQ,GAAK,EACpCsD,EAAK,KAAKtD,EAAK,CAAC,CAAC,EACbA,EAAK,EAAI,CAAC,GAAGuD,EAAO,KAAKvD,EAAK,EAAI,CAAC,CAAC,EAE1C,OAAO,IAAIwD,GAAW,CACpB,KAAM,IAAIC,EAAU,CAClB,YAAaH,CACf,CAAC,EACD,OAAQ,IAAIG,EAAU,CACpB,YAAaF,CACf,CAAC,CACH,CAAC,CACH,EACA,MAAQvD,GAAuB,IAAI0D,EAAU,CAC3C,KAAM,IAAInD,EAAiB,CACzB,KAAMN,EAAOD,EAAM,CAAC,CACtB,CAAC,CACH,CAAC,EACD,eAAgB2D,GAAmBC,EAAiB,EACpD,mBAAoBD,GAAmBE,EAAoB,EAC3D,SAAW7D,GAAoB8D,EAAmB,YAAY9D,CAAI,EAClE,KAAOA,GAAoB+D,GAAc,YAAY/D,CAAI,EACzD,MAAQA,GAAoBgE,EAAgB,YAAYhE,CAAI,EAC5D,WAAaA,GAAuB,IAAIiE,GAAa,CACnD,KAAMhE,EAAOD,EAAM,CAAC,EACpB,UAAWC,EAAOD,EAAM,CAAC,GAAKnC,EAAY,OAAO,GAAG,EACpD,cAAeoC,EAAOD,EAAM,CAAC,GAAKnC,EAAY,OAAO,GAAG,CAC1D,CAAC,EACD,QAASuC,GACT,QAAUJ,GAAoBkE,GAAe,YAAYlE,CAAI,EAC7D,MAAQA,GAAoBmE,GAAmB,YAAYnE,CAAI,EAC/D,SAAWA,GAAoBoE,GAAe,YAAYpE,CAAI,EAC9D,eAAiBA,GAAuBM,EAAmB+D,EAAe,CACxE,QAAS,OACT,aAAc,EAChB,CAAC,EACC,EAAIrE,EAAK,OACLA,EACA,CACA,IAAIsE,GAAqB,CAAC,CAAC,CAC7B,CACJ,EACA,KAAOtE,GAAuB,IAAIuE,GAAS,CACzC,KAAM,IAAIhE,EAAiB,CACzB,KAAMN,EAAOD,EAAM,CAAC,CACtB,CAAC,CACH,CAAC,CACH,CACF,CAGA,WAAW,2BAAgG,CACzG,MAAO,CACL,GAAGkC,EAAO,0BACV,UAAW,UAAwB,CACjC,OAAQ,KAAoB,eAAe,CAC7C,CACF,CACF,CAGA,WAAW,kBAAiH,CAC1H,MAAO,CACL,GAAGA,EAAO,iBACV,gBAAiB,UAAwB,CACvC,OAAO,IAAIsC,GAAoB,CAC7B,YAAa,KAAK,gBAAgB,IAAM,KAAK,cAAc,CAA2B,CACxF,CAAC,CACH,CACF,CACF,CAGA,WAAW,eAAmG,CAC5G,MAAO,CACL,GAAGtC,EAAO,cACV,OAAQ,UAAwB,CAC9B,OAAQ,KAAoB,sBAAsB,CACpD,CACF,CACF,CAEA,gBAAkE,CAChE,GAAI,CAAC,KAAK,eAAyB,CACjC,QAAS,EACX,CAAC,EAAG,CACF,KAAK,QAAQ,KAAK,MAAQ,CAAC,EAC3B,MACF,CAEA,IAAMlC,EAAO,KAAK,gBAAgB,IAAO,KAAoB,YAAY,CAAC,EACpEyE,EAAmB,KAAoB,eAAe,CAC1D,SAAU,EACZ,CAAC,EAEGC,EAKJ,GAJI,KAAK,aAAa,cAAc,IAClCA,EAAgB,KAAoB,YAAY,GAG9C,CAAC,KAAK,aAAqB,EAC7B,OAAOC,GAAc,YAAY3E,CAAI,EAGvC,IAAM4E,EAAiB,KAAoB,YAAY,EAEvD,KAAK,aAAqB,EAC1B,IAAMC,EAAS,KAAK,YAAY,EAE1BC,EAAkB,KAAoB,eAAe,CACzD,SAAU,EACZ,CAAC,EACGC,EACJ,OAAI,KAAK,aAAa,cAAc,IAClCA,EAAgB,KAAoB,YAAY,GAG3C,KAAK,WAAWC,GAAoB,CACzC,YAAahF,EACb,cAAe4E,EACf,OAAQC,EACR,gBAAiBJ,EACjB,aAAcC,EACd,eAAgBI,EAChB,aAAcC,CAChB,CAAC,CACH,CAEA,sBAAuBE,EAA+F,CACpH,IAAIC,EACA,KAAK,gBAAwB,EAC/BA,EAAW,KAAK,WAAWC,GAAc,CACvC,YAAa,CACV,KAAoB,YAAY,CACnC,CACF,CAAC,GAED,KAAK,WAAmB,EACxBD,EAAY,KAAoB,YAAY,GAG9C,IAAMlF,EAAO,CACXkF,CACF,EACA,OAAI,KAAK,aAAqB,GAC5BlF,EAAK,KAAK,GAAG,KAAK,kBAAkB,CAAC,EAGhCiF,EAAU,YAAYjF,CAAI,CACnC,CAEA,WAAYoF,EAEqB,CAAC,EAA2B,CAC3D,GAAM,CACJ,UAAAC,EAAY,GAAO,OAAAR,EAAS,GAAO,iBAAAS,EAAmB,EACxD,EAAIF,EACE1G,EAAW,MAAM,WAAW,CAChC,UAAA2G,EACA,OAAAR,EACA,iBAAAS,CACF,CAAC,EAED,OAAI5G,GAAY,CAACmG,EACRnG,EAAS,UAAU,CAAC6G,EAAkBC,IACvCD,aAAgBE,GAAgBF,EAAK,OAAO,CAC9C,OACA,SACF,CAAC,EACQA,EAAK,QAAQE,EAAa,MAAM,MAAM,CAAC,EAEzCF,EACN,CACD,KAAM,EACR,CAAC,EAGI7G,CACT,CAEA,uBAAiD,CAC/C,KAAK,cAAsB,EAC3B,IAAMA,EAAW,KAAK,WAAW,CAC/B,SAAU,EACZ,CAAC,EAED,GAAK,KAAK,YAAkC,4BAA8B,KAAK,aAAa,MAAM,EAChG,OAAO,KAAK,WAAWgH,EAAiB,CACtC,KAAMhH,EACN,MAAO,KAAK,WAAW,CACrB,OAAQ,EACV,CAAC,CACH,CAAC,EAGH,IAAMiH,EAAY,KAAK,WAAW,CAChC,SAAU,EACZ,CAAC,EACKC,EAAQ,KAAK,WAAW,CAC5B,OAAQ,EACV,CAAC,EAEKC,EAAU,KAAK,eAAuB,GAAM,KAAoB,YAAY,EAElF,OAAI,CAACnH,GAAY,CAACiH,GAAa,CAACC,IAC9B,KAAK,WAAW,oFAA4F,EAGvG,KAAK,WAAWF,EAAiB,CACtC,KAAMhH,EACN,SAAUiH,EACV,MAAOC,EACP,QAASC,CACX,CAAC,CACH,CAEA,wBAAkE,CAChE,MAAO,CACL,KAAK,SAAS,6BAGd,CAAC,EACG,KAAK,SAAS,IAAM,KAAK,gBAAgB,CAAC,EAC1C,CACF,EACF,MAAM,WAAW,CACf,eAAgB,KAAK,cAAuB,CAC9C,CAAC,GAAK,MACR,CACF,CAEA,gBAAiC,CAC/B,KAAK,cAAuB,EAC5B,IAAMnH,EAAW,KAAK,gBAAgB,GAAM,KAAoB,kBAAkB,EAC5EpB,EACJ,KAAK,aAAqB,IAAM,KAAK,gBAAgB,GAAM,KAAoB,kBAAkB,GACnG,YAAK,cAAuB,EAErB,KAAK,WAAWwI,GAAe,CACpC,KAAMpH,EACN,WAAYpB,CACd,CAAC,CACH,CAEA,SAAUA,EAAwByI,EAA2B,CAC3D,GAAIzI,EAAW,OACb,OAAOA,EAGT,IAAI0I,EACJ,OAAI1I,aAAsB2I,GACxBD,EAAM1I,EAAW,KAAK,MAAQ4I,GAAa,MAAMH,EAAQ,CAAC,EAAE,EAE5DC,EAAME,GAAa,MAAMH,EAAQ,CAAC,EAAE,EAG/B,KAAK,WAAWI,EAAgB,CACrC,KAAMH,EACN,WAAY1I,CACd,CAAC,CACH,CAIA,WAAW,oBAAsC,CAC/C,OAAO,IAAI,IAAI,CACb,GAAG4E,EAAO,iCAEZ,CAAC,CACH,CACF,EA9XAjB,EAAAI,EAAAL,IAEEM,EAAAL,EAAA,GAAW,gBADXe,GADIC,GAaJX,EAAAL,EAAA,GAAW,qBADXc,GAZIE,GAgCJX,EAAAL,EAAA,GAAW,mBADXa,GA/BIG,GA6CJX,EAAAL,EAAA,GAAW,YADXY,GA5CII,GAmKJX,EAAAL,EAAA,GAAW,4BADXW,GAlKIK,GA6KJX,EAAAL,EAAA,GAAW,mBADXU,GA5KIM,GAyLJX,EAAAL,EAAA,GAAW,gBADXS,GAxLIO,GAwXJX,EAAAL,EAAA,GAAW,qBADXQ,GAvXIQ,GAANV,EAAAN,EAAMgB,GAANT,EAAAP,EAAA,EAAMgB,KAuBG,mBAAqB,GAvBxBA,EAwBG,YAAc,GAxBjBA,EAyBG,yBAA2B,GAzB9BA,EA0BG,4BAA8B,GA1BjCA,EA2BG,iBAAmB,GA3BtBA,EA4BG,uBAAyB,GA5B5BA,EA6BG,2BAA6B,GA5iBtC,IAAAmE,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAzF,GAAAC,EA84BMyF,EAAN,cAA4B1F,GAAA2F,EA4B1BF,GAAA,CAACrF,GAUDoF,GAAA,CAACpF,GAUDmF,GAAA,CAACnF,GA+CDkF,GAAA,CAAClF,GAoeDiF,GAAA,CAACjF,GAuBDgF,GAAA,CAAChF,GA1lByBJ,GAAU,CA6BpC,WAAW,iCAAmC,CAC5C,OAAO,IAAI,IAAI,CACb4F,GACAC,EACAC,GACAC,EACF,CAAC,CACH,CAGA,WAAW,2BAAqD,CAC9D,OAAO,IAAI,IAAI,CACbC,GACAC,GACAC,GACAC,CACF,CAAC,CACH,CAGA,WAAW,cAAgB,CACzB,OAAO,IAAI,IAAI,CACb,GAAGR,EAAU,aACb,OAEE,SACF,EACA,QAEE,QACF,EACA,YAEE,WACF,EACA,cAEE,QACF,EACA,QAEE,QACF,EACA,QAEE,WACF,EACA,gBAEE,WACF,EACA,eAEE,WACF,EACA,YAEE,UACF,EACA,aAEE,QACF,CACF,CAAC,CACH,CAIA,WAAW,qBAAoF,CA+d7F,OA7dmB,IAAI,IAA4D,CACjF,GAAGA,EAAU,WACb,CACES,GACAC,EACF,EACA,CACEC,GACAhI,EAAW,OAAO,CACpB,EACA,CACEiI,GACAC,EACF,EACA,CACEC,GACAC,GAAmB,QAAQ,CAC7B,EACA,CACEC,GACAD,GAAmB,QAAQ,CAC7B,EACA,CACEjE,EACAmE,EAAW,CACTC,EACF,CAAC,CACH,EACA,CACEC,GACAxI,EAAW,QAAQ,CACrB,EACA,CACEyI,GACA,SAA2BC,EAAsB,CAC/C,OAAO,KAAK,KAAK,YAAa,CAC5BA,EAAE,KAAK,WACPA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACEC,GACA,SAA2BD,EAAkB,CAC3C,OAAOjJ,GAAa,KAAK,KAAuBiJ,CAAC,CACnD,CACF,EACA,CACEE,GACAC,EACF,EACA,CACEC,GACA,SAA2BJ,EAAgB,CACzC,OAAO3K,GAAW,KAAK,KAAuB2K,CAAC,CACjD,CACF,EACA,CACEpF,EACA,SAA2BoF,EAAiB,CAC1C,OAAOhK,GAAY,KAAK,KAAuBgK,CAAC,CAClD,CACF,EACA,CACEK,GACAC,EACF,EACA,CACE3K,EACA,SAA2BqK,EAAgB,CACzC,OAAO3K,GAAW,KAAK,KAAuB2K,CAAC,CACjD,CACF,EACA,CACEO,GACA,SAA2BP,EAAiB,CAC1C,MAAO,oBAAoB,KAAK,IAAIA,EAAG,MAAM,CAAC,KAAKtI,EAAK,cAAc,WACxE,CACF,EACA,CACE8I,GACA,SAA2BR,EAAiB,CAC1C,MAAO,gBAAgB,KAAK,IAAIA,EAAG,MAAM,CAAC,gBAAgBtI,EAAK,cAAc,GAC/E,CACF,EACA,CACE+I,GACA,SAA2BT,EAA+B,CACxD,MAAO,aAAa,KAAK,IAAIA,EAAG,MAAM,CAAC,EACzC,CACF,EACA,CACE5D,GACA9E,EAAW,UAAU,CACvB,EACA,CACEwE,EACA4E,EACF,EACA,CACEC,GACAD,EACF,EACA,CACEE,EACAC,GAAM,CACR,EACA,CACEC,GACAC,EACF,EACA,CACEC,GACA,SAA2BhB,EAAe,CACxC,OAAO,KAAK,OAAOA,EAAG,KAAK,CAC7B,CACF,EACA,CACEiB,GACA3J,EAAW,OAAO,CACpB,EACA,CACE4J,GACA,SAA2BlB,EAAoB,CAC7C,OAAO,KAAK,KAAK,kBAAmB,CAClCA,EAAE,KAAK,KACPA,EAAE,KAAK,UACT,CAAC,CACH,CACF,EACA,CACE9E,GACA,SAA2B8E,EAA0B,CACnD,OAAO,KAAK,KAAK,kBAAmB,CAClCA,EAAE,KAAK,KACPA,EAAE,KAAK,UACT,CAAC,CACH,CACF,EACA,CACE9D,GACA,SAA2B8D,EAAmB,CAC5C,OAAOvJ,GAAc,KAAK,KAAuBuJ,CAAC,CACpD,CACF,EACA,CACEmB,GACAC,EACF,EACA,CACEC,GACAC,EACF,EACA,CACEC,GACAC,EACF,EACA,CACEC,GACA,SAA2BzB,EAAkB,CAC3C,OAAO,KAAK,KAAK,QAAS,CACxB,KAAK,KAAK,MAAO,CACfA,EAAE,KAAK,IACT,CAAC,CACH,CAAC,CACH,CACF,EACA,CACE0B,GACAC,EACF,EACA,CACEC,EACA,SAA2B5B,EAAsB,CAC/C,OAAO,KAAK,KAAK,iBAAkB,CACjCA,EAAE,KAAK,KACPA,EAAE,KAAK,UACT,CAAC,CACH,CACF,EACA,CACE6B,GACA,SAA2B7B,EAAgC,CACzD,OAAOA,EAAE,KAAK,UAAY,GAAK,UACjC,CACF,EACA,CACExE,GACA8F,EACF,EACA,CACEQ,GACAlC,EAAW,CACTmC,GACAC,GACAC,EACF,CAAC,CACH,EACA,CACE7H,GACA9C,EAAW,YAAY,CACzB,EACA,CACE+C,GACA/C,EAAW,mBAAmB,CAChC,EACA,CACEsE,GACAsG,EACF,EACA,CACErG,GACAqG,EACF,EACA,CACEC,GACAC,EACF,EACA,CACEC,GACA,SAA2BrC,EAAmB,CAC5C,OAAO,KAAK,OAAOA,EAAG,OAAO,CAC/B,CACF,EACA,CACEhE,EACA1E,EAAW,OAAO,CACpB,EACA,CACEgL,GACAC,EACF,EACA,CACEC,GACA,SAA2BxC,EAA8B,CACvD,OAAO,KAAK,cAAcA,CAAC,CAC7B,CACF,EACA,CACExF,GACAlD,EAAW,aAAa,CAC1B,EACA,CACEmL,GACA,SAA2BzC,EAAc,CACvC,OAAO,KAAK,KAAK,QAAS,CACxBA,EAAE,KAAK,KACP,KAAK,KAAK,SAAU,CAClBnK,EAAY,OAAO,KAAK,EACxBmK,EAAE,KAAK,WACPnK,EAAY,OAAO,KAAK,CAC1B,CAAC,CACH,CAAC,CACH,CACF,EACA,CACEgJ,EACAe,EAAW,CACT8C,GACAC,GACC3C,GAAkB4C,GAAgB5C,EAAG,CACpC,qBAAsB,EACxB,CAAC,EACD6C,EACF,CAAC,CACH,EACA,CACEC,GACA,SAA2B9C,EAAoB,CAC7C,OAAO+C,GAAe,KAAK,KAAM/C,EAAG,CAClC,SAAU,SACV,iBAAkB,EACpB,CAAC,CACH,CACF,EACA,CACEgD,GACA,SAA2BhD,EAAkB,CAC3C,OAAOzI,GAAa,KAAK,KAAuByI,CAAC,CACnD,CACF,EACA,CACEiD,GACA,SAA2BjD,EAAkB,CAC3C,OAAOrI,GAAa,KAAK,KAAuBqI,CAAC,CACnD,CACF,EACA,CACE3D,EACA,SAA2B2D,EAAkB,CAC3C,OAAOhJ,GAAa,KAAK,KAAuBgJ,CAAC,CACnD,CACF,EACA,CACEkD,GACAC,EACF,EACA,CACE9H,GACA/D,EAAW,KAAK,CAClB,EACA,CACE8L,GACAxD,EAAW,CACTyD,EACF,CAAC,CACH,EACA,CACEC,GACAhM,EAAW,SAAS,CACtB,EACA,CACEqD,EACA4I,EACF,EACA,CACEC,GACAlM,EAAW,gBAAgB,CAC7B,EACA,CACE6E,GACA,SAA2B6D,EAAuB,CAChD,OAAO,KAAK,KAAK,QAAS,CACxBA,EAAE,KAAK,KACPyD,GAAUzD,CAAC,CACb,CAAC,CACH,CACF,EACA,CACE0D,GACApM,EAAW,gBAAgB,CAC7B,EACA,CACEgD,GACAhD,EAAW,QAAQ,CACrB,EACA,CACEqM,GACA,SAA2B3D,EAAmB,CAC5C,MAAO,4BAA4B,KAAK,IAAIA,EAAG,MAAM,CAAC,sCACxD,CACF,EACA,CACEzK,EACA,SAA2ByK,EAAkB,CAC3C,OAAO3K,GAAW,KAAK,KAAuB2K,CAAC,CACjD,CACF,EACA,CACE4D,GACA,SAA2B5D,EAAmB,CAC5C,OAAOhK,GAAY,KAAK,KAAuBgK,CAAC,CAClD,CACF,EACA,CACEzH,EACA,SAA2ByH,EAAqB,CAC9C,OAAOpI,GAAU,KAAK,KAAuBoI,CAAC,CAChD,CACF,EACA,CACE6D,GACAC,EACF,EACA,CACEC,GACAC,EACF,EACA,CACEC,GACA3M,EAAW,OAAO,CACpB,EACA,CACE0D,GACA,SAA2BgF,EAAkB,CAC3C,OAAO,KAAK,KAAK,gBAAiB,CAChCA,EAAE,KAAK,KACP/I,GAAW,MAAM,EAAE,KAAK,KAAM+I,CAAC,CACjC,CAAC,CACH,CACF,EACA,CACE3I,GACA,SAA2B2I,EAAmB,CAC5C,OAAO9I,GAAc,KAAK,KAAuB8I,CAAC,CACpD,CACF,EACA,CACEkE,GACA5M,EAAW,eAAe,CAC5B,EACA,CACE6M,EACA,SAA2BnE,EAA8B,CACvD,MAAO,kBAAkB,KAAK,IAAIA,EAAG,MAAM,CAAC,EAC9C,CACF,EACA,CACEoE,GACA9M,EAAW,eAAe,CAC5B,EACA,CACE+M,GACA,SAA2BrE,EAAiB,CAC1C,OAAO,KAAK,YAAYA,EAAG,CACzB,OAAQ,EACV,CAAC,CACH,CACF,EACA,CACEsE,GACA,SAA2BtE,EAAkC,CAC3D,MAAO,IAAI,KAAK,YAAYA,EAAG,CAC7B,IAAK,OACL,OAAQ,EACV,CAAC,CAAC,GACJ,CACF,EACA,CACEuE,GACA,SAA2BvE,EAAqC,CAC9D,MAAO,IAAI,KAAK,YAAYA,EAAG,CAC7B,IAAK,OACL,OAAQ,EACV,CAAC,CAAC,GACJ,CACF,EACA,CACEwE,GACA,IAAM,EACR,EACA,CACEC,GACA,IAAM,EACR,EACA,CACEC,GACA,SAA2B1E,EAA4B,CACrD,OAAO,KAAK,KAAK,SAAU,CACzBA,EAAE,KAAK,WACPA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACE2E,GACA,SAA2B3E,EAA4B,CACrD,OAAO,KAAK,KAAK,WAAY,CAC3BA,EAAE,KAAK,WACPA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACE4E,GACA,IAAM,aACR,EACA,CACEC,GACAvN,EAAW,YAAY,CACzB,EACA,CACEwN,GACAxN,EAAW,YAAY,CACzB,EACA,CACEyN,GACAzN,EAAW,WAAW,CACxB,EACA,CACE0N,GACA,SAA2BhF,EAAe,CACxC,OAAAiF,GAAgB,KAAK,KAAMjF,EAAG,UAAW,UAAW,UAAW,SAAS,EACjE1I,EAAW,aAAa,EAAE,KAAK,KAAM0I,CAAC,CAC/C,CACF,CACF,CAAC,CAEH,CAGA,WAAW,qBAAmE,CAC5E,OAAO,IAAI,IAAI,CACb,GAAGrB,EAAU,oBACb,CACEuG,eAEF,EACA,CACEf,cAEF,EACA,CACEgB,gBAEF,EACA,CACEC,gBAEF,CACF,CAA8C,CAChD,CAGA,WAAW,sBAAgD,CACzD,OAAO,IAAI,IAAI,CACbxK,EACAC,GACAa,EACAa,EACF,CAAC,CACH,CAEA,UAAWjH,EAAgC,CACzC,OAAOgC,EAAW,SAAS,EAAE,KAAK,KAAMhC,CAAU,CACpD,CAEA,eAAgBA,EAAqC,CACnD,OAAIA,EAAW,KAAK,gBAAgB6J,GAClC,KAAK,YAAY,gDAAgD,EAC1D,IAGF,MAAM,eAAe7J,CAAU,CACxC,CAEA,aAAcA,EAAmC,CAC/C,IAAIkC,EAAU,KAAK,IAAIlC,EAAY,MAAM,EACnC+P,EAAgB,KAAK,IAAI/P,EAAY,YAAY,EAEjDgQ,EAAShQ,EAAW,OAG1B,OAFAkC,EAAU6N,EAAgB,GAAG7N,CAAO,IAAI6N,CAAa,GAAK7N,EAEtD8N,aAAkBC,IAAUD,EAAO,kBAAkBE,GAChDhO,EAGF,MAAMA,CAAO,GACtB,CAEA,UAAWlC,EAAgC,CACzC,QAAWmQ,KAAWnQ,EAAW,QAAQoQ,EAAW,EAC9CD,EAAQ,KAAK,OAAS,IACxBA,EAAQ,UAAU,OAAQ,MAAS,EAIvC,OAAO,MAAM,UAAUnQ,CAAU,CACnC,CAEA,cAAeA,EAAoC,CACjD,QAAWqQ,KAAQ,MAAM,KAAKrQ,EAAW,QAAQsQ,EAAc,CAAC,EAC9DD,EAAK,IAAI,EAGX,IAAMnO,EAAU,KAAK,IAAIlC,EAAY,MAAM,EACrCuQ,EAAc,KAAK,YAAYvQ,EAAY,CAC/C,IAAK,IACL,KAAM,EACR,CAAC,EACD,MAAO,cAAckC,CAAO,IAAIqO,CAAW,EAC7C,CAEA,0BAA2BvQ,EAAgD,CACzE,IAAIwQ,EAAa,KAAK,IAAIxQ,EAAY,iBAAiB,EACvD,OAAAwQ,EAAaA,EAAa,IAAIA,CAAU,GAAK,GACtC,oBAAoB,KAAK,IAAIxQ,EAAY,MAAM,CAAC,GAAGwQ,CAAU,EACtE,CAEA,YAAaxQ,EAAkC,CAC7C,OAAO,KAAK,KACV,eACA,CACEA,EAAW,KAAK,gBAAgByQ,GAAYzQ,EAAW,KAAK,KAAK,KAAK,KAAOA,EAAW,KAAK,IAC/F,CACF,CACF,CAEA,SAAUA,EAA+B,CACvC,OAAIA,EAAW,KAAK,UAClB,KAAK,YAAY,sCAAwC,EAEpD,KAAK,IAAI,IAAI0Q,GAAS,CAC3B,KAAM1Q,EAAW,KAAK,KACtB,GAAImI,EAAa,MAAM,QAAQ,CACjC,CAAC,CAAC,CACJ,CAEA,YAAanI,EAAkC,CAC7C,GACEA,EAAW,OAAOqJ,EAAU,0BAA0B,IAClD,CAACrJ,EAAW,KAAK,aAAgBA,EAAW,KAAK,YAAY,CAAC,EAAqB,OAAS,OAEhGA,EAAamI,EAAa,MAAM,MAAM,GAAKnI,UAClCA,EAAW,aAA4B,GAAKA,EAAW,KAAK,YACrEA,EAAW,UAAU,gBAAgC,UAC5CA,EAAW,OAAOmI,EAAa,cAAc,EACtDnI,EAAamI,EAAa,MAAMnI,EAAW,KAAK,IAAI,GAAKA,UAChDA,EAAW,OAAO,OAAO,EAAG,CACrC,IAAM2Q,EAAiB3Q,EAAW,KAAK4Q,CAAiB,EACpDD,aAA0BC,IAE5B5Q,GADa,SAAS2Q,EAAe,KAAK,MAAM,KAAK,MAAM,SAAS,GAAK,GAAG,GACtD,GAAKxI,EAAa,MAAM,OAAO,EAAIA,EAAa,MAAM,QAAQ,IAAMnI,EAE9F,CAEA,OAAO,MAAM,YAAYA,CAAU,CACrC,CAEA,WAAYA,EAAiC,CAE3C,OADY,MAAM,WAAWA,CAAU,EAC5B,QAAQ,OAAQ,EAAE,CAC/B,CAEA,UAAWA,EAAgC,CACzC,IAAMiG,EAAkC,CACxC,EAEA,OAAAjG,EAAW,KAAK,aAAa,QAAS,GAAM,CAC1C,GAAI,aAAa6I,EAAgB,CAC/B,KAAK,YAAY,sCAAsC,EACvD,IAAMgI,EAAU,EAAE,KAAK,WACvB5K,EAAO,KAAM4K,aAAmBtO,GAAc,OAAOsO,GAAY,SAAYA,EAAU,EAAE,CAC3F,MACE5K,EAAO,KAAK,CAAC,CAEjB,CAAC,EAEM,KAAK,KAAK,SAAUA,CAAM,CACnC,CAEA,aAAcjG,EAA2B8H,EAA0B,CAAC,EAAW,CAC7E,GAAM,CACJ,IAAAgJ,EAAM,GACR,EAAIhJ,EACJ,OAAO,MAAM,aAAa9H,EAAY,CACpC,IACEA,EAAW,kBAAkBmI,GAAgBnI,EAAW,OAAO,OAAO,QAAQ,EAC1E,KACA8Q,CACR,CAAC,CACH,CAEA,eAAgB9Q,EAAqC,CACnD,IAAMkC,EAAU,KAAK,IAAIlC,EAAY,MAAM,EACrC+Q,EAAU,KAAK,IAAI/Q,EAAY,UAAU,GAAKkC,EAC9CoG,EAAQ,KAAK,IAAItI,EAAY,OAAO,EACpCgR,EAAa,KAAK,IAAIhR,EAAY,SAAS,EAC3CuI,EAAUyI,EAAa,YAAYA,CAAU,GAAK,GAElDC,EAAa,KAAK,IAAIjR,EAAY,SAAS,EAC3CkR,EAAUlR,EAAW,KAAK,QAC1BmR,EAAcnR,EAAW,KAAK,UAC9BoR,GAAOpR,EAAW,KAAK,KAE7B,OAAIiR,GAAcG,IAAQF,GAAWC,IACnC,KAAK,YAAY,kCAAkC,EAGhD7I,GACH,KAAK,YAAY,+CAA+C,EAG3D,iBAAiBpG,CAAO,IAAI6O,CAAO,IAAIzI,CAAK,GAAGC,CAAO,EAC/D,CAEA,gBAAiB8I,EAA2B,CAC1C,YAAK,YAAY,yDAAyD,EACnE,EACT,CAEA,YAAarR,EAAkC,CAC7C,IAAIsR,EAAQ,KAAK,YAAYtR,EAAY,CACvC,KAAM,EACR,CAAC,EACDsR,EAAQA,EAAQ,IAAIA,CAAK,GAAK,GAE9B,IAAIC,EAAW,KAAK,IAAIvR,EAAY,UAAU,EAC9CuR,EAAWA,EAAW,aAAaA,CAAQ,GAAK,GAEhD,IAAIC,EAAa,KAAK,YAAYxR,EAAY,CAC5C,IAAK,aACL,KAAM,GACN,IAAK,GACP,CAAC,EACDwR,EAAaA,EAAa,eAAeA,CAAU,GAAK,GAExD,IAAIC,EAAQ,KAAK,IAAIzR,EAAY,OAAO,EACxCyR,EAAQA,EAAQ,UAAUA,CAAK,GAAK,GAEpC,IAAIC,EAAO,KAAK,YAAY1R,EAAY,CACtC,IAAK,MACL,KAAM,GACN,IAAK,EACP,CAAC,EACD,OAAA0R,EAAOA,EAAO,SAASA,CAAI,GAAK,GAEzB,MAAMD,CAAK,GAAGH,CAAK,GAAGC,CAAQ,GAAGC,CAAU,GAAGE,CAAI,EAC3D,CAEA,mBAAoB1R,EAAyC,CAC3D,IAAM2R,EAAS3R,EAAW,KAAK,KAAO,QAAU,GAC1CsR,EAAQ,KAAK,YAAYtR,EAAY,CACzC,KAAM,EACR,CAAC,EAED,MAAO,GAAG2R,CAAM,oBAAoBL,CAAK,GAC3C,CAEA,UAAWtR,EAAgC,CACzC,OAAIA,EAAW,KAAK,WACX,KAAK,oBAAoBA,CAAU,EAGrC,MAAM,UAAUA,CAAU,CACnC,CAEA,aAAcA,EAAmC,CAC/C,IAAIoB,EAAWpB,EAAW,KAAK,KAC/B,OAAIoB,aAAoBiE,IACtBjE,EAAWA,EAAS,KAAK,MAGpB,KAAK,KAAK,cAAe,CAC9BA,EACA,KAAK,WAAWpB,CAAU,CAC5B,CAAC,CACH,CAEA,sBAAuBA,EAA4C,CACjE,IAAIkC,EACJ,OAAIlC,EAAW,KAAK,gBAAgB4R,GAClC1P,EAAU,KAAK,IAAIlC,EAAY,MAAM,EAErCkC,EAAUlC,EAAW,KAAK,YAAY,EAGjC,aAAakC,CAAO,EAC7B,CACF,EAt0BAyB,EAAAI,EAAAL,IA6BEM,EAAAL,EAAA,GAAW,kCADXwF,GA5BIC,GAuCJpF,EAAAL,EAAA,GAAW,4BADXuF,GAtCIE,GAiDJpF,EAAAL,EAAA,GAAW,eADXsF,GAhDIG,GAiGJpF,EAAAL,EAAA,GAAW,sBAFXqF,GA/FII,GAokBJpF,EAAAL,EAAA,GAAW,sBADXoF,GAnkBIK,GA2lBJpF,EAAAL,EAAA,GAAW,uBADXmF,GA1lBIM,GAANnF,EAAAN,EAAMyF,GAANlF,EAAAP,EAAA,EAAMyF,KAEG,qBAAuB,GAF1BA,EAIY,aAAyB,CACzC,EALIA,EAOG,cAAgB,GAPnBA,EASG,iBAAmB,GATtBA,EAUG,YAAc,QAVjBA,EAWG,wBAA0B,GAX7BA,EAYG,WAAa,GAZhBA,EAaG,YAAc,GAbjBA,EAcG,YAAc,GAdjBA,EAeG,SAAW,WAfdA,EAgBG,sBAAwB,GAhB3BA,EAiBG,eAAiB,GAjBpBA,EAkBG,4BAA8B,GAlBjCA,EAmBG,8BAAgC,GAnBnCA,EAoBG,mBAAqB,GApBxBA,EAqBG,uBAAyB,gBArB5BA,EAsBG,gBAA2B,OAtB9BA,EAuBG,6BAA+B,GAvBlCA,EAwBG,gBAAkB,GAxBrBA,EAyBG,gBAAkB,OAzBrBA,EA0BG,eAAiB,GAx6B1B,IAAAyI,GAAAC,GAAAC,GAAArO,GAAAC,EAstDavB,EAAN,cAAmBsB,GAAAsO,GAUxBD,GAAA,CAACjO,GAsBDgO,GAAA,CAAChO,GAOD+N,GAAA,CAAC/N,GAvCuBJ,GAAQ,CAMhC,WAAW,qBAAuB,CAChC,OAAO,IAAI,IAAIuO,EAAW,mBAAmB,CAC/C,CAGA,WAAW,YAA4D,CACrE,IAAMC,EAAY,IAAI,IAAIC,GAAc,UAAU,EAClD,QAAWC,IAAc,CACvB,GAAGjK,EAAa,cAChB,GAAGA,EAAa,yBAElB,EAAG,CACD,IAAMkK,EAAWH,EAAU,IAAIE,CAA8B,GAAK,IAAI,IACtEF,EAAU,IAAIE,EAAgC,IAAI,IAAI,CACpD,GAAGC,EACH,GAAGlK,EAAa,UAClB,CAAC,CAAC,CACJ,CACA,OAAO+J,CACT,CAQA,WAAW,wBAA0B,CACnC,uBACF,CAKA,WAAW,cAAgB,CACzB,MAAO,CACL,EAAG,KACH,EAAG,KACH,KAAM,KACN,KAAM,KACN,GAAI,KACJ,GAAI,KACJ,KAAM,KACN,IAAK,KACL,GAAI,KACJ,EAAG,MACH,GAAI,KACJ,EAAG,MACH,GAAI,KACJ,EAAG,MACH,GAAI,KACJ,EAAG,MACH,GAAI,KACJ,EAAG,MACH,GAAI,KACJ,EAAG,MACH,OAAQ,KACR,EAAG,KACH,GAAI,KACJ,EAAG,MACH,EAAG,KACH,GAAI,KACJ,IAAK,KACL,KAAM,KACN,EAAG,KACH,EAAG,IACL,CACF,CASF,EAlFOvO,EAAAI,EAAAL,IAWLM,EAAAL,EAAA,GAAW,aADXoO,GAVW3P,GAiCX4B,EAAAL,EAAA,GAAW,yBADXmO,GAhCW1P,GAwCX4B,EAAAL,EAAA,GAAW,eADXkO,GAvCWzP,GAAN6B,EAAAN,EAAMvB,GAAN8B,EAAAP,EAAA,EAAMvB,KACJ,aAAe,OADXA,EAEJ,uBAAyB,GAFrBA,EAGJ,iCAAmC,GAH/BA,EAIJ,4BAA8B,GAJ1BA,EA2BJ,cAAgB,GA3BZA,EA4BJ,yBAA2B,OA5BvBA,EA6BJ,6BAA+B,EA7B3BA,EA8BJ,6BAA+B,GA9B3BA,EAqCJ,gCAAkC;AAAA,YArC9BA,EA2EJ,YAAc,eA3EVA,EA4EJ,eAAiB,aA5EbA,EA6EJ,YAAc,wBA7EVA,EA+EJ,UAAYwB,EA/ERxB,EAgFJ,OAASuC,EAhFLvC,EAiFJ,UAAYgH,EAGrB4I,GAAQ,gBAAwB5P,CAAI","names":["_EXPRESSION_METADATA_dec","_init","cache","HiveTyping","map","DialectTyping","extend","types","data","type","EncodeExpr","UnhexExpr","CorrExpr","MonthsBetweenExpr","CurrentDatabaseExpr","CurrentSchemaExpr","CurrentUserExpr","HexExpr","RepeatExpr","ReplaceExpr","SoundexExpr","StrToUnixExpr","FactorialExpr","MonthExpr","SecondExpr","CoalesceExpr","s","IfExpr","RegexpSplitExpr","ReverseExpr","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","DATE_DELTA_INTERVAL","TIME_DIFF_FACTOR","DIFF_MONTH_SWITCH","addDateSql","expression","TsOrDsAddExpr","unit","func","multiplier","DateSubExpr","increment","LiteralExpr","value","MulExpr","dateDiffSql","factor","left","right","secDiff","monthsBetween","sqlFunc","multiplierSql","diffSql","jsonFormatSql","thisNode","isParseJson","wrappedJson","fromJson","toJson","arraySortSql","strToUnixSql","timeFormat","unixToTimeSql","timestamp","scale","UnixToTimeExpr","renameFunc","strToDateSql","thisSql","timeFormatSql","Hive","strToTimeSql","toDateSql","Expression","buildWithIgnoreNulls","ExpClass","args","seqGet","BooleanExpr","IgnoreNullsExpr","buildToDate","expr","buildFormattedTime","TsOrDsToDateExpr","buildDateAdd","var_","_NUMERIC_LITERALS_dec","_ORIGINAL_KEYWORDS_dec","_SINGLE_TOKENS_dec","_STRING_ESCAPES_dec","_IDENTIFIERS_dec","_QUOTES_dec","_a","_init","HiveTokenizer","Tokenizer","cache","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_TABLE_ALIAS_TOKENS_dec","_ALTER_PARSERS_dec","_PROPERTY_PARSERS_dec","_NO_PAREN_FUNCTION_PARSERS_dec","_FUNCTIONS_dec","_FUNCTION_PARSERS_dec","_NO_PAREN_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","HiveParser","Parser","noParenFunctions","QuantileExpr","ApproxQuantileExpr","ToBase64Expr","ArrayAggExpr","ArrayUniqueAggExpr","VarExpr","TimeToStrExpr","TimeStrToTimeExpr","DateDiffExpr","DayExpr","FirstExpr","FirstValueExpr","UnixToStrExpr","dialect","JsonExtractScalarExpr","LastExpr","LastValueExpr","StarMapExpr","keys","values","VarMapExpr","ArrayExpr","MonthExpr","buildRegexpExtract","RegexpExtractExpr","RegexpExtractAllExpr","GenerateSeriesExpr","ArraySizeExpr","RegexpSplitExpr","StrToMapExpr","JsonFormatExpr","TimestampTruncExpr","FromBase64Expr","StrToUnixExpr","CurrentTimestampExpr","YearExpr","SerdePropertiesExpr","rowFormatBefore","recordWriter","TransformExpr","commandScript","schema","rowFormatAfter","recordReader","QueryTransformExpr","FuncClass","firstArg","DistinctExpr","options","checkFunc","allowIdentifiers","node","_opts","DataTypeExpr","AlterColumnExpr","columnNew","dtype","comment","ParameterExpr","index","key","ColumnExpr","toIdentifier","PropertyEqExpr","_TS_OR_DS_EXPRESSIONS_dec","_PROPERTIES_LOCATION_dec","_ORIGINAL_TRANSFORMS_dec","_TYPE_MAPPING_dec","_SUPPORTED_JSON_PATH_PARTS_dec","_EXPRESSIONS_WITHOUT_NESTED_CTES_dec","HiveGenerator","Generator","InsertExpr","SelectExpr","SubqueryExpr","SetOperationExpr","JsonPathKeyExpr","JsonPathRootExpr","JsonPathSubscriptExpr","JsonPathWildcardExpr","PropertyExpr","propertySql","AnyValueExpr","ApproxDistinctExpr","approxCountDistinctSql","ArgMaxExpr","argMaxOrMinNoCount","ArgMinExpr","preprocess","inheritStructFieldNames","ArrayConcatExpr","ArrayToStringExpr","e","ArraySortExpr","WithExpr","noRecursiveCteSql","DateAddExpr","DateStrToDateExpr","dateStrToDateSql","DateToDiExpr","DiToDateExpr","StorageHandlerPropertyExpr","sequenceSql","GenerateDateArrayExpr","IfExpr","ifSql","ILikeExpr","noIlikeSql","IntDivExpr","IsNanExpr","JsonExtractExpr","LeftExpr","leftToSubstringSql","MapExpr","varMapSql","MaxExpr","maxOrGreatest","Md5DigestExpr","MinExpr","minOrLeast","MonthsBetweenExpr","NotNullColumnConstraintExpr","CreateExpr","removeUniqueConstraints","ctasWithTmpTablesToCreateTmpView","moveSchemaColumnsToPartitionedBy","regexpExtractSql","RegexpReplaceExpr","regexpReplaceSql","RegexpLikeExpr","RightExpr","rightToSubstringSql","SchemaCommentPropertyExpr","SplitExpr","eliminateQualify","eliminateDistinctOn","unnestToExplode","anyToExists","StrPositionExpr","strPositionSql","StrToDateExpr","StrToTimeExpr","StructExtractExpr","structExtractSql","TableExpr","unnestGenerateSeries","TimeStrToDateExpr","timeStrToTimeSql","TimeStrToUnixExpr","unitToStr","TimeToUnixExpr","TsOrDiToDiExpr","TsOrDsDiffExpr","TryCastExpr","noTrycastSql","TrimExpr","trimSql","UnicodeExpr","UnixToTimeStrExpr","PartitionedByPropertyExpr","NumberToStrExpr","NationalExpr","ClusteredColumnConstraintExpr","NonClusteredColumnConstraintExpr","NotForReplicationColumnConstraintExpr","OnPropertyExpr","PartitionedByBucketExpr","PartitionByTruncateExpr","PrimaryKeyColumnConstraintExpr","WeekOfYearExpr","DayOfMonthExpr","DayOfWeekExpr","LevenshteinExpr","unsupportedArgs","FileFormatPropertyExpr","VolatilePropertyExpr","WithDataPropertyExpr","expressionSql","parent","EqExpr","SetItemExpr","ordered","OrderedExpr","prop","PropertiesExpr","expressions","serdeProps","OrderExpr","CastExpr","sizeExpression","DataTypeParamExpr","exprVal","sep","newName","commentSql","defaultVal","visible","allowNoNull","drop","_expr","exprs","location","fileFormat","serde","tags","prefix","InputOutputFormatExpr","_TIME_MAPPING_dec","_NORMALIZATION_STRATEGY_dec","_COERCES_TO_dec","Dialect","HiveTyping","coercesTo","TypeAnnotator","targetType","existing"]}
@@ -0,0 +1,4 @@
1
+ import{$ as re,$c as ae,$n as ns,Ab as Ce,Ae as le,Ai as te,Bb as w,Bo as Je,Ca as C,Ce as $,Cl as Us,Co as W,Da as ws,Dc as qs,Ea as Ve,Eb as Xe,Fa as be,Fb as Os,Fc as es,Fe as Ks,Go as ue,Ha as Ns,Ic as N,Jc as Rs,Jg as xe,Ko as ks,Lb as se,Lo as Js,Nm as Ds,No as os,Oo as rs,R as G,Re as Ms,S as I,T as U,Tb as K,U as Y,Ud as ne,V as Be,Va as H,Ve as we,Wd as T,X as oe,Xd as D,Xh as Ee,Y as Qe,Ya as L,Yb as Te,Yd as ce,Ye as fe,Z as Ge,Za as je,Zb as V,_ as He,_b as Ze,_n as q,aa as Se,ac as Ke,ao as Fe,ba as Cs,be as Z,bo as Ps,ca as P,ce as _s,da as Ye,do as ke,ea as ye,en as ss,eo as R,fo as ts,ga as _e,ge,hc as X,he as j,ho as v,j as k,jc as vs,jo as pe,ka as Ts,kn as Pe,l as We,ln as Le,m as bs,mm as De,n as _,nc as Is,ne as js,nm as he,o as de,oa as ee,op as z,p as As,pb as J,q as Re,qb as ie,rb as B,se as Me,sn as Ne,uo as Ls,vo as Fs,yb as Ae,yi as Ue}from"./chunk-KCNOE4DZ.js";function is(e){let t=Y(e);if(t){let a=t.refCount(),s=[];for(let r of t.traverse())s.push(r);for(let r=s.length-1;0<=r;r--){let o=s[r];if(o.isCte){let c=o;if((a.get(c)||0)<=0){let n=o.expression.parent;if(!n)continue;let l=n.parent;if(n.pop(),l){let f=l.args.expressions;(!f||f.length===0)&&l.pop()}for(let[,f]of Object.entries(o.selectedSources)){let[,p]=f;if(p instanceof I){let m=a.get(p)||0;a.set(p,m-1)}}}}}}return e}function as(e){for(let t of U(e)){if(0<t.unqualifiedColumns.length)continue;let a=t.expression.args.joins;if(a)for(let s=a.length-1;0<=s;s--){let r=a[s];if(de(r,w),r.isSemiOrAntiJoin)continue;let o=r.aliasOrName;o&&En(t,r,o)&&(r.pop(),t.removeSource(o))}}return e}function En(e,t,a){let s=e.sources.get(a);if(!(s instanceof I)||hn(e,t,a))return!1;let r=t.args.side,o=t.args.on;return r==="left"&&Sn(s,t)||!o&&$s(s)}function hn(e,t,a){let s=t.args.on,r=new Set;if(s)for(let c of s.findAll(N))r.add(c);return e.sourceColumns(a).some(c=>!r.has(c))}function Sn(e,t){let a=yn(e);if(!a||a.size===0)return!1;let{joinKeys:s}=Ws(t),r=new Set(s.map(o=>o.name));for(let o of a)if(!r.has(o))return!1;return!0}function yn(e){let t=e.expression;if(!(t instanceof T))return;let a=t;if(a.args.distinct)return new Set(a.namedSelects);let s=a.args.group;if(s){let r=new Set((s.args.expressions??[]).filter(n=>n instanceof C).map(n=>n.sql())),o=new Set,c=new Set;for(let n of a.selects){if(!(n instanceof C))continue;let l=n.unalias().sql();r.has(l)&&(o.add(l),c.add(n.aliasOrName))}return[...r].every(n=>o.has(n))?c:new Set}return $s(e)?new Set(a.namedSelects):new Set}function $s(e){let t=e.expression;if(!(t instanceof T))return!1;let a=t;return!!(!a.args.from||a.selects.every(r=>r instanceof C?r.unalias()instanceof j:!1)||bn(e))}function bn(e){let t=e.expression.getArgKey("limit");return t instanceof Ce?t.args.expression?.args.this==="1":!1}function Ws(e){let t=e.aliasOrName,s=(e.args.on||W()).copy(),r=[],o=[];function c(i){let[n,l]=i.unnestOperands();if(!n||!l)return;let f=zs(n),p=zs(l);t&&f.has(t)&&!p.has(t)?(o.push(n),r.push(l),i.replace(W())):t&&p.has(t)&&!f.has(t)&&(o.push(l),r.push(n),i.replace(W()))}if(re(s)){let i=s instanceof Pe?s:Fe([s,W()],{copy:!1});for(let n of i.flatten())n instanceof $&&c(n)}else if(re(s,{dnf:!0})){let i;for(let n of s.flatten()){let l=Array.from(n.flatten()).filter(f=>f instanceof $);if(i===void 0)i=l;else{let f=[];for(let p of l){let m=i.filter(d=>p.sql()===d.sql());0<m.length&&(f.push(p),f.push(...m))}i=f}}if(i)for(let n of i)c(n)}return{sourceKeys:r,joinKeys:o,on:s}}function zs(e){let t=new Set;for(let a of e.findAll(N))a.table&&t.add(a.table);return t}function $e(e){if(e instanceof D&&e.args.this)return $e(e.args.this),e;let t=Y(e);if(!t)return e;let a=new Map;for(let n of t.cteScopes){let l=n.expression.parent;l&&a.set(l.alias,n)}for(let n of t.traverse())for(let[,l]of n.sources)l instanceof K&&a.set(l.name,l);let s=new Map,r=t.expression.args.with,o=!1;if(r){de(r,H),o=!!r.args.recursive;for(let n of r.args.expressions??[])_(n,es)&&n.args.this&&n.args.this&&s.set(n.args.this.sqlKey,n.alias)}let c=[];for(let n of t.cteScopes){for(let f of n.traverse()){if(f===n)continue;let p=Bs(f,s,a);p&&c.push(p)}let l=n.expression.parent;l&&c.push(l)}let i=[...t.unionScopes,...t.subqueryScopes,...t.tableScopes];for(let n of i)for(let l of n.traverse()){let f=Bs(l,s,a);f&&c.push(f)}return 0<c.length&&(e instanceof Ns?e.args.expression:e)?.setArgKey("with",new H({expressions:c,recursive:o})),e}function Bs(e,t,a){if(e.isDerivedTable)return An(e,t,a);if(e.isCte)return Cn(e,t,a)}function An(e,t,a){if(e.parent&&(0<e.parent.pivots.length||e.parent.expression instanceof js))return;let s=e.expression.parent;if(!s)return;s instanceof D&&(s=s.unwrap());let[r,o]=Qs(e,t,a),c=v(ns(r),s.alias||r,{copy:!1}),n=s.args.joins;return n&&Array.isArray(n)&&c.setArgKey("joins",n),s.replace(c),o}function Cn(e,t,a){let s=e.expression.parent;if(!s)return;let[r,o]=Qs(e,t,a),c=s.parent;if(s.pop(),c){let i=c.args.expressions;(!i||i.length===0)&&c.pop()}if(e.parent)for(let i of e.parent.traverse())for(let[,n]of Object.entries(i.selectedSources)){let[l,f]=n;if(f===e){let p=v(ns(r),l.aliasOrName,{copy:!1});l.replace(p)}}return o}function Qs(e,t,a){let s=t.get(e.expression.sqlKey),o=e.expression.parent?.alias||"";o||(o=ye(Array.from(a.keys()),"cte")),s?o=s:a.has(o)&&(o=ye(Array.from(a.keys()),o)),a.set(o,e);let c;return s||(t.set(e.expression.sqlKey,o),c=new es({this:e.expression,alias:new L({this:R(o)})})),[o,c]}function cs(e,t={}){let{leaveTablesIsolated:a=!1}=t;return e=wn(e,{leaveTablesIsolated:a}),e=Nn(e,{leaveTablesIsolated:a}),e}var Tn=[N,$,ge,Ms,we];function wn(e,t){let{leaveTablesIsolated:a}=t,s=Array.from(U(e)),r=new Map;for(let c of s)for(let[,i]of Object.entries(c.selectedSources)){let[n,l]=i;if(l instanceof I&&l.isCte){let f=r.get(l);f||(f=[],r.set(l,f)),f.push([c,l,n])}}let o=[];for(let[,c]of r)c.length===1&&o.push(c[0]);for(let[c,i,n]of o){let l=n.findAncestor(J,w);if(l&&Gs(c,i,{leaveTablesIsolated:a},l)){let f=n.aliasOrName;Hs(c,i,f),Ys(c,i,n,f),Xs(c,i,f),en(c,i),Vs(c,i,l),Zs(c,i,l),sn(c,i),On(i),c.clearCache()}}return e}function Nn(e,t){let{leaveTablesIsolated:a}=t;for(let s of U(e))for(let r of s.derivedTables){let o=r.findAncestor(J,w),c=r.aliasOrName,i=s.sources.get(c);i instanceof I&&o&&Gs(s,i,{leaveTablesIsolated:a},o)&&(Hs(s,i,c),Ys(s,i,r,c),Xs(s,i,c),en(s,i),Vs(s,i,o),Zs(s,i,o),sn(s,i),s.clearCache())}return e}function Gs(e,t,a,s){let{leaveTablesIsolated:r}=a,o=t.expression.unnest();function c(){let u=new Set;if(!(o instanceof T))return!1;let g=o;for(let y of g.selects)y instanceof C&&y.find(ce)&&u.add(y.aliasOrName);let b=s.aliasOrName,x=[];for(let y of e.columns)y.findAncestor(V,Ae,Os,w,ie,j)!==void 0&&x.push(y);return 0<x.filter(y=>y.table===b&&u.has(y.name)).length}function i(){if(!(s instanceof w))return!1;let u=s.aliasOrName,g=s.args.on;if(!g)return!1;let b=Array.from(g.findAll(N)).filter(h=>h.table===u).map(h=>h.name),x=t.expression.getArgKey("from");if(!x)return!1;let E=x.aliasOrName;if(!(t.expression instanceof T))return!1;let y=t.expression,S=new Map;for(let h of y.selects)h instanceof C&&S.set(h.aliasOrName,h);return b.some(h=>{let A=S.get(h);return A?Array.from(A.findAll(N)).some(M=>M.table!==E):!1})}function n(){let u=t.expression.parent,g=e.expression.parent;for(;g;){if(g===u)return!0;g=g.parent}return!1}if(!(e.expression instanceof T))return!1;let l=e.expression;if(l.isStar||!(o instanceof T))return!1;let f=o;for(let u of z.UNMERGABLE_ARGS)if(f.getArgKey(u))return!1;if(!f.args.from||0<e.pivots.length)return!1;for(let u of f.args.expressions??[])if(u instanceof C&&(u.find(j)||u.find(T)||u.find(Ue)))return!1;if(r&&1<Object.keys(e.selectedSources).length||s instanceof w&&f.args.joins&&0<f.args.joins.length)return!1;let p=s instanceof w?s.args.side:void 0;if(s instanceof w&&f.args.where&&(p==="full"||p==="left"||p==="right"))return!1;let m=l.args.joins;return!(s instanceof J&&f.args.where&&m&&m.some(u=>_(u,w)&&(u.args.side==="full"||u.args.side==="right"))||i()||c()||n()||f.args.order&&e.isUnion||P(f.args.expressions??[],0)instanceof se)}function Hs(e,t,a){let s=new Set(Object.keys(t.selectedSources)),r=new Set(Object.keys(e.selectedSources)),o=new Set(Array.from(s).filter(i=>r.has(i)));o.delete(a);let c=new Set([...r,...s]);for(let i of o){let n=ye(Array.from(c),i),l=t.selectedSources[i];if(!l)continue;let[f]=l,p=R(n);f instanceof K?f.alias?f.setArgKey("alias",p):f.replace(v(f,p,{copy:!1})):f?.parent instanceof D&&f.parent.setArgKey("alias",new L({this:p}));for(let m of t.sourceColumns(i))m.setArgKey("table",R(n));t.renameSource(i,n),c.add(n)}}function Ys(e,t,a,s){let o=t.expression.getArgKey("from").args.this;o.setArgKey("joins",a.args.joins),a.replace(o);for(let i of e.joinHints){let n=Array.from(i.findAll(K));for(let l of n)l.aliasOrName===a.aliasOrName&&l.setArgKey("this",R(o.aliasOrName))}e.removeSource(s);let c=t.sources.get(o.aliasOrName);c!==void 0&&e.addSource(o.aliasOrName,c)}function Vs(e,t,a){let s=[],r=t.expression.getArgKey("joins");if(r)for(let o of r){s.push(o);let c=t.sources.get(o.aliasOrName);c&&e.addSource(o.aliasOrName,c)}if(0<s.length){let o=e.expression.getArgKey("joins")||[],c;a instanceof J?c=0:c=o.indexOf(a)+1,o.splice(c,0,...s),e.expression.setArgKey("joins",o)}}function Xs(e,t,a){let s=new Map;for(let o of e.columns)if(o.table===a){let c=o.name,i=s.get(c);i||(i=[],s.set(c,i)),i.push(o)}if(!(t.expression instanceof T))return;let r=t.expression;for(let o of r.args.expressions??[]){if(!(o instanceof C))continue;let c=o.aliasOrName;if(!c)continue;let i=s.get(c)||[],n=o.unalias(),l=!Tn.some(p=>n instanceof p),f=n.isNumber;for(let p of i){let m=p.parent;if(f&&m instanceof Ae){p.replace(R(p.name));continue}let d=n;m&&(m instanceof _s||m instanceof Z)&&l&&(d=ke(d,{copy:!1})),m instanceof T&&p.name!==d.name&&(d=v(d,p.name,{copy:!1})),p.replace(d.copy())}}}function Zs(e,t,a){let s=t.expression.getArgKey("where");if(!s)return;let r=s.args.this;if(!(r instanceof C))return;let o=e.expression;if(a instanceof w){let c=o.args.from,i=new Set;c&&i.add(c.aliasOrName);let n=o.args.joins;if(n)for(let p of n){let m=p.aliasOrName;if(i.add(m),m===a.aliasOrName)break}let l=ue(r);if(Array.from(l).every(p=>i.has(p))){a.on(r,{copy:!1});return}}o.where(r,{copy:!1})}function en(e,t){let a=e.expression;a.args.group||a.args.distinct||a.args.having||a.args.order||Object.keys(e.selectedSources).length!==1||a.args.expressions?.some(r=>r instanceof C?r.find(j)!==void 0:!1)||a.setArgKey("order",t.expression.getArgKey("order"))}function sn(e,t){let a=t.expression.getArgKey("hint");if(!a)return;let s=e.expression,r=s.args.hint;if(r){let o=a.args.expressions;for(let c of o??[])c instanceof C&&r.append("expressions",c)}else s.setArgKey("hint",a)}function On(e){let t=e.expression.parent;if(!t)return;let a=t.parent;if(!a)return;a.args.expressions?.length===1?a.pop():t.pop()}function ls(e,t={}){let{dialect:a}=t,s=Y(e),r=z.getOrRaise(a),o=r.constructor.UNNEST_REQUIRES_CROSS_JOIN;if(s){let c=s.refCount();for(let i of Array.from(s.traverse()).reverse()){let n=i.expression,l=n.getArgKey("where");if(l){let p=i.selectedSources,m=n.getArgKey("joins"),d=new Map;m&&m.forEach((g,b)=>{let x=g.aliasOrName;x&&d.set(x,b)});let u=!0;for(let[g,b]of Object.entries(p)){let[x]=b;if(!x)continue;let E=x.findAncestor(w,J);if(E instanceof w){if(E.args.side==="right"){p={[g]:b};break}if(x instanceof te&&o){u=!1;break}}}if(u){let g=l.args.this;g instanceof C&&nn(g,p,c,r,d)}}let f=n.getArgKey("joins");if(f)for(let p of f){let m=p.aliasOrName;if(m&&m in i.selectedSources){let d=p.args.on;nn(d,{[m]:i.selectedSources[m]},c,r)}}}}return e}function nn(e,t,a,s,r){if(!e)return;let o=Se(e,{dialect:s});e=e.replace(o);let c=re(e)||!re(e,{dnf:!0}),i=(c?e instanceof Pe:e instanceof Le)?Array.from(e.flatten()):[e];c?vn(i,t,a,r):In(i,t,a)}function vn(e,t,a,s){let r=s||new Map;for(let o of e){let c=tn(o,t,a);for(let[i,n]of Object.entries(c))if(n instanceof w){let l=ue(o,{exclude:i}),f=r.get(i)??-1;if(Array.from(l).every(m=>(r.get(m)??-1)<f)){o.replace(W()),n.on(o,{copy:!1});break}}else if(n instanceof T){o.replace(W());let l=on(n,o);oe(l,j)?n.having(l,{copy:!1}):n.where(l,{copy:!1})}}}function In(e,t,a){let s=new Set;for(let c of e){let i=ue(c);for(let n of e){let l=ue(n);i=new Set(Array.from(i).filter(f=>l.has(f)))}for(let n of i)s.add(n)}let r=new Map,o={};for(let c of Array.from(s).sort()){for(let i of e){if(o=tn(i,t,a),!(c in o))continue;let n=r.get(c);r.set(c,n?Ps([n,i]):i)}for(let[i,n]of Object.entries(o)){let l=r.get(i);if(l){if(n instanceof w)n.on(l,{copy:!1});else if(n instanceof T){let f=on(n,l);oe(f,j)?n.having(f,{copy:!1}):n.where(f,{copy:!1})}}}}}function tn(e,t,a){let s={},r=ue(e),o=e.findAncestor(w,V)instanceof V;for(let c of Array.from(r).sort()){let i=t[c];if(!i)continue;let n=i[0],[,l]=i;if(n&&o&&(n=n.findAncestor(w,J)),n instanceof J&&!(l instanceof K)){let f=As((l instanceof I?l.parent:l.parent?.args)?.expression,C)?.getArgKey("with");if(f instanceof H&&f?.recursive)return{};n=l instanceof I?l.expression:l.args.expression}if(n instanceof w){let f=n.side;if(f&&f!=="right")return{};s[c]=n}else if(n instanceof T&&r.size===1){let f=n.selects.some(d=>d instanceof C?d.find(ce)!==void 0:!1),p=!!n.args.group,m=a.get(l)||0;!p&&m<2&&!f&&(s[c]=n)}}return s}function on(e,t){let a=new Map;for(let r of e.selects)if(r instanceof C)if(r instanceof X){let o=r.args.this;o instanceof C&&a.set(r.alias,o)}else a.set(r.name,r);function s(r){if(r instanceof N){let o=a.get(r.name);if(o)return o.copy()}return r}return t.transform(s)}var me=class e{constructor(t,a,s={}){let{inferSchema:r=!0}=s;this.scope=t,this.schema=a,this.dialect=a.dialect||new z,this.inferSchema=r,this.getSourceColumnsCache=new bs}getTable(t){let a=typeof t=="string"?t:t.name,s=this.getTableNameFromSources(a);if(!s&&typeof t!="string"){let i=this.getColumnJoinContext(t);if(i)try{let n=this.getAvailableSourceColumns(i);s=this.getTableNameFromSources(a,n)}catch(n){if(!(n instanceof k))throw n}}if(!s&&this.inferSchema){let i=this.getAllSourceColumns(),n=[];for(let[l,f]of i)(!f||f.length===0||f.includes("*"))&&n.push(l);n.length===1&&(s=n[0])}if(!s)return;let r=this.scope.selectedSources[s];if(!r)return R(s);let[o]=r,c=o;if(c instanceof be)for(;c&&c.alias!==s;)c=c.parent;if(c){let i=c.getArgKey("alias");if(i instanceof C&&(i.args.this instanceof B||typeof i.args.this=="string"))return R(i.args.this)}return R(s)}get allColumns(){if(!this.allColumnsCache){this.allColumnsCache=new Set;for(let t of this.getAllSourceColumns().values())for(let a of t)this.allColumnsCache.add(a)}return this.allColumnsCache}getSourceColumnsFromSetOp(t){if(t instanceof T)return t.namedSelects;if(t instanceof D){let c=t.args.this;if(c instanceof ne)return this.getSourceColumnsFromSetOp(c)}if(!(t instanceof ne))throw new Error(`Unknown set operation: ${t}`);let a=t,s=a.args.on;if(s)return s.map(c=>c.name);let r=a.args.side,o=a.args.kind;if(r||o){let c=a.args.this,i=a.args.expression;if(!c||!i)return[];let n=this.getSourceColumnsFromSetOp(c),l=this.getSourceColumnsFromSetOp(i);if(r==="left")return n;if(r==="full"){let f=[...n,...l];return Array.from(new Set(f))}else if(o==="inner"){let f=new Set(n),p=new Set(l);return Array.from(f).filter(m=>p.has(m))}}return t.namedSelects}getSourceColumns(t,a={}){let{onlyVisible:s=!1}=a;if(this.getSourceColumnsCache.has(t,s))return this.getSourceColumnsCache.get(t,s)??[];let r=this.scope.sources.get(t);if(!r)throw new k(`Unknown table: ${t}`);let o=[];if(r instanceof K)o=this.schema.columnNames?.(r,{onlyVisible:s})||[];else if(r instanceof I){let n=r.expression;if(n instanceof Me||n instanceof te){if(o=n.namedSelects,this.dialect._constructor.UNNEST_COLUMN_ONLY&&n instanceof te){let l=n;if(!l.type||Js(l.type,"unknown")){let f=l.args.expressions,p=P(f??[],0);if(p instanceof N&&this.scope.parent){let m=this.getUnnestColumnType(p);if(m?.isType("array")){let d=m.args.expressions;d&&0<d.length?l.type=d[0].copy():l.type=m.copy()}}}if(l.isType("struct"))for(let f of(l.type instanceof C?l.type.args.expressions:void 0)||[])_(f,C)&&o.push(f.name)}}else if(n instanceof ne)o=this.getSourceColumnsFromSetOp(n);else{let l=P(n.args.expressions??[],0);if(l instanceof se){let f=l.args.schema;o=f?f.args.expressions?.map(p=>p instanceof C?p.name:String(p))??[]:["key","value"]}else o=n.namedSelects}}let[c]=this.scope.selectedSources[t]||[void 0,void 0],i;if(c instanceof I?i=c.expression.aliasColumnNames:c instanceof C?i=c.aliasColumnNames:i=[],i.length){let n=[];for(let l=0;l<Math.max(o.length,i.length);l++){let f=P(i,l),p=P(o,l);n.push(f||p||"")}o=n}return this.getSourceColumnsCache.set(t,s,o),o}getAllSourceColumns(){if(!this.sourceColumns){this.sourceColumns=new Map;let t={...this.scope.selectedSources,...Object.fromEntries(this.scope.lateralSources.entries())};for(let a of Object.keys(t))this.sourceColumns.set(a,this.getSourceColumns(a))}return this.sourceColumns}getTableNameFromSources(t,a){let s;return a?s=this.getUnambiguousColumns(a):(this.unambiguousColumns||(this.unambiguousColumns=this.getUnambiguousColumns(this.getAllSourceColumns())),s=this.unambiguousColumns),s.get(t)}getColumnJoinContext(t){if(!this.scope.expression.args.joins||this.scope.expression.getArgKey("laterals")||this.scope.expression.getArgKey("pivots"))return;let s=t.findAncestor(w,T);if(s instanceof w&&Object.keys(this.scope.selectedSources).includes(s.aliasOrName))return s}getAvailableSourceColumns(t){let{from:a,joins:s}=this.scope.expression.args;if(!a||!s)return new Map;let r=new Map,o=a instanceof C?a.aliasOrName:a;o&&r.set(o,this.getSourceColumns(o));for(let c of s.slice(0,s.indexOf(t)+1)){let i=c.aliasOrName;i&&r.set(i,this.getSourceColumns(i))}return r}getUnambiguousColumns(t){if(t.size===0)return new Map;let a=Array.from(t.entries()),[s,r]=a[0];if(a.length===1)return new Ts(r,s);let o=new Map;if(this.dialect._constructor.UNNEST_COLUMN_ONLY){for(let[n,l]of this.scope.sources)if(l instanceof I&&l.expression instanceof te){let f=l.expression.args.alias;_(f,L)&&f.columns.length&&o.set(f.columns[0].name,n)}}let c=new Map;for(let n of r)c.set(n,s);let i=new Set(r);for(let[n,l]of a.slice(1)){let f=new Set(l),p=new Set([...i].filter(m=>f.has(m)));for(let m of l)i.add(m);for(let m of p){let d=o.get(m);if(d!==void 0){c.set(m,d);continue}c.delete(m)}for(let m of f)p.has(m)||c.set(m,n)}return c}getUnnestColumnType(t){let a=this.scope.parent;if(!a)return;let s;if(t.table)s=t.table;else{let c=new e(a,this.schema,{inferSchema:this.inferSchema}).getTable(t);if(!c)return;s=c.name}let r=a.sources.get(s);return r?this.getColumnTypeFromScope(r,t):void 0}getColumnTypeFromScope(t,a){if(t instanceof K){let s=this.schema.getColumnType?.(t,a);if(s&&(typeof s.args.this=="string"?s.args.this:"unknown")!=="unknown")return s}else if(t instanceof I)for(let[,s]of t.sources){let r=this.getColumnTypeFromScope(s,a);if(r&&(typeof r.args.this=="string"?r.args.this:"unknown")!=="unknown")return r}}};var Oe=Symbol("SELECT_ALL");function Rn(e){let{isAgg:t}=e;return v(t?new Ne({this:ae.number(1)}):"1","_")}function fs(e,t={}){let{schema:a,removeUnusedSelections:s=!0,dialect:r}=t,o=G(a,{dialect:r}),c=new Map,i=new Map,n=Array.from(U(e));for(let l=n.length-1;0<=l;l--){let f=n[l],p=i.get(f)||new Set([Oe]),m=c.get(f)||0,d=f.expression;if(d.getArgKey("distinct")&&(p=new Set([Oe])),d instanceof ne){let u=d.args.kind,g=d.args.side;if(!u&&!g){let[b,x]=f.unionScopes;if(b.expression.selects.length!==x.expression.selects.length)throw new Error(`Invalid set operation due to column mismatch: ${f.expression.sql({dialect:r})}.`);if(i.set(b,p),x.expression.selects.some(E=>E instanceof C&&E.isStar))i.set(x,p);else if(!b.expression.selects.some(E=>E instanceof C&&E.isStar))if(d.args.byName)i.set(x,i.get(b)||new Set);else{let E=new Set;i.set(x,E);for(let y=0;y<b.expression.selects.length;y++){let S=b.expression.selects[y];if(S instanceof C&&(p.has(Oe)||p.has(S.aliasOrName))){let h=x.expression.selects[y];h instanceof C&&E.add(h.aliasOrName)}}}}}if(d instanceof T){if(s&&_n(f,p,o,m),d.isStar)continue;let u=new Map;for(let g of f.columns){let b=g.table||"",x=g.name,E=u.get(b);E||(E=new Set,u.set(b,E)),E.add(x)}for(let[g,b]of Object.entries(f.selectedSources)){let[x,E]=b;if(E instanceof I){let S=P(E.expression.selects,0),h;0<f.pivots.length||S instanceof se?h=new Set([Oe]):h=u.get(g)||new Set;let A=i.get(E);A||(A=new Set,i.set(E,A));for(let O of h)A.add(O)}let y=x.aliasColumnNames;y&&0<y.length&&c.set(E,y.length)}}}return e}function _n(e,t,a,s){let o=e.expression.args.order,c=new Set;if(o)for(let u of o.findAll(N))u.table||c.add(u.name);let i=[],n=!1,l=!1,f=!1,p=s,m=t.has(Oe),d=e.expression;for(let u of d.selects){if(typeof u=="string"||typeof u=="number"||typeof u=="boolean")continue;let g=u,b=g.aliasOrName;m||t.has(b)||c.has(b)||0<p?(i.push(g),p-=1):(g.isStar&&(l=!0),n=!0),!f&&g.find(j)&&(f=!0)}if(l){let u=new me(e,a,{}),g=new Set(i.map(x=>x.aliasOrName)),b=Array.from(t).filter(x=>typeof x=="string").sort();for(let x of b)if(!g.has(x)){let E=u.getTable(x);i.push(v(q({col:x,table:E?.aliasOrName}),x,{copy:!1}))}}i.length===0&&i.push(Rn({isAgg:f})),d.select(i,{append:!1,copy:!1}),n&&e.clearCache()}function ps(e,t={}){let{schema:a,dialect:s}=t,r=G(a,{dialect:s});for(let o of U(e))if(Object.keys(o.selectedSources).length!==1)for(let[,c]of Object.entries(o.selectedSources)){let[i,n]=c;if(!(n instanceof K))continue;let l=i;if(!l.parent)continue;let f=r.columnNames?.(n);if(!f||f.length===0||l.parent instanceof D||l.parent?.parent instanceof K)continue;if(!l.alias)throw new k("Tables require an alias. Run qualify_tables optimization.");let m=l.aliasOrName,d=pe("*").from(v(l,m,{table:!0}),{copy:!1}).subquery(m,{copy:!1});l.replace(d)}return e}function us(e,t={}){let{schema:a,expandAliasRefs:s=!0,expandStars:r=!0,inferSchema:o,allowPartialQualification:c=!1,dialect:i}=t,n=G(a,{dialect:i}),l=new Ge({schema:n}),f=o??!!n.empty,p=n.dialect||new z,m=p._constructor,d=m.PSEUDOCOLUMNS;for(let u of U(e)){m.PREFER_CTE_ALIAS_COLUMN&&gn(u);let b=u.expression instanceof T;jn(u,d);let x=new me(u,n,{inferSchema:f});rn(u.ctes),rn(u.derivedTables);let E=Kn(u,x);(n.empty||m.FORCE_EARLY_ALIAS_REF_EXPANSION)&&s&&an(u,x,p,{expandOnlyGroupby:m.EXPAND_ONLY_GROUP_ALIAS_REF}),Mn(u,x),Un(u,x,{allowPartialQualification:c}),!n.empty&&s&&an(u,x,p,{expandOnlyGroupby:!1}),b&&(r&&Ln(u,x,E,d,l),un(u)),Fn(u,p),kn(u,x),m.ANNOTATE_ALL_SCOPES&&l.annotateScope(u)}return e}function ms(e,t){let a=[];for(let s of U(e)){if(!(s.expression instanceof T))continue;let r=s.unqualifiedColumns;if(0<s.externalColumns.length&&!s.isCorrelatedSubquery&&s.pivots.length===0){let o=s.externalColumns[0],c=o.table?` for table: '${o.table}'`:"",i=o.args.this?.meta?.line,n=o.args.this?.meta?.col,l=o.args.this?.meta?.start,f=o.args.this?.meta?.end,p=`Column '${o.name}' could not be resolved${c}.`;if(i&&n&&(p+=` Line: ${i}, Col: ${n}`),t&&l!==void 0&&f!==void 0){let{formattedSql:m}=We({sql:t,positions:[[l,f]]});p+=`
2
+ ${m}`}throw new k(p)}if(0<r.length&&0<s.pivots.length&&s.pivots[0].unpivot){let o=new Set(pn(s.pivots[0]));r=r.filter(c=>!o.has(c))}a.push(...r)}if(0<a.length){let s=a[0],r=s.args.this,o=_(r,C)?r.meta.line:void 0,c=_(r,C)?r.meta.col:void 0,i=_(r,C)?r.meta.start:void 0,n=_(r,C)?r.meta.end:void 0,l=`Ambiguous column '${s.name}'`;if(o&&c&&(l+=` (Line: ${o}, Col: ${c})`),t&&i!==void 0&&n!==void 0){let{formattedSql:f}=We({sql:t,positions:[[i,n]]});l+=`
3
+ ${f}`}throw new k(l)}return e}function jn(e,t){if(t.size===0)return;let a=!1,s=e.expression;for(let r of e.columns){let o=r.name.toUpperCase();t.has(o)&&(o!=="LEVEL"||s instanceof T&&s.args.connect)&&(r.replace(new Rs({...r.args})),a=!0)}a&&e.clearCache()}function pn(e){let a=(e.args.fields||[]).filter(r=>r instanceof fe&&r.args.this instanceof N).map(r=>r.args.this),s=[];for(let r of e.args.expressions)for(let o of r.findAll(N))s.push(o);return[...a,...s]}function rn(e){for(let t of e){if(t.parent instanceof H&&t.parent.args.recursive)continue;let a=t.getArgKey("alias");a instanceof L&&a.setArgKey("columns",void 0)}}function Kn(e,t){let a=e.expression.args.joins||[];if(a.length===0)return new Map;let s=new Set(a.map(n=>n.aliasOrName)),r=Object.keys(e.selectedSources).filter(n=>!s.has(n));if(0<s.size&&r.length===0)throw new k(`Joins ${[...s].join(",")} missing source table ${e.expression}`);let o={},c=n=>{for(let l of t.getSourceColumns(n))l in o||(o[l]=n)};for(let n of r)c(n);let i=new Map;for(let n=0;n<a.length;n++){let l=a[n];de(l,w);let f=r[r.length-1];f&&c(f);let p=l.aliasOrName;r.push(p);let m=l.args.using;if(!m)continue;let d=t.getSourceColumns(p),u=[],g=m.length,b=l.isSemiOrAntiJoin;for(let x of m){let E=x.name,y=o[E];if((!y||!d.includes(E))&&0<Object.keys(o).length&&!("*"in o)&&0<d.length)throw new k(`Cannot automatically join: ${E}`);y=y||f;let S;if(n===0||g===1)S=q({col:E,table:y});else{let h=r.slice(0,-1).filter(A=>t.getSourceColumns(A).includes(E)).map(A=>q({col:E,table:A}));1<h.length?S=new xe({this:h[0],expressions:h.slice(1)}):S=q({col:E,table:y})}if(u.push(S.eq(q({col:E,table:p}))),!b){let h=i.get(E);h||(h=[],i.set(E,h)),h.includes(y)||h.push(y),h.includes(p)||h.push(p)}}l.setArgKey("using",void 0),l.setArgKey("on",Fe(u,{copy:!1}))}if(0<i.size)for(let n of e.columns){let l=n.table?void 0:i.get(n.name);if(l!==void 0){let f=l.map(m=>q({col:n.name,table:m})),p=new xe({this:f[0],expressions:f.slice(1)});n.parent instanceof T?p=v(p,n.name,{copy:!1}):n.parent instanceof Us&&(p=new Ks({this:R(n.name),expression:p})),e.replace(n,p)}}return i}function an(e,t,a,s){let{expandOnlyGroupby:r}=s,o=e.expression,c=a._constructor;if(!(o instanceof T)||c.DISABLES_ALIAS_REF_EXPANSION)return;let i=new Map,n=new Set(o.selects.map(d=>d.aliasOrName)),l=!1,f=(d,u={})=>{let{resolveTable:g=!1,literalIndex:b=!1}=u,x=d instanceof Ae,E=d instanceof ie;if(!(!d||r&&!x))for(let y of Be(d,{prune:S=>S.isStar})){if(!(y instanceof N)||r&&x&&y.parent!==d)continue;let S=!1,h=g&&!y.table?t.getTable(y.name):void 0,A=i.get(y.name),O=A?A[0]:void 0,M=A?A[1]:1;if(O)S=!!(O.find(j)&&y.findAncestor(j)&&!(y.findAncestor(ce,T)instanceof ce)),E&&c.PROJECTION_ALIASES_SHADOW_SOURCE_NAMES&&(S=S||Array.from(O.findAll(N)).some(F=>n.has(F.parts[0]?.name||"")));else if(c.PROJECTION_ALIASES_SHADOW_SOURCE_NAMES&&(x||E)){let F=h?h.name:y.table;if(F&&n.has(F)){y.replace(R(y.name)),l=!0;continue}}if(h&&(!O||S))y.setArgKey("table",h);else if(!y.table&&O&&!S)if((O instanceof ae||O.isNumber)&&(b||g))b&&(y.replace(ae.number(M)),l=!0);else{l=!0;let F=y.replace(ke(O)),Ie=Cs(F,a);Ie!==F&&F.replace(Ie)}}};for(let d=0;d<o.selects.length;d++){let u=o.selects[d];f(u),u instanceof X&&i.set(u.alias,[u.args.this,d+1])}let p=e,m=!1;for(;p&&!p.isCte;)p.isUnion&&p.parent&&(m=p.parent.expression.args.expression===p.expression),p=p.parent;if(p&&m){let d=p.expression.parent;if(d&&d.findAncestor(H)?.args.recursive){let g=d.args.alias,b=g instanceof L?g.columns:[],x=0<b.length?b:d.args.this?.selects||[];for(let E of x)E instanceof C&&i.delete(E.outputName)}}if(f(o.args.where),f(o.args.group,{literalIndex:!0}),f(o.args.having,{resolveTable:!0}),f(o.args.qualify,{resolveTable:!0}),c.SUPPORTS_ALIAS_REFS_IN_JOIN_CONDITIONS)for(let d of o.args.joins||[])f(d);l&&e.clearCache()}function Mn(e,t){let a=!1,s=[...e.columns,...e.stars];for(let r of s){if(r instanceof le)continue;let o=r.table,c=r.meta.dotParts||[];if(delete r.meta.dotParts,o&&!e.sources.has(o)&&(!e.parent||!e.parent.sources.has(o)||!e.isCorrelatedSubquery)){let i=r.parts;if(i.length<2)continue;let n=i[0],l=i.slice(1);if(!n)continue;let f,p,m,d;if(e.sources.has(n.name)){if(l.length===0)continue;m=n,f=l[0],p=l.slice(1),d=!0}else m=t.getTable(n.name),f=n,p=l,d=!1;if(m){a=!0;let u=q({col:f,table:m});0<c.length&&(u.meta.dotParts=c.slice(d?2:1)),0<p.length?r.replace(le.build([u,...p])):r.replace(u)}}}a&&e.clearCache()}function Un(e,t,a){let{allowPartialQualification:s}=a,r=t.dialect._constructor;for(let o of e.columns){let c=o.table,i=o.name;if(c&&e.sources.has(c)){let n=t.getSourceColumns(c);if(!s&&0<n.length&&!n.includes(i)&&!n.includes("*"))throw new k(`Unknown column: ${i}`)}if(!c){if(0<e.pivots.length&&!o.findAncestor(Te)){o.setArgKey("table",R(e.pivots[0].alias));continue}let n=t.getTable(o);if(n){let l=e.sources.get(n.name);if(l instanceof I&&l.columnIndex.has(o))continue}if(n)o.setArgKey("table",n);else if(r.TABLES_REFERENCEABLE_AS_COLUMNS&&o.parts.length===1&&i in e.selectedSources){let l=o.args.this;e.replace(o,new qs({this:_(l,C)?l:void 0}))}}}for(let o of e.pivots)if(o instanceof Te){for(let c of o.findAll(N))if(!c.table&&t.allColumns.has(c.name)){let i=t.getTable(c.name);i&&c.setArgKey("table",i)}}}function cn(e,t,a){let s=e.getArgKey("except")??e.getArgKey("except");if(!s)return;let r=Array.isArray(s)?s:[s],o=new Set(r.filter(c=>c instanceof C).map(c=>c.name));for(let c of t)a.set(c,o)}function ln(e,t,a){let s=e.getArgKey("rename");if(!s||s.length===0)return;let r={};for(let o of s)if(o instanceof C){let c=o.args.this;c instanceof C&&(r[c.name]=o.alias)}for(let o of t)a.set(o,r)}function fn(e,t,a){let s=e.getArgKey("replace");if(!s||s.length===0)return;let r={};for(let o of s)o instanceof X&&(r[o.alias]=o);for(let o of t)a.set(o,r)}function Dn(e){let t=e.find(N);if(!(t instanceof N)||!t.isType("struct"))return[];let a=t.copy(),s=a.type,r=_(s,Ke)?s:void 0,o=e.parts.slice(1,-1);e:for(let n of o.slice(1)){let l=r?.args.expressions||[];for(let f of l){if(!(f.args.this instanceof B))return[];if(!_(f,je))return[];let p=f.args.kind,m=_(p,Ke)?p:void 0;if(f.name===n.name&&m?.isType("struct")){r=m;break e}}return[]}let c=new Set,i=[];for(let n of r?.args.expressions||[]){let l=n.name,f=n.args.this;if(c.has(l)||!(f instanceof B))return[];c.add(l);let p=f.copy(),m=[...o.map(b=>b.copy()),p],[d,...u]=m,g=q({col:d,table:a.args.table},{fields:u});i.push(v(g,p,{copy:!1}))}return i}function Pn(e){if(!(e.args.this instanceof we))return[];let t=e.find(N);if(!(t instanceof N)||!t.isType("struct"))return[];let a=t.parent,s=t.type,r=_(s,Ke)?s:void 0;for(;a!==void 0;){if(a instanceof we){a=a.parent;continue}if(!(a instanceof le))return[];let n=a.right;if(n instanceof Ze)break;if(!(n instanceof B))return[];let l=!1,f=Re(r.args.expressions||[],je);for(let p of f)if(p.name===n.name){l=!0,r=p.args.kind;break}if(!l)return[];a=a.parent}let o=[],c=e.args.this,i=Re(r.args.expressions||[],je);for(let n of i){let l=n.args.this instanceof B?n.args.this.copy():new B({this:n.args.this?.toString()}),f=le.build([c.copy(),l]),p=v(f,l,{copy:!1});o.push(p)}return o}function Ln(e,t,a,s,r){let o=[],c=new Map,i=new Map,n=new Map,l=new Set,f=t.dialect._constructor,p,m=new Set,d=P(e.pivots,0);if(d instanceof Te&&!d.aliasColumnNames.length)if(d.unpivot){p=pn(d).map(u=>u.outputName);for(let u of d.args.fields||[])if(u instanceof fe)for(let g of u.args.expressions)for(let b of g.findAll(N))m.add(b.outputName)}else{for(let g of d.findAll(N))m.add(g.outputName);p=(d.getArgKey("columns")||[]).map(g=>g.outputName),p.length||(p=d.args.expressions.map(g=>g.aliasOrName))}f.SUPPORTS_STRUCT_STAR_EXPANSION&&e.stars.some(u=>u instanceof le)&&r.annotateScope(e);for(let u of e.expression.selects){let g=[];if(u instanceof Ze)g.push(...Object.keys(e.selectedSources)),cn(u,g,c),fn(u,g,i),ln(u,g,n);else if(u.isStar)if(u instanceof le){if(f.SUPPORTS_STRUCT_STAR_EXPANSION&&!f.REQUIRES_PARENTHESIZED_STRUCT_ACCESS){let b=Dn(u);if(0<b.length){o.push(...b);continue}}else if(f.REQUIRES_PARENTHESIZED_STRUCT_ACCESS){let b=Pn(u);if(0<b.length){o.push(...b);continue}}}else{let b=u instanceof N?u.table:"";b&&g.push(b);let x=u.args.this;x instanceof C&&(cn(x,g,c),fn(x,g,i),ln(x,g,n))}if(g.length===0){o.push(u);continue}for(let b of g){if(!e.sources.has(b))throw new k(`Unknown table: ${b}`);let x=t.getSourceColumns(b,{onlyVisible:!0});if(x.length||(x=e.outerColumns),0<s.size&&f.EXCLUDES_PSEUDOCOLUMNS_FROM_STAR&&(x=x.filter(h=>!s.has(h.toUpperCase()))),!x.length||x.includes("*"))return;let E=c.get(b)||new Set,y=n.get(b)||{},S=i.get(b)||{};if(d instanceof Te){let h;if(p&&0<m.size?(h=x.filter(A=>!m.has(A)),h.push(...p)):h=d.aliasColumnNames,0<h.length){for(let A of h)E.has(A)||o.push(v(q({col:A,table:d.alias}),A,{copy:!1}));continue}}for(let h of x){if(E.has(h)||l.has(h))continue;let A=a.get(h);if(A?.includes(b)){l.add(h);let O=A.map(M=>q({col:h,table:M}));o.push(v(new xe({this:O[0],expressions:O.slice(1)}),h,{copy:!1}))}else{let O=y[h]??h,M=S[h]||q({col:h,table:b});o.push(O!==h?v(M,O,{copy:!1}):M)}}}}0<o.length&&e.expression instanceof T&&e.expression.setArgKey("expressions",o)}function un(e){let t;if(e instanceof I)t=e;else{let c=Y(e);if(!(c instanceof I))return;t=c}if(!(t.expression instanceof T))return;let a=t.expression.selects,s=t.outerColumns,r=[],o=Math.max(a.length,s.length);for(let c=0;c<o;c++){let i=a[c],n=s[c];if(!i||i instanceof se)break;i instanceof D?i.outputName||i.setArgKey("alias",new L({this:R(`_col_${c}`)})):!(i instanceof X)&&!(i instanceof vs)&&!i.isStar&&(i=v(i,i.outputName||`_col_${c}`,{copy:!1})),n&&i.setArgKey("alias",R(n)),r.push(i)}0<r.length&&t.expression instanceof T&&t.expression.setArgKey("expressions",r)}function mn(e,t){let a=Number(t.args.this)-1,s=e.expression.selects[a];if(!(s instanceof X))throw new k(`Unknown output column: ${t.name}`);return s}function dn(e,t,a,s={}){let{alias:r=!1}=s,o=a._constructor,c=[],i;for(let n of t)if(n.isInteger){let l=mn(e,n);if(r){let f=l.alias;c.push(f?q({col:f}):n)}else{let f=l.args.this,p=!1;o.PROJECTION_ALIASES_SHADOW_SOURCE_NAMES&&(i===void 0&&(i=new Set(e.expression.selects.map(m=>m.aliasOrName).filter(m=>m in e.selectedSources))),p=Array.from(f.findAll(N)).some(m=>i?.has(m.parts[0]?.name||""))),ks.some(m=>f instanceof m)||f.isNumber||f.find(Ue)||f.find(te)||p?c.push(n):c.push(f.copy())}}else c.push(n);return c}function Fn(e,t){let a=e.expression.args.group;if(!a)return;let s=Re(a.args.expressions||[],C);a.setArgKey("expressions",dn(e,s,t)),e.expression.setArgKey("group",a)}function kn(e,t){for(let a of["order","distinct"]){let s=e.expression.getArgKey(a);if(s instanceof Is&&(s=s.args.on),!(s instanceof C))continue;let r=s.args.expressions;a==="order"&&(r=r.map(c=>c.args.this));let o=dn(e,r,t.dialect,{alias:!0});for(let c=0;c<r.length;c++){let i=r[c],n=o[c];for(let l of i.findAll(j))for(let f of l.findAll(N))if(!f.table){let p=t.getTable(f.name);p&&f.setArgKey("table",p)}i.replace(n)}if(e.expression.getArgKey("group")){let c=new Map(e.expression.selects.filter(i=>i instanceof X).map(i=>[i.args.this.sql(),q({col:i.aliasOrName})]));for(let i of r)if(i.isInteger)i.replace(R(mn(e,i).alias));else{let n=c.get(i.sql());n&&i.replace(n)}}}}function ve(e,t={}){let{dialect:a,identify:s=!0}=t,r=z.getOrRaise(a);return e.transform(r.quoteIdentifier.bind(r),{identify:s,copy:!1})}function gn(e){for(let t of e.ctes){let a=t.aliasColumnNames;if(0<a.length&&t.args.this instanceof T){let s=t.args.this,r=s.args.expressions||[],o=[];for(let c=0;c<a.length;c++){let i=a[c],n=r[c];if(!n)break;let l;n instanceof X?(n.setArgKey("alias",R(i)),l=n):l=v(n,i),o.push(l)}s.setArgKey("expressions",o)}}}function ds(e,t={}){let{db:a,catalog:s,onQualify:r,dialect:o,canonicalizeTableAliases:c=!1}=t,i=z.getOrRaise(o),n=_e("_"),l;a&&(l=ts(a,{dialect:i}),l.meta.isTable=!0,l=ee(l,{dialect:i}));let f;s&&(f=ts(s,{dialect:i}),f.meta.isTable=!0,f=ee(f,{dialect:i}));let p=d=>{d.args.this instanceof B&&(l&&!d.args.db&&d.setArgKey("db",l.copy()),f&&!d.args.catalog&&d.args.db&&d.setArgKey("catalog",f.copy()))};if((l||f)&&!(e instanceof be)){let u=e.getArgKey("with")||new H({expressions:[]}),g=new Set((u.args.expressions||[]).map(b=>b.aliasOrName));for(let b of e.walk({prune:x=>x instanceof be}))b instanceof K&&(g.has(b.name)||p(b))}let m=(d,u,g={})=>{let{targetAlias:b,scope:x,normalize:E=!1,columns:y}=g,S=d.getArgKey("alias");S||(S=new L({}));let h;if(c)h=n(),u.set(S.name||b||"",h);else if(!S.name)h=b||n(),E&&b&&(h=ee(h,{dialect:i}).name);else return;S.setArgKey("this",R(h)),y&&S.setArgKey("columns",y.map(A=>R(A))),d.setArgKey("alias",S),x&&x.renameSource("",h)};for(let d of U(e)){let u=d.localColumns,g=new Map;for(let x of d.subqueries){let E=x.parent;E&&E instanceof D&&E.unwrap().replace(E)}for(let x of d.derivedTables){let E=x.unnest();if(E instanceof K){let S=E.args.joins;E.setArgKey("joins",void 0);let h=x.args.this;if(h instanceof C){let A=pe("*").from(E.copy(),{copy:!1});h.replace(A),A.setArgKey("joins",S)}}m(x,g,{scope:d});let y=P(x.getArgKey("pivots")||[],0);y&&m(y,g)}let b=new Map;for(let[x,E]of d.sources)if(E instanceof K){let y=!!x,S=E.args.pivots,h=S?P(S,0):void 0,A=x;h&&(A=E.name);let O=E.args.this,M=E.args.alias,F=[];if(O&&O instanceof ge){let Ss=O.constructor.name;if(M)M instanceof L&&M.args.columns?.length?F=M.columns:i._constructor.DEFAULT_FUNCTIONS_COLUMN_NAMES.has(Ss)&&(F=Array.from(Ye(E.aliasOrName)),E.setArgKey("alias",void 0),A="");else{let ys=i._constructor.DEFAULT_FUNCTIONS_COLUMN_NAMES.get(Ss);F=ys?Array.from(Ye(ys)):[]}}m(E,g,{targetAlias:A||E.name||void 0,normalize:!0,columns:F});let Ie=E.parts?.map(qe=>qe.name).join("."),hs=E.args.alias?.args.this;if(hs instanceof B&&b.set(Ie,hs.copy()),h){let qe=h.getArgKey("unpivot")?E.alias:void 0;if(m(h,g,{targetAlias:qe,normalize:!0}),d.sources.get(E.aliasOrName)instanceof I)continue}y&&(p(E),r&&r(E))}else if(E instanceof I&&E.isUdtf){let y=E.expression;if(m(y,g),y instanceof Me){let S=y.getArgKey("alias");S instanceof L&&!S.args.columns?.length&&S.setArgKey("columns",i.generateValuesAliases(y).map(h=>ee(h,{dialect:i})))}}for(let x of d.tables)if(!x.alias&&x.parent){let E=x.parent;(E instanceof J||E instanceof w)&&m(x,g,{targetAlias:x.name})}for(let x of u){let E=x.table;if(x.args.db){let y=x.parts.slice(0,-1).map(h=>h.name).join("."),S=b.get(y);S&&(x.setArgKey("table",void 0),x.setArgKey("db",void 0),x.setArgKey("catalog",void 0),x.setArgKey("table",S.copy()))}else if(0<g.size&&E){let y=g.get(E);y&&y!==x.table&&x.setArgKey("table",R(y))}}}return e}function gs(e,t={}){let{dialect:a,db:s,catalog:r,schema:o,expandAliasRefs:c=!0,expandStars:i=!0,inferSchema:n,isolateTables:l=!1,qualifyColumns:f=!0,allowPartialQualification:p=!1,validateQualifyColumns:m=!0,quoteIdentifiers:d=!0,identify:u=!0,canonicalizeTableAliases:g=!1,onQualify:b,sql:x}=t,E=G(o,{dialect:a}),y=z.getOrRaise(a);return e=ee(e,{dialect:y,storeOriginalColumnIdentifiers:!0}),e=ds(e,{db:s,catalog:r,dialect:y,onQualify:b,canonicalizeTableAliases:g}),l&&(e=ps(e,{schema:E,dialect:y})),f&&(e=us(e,{schema:E,expandAliasRefs:c,expandStars:i,inferSchema:n,allowPartialQualification:p})),d&&(e=ve(e,{dialect:y,identify:u})),m&&ms(e,x),e}function xs(e){let t=_e("_u_");for(let a of U(e)){let s=a.expression,r=s.parentSelect;if(!r||!_(r,T)||!_(s,T))continue;let o=s;0<a.externalColumns.length?$n(o,r,a.externalColumns,t):a.scopeType==="subquery"&&zn(o,r,t)}return e}function zn(e,t,a){if(1<e.selects.length)return;let s=e.findAncestor(ws);if(!s||s instanceof ge&&(s.parent instanceof K||s.parent instanceof J||s.parent instanceof w)||t!==s.parentSelect||!t.args.from)return;let r=e;e instanceof ne&&(r=pe(e.selects).from(e.subquery(a()),{copy:!1}));let o=a(),c=s.findAncestor(ie,V,w);if(!(s instanceof fe||s instanceof he)){let u=q({col:r.selects[0].aliasOrName,table:o}),g=c?.parentSelect;if(c instanceof ie&&g===t||(!c||g!==t)&&(t.args.group||t.selects.some(E=>oe(E,j))))u=new Ne({this:u});else if(!(e.parent instanceof D))return;let b="cross",x;s instanceof Ee&&(u=u.is(Je()).not(),b="left",x=W()),Q(e.parent,u),t.join(r,{on:x,joinType:b,joinAlias:o,copy:!1});return}if(r.find([Ce,Xe]))return;let i=s;if(s instanceof he){let u=s.findAncestor($);if(!u||t!==u.parentSelect)return;i=u}let n=Es(i),l=r.selects[0],f=l.args.this;if(!(f instanceof C))return;let p=q({col:l.alias,table:o}),m=p.is(Je()).not();c instanceof w?(Q(i,W()),t.where(m,{copy:!1})):Q(i,m);let d=r.args.group;if(d){let u=new Set((d.args.expressions??[]).map(g=>g instanceof C?g.sql():String(g)));(u.size!==1||!u.has(l.args.this.sql()))&&(r=pe(v(q({col:l.alias,table:"_q"}),l.alias,{copy:!1})).from(r.subquery("_q",{copy:!1}),{copy:!1}).groupBy(q({col:l.alias,table:"_q"}),{copy:!1}))}else oe(f,j)||(r=r.groupBy(f,{copy:!1}));n&&t.join(r,{on:n.eq(p),joinType:"left",joinAlias:o,copy:!1})}function $n(e,t,a,s){let r=e.args.where;if(!r||r.find(Le)||e.find([Ce,Xe]))return;let o=s(),c=[];for(let S of a){if(S.findAncestor(V)!==r)return;let h=S.findAncestor(Ve);if(!h||h.findAncestor(V)!==r)return;let A;if(h instanceof Z)A=Array.from(h.left?.walk()||[]).some(O=>O===S)?h.right:h.left;else return;if(!A)return;c.push([A,S,h])}if(!c.some(([,,S])=>S instanceof $))return;let i=t.selects.map(S=>S.unalias()).some(S=>S instanceof D&&S===e.parent),n=e.selects[0],l=n.args.this;if(!(l instanceof C))return;let f=new Map,p=new Map,m=new Set,d=[],u=S=>m.has(S.sql());for(let[S,,h]of c){let A=S.sql();A===l.sql()?(f.set(A,n.alias),p.set(A,S),m.has(A)||(m.add(A),d.push(S))):(f.has(A)||(f.set(A,s()),p.set(A,S)),h instanceof $&&!m.has(A)&&(m.add(A),d.push(S)))}let g=e.findAncestor(Ve),b=i?Ne:Ds;!n.find(j)&&!u(l)&&e.select(v(new b({this:l}),n.alias,{quoted:!1}),{append:!1,copy:!1}),g instanceof Ee&&e.setArgKey("expressions",[]);for(let[S,h]of f){let A=p.get(S);m.has(S)?(g instanceof Ee||S!==n.args.this.sql())&&e.select(`${A} AS ${h}`,{copy:!1}):e.select(v(new b({this:A.copy()}),h,{quoted:!1}),{copy:!1})}let x=q({col:n.alias,table:o}),E=Es(g),y=g?.parent?._constructor;if(g instanceof Ee)x=q({col:Array.from(f.values())[0],table:o}),g=Q(g,`NOT ${x} IS NULL`);else if(g instanceof De){if(!y||!(y.prototype instanceof Z||y===Z))return;let S=new y({this:E,expression:q({col:"_x"})});g.parent&&(g=Q(g.parent,`ARRAY_ALL(${x}, _x -> ${S})`))}else if(g instanceof he){if(!y||!(y.prototype instanceof Z||y===Z))return;if(u(n.args.this)){let S=new y({this:E,expression:x});g.parent&&(g=Q(g.parent,S))}else{let S=new y({this:E,expression:q({col:"_x"})});g=Q(g,`ARRAY_ANY(${x}, _x -> ${S})`)}}else if(g instanceof fe)u(n.args.this)?g=Q(g,`${E} = ${x}`):g=Q(g,`ARRAY_ANY(${x}, _x -> _x = ${g.args.this})`);else{if(i&&e.parent?.alias&&(x=v(x,e.parent.alias,{copy:!1})),n.find(ss)){let S=h=>h instanceof ss?ae.number(0):h instanceof j?Je():h;x=new xe({this:x,expressions:[n.args.this.transform(S)]})}e.parent?.replace(x)}for(let[S,h,A]of c){A.replace(W());let O=f.get(S.sql());if(!O)continue;let M=q({col:O,table:o});if(i){S.replace(M),A instanceof $||t.where(A,{copy:!1});continue}u(S)?S.replace(M):A instanceof $?g&&(g=Q(g,`(${g} AND ARRAY_CONTAINS(${M}, ${h}))`)):(S.replace(R("_x")),g&&(g=Q(g,`(${g} AND ARRAY_ANY(${M}, _x -> ${A}))`)))}t.join(e.groupBy(d,{copy:!1}),{on:c.filter(([,,S])=>S instanceof $).map(([,,S])=>S),joinType:"left",joinAlias:o,copy:!1})}function Q(e,t){return e.replace(Ls(t))}function Es(e){if(e instanceof fe)return e.args.this;if(e instanceof he||e instanceof De)return Es(e.parent);if(e instanceof Z)return e.left instanceof D||e.left instanceof he||e.left instanceof Ee||e.left instanceof De?e.right:e.left}var xn=[gs,fs,He,xs,ls,rs,$e,cs,as,is,ve,Qe,os,Se];function vo(e,t={}){let{schema:a,db:s,catalog:r,dialect:o,rules:c=xn,sql:i,isolateTables:n=!0,quoteIdentifiers:l=!1,...f}=t,p=G(a,{dialect:o}),m={db:s,catalog:r,schema:p,dialect:o,sql:i,isolateTables:n,quoteIdentifiers:l,...f},d=Fs(e,{dialect:o,copy:!0});for(let u of c)d=u(d,m);return d}export{gs as a,Ws as b,vo as c};
4
+ //# sourceMappingURL=chunk-ZBFGQPJR.js.map