@hdnax/sqlingo.js 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.repo.md +1 -2
  3. package/dist/chunk-2YNOERAO.cjs +2 -0
  4. package/dist/chunk-2YNOERAO.cjs.map +1 -0
  5. package/dist/chunk-2Z3O2CFM.cjs +19 -0
  6. package/dist/chunk-2Z3O2CFM.cjs.map +1 -0
  7. package/dist/chunk-4ZMKB6PV.cjs +2 -0
  8. package/dist/chunk-4ZMKB6PV.cjs.map +1 -0
  9. package/dist/chunk-53OWF4GG.js +2 -0
  10. package/dist/chunk-53OWF4GG.js.map +1 -0
  11. package/dist/chunk-C4CLTVOW.cjs +2 -0
  12. package/dist/chunk-C4CLTVOW.cjs.map +1 -0
  13. package/dist/chunk-DOKMTZYO.cjs +4 -0
  14. package/dist/chunk-DOKMTZYO.cjs.map +1 -0
  15. package/dist/chunk-FCGUTI7Y.js +2 -0
  16. package/dist/chunk-FCGUTI7Y.js.map +1 -0
  17. package/dist/chunk-IPCIXWCY.js +2 -0
  18. package/dist/chunk-IPCIXWCY.js.map +1 -0
  19. package/dist/chunk-KCNOE4DZ.js +19 -0
  20. package/dist/chunk-KCNOE4DZ.js.map +1 -0
  21. package/dist/chunk-NRJHX2GZ.js +2 -0
  22. package/dist/chunk-NRJHX2GZ.js.map +1 -0
  23. package/dist/chunk-O2J5RKBN.js +2 -0
  24. package/dist/chunk-O2J5RKBN.js.map +1 -0
  25. package/dist/chunk-PXUASP5I.js +2 -0
  26. package/dist/chunk-PXUASP5I.js.map +1 -0
  27. package/dist/chunk-R7C3ZHVK.cjs +2 -0
  28. package/dist/chunk-R7C3ZHVK.cjs.map +1 -0
  29. package/dist/chunk-UHWHUDLE.cjs +2 -0
  30. package/dist/chunk-UHWHUDLE.cjs.map +1 -0
  31. package/dist/chunk-WRNYJ54A.cjs +2 -0
  32. package/dist/chunk-WRNYJ54A.cjs.map +1 -0
  33. package/dist/chunk-XZQFOICX.cjs +3 -0
  34. package/dist/chunk-XZQFOICX.cjs.map +1 -0
  35. package/dist/chunk-YLOQRUXC.js +2 -0
  36. package/dist/chunk-YLOQRUXC.js.map +1 -0
  37. package/dist/chunk-YSS2WVCM.cjs +2 -0
  38. package/dist/chunk-YSS2WVCM.cjs.map +1 -0
  39. package/dist/chunk-Z5V6VOIN.js +3 -0
  40. package/dist/chunk-Z5V6VOIN.js.map +1 -0
  41. package/dist/chunk-ZBFGQPJR.js +4 -0
  42. package/dist/chunk-ZBFGQPJR.js.map +1 -0
  43. package/dist/dialects/athena.cjs +2 -0
  44. package/dist/dialects/athena.cjs.map +1 -0
  45. package/dist/dialects/athena.d.cts +66 -0
  46. package/dist/dialects/athena.d.ts +66 -0
  47. package/dist/dialects/athena.js +2 -0
  48. package/dist/dialects/athena.js.map +1 -0
  49. package/dist/dialects/bigquery.cjs +3 -0
  50. package/dist/dialects/bigquery.cjs.map +1 -0
  51. package/dist/dialects/bigquery.d.cts +651 -0
  52. package/dist/dialects/bigquery.d.ts +651 -0
  53. package/dist/dialects/bigquery.js +3 -0
  54. package/dist/dialects/bigquery.js.map +1 -0
  55. package/dist/dialects/clickhouse.cjs +2 -0
  56. package/dist/dialects/clickhouse.cjs.map +1 -0
  57. package/dist/dialects/clickhouse.d.cts +634 -0
  58. package/dist/dialects/clickhouse.d.ts +634 -0
  59. package/dist/dialects/clickhouse.js +2 -0
  60. package/dist/dialects/clickhouse.js.map +1 -0
  61. package/dist/dialects/databricks.cjs +2 -0
  62. package/dist/dialects/databricks.cjs.map +1 -0
  63. package/dist/dialects/databricks.d.cts +484 -0
  64. package/dist/dialects/databricks.d.ts +484 -0
  65. package/dist/dialects/databricks.js +2 -0
  66. package/dist/dialects/databricks.js.map +1 -0
  67. package/dist/dialects/doris.cjs +2 -0
  68. package/dist/dialects/doris.cjs.map +1 -0
  69. package/dist/dialects/doris.d.cts +484 -0
  70. package/dist/dialects/doris.d.ts +484 -0
  71. package/dist/dialects/doris.js +2 -0
  72. package/dist/dialects/doris.js.map +1 -0
  73. package/dist/dialects/dremio.cjs +2 -0
  74. package/dist/dialects/dremio.cjs.map +1 -0
  75. package/dist/dialects/dremio.d.cts +522 -0
  76. package/dist/dialects/dremio.d.ts +522 -0
  77. package/dist/dialects/dremio.js +2 -0
  78. package/dist/dialects/dremio.js.map +1 -0
  79. package/dist/dialects/drill.cjs +2 -0
  80. package/dist/dialects/drill.cjs.map +1 -0
  81. package/dist/dialects/drill.d.cts +512 -0
  82. package/dist/dialects/drill.d.ts +512 -0
  83. package/dist/dialects/drill.js +2 -0
  84. package/dist/dialects/drill.js.map +1 -0
  85. package/dist/dialects/druid.cjs +2 -0
  86. package/dist/dialects/druid.cjs.map +1 -0
  87. package/dist/dialects/druid.d.cts +17 -0
  88. package/dist/dialects/druid.d.ts +17 -0
  89. package/dist/dialects/druid.js +2 -0
  90. package/dist/dialects/druid.js.map +1 -0
  91. package/dist/dialects/duckdb.cjs +86 -0
  92. package/dist/dialects/duckdb.cjs.map +1 -0
  93. package/dist/dialects/duckdb.d.cts +756 -0
  94. package/dist/dialects/duckdb.d.ts +756 -0
  95. package/dist/dialects/duckdb.js +86 -0
  96. package/dist/dialects/duckdb.js.map +1 -0
  97. package/dist/dialects/dune.cjs +2 -0
  98. package/dist/dialects/dune.cjs.map +1 -0
  99. package/dist/dialects/dune.d.cts +21 -0
  100. package/dist/dialects/dune.d.ts +21 -0
  101. package/dist/dialects/dune.js +2 -0
  102. package/dist/dialects/dune.js.map +1 -0
  103. package/dist/dialects/exasol.cjs +2 -0
  104. package/dist/dialects/exasol.cjs.map +1 -0
  105. package/dist/dialects/exasol.d.cts +507 -0
  106. package/dist/dialects/exasol.d.ts +507 -0
  107. package/dist/dialects/exasol.js +2 -0
  108. package/dist/dialects/exasol.js.map +1 -0
  109. package/dist/dialects/fabric.cjs +2 -0
  110. package/dist/dialects/fabric.cjs.map +1 -0
  111. package/dist/dialects/fabric.d.cts +463 -0
  112. package/dist/dialects/fabric.d.ts +463 -0
  113. package/dist/dialects/fabric.js +2 -0
  114. package/dist/dialects/fabric.js.map +1 -0
  115. package/dist/dialects/hive.cjs +2 -0
  116. package/dist/dialects/hive.cjs.map +1 -0
  117. package/dist/dialects/hive.d.cts +585 -0
  118. package/dist/dialects/hive.d.ts +585 -0
  119. package/dist/dialects/hive.js +2 -0
  120. package/dist/dialects/hive.js.map +1 -0
  121. package/dist/dialects/materialize.cjs +2 -0
  122. package/dist/dialects/materialize.cjs.map +1 -0
  123. package/dist/dialects/materialize.d.cts +890 -0
  124. package/dist/dialects/materialize.d.ts +890 -0
  125. package/dist/dialects/materialize.js +2 -0
  126. package/dist/dialects/materialize.js.map +1 -0
  127. package/dist/dialects/mysql.cjs +2 -0
  128. package/dist/dialects/mysql.cjs.map +1 -0
  129. package/dist/dialects/mysql.d.cts +292 -0
  130. package/dist/dialects/mysql.d.ts +292 -0
  131. package/dist/dialects/mysql.js +2 -0
  132. package/dist/dialects/mysql.js.map +1 -0
  133. package/dist/dialects/oracle.cjs +2 -0
  134. package/dist/dialects/oracle.cjs.map +1 -0
  135. package/dist/dialects/oracle.d.cts +539 -0
  136. package/dist/dialects/oracle.d.ts +539 -0
  137. package/dist/dialects/oracle.js +2 -0
  138. package/dist/dialects/oracle.js.map +1 -0
  139. package/dist/dialects/postgres.cjs +2 -0
  140. package/dist/dialects/postgres.cjs.map +1 -0
  141. package/dist/dialects/postgres.d.cts +587 -0
  142. package/dist/dialects/postgres.d.ts +587 -0
  143. package/dist/dialects/postgres.js +2 -0
  144. package/dist/dialects/postgres.js.map +1 -0
  145. package/dist/dialects/presto.cjs +2 -0
  146. package/dist/dialects/presto.cjs.map +1 -0
  147. package/dist/dialects/presto.d.cts +173 -0
  148. package/dist/dialects/presto.d.ts +173 -0
  149. package/dist/dialects/presto.js +2 -0
  150. package/dist/dialects/presto.js.map +1 -0
  151. package/dist/dialects/prql.cjs +2 -0
  152. package/dist/dialects/prql.cjs.map +1 -0
  153. package/dist/dialects/prql.d.cts +496 -0
  154. package/dist/dialects/prql.d.ts +496 -0
  155. package/dist/dialects/prql.js +2 -0
  156. package/dist/dialects/prql.js.map +1 -0
  157. package/dist/dialects/redshift.cjs +2 -0
  158. package/dist/dialects/redshift.cjs.map +1 -0
  159. package/dist/dialects/redshift.d.cts +132 -0
  160. package/dist/dialects/redshift.d.ts +132 -0
  161. package/dist/dialects/redshift.js +2 -0
  162. package/dist/dialects/redshift.js.map +1 -0
  163. package/dist/dialects/risingwave.cjs +2 -0
  164. package/dist/dialects/risingwave.cjs.map +1 -0
  165. package/dist/dialects/risingwave.d.cts +478 -0
  166. package/dist/dialects/risingwave.d.ts +478 -0
  167. package/dist/dialects/risingwave.js +2 -0
  168. package/dist/dialects/risingwave.js.map +1 -0
  169. package/dist/dialects/singlestore.cjs +2 -0
  170. package/dist/dialects/singlestore.cjs.map +1 -0
  171. package/dist/dialects/singlestore.d.cts +73 -0
  172. package/dist/dialects/singlestore.d.ts +73 -0
  173. package/dist/dialects/singlestore.js +2 -0
  174. package/dist/dialects/singlestore.js.map +1 -0
  175. package/dist/dialects/snowflake.cjs +3 -0
  176. package/dist/dialects/snowflake.cjs.map +1 -0
  177. package/dist/dialects/snowflake.d.cts +320 -0
  178. package/dist/dialects/snowflake.d.ts +320 -0
  179. package/dist/dialects/snowflake.js +3 -0
  180. package/dist/dialects/snowflake.js.map +1 -0
  181. package/dist/dialects/solr.cjs +2 -0
  182. package/dist/dialects/solr.cjs.map +1 -0
  183. package/dist/dialects/solr.d.cts +458 -0
  184. package/dist/dialects/solr.d.ts +458 -0
  185. package/dist/dialects/solr.js +2 -0
  186. package/dist/dialects/solr.js.map +1 -0
  187. package/dist/dialects/spark.cjs +2 -0
  188. package/dist/dialects/spark.cjs.map +1 -0
  189. package/dist/dialects/spark.d.cts +484 -0
  190. package/dist/dialects/spark.d.ts +484 -0
  191. package/dist/dialects/spark.js +2 -0
  192. package/dist/dialects/spark.js.map +1 -0
  193. package/dist/dialects/spark2.cjs +2 -0
  194. package/dist/dialects/spark2.cjs.map +1 -0
  195. package/dist/dialects/spark2.d.cts +486 -0
  196. package/dist/dialects/spark2.d.ts +486 -0
  197. package/dist/dialects/spark2.js +2 -0
  198. package/dist/dialects/spark2.js.map +1 -0
  199. package/dist/dialects/sqlite.cjs +2 -0
  200. package/dist/dialects/sqlite.cjs.map +1 -0
  201. package/dist/dialects/sqlite.d.cts +510 -0
  202. package/dist/dialects/sqlite.d.ts +510 -0
  203. package/dist/dialects/sqlite.js +2 -0
  204. package/dist/dialects/sqlite.js.map +1 -0
  205. package/dist/dialects/starrocks.cjs +2 -0
  206. package/dist/dialects/starrocks.cjs.map +1 -0
  207. package/dist/dialects/starrocks.d.cts +518 -0
  208. package/dist/dialects/starrocks.d.ts +518 -0
  209. package/dist/dialects/starrocks.js +2 -0
  210. package/dist/dialects/starrocks.js.map +1 -0
  211. package/dist/dialects/tableau.cjs +2 -0
  212. package/dist/dialects/tableau.cjs.map +1 -0
  213. package/dist/dialects/tableau.d.cts +466 -0
  214. package/dist/dialects/tableau.d.ts +466 -0
  215. package/dist/dialects/tableau.js +2 -0
  216. package/dist/dialects/tableau.js.map +1 -0
  217. package/dist/dialects/teradata.cjs +2 -0
  218. package/dist/dialects/teradata.cjs.map +1 -0
  219. package/dist/dialects/teradata.d.cts +539 -0
  220. package/dist/dialects/teradata.d.ts +539 -0
  221. package/dist/dialects/teradata.js +2 -0
  222. package/dist/dialects/teradata.js.map +1 -0
  223. package/dist/dialects/trino.cjs +2 -0
  224. package/dist/dialects/trino.cjs.map +1 -0
  225. package/dist/dialects/trino.d.cts +465 -0
  226. package/dist/dialects/trino.d.ts +465 -0
  227. package/dist/dialects/trino.js +2 -0
  228. package/dist/dialects/trino.js.map +1 -0
  229. package/dist/dialects/tsql.cjs +2 -0
  230. package/dist/dialects/tsql.cjs.map +1 -0
  231. package/dist/dialects/tsql.d.cts +703 -0
  232. package/dist/dialects/tsql.d.ts +703 -0
  233. package/dist/dialects/tsql.js +2 -0
  234. package/dist/dialects/tsql.js.map +1 -0
  235. package/dist/index.cjs +5 -25
  236. package/dist/index.cjs.map +1 -1
  237. package/dist/index.d.cts +3 -14178
  238. package/dist/index.d.ts +3 -14178
  239. package/dist/index.js +5 -25
  240. package/dist/index.js.map +1 -1
  241. package/dist/tokens-VcMD09XM.d.cts +15805 -0
  242. package/dist/tokens-VcMD09XM.d.ts +15805 -0
  243. package/package.json +171 -5
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/dialects/snowflake.cjs","../../src/typing/snowflake.ts","../../src/dialects/snowflake.ts"],"names":["DATE_PARTS","MAX_PRECISION","MAX_SCALE","annotateReverse","expression","annotateTimestampFromParts","annotateDateOrTimeAdd","thisArg","isInstanceOf","Expression","annotateDecodeCase","expressions","returnTypes","i","lastType","retType","narrowedRetType","DataTypeExpr","annotateArgMaxMin","thisType","annotateWithinGroup","inner","orderExpr","orderExprs","OrderExpr","PercentileDiscExpr","PercentileContExpr","OrderedExpr","firstThis","firstType","annotateMedian","inputType","exprs","filterInstanceOf","precision","scale","newPrecision","newScale","newType","annotateVariance","annotateKurtosis","annotateMathWithFloatDecfloat","annotateStrToTime","targetTypeArg","targetType","_EXPRESSION_METADATA_dec","_init","cache","SnowflakeTyping","map","DialectTyping","extend","types","data","type","AddMonthsExpr","CeilExpr","DateTruncExpr","FloorExpr","LeftExpr","ModeExpr","PadExpr","RightExpr","RoundExpr","StuffExpr","SubstringExpr","TimeSliceExpr","TimestampTruncExpr","s","e","ApproxTopKExpr","ApproxTopKEstimateExpr","ArrayExpr","ArrayAggExpr","ArrayAppendExpr","ArrayCompactExpr","ArrayConcatExpr","ArrayConstructCompactExpr","ArrayPrependExpr","ArrayRemoveExpr","ArraysZipExpr","ArrayUniqueAggExpr","ArrayUnionAggExpr","MapKeysExpr","RegexpExtractAllExpr","SplitExpr","StringToArrayExpr","BitmapBitPositionExpr","BitmapBucketNumberExpr","BitmapCountExpr","FactorialExpr","GroupingIdExpr","Md5NumberLower64Expr","Md5NumberUpper64Expr","RandExpr","Seq8Expr","ZipfExpr","Base64DecodeBinaryExpr","BitmapConstructAggExpr","BitmapOrAggExpr","CompressExpr","DecompressBinaryExpr","DecryptExpr","DecryptRawExpr","EncryptExpr","EncryptRawExpr","HexStringExpr","Md5DigestExpr","Sha1DigestExpr","Sha2DigestExpr","ToBinaryExpr","TryBase64DecodeBinaryExpr","TryHexDecodeBinaryExpr","UnhexExpr","BoolandExpr","BoolnotExpr","BoolorExpr","BoolxorAggExpr","EqualNullExpr","IsNullValueExpr","MapContainsKeyExpr","SearchExpr","SearchIpExpr","ToBooleanExpr","NextDayExpr","PreviousDayExpr","BitwiseAndAggExpr","BitwiseOrAggExpr","BitwiseXorAggExpr","RegexpCountExpr","RegexpInstrExpr","ToNumberExpr","ApproxPercentileEstimateExpr","ApproximateSimilarityExpr","CosineDistanceExpr","CovarPopExpr","CovarSampExpr","DotProductExpr","EuclideanDistanceExpr","ManhattanDistanceExpr","MonthsBetweenExpr","NormalExpr","ToDecfloatExpr","TryToDecfloatExpr","AcosExpr","AsinExpr","AtanExpr","Atan2Expr","CbrtExpr","CosExpr","CotExpr","DegreesExpr","ExpExpr","LnExpr","LogExpr","PowExpr","RadiansExpr","RegrAvgxExpr","RegrAvgyExpr","RegrCountExpr","RegrInterceptExpr","RegrR2Expr","RegrSlopeExpr","RegrSxxExpr","RegrSxyExpr","RegrSyyExpr","RegrValxExpr","RegrValyExpr","SinExpr","SqrtExpr","TanExpr","TanhExpr","ByteLengthExpr","GroupingExpr","JarowinklerSimilarityExpr","MapSizeExpr","MinuteExpr","RtrimmedLengthExpr","SecondExpr","Seq1Expr","Seq2Expr","Seq4Expr","WidthBucketExpr","ApproxPercentileAccumulateExpr","ApproxPercentileCombineExpr","ApproxTopKAccumulateExpr","ApproxTopKCombineExpr","ObjectAggExpr","ParseIpExpr","ParseUrlExpr","XmlGetExpr","MapCatExpr","MapDeleteExpr","MapInsertExpr","MapPickExpr","ToFileExpr","TimeFromPartsExpr","TsOrDsToTimeExpr","CurrentTimestampExpr","LocaltimestampExpr","QuarterExpr","AiAggExpr","AiClassifyExpr","AiSummarizeAggExpr","Base64DecodeStringExpr","Base64EncodeExpr","CheckJsonExpr","CheckXmlExpr","CollateExpr","CollationExpr","CurrentAccountExpr","CurrentAccountNameExpr","CurrentAvailableRolesExpr","CurrentClientExpr","CurrentDatabaseExpr","CurrentIpAddressExpr","CurrentSchemasExpr","CurrentSecondaryRolesExpr","CurrentSessionExpr","CurrentStatementExpr","CurrentVersionExpr","CurrentTransactionExpr","CurrentWarehouseExpr","CurrentOrganizationUserExpr","CurrentRegionExpr","CurrentRoleExpr","CurrentRoleTypeExpr","CurrentOrganizationNameExpr","DecompressStringExpr","HexDecodeStringExpr","HexEncodeExpr","MonthnameExpr","RandstrExpr","RegexpExtractExpr","RegexpReplaceExpr","RepeatExpr","ReplaceExpr","SoundexExpr","SoundexP123Expr","SplitPartExpr","TryBase64DecodeStringExpr","TryHexDecodeStringExpr","UuidExpr","MinhashExpr","MinhashCombineExpr","VarianceExpr","VariancePopExpr","ArgMaxExpr","ArgMinExpr","ConcatWsExpr","ConvertTimezoneExpr","DateAddExpr","DecodeCaseExpr","HashAggExpr","KurtosisExpr","MedianExpr","ReverseExpr","StrToTimeExpr","TimeAddExpr","TimestampFromPartsExpr","WithinGroupExpr","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","TIMESTAMP_TYPES","buildStrtok","args","LiteralExpr","buildApproxTopK","buildDateFromParts","DateFromPartsExpr","seqGet","buildDatetime","name","kind","options","safe","value","scaleOrFmt","intValue","IdentifierExpr","isInt","intScaleOrFmt","NegExpr","TryCastExpr","CastExpr","unixExpr","UnixToTimeExpr","strtotimeExpr","buildFormattedTime","hasFormatString","Klass","TsOrDsToDateExpr","formattedExp","AnonymousExpr","buildObjectConstruct","buildVarMap","StarMapExpr","StructExpr","k","PropertyEqExpr","buildDatediff","DateDiffExpr","mapDatePart","buildDateTimeAdd","ExprClass","buildBitwise","BitwiseAndExpr","BitwiseOrExpr","BitwiseXorExpr","result","binaryFromFunction","BitwiseLeftShiftExpr","BitwiseRightShiftExpr","buildIfFromDiv0","lhs","wrap","BinaryExpr","rhs","cond","EqExpr","IsExpr","null_","trueNode","falseNode","DivExpr","IfExpr","buildIfFromDiv0null","buildIfFromZeroifnull","buildSearch","kwargs","arg","KwargExpr","buildIfFromNullifzero","regexpILikeSql","flag","buildRegexpReplace","regexpReplace","showParser","str","dateTruncToTimeWrapper","trunc","dateTruncToTime","unit","isTimeInput","isDateUnit","unqualifyPivotColumns","PivotExpr","unqualifyColumns","field","fieldExpr","PivotAnyExpr","unqualifiedFieldExpr","flattenStructuredTypesUnlessIceberg","CreateExpr","flattenStructuredType","node","isIceberg","IcebergPropertyExpr","SchemaExpr","schemaExpression","ColumnDefExpr","unnestGenerateDateArray","unnest","generateDateArray","start","end","step","IntervalExpr","unnestAlias","sequenceValueName","narrowInstanceOf","TableAliasExpr","dateAdd","numberSequence","SnowflakeParser","unnestParent","JoinExpr","select","SelectExpr","replaceColumnName","scope","buildScope","column","lateral","LateralExpr","transformGenerateDateArray","GenerateDateArrayExpr","parent","UnnestExpr","StarExpr","FromExpr","buildRegexpExtract","dialect","regexpExtractSql","group","parameters","occurrence","position","jsonExtractValueArraySql","jsonExtract","JsonExtractExpr","ident","toIdentifier","thisNode","JsonValueArrayExpr","ParseJsonExpr","transformLambda","LambdaExpr","qualifyUnnestedColumns","unnests","takenSourceNames","columnSource","unnestToIdentifier","unnestIdentifier","origExpression","unnestColumns","unnestExpr","arrayExpr","structExpr","narrowedUnnestAlias","aliasColumns","aliasName","findNewName","aliasedUnnest","alias","c","unnestIdentifierName","table","unnestAncestor","ancestorIdentifier","eliminateDotVariantLookup","unnestAliases","findAllInScope","ColumnExpr","bracketLhs","bracketRhs","bracket","BracketExpr","buildTimestampFromParts","buildRound","kwargMap","roundArgs","positionalKeys","positionalIdx","key","roundKey","buildGenerator","genArgs","genKey","GeneratorExpr","buildTryToNumber","_SINGLE_TOKENS_dec","_a","SnowflakeJsonPathTokenizer","JsonPathTokenizer","tokens","_COMMANDS_dec","_VAR_SINGLE_TOKENS_dec","_ORIGINAL_KEYWORDS_dec","_COMMENTS_dec","_RAW_STRINGS_dec","_HEX_STRINGS_dec","_STRING_ESCAPES_dec","SnowflakeTokenizer","Tokenizer","keywords","t","_COLUMN_OPERATORS_dec","_LAMBDAS_dec","_NON_TABLE_CREATABLES_dec","_SCHEMA_KINDS_dec","_FLATTEN_COLUMNS_dec","_STAGED_FILE_SINGLE_TOKENS_dec","_CONSTRAINT_PARSERS_dec","_SHOW_PARSERS_dec","_TYPE_CONVERTERS_dec","_PROPERTY_PARSERS_dec","_STATEMENT_PARSERS_dec","_ALTER_PARSERS_dec","_TIMESTAMPS_dec","_FUNCTION_PARSERS_dec","_FUNCTIONS_dec","_NO_PAREN_FUNCTIONS_dec","_COLON_PLACEHOLDER_TOKENS_dec","_TABLE_ALIAS_TOKENS_dec","_ID_VAR_TOKENS_dec","_SnowflakeParser","Parser","LocaltimeExpr","functions","ApproxQuantileExpr","ArrayContainsExpr","GenerateSeriesExpr","SubExpr","SortArrayExpr","FlattenExpr","BitwiseNotExpr","XorExpr","CorrExpr","DaynameExpr","DayOfWeekIsoExpr","LevenshteinExpr","ExplodeExpr","GetExtractExpr","GreatestExpr","LeastExpr","Md5Expr","LastDayExpr","LengthExpr","JsonKeysExpr","buildReplaceWithOptionalReplacement","RegexpLikeExpr","ShaExpr","Sha2Expr","StddevExpr","TableFromRowsExpr","buildTrunc","ToDoubleExpr","buildTimeToStrOrToChar","JsonFormatExpr","buildLike","SkewnessExpr","WeekOfYearExpr","WeekExpr","parsers","SetExpr","UsingTemplatePropertyExpr","buildDefaultDecimalType","attr","ModelAttributeExpr","TableExpr","DirectoryStageExpr","VarExpr","roles","UseExpr","query","InExpr","QueryExpr","NeqExpr","AllExpr","NotExpr","TagsExpr","policy","MaskingPolicyColumnConstraintExpr","ProjectionPolicyColumnConstraintExpr","tableNode","ExtractExpr","isMap","tableAlias","columns","col","schema","isDbReference","fileFormat","pattern","wrapped","tableFromRows","anyToken","identifier","scopeKind","terse","history","like","ShowExpr","PutExpr","target","GetExpr","LocationPropertyExpr","typ","ForeignKeyExpr","FileFormatPropertyExpr","CredentialsPropertyExpr","keyword","SemanticViewExpr","unset","tag","setNode","expr","SetItemExpr","NthValueExpr","fromFirst","_RESPECT_IGNORE_NULLS_UNSUPPORTED_EXPRESSIONS_dec","_UNSUPPORTED_VALUES_EXPRESSIONS_dec","_PROPERTIES_LOCATION_dec","_TOKEN_MAPPING_dec","_TYPE_MAPPING_dec","_SUPPORTED_JSON_PATH_PARTS_dec","_ORIGINAL_TRANSFORMS_dec","_STRUCT_DELIMITER_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","SnowflakeGenerator","Generator","modifiers","m","ApproxDistinctExpr","renameFunc","preprocess","inheritStructFieldNames","arrayConcatSql","arrayAppendSql","ArrayIntersectExpr","AtTimeZoneExpr","dateDeltaSql","DatetimeAddExpr","DatetimeDiffExpr","timestampDiffSql","DateStrToDateExpr","dateStrToDateSql"],"mappings":"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","file":"/home/huydna/projects/sqlingo.js/dist/dialects/snowflake.cjs","sourcesContent":[null,"import type {\n ExpressionOrString,\n} from '../expressions/expressions';\nimport {\n cache,\n isInstanceOf, filterInstanceOf,\n} from '../port_internals';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n Expression,\n DataTypeExpr, ReverseExpr, TimestampFromPartsExpr, DecodeCaseExpr,\n ArgMaxExpr, ArgMinExpr, WithinGroupExpr, PercentileDiscExpr, PercentileContExpr,\n OrderExpr, OrderedExpr, MedianExpr, KurtosisExpr, StrToTimeExpr,\n AddMonthsExpr, CeilExpr, DateTruncExpr, FloorExpr, LeftExpr, ModeExpr, PadExpr,\n RightExpr, RoundExpr, StuffExpr, SubstringExpr, TimeSliceExpr, TimestampTruncExpr,\n ApproxTopKExpr, ApproxTopKEstimateExpr, ArrayExpr, ArrayAggExpr, ArrayAppendExpr,\n ArrayCompactExpr, ArrayConcatExpr, ArrayConstructCompactExpr, ArrayPrependExpr,\n ArrayRemoveExpr, ArraysZipExpr, ArrayUniqueAggExpr, ArrayUnionAggExpr, MapKeysExpr,\n RegexpExtractAllExpr, SplitExpr, StringToArrayExpr, BitmapBitPositionExpr,\n BitmapBucketNumberExpr, BitmapCountExpr, FactorialExpr, GroupingIdExpr,\n Md5NumberLower64Expr, Md5NumberUpper64Expr, RandExpr, Seq8Expr, ZipfExpr,\n Base64DecodeBinaryExpr, BitmapConstructAggExpr, BitmapOrAggExpr, CompressExpr,\n DecompressBinaryExpr, DecryptExpr, DecryptRawExpr, EncryptExpr, EncryptRawExpr,\n HexStringExpr, Md5DigestExpr, Sha1DigestExpr, Sha2DigestExpr, ToBinaryExpr,\n TryBase64DecodeBinaryExpr, TryHexDecodeBinaryExpr, UnhexExpr, BoolandExpr,\n BoolnotExpr, BoolorExpr, BoolxorAggExpr, EqualNullExpr, IsNullValueExpr,\n MapContainsKeyExpr, SearchExpr, SearchIpExpr, ToBooleanExpr, NextDayExpr,\n PreviousDayExpr, BitwiseAndAggExpr, BitwiseOrAggExpr, BitwiseXorAggExpr,\n RegexpCountExpr, RegexpInstrExpr, ToNumberExpr, ApproxPercentileEstimateExpr,\n ApproximateSimilarityExpr, CosineDistanceExpr, CovarPopExpr, CovarSampExpr,\n DotProductExpr, EuclideanDistanceExpr, ManhattanDistanceExpr, MonthsBetweenExpr,\n NormalExpr, ToDecfloatExpr, TryToDecfloatExpr, AcosExpr, AsinExpr, AtanExpr,\n Atan2Expr, CbrtExpr, CosExpr, CotExpr, DegreesExpr, ExpExpr, LnExpr, LogExpr,\n PowExpr, RadiansExpr, RegrAvgxExpr, RegrAvgyExpr, RegrCountExpr, RegrInterceptExpr,\n RegrR2Expr, RegrSlopeExpr, RegrSxxExpr, RegrSxyExpr, RegrSyyExpr, RegrValxExpr,\n RegrValyExpr, SinExpr, SqrtExpr, TanExpr, TanhExpr, ByteLengthExpr, GroupingExpr,\n JarowinklerSimilarityExpr, MapSizeExpr, MinuteExpr, RtrimmedLengthExpr,\n SecondExpr, Seq1Expr, Seq2Expr, Seq4Expr, WidthBucketExpr, ApproxPercentileAccumulateExpr,\n ApproxPercentileCombineExpr, ApproxTopKAccumulateExpr, ApproxTopKCombineExpr,\n ObjectAggExpr, ParseIpExpr, ParseUrlExpr, XmlGetExpr, MapCatExpr, MapDeleteExpr,\n MapInsertExpr, MapPickExpr, ToFileExpr, TimeFromPartsExpr, TsOrDsToTimeExpr,\n CurrentTimestampExpr, LocaltimestampExpr, QuarterExpr, AiAggExpr, AiClassifyExpr,\n AiSummarizeAggExpr, Base64DecodeStringExpr, Base64EncodeExpr, CheckJsonExpr,\n CheckXmlExpr, CollateExpr, CollationExpr, CurrentAccountExpr, CurrentAccountNameExpr,\n CurrentAvailableRolesExpr, CurrentClientExpr, CurrentDatabaseExpr, CurrentIpAddressExpr,\n CurrentSchemasExpr, CurrentSecondaryRolesExpr, CurrentSessionExpr, CurrentStatementExpr,\n CurrentVersionExpr, CurrentTransactionExpr, CurrentWarehouseExpr,\n CurrentOrganizationUserExpr, CurrentRegionExpr, CurrentRoleExpr, CurrentRoleTypeExpr,\n CurrentOrganizationNameExpr, DecompressStringExpr, HexDecodeStringExpr, HexEncodeExpr,\n MonthnameExpr, RandstrExpr, RegexpExtractExpr, RegexpReplaceExpr, RepeatExpr,\n ReplaceExpr, SoundexExpr, SoundexP123Expr, SplitPartExpr, TryBase64DecodeStringExpr,\n TryHexDecodeStringExpr, UuidExpr, MinhashExpr, MinhashCombineExpr, VarianceExpr,\n VariancePopExpr, ConcatWsExpr, ConvertTimezoneExpr, DateAddExpr, HashAggExpr, TimeAddExpr,\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\nconst DATE_PARTS = new Set([\n 'DAY',\n 'WEEK',\n 'MONTH',\n 'QUARTER',\n 'YEAR',\n]);\nconst MAX_PRECISION = 38;\nconst MAX_SCALE = 37;\n\nfunction annotateReverse (this: TypeAnnotator, expression: ReverseExpr): ReverseExpr {\n this.annotateByArgs(expression, [\n 'this',\n ]);\n if (expression.isType(DataTypeExprKind.NULL)) {\n // Snowflake treats REVERSE(NULL) as a VARCHAR\n this.setType(expression, DataTypeExprKind.VARCHAR);\n }\n return expression;\n}\n\nfunction annotateTimestampFromParts (this: TypeAnnotator, expression: TimestampFromPartsExpr): TimestampFromPartsExpr {\n if (expression.args.zone) {\n this.setType(expression, DataTypeExprKind.TIMESTAMPTZ);\n } else {\n this.setType(expression, DataTypeExprKind.TIMESTAMP);\n }\n return expression;\n}\n\nfunction annotateDateOrTimeAdd (this: TypeAnnotator, expression: Expression): Expression {\n const thisArg = expression.args.this;\n if (isInstanceOf(thisArg, Expression) && thisArg.isType(DataTypeExprKind.DATE) && !DATE_PARTS.has(expression.text('unit').toUpperCase())) {\n this.setType(expression, DataTypeExprKind.TIMESTAMPNTZ);\n } else {\n this.annotateByArgs(expression, [\n 'this',\n ]);\n }\n return expression;\n}\n\nfunction annotateDecodeCase (this: TypeAnnotator, expression: DecodeCaseExpr): DecodeCaseExpr {\n const expressions = expression.args.expressions ?? [\n ];\n const returnTypes: (ExpressionOrString | undefined)[] = [\n ];\n\n for (let i = 2; i < expressions.length; i += 2) {\n returnTypes.push(expressions[i].type);\n }\n\n if (expressions.length % 2 === 0) {\n returnTypes.push(expressions[expressions.length - 1].type);\n }\n\n let lastType: DataTypeExpr | DataTypeExprKind | undefined;\n for (const retType of returnTypes) {\n const narrowedRetType = isInstanceOf(retType, DataTypeExpr) ? retType : undefined;\n lastType = this.maybeCoerce(lastType || narrowedRetType, narrowedRetType);\n }\n\n this.setType(expression, lastType);\n return expression;\n}\n\nfunction annotateArgMaxMin (this: TypeAnnotator, expression: ArgMaxExpr | ArgMinExpr): Expression {\n const thisArg = expression.args.this;\n const thisType = isInstanceOf(thisArg, Expression) ? thisArg.type : undefined;\n this.setType(\n expression,\n expression.args.count ? DataTypeExprKind.ARRAY : (isInstanceOf(thisType, DataTypeExpr) ? thisType : undefined),\n );\n return expression;\n}\n\nfunction annotateWithinGroup (this: TypeAnnotator, expression: WithinGroupExpr): WithinGroupExpr {\n const inner = expression.args.this;\n const orderExpr = expression.args.expression;\n const orderExprs = isInstanceOf(orderExpr, OrderExpr)\n ? (orderExpr.args.expressions ?? [\n ])\n : [\n ];\n\n if (\n (isInstanceOf(inner, PercentileDiscExpr) || isInstanceOf(inner, PercentileContExpr))\n && isInstanceOf(orderExpr, OrderExpr)\n && orderExprs.length === 1\n && isInstanceOf(orderExprs[0], OrderedExpr)\n ) {\n const firstThis = orderExprs[0].args.this;\n const firstType = isInstanceOf(firstThis, Expression) ? firstThis.type : undefined;\n this.setType(expression, isInstanceOf(firstType, DataTypeExpr) ? firstType : undefined);\n }\n\n return expression;\n}\n\nfunction annotateMedian (this: TypeAnnotator, expression: MedianExpr): MedianExpr {\n this.annotateByArgs(expression, [\n 'this',\n ]);\n const thisArg = expression.args.this;\n const inputType = isInstanceOf(thisArg, Expression) ? thisArg.type : undefined;\n if (!isInstanceOf(inputType, DataTypeExpr)) return expression;\n\n if (inputType.isType(DataTypeExprKind.DOUBLE)) {\n this.setType(expression, DataTypeExprKind.DOUBLE);\n } else {\n const exprs = filterInstanceOf(inputType.args.expressions ?? [\n ], Expression);\n // Assuming text('this') retrieves the numeric value of the AST literal node\n const precision = exprs[0] ? Number(exprs[0].text('this')) : MAX_PRECISION;\n const scale = exprs[1] ? Number(exprs[1].text('this')) : 0;\n\n const newPrecision = Math.min(precision + 3, MAX_PRECISION);\n const newScale = Math.min(scale + 3, MAX_SCALE);\n\n const newType = DataTypeExpr.build(`NUMBER(${newPrecision}, ${newScale})`, {\n dialect: 'snowflake',\n });\n this.setType(expression, newType);\n }\n\n return expression;\n}\n\nfunction annotateVariance (this: TypeAnnotator, expression: Expression): Expression {\n this.annotateByArgs(expression, [\n 'this',\n ]);\n const thisArg = expression.args.this;\n const inputType = isInstanceOf(thisArg, Expression) ? thisArg.type : undefined;\n if (!isInstanceOf(inputType, DataTypeExpr)) return expression;\n\n if (inputType.isType(DataTypeExprKind.DECFLOAT)) {\n this.setType(expression, DataTypeExpr.build('DECFLOAT', {\n dialect: 'snowflake',\n }));\n } else if (inputType.isType([\n DataTypeExprKind.FLOAT,\n DataTypeExprKind.DOUBLE,\n ])) {\n this.setType(expression, DataTypeExprKind.DOUBLE);\n } else {\n const exprs = filterInstanceOf(inputType.args.expressions ?? [\n ], Expression);\n const scale = exprs[1] ? Number(exprs[1].text('this')) : 0;\n const newScale = scale === 0 ? 6 : Math.max(12, scale);\n\n const newType = DataTypeExpr.build(`NUMBER(${MAX_PRECISION}, ${newScale})`, {\n dialect: 'snowflake',\n });\n this.setType(expression, newType);\n }\n\n return expression;\n}\n\nfunction annotateKurtosis (this: TypeAnnotator, expression: KurtosisExpr): KurtosisExpr {\n this.annotateByArgs(expression, [\n 'this',\n ]);\n const thisArg = expression.args.this;\n const inputType = isInstanceOf(thisArg, Expression) ? thisArg.type : undefined;\n if (!isInstanceOf(inputType, DataTypeExpr)) {\n this.setType(expression, DataTypeExpr.build(`NUMBER(${MAX_PRECISION}, 12)`, {\n dialect: 'snowflake',\n }));\n return expression;\n }\n\n if (inputType.isType(DataTypeExprKind.DECFLOAT)) {\n this.setType(expression, DataTypeExpr.build('DECFLOAT', {\n dialect: 'snowflake',\n }));\n } else if (inputType.isType([\n DataTypeExprKind.FLOAT,\n DataTypeExprKind.DOUBLE,\n ])) {\n this.setType(expression, DataTypeExprKind.DOUBLE);\n } else {\n this.setType(expression, DataTypeExpr.build(`NUMBER(${MAX_PRECISION}, 12)`, {\n dialect: 'snowflake',\n }));\n }\n\n return expression;\n}\n\nfunction annotateMathWithFloatDecfloat (this: TypeAnnotator, expression: Expression): Expression {\n this.annotateByArgs(expression, [\n 'this',\n ]);\n\n const thisArg = expression.args.this;\n if (isInstanceOf(thisArg, Expression) && thisArg.isType(DataTypeExprKind.DECFLOAT)) {\n const thisType = thisArg.type;\n this.setType(expression, isInstanceOf(thisType, DataTypeExpr) ? thisType : undefined);\n } else {\n this.setType(expression, DataTypeExprKind.DOUBLE);\n }\n\n return expression;\n}\n\nfunction annotateStrToTime (this: TypeAnnotator, expression: StrToTimeExpr): StrToTimeExpr {\n const targetTypeArg = expression.args.targetType;\n const targetType = isInstanceOf(targetTypeArg, DataTypeExpr) ? targetTypeArg : DataTypeExprKind.TIMESTAMP;\n\n this.setType(expression, targetType);\n return expression;\n}\n\nexport class SnowflakeTyping {\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\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 AddMonthsExpr,\n CeilExpr,\n DateTruncExpr,\n FloorExpr,\n LeftExpr,\n ModeExpr,\n PadExpr,\n RightExpr,\n RoundExpr,\n StuffExpr,\n SubstringExpr,\n TimeSliceExpr,\n TimestampTruncExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => s.annotateByArgs(e, [\n 'this',\n ]),\n });\n\n extend([\n ApproxTopKExpr,\n ApproxTopKEstimateExpr,\n ArrayExpr,\n ArrayAggExpr,\n ArrayAppendExpr,\n ArrayCompactExpr,\n ArrayConcatExpr,\n ArrayConstructCompactExpr,\n ArrayPrependExpr,\n ArrayRemoveExpr,\n ArraysZipExpr,\n ArrayUniqueAggExpr,\n ArrayUnionAggExpr,\n MapKeysExpr,\n RegexpExtractAllExpr,\n SplitExpr,\n StringToArrayExpr,\n ], {\n returns: DataTypeExprKind.ARRAY,\n });\n\n extend([\n BitmapBitPositionExpr,\n BitmapBucketNumberExpr,\n BitmapCountExpr,\n FactorialExpr,\n GroupingIdExpr,\n Md5NumberLower64Expr,\n Md5NumberUpper64Expr,\n RandExpr,\n Seq8Expr,\n ZipfExpr,\n ], {\n returns: DataTypeExprKind.BIGINT,\n });\n\n extend([\n Base64DecodeBinaryExpr,\n BitmapConstructAggExpr,\n BitmapOrAggExpr,\n CompressExpr,\n DecompressBinaryExpr,\n DecryptExpr,\n DecryptRawExpr,\n EncryptExpr,\n EncryptRawExpr,\n HexStringExpr,\n Md5DigestExpr,\n Sha1DigestExpr,\n Sha2DigestExpr,\n ToBinaryExpr,\n TryBase64DecodeBinaryExpr,\n TryHexDecodeBinaryExpr,\n UnhexExpr,\n ], {\n returns: DataTypeExprKind.BINARY,\n });\n\n extend([\n BoolandExpr,\n BoolnotExpr,\n BoolorExpr,\n BoolxorAggExpr,\n EqualNullExpr,\n IsNullValueExpr,\n MapContainsKeyExpr,\n SearchExpr,\n SearchIpExpr,\n ToBooleanExpr,\n ], {\n returns: DataTypeExprKind.BOOLEAN,\n });\n\n extend([\n NextDayExpr,\n PreviousDayExpr,\n ], {\n returns: DataTypeExprKind.DATE,\n });\n\n extend([\n BitwiseAndAggExpr,\n BitwiseOrAggExpr,\n BitwiseXorAggExpr,\n RegexpCountExpr,\n RegexpInstrExpr,\n ToNumberExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => s.setType(e, DataTypeExpr.build('NUMBER', {\n dialect: 'snowflake',\n })),\n });\n\n extend([\n ApproxPercentileEstimateExpr,\n ApproximateSimilarityExpr,\n CosineDistanceExpr,\n CovarPopExpr,\n CovarSampExpr,\n DotProductExpr,\n EuclideanDistanceExpr,\n ManhattanDistanceExpr,\n MonthsBetweenExpr,\n NormalExpr,\n ], {\n returns: DataTypeExprKind.DOUBLE,\n });\n\n extend([\n ToDecfloatExpr,\n TryToDecfloatExpr,\n ], {\n returns: DataTypeExprKind.DECFLOAT,\n });\n\n extend([\n AcosExpr,\n AsinExpr,\n AtanExpr,\n Atan2Expr,\n CbrtExpr,\n CosExpr,\n CotExpr,\n DegreesExpr,\n ExpExpr,\n LnExpr,\n LogExpr,\n PowExpr,\n RadiansExpr,\n RegrAvgxExpr,\n RegrAvgyExpr,\n RegrCountExpr,\n RegrInterceptExpr,\n RegrR2Expr,\n RegrSlopeExpr,\n RegrSxxExpr,\n RegrSxyExpr,\n RegrSyyExpr,\n RegrValxExpr,\n RegrValyExpr,\n SinExpr,\n SqrtExpr,\n TanExpr,\n TanhExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => annotateMathWithFloatDecfloat.call(s, e),\n });\n\n extend([\n ByteLengthExpr,\n GroupingExpr,\n JarowinklerSimilarityExpr,\n MapSizeExpr,\n MinuteExpr,\n RtrimmedLengthExpr,\n SecondExpr,\n Seq1Expr,\n Seq2Expr,\n Seq4Expr,\n WidthBucketExpr,\n ], {\n returns: DataTypeExprKind.INT,\n });\n\n extend([\n ApproxPercentileAccumulateExpr,\n ApproxPercentileCombineExpr,\n ApproxTopKAccumulateExpr,\n ApproxTopKCombineExpr,\n ObjectAggExpr,\n ParseIpExpr,\n ParseUrlExpr,\n XmlGetExpr,\n ], {\n returns: DataTypeExprKind.OBJECT,\n });\n\n extend([\n MapCatExpr,\n MapDeleteExpr,\n MapInsertExpr,\n MapPickExpr,\n ], {\n returns: DataTypeExprKind.MAP,\n });\n\n map.set(ToFileExpr, {\n returns: DataTypeExprKind.FILE,\n });\n\n extend([\n TimeFromPartsExpr,\n TsOrDsToTimeExpr,\n ], {\n returns: DataTypeExprKind.TIME,\n });\n\n extend([\n CurrentTimestampExpr,\n LocaltimestampExpr,\n ], {\n returns: DataTypeExprKind.TIMESTAMPLTZ,\n });\n\n map.set(QuarterExpr, {\n returns: DataTypeExprKind.TINYINT,\n });\n\n extend([\n AiAggExpr,\n AiClassifyExpr,\n AiSummarizeAggExpr,\n Base64DecodeStringExpr,\n Base64EncodeExpr,\n CheckJsonExpr,\n CheckXmlExpr,\n CollateExpr,\n CollationExpr,\n CurrentAccountExpr,\n CurrentAccountNameExpr,\n CurrentAvailableRolesExpr,\n CurrentClientExpr,\n CurrentDatabaseExpr,\n CurrentIpAddressExpr,\n CurrentSchemasExpr,\n CurrentSecondaryRolesExpr,\n CurrentSessionExpr,\n CurrentStatementExpr,\n CurrentVersionExpr,\n CurrentTransactionExpr,\n CurrentWarehouseExpr,\n CurrentOrganizationUserExpr,\n CurrentRegionExpr,\n CurrentRoleExpr,\n CurrentRoleTypeExpr,\n CurrentOrganizationNameExpr,\n DecompressStringExpr,\n HexDecodeStringExpr,\n HexEncodeExpr,\n MonthnameExpr,\n RandstrExpr,\n RegexpExtractExpr,\n RegexpReplaceExpr,\n RepeatExpr,\n ReplaceExpr,\n SoundexExpr,\n SoundexP123Expr,\n SplitPartExpr,\n TryBase64DecodeStringExpr,\n TryHexDecodeStringExpr,\n UuidExpr,\n ], {\n returns: DataTypeExprKind.VARCHAR,\n });\n\n extend([\n MinhashExpr,\n MinhashCombineExpr,\n ], {\n returns: DataTypeExprKind.VARIANT,\n });\n\n extend([\n VarianceExpr,\n VariancePopExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => annotateVariance.call(s, e),\n });\n\n map.set(ArgMaxExpr, {\n annotator: (s: TypeAnnotator, e: ArgMaxExpr) => annotateArgMaxMin.call(s, e),\n });\n map.set(ArgMinExpr, {\n annotator: (s: TypeAnnotator, e: ArgMinExpr) => annotateArgMaxMin.call(s, e),\n });\n map.set(ConcatWsExpr, {\n annotator: (s: TypeAnnotator, e: Expression) => s.annotateByArgs(e, [\n 'expressions',\n ]),\n });\n\n map.set(ConvertTimezoneExpr, {\n annotator: (s: TypeAnnotator, e: ConvertTimezoneExpr) => s.setType(\n e,\n e.args.sourceTz ? DataTypeExprKind.TIMESTAMPNTZ : DataTypeExprKind.TIMESTAMPTZ,\n ),\n });\n\n map.set(DateAddExpr, {\n annotator: (s: TypeAnnotator, e: Expression) => annotateDateOrTimeAdd.call(s, e),\n });\n map.set(DecodeCaseExpr, {\n annotator: (s: TypeAnnotator, e: DecodeCaseExpr) => annotateDecodeCase.call(s, e),\n });\n\n map.set(HashAggExpr, {\n annotator: (s: TypeAnnotator, e: Expression) => s.setType(e, DataTypeExpr.build('NUMBER(19, 0)', {\n dialect: 'snowflake',\n })),\n });\n\n map.set(KurtosisExpr, {\n annotator: (s: TypeAnnotator, e: KurtosisExpr) => annotateKurtosis.call(s, e),\n });\n map.set(MedianExpr, {\n annotator: (s: TypeAnnotator, e: MedianExpr) => annotateMedian.call(s, e),\n });\n map.set(ReverseExpr, {\n annotator: (s: TypeAnnotator, e: ReverseExpr) => annotateReverse.call(s, e),\n });\n map.set(StrToTimeExpr, {\n annotator: (s: TypeAnnotator, e: StrToTimeExpr) => annotateStrToTime.call(s, e),\n });\n map.set(TimeAddExpr, {\n annotator: (s: TypeAnnotator, e: Expression) => annotateDateOrTimeAdd.call(s, e),\n });\n map.set(TimestampFromPartsExpr, {\n annotator: (s: TypeAnnotator, e: TimestampFromPartsExpr) => annotateTimestampFromParts.call(s, e),\n });\n map.set(WithinGroupExpr, {\n annotator: (s: TypeAnnotator, e: WithinGroupExpr) => annotateWithinGroup.call(s, e),\n });\n\n return map;\n }\n}\n","import type {\n AlterSetExpr,\n ClusterExpr,\n CommandExpr,\n CurrentDateExpr,\n DateSubExpr,\n DescribeExpr,\n ExpressionOrString,\n ExpressionValue,\n FormatExpr,\n FuncExpr,\n GeneratedAsIdentityColumnConstraintExpr,\n LogExpr,\n PropertiesExpr,\n SearchExprArgs,\n TimestampSubExpr,\n TimeToStrExpr,\n UniformExpr,\n ValuesExpr,\n} from '../expressions';\nimport {\n DotExpr,\n isType,\n EndsWithExpr,\n LowerHexExpr,\n PartitionedByPropertyExpr,\n PercentileContExpr,\n PercentileDiscExpr,\n RandExpr,\n StartsWithExpr,\n StPointExpr,\n StringToArrayExpr,\n StrPositionExpr,\n StrToDateExpr,\n StuffExpr,\n TimeSliceExpr,\n DirectoryStageExpr,\n MaskingPolicyColumnConstraintExpr,\n NotExpr,\n ProjectionPolicyColumnConstraintExpr,\n TagsExpr,\n UseExpr,\n NthValueExpr, RegexpILikeExpr,\n SetExpr,\n SetItemExpr,\n ShowExpr,\n PowExpr, RegexpExtractAllExpr, RegexpLikeExpr,\n Sha1DigestExpr,\n Sha2DigestExpr,\n Sha2Expr,\n ShaExpr,\n StddevExpr,\n TableFromRowsExpr,\n TimeAddExpr,\n TimeFromPartsExpr,\n ArrayAggExpr,\n ArrayExpr,\n Expression, FromExpr, GenerateDateArrayExpr, JsonExtractExpr, JsonValueArrayExpr, LambdaExpr, LateralExpr, ParseJsonExpr, RegexpExtractExpr,\n select,\n StarExpr,\n toIdentifier,\n DateTruncExpr, IfExpr, KwargExpr, PivotAnyExpr, PivotExpr, RegexpReplaceExpr, SearchExpr, TimestampTruncExpr,\n AnonymousExpr,\n ApproxTopKExpr,\n BinaryExpr,\n BitwiseAndExpr,\n BitwiseLeftShiftExpr,\n BitwiseOrExpr,\n BitwiseRightShiftExpr,\n BitwiseXorExpr,\n CastExpr,\n DataTypeExpr,\n DataTypeExprKind,\n DateDiffExpr,\n DateFromPartsExpr,\n DivExpr,\n EqExpr,\n IdentifierExpr,\n IsExpr,\n LiteralExpr,\n NegExpr,\n null_,\n PropertyEqExpr,\n SplitPartExpr,\n StarMapExpr,\n StrToTimeExpr,\n StructExpr, TryCastExpr, TsOrDsToDateExpr, TsOrDsToTimeExpr, UnixToTimeExpr,\n wrap,\n UnnestExpr,\n SelectExpr,\n alias,\n CreateExpr,\n IcebergPropertyExpr,\n SchemaExpr,\n ColumnDefExpr,\n IntervalExpr,\n DateAddExpr,\n TableAliasExpr,\n JoinExpr,\n ToNumberExpr,\n GeneratorExpr,\n RoundExpr,\n TimestampFromPartsExpr,\n BracketExpr,\n ColumnExpr,\n TableExpr,\n LocaltimeExpr,\n AddMonthsExpr,\n ApproxQuantileExpr,\n ArrayContainsExpr,\n GenerateSeriesExpr,\n SubExpr,\n SortArrayExpr,\n FlattenExpr,\n BitwiseNotExpr,\n BitwiseAndAggExpr,\n BitwiseOrAggExpr,\n BitwiseXorAggExpr,\n BitmapOrAggExpr,\n BoolandExpr,\n BoolorExpr,\n XorExpr,\n CorrExpr,\n DayOfWeekIsoExpr,\n DaynameExpr,\n LevenshteinExpr,\n ExplodeExpr,\n GetExtractExpr,\n CurrentTimestampExpr,\n GreatestExpr,\n LeastExpr,\n UnhexExpr,\n Md5Expr,\n Md5DigestExpr,\n Md5NumberLower64Expr,\n Md5NumberUpper64Expr,\n MonthnameExpr,\n LastDayExpr,\n LengthExpr,\n JsonKeysExpr,\n ByteLengthExpr,\n ParseUrlExpr,\n DecryptExpr,\n DecryptRawExpr,\n ToBinaryExpr,\n ToBooleanExpr,\n ToDoubleExpr,\n ToFileExpr,\n JsonFormatExpr,\n CosineDistanceExpr,\n DotProductExpr,\n ManhattanDistanceExpr,\n EuclideanDistanceExpr,\n LikeExpr,\n ILikeExpr,\n SkewnessExpr,\n WeekOfYearExpr,\n WeekExpr,\n ModelAttributeExpr,\n ApproxDistinctExpr,\n ArgMaxExpr,\n ArgMinExpr,\n ArrayConcatExpr,\n ArrayAppendExpr,\n ArrayPrependExpr,\n ArrayIntersectExpr,\n AtTimeZoneExpr,\n LocaltimestampExpr,\n DatetimeAddExpr,\n DatetimeDiffExpr,\n DateStrToDateExpr,\n DayOfMonthExpr,\n DayOfWeekExpr,\n DayOfYearExpr,\n ExtractExpr,\n FileFormatPropertyExpr,\n FromTimeZoneExpr,\n GroupConcatExpr,\n JsonExtractScalarExpr,\n JsonObjectExpr,\n JsonPathRootExpr,\n JsonPathKeyExpr,\n JsonPathSubscriptExpr,\n LocationPropertyExpr,\n LogicalAndExpr,\n LogicalOrExpr,\n MapExpr,\n PutExpr,\n GetExpr,\n VarExpr,\n ForeignKeyExpr,\n SemanticViewExpr,\n CredentialsPropertyExpr,\n BoolnotExpr,\n JsonExtractArrayExpr,\n InExpr,\n QueryExpr,\n NeqExpr,\n AllExpr,\n UsingTemplatePropertyExpr,\n MakeIntervalExpr,\n MaxExpr,\n MinExpr,\n ArrayConcatAggExpr,\n YearOfWeekExpr,\n YearOfWeekIsoExpr,\n TsOrDsDiffExpr,\n ToCharExpr,\n TsOrDsAddExpr,\n ToArrayExpr,\n TimeToUnixExpr,\n TimeStrToTimeExpr,\n TimestampDiffExpr,\n TimestampAddExpr,\n TimestampExpr,\n UuidExpr,\n VarMapExpr,\n PropertiesLocation,\n VolatilePropertyExpr,\n SetPropertyExpr,\n MaterializedPropertyExpr,\n CopyGrantsPropertyExpr,\n CreateExprKind,\n OrderExpr,\n WithinGroupExpr,\n AliasExpr,\n ConvertTimezoneExpr,\n} from '../expressions';\nimport {\n Generator, unsupportedArgs,\n} from '../generator';\nimport {\n findNewName,\n isDateUnit,\n isInt, seqGet,\n} from '../helper';\nimport {\n JsonPathTokenizer,\n} from '../jsonpath';\nimport {\n annotateTypes,\n buildScope, findAllInScope,\n} from '../optimizer';\nimport {\n Parser, buildVarMap,\n} from '../parser';\nimport {\n cache, narrowInstanceOf,\n} from '../port_internals';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n Tokenizer, TokenType,\n} from '../tokens';\nimport {\n addWithinGroupForPercentiles,\n eliminateDistinctOn,\n eliminateSemiAndAntiJoins,\n eliminateWindowClause,\n explodeProjectionToUnnest,\n inheritStructFieldNames,\n preprocess,\n unqualifyColumns,\n} from '../transforms';\nimport {\n SnowflakeTyping,\n} from '../typing/snowflake';\nimport {\n arrayConcatSql,\n arrayAppendSql,\n binaryFromFunction,\n buildFormattedTime,\n buildLike,\n buildReplaceWithOptionalReplacement,\n buildTimeToStrOrToChar,\n buildTrunc,\n dateDeltaSql,\n dateStrToDateSql,\n dateTruncToTime,\n Dialect, Dialects,\n groupConcatSql,\n ifSql,\n mapDatePart,\n NormalizationStrategy,\n renameFunc,\n strPositionSql,\n timeStrToTimeSql,\n timestampDiffSql,\n timestampTruncSql,\n varMapSql,\n buildDefaultDecimalType,\n noMakeIntervalSql,\n maxOrGreatest,\n minOrLeast,\n noTimestampSql,\n unitToStr,\n inlineArraySql,\n NullOrdering,\n} from './dialect';\n\nconst TIMESTAMP_TYPES: Partial<Record<DataTypeExprKind, string>> = {\n [DataTypeExprKind.TIMESTAMP]: 'TO_TIMESTAMP',\n [DataTypeExprKind.TIMESTAMPLTZ]: 'TO_TIMESTAMP_LTZ',\n [DataTypeExprKind.TIMESTAMPNTZ]: 'TO_TIMESTAMP_NTZ',\n [DataTypeExprKind.TIMESTAMPTZ]: 'TO_TIMESTAMP_TZ',\n};\n\nfunction buildStrtok (args: Expression[]): SplitPartExpr {\n // Add default delimiter (space) if missing - per Snowflake docs\n if (args.length === 1) {\n args.push(LiteralExpr.string(' '));\n }\n\n // Add default part_index (1) if missing\n if (args.length === 2) {\n args.push(LiteralExpr.number(1));\n }\n\n return SplitPartExpr.fromArgList(args);\n}\n\n/**\n * Normalizes APPROX_TOP_K arguments to match Snowflake semantics.\n *\n * Snowflake APPROX_TOP_K signature: APPROX_TOP_K(column [, k] [, counters])\n * - k defaults to 1 if omitted (per Snowflake documentation)\n * - counters is optional precision parameter\n */\nfunction buildApproxTopK (args: Expression[]): ApproxTopKExpr {\n // Add default k=1 if only column is provided\n if (args.length === 1) {\n args.push(LiteralExpr.number(1));\n }\n\n return ApproxTopKExpr.fromArgList(args);\n}\n\nfunction buildDateFromParts (args: Expression[]): DateFromPartsExpr {\n return new DateFromPartsExpr({\n year: seqGet(args, 0),\n month: seqGet(args, 1),\n day: seqGet(args, 2),\n allowOverflow: true,\n });\n}\n\nfunction buildDatetime (\n name: string,\n kind: DataTypeExprKind,\n options: {safe?: boolean} = {},\n) {\n const {\n safe = false,\n } = options;\n\n return (args: Expression[]): Expression => {\n const value = seqGet(args, 0);\n const scaleOrFmt = seqGet(args, 1);\n\n const intValue = value instanceof IdentifierExpr && isInt(value.name);\n const intScaleOrFmt = scaleOrFmt instanceof LiteralExpr && scaleOrFmt.isNumber;\n\n if (value instanceof LiteralExpr || value instanceof NegExpr || (value && scaleOrFmt)) {\n // Converts calls like `TO_TIME('01:02:03')` into casts\n if (args.length === 1 && value instanceof LiteralExpr && value.isString && !intValue) {\n return safe\n ? new TryCastExpr({\n this: value,\n to: DataTypeExpr.build(kind),\n requiresString: true,\n })\n : new CastExpr({\n this: value,\n to: DataTypeExpr.build(kind),\n });\n }\n\n // Handles `TO_TIMESTAMP(str, fmt)` and `TO_TIMESTAMP(num, scale)` as special\n // cases so we can transpile them, since they're relatively common\n if (kind in TIMESTAMP_TYPES) {\n if (!safe && (intScaleOrFmt || (intValue && scaleOrFmt === undefined))) {\n const unixExpr = new UnixToTimeExpr({\n this: value,\n scale: scaleOrFmt,\n });\n unixExpr.setArgKey('targetType', DataTypeExpr.build(kind, {\n dialect: 'snowflake',\n }));\n return unixExpr;\n }\n if (scaleOrFmt && !intScaleOrFmt) {\n // Format string provided (e.g., 'YYYY-MM-DD'), use StrToTime\n const strtotimeExpr = buildFormattedTime(StrToTimeExpr, {\n dialect: 'snowflake',\n })(args);\n strtotimeExpr.setArgKey('safe', safe);\n strtotimeExpr.setArgKey('targetType', DataTypeExpr.build(kind, {\n dialect: 'snowflake',\n }));\n return strtotimeExpr;\n }\n }\n }\n\n // Handle DATE/TIME with format strings - allow intValue if a format string is provided\n const hasFormatString = scaleOrFmt && !intScaleOrFmt;\n if (\n (kind === DataTypeExprKind.DATE || kind === DataTypeExprKind.TIME)\n && (!intValue || hasFormatString)\n ) {\n const Klass = kind === DataTypeExprKind.DATE ? TsOrDsToDateExpr : TsOrDsToTimeExpr;\n const formattedExp = buildFormattedTime(Klass, {\n dialect: 'snowflake',\n })(args);\n formattedExp.setArgKey('safe', safe);\n return formattedExp;\n }\n\n return new AnonymousExpr({\n this: name,\n expressions: args,\n });\n };\n}\n\nfunction buildObjectConstruct (args: Expression[]): StarMapExpr | StructExpr {\n const expression = buildVarMap(args);\n\n if (expression instanceof StarMapExpr) {\n return expression;\n }\n\n return new StructExpr({\n expressions: [\n ...expression.args.keys ?? [\n ],\n ].map(\n (k, i) => new PropertyEqExpr({\n this: k as ExpressionValue,\n expression: seqGet(expression.args.values ?? [\n ], i) as ExpressionValue,\n }),\n ),\n });\n}\n\nfunction buildDatediff (args: Expression[]): DateDiffExpr {\n return new DateDiffExpr({\n this: seqGet(args, 2),\n expression: seqGet(args, 1),\n unit: mapDatePart(seqGet(args, 0)),\n datePartBoundary: true,\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction buildDateTimeAdd<T extends Expression> (ExprClass: new (args: any) => T) {\n return (args: Expression[]): T => {\n return new ExprClass({\n this: seqGet(args, 2),\n expression: seqGet(args, 1),\n unit: mapDatePart(seqGet(args, 0)),\n });\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction buildBitwise<T extends Expression> (ExprClass: new (args: any) => T, name: string) {\n return (args: Expression[]): T | AnonymousExpr => {\n if (args.length === 3) {\n // Special handling for bitwise operations with padside argument\n if (\n ExprClass === BitwiseAndExpr as unknown\n || ExprClass === BitwiseOrExpr as unknown\n || ExprClass === BitwiseXorExpr as unknown\n ) {\n return new ExprClass({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n padside: seqGet(args, 2),\n }) as T;\n }\n return new AnonymousExpr({\n this: name,\n expressions: args,\n });\n }\n\n const result = binaryFromFunction(ExprClass)(args);\n\n // Snowflake specifies INT128 for bitwise shifts\n if (ExprClass === BitwiseLeftShiftExpr as unknown || ExprClass === BitwiseRightShiftExpr as unknown) {\n result.setArgKey('requiresInt128', true);\n }\n\n return result as T;\n };\n}\n\n// https://docs.snowflake.com/en/sql-reference/functions/div0\nfunction buildIfFromDiv0 (args: Expression[]): IfExpr {\n const lhs = wrap(seqGet(args, 0), BinaryExpr);\n const rhs = wrap(seqGet(args, 1), BinaryExpr);\n\n const cond = new EqExpr({\n this: rhs,\n expression: LiteralExpr.number(0),\n }).and(\n new IsExpr({\n this: lhs,\n expression: null_(),\n }).not(),\n );\n const trueNode = LiteralExpr.number(0);\n const falseNode = new DivExpr({\n this: lhs,\n expression: rhs,\n });\n return new IfExpr({\n this: cond,\n true: trueNode,\n false: falseNode,\n });\n}\n\n// https://docs.snowflake.com/en/sql-reference/functions/div0null\nfunction buildIfFromDiv0null (args: Expression[]): IfExpr {\n const lhs = wrap(seqGet(args, 0), BinaryExpr);\n const rhs = wrap(seqGet(args, 1), BinaryExpr);\n\n // Returns 0 when divisor is 0 OR NULL\n const cond = new EqExpr({\n this: rhs,\n expression: LiteralExpr.number(0),\n }).or(\n new IsExpr({\n this: rhs,\n expression: null_(),\n }),\n );\n const trueNode = LiteralExpr.number(0);\n const falseNode = new DivExpr({\n this: lhs,\n expression: rhs,\n });\n return new IfExpr({\n this: cond,\n true: trueNode,\n false: falseNode,\n });\n}\n\n// https://docs.snowflake.com/en/sql-reference/functions/zeroifnull\nfunction buildIfFromZeroifnull (args: Expression[]): IfExpr {\n const cond = new IsExpr({\n this: seqGet(args, 0),\n expression: null_(),\n });\n return new IfExpr({\n this: cond,\n true: LiteralExpr.number(0),\n false: seqGet(args, 0),\n });\n}\n\nfunction buildSearch (args: Expression[]): SearchExpr {\n const kwargs: SearchExprArgs = {\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n };\n\n args.slice(2).forEach((arg) => {\n if (arg instanceof KwargExpr) {\n (kwargs as Record<string, unknown>)[arg.name] = arg;\n }\n });\n\n return new SearchExpr(kwargs);\n}\n\n// https://docs.snowflake.com/en/sql-reference/functions/nullifzero\nfunction buildIfFromNullifzero (args: Expression[]): IfExpr {\n const cond = new EqExpr({\n this: seqGet(args, 0),\n expression: LiteralExpr.number(0),\n });\n return new IfExpr({\n this: cond,\n true: null_(),\n false: seqGet(args, 0),\n });\n}\n\nfunction regexpILikeSql (this: Generator, expression: RegexpILikeExpr): string {\n let flag = expression.text('flag');\n\n if (!flag.includes('i')) {\n flag += 'i';\n }\n\n return this.func(\n 'REGEXP_LIKE',\n [\n expression.args.this,\n expression.args.expression,\n LiteralExpr.string(flag),\n ],\n );\n}\n\nfunction buildRegexpReplace (args: Expression[]): RegexpReplaceExpr {\n const regexpReplace = RegexpReplaceExpr.fromArgList(args);\n\n if (!regexpReplace.args.replacement) {\n regexpReplace.setArgKey('replacement', LiteralExpr.string(''));\n }\n\n return regexpReplace;\n}\n\nfunction showParser (str: string) {\n return function (this: Parser): ShowExpr {\n return (this as SnowflakeParser).parseShowSnowflake(str);\n };\n}\n\nfunction dateTruncToTimeWrapper (args: Expression[]): DateTruncExpr | TimestampTruncExpr {\n const trunc = dateTruncToTime(args);\n const unit = mapDatePart(trunc.args.unit);\n trunc.setArgKey('unit', unit);\n\n const isTimeInput = trunc.args.this?.isType([\n DataTypeExprKind.TIME,\n DataTypeExprKind.TIMETZ,\n ]);\n\n const needsTypePreservation =\n (trunc instanceof TimestampTruncExpr && (isDateUnit(unit) || isTimeInput))\n || (trunc instanceof DateTruncExpr && !isDateUnit(unit));\n\n if (needsTypePreservation) {\n trunc.setArgKey('inputTypePreserved', true);\n }\n return trunc;\n}\n\n/**\n * Snowflake doesn't allow columns referenced in UNPIVOT to be qualified,\n * so we need to unqualify them. Same goes for ANY ORDER BY <column>.\n */\nfunction unqualifyPivotColumns (expression: Expression): Expression {\n if (expression instanceof PivotExpr) {\n if (expression.args.unpivot) {\n return unqualifyColumns(expression);\n } else {\n expression.args.fields?.forEach((field) => {\n const fieldExpr = seqGet(field?.args.expressions || [\n ], 0);\n\n if (fieldExpr instanceof PivotAnyExpr) {\n const unqualifiedFieldExpr = unqualifyColumns(fieldExpr);\n field?.setArgKey('expressions', [\n unqualifiedFieldExpr,\n ], 0);\n }\n });\n }\n }\n\n return expression;\n}\n\nfunction flattenStructuredTypesUnlessIceberg (expression: Expression): Expression {\n if (!(expression instanceof CreateExpr)) return expression;\n\n const flattenStructuredType = (node: Expression): Expression => {\n if (node instanceof DataTypeExpr && DataTypeExpr.NESTED_TYPES.has(node.args.this?.toString() as DataTypeExprKind)) {\n node.setArgKey('expressions', undefined);\n }\n return node;\n };\n\n const props = expression.args.properties;\n const isIceberg = props?.find(IcebergPropertyExpr);\n\n if (expression.args.this instanceof SchemaExpr && !isIceberg) {\n for (const schemaExpression of expression.args.this.args.expressions || [\n ]) {\n if (schemaExpression instanceof ColumnDefExpr && schemaExpression.args.kind instanceof DataTypeExpr) {\n schemaExpression.args.kind.transform(flattenStructuredType, {\n copy: false,\n });\n }\n }\n }\n\n return expression;\n}\n\nfunction unnestGenerateDateArray (unnest: UnnestExpr): void {\n const generateDateArray = unnest.args.expressions?.[0] as GenerateDateArrayExpr;\n const {\n start, end, step,\n } = generateDateArray.args;\n\n if (!start || !end || !(step instanceof IntervalExpr) || step.name !== '1') {\n return;\n }\n\n const unit = step.args.unit;\n if (!unit) return;\n const unnestAlias = unnest.args.alias;\n const sequenceValueName = narrowInstanceOf(unnestAlias, TableAliasExpr)?.args.columns?.[0] || 'value';\n\n const dateAdd = buildDateTimeAdd(DateAddExpr)([\n unit,\n new CastExpr({\n this: sequenceValueName,\n to: DataTypeExpr.build(DataTypeExprKind.INT),\n }),\n new CastExpr({\n this: start,\n to: DataTypeExpr.build(DataTypeExprKind.DATE),\n }),\n ]);\n\n const numberSequence = (SnowflakeParser.FUNCTIONS['ARRAY_GENERATE_RANGE'] as (args: Expression[]) => Expression)([\n LiteralExpr.number(0),\n buildDatediff([\n unit,\n start,\n end,\n ]).add(1),\n ]);\n\n unnest.setArgKey('expressions', [\n numberSequence,\n ]);\n\n const unnestParent = unnest.parent;\n if (unnestParent instanceof JoinExpr) {\n const select = unnestParent.parent;\n if (select instanceof SelectExpr) {\n const replaceColumnName = sequenceValueName instanceof Expression ? sequenceValueName.name : sequenceValueName.toString();\n const scope = buildScope(select);\n if (scope) {\n for (const column of scope.columns) {\n if (column.name.toLowerCase() === replaceColumnName.toLowerCase()) {\n column.replace(\n column.parent instanceof SelectExpr ? dateAdd.as(replaceColumnName) : dateAdd,\n );\n }\n }\n }\n\n const lateral = new LateralExpr({\n this: unnestParent.args.this?.pop(),\n });\n unnestParent.replace(new JoinExpr({\n this: lateral,\n }));\n }\n } else {\n unnest.replace(\n select(dateAdd.as(sequenceValueName as string | IdentifierExpr))\n .from(unnest.copy())\n .subquery(unnestAlias),\n );\n }\n}\n\nfunction transformGenerateDateArray (expression: Expression): Expression {\n if (expression instanceof SelectExpr) {\n for (const generateDateArray of expression.findAll(GenerateDateArrayExpr)) {\n const parent = generateDateArray.parent;\n\n if (!(parent instanceof UnnestExpr)) {\n const unnest = new UnnestExpr({\n expressions: [\n generateDateArray.copy(),\n ],\n });\n generateDateArray.replace(\n select(new ArrayAggExpr({\n this: new StarExpr({}),\n })).from(unnest)\n .subquery(),\n );\n }\n\n if (\n parent instanceof UnnestExpr\n && (parent.parent instanceof FromExpr || parent.parent instanceof JoinExpr)\n && parent.args.expressions?.length === 1\n ) {\n unnestGenerateDateArray(parent);\n }\n }\n }\n\n return expression;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction buildRegexpExtract<T extends Expression> (ExprClass: new (args: any) => T) {\n return (args: Expression[], {\n dialect,\n }: {dialect: Dialect}): T => {\n return new ExprClass({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n position: seqGet(args, 2),\n occurrence: seqGet(args, 3),\n parameters: seqGet(args, 4),\n group: seqGet(args, 5) || LiteralExpr.number(0),\n ...(ExprClass === RegexpExtractExpr as unknown\n ? {\n nullIfPosOverflow: dialect._constructor.REGEXP_EXTRACT_POSITION_OVERFLOW_RETURNS_NULL,\n }\n : {}),\n });\n };\n}\n\nfunction regexpExtractSql (this: Generator, expression: RegexpExtractExpr | RegexpExtractAllExpr): string {\n let group = expression.args.group;\n\n if (group) {\n if (\n (group instanceof IdentifierExpr && group.name === '0')\n || (group instanceof LiteralExpr && String(group.args.this) === '0')\n ) {\n group = undefined;\n }\n }\n\n const parameters = expression.args.parameters || (group ? LiteralExpr.string('c') : undefined);\n const occurrence = expression.args.occurrence || (parameters ? LiteralExpr.number(1) : undefined);\n const position = expression.args.position || (occurrence ? LiteralExpr.number(1) : undefined);\n\n return this.func(\n expression instanceof RegexpExtractExpr ? 'REGEXP_SUBSTR' : 'REGEXP_EXTRACT_ALL',\n [\n expression.args.this,\n expression.args.expression,\n position,\n occurrence,\n parameters,\n group,\n ],\n );\n}\n\nfunction jsonExtractValueArraySql (\n this: Generator,\n expression: JsonValueArrayExpr | JsonExtractArrayExpr,\n): string {\n const jsonExtract = new JsonExtractExpr({\n this: expression.args.this,\n expression: expression.args.expression,\n });\n const ident = toIdentifier('x');\n\n const thisNode: Expression =\n expression instanceof JsonValueArrayExpr\n ? new CastExpr({\n this: ident,\n to: DataTypeExpr.build(DataTypeExprKind.VARCHAR),\n })\n : new ParseJsonExpr({\n this: `TO_JSON(${ident})`,\n });\n\n const transformLambda = new LambdaExpr({\n expressions: [\n ident,\n ],\n this: thisNode,\n });\n\n return this.func('TRANSFORM', [\n jsonExtract,\n transformLambda,\n ]);\n}\n\nfunction qualifyUnnestedColumns (expression: Expression): Expression {\n if (!(expression instanceof SelectExpr)) return expression;\n\n const scope = buildScope(expression);\n if (!scope) return expression;\n\n const unnests = Array.from(scope.findAll(UnnestExpr));\n if (unnests.length === 0) return expression;\n\n const takenSourceNames = new Set(scope.sources.keys());\n const columnSource: Record<string, ExpressionValue<IdentifierExpr>> = {};\n const unnestToIdentifier = new Map<Expression, IdentifierExpr>();\n\n let unnestIdentifier: ExpressionValue<IdentifierExpr> | undefined;\n const origExpression = expression.copy();\n\n for (const unnest of unnests) {\n if (!(unnest.parent instanceof FromExpr || unnest.parent instanceof JoinExpr)) continue;\n\n const unnestColumns = new Set<string>();\n for (const unnestExpr of unnest.args.expressions || [\n ]) {\n if (!(unnestExpr instanceof ArrayExpr)) continue;\n\n for (const arrayExpr of unnestExpr.args.expressions || [\n ]) {\n if (\n arrayExpr instanceof StructExpr\n && 0 < (arrayExpr.args.expressions || [\n ]).length\n && arrayExpr.args.expressions?.every((e) => e instanceof PropertyEqExpr)\n ) {\n arrayExpr.args.expressions.forEach((structExpr) => {\n unnestColumns.add(\n structExpr.args.this instanceof Expression\n ? structExpr.args.this.name.toLowerCase()\n : structExpr.args.this?.toString().toLowerCase() ?? '',\n );\n });\n break;\n }\n }\n if (0 < unnestColumns.size) break;\n }\n\n const unnestAlias = unnest.args.alias;\n if (!unnestAlias) {\n const aliasName = findNewName(takenSourceNames, 'value');\n takenSourceNames.add(aliasName);\n\n const aliasedUnnest = alias(unnest, undefined, {\n table: [\n aliasName,\n ],\n });\n scope.replace(unnest, aliasedUnnest);\n unnestIdentifier = narrowInstanceOf(aliasedUnnest.args.alias, TableAliasExpr)?.args.columns?.[0];\n } else {\n const narrowedUnnestAlias = narrowInstanceOf(unnestAlias, TableAliasExpr);\n const aliasColumns = narrowedUnnestAlias?.args.columns || [\n ];\n unnestIdentifier = narrowedUnnestAlias?.args.this || seqGet(aliasColumns, 0);\n }\n\n if (!(unnestIdentifier instanceof IdentifierExpr)) return origExpression;\n\n unnestToIdentifier.set(unnest, unnestIdentifier);\n unnestColumns.forEach((c) => {\n if (unnestIdentifier) columnSource[c.toLowerCase()] = unnestIdentifier;\n });\n }\n\n for (const column of scope.columns) {\n if (column.args.table) continue;\n const unnestIdentifierName = unnestIdentifier instanceof Expression ? unnestIdentifier.name : unnestIdentifier?.toString();\n\n let table = columnSource[column.name.toLowerCase()];\n if (\n unnestIdentifier\n && !table\n && scope.sources.size === 1\n && column.name.toLowerCase() !== unnestIdentifierName?.toLowerCase()\n ) {\n const unnestAncestor = column.findAncestor<UnnestExpr | SelectExpr>(UnnestExpr, SelectExpr);\n const ancestorIdentifier = unnestAncestor ? unnestToIdentifier.get(unnestAncestor) : undefined;\n if (\n unnestAncestor instanceof UnnestExpr\n && ancestorIdentifier\n && ancestorIdentifier.name.toLowerCase() === unnestIdentifierName?.toLowerCase()\n ) {\n continue;\n }\n table = unnestIdentifier;\n }\n\n if (table) column.setArgKey('table', table instanceof Expression ? table.copy() : table);\n }\n\n return expression;\n}\n\n/**\n * This transformation is used to facilitate transpilation of BigQuery `UNNEST` operations\n * to Snowflake. It should not affect roundtrip because `Unnest` nodes cannot be produced\n * by Snowflake's parser.\n */\nfunction eliminateDotVariantLookup (expression: Expression): Expression {\n if (expression instanceof SelectExpr) {\n const unnestAliases = new Set<string>();\n\n for (const unnest of findAllInScope(expression, [\n UnnestExpr,\n ])) {\n const unnestAlias = unnest.args.alias;\n if (\n unnestAlias instanceof TableAliasExpr\n && !unnestAlias.args.this\n && unnestAlias.args.columns?.length === 1\n ) {\n unnestAliases.add(unnestAlias.args.columns[0] instanceof Expression ? unnestAlias.args.columns[0].name : unnestAlias.args.columns[0].toString());\n }\n }\n\n if (0 < unnestAliases.size) {\n for (const c of findAllInScope(expression, [\n ColumnExpr,\n ])) {\n if (c.args.table instanceof Expression && unnestAliases.has(c.args.table.name)) {\n const bracketLhs = c.args.table;\n const bracketRhs = LiteralExpr.string(c.name);\n const bracket = new BracketExpr({\n this: bracketLhs,\n expressions: [\n bracketRhs,\n ],\n });\n\n if (c.parent === expression) {\n // Retain column projection names by using aliases\n c.replace(alias(bracket, c.args.this instanceof Expression ? c.args.this.copy() as IdentifierExpr : c.args.this?.toString()));\n } else {\n c.replace(bracket);\n }\n }\n }\n }\n }\n\n return expression;\n}\n\n/**\n * Build TimestampFromParts with support for both syntaxes:\n * 1. TIMESTAMP_FROM_PARTS(year, month, day, hour, minute, second [, nanosecond] [, time_zone])\n * 2. TIMESTAMP_FROM_PARTS(date_expr, time_expr) - Snowflake specific\n */\nfunction buildTimestampFromParts (args: Expression[]): FuncExpr {\n if (args.length === 2) {\n return new TimestampFromPartsExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n });\n }\n\n return TimestampFromPartsExpr.fromArgList(args);\n}\n\n/**\n * Build Round expression, unwrapping Snowflake's named parameters.\n * Maps EXPR => this, SCALE => decimals, ROUNDING_MODE => truncate.\n */\nfunction buildRound (args: Expression[]): RoundExpr {\n const kwargMap: Record<string, string> = {\n EXPR: 'this',\n SCALE: 'decimals',\n ROUNDING_MODE: 'truncate',\n };\n const roundArgs: Record<string, unknown> = {};\n const positionalKeys = [\n 'this',\n 'decimals',\n 'truncate',\n ];\n let positionalIdx = 0;\n\n for (const arg of args) {\n if (arg instanceof KwargExpr) {\n const key = arg.args.this?.name.toUpperCase();\n const roundKey = key !== undefined ? kwargMap[key] : undefined;\n if (roundKey) {\n roundArgs[roundKey] = arg.args.expression;\n }\n } else {\n if (positionalIdx < positionalKeys.length) {\n roundArgs[positionalKeys[positionalIdx]] = arg;\n positionalIdx++;\n }\n }\n }\n\n const expression = new RoundExpr(roundArgs);\n expression.setArgKey('castsNonIntegerDecimals', true);\n return expression;\n}\n\n/**\n * Build Generator expression, unwrapping Snowflake's named parameters.\n * Maps ROWCOUNT => rowcount, TIMELIMIT => time_limit.\n */\nfunction buildGenerator (args: Expression[]): GeneratorExpr {\n const kwargMap: Record<string, string> = {\n ROWCOUNT: 'rowcount',\n TIMELIMIT: 'timeLimit',\n };\n const genArgs: Record<string, unknown> = {};\n\n for (const arg of args) {\n if (arg instanceof KwargExpr) {\n const key = arg.args.this?.name.toUpperCase();\n const genKey = key !== undefined ? kwargMap[key] : undefined;\n if (genKey) {\n genArgs[genKey] = arg.args.expression;\n }\n }\n }\n\n return new GeneratorExpr(genArgs);\n}\n\nfunction buildTryToNumber (args: Expression[]): ToNumberExpr {\n return new ToNumberExpr({\n this: seqGet(args, 0),\n format: seqGet(args, 1),\n precision: seqGet(args, 2),\n scale: seqGet(args, 3),\n safe: true,\n });\n}\n\nclass SnowflakeJsonPathTokenizer extends JsonPathTokenizer {\n @cache\n static get SINGLE_TOKENS (): Record<string, TokenType> {\n const tokens: Record<string, TokenType> = {\n ...JsonPathTokenizer.SINGLE_TOKENS,\n };\n delete tokens['$'];\n return tokens;\n }\n}\n\nclass SnowflakeTokenizer extends Tokenizer {\n @cache\n static get STRING_ESCAPES () {\n return [\n '\\\\',\n '\\'',\n ];\n }\n\n @cache\n static get HEX_STRINGS (): [string, string][] {\n return [\n [\n 'x\\'',\n '\\'',\n ],\n [\n 'X\\'',\n '\\'',\n ],\n ];\n }\n\n @cache\n static get RAW_STRINGS () {\n return [\n '$$',\n ];\n }\n\n @cache\n static get COMMENTS (): TokenPair[] {\n return [\n '--',\n '//',\n [\n '/*',\n '*/',\n ],\n ];\n }\n\n static NESTED_COMMENTS = false;\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n const keywords: Record<string, TokenType> = {\n ...Tokenizer.KEYWORDS,\n 'BYTEINT': TokenType.INT,\n 'FILE://': TokenType.URI_START,\n 'FILE FORMAT': TokenType.FILE_FORMAT,\n 'GET': TokenType.GET,\n 'MATCH_CONDITION': TokenType.MATCH_CONDITION,\n 'MATCH_RECOGNIZE': TokenType.MATCH_RECOGNIZE,\n 'MINUS': TokenType.EXCEPT,\n 'NCHAR VARYING': TokenType.VARCHAR,\n 'PUT': TokenType.PUT,\n 'REMOVE': TokenType.COMMAND,\n 'RM': TokenType.COMMAND,\n 'SAMPLE': TokenType.TABLE_SAMPLE,\n 'SEMANTIC VIEW': TokenType.SEMANTIC_VIEW,\n 'SQL_DOUBLE': TokenType.DOUBLE,\n 'SQL_VARCHAR': TokenType.VARCHAR,\n 'STAGE': TokenType.STAGE,\n 'STORAGE INTEGRATION': TokenType.STORAGE_INTEGRATION,\n 'STREAMLIT': TokenType.STREAMLIT,\n 'TAG': TokenType.TAG,\n 'TIMESTAMP_TZ': TokenType.TIMESTAMPTZ,\n 'TOP': TokenType.TOP,\n 'WAREHOUSE': TokenType.WAREHOUSE,\n 'FLOAT': TokenType.DOUBLE,\n };\n delete keywords['/*+'];\n return keywords;\n }\n\n @cache\n static get SINGLE_TOKENS (): Record<string, TokenType> {\n return {\n ...Tokenizer.SINGLE_TOKENS,\n '$': TokenType.PARAMETER,\n '!': TokenType.EXCLAMATION,\n };\n }\n\n @cache\n static get VAR_SINGLE_TOKENS () {\n return new Set([\n '$',\n ]);\n }\n\n @cache\n static get COMMANDS (): Set<TokenType> {\n return new Set(\n Array.from(Tokenizer.COMMANDS).filter((t) => t !== TokenType.SHOW),\n );\n }\n}\n\nclass SnowflakeParser 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.EXCEPT,\n TokenType.MATCH_CONDITION,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n\n static IDENTIFY_PIVOT_STRINGS = true;\n static DEFAULT_SAMPLING_METHOD = 'BERNOULLI' as const;\n static COLON_IS_VARIANT_EXTRACT = true;\n static JSON_EXTRACT_REQUIRES_JSON_EXPRESSION = true;\n\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return (() => {\n const s = new Set([\n ...Parser.TABLE_ALIAS_TOKENS,\n TokenType.WINDOW,\n TokenType.STRAIGHT_JOIN,\n ]);\n s.delete(TokenType.MATCH_CONDITION);\n return s;\n })();\n }\n\n @cache\n static get COLON_PLACEHOLDER_TOKENS (): Set<TokenType> {\n return new Set([\n ...SnowflakeParser.ID_VAR_TOKENS,\n TokenType.NUMBER,\n ]);\n }\n\n @cache\n static get NO_PAREN_FUNCTIONS (): Partial<Record<TokenType, typeof Expression>> {\n return {\n ...Parser.NO_PAREN_FUNCTIONS,\n [TokenType.CURRENT_TIME]: LocaltimeExpr,\n };\n }\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return (() => {\n const functions: Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> = {\n ...Parser.FUNCTIONS,\n ADD_MONTHS: (args: Expression[]) =>\n new AddMonthsExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n preserveEndOfMonth: true,\n }),\n APPROX_PERCENTILE: (args: unknown[]) => ApproxQuantileExpr.fromArgList(args),\n CURRENT_TIME: (args: Expression[]) => new LocaltimeExpr({\n this: seqGet(args, 0),\n }),\n APPROX_TOP_K: buildApproxTopK,\n ARRAY_CONSTRUCT: (args: Expression[]) => new ArrayExpr({\n expressions: args,\n }),\n ARRAY_CONTAINS: (args: Expression[]) =>\n new ArrayContainsExpr({\n this: seqGet(args, 1),\n expression: seqGet(args, 0),\n ensureVariant: false,\n }),\n ARRAY_GENERATE_RANGE: (args: Expression[]) =>\n new GenerateSeriesExpr({\n start: seqGet(args, 0),\n end: new SubExpr({\n this: seqGet(args, 1),\n expression: LiteralExpr.number(1),\n }),\n step: seqGet(args, 2),\n }),\n ARRAY_SORT: (args: unknown[]) => SortArrayExpr.fromArgList(args),\n ARRAY_FLATTEN: (args: unknown[]) => FlattenExpr.fromArgList(args),\n BITAND: buildBitwise(BitwiseAndExpr, 'BITAND'),\n BIT_AND: buildBitwise(BitwiseAndExpr, 'BITAND'),\n BITNOT: (args: Expression[]) => new BitwiseNotExpr({\n this: seqGet(args, 0),\n }),\n BIT_NOT: (args: Expression[]) => new BitwiseNotExpr({\n this: seqGet(args, 0),\n }),\n BITXOR: buildBitwise(BitwiseXorExpr, 'BITXOR'),\n BIT_XOR: buildBitwise(BitwiseXorExpr, 'BITXOR'),\n BITOR: buildBitwise(BitwiseOrExpr, 'BITOR'),\n BIT_OR: buildBitwise(BitwiseOrExpr, 'BITOR'),\n BITSHIFTLEFT: buildBitwise(BitwiseLeftShiftExpr, 'BITSHIFTLEFT'),\n BIT_SHIFTLEFT: buildBitwise(BitwiseLeftShiftExpr, 'BIT_SHIFTLEFT'),\n BITSHIFTRIGHT: buildBitwise(BitwiseRightShiftExpr, 'BITSHIFTRIGHT'),\n BIT_SHIFTRIGHT: buildBitwise(BitwiseRightShiftExpr, 'BITSHIFTRIGHT'),\n BITANDAGG: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BITAND_AGG: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BIT_AND_AGG: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BIT_ANDAGG: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BITORAGG: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BITOR_AGG: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BIT_OR_AGG: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BIT_ORAGG: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BITXORAGG: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BITXOR_AGG: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BIT_XOR_AGG: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BIT_XORAGG: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BITMAP_OR_AGG: (args: unknown[]) => BitmapOrAggExpr.fromArgList(args),\n BOOLAND: (args: Expression[]) =>\n new BoolandExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n roundInput: true,\n }),\n BOOLOR: (args: Expression[]) =>\n new BoolorExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n roundInput: true,\n }),\n BOOLNOT: (args: Expression[]) => new BoolnotExpr({\n this: seqGet(args, 0),\n roundInput: true,\n }),\n BOOLXOR: (args: Expression[]) =>\n new XorExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n roundInput: true,\n }),\n CORR: (args: Expression[]) =>\n new CorrExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n nullOnZeroVariance: true,\n }),\n DATE: buildDatetime('DATE', DataTypeExprKind.DATE),\n DATEFROMPARTS: buildDateFromParts,\n DATE_FROM_PARTS: buildDateFromParts,\n DATE_TRUNC: dateTruncToTimeWrapper,\n DATEADD: buildDateTimeAdd(DateAddExpr),\n DATEDIFF: buildDatediff,\n DAYNAME: (args: Expression[]) => new DaynameExpr({\n this: seqGet(args, 0),\n abbreviated: true,\n }),\n DAYOFWEEKISO: (args: unknown[]) => DayOfWeekIsoExpr.fromArgList(args),\n DIV0: buildIfFromDiv0,\n DIV0NULL: buildIfFromDiv0null,\n EDITDISTANCE: (args: Expression[]) =>\n new LevenshteinExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n maxDist: seqGet(args, 2),\n }),\n FLATTEN: (args: unknown[]) => ExplodeExpr.fromArgList(args),\n GENERATOR: buildGenerator,\n GET: (args: unknown[]) => GetExtractExpr.fromArgList(args),\n GETDATE: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n GET_PATH: (args: Expression[], {\n dialect,\n }: {dialect: Dialect}) =>\n new JsonExtractExpr({\n this: seqGet(args, 0),\n expression: dialect.toJsonPath(seqGet(args, 1)),\n requiresJson: true,\n }),\n GREATEST_IGNORE_NULLS: (args: Expression[]) =>\n new GreatestExpr({\n this: seqGet(args, 0),\n expressions: args.slice(1),\n ignoreNulls: true,\n }),\n LEAST_IGNORE_NULLS: (args: Expression[]) =>\n new LeastExpr({\n this: seqGet(args, 0),\n expressions: args.slice(1),\n ignoreNulls: true,\n }),\n HEX_DECODE_BINARY: (args: unknown[]) => UnhexExpr.fromArgList(args),\n IFF: (args: unknown[]) => IfExpr.fromArgList(args),\n MD5_HEX: (args: unknown[]) => Md5Expr.fromArgList(args),\n MD5_BINARY: (args: unknown[]) => Md5DigestExpr.fromArgList(args),\n MD5_NUMBER_LOWER64: (args: unknown[]) => Md5NumberLower64Expr.fromArgList(args),\n MD5_NUMBER_UPPER64: (args: unknown[]) => Md5NumberUpper64Expr.fromArgList(args),\n MONTHNAME: (args: Expression[]) => new MonthnameExpr({\n this: seqGet(args, 0),\n abbreviated: true,\n }),\n LAST_DAY: (args: Expression[]) =>\n new LastDayExpr({\n this: seqGet(args, 0),\n unit: mapDatePart(seqGet(args, 1)),\n }),\n LEN: (args: Expression[]) => new LengthExpr({\n this: seqGet(args, 0),\n binary: true,\n }),\n LENGTH: (args: Expression[]) => new LengthExpr({\n this: seqGet(args, 0),\n binary: true,\n }),\n LOCALTIMESTAMP: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n NULLIFZERO: buildIfFromNullifzero,\n OBJECT_CONSTRUCT: buildObjectConstruct,\n OBJECT_KEYS: (args: unknown[]) => JsonKeysExpr.fromArgList(args),\n OCTET_LENGTH: (args: unknown[]) => ByteLengthExpr.fromArgList(args),\n PARSE_URL: (args: Expression[]) =>\n new ParseUrlExpr({\n this: seqGet(args, 0),\n permissive: seqGet(args, 1),\n }),\n REGEXP_EXTRACT_ALL: buildRegexpExtract(RegexpExtractAllExpr),\n REGEXP_REPLACE: buildRegexpReplace,\n REGEXP_SUBSTR: buildRegexpExtract(RegexpExtractExpr),\n REGEXP_SUBSTR_ALL: buildRegexpExtract(RegexpExtractAllExpr),\n REPLACE: buildReplaceWithOptionalReplacement,\n RLIKE: (args: unknown[]) => RegexpLikeExpr.fromArgList(args),\n ROUND: buildRound,\n SHA1_BINARY: (args: unknown[]) => Sha1DigestExpr.fromArgList(args),\n SHA1_HEX: (args: unknown[]) => ShaExpr.fromArgList(args),\n SHA2_BINARY: (args: unknown[]) => Sha2DigestExpr.fromArgList(args),\n SHA2_HEX: (args: unknown[]) => Sha2Expr.fromArgList(args),\n SQUARE: (args: Expression[]) =>\n new PowExpr({\n this: seqGet(args, 0),\n expression: LiteralExpr.number(2),\n }),\n STDDEV_SAMP: (args: unknown[]) => StddevExpr.fromArgList(args),\n STRTOK: buildStrtok,\n SYSDATE: (args: Expression[]) =>\n new CurrentTimestampExpr({\n this: seqGet(args, 0),\n sysdate: true,\n }),\n TABLE: (args: Expression[]) => new TableFromRowsExpr({\n this: seqGet(args, 0),\n }),\n TIME_ADD: buildDateTimeAdd(TimeAddExpr),\n TIMEADD: buildDateTimeAdd(TimeAddExpr),\n TIMEDIFF: buildDatediff,\n TIME_FROM_PARTS: (args: Expression[]) =>\n new TimeFromPartsExpr({\n hour: seqGet(args, 0),\n min: seqGet(args, 1),\n sec: seqGet(args, 2),\n nano: seqGet(args, 3),\n overflow: true,\n }),\n TIMEFROMPARTS: (args: Expression[]) =>\n new TimeFromPartsExpr({\n hour: seqGet(args, 0),\n min: seqGet(args, 1),\n sec: seqGet(args, 2),\n nano: seqGet(args, 3),\n overflow: true,\n }),\n TIMESTAMPADD: buildDateTimeAdd(DateAddExpr),\n TIMESTAMPDIFF: buildDatediff,\n TIMESTAMPFROMPARTS: buildTimestampFromParts,\n TIMESTAMP_FROM_PARTS: buildTimestampFromParts,\n TIMESTAMPNTZFROMPARTS: buildTimestampFromParts,\n TIMESTAMP_NTZ_FROM_PARTS: buildTimestampFromParts,\n TRUNC: (args: Expression[], {\n dialect,\n }: {dialect: Dialect}) =>\n buildTrunc(args, {\n dialect,\n dateTruncRequiresPart: false,\n }),\n TRUNCATE: (args: Expression[], {\n dialect,\n }: {dialect: Dialect}) =>\n buildTrunc(args, {\n dialect,\n dateTruncRequiresPart: false,\n }),\n TRY_DECRYPT: (args: Expression[]) =>\n new DecryptExpr({\n this: seqGet(args, 0),\n passphrase: seqGet(args, 1),\n aad: seqGet(args, 2),\n encryptionMethod: seqGet(args, 3),\n safe: true,\n }),\n TRY_DECRYPT_RAW: (args: Expression[]) =>\n new DecryptRawExpr({\n this: seqGet(args, 0),\n key: seqGet(args, 1),\n iv: seqGet(args, 2),\n aad: seqGet(args, 3),\n encryptionMethod: seqGet(args, 4),\n aead: seqGet(args, 5),\n safe: true,\n }),\n TRY_PARSE_JSON: (args: Expression[]) => new ParseJsonExpr({\n this: seqGet(args, 0),\n safe: true,\n }),\n TRY_TO_BINARY: (args: Expression[]) =>\n new ToBinaryExpr({\n this: seqGet(args, 0),\n format: seqGet(args, 1),\n safe: true,\n }),\n TRY_TO_BOOLEAN: (args: Expression[]) => new ToBooleanExpr({\n this: seqGet(args, 0),\n safe: true,\n }),\n TRY_TO_DATE: buildDatetime('TRY_TO_DATE', DataTypeExprKind.DATE, {\n safe: true,\n }),\n TRY_TO_DECIMAL: buildTryToNumber,\n TRY_TO_NUMBER: buildTryToNumber,\n TRY_TO_NUMERIC: buildTryToNumber,\n TRY_TO_DOUBLE: (args: Expression[]) =>\n new ToDoubleExpr({\n this: seqGet(args, 0),\n format: seqGet(args, 1),\n safe: true,\n }),\n TRY_TO_FILE: (args: Expression[]) =>\n new ToFileExpr({\n this: seqGet(args, 0),\n path: seqGet(args, 1),\n safe: true,\n }),\n TRY_TO_TIME: buildDatetime('TRY_TO_TIME', DataTypeExprKind.TIME, {\n safe: true,\n }),\n TRY_TO_TIMESTAMP: buildDatetime('TRY_TO_TIMESTAMP', DataTypeExprKind.TIMESTAMP, {\n safe: true,\n }),\n TRY_TO_TIMESTAMP_LTZ: buildDatetime('TRY_TO_TIMESTAMP_LTZ', DataTypeExprKind.TIMESTAMPLTZ, {\n safe: true,\n }),\n TRY_TO_TIMESTAMP_NTZ: buildDatetime('TRY_TO_TIMESTAMP_NTZ', DataTypeExprKind.TIMESTAMPNTZ, {\n safe: true,\n }),\n TRY_TO_TIMESTAMP_TZ: buildDatetime('TRY_TO_TIMESTAMP_TZ', DataTypeExprKind.TIMESTAMPTZ, {\n safe: true,\n }),\n TO_CHAR: buildTimeToStrOrToChar,\n TO_DATE: buildDatetime('TO_DATE', DataTypeExprKind.DATE),\n TO_DECIMAL: (args: Expression[]) =>\n new ToNumberExpr({\n this: seqGet(args, 0),\n format: seqGet(args, 1),\n precision: seqGet(args, 2),\n scale: seqGet(args, 3),\n }),\n TO_NUMBER: (args: Expression[]) =>\n new ToNumberExpr({\n this: seqGet(args, 0),\n format: seqGet(args, 1),\n precision: seqGet(args, 2),\n scale: seqGet(args, 3),\n }),\n TO_NUMERIC: (args: Expression[]) =>\n new ToNumberExpr({\n this: seqGet(args, 0),\n format: seqGet(args, 1),\n precision: seqGet(args, 2),\n scale: seqGet(args, 3),\n }),\n TO_TIME: buildDatetime('TO_TIME', DataTypeExprKind.TIME),\n TO_TIMESTAMP: buildDatetime('TO_TIMESTAMP', DataTypeExprKind.TIMESTAMP),\n TO_TIMESTAMP_LTZ: buildDatetime('TO_TIMESTAMP_LTZ', DataTypeExprKind.TIMESTAMPLTZ),\n TO_TIMESTAMP_NTZ: buildDatetime('TO_TIMESTAMP_NTZ', DataTypeExprKind.TIMESTAMPNTZ),\n TO_TIMESTAMP_TZ: buildDatetime('TO_TIMESTAMP_TZ', DataTypeExprKind.TIMESTAMPTZ),\n TO_VARCHAR: buildTimeToStrOrToChar,\n TO_JSON: (args: unknown[]) => JsonFormatExpr.fromArgList(args),\n VECTOR_COSINE_SIMILARITY: (args: unknown[]) => CosineDistanceExpr.fromArgList(args),\n VECTOR_INNER_PRODUCT: (args: unknown[]) => DotProductExpr.fromArgList(args),\n VECTOR_L1_DISTANCE: (args: unknown[]) => ManhattanDistanceExpr.fromArgList(args),\n VECTOR_L2_DISTANCE: (args: unknown[]) => EuclideanDistanceExpr.fromArgList(args),\n ZEROIFNULL: buildIfFromZeroifnull,\n LIKE: buildLike(LikeExpr),\n ILIKE: buildLike(ILikeExpr),\n SEARCH: buildSearch,\n SKEW: (args: unknown[]) => SkewnessExpr.fromArgList(args),\n SYSTIMESTAMP: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n WEEKISO: (args: unknown[]) => WeekOfYearExpr.fromArgList(args),\n WEEKOFYEAR: (args: unknown[]) => WeekExpr.fromArgList(args),\n };\n delete functions['PREDICT'];\n return functions;\n })();\n }\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return (() => {\n const parsers: Partial<Record<string, (this: Parser) => Expression | undefined>> = {\n ...Parser.FUNCTION_PARSERS,\n DATE_PART: function (this: Parser) {\n return (this as SnowflakeParser).parseDatePart();\n },\n DIRECTORY: function (this: Parser) {\n return (this as SnowflakeParser).parseDirectory();\n },\n OBJECT_CONSTRUCT_KEEP_NULL: function (this: Parser) {\n return (this as SnowflakeParser).parseJsonObject();\n },\n LISTAGG: function (this: Parser) {\n return this.parseStringAgg();\n },\n SEMANTIC_VIEW: function (this: Parser) {\n return (this as SnowflakeParser).parseSemanticView();\n },\n };\n delete parsers['TRIM'];\n return parsers;\n })();\n }\n\n @cache\n static get TIMESTAMPS (): Set<TokenType> {\n return new Set(\n Array.from(Parser.TIMESTAMPS).filter((t) => t !== TokenType.TIME),\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 SESSION: function (this: Parser) {\n return this.parseAlterSession();\n },\n UNSET: function (this: Parser) {\n return this.expression(SetExpr, {\n tag: this.matchTextSeq('TAG'),\n expressions: this.parseCsv(() => this.parseIdVar()),\n unset: true,\n });\n },\n };\n }\n\n @cache\n static get STATEMENT_PARSERS (): Partial<Record<TokenType, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.STATEMENT_PARSERS,\n [TokenType.GET]: function (this: Parser) {\n return (this as SnowflakeParser).parseGet();\n },\n [TokenType.PUT]: function (this: Parser) {\n return (this as SnowflakeParser).parsePut();\n },\n [TokenType.SHOW]: function (this: Parser) {\n return this.parseShow();\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 CREDENTIALS: function (this: Parser) {\n return (this as SnowflakeParser).parseCredentialsProperty();\n },\n FILE_FORMAT: function (this: Parser) {\n return (this as SnowflakeParser).parseFileFormatProperty();\n },\n LOCATION: function (this: Parser) {\n return (this as SnowflakeParser).parseLocationProperty();\n },\n TAG: function (this: Parser) {\n return (this as SnowflakeParser).parseTag();\n },\n USING: function (this: Parser) {\n return (this.matchTextSeq('TEMPLATE') || undefined)\n && this.expression(UsingTemplatePropertyExpr, {\n this: this.parseStatement(),\n });\n },\n };\n }\n\n @cache\n static get TYPE_CONVERTERS () {\n return {\n [DataTypeExprKind.DECIMAL]: buildDefaultDecimalType(38, 0),\n };\n }\n\n @cache\n static get SHOW_PARSERS () {\n return {\n 'DATABASES': showParser('DATABASES'),\n 'TERSE DATABASES': showParser('DATABASES'),\n 'SCHEMAS': showParser('SCHEMAS'),\n 'TERSE SCHEMAS': showParser('SCHEMAS'),\n 'OBJECTS': showParser('OBJECTS'),\n 'TERSE OBJECTS': showParser('OBJECTS'),\n 'TABLES': showParser('TABLES'),\n 'TERSE TABLES': showParser('TABLES'),\n 'VIEWS': showParser('VIEWS'),\n 'TERSE VIEWS': showParser('VIEWS'),\n 'PRIMARY KEYS': showParser('PRIMARY KEYS'),\n 'TERSE PRIMARY KEYS': showParser('PRIMARY KEYS'),\n 'IMPORTED KEYS': showParser('IMPORTED KEYS'),\n 'TERSE IMPORTED KEYS': showParser('IMPORTED KEYS'),\n 'UNIQUE KEYS': showParser('UNIQUE KEYS'),\n 'TERSE UNIQUE KEYS': showParser('UNIQUE KEYS'),\n 'SEQUENCES': showParser('SEQUENCES'),\n 'TERSE SEQUENCES': showParser('SEQUENCES'),\n 'STAGES': showParser('STAGES'),\n 'COLUMNS': showParser('COLUMNS'),\n 'USERS': showParser('USERS'),\n 'TERSE USERS': showParser('USERS'),\n 'FILE FORMATS': showParser('FILE FORMATS'),\n 'FUNCTIONS': showParser('FUNCTIONS'),\n 'PROCEDURES': showParser('PROCEDURES'),\n 'WAREHOUSES': showParser('WAREHOUSES'),\n };\n }\n\n @cache\n static get CONSTRAINT_PARSERS (): Partial<Record<string, (this: Parser, ...args: unknown[]) => Expression | Expression[] | undefined>> {\n return {\n ...Parser.CONSTRAINT_PARSERS,\n WITH: function (this: Parser) {\n return (this as SnowflakeParser).parseWithConstraint();\n },\n MASKING: function (this: Parser) {\n return (this as SnowflakeParser).parseWithConstraint();\n },\n PROJECTION: function (this: Parser) {\n return (this as SnowflakeParser).parseWithConstraint();\n },\n TAG: function (this: Parser) {\n return (this as SnowflakeParser).parseWithConstraint();\n },\n };\n }\n\n @cache\n static get STAGED_FILE_SINGLE_TOKENS (): Set<TokenType> {\n return new Set([\n TokenType.DOT,\n TokenType.MOD,\n TokenType.SLASH,\n ]);\n }\n\n @cache\n static get FLATTEN_COLUMNS () {\n return [\n 'SEQ',\n 'KEY',\n 'PATH',\n 'INDEX',\n 'VALUE',\n 'THIS',\n ];\n }\n\n @cache\n static get SCHEMA_KINDS () {\n return new Set([\n 'OBJECTS',\n 'TABLES',\n 'VIEWS',\n 'SEQUENCES',\n 'UNIQUE KEYS',\n 'IMPORTED KEYS',\n ]);\n }\n\n @cache\n static get NON_TABLE_CREATABLES (): Set<string> {\n return new Set([\n 'STORAGE INTEGRATION',\n 'TAG',\n 'WAREHOUSE',\n 'STREAMLIT',\n ]);\n }\n\n @cache\n static get LAMBDAS (): Partial<Record<TokenType, (this: Parser, expressions: Expression[]) => Expression>> {\n return {\n ...Parser.LAMBDAS,\n [TokenType.ARROW]: function (this: Parser, expressions: Expression[]) {\n return this.expression(LambdaExpr, {\n this: this.replaceLambda(this.parseAssignment(), expressions),\n expressions: expressions.map((e) => (e instanceof CastExpr ? e.args.this : e)),\n });\n },\n };\n }\n\n @cache\n static get COLUMN_OPERATORS (): Partial<Record<TokenType, undefined | ((this: Parser, this_?: Expression, to?: Expression) => Expression)>> {\n return {\n ...Parser.COLUMN_OPERATORS,\n [TokenType.EXCLAMATION]: function (this: Parser, thisNode?: Expression, attr?: Expression) {\n return this.expression(ModelAttributeExpr, {\n this: thisNode,\n expression: attr,\n });\n },\n };\n }\n\n parseDirectory (): DirectoryStageExpr {\n let table: ExpressionOrString | undefined = this.parseTableParts();\n\n if (table instanceof TableExpr) {\n table = table.args.this;\n }\n\n return this.expression(DirectoryStageExpr, {\n this: table,\n });\n }\n\n parseUse (): UseExpr {\n if (this.matchTextSeq([\n 'SECONDARY',\n 'ROLES',\n ])) {\n const thisNode = this.matchTexts([\n 'ALL',\n 'NONE',\n ]) && new VarExpr({\n this: this.prev?.text.toUpperCase(),\n });\n const roles = thisNode\n ? undefined\n : this.parseCsv(() => this.parseTable({\n schema: false,\n }));\n return this.expression(UseExpr, {\n kind: 'SECONDARY ROLES',\n this: thisNode || undefined,\n expressions: roles,\n });\n }\n\n return super.parseUse();\n }\n\n negateRange (thisNode?: Expression): Expression | undefined {\n if (!thisNode) {\n return thisNode;\n }\n\n const query = thisNode.getArgKey('query');\n if (thisNode instanceof InExpr && query instanceof QueryExpr) {\n /**\n * Snowflake treats `value NOT IN (subquery)` as `VALUE <> ALL (subquery)`, so\n * we do this conversion here to avoid parsing it into `NOT value IN (subquery)`\n * which can produce different results.\n */\n return this.expression(NeqExpr, {\n this: thisNode.args.this,\n expression: new AllExpr({\n this: query.unnest(),\n }),\n });\n }\n\n return this.expression(NotExpr, {\n this: thisNode,\n });\n }\n\n parseTag (): TagsExpr {\n return this.expression(TagsExpr, {\n expressions: this.parseWrappedCsv(() => this.parseProperty() as Expression | undefined),\n });\n }\n\n parseWithConstraint (): Expression | undefined {\n if (this.prev?.tokenType !== TokenType.WITH) {\n this.retreat(this.index - 1);\n }\n\n if (this.matchTextSeq([\n 'MASKING',\n 'POLICY',\n ])) {\n const policy = this.parseColumn();\n return this.expression(MaskingPolicyColumnConstraintExpr, {\n this: policy instanceof ColumnExpr ? policy.toDot() : policy,\n expressions: this.match(TokenType.USING) && this.parseWrappedCsv(() => this.parseIdVar()),\n });\n }\n\n if (this.matchTextSeq([\n 'PROJECTION',\n 'POLICY',\n ])) {\n const policy = this.parseColumn();\n return this.expression(ProjectionPolicyColumnConstraintExpr, {\n this: policy instanceof ColumnExpr ? policy.toDot() : policy,\n });\n }\n\n if (this.match(TokenType.TAG)) {\n return this.parseTag();\n }\n\n return undefined;\n }\n\n parseWithProperty (): Expression | Expression[] | undefined {\n if (this.match(TokenType.TAG)) {\n return this.parseTag();\n }\n\n return super.parseWithProperty();\n }\n\n parseCreate (): CreateExpr | CommandExpr {\n const expression = super.parseCreate();\n if (\n expression instanceof CreateExpr\n && (this.constructor as typeof SnowflakeParser).NON_TABLE_CREATABLES.has(expression.args.kind ?? '')\n ) {\n // Replace the Table node with the enclosed Identifier\n const tableNode = expression.args.this;\n if (tableNode instanceof TableExpr) {\n tableNode.replace(tableNode.args.this);\n }\n }\n\n return expression;\n }\n\n parseDatePart (): Expression | undefined {\n const thisNode = this.parseVar() || this.parseType();\n\n if (!thisNode) {\n return undefined;\n }\n\n // Handle both syntaxes: DATE_PART(part, expr) and DATE_PART(part FROM expr)\n const expression = this.matchSet([\n TokenType.FROM,\n TokenType.COMMA,\n ]) && this.parseBitwise();\n\n return this.expression(ExtractExpr, {\n this: mapDatePart(thisNode, {\n dialect: this.dialect,\n }),\n expression: expression || undefined,\n });\n }\n\n parseBracketKeyValue (options: {isMap?: boolean} = {}): Expression | undefined {\n const {\n isMap = false,\n } = options;\n\n if (isMap) {\n return this.parseSlice(this.parseString()) || this.parseAssignment();\n }\n\n return this.parseSlice(this.parseAlias(this.parseAssignment(), {\n explicit: true,\n }));\n }\n\n parseLateral (): LateralExpr | undefined {\n const lateral = super.parseLateral();\n if (!lateral) {\n return lateral;\n }\n\n if (lateral.args.this instanceof ExplodeExpr) {\n const tableAlias = lateral.args.alias;\n const columns = (this.constructor as typeof SnowflakeParser).FLATTEN_COLUMNS.map((col) =>\n toIdentifier(col));\n\n if (tableAlias && !tableAlias.getArgKey('columns')) {\n tableAlias.setArgKey('columns', columns);\n } else if (!tableAlias) {\n alias(lateral, '_flattened', {\n table: columns,\n copy: false,\n });\n }\n }\n\n return lateral;\n }\n\n parseTableParts (options: {schema?: boolean;\n isDbReference?: boolean;\n wildcard?: boolean;} = {}): TableExpr {\n const {\n schema = false, isDbReference = false,\n } = options;\n\n let table: Expression | undefined;\n\n if (this.match(TokenType.STRING, {\n advance: false,\n })) {\n table = this.parseString();\n } else if (this.matchTextSeq('@', {\n advance: false,\n })) {\n table = this.parseLocationPath();\n }\n\n if (table) {\n let fileFormat: Expression | undefined;\n let pattern: Expression | undefined;\n\n const wrapped = this.match(TokenType.L_PAREN);\n while (this.curr && wrapped && !this.match(TokenType.R_PAREN)) {\n if (this.matchTextSeq([\n 'FILE_FORMAT',\n '=>',\n ])) {\n fileFormat = this.parseString() || super.parseTableParts({\n isDbReference,\n });\n } else if (this.matchTextSeq([\n 'PATTERN',\n '=>',\n ])) {\n pattern = this.parseString();\n } else {\n break;\n }\n\n this.match(TokenType.COMMA);\n }\n\n return this.expression(TableExpr, {\n this: table,\n format: fileFormat,\n pattern,\n });\n }\n\n return super.parseTableParts({\n schema,\n isDbReference,\n });\n }\n\n parseTable (options: {\n schema?: boolean;\n joins?: boolean;\n aliasTokens?: Set<TokenType>;\n parseBracket?: boolean;\n isDbReference?: boolean;\n parsePartition?: boolean;\n consumePipe?: boolean;\n } = {}): Expression | undefined {\n let table = super.parseTable(options);\n\n if (table instanceof TableExpr && table.args.this instanceof TableFromRowsExpr) {\n const tableFromRows = table.args.this;\n for (const arg of TableFromRowsExpr.availableArgs) {\n if (arg !== 'this') {\n tableFromRows.setArgKey(arg, table.getArgKey(arg));\n }\n }\n\n table = tableFromRows;\n }\n\n return table;\n }\n\n parseIdVar (options: {anyToken?: boolean;\n tokens?: Set<TokenType>;} = {}): Expression | undefined {\n const {\n anyToken = true, tokens,\n } = options;\n\n if (this.matchTextSeq([\n 'IDENTIFIER',\n '(',\n ])) {\n const identifier = super.parseIdVar({\n anyToken,\n tokens,\n }) || this.parseString();\n this.matchRParen();\n return this.expression(AnonymousExpr, {\n this: 'IDENTIFIER',\n expressions: [\n identifier,\n ],\n });\n }\n\n return super.parseIdVar({\n anyToken,\n tokens,\n });\n }\n\n parseShowSnowflake (thisNode: string): ShowExpr {\n let scope: Expression | undefined;\n let scopeKind: string | undefined;\n\n // will identify SHOW TERSE SCHEMAS but not SHOW TERSE PRIMARY KEYS\n // which is syntactically valid but has no effect on the output\n const terse = this.tokens[this.index - 2].text.toUpperCase() === 'TERSE';\n\n const history = this.matchTextSeq('HISTORY');\n\n const like = this.match(TokenType.LIKE) ? this.parseString() : undefined;\n\n if (this.match(TokenType.IN)) {\n if (this.matchTextSeq('ACCOUNT')) {\n scopeKind = 'ACCOUNT';\n } else if (this.matchTextSeq('CLASS')) {\n scopeKind = 'CLASS';\n scope = this.parseTableParts();\n } else if (this.matchTextSeq('APPLICATION')) {\n scopeKind = 'APPLICATION';\n if (this.matchTextSeq('PACKAGE')) {\n scopeKind += ' PACKAGE';\n }\n scope = this.parseTableParts();\n } else if (this.matchSet((this.constructor as typeof SnowflakeParser).DB_CREATABLES)) {\n scopeKind = this.prev?.text.toUpperCase();\n if (this.curr) {\n scope = this.parseTableParts();\n }\n } else if (this.curr) {\n scopeKind = (this.constructor as typeof SnowflakeParser).SCHEMA_KINDS.has(thisNode) ? 'SCHEMA' : 'TABLE';\n scope = this.parseTableParts();\n }\n }\n\n return this.expression(ShowExpr, {\n terse,\n this: thisNode,\n history,\n like,\n scope,\n scopeKind,\n startsWith: this.matchTextSeq([\n 'STARTS',\n 'WITH',\n ])\n ? this.parseString()\n : undefined,\n limit: this.parseLimit(),\n from: this.match(TokenType.FROM) ? this.parseString() : undefined,\n privileges: this.matchTextSeq([\n 'WITH',\n 'PRIVILEGES',\n ])\n ? this.parseCsv(() => this.parseVar({\n anyToken: true,\n upper: true,\n }))\n : undefined,\n });\n }\n\n parsePut (): PutExpr | CommandExpr {\n if (this.curr?.tokenType !== TokenType.STRING) {\n return this.parseAsCommand(this.prev);\n }\n\n return this.expression(PutExpr, {\n this: this.parseString(),\n target: this.parseLocationPath(),\n properties: this.parseProperties(),\n });\n }\n\n parseGet (): Expression | undefined {\n const start = this.prev;\n\n // If we detect GET( then we need to parse a function, not a statement\n if (this.match(TokenType.L_PAREN)) {\n this.retreat(this.index - 2);\n return this.parseExpression();\n }\n\n const target = this.parseLocationPath();\n\n // Parse as command if unquoted file path\n if (this.curr?.tokenType === TokenType.URI_START) {\n return this.parseAsCommand(start);\n }\n\n return this.expression(GetExpr, {\n this: this.parseString(),\n target,\n properties: this.parseProperties(),\n });\n }\n\n parseLocationProperty (): LocationPropertyExpr {\n this.match(TokenType.EQ);\n return this.expression(LocationPropertyExpr, {\n this: this.parseLocationPath(),\n });\n }\n\n parseFileLocation (): Expression | undefined {\n // Parse either a subquery or a staged file\n return this.match(TokenType.L_PAREN, {\n advance: false,\n })\n ? this.parseSelect({\n table: true,\n parseSubqueryAlias: false,\n })\n : this.parseTableParts();\n }\n\n parseLocationPath (): VarExpr {\n const start = this.curr;\n this.advanceAny({\n ignoreReserved: true,\n });\n\n // We avoid consuming a comma token because external tables like @foo and @bar\n // can be joined in a query with a comma separator, as well as closing paren\n // in case of subqueries\n while (\n this.isConnected()\n && !this.matchSet([\n TokenType.COMMA,\n TokenType.L_PAREN,\n TokenType.R_PAREN,\n ], {\n advance: false,\n })\n ) {\n this.advanceAny({\n ignoreReserved: true,\n });\n }\n\n return new VarExpr({\n this: this.findSql(start, this.prev),\n });\n }\n\n parseLambdaArg (): Expression | undefined {\n const thisNode = super.parseLambdaArg();\n\n if (!thisNode) {\n return thisNode;\n }\n\n const typ = this.parseTypes();\n\n if (typ) {\n return this.expression(CastExpr, {\n this: thisNode,\n to: typ,\n });\n }\n\n return thisNode;\n }\n\n parseForeignKey (): ForeignKeyExpr {\n // inlineFK, the REFERENCES columns are implied\n if (this.match(TokenType.REFERENCES, {\n advance: false,\n })) {\n return this.expression(ForeignKeyExpr);\n }\n\n // outoflineFK, explicitly names the columns\n return super.parseForeignKey();\n }\n\n parseFileFormatProperty (): FileFormatPropertyExpr {\n this.match(TokenType.EQ);\n let expressions: Expression[];\n\n if (this.match(TokenType.L_PAREN, {\n advance: false,\n })) {\n expressions = this.parseWrappedOptions();\n } else {\n expressions = [\n this.parseFormatName(),\n ];\n }\n\n return this.expression(FileFormatPropertyExpr, {\n expressions,\n });\n }\n\n parseCredentialsProperty (): CredentialsPropertyExpr {\n return this.expression(CredentialsPropertyExpr, {\n expressions: this.parseWrappedOptions(),\n });\n }\n\n parseSemanticView (): SemanticViewExpr {\n const kwargs: Record<string, unknown> = {\n this: this.parseTableParts(),\n };\n\n while (this.curr && !this.match(TokenType.R_PAREN, {\n advance: false,\n })) {\n if (this.matchTexts([\n 'DIMENSIONS',\n 'METRICS',\n 'FACTS',\n ])) {\n const keyword = this.prev?.text.toLowerCase() ?? '';\n kwargs[keyword] = this.parseCsv(() => this.parseDisjunction());\n } else if (this.matchTextSeq('WHERE')) {\n kwargs['where'] = this.parseExpression();\n } else {\n this.raiseError('Expecting ) or encountered unexpected keyword');\n break;\n }\n }\n\n return this.expression(SemanticViewExpr, kwargs);\n }\n\n parseSet (options: {\n unset?: boolean;\n tag?: boolean;\n } = {}): SetExpr | CommandExpr {\n const {\n unset = false, tag = false,\n } = options;\n const setNode = super.parseSet({\n unset,\n tag,\n });\n\n if (setNode instanceof SetExpr) {\n for (const expr of setNode.args.expressions || [\n ]) {\n if (expr instanceof SetItemExpr) {\n expr.setArgKey('kind', 'VARIABLE');\n }\n }\n }\n return setNode;\n }\n\n parseWindow (thisNode?: Expression, options: {alias?: boolean} = {}): Expression | undefined {\n if (thisNode instanceof NthValueExpr) {\n if (this.matchTextSeq('FROM')) {\n if (this.matchTexts([\n 'FIRST',\n 'LAST',\n ])) {\n const fromFirst = this.prev?.text.toUpperCase() === 'FIRST';\n thisNode.setArgKey('fromFirst', fromFirst);\n }\n }\n }\n\n return super.parseWindow(thisNode, options);\n }\n}\n\nclass SnowflakeGenerator 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 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 PARAMETER_TOKEN = '$';\n static MATCHED_BY_SOURCE = false;\n static SINGLE_STRING_INTERVAL = true;\n static JOIN_HINTS = false;\n static TABLE_HINTS = false;\n static QUERY_HINTS = false;\n static AGGREGATE_FILTER_SUPPORTED = false;\n static SUPPORTS_TABLE_COPY = false;\n static COLLATE_IS_FUNC = true;\n static LIMIT_ONLY_LITERALS = true;\n static JSON_KEY_VALUE_PAIR_SEP = ',';\n static INSERT_OVERWRITE = ' OVERWRITE INTO';\n @cache\n static get STRUCT_DELIMITER () {\n return [\n '(',\n ')',\n ];\n }\n\n static COPY_PARAMS_ARE_WRAPPED = false;\n static COPY_PARAMS_EQ_REQUIRED = true;\n static STAR_EXCEPT = 'EXCLUDE';\n static SUPPORTS_EXPLODING_PROJECTIONS = false;\n static ARRAY_CONCAT_IS_VAR_LEN = false;\n static SUPPORTS_CONVERT_TIMEZONE = true;\n static EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = false;\n static SUPPORTS_MEDIAN = true;\n static ARRAY_SIZE_NAME = 'ARRAY_SIZE';\n static SUPPORTS_DECODE_CASE = true;\n static IS_BOOL_ALLOWED = false;\n static DIRECTED_JOINS = true;\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 ApproxDistinctExpr,\n renameFunc('APPROX_COUNT_DISTINCT'),\n ],\n [\n ArgMaxExpr,\n renameFunc('MAX_BY'),\n ],\n [\n ArgMinExpr,\n renameFunc('MIN_BY'),\n ],\n [\n ArrayExpr,\n preprocess([\n inheritStructFieldNames,\n ]),\n ],\n [\n ArrayConcatExpr,\n arrayConcatSql('ARRAY_CAT'),\n ],\n [\n ArrayAppendExpr,\n arrayAppendSql('ARRAY_APPEND'),\n ],\n [\n ArrayPrependExpr,\n arrayAppendSql('ARRAY_PREPEND'),\n ],\n [\n ArrayContainsExpr,\n function (this: Generator, e: ArrayContainsExpr) {\n return this.func('ARRAY_CONTAINS', [\n e.args.ensureVariant === false\n ? e.args.expression\n : new CastExpr({\n this: e.args.expression,\n to: DataTypeExpr.build(DataTypeExprKind.VARIANT),\n }),\n e.args.this,\n ]);\n },\n ],\n [\n ArrayIntersectExpr,\n renameFunc('ARRAY_INTERSECTION'),\n ],\n [\n AtTimeZoneExpr,\n function (this: Generator, e: AtTimeZoneExpr) {\n return this.func('CONVERT_TIMEZONE', [\n e.args.zone,\n e.args.this,\n ]);\n },\n ],\n [\n BitwiseOrExpr,\n renameFunc('BITOR'),\n ],\n [\n BitwiseXorExpr,\n renameFunc('BITXOR'),\n ],\n [\n BitwiseAndExpr,\n renameFunc('BITAND'),\n ],\n [\n BitwiseAndAggExpr,\n renameFunc('BITANDAGG'),\n ],\n [\n BitwiseOrAggExpr,\n renameFunc('BITORAGG'),\n ],\n [\n BitwiseXorAggExpr,\n renameFunc('BITXORAGG'),\n ],\n [\n BitwiseNotExpr,\n renameFunc('BITNOT'),\n ],\n [\n BitwiseLeftShiftExpr,\n renameFunc('BITSHIFTLEFT'),\n ],\n [\n BitwiseRightShiftExpr,\n renameFunc('BITSHIFTRIGHT'),\n ],\n [\n CreateExpr,\n preprocess([\n flattenStructuredTypesUnlessIceberg,\n ]),\n ],\n [\n CurrentTimestampExpr,\n function (this: Generator, e: CurrentTimestampExpr) {\n return e.args.sysdate\n ? this.func('SYSDATE', [\n ])\n : this.functionFallbackSql(e);\n },\n ],\n [\n LocaltimeExpr,\n function (this: Generator, e: LocaltimeExpr) {\n return e.args.this\n ? this.func('CURRENT_TIME', [\n e.args.this,\n ])\n : 'CURRENT_TIME';\n },\n ],\n [\n LocaltimestampExpr,\n function (this: Generator, e: LocaltimestampExpr) {\n return e.args.this\n ? this.func('CURRENT_TIMESTAMP', [\n e.args.this,\n ])\n : 'CURRENT_TIMESTAMP';\n },\n ],\n [\n DateAddExpr,\n dateDeltaSql('DATEADD'),\n ],\n [\n DateDiffExpr,\n dateDeltaSql('DATEDIFF'),\n ],\n [\n DatetimeAddExpr,\n dateDeltaSql('TIMESTAMPADD'),\n ],\n [\n DatetimeDiffExpr,\n timestampDiffSql,\n ],\n [\n DateStrToDateExpr,\n dateStrToDateSql,\n ],\n [\n DecryptExpr,\n function (this: Generator, e: DecryptExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}DECRYPT`, [\n e.args.this,\n e.args.passphrase,\n e.args.aad,\n e.args.encryptionMethod,\n ]);\n },\n ],\n [\n DecryptRawExpr,\n function (this: Generator, e: DecryptRawExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}DECRYPT_RAW`, [\n e.args.this,\n e.args.key,\n e.args.iv,\n e.args.aad,\n e.args.encryptionMethod,\n e.args.aead as Expression | undefined,\n ]);\n },\n ],\n [\n DayOfMonthExpr,\n renameFunc('DAYOFMONTH'),\n ],\n [\n DayOfWeekExpr,\n renameFunc('DAYOFWEEK'),\n ],\n [\n DayOfWeekIsoExpr,\n renameFunc('DAYOFWEEKISO'),\n ],\n [\n DayOfYearExpr,\n renameFunc('DAYOFYEAR'),\n ],\n [\n DotProductExpr,\n renameFunc('VECTOR_INNER_PRODUCT'),\n ],\n [\n ExplodeExpr,\n renameFunc('FLATTEN'),\n ],\n [\n ExtractExpr,\n function (this: Generator, e: ExtractExpr) {\n return this.func('DATE_PART', [\n mapDatePart(e.args.this, {\n dialect: this.dialect,\n }),\n e.args.expression,\n ]);\n },\n ],\n [\n CosineDistanceExpr,\n renameFunc('VECTOR_COSINE_SIMILARITY'),\n ],\n [\n EuclideanDistanceExpr,\n renameFunc('VECTOR_L2_DISTANCE'),\n ],\n [\n FileFormatPropertyExpr,\n function (this: Generator, e: FileFormatPropertyExpr) {\n return `FILE_FORMAT=(${this.expressions(e, {\n key: 'expressions',\n sep: ' ',\n })})`;\n },\n ],\n [\n FromTimeZoneExpr,\n function (this: Generator, e: FromTimeZoneExpr) {\n return this.func('CONVERT_TIMEZONE', [\n e.args.zone,\n LiteralExpr.string('UTC'),\n e.args.this,\n ]);\n },\n ],\n [\n GenerateSeriesExpr,\n function (this: Generator, e: GenerateSeriesExpr) {\n return this.func('ARRAY_GENERATE_RANGE', [\n e.args.start,\n e.args.end?.add(1),\n e.args.step,\n ]);\n },\n ],\n [\n GetExtractExpr,\n renameFunc('GET'),\n ],\n [\n GroupConcatExpr,\n function (this: Generator, e: GroupConcatExpr) {\n return groupConcatSql.call(this, e, {\n sep: '',\n });\n },\n ],\n [\n IfExpr,\n ifSql('IFF', 'NULL'),\n ],\n [\n JsonExtractArrayExpr,\n jsonExtractValueArraySql,\n ],\n [\n JsonExtractScalarExpr,\n function (this: Generator, e: JsonExtractScalarExpr) {\n return this.func('JSON_EXTRACT_PATH_TEXT', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n JsonKeysExpr,\n renameFunc('OBJECT_KEYS'),\n ],\n [\n JsonObjectExpr,\n function (this: Generator, e: JsonObjectExpr) {\n return this.func('OBJECT_CONSTRUCT_KEEP_NULL', e.args.expressions || [\n ]);\n },\n ],\n [\n JsonPathRootExpr,\n () => '',\n ],\n [\n JsonValueArrayExpr,\n jsonExtractValueArraySql,\n ],\n [\n LevenshteinExpr,\n function (this: Generator, e: LevenshteinExpr) {\n unsupportedArgs.call(this, e, 'insCost', 'delCost', 'subCost');\n return renameFunc('EDITDISTANCE').call(this, e);\n },\n ],\n [\n LocationPropertyExpr,\n function (this: Generator, e: LocationPropertyExpr) {\n return `LOCATION=${this.sql(e, 'this')}`;\n },\n ],\n [\n LogicalAndExpr,\n renameFunc('BOOLAND_AGG'),\n ],\n [\n LogicalOrExpr,\n renameFunc('BOOLOR_AGG'),\n ],\n [\n MapExpr,\n function (this: Generator, e: MapExpr) {\n return varMapSql.call(this, e, 'OBJECT_CONSTRUCT');\n },\n ],\n [\n ManhattanDistanceExpr,\n renameFunc('VECTOR_L1_DISTANCE'),\n ],\n [\n MakeIntervalExpr,\n noMakeIntervalSql,\n ],\n [\n MaxExpr,\n maxOrGreatest,\n ],\n [\n MinExpr,\n minOrLeast,\n ],\n [\n ParseJsonExpr,\n function (this: Generator, e: ParseJsonExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}PARSE_JSON`, [\n e.args.this,\n ]);\n },\n ],\n [\n ToBinaryExpr,\n function (this: Generator, e: ToBinaryExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}TO_BINARY`, [\n e.args.this,\n e.args.format,\n ]);\n },\n ],\n [\n ToBooleanExpr,\n function (this: Generator, e: ToBooleanExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}TO_BOOLEAN`, [\n e.args.this,\n ]);\n },\n ],\n [\n ToDoubleExpr,\n function (this: Generator, e: ToDoubleExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}TO_DOUBLE`, [\n e.args.this,\n e.args.format,\n ]);\n },\n ],\n [\n ToFileExpr,\n function (this: Generator, e: ToFileExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}TO_FILE`, [\n e.args.this,\n e.args.path,\n ]);\n },\n ],\n [\n ToNumberExpr,\n function (this: Generator, e: ToNumberExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}TO_NUMBER`, [\n e.args.this,\n e.args.format,\n e.args.precision,\n e.args.scale,\n ]);\n },\n ],\n [\n JsonFormatExpr,\n renameFunc('TO_JSON'),\n ],\n [\n PartitionedByPropertyExpr,\n function (this: Generator, e: PartitionedByPropertyExpr) {\n return `PARTITION BY ${this.sql(e, 'this')}`;\n },\n ],\n [\n PercentileContExpr,\n preprocess([\n addWithinGroupForPercentiles,\n ]),\n ],\n [\n PercentileDiscExpr,\n preprocess([\n addWithinGroupForPercentiles,\n ]),\n ],\n [\n PivotExpr,\n preprocess([\n unqualifyPivotColumns,\n ]),\n ],\n [\n RegexpExtractExpr,\n regexpExtractSql,\n ],\n [\n RegexpExtractAllExpr,\n regexpExtractSql,\n ],\n [\n RegexpILikeExpr,\n regexpILikeSql,\n ],\n [\n RandExpr,\n renameFunc('RANDOM'),\n ],\n [\n SelectExpr,\n preprocess([\n eliminateWindowClause,\n eliminateDistinctOn,\n explodeProjectionToUnnest(),\n eliminateSemiAndAntiJoins,\n transformGenerateDateArray,\n qualifyUnnestedColumns,\n eliminateDotVariantLookup,\n ]),\n ],\n [\n ShaExpr,\n renameFunc('SHA1'),\n ],\n [\n Sha1DigestExpr,\n renameFunc('SHA1_BINARY'),\n ],\n [\n Md5DigestExpr,\n renameFunc('MD5_BINARY'),\n ],\n [\n Md5NumberLower64Expr,\n renameFunc('MD5_NUMBER_LOWER64'),\n ],\n [\n Md5NumberUpper64Expr,\n renameFunc('MD5_NUMBER_UPPER64'),\n ],\n [\n LowerHexExpr,\n renameFunc('TO_CHAR'),\n ],\n [\n SortArrayExpr,\n renameFunc('ARRAY_SORT'),\n ],\n [\n SkewnessExpr,\n renameFunc('SKEW'),\n ],\n [\n StarMapExpr,\n renameFunc('OBJECT_CONSTRUCT'),\n ],\n [\n StartsWithExpr,\n renameFunc('STARTSWITH'),\n ],\n [\n EndsWithExpr,\n renameFunc('ENDSWITH'),\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr) {\n return strPositionSql.call(this, e, {\n funcName: 'CHARINDEX',\n supportsPosition: true,\n });\n },\n ],\n [\n StrToDateExpr,\n function (this: Generator, e: StrToDateExpr) {\n return this.func('DATE', [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n StringToArrayExpr,\n renameFunc('STRTOK_TO_ARRAY'),\n ],\n [\n StuffExpr,\n renameFunc('INSERT'),\n ],\n [\n StPointExpr,\n renameFunc('ST_MAKEPOINT'),\n ],\n [\n TimeAddExpr,\n dateDeltaSql('TIMEADD'),\n ],\n [\n TimeSliceExpr,\n function (this: Generator, e: TimeSliceExpr) {\n return this.func('TIME_SLICE', [\n e.args.this,\n e.args.expression,\n unitToStr(e),\n e.args.kind,\n ]);\n },\n ],\n [\n TimestampExpr,\n noTimestampSql,\n ],\n [\n TimestampAddExpr,\n dateDeltaSql('TIMESTAMPADD'),\n ],\n [\n TimestampDiffExpr,\n function (this: Generator, e: TimestampDiffExpr) {\n return this.func('TIMESTAMPDIFF', [\n e.args.unit,\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n TimestampTruncExpr,\n timestampTruncSql(),\n ],\n [\n TimeStrToTimeExpr,\n timeStrToTimeSql,\n ],\n [\n TimeToUnixExpr,\n function (this: Generator, e: TimeToUnixExpr) {\n return `EXTRACT(epoch_second FROM ${this.sql(e, 'this')})`;\n },\n ],\n [\n ToArrayExpr,\n renameFunc('TO_ARRAY'),\n ],\n [\n ToCharExpr,\n function (this: Generator, e: ToCharExpr) {\n return this.functionFallbackSql(e);\n },\n ],\n [\n TsOrDsAddExpr,\n dateDeltaSql('DATEADD', {\n cast: true,\n }),\n ],\n [\n TsOrDsDiffExpr,\n dateDeltaSql('DATEDIFF'),\n ],\n [\n TsOrDsToDateExpr,\n function (this: Generator, e: TsOrDsToDateExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}TO_DATE`, [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n TsOrDsToTimeExpr,\n function (this: Generator, e: TsOrDsToTimeExpr) {\n return this.func(`${e.args.safe ? 'TRY_' : ''}TO_TIME`, [\n e.args.this,\n this.formatTime(e),\n ]);\n },\n ],\n [\n UnhexExpr,\n renameFunc('HEX_DECODE_BINARY'),\n ],\n [\n UnixToTimeExpr,\n function (this: Generator, e: UnixToTimeExpr) {\n return this.func('TO_TIMESTAMP', [\n e.args.this,\n e.args.scale,\n ]);\n },\n ],\n [\n UuidExpr,\n renameFunc('UUID_STRING'),\n ],\n [\n VarMapExpr,\n function (this: Generator, e: VarMapExpr) {\n return varMapSql.call(this, e, 'OBJECT_CONSTRUCT');\n },\n ],\n [\n BoolandExpr,\n renameFunc('BOOLAND'),\n ],\n [\n BoolorExpr,\n renameFunc('BOOLOR'),\n ],\n [\n WeekOfYearExpr,\n renameFunc('WEEKISO'),\n ],\n [\n YearOfWeekExpr,\n renameFunc('YEAROFWEEK'),\n ],\n [\n YearOfWeekIsoExpr,\n renameFunc('YEAROFWEEKISO'),\n ],\n [\n XorExpr,\n renameFunc('BOOLXOR'),\n ],\n [\n ByteLengthExpr,\n renameFunc('OCTET_LENGTH'),\n ],\n [\n FlattenExpr,\n renameFunc('ARRAY_FLATTEN'),\n ],\n [\n ArrayConcatAggExpr,\n function (this: Generator, e: ArrayConcatAggExpr) {\n return this.func('ARRAY_FLATTEN', [\n new ArrayAggExpr({\n this: e.args.this,\n }),\n ]);\n },\n ],\n [\n Sha2DigestExpr,\n function (this: Generator, e: Sha2DigestExpr) {\n return this.func('SHA2_BINARY', [\n e.args.this,\n e.args.length || LiteralExpr.number(256),\n ]);\n },\n ],\n ]);\n return transforms;\n }\n\n nthValueSql (expression: NthValueExpr): string {\n let result = this.func('NTH_VALUE', [\n expression.args.this,\n expression.args.offset,\n ]);\n const fromFirst = expression.args.fromFirst;\n\n if (fromFirst !== undefined) {\n result += fromFirst ? ' FROM FIRST' : ' FROM LAST';\n }\n\n return result;\n }\n\n @cache\n static get SUPPORTED_JSON_PATH_PARTS (): Set<typeof Expression> {\n return new Set([\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n ]);\n }\n\n @cache\n static get TYPE_MAPPING () {\n return new Map([\n ...Generator.TYPE_MAPPING,\n [\n DataTypeExprKind.BIGDECIMAL,\n 'DOUBLE',\n ],\n [\n DataTypeExprKind.NESTED,\n 'OBJECT',\n ],\n [\n DataTypeExprKind.STRUCT,\n 'OBJECT',\n ],\n [\n DataTypeExprKind.TEXT,\n 'VARCHAR',\n ],\n ]);\n }\n\n @cache\n static get TOKEN_MAPPING (): Partial<Record<TokenType, string>> {\n return {\n [TokenType.AUTO_INCREMENT]: 'AUTOINCREMENT',\n };\n }\n\n @cache\n static get PROPERTIES_LOCATION () {\n return new Map([\n ...Generator.PROPERTIES_LOCATION,\n [\n CredentialsPropertyExpr,\n PropertiesLocation.POST_WITH,\n ],\n [\n LocationPropertyExpr,\n PropertiesLocation.POST_WITH,\n ],\n [\n PartitionedByPropertyExpr,\n PropertiesLocation.POST_SCHEMA,\n ],\n [\n SetPropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n [\n VolatilePropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n ]);\n }\n\n @cache\n static get UNSUPPORTED_VALUES_EXPRESSIONS (): Set<typeof Expression> {\n return new Set([\n MapExpr,\n StarMapExpr,\n StructExpr,\n VarMapExpr,\n ]);\n }\n\n @cache\n static get RESPECT_IGNORE_NULLS_UNSUPPORTED_EXPRESSIONS (): (typeof Expression)[] {\n return [\n ArrayAggExpr,\n ];\n }\n\n withProperties (properties: PropertiesExpr): string {\n return this.properties(properties, {\n wrapped: false,\n prefix: this.sep(''),\n sep: ' ',\n });\n }\n\n valuesSql (expression: ValuesExpr, options: {valuesAsTable?: boolean} = {}): string {\n let {\n valuesAsTable = true,\n } = options;\n if (expression.find((this._constructor as typeof SnowflakeGenerator).UNSUPPORTED_VALUES_EXPRESSIONS)) {\n valuesAsTable = false;\n }\n\n return super.valuesSql(expression, {\n valuesAsTable,\n });\n }\n\n dataTypeSql (expression: DataTypeExpr): string {\n // Check if this is a FLOAT type nested inside a VECTOR type\n // VECTOR only accepts FLOAT (not DOUBLE), INT, and STRING as element types\n if (expression.isType(DataTypeExprKind.DOUBLE)) {\n const parent = expression.parent;\n if (parent instanceof DataTypeExpr && parent.isType(DataTypeExprKind.VECTOR)) {\n return 'FLOAT';\n }\n }\n\n const expressions = expression.args.expressions;\n if (expressions && expression.isType(DataTypeExpr.STRUCT_TYPES)) {\n for (const fieldType of expressions) {\n // The correct syntax is OBJECT [ (<key> <value_type [NOT NULL] [, ...]) ]\n if (fieldType instanceof DataTypeExpr) {\n return 'OBJECT';\n }\n if (fieldType instanceof ColumnDefExpr && fieldType.args.this instanceof LiteralExpr && fieldType.args.this.isString) {\n fieldType.args.this.replace(toIdentifier(fieldType.name, {\n quoted: true,\n }));\n }\n }\n }\n\n return super.dataTypeSql(expression);\n }\n\n toNumberSql (expression: ToNumberExpr): string {\n return this.func('TO_NUMBER', [\n expression.args.this,\n expression.args.format,\n expression.args.precision,\n expression.args.scale,\n ]);\n }\n\n timestampFromPartsSql (expression: TimestampFromPartsExpr): string {\n const milli = expression.args.milli;\n if (milli !== undefined) {\n const milliToNano = milli.pop().mul(LiteralExpr.number(1000000));\n expression.setArgKey('nano', milliToNano);\n }\n\n return renameFunc('TIMESTAMP_FROM_PARTS').call(this, expression);\n }\n\n castSql (expression: CastExpr, options: {safePrefix?: string} = {}): string {\n if (expression.isType(DataTypeExprKind.GEOGRAPHY)) {\n return this.func('TO_GEOGRAPHY', [\n expression.args.this,\n ]);\n }\n if (expression.isType(DataTypeExprKind.GEOMETRY)) {\n return this.func('TO_GEOMETRY', [\n expression.args.this,\n ]);\n }\n\n return super.castSql(expression, options);\n }\n\n tryCastSql (expression: TryCastExpr): string {\n let value = expression.args.this;\n\n if (value !== undefined && !value.type) {\n value = annotateTypes(value, {\n dialect: this.dialect,\n });\n }\n\n // Snowflake requires that TRY_CAST's value be a string\n if (expression.args.requiresString || value?.isType(DataTypeExpr.TEXT_TYPES)) {\n return super.tryCastSql(expression);\n }\n\n return this.castSql(expression as CastExpr);\n }\n\n logSql (expression: LogExpr): string {\n if (!expression.args.expression) {\n return this.func('LN', [\n expression.args.this,\n ]);\n }\n\n return super.logSql(expression);\n }\n\n greatestSql (expression: GreatestExpr): string {\n const name = expression.args.ignoreNulls ? 'GREATEST_IGNORE_NULLS' : 'GREATEST';\n return this.func(name, [\n expression.args.this,\n ...(expression.args.expressions || [\n ]),\n ]);\n }\n\n leastSql (expression: LeastExpr): string {\n const name = expression.args.ignoreNulls ? 'LEAST_IGNORE_NULLS' : 'LEAST';\n return this.func(name, [\n expression.args.this,\n ...(expression.args.expressions || [\n ]),\n ]);\n }\n\n generatorSql (expression: GeneratorExpr): string {\n const args: Expression[] = [\n ];\n const rowcount = expression.args.rowcount;\n const timeLimit = expression.args.timeLimit;\n\n if (rowcount) {\n args.push(new KwargExpr({\n this: new VarExpr({\n this: 'ROWCOUNT',\n }),\n expression: rowcount,\n }));\n }\n if (timeLimit) {\n args.push(new KwargExpr({\n this: new VarExpr({\n this: 'TIMELIMIT',\n }),\n expression: timeLimit,\n }));\n }\n\n return this.func('GENERATOR', args);\n }\n\n unnestSql (expression: UnnestExpr): string {\n const unnestAlias = expression.args.alias;\n const offset = expression.args.offset;\n\n const unnestAliasColumns = narrowInstanceOf(unnestAlias, TableAliasExpr)?.args.columns || [\n ];\n const value = seqGet(unnestAliasColumns, 0) || toIdentifier('value');\n\n const columns = [\n toIdentifier('seq'),\n toIdentifier('key'),\n toIdentifier('path'),\n offset instanceof IdentifierExpr ? offset.pop() : toIdentifier('index'),\n value,\n toIdentifier('this'),\n ];\n\n let finalAlias = unnestAlias;\n if (finalAlias) {\n finalAlias.setArgKey('columns', columns);\n } else {\n finalAlias = new TableAliasExpr({\n this: toIdentifier('_u'),\n columns,\n });\n }\n\n let tableInput = this.sql(expression.args.expressions?.[0]);\n if (!tableInput.startsWith('INPUT =>')) {\n tableInput = `INPUT => ${tableInput}`;\n }\n\n const expressionParent = expression.parent;\n\n const explode = (expressionParent instanceof LateralExpr)\n ? `FLATTEN(${tableInput})`\n : `TABLE(FLATTEN(${tableInput}))`;\n\n const aliasSql = this.sql(finalAlias);\n const aliasPart = aliasSql ? ` AS ${aliasSql}` : '';\n\n const prefix = (expressionParent instanceof FromExpr || expressionParent instanceof JoinExpr || expressionParent instanceof LateralExpr)\n ? ''\n : `${this.sql(value)} FROM `;\n\n return `${prefix}${explode}${aliasPart}`;\n }\n\n showSql (expression: ShowExpr): string {\n const terse = expression.args.terse ? 'TERSE ' : '';\n const history = expression.args.history ? ' HISTORY' : '';\n\n let like = this.sql(expression, 'like');\n like = like ? ` LIKE ${like}` : '';\n\n let scope = this.sql(expression, 'scope');\n scope = scope ? ` ${scope}` : '';\n\n let scopeKind = this.sql(expression, 'scopeKind');\n if (scopeKind) {\n scopeKind = ` IN ${scopeKind}`;\n }\n\n let startsWith = this.sql(expression, 'startsWith');\n if (startsWith) {\n startsWith = ` STARTS WITH ${startsWith}`;\n }\n\n const limit = this.sql(expression, 'limit');\n\n let from = this.sql(expression, 'from');\n if (from) {\n from = ` FROM ${from}`;\n }\n\n let privileges = this.expressions(expression, {\n key: 'privileges',\n flat: true,\n });\n privileges = privileges ? ` WITH PRIVILEGES ${privileges}` : '';\n\n return `SHOW ${terse}${expression.name}${history}${like}${scopeKind}${scope}${startsWith}${limit}${from}${privileges}`;\n }\n\n describeSql (expression: DescribeExpr): string {\n const kindValue = expression.args.kind || 'TABLE';\n const kind = kindValue ? ` ${kindValue}` : '';\n const thisNode = ` ${this.sql(expression, 'this')}`;\n\n let expressions = this.expressions(expression, {\n flat: true,\n });\n expressions = expressions ? ` ${expressions}` : '';\n\n return `DESCRIBE${kind}${thisNode}${expressions}`;\n }\n\n generatedAsIdentityColumnConstraintSql (expression: GeneratedAsIdentityColumnConstraintExpr): string {\n const start = expression.args.start ? ` START ${expression.args.start}` : '';\n const increment = expression.args.increment ? ` INCREMENT ${expression.args.increment}` : '';\n\n let orderClause = '';\n if (expression.args.order !== undefined) {\n orderClause = expression.args.order ? ' ORDER' : ' NOORDER';\n }\n\n return `AUTOINCREMENT${start}${increment}${orderClause}`;\n }\n\n clusterSql (expression: ClusterExpr): string {\n return `CLUSTER BY (${this.expressions(expression, {\n flat: true,\n })})`;\n }\n\n structSql (expression: StructExpr): string {\n if (expression.args.expressions?.length === 1) {\n const arg = expression.args.expressions[0];\n if (arg.isStar || (arg instanceof ILikeExpr && narrowInstanceOf(arg.args.this, Expression)?.isStar)) {\n return `{${this.sql(expression.args.expressions[0])}}`;\n }\n }\n\n const keys: ExpressionValue[] = [\n ];\n const values: ExpressionValue[] = [\n ];\n\n expression.args.expressions?.forEach((e, i) => {\n if (e instanceof PropertyEqExpr) {\n if (e.args.this !== undefined) {\n keys.push(\n e.args.this instanceof IdentifierExpr\n ? LiteralExpr.string(e.name)\n : e.args.this,\n );\n }\n if (e.args.expression !== undefined) {\n values.push(e.args.expression);\n }\n } else {\n keys.push(LiteralExpr.string(`_${i}`));\n values.push(e);\n }\n });\n\n const args: ExpressionValue[] = [\n ];\n for (let i = 0; i < keys.length; i++) {\n args.push(keys[i], values[i]);\n }\n\n return this.func('OBJECT_CONSTRUCT', args);\n }\n\n approxQuantileSql (expression: ApproxQuantileExpr): string {\n unsupportedArgs.call(this, expression, 'weight', 'accuracy');\n return this.func('APPROX_PERCENTILE', [\n expression.args.this,\n expression.args.quantile,\n ]);\n }\n\n alterSetSql (expression: AlterSetExpr): string {\n let exprs = this.expressions(expression, {\n flat: true,\n });\n exprs = exprs ? ` ${exprs}` : '';\n\n let fileFormat = this.expressions(expression, {\n key: 'fileFormat',\n flat: true,\n sep: ' ',\n });\n fileFormat = fileFormat ? ` STAGE_FILE_FORMAT = (${fileFormat})` : '';\n\n let copyOptions = this.expressions(expression, {\n key: 'copyOptions',\n flat: true,\n sep: ' ',\n });\n copyOptions = copyOptions ? ` STAGE_COPY_OPTIONS = (${copyOptions})` : '';\n\n let tag = this.expressions(expression, {\n key: 'tag',\n flat: true,\n });\n tag = tag ? ` TAG ${tag}` : '';\n\n return `SET${exprs}${fileFormat}${copyOptions}${tag}`;\n }\n\n strToTimeSql (expression: StrToTimeExpr): string {\n const targetType = expression.args.targetType;\n let typeEnum: ExpressionValue | undefined;\n\n if (targetType instanceof DataTypeExpr) {\n typeEnum = targetType.args.this?.toString();\n } else if (expression.type) {\n typeEnum = expression.type instanceof Expression ? expression.type.args.this?.toString() : expression.type.toString();\n } else {\n typeEnum = DataTypeExprKind.TIMESTAMP;\n }\n\n const funcName = TIMESTAMP_TYPES[(typeEnum || '') as DataTypeExprKind] || 'TO_TIMESTAMP';\n\n return this.func(\n `${expression.args.safe ? 'TRY_' : ''}${funcName}`,\n [\n expression.args.this,\n this.formatTime(expression),\n ],\n );\n }\n\n timestampSubSql (expression: TimestampSubExpr): string {\n return this.sql(\n new TimestampAddExpr({\n this: expression.args.this,\n expression: expression.args.expression?.mul(-1),\n unit: expression.args.unit,\n }),\n );\n }\n\n jsonExtractSql (expression: JsonExtractExpr): string {\n let thisNode = expression.args.this;\n\n if (\n !(thisNode instanceof ParseJsonExpr || thisNode instanceof JsonExtractExpr)\n && !expression.args.requiresJson\n ) {\n thisNode = new ParseJsonExpr({\n this: thisNode,\n });\n }\n\n return this.func('GET_PATH', [\n thisNode,\n expression.args.expression,\n ]);\n }\n\n timeToStrSql (expression: TimeToStrExpr): string {\n let thisNode = expression.args.this;\n if (thisNode instanceof LiteralExpr && thisNode.isString) {\n thisNode = new CastExpr({\n this: thisNode,\n to: DataTypeExpr.build(DataTypeExprKind.TIMESTAMP),\n });\n }\n\n return this.func('TO_CHAR', [\n thisNode,\n this.formatTime(expression),\n ]);\n }\n\n dateSubSql (expression: DateSubExpr): string {\n const value = expression.args.expression;\n if (value) {\n value.replace(value.mul(-1));\n } else {\n this.unsupported('DateSub cannot be transpiled if the subtracted count is unknown');\n }\n\n return dateDeltaSql('DATEADD').call(this, expression);\n }\n\n selectSql (expression: SelectExpr): string {\n const limit = expression.args.limit;\n const offset = expression.args.offset;\n if (offset && !limit) {\n expression.limit(null_(), {\n copy: false,\n });\n }\n return super.selectSql(expression);\n }\n\n createableSql (expression: CreateExpr, locations: Map<PropertiesLocation, Expression[]>): string {\n const isMaterialized = expression.find(MaterializedPropertyExpr);\n const copyGrantsProperty = expression.find(CopyGrantsPropertyExpr);\n\n if (expression.args.kind === CreateExprKind.VIEW && isMaterialized && copyGrantsProperty) {\n const postSchemaProperties = locations.get(PropertiesLocation.POST_SCHEMA) || [\n ];\n const index = postSchemaProperties.indexOf(copyGrantsProperty);\n if (index !== -1) {\n postSchemaProperties.splice(index, 1);\n }\n\n const thisName = this.sql(expression.args.this, 'this');\n const copyGrants = this.sql(copyGrantsProperty);\n let thisSchema = this.schemaColumnsSql(expression.args.this as SchemaExpr);\n thisSchema = thisSchema ? `${this.sep()}${thisSchema}` : '';\n\n return `${thisName}${this.sep()}${copyGrants}${thisSchema}`;\n }\n\n return super.createableSql(expression, locations);\n }\n\n arrayAggSql (expression: ArrayAggExpr): string {\n const thisNode = expression.args.this;\n const order = thisNode instanceof OrderExpr ? thisNode : undefined;\n\n if (order) {\n expression.setArgKey('this', order.args.this?.pop());\n }\n\n let exprSql = super.arrayAggSql(expression);\n\n if (order) {\n exprSql = this.sql(new WithinGroupExpr({\n this: exprSql,\n expression: order,\n }));\n }\n\n return exprSql;\n }\n\n arraySql (expression: ArrayExpr): string {\n const firstExpr = seqGet(expression.args.expressions || [\n ], 0);\n\n if (firstExpr instanceof SelectExpr) {\n if (firstExpr.text('kind').toUpperCase() === 'STRUCT') {\n const objectConstructArgs: Expression[] = [\n ];\n\n firstExpr.args.expressions?.forEach((expr) => {\n const name = expr instanceof AliasExpr ? expr.args.this : expr;\n objectConstructArgs.push(LiteralExpr.string(expr.aliasOrName), name ?? null_());\n });\n\n const arrayAgg = new ArrayAggExpr({\n this: buildObjectConstruct(objectConstructArgs),\n });\n\n firstExpr.setArgKey('kind', undefined);\n firstExpr.setArgKey('expressions', [\n arrayAgg,\n ]);\n\n return this.sql(firstExpr.subquery());\n }\n }\n\n return inlineArraySql.call(this, expression);\n }\n\n currentDateSql (expression: CurrentDateExpr): string {\n const zone = this.sql(expression, 'this');\n if (!zone) {\n return super.currentDateSql(expression);\n }\n\n const expr = new CastExpr({\n this: new ConvertTimezoneExpr({\n targetTz: zone,\n timestamp: new CurrentTimestampExpr({}),\n }),\n to: DataTypeExpr.build(DataTypeExprKind.DATE),\n });\n return this.sql(expr);\n }\n\n dotSql (expression: DotExpr): string {\n let thisNode = expression.args.this;\n\n if (thisNode instanceof Expression && !thisNode?.type) {\n thisNode = annotateTypes(thisNode, {\n dialect: this.dialect,\n });\n }\n\n if (!(thisNode instanceof DotExpr) && isType(thisNode, DataTypeExprKind.STRUCT)) {\n return `${this.sql(thisNode)}:${this.sql(expression, 'expression')}`;\n }\n\n return super.dotSql(expression);\n }\n\n modelAttributeSql (expression: ModelAttributeExpr): string {\n return `${this.sql(expression, 'this')}!${this.sql(expression, 'expression')}`;\n }\n\n formatSql (expression: FormatExpr): string {\n if (expression.name.toLowerCase() === '%s' && expression.args.expressions?.length === 1) {\n return this.func('TO_CHAR', [\n expression.args.expressions[0],\n ]);\n }\n\n return this.functionFallbackSql(expression);\n }\n\n splitPartSql (expression: SplitPartExpr): string {\n if (!expression.args.delimiter) {\n expression.setArgKey('delimiter', LiteralExpr.string(' '));\n }\n\n if (!expression.args.partIndex) {\n expression.setArgKey('partIndex', LiteralExpr.number(1));\n }\n\n return renameFunc('SPLIT_PART').call(this, expression);\n }\n\n uniformSql (expression: UniformExpr): string {\n let gen = expression.args.gen;\n const seed = expression.args.seed;\n\n if (seed) {\n gen = new RandExpr({\n this: seed,\n });\n }\n\n if (!gen) {\n gen = new RandExpr();\n }\n\n return this.func('UNIFORM', [\n expression.args.this,\n expression.args.expression,\n gen,\n ]);\n }\n}\n\nexport class Snowflake extends Dialect {\n static DIALECT_NAME = Dialects.SNOWFLAKE;\n\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.UPPERCASE;\n }\n\n @cache\n static get NULL_ORDERING () {\n return NullOrdering.NULLS_ARE_LARGE;\n }\n\n static TIME_FORMAT = '\\'YYYY-MM-DD HH24:MI:SS\\'';\n static SUPPORTS_USER_DEFINED_TYPES = false;\n\n @cache\n static get EXPRESSION_METADATA () {\n return new Map(SnowflakeTyping.EXPRESSION_METADATA);\n }\n\n static SUPPORTS_SEMI_ANTI_JOIN = false;\n static PREFER_CTE_ALIAS_COLUMN = true;\n static TABLESAMPLE_SIZE_IS_PERCENT = true;\n static COPY_PARAMS_ARE_CSV = false;\n static ARRAY_AGG_INCLUDES_NULLS = undefined;\n static ARRAY_FUNCS_PROPAGATES_NULLS = true;\n static ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN = false;\n static TRY_CAST_REQUIRES_STRING = true;\n static SUPPORTS_ALIAS_REFS_IN_JOIN_CONDITIONS = true;\n static LEAST_GREATEST_IGNORES_NULLS = false;\n\n static INITCAP_DEFAULT_DELIMITER_CHARS = ' \\t\\n\\r\\f\\v!?@\"^#$&~_,.:;+\\\\-*%/|\\\\[\\\\](){}<>';\n\n @cache\n static get INVERSE_TIME_MAPPING () {\n return {\n 'T': 'T', // Prevent 'T' from being mapped back to '\"T\"'\n '%Y': 'yyyy',\n '%y': 'yy',\n '%B': 'MMMM',\n '%b': 'MON',\n '%m': 'mm',\n '%d': 'DD',\n '%-d': 'dd',\n '%a': 'DY',\n '%w': 'dy',\n '%H': 'HH24',\n '%I': 'HH12',\n '%M': 'MI',\n '%S': 'SS',\n '%f_nine': 'FF',\n '%f_zero': 'FF0',\n '%f_one': 'FF1',\n '%f_two': 'FF2',\n '%f_three': 'FF3',\n '%f_four': 'FF4',\n '%f_five': 'FF5',\n '%f': 'FF6',\n '%f_seven': 'FF7',\n '%f_eight': 'FF8',\n '%z': 'TZHTZM',\n '%:z': 'TZH:TZM',\n '%-z': 'TZH',\n '%p': 'AM/PM',\n '%A': 'EEEE',\n '%j': 'DDD',\n '%C': 'CC',\n };\n }\n\n @cache\n static get TIME_MAPPING () {\n return {\n 'YYYY': '%Y',\n 'yyyy': '%Y',\n 'YY': '%y',\n 'yy': '%y',\n 'MMMM': '%B',\n 'mmmm': '%B',\n 'MON': '%b',\n 'mon': '%b',\n 'MM': '%m',\n 'mm': '%m',\n 'DD': '%d',\n 'dd': '%-d',\n 'DY': '%a',\n 'dy': '%w',\n 'HH24': '%H',\n 'hh24': '%H',\n 'HH12': '%I',\n 'hh12': '%I',\n 'MI': '%M',\n 'mi': '%M',\n 'SS': '%S',\n 'ss': '%S',\n 'FF': '%f_nine',\n 'ff': '%f_nine',\n 'FF0': '%f_zero',\n 'ff0': '%f_zero',\n 'FF1': '%f_one',\n 'ff1': '%f_one',\n 'FF2': '%f_two',\n 'ff2': '%f_two',\n 'FF3': '%f_three',\n 'ff3': '%f_three',\n 'FF4': '%f_four',\n 'ff4': '%f_four',\n 'FF5': '%f_five',\n 'ff5': '%f_five',\n 'FF6': '%f',\n 'ff6': '%f',\n 'FF7': '%f_seven',\n 'ff7': '%f_seven',\n 'FF8': '%f_eight',\n 'ff8': '%f_eight',\n 'FF9': '%f_nine',\n 'ff9': '%f_nine',\n 'TZHTZM': '%z',\n 'tzhtzm': '%z',\n 'TZH:TZM': '%:z',\n 'tzh:tzm': '%:z',\n 'TZH': '%-z',\n 'tzh': '%-z',\n '\"T\"': 'T',\n 'AM': '%p',\n 'am': '%p',\n 'PM': '%p',\n 'pm': '%p',\n };\n }\n\n @cache\n static get DATE_PART_MAPPING (): Record<string, string> {\n return {\n ...Dialect.DATE_PART_MAPPING,\n ISOWEEK: 'WEEKISO',\n EPOCH_SECOND: 'EPOCH_SECOND',\n EPOCH_SECONDS: 'EPOCH_SECOND',\n };\n }\n\n @cache\n static get PSEUDOCOLUMNS () {\n return new Set([\n 'LEVEL',\n ]);\n }\n\n canQuote (identifier: IdentifierExpr, options: {identify?: string | boolean} = {}): boolean {\n const {\n identify = 'safe',\n } = options;\n // This disables quoting DUAL in SELECT ... FROM DUAL, because Snowflake treats an\n // unquoted DUAL keyword in a special way and does not map it to a user-defined table\n return (\n super.canQuote(identifier, {\n identify,\n })\n && !(\n identifier.parent instanceof TableExpr\n && !identifier.args.quoted\n && identifier.name.toLowerCase() === 'dual'\n )\n );\n }\n\n static JsonPathTokenizer = SnowflakeJsonPathTokenizer;\n static Tokenizer = SnowflakeTokenizer;\n static Parser = SnowflakeParser;\n static Generator = SnowflakeGenerator;\n}\n\nDialect.register(Dialects.SNOWFLAKE, Snowflake);\n"]}