@hdnax/sqlingo.js 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +8 -14
  3. package/README.npm.md +8 -14
  4. package/README.repo.md +1 -2
  5. package/dist/chunk-2YNOERAO.cjs +2 -0
  6. package/dist/chunk-2YNOERAO.cjs.map +1 -0
  7. package/dist/chunk-2Z3O2CFM.cjs +19 -0
  8. package/dist/chunk-2Z3O2CFM.cjs.map +1 -0
  9. package/dist/chunk-4ZMKB6PV.cjs +2 -0
  10. package/dist/chunk-4ZMKB6PV.cjs.map +1 -0
  11. package/dist/chunk-53OWF4GG.js +2 -0
  12. package/dist/chunk-53OWF4GG.js.map +1 -0
  13. package/dist/chunk-C4CLTVOW.cjs +2 -0
  14. package/dist/chunk-C4CLTVOW.cjs.map +1 -0
  15. package/dist/chunk-DOKMTZYO.cjs +4 -0
  16. package/dist/chunk-DOKMTZYO.cjs.map +1 -0
  17. package/dist/chunk-FCGUTI7Y.js +2 -0
  18. package/dist/chunk-FCGUTI7Y.js.map +1 -0
  19. package/dist/chunk-IPCIXWCY.js +2 -0
  20. package/dist/chunk-IPCIXWCY.js.map +1 -0
  21. package/dist/chunk-KCNOE4DZ.js +19 -0
  22. package/dist/chunk-KCNOE4DZ.js.map +1 -0
  23. package/dist/chunk-NRJHX2GZ.js +2 -0
  24. package/dist/chunk-NRJHX2GZ.js.map +1 -0
  25. package/dist/chunk-O2J5RKBN.js +2 -0
  26. package/dist/chunk-O2J5RKBN.js.map +1 -0
  27. package/dist/chunk-PXUASP5I.js +2 -0
  28. package/dist/chunk-PXUASP5I.js.map +1 -0
  29. package/dist/chunk-R7C3ZHVK.cjs +2 -0
  30. package/dist/chunk-R7C3ZHVK.cjs.map +1 -0
  31. package/dist/chunk-UHWHUDLE.cjs +2 -0
  32. package/dist/chunk-UHWHUDLE.cjs.map +1 -0
  33. package/dist/chunk-WRNYJ54A.cjs +2 -0
  34. package/dist/chunk-WRNYJ54A.cjs.map +1 -0
  35. package/dist/chunk-XZQFOICX.cjs +3 -0
  36. package/dist/chunk-XZQFOICX.cjs.map +1 -0
  37. package/dist/chunk-YLOQRUXC.js +2 -0
  38. package/dist/chunk-YLOQRUXC.js.map +1 -0
  39. package/dist/chunk-YSS2WVCM.cjs +2 -0
  40. package/dist/chunk-YSS2WVCM.cjs.map +1 -0
  41. package/dist/chunk-Z5V6VOIN.js +3 -0
  42. package/dist/chunk-Z5V6VOIN.js.map +1 -0
  43. package/dist/chunk-ZBFGQPJR.js +4 -0
  44. package/dist/chunk-ZBFGQPJR.js.map +1 -0
  45. package/dist/dialects/athena.cjs +2 -0
  46. package/dist/dialects/athena.cjs.map +1 -0
  47. package/dist/dialects/athena.d.cts +66 -0
  48. package/dist/dialects/athena.d.ts +66 -0
  49. package/dist/dialects/athena.js +2 -0
  50. package/dist/dialects/athena.js.map +1 -0
  51. package/dist/dialects/bigquery.cjs +3 -0
  52. package/dist/dialects/bigquery.cjs.map +1 -0
  53. package/dist/dialects/bigquery.d.cts +651 -0
  54. package/dist/dialects/bigquery.d.ts +651 -0
  55. package/dist/dialects/bigquery.js +3 -0
  56. package/dist/dialects/bigquery.js.map +1 -0
  57. package/dist/dialects/clickhouse.cjs +2 -0
  58. package/dist/dialects/clickhouse.cjs.map +1 -0
  59. package/dist/dialects/clickhouse.d.cts +634 -0
  60. package/dist/dialects/clickhouse.d.ts +634 -0
  61. package/dist/dialects/clickhouse.js +2 -0
  62. package/dist/dialects/clickhouse.js.map +1 -0
  63. package/dist/dialects/databricks.cjs +2 -0
  64. package/dist/dialects/databricks.cjs.map +1 -0
  65. package/dist/dialects/databricks.d.cts +484 -0
  66. package/dist/dialects/databricks.d.ts +484 -0
  67. package/dist/dialects/databricks.js +2 -0
  68. package/dist/dialects/databricks.js.map +1 -0
  69. package/dist/dialects/doris.cjs +2 -0
  70. package/dist/dialects/doris.cjs.map +1 -0
  71. package/dist/dialects/doris.d.cts +484 -0
  72. package/dist/dialects/doris.d.ts +484 -0
  73. package/dist/dialects/doris.js +2 -0
  74. package/dist/dialects/doris.js.map +1 -0
  75. package/dist/dialects/dremio.cjs +2 -0
  76. package/dist/dialects/dremio.cjs.map +1 -0
  77. package/dist/dialects/dremio.d.cts +522 -0
  78. package/dist/dialects/dremio.d.ts +522 -0
  79. package/dist/dialects/dremio.js +2 -0
  80. package/dist/dialects/dremio.js.map +1 -0
  81. package/dist/dialects/drill.cjs +2 -0
  82. package/dist/dialects/drill.cjs.map +1 -0
  83. package/dist/dialects/drill.d.cts +512 -0
  84. package/dist/dialects/drill.d.ts +512 -0
  85. package/dist/dialects/drill.js +2 -0
  86. package/dist/dialects/drill.js.map +1 -0
  87. package/dist/dialects/druid.cjs +2 -0
  88. package/dist/dialects/druid.cjs.map +1 -0
  89. package/dist/dialects/druid.d.cts +17 -0
  90. package/dist/dialects/druid.d.ts +17 -0
  91. package/dist/dialects/druid.js +2 -0
  92. package/dist/dialects/druid.js.map +1 -0
  93. package/dist/dialects/duckdb.cjs +86 -0
  94. package/dist/dialects/duckdb.cjs.map +1 -0
  95. package/dist/dialects/duckdb.d.cts +756 -0
  96. package/dist/dialects/duckdb.d.ts +756 -0
  97. package/dist/dialects/duckdb.js +86 -0
  98. package/dist/dialects/duckdb.js.map +1 -0
  99. package/dist/dialects/dune.cjs +2 -0
  100. package/dist/dialects/dune.cjs.map +1 -0
  101. package/dist/dialects/dune.d.cts +21 -0
  102. package/dist/dialects/dune.d.ts +21 -0
  103. package/dist/dialects/dune.js +2 -0
  104. package/dist/dialects/dune.js.map +1 -0
  105. package/dist/dialects/exasol.cjs +2 -0
  106. package/dist/dialects/exasol.cjs.map +1 -0
  107. package/dist/dialects/exasol.d.cts +507 -0
  108. package/dist/dialects/exasol.d.ts +507 -0
  109. package/dist/dialects/exasol.js +2 -0
  110. package/dist/dialects/exasol.js.map +1 -0
  111. package/dist/dialects/fabric.cjs +2 -0
  112. package/dist/dialects/fabric.cjs.map +1 -0
  113. package/dist/dialects/fabric.d.cts +463 -0
  114. package/dist/dialects/fabric.d.ts +463 -0
  115. package/dist/dialects/fabric.js +2 -0
  116. package/dist/dialects/fabric.js.map +1 -0
  117. package/dist/dialects/hive.cjs +2 -0
  118. package/dist/dialects/hive.cjs.map +1 -0
  119. package/dist/dialects/hive.d.cts +585 -0
  120. package/dist/dialects/hive.d.ts +585 -0
  121. package/dist/dialects/hive.js +2 -0
  122. package/dist/dialects/hive.js.map +1 -0
  123. package/dist/dialects/materialize.cjs +2 -0
  124. package/dist/dialects/materialize.cjs.map +1 -0
  125. package/dist/dialects/materialize.d.cts +890 -0
  126. package/dist/dialects/materialize.d.ts +890 -0
  127. package/dist/dialects/materialize.js +2 -0
  128. package/dist/dialects/materialize.js.map +1 -0
  129. package/dist/dialects/mysql.cjs +2 -0
  130. package/dist/dialects/mysql.cjs.map +1 -0
  131. package/dist/dialects/mysql.d.cts +292 -0
  132. package/dist/dialects/mysql.d.ts +292 -0
  133. package/dist/dialects/mysql.js +2 -0
  134. package/dist/dialects/mysql.js.map +1 -0
  135. package/dist/dialects/oracle.cjs +2 -0
  136. package/dist/dialects/oracle.cjs.map +1 -0
  137. package/dist/dialects/oracle.d.cts +539 -0
  138. package/dist/dialects/oracle.d.ts +539 -0
  139. package/dist/dialects/oracle.js +2 -0
  140. package/dist/dialects/oracle.js.map +1 -0
  141. package/dist/dialects/postgres.cjs +2 -0
  142. package/dist/dialects/postgres.cjs.map +1 -0
  143. package/dist/dialects/postgres.d.cts +587 -0
  144. package/dist/dialects/postgres.d.ts +587 -0
  145. package/dist/dialects/postgres.js +2 -0
  146. package/dist/dialects/postgres.js.map +1 -0
  147. package/dist/dialects/presto.cjs +2 -0
  148. package/dist/dialects/presto.cjs.map +1 -0
  149. package/dist/dialects/presto.d.cts +173 -0
  150. package/dist/dialects/presto.d.ts +173 -0
  151. package/dist/dialects/presto.js +2 -0
  152. package/dist/dialects/presto.js.map +1 -0
  153. package/dist/dialects/prql.cjs +2 -0
  154. package/dist/dialects/prql.cjs.map +1 -0
  155. package/dist/dialects/prql.d.cts +496 -0
  156. package/dist/dialects/prql.d.ts +496 -0
  157. package/dist/dialects/prql.js +2 -0
  158. package/dist/dialects/prql.js.map +1 -0
  159. package/dist/dialects/redshift.cjs +2 -0
  160. package/dist/dialects/redshift.cjs.map +1 -0
  161. package/dist/dialects/redshift.d.cts +132 -0
  162. package/dist/dialects/redshift.d.ts +132 -0
  163. package/dist/dialects/redshift.js +2 -0
  164. package/dist/dialects/redshift.js.map +1 -0
  165. package/dist/dialects/risingwave.cjs +2 -0
  166. package/dist/dialects/risingwave.cjs.map +1 -0
  167. package/dist/dialects/risingwave.d.cts +478 -0
  168. package/dist/dialects/risingwave.d.ts +478 -0
  169. package/dist/dialects/risingwave.js +2 -0
  170. package/dist/dialects/risingwave.js.map +1 -0
  171. package/dist/dialects/singlestore.cjs +2 -0
  172. package/dist/dialects/singlestore.cjs.map +1 -0
  173. package/dist/dialects/singlestore.d.cts +73 -0
  174. package/dist/dialects/singlestore.d.ts +73 -0
  175. package/dist/dialects/singlestore.js +2 -0
  176. package/dist/dialects/singlestore.js.map +1 -0
  177. package/dist/dialects/snowflake.cjs +3 -0
  178. package/dist/dialects/snowflake.cjs.map +1 -0
  179. package/dist/dialects/snowflake.d.cts +320 -0
  180. package/dist/dialects/snowflake.d.ts +320 -0
  181. package/dist/dialects/snowflake.js +3 -0
  182. package/dist/dialects/snowflake.js.map +1 -0
  183. package/dist/dialects/solr.cjs +2 -0
  184. package/dist/dialects/solr.cjs.map +1 -0
  185. package/dist/dialects/solr.d.cts +458 -0
  186. package/dist/dialects/solr.d.ts +458 -0
  187. package/dist/dialects/solr.js +2 -0
  188. package/dist/dialects/solr.js.map +1 -0
  189. package/dist/dialects/spark.cjs +2 -0
  190. package/dist/dialects/spark.cjs.map +1 -0
  191. package/dist/dialects/spark.d.cts +484 -0
  192. package/dist/dialects/spark.d.ts +484 -0
  193. package/dist/dialects/spark.js +2 -0
  194. package/dist/dialects/spark.js.map +1 -0
  195. package/dist/dialects/spark2.cjs +2 -0
  196. package/dist/dialects/spark2.cjs.map +1 -0
  197. package/dist/dialects/spark2.d.cts +486 -0
  198. package/dist/dialects/spark2.d.ts +486 -0
  199. package/dist/dialects/spark2.js +2 -0
  200. package/dist/dialects/spark2.js.map +1 -0
  201. package/dist/dialects/sqlite.cjs +2 -0
  202. package/dist/dialects/sqlite.cjs.map +1 -0
  203. package/dist/dialects/sqlite.d.cts +510 -0
  204. package/dist/dialects/sqlite.d.ts +510 -0
  205. package/dist/dialects/sqlite.js +2 -0
  206. package/dist/dialects/sqlite.js.map +1 -0
  207. package/dist/dialects/starrocks.cjs +2 -0
  208. package/dist/dialects/starrocks.cjs.map +1 -0
  209. package/dist/dialects/starrocks.d.cts +518 -0
  210. package/dist/dialects/starrocks.d.ts +518 -0
  211. package/dist/dialects/starrocks.js +2 -0
  212. package/dist/dialects/starrocks.js.map +1 -0
  213. package/dist/dialects/tableau.cjs +2 -0
  214. package/dist/dialects/tableau.cjs.map +1 -0
  215. package/dist/dialects/tableau.d.cts +466 -0
  216. package/dist/dialects/tableau.d.ts +466 -0
  217. package/dist/dialects/tableau.js +2 -0
  218. package/dist/dialects/tableau.js.map +1 -0
  219. package/dist/dialects/teradata.cjs +2 -0
  220. package/dist/dialects/teradata.cjs.map +1 -0
  221. package/dist/dialects/teradata.d.cts +539 -0
  222. package/dist/dialects/teradata.d.ts +539 -0
  223. package/dist/dialects/teradata.js +2 -0
  224. package/dist/dialects/teradata.js.map +1 -0
  225. package/dist/dialects/trino.cjs +2 -0
  226. package/dist/dialects/trino.cjs.map +1 -0
  227. package/dist/dialects/trino.d.cts +465 -0
  228. package/dist/dialects/trino.d.ts +465 -0
  229. package/dist/dialects/trino.js +2 -0
  230. package/dist/dialects/trino.js.map +1 -0
  231. package/dist/dialects/tsql.cjs +2 -0
  232. package/dist/dialects/tsql.cjs.map +1 -0
  233. package/dist/dialects/tsql.d.cts +703 -0
  234. package/dist/dialects/tsql.d.ts +703 -0
  235. package/dist/dialects/tsql.js +2 -0
  236. package/dist/dialects/tsql.js.map +1 -0
  237. package/dist/index.cjs +5 -25
  238. package/dist/index.cjs.map +1 -1
  239. package/dist/index.d.cts +3 -14178
  240. package/dist/index.d.ts +3 -14178
  241. package/dist/index.js +5 -25
  242. package/dist/index.js.map +1 -1
  243. package/dist/tokens-VcMD09XM.d.cts +15805 -0
  244. package/dist/tokens-VcMD09XM.d.ts +15805 -0
  245. package/package.json +171 -5
@@ -0,0 +1,2 @@
1
+ import{$b as at,$c as x,$g as Ce,$h as J,$i as Fe,An as z,Aq as Jt,Bq as dr,Ca as D,Cf as me,Cg as ye,Ck as Ct,Cl as j,Db as st,Dd as Et,Dg as Me,Eo as Vt,Ep as lr,Eq as xr,Fa as te,Fc as pe,Fe as de,Ff as Re,Hl as Z,Hq as Nr,Ie as xe,Im as He,Ip as Sr,Iq as mr,Jj as Dt,Kf as G,Kg as _e,Kl as ke,Kp as hr,Kq as tt,Lf as ft,Lk as qt,Lm as bt,Lo as pr,Me as ct,Mf as y,Ml as Qe,Mp as N,Oc as ue,Od as he,Oj as yt,Pb as U,Pk as Ut,Pn as ar,Pq as Rr,Qc as Te,Qp as Ar,Rj as X,Rn as or,Tb as nt,Tg as Nt,Ue as K,Ug as mt,Um as wt,Vb as it,Vj as we,Vk as Ye,Vm as tr,Wd as Ae,Wm as er,Xa as ee,Xn as Kt,Xq as et,Ya as re,Yb as oe,Yc as ce,Yd as pt,Ye as Ne,Yf as Pe,Yg as Rt,Yn as Er,Zl as M,_d as fe,_e as lt,_h as W,_i as Ue,a as _,ac as F,b as C,bg as Oe,bi as Pt,bq as fr,c as q,ca as d,cj as Ge,cn as rr,d as i,do as vt,ek as Mt,eo as H,fa as zt,fl as Ke,fn as Bt,gc as Ee,gk as Be,gl as k,hd as le,hg as Le,hk as _t,hl as ve,id as Se,ie as ut,il as Ve,je as Tt,ji as qe,ke as ge,kn as sr,kp as ur,ln as nr,lp as b,mg as gt,mn as Yt,mo as P,nd as ot,ng as De,nl as Q,nm as Gt,of as St,og as It,op as $t,p as B,pg as dt,pp as p,qf as ht,ql as $e,qq as Wt,r as a,rb as se,rl as We,sa as Ht,sf as At,sl as Je,tl as Xe,tn as ir,tp as Tr,ub as ne,ud as Y,uh as v,uj as be,um as je,vm as Ze,vq as gr,wb as ie,wh as V,wj as Lt,wl as Ft,wm as ze,xb as ae,xh as $,yi as Ot,za as f,ze as Ie,zg as xt,zp as cr,zq as Ir}from"../chunk-KCNOE4DZ.js";var Ns=new Set(["MICROSECOND","MILLISECOND","SECOND","MINUTE","HOUR","DAY","MONTH","QUARTER","YEAR"]);function Xt(E){return o=>{let t=hr(E,{dialect:"clickhouse"})(o),e=d(o,2);return e&&t.setArgKey("zone",e),t}}function ms(E){let o=E.args.scale,t=o?.toValue(),e=E.args.this;return t===void 0||t===M.SECONDS.toValue()?this.func("fromUnixTimestamp",[P(e,"bigint")]):t===M.MILLIS.toValue()?this.func("fromUnixTimestamp64Milli",[P(e,"bigint")]):t===M.MICROS.toValue()?this.func("fromUnixTimestamp64Micro",[P(e,"bigint")]):t===M.NANOS.toValue()?this.func("fromUnixTimestamp64Nano",[P(e,"bigint")]):this.func("fromUnixTimestamp",[P(new Ie({this:e,expression:this.func("POW",["10",o])}),"bigint")])}function Rs(E){let o=E.indexOf("(");return o===-1?E.toLowerCase():E.slice(0,o).toLowerCase()+E.slice(o)}function Ps(E){let o=E.args.quantile,t=`(${this.sql(E,"this")})`,e;return o instanceof y?e=this.func("quantiles",o.args.expressions||[]):e=this.func("quantile",[o]),e+t}function Os(E){return E.length===1?new Bt({this:d(E,0)}):new Kt({this:"countIf",expressions:E})}function Ls(E){if(E.length===3)return new G({this:"STR_TO_DATE",expressions:E});let o=Ft.fromArgList(E);return P(o,F.build("datetime"))}function w(E){return function(o){if(!o.unit)return p(E).call(this,o);let t=o.getArgKey("zone");return this.func(E,[gr(o),o.args.expression,o.args.this,...Array.isArray(t)?[]:[B(t,"string",D)]])}}function Ds(E){let o=E.args.this,t=E.args.zone;if(t&&o instanceof x){let s=o.name.trim(),n=s.split(".");if(n.length===2){let A=n[1].includes("+")?"+":"-",g=n[1].split(A),O=g.length;g[0]=g[0].padEnd(6,"0"),s=[n[0],".",g[0],1<O?A:"",1<O?g[1]:""].join("")}let l=new Date(s.replace(" ","T")).toISOString().replace("T"," ").split(".")[0];o=x.string(l)}let e=t?[new at({this:t})]:[],r=F.build("datetime64",{expressions:[new at({this:x.number(6)}),...e],nullable:!1});return this.sql(P(o,r,{dialect:this.dialect}))}function Pr(E){if(!(E.parent&&E.parent.argKey==="settings"))return Rs(Sr.call(this,E));let o=E.args.keys,t=E.args.values;if(!(o instanceof y)||!(t instanceof y))return this.unsupported("Cannot convert array columns into map."),"";let e=[],r=o.args.expressions,s=t.args.expressions;for(let n=0;n<Math.min(r?.length??0,s?.length??0);n++)e.push(`${this.sql(r?.[n])}: ${this.sql(s?.[n])}`);return`{${e.join(", ")}}`}function Or(E){return o=>new Pt({this:d(o,0),unit:Vt(E),zone:d(o,1)})}function ys(E){let o=d(E,0);if(o instanceof x){let t=o.toValue();if(typeof t=="string"&&new TextEncoder().encode(t).length===1)return kt(Q)(E)}return new G({this:"splitByChar",expressions:E})}function kt(E){return o=>new E({this:d(o,1),expression:d(o,0),limit:d(o,2)})}var Lr,Dr,yr,Mr,_r,Cr,qr,Ur,Fr,Gr,m,I=class extends(Gr=et,Fr=[a],Ur=[a],qr=[a],Cr=[a],_r=[a],Mr=[a],yr=[a],Dr=[a],Lr=[a],Gr){static get COMMENTS(){return["--","#","#!",["/*","*/"]]}static get IDENTIFIERS(){return['"',"`"]}static get IDENTIFIER_ESCAPES(){return["\\"]}static get STRING_ESCAPES(){return["'","\\"]}static get BIT_STRINGS(){return[["0b",""]]}static get HEX_STRINGS(){return[["0x",""],["0X",""]]}static get HEREDOC_STRINGS(){return["$"]}static get ORIGINAL_KEYWORDS(){let t={...et.KEYWORDS,".:":"dotcolon",ATTACH:"command",DATE32:"date32",DATETIME64:"datetime64",DICTIONARY:"dictionary",DYNAMIC:"dynamic",ENUM8:"enum8",ENUM16:"enum16",EXCHANGE:"command",FINAL:"final",FIXEDSTRING:"fixedstring",FLOAT32:"float",FLOAT64:"double",GLOBAL:"global",LOWCARDINALITY:"lowcardinality",MAP:"map",NESTED:"nested",NOTHING:"nothing",SAMPLE:"tableSample",TUPLE:"struct",UINT16:"usmallint",UINT32:"uint",UINT64:"ubigint",UINT8:"utinyint",IPV4:"ipv4",IPV6:"ipv6",POINT:"point",RING:"ring",LINESTRING:"linestring",MULTILINESTRING:"multilinestring",POLYGON:"polygon",MULTIPOLYGON:"multipolygon",AGGREGATEFUNCTION:"aggregatefunction",SIMPLEAGGREGATEFUNCTION:"simpleaggregatefunction",SYSTEM:"command",PREWHERE:"prewhere"};return delete t["/*+"],t}static get SINGLE_TOKENS(){return{...et.SINGLE_TOKENS,$:"heredocString"}}};m=_(Gr),i(m,10,"COMMENTS",Fr,I),i(m,10,"IDENTIFIERS",Ur,I),i(m,10,"IDENTIFIER_ESCAPES",qr,I),i(m,10,"STRING_ESCAPES",Cr,I),i(m,10,"BIT_STRINGS",_r,I),i(m,10,"HEX_STRINGS",Mr,I),i(m,10,"HEREDOC_STRINGS",yr,I),i(m,10,"ORIGINAL_KEYWORDS",Dr,I),i(m,10,"SINGLE_TOKENS",Lr,I),C(m,I),q(m,3,I);var br,wr,Br,Yr,Kr,vr,Vr,$r,Wr,Jr,Xr,kr,Qr,jr,Zr,zr,Hr,ts,es,rs,ss,ns,h,u=class u extends(ns=f,ss=[a],rs=[a],es=[a],ts=[a],Hr=[a],zr=[a],Zr=[a],jr=[a],Qr=[a],kr=[a],Xr=[a],Jr=[a],Wr=[a],$r=[a],Vr=[a],vr=[a],Kr=[a],Yr=[a],Br=[a],wr=[a],br=[a],ns){static get ID_VAR_TOKENS(){return new Set([...f.ID_VAR_TOKENS,"sessionUser","currentCatalog","like","straightJoin"])}static get NO_PAREN_FUNCTIONS(){let t={...f.NO_PAREN_FUNCTIONS};return delete t.currentTimestamp,delete t.localtime,delete t.localtimestamp,t}static get FUNCTIONS(){let t={...f.FUNCTIONS,...Object.fromEntries([...Ns].map(e=>[`TOSTARTOF${e}`,Or(e)])),ANY:e=>wt.fromArgList(e),ARRAYSUM:e=>xt.fromArgList(e),ARRAYREVERSE:e=>It.fromArgList(e),ARRAYSLICE:e=>dt.fromArgList(e),CURRENTDATABASE:e=>Nt.fromArgList(e),CURRENTSCHEMAS:e=>mt.fromArgList(e),COUNTIF:Os,COSINEDISTANCE:e=>St.fromArgList(e),VERSION:e=>Rt.fromArgList(e),DATE_ADD:N(v,void 0,{defaultUnit:void 0}),DATEADD:N(v,void 0,{defaultUnit:void 0}),DATE_DIFF:N($,void 0,{defaultUnit:void 0,supportsTimezone:!0}),DATEDIFF:N($,void 0,{defaultUnit:void 0,supportsTimezone:!0}),DATE_FORMAT:Xt(Z),DATE_SUB:N(V,void 0,{defaultUnit:void 0}),DATESUB:N(V,void 0,{defaultUnit:void 0}),FORMATDATETIME:Xt(Z),HAS:e=>gt.fromArgList(e),ILIKE:tt(xe),JSONEXTRACTSTRING:Ir(Lt,{zeroBasedIndexing:!1}),LENGTH:e=>new yt({this:d(e,0),binary:!0}),LIKE:tt(ct),L2Distance:e=>ht.fromArgList(e),MAP:Ht,MATCH:e=>qt.fromArgList(e),NOTLIKE:tt(ct,{notLike:!0}),PARSEDATETIME:Xt(Dt),RANDCANONICAL:e=>Ct.fromArgList(e),STR_TO_DATE:Ls,TIMESTAMP_SUB:N(J,void 0,{defaultUnit:void 0}),TIMESTAMPSUB:N(J,void 0,{defaultUnit:void 0}),TIMESTAMP_ADD:N(W,void 0,{defaultUnit:void 0}),TIMESTAMPADD:N(W,void 0,{defaultUnit:void 0}),TOMONDAY:Or("WEEK"),UNIQ:e=>bt.fromArgList(e),XOR:e=>new Yt({expressions:e}),MD5:e=>_t.fromArgList(e),SHA256:e=>new k({this:d(e,0),length:x.number(256)}),SHA512:e=>new k({this:d(e,0),length:x.number(512)}),SPLITBYCHAR:ys,SPLITBYREGEXP:kt(Ut),SPLITBYSTRING:kt(Q),SUBSTRINGINDEX:e=>$e.fromArgList(e),TOTYPENAME:e=>lt.fromArgList(e),EDITDISTANCE:e=>X.fromArgList(e),JAROWINKLERSIMILARITY:e=>At.fromArgList(e),LEVENSHTEINDISTANCE:e=>X.fromArgList(e)};return delete t.TRANSFORM,delete t.APPROX_TOP_SUM,t}static get AGG_FUNCTIONS(){return new Set(["count","min","max","sum","avg","any","stddevPop","stddevSamp","varPop","varSamp","corr","covarPop","covarSamp","entropy","exponentialMovingAverage","intervalLengthSum","kolmogorovSmirnovTest","mannWhitneyUTest","median","rankCorr","sumKahan","studentTTest","welchTTest","anyHeavy","anyLast","boundingRatio","first_value","last_value","argMin","argMax","avgWeighted","topK","approx_top_sum","topKWeighted","deltaSum","deltaSumTimestamp","groupArray","groupArrayLast","groupUniqArray","groupArrayInsertAt","groupArrayMovingAvg","groupArrayMovingSum","groupArraySample","groupBitAnd","groupBitOr","groupBitXor","groupBitmap","groupBitmapAnd","groupBitmapOr","groupBitmapXor","sumWithOverflow","sumMap","minMap","maxMap","skewSamp","skewPop","kurtSamp","kurtPop","uniq","uniqExact","uniqCombined","uniqCombined64","uniqHLL12","uniqTheta","quantile","quantiles","quantileExact","quantilesExact","quantilesExactExclusive","quantileExactLow","quantilesExactLow","quantileExactHigh","quantilesExactHigh","quantileExactWeighted","quantilesExactWeighted","quantileTiming","quantilesTiming","quantileTimingWeighted","quantilesTimingWeighted","quantileDeterministic","quantilesDeterministic","quantileTDigest","quantilesTDigest","quantileTDigestWeighted","quantilesTDigestWeighted","quantileBFloat16","quantilesBFloat16","quantileBFloat16Weighted","quantilesBFloat16Weighted","simpleLinearRegression","stochasticLinearRegression","stochasticLogisticRegression","categoricalInformationValue","contingency","cramersV","cramersVBiasCorrected","theilsU","maxIntersections","maxIntersectionsPosition","meanZTest","quantileInterpolatedWeighted","quantilesInterpolatedWeighted","quantileGK","quantilesGK","sparkBar","sumCount","largestTriangleThreeBuckets","histogram","sequenceMatch","sequenceCount","windowFunnel","retention","uniqUpTo","sequenceNextNode","exponentialTimeDecayedAvg"])}static get AGG_FUNCTIONS_SUFFIXES(){return["If","Array","ArrayIf","Map","SimpleState","State","Merge","MergeState","ForEach","Distinct","OrDefault","OrNull","Resample","ArgMin","ArgMax"]}static get FUNC_TOKENS(){return new Set([...f.FUNC_TOKENS,"and","or","set"])}static get RESERVED_TOKENS(){return new Set([...f.RESERVED_TOKENS].filter(t=>t!=="select"))}static get AGG_FUNC_MAPPING(){let t={},e=[...u.AGG_FUNCTIONS_SUFFIXES,""];for(let r of e)for(let s of u.AGG_FUNCTIONS)t[`${s}${r}`]=[s,r];return t}static get FUNCTION_PARSERS(){let t={...f.FUNCTION_PARSERS,ARRAYJOIN:function(){return this.expression(Ot,{this:this.parseExpression()})},QUANTILE:function(){return this.parseQuantile()},MEDIAN:function(){return this.parseQuantile()},COLUMNS:function(){return this.parseColumns()},TUPLE:function(){return j.fromArgList(this.parseFunctionArgs({alias:!0}))},AND:function(){let e=this.parseFunctionArgs({alias:!1});return new sr({this:e[0],expression:e[1]})},OR:function(){let e=this.parseFunctionArgs({alias:!1});return new nr({this:e[0],expression:e[1]})}};return delete t.MATCH,t}static get PROPERTY_PARSERS(){let t={...f.PROPERTY_PARSERS,ENGINE:function(){return this.parseEngineProperty()}};return delete t.DYNAMIC,t}static get NO_PAREN_FUNCTION_PARSERS(){let t={...f.NO_PAREN_FUNCTION_PARSERS};return delete t.ANY,t}static get RANGE_PARSERS(){return{...f.RANGE_PARSERS,global:function(t){return this.parseGlobalIn(t)}}}static get COLUMN_OPERATORS(){let t={...f.COLUMN_OPERATORS};return delete t.placeholder,t}static get JOIN_KINDS(){return new Set([...f.JOIN_KINDS,"any","asof","array"])}static get TABLE_ALIAS_TOKENS(){return new Set([...f.TABLE_ALIAS_TOKENS,"any","array","final","format","settings","straightJoin"])}static get ALIAS_TOKENS(){return new Set([...f.ALIAS_TOKENS].filter(t=>t!=="format"))}static get QUERY_MODIFIER_PARSERS(){return{...f.QUERY_MODIFIER_PARSERS,settings:function(){return["settings",(this.advance(),this.parseCsv(()=>this.parseAssignment()))]},format:function(){return["format",(this.advance(),this.parseIdVar())]}}}static get CONSTRAINT_PARSERS(){return{...f.CONSTRAINT_PARSERS,INDEX:function(){return this.parseIndexConstraint()},CODEC:function(){return this.parseCompress()}}}static get ALTER_PARSERS(){return{...f.ALTER_PARSERS,REPLACE:function(){return this.parseAlterTableReplace()}}}static get SCHEMA_UNNAMED_CONSTRAINTS(){return new Set([...f.SCHEMA_UNNAMED_CONSTRAINTS,"INDEX"])}static get PLACEHOLDER_PARSERS(){return{...f.PLACEHOLDER_PARSERS,lBrace:function(){return this.parseQueryParameter()}}}parseEngineProperty(){return this.match("eq"),this.expression(le,{this:this.parseField({anyToken:!0,anonymousFunc:!0})})}parseUserDefinedFunctionExpression(){return this.parseLambda()}parseTypes(t={}){let{checkFunc:e=!1,schema:r=!1,allowIdentifiers:s=!0}=t,n=super.parseTypes({checkFunc:e,schema:r,allowIdentifiers:s});return n instanceof F&&n.args.nullable!==!0&&n.setArgKey("nullable",!1),n}parseExtract(){let t=this.index,e=this.parseBitwise();return this.match("from")?(this.retreat(t),super.parseExtract()):(this.match("comma"),this.expression(G,{this:"extract",expressions:[e,this.parseBitwise()]}))}parseAssignment(){let t=super.parseAssignment();return this.match("placeholder")?this.expression(Ue,{this:t,true:this.parseAssignment(),false:this.match("colon")?this.parseAssignment():void 0}):t}parseQueryParameter(){let t=this.index,e=this.parseIdVar();this.match("colon");let r=this.parseTypes({checkFunc:!1,allowIdentifiers:!1})||(this.matchTextSeq("IDENTIFIER")?"Identifier":void 0);if(r)this.match("rBrace")||this.raiseError("Expecting }");else{this.retreat(t);return}let s=e;return e instanceof se&&!e.quoted&&(s=Vt(e.name)),this.expression(fe,{this:s,kind:r})}parseBracket(t){let e=this.match("lBrace",{advance:!1}),r=super.parseBracket(t);if(e&&r instanceof j){let s=new Mt({keys:new y({expressions:[]}),values:new y({expressions:[]})});for(let n of r.args.expressions??[]){if(!(n instanceof de))break;B(s.args.keys,D)?.append("expressions",x.string(n.name)),B(s.args.values,D)?.append("expressions",n.args.expression)}return s}return r}parseIn(t,e={}){let{isGlobal:r=!1}=e,s=super.parseIn(t);return s.setArgKey("isGlobal",r),s}parseGlobalIn(t){let e=this.match("not"),r=this.match("in")?this.parseIn(t,{isGlobal:!0}):void 0;return e?this.expression(K,{this:r}):r}parseTable(t={}){let{schema:e=!1,joins:r=!1,aliasTokens:s,parseBracket:n=!1,isDbReference:c=!1}=t,l=super.parseTable({schema:e,joins:r,aliasTokens:s,parseBracket:n,isDbReference:c});if(l instanceof nt){let A=l.args.this,g=l.args.alias;A instanceof Oe&&g instanceof re&&!g.args.columns&&g.setArgKey("columns",[H("generate_series")])}return this.match("final")&&(l=this.expression(st,{this:l})),l}parsePosition(t={}){return super.parsePosition({haystackFirst:!0})}parseCte(){let t=this.tryParse(()=>super.parseCte());return t||(t=this.expression(pe,{this:this.parseAssignment(),alias:this.parseTableAlias(),scalar:!0})),t}parseJoinParts(){let t=this.match("global")?this.prev:void 0;if(this.matchSet(this._constructor.JOIN_KINDS,{advance:!1})?this.prev:void 0){let r=this.matchSet(this._constructor.JOIN_KINDS)?this.prev:void 0,s=this.matchSet(this._constructor.JOIN_SIDES)?this.prev:void 0;return{method:t,side:s,kind:r}}return{method:t,side:this.matchSet(this._constructor.JOIN_SIDES)?this.prev:void 0,kind:this.matchSet(this._constructor.JOIN_KINDS)?this.prev:void 0}}parseJoin(t={}){let{skipJoinToken:e=!1}=t,r=super.parseJoin({skipJoinToken:e,parseBracket:!0});if(r){let s=r.args.method;if(r.setArgKey("method",void 0),r.setArgKey("global",s),r.args.kind==="array")for(let n of r.findAll(nt))n.replace(n.toColumn())}return r}parseFunction(t={}){let{functions:e,anonymous:r,optionalParens:s=!0,anyToken:n=!1}=t,c=super.parseFunction({functions:e,anonymous:r,optionalParens:s,anyToken:n});if(!c)return;let l=c instanceof pt?c.args.this:c,A=l instanceof G?this._constructor.AGG_FUNC_MAPPING[(l.args.this??"").toString()]:void 0;if(A){let g=l,O=this.parseFuncParams(g),Zt={this:g.args.this,expressions:g.args.expressions},rt;A[1]?rt=O?Er:Kt:rt=O?je:He,O&&(Zt.params=O),l=this.expression(rt,Zt),c instanceof pt?c.setArgKey("this",l):O?c=this.parseWindow(l):c=l}return c}parseFuncParams(t){if(this.matchPair("rParen","lParen"))return this.parseCsv(()=>this.parseLambda());if(this.match("lParen")){let e=this.parseCsv(()=>this.parseLambda());return this.matchRParen(t),e}}parseQuantile(){let t=this.parseLambda(),e=this.parseFuncParams();return e&&0<e.length?this.expression(z,{this:e[0],quantile:t}):this.expression(z,{this:t,quantile:x.number(.5)})}parseWrappedIdVars(){return super.parseWrappedIdVars({optional:!0})}parsePrimaryKey(t={}){let{wrappedOptional:e=!1,inProps:r=!1,namedPrimaryKey:s=!1}=t;return super.parsePrimaryKey({wrappedOptional:e||r,inProps:r,namedPrimaryKey:s})}parseOnProperty(){let t=this.index;if(this.matchTextSeq("CLUSTER")){let e=this.parseString()||this.parseIdVar();if(e)return this.expression(ot,{this:e});this.retreat(t)}}parseIndexConstraint(){let t=this.parseIdVar(),e=this.parseAssignment(),r=this.matchTextSeq("TYPE")?this.parseFunction()||this.parseVar():void 0,s=this.matchTextSeq("GRANULARITY")?this.parseTerm():void 0;return this.expression(Te,{this:t,expression:e,indexType:r,granularity:s})}parsePartition(){if(!this.match("partition"))return;let t;return this.matchTextSeq("ID")?t=[this.expression(ie,{this:this.parseString()})]:t=this.parseExpressions(),this.expression(ne,{expressions:t})}parseAlterTableReplace(){let t=this.parsePartition();if(!(!t||!this.match("from")))return this.expression(Ee,{expression:t,source:this.parseTableParts()})}parseProjectionDef(){if(this.matchTextSeq("PROJECTION"))return this.expression(ee,{this:this.parseIdVar(),expression:this.parseWrapped(()=>this.parseStatement())})}parseConstraint(){return super.parseConstraint()||this.parseProjectionDef()}parseAlias(t,e={}){let{explicit:r=!1}=e;return this.matchPair("apply","lParen",{advance:!1})?t:super.parseAlias(t,{explicit:r})}parseExpression(){let t=super.parseExpression();for(;this.matchPair("apply","lParen");)t=new ft({this:t,expression:this.parseVar({anyToken:!0})}),this.match("rParen");return t}parseColumns(){let t=this.expression(Pe,{this:this.parseLambda()});for(;this.next&&this.matchTextSeq([")","APPLY","("]);)this.match("rParen"),t=new ft({this:t,expression:this.parseVar({anyToken:!0})});return t}parseValue(t={}){let{values:e=!0}=t,r=super.parseValue({values:e});if(!r)return;let s=r.args.expressions,n=s?.[s.length-1];return e&&!(n instanceof U)&&r.setArgKey("expressions",s?.map(c=>this.expression(U,{expressions:[c]}))),r}parsePartitionedBy(){return this.expression(Y,{this:this.parseAssignment()})}};h=_(ns),i(h,10,"ID_VAR_TOKENS",ss,u),i(h,10,"NO_PAREN_FUNCTIONS",rs,u),i(h,10,"FUNCTIONS",es,u),i(h,10,"AGG_FUNCTIONS",ts,u),i(h,10,"AGG_FUNCTIONS_SUFFIXES",Hr,u),i(h,10,"FUNC_TOKENS",zr,u),i(h,10,"RESERVED_TOKENS",Zr,u),i(h,10,"AGG_FUNC_MAPPING",jr,u),i(h,10,"FUNCTION_PARSERS",Qr,u),i(h,10,"PROPERTY_PARSERS",kr,u),i(h,10,"NO_PAREN_FUNCTION_PARSERS",Xr,u),i(h,10,"RANGE_PARSERS",Jr,u),i(h,10,"COLUMN_OPERATORS",Wr,u),i(h,10,"JOIN_KINDS",$r,u),i(h,10,"TABLE_ALIAS_TOKENS",Vr,u),i(h,10,"ALIAS_TOKENS",vr,u),i(h,10,"QUERY_MODIFIER_PARSERS",Kr,u),i(h,10,"CONSTRAINT_PARSERS",Yr,u),i(h,10,"ALTER_PARSERS",Br,u),i(h,10,"SCHEMA_UNNAMED_CONSTRAINTS",wr,u),i(h,10,"PLACEHOLDER_PARSERS",br,u),C(h,u),q(h,3,u),u.MODIFIERS_ATTACHED_TO_SET_OP=!1,u.INTERVAL_SPANS=!1,u.OPTIONAL_ALIAS_TOKEN_CTE=!1,u.JOINS_HAVE_EQUAL_PRECEDENCE=!0,u.LOG_DEFAULTS_TO_LN=!0;var Qt=u,is,as,os,Es,ps,us,Ts,cs,ls,Ss,R,T=class T extends(Ss=b,ls=[a],cs=[a],Ts=[a],us=[a],ps=[a],Es=[a],os=[a],as=[a],is=[a],Ss){static get AFTER_HAVING_MODIFIER_TRANSFORMS(){let t=new Map(super.AFTER_HAVING_MODIFIER_TRANSFORMS);return["cluster","distribute","sort"].forEach(e=>t.delete(e)),t}static get STRUCT_DELIMITER(){return["(",")"]}static get STRING_TYPE_MAPPING(){return new Map([["blob","String"],["char","String"],["longblob","String"],["longtext","String"],["mediumblob","String"],["mediumtext","String"],["tinyblob","String"],["tinytext","String"],["text","String"],["varbinary","String"],["varchar","String"]])}static get SUPPORTED_JSON_PATH_PARTS(){return new Set([ut,Tt,ge])}static get TYPE_MAPPING(){return new Map([...b.TYPE_MAPPING,...T.STRING_TYPE_MAPPING,["array","Array"],["boolean","Bool"],["bigint","Int64"],["date32","Date32"],["datetime","DateTime"],["datetime2","DateTime"],["smalldatetime","DateTime"],["datetime64","DateTime64"],["decimal","Decimal"],["decimal32","Decimal32"],["decimal64","Decimal64"],["decimal128","Decimal128"],["decimal256","Decimal256"],["timestamp","DateTime"],["timestampntz","DateTime"],["timestamptz","DateTime"],["double","Float64"],["enum","Enum"],["enum8","Enum8"],["enum16","Enum16"],["fixedstring","FixedString"],["float","Float32"],["int","Int32"],["mediumint","Int32"],["int128","Int128"],["int256","Int256"],["lowcardinality","LowCardinality"],["map","Map"],["nested","Nested"],["nothing","Nothing"],["smallint","Int16"],["struct","Tuple"],["tinyint","Int8"],["ubigint","UInt64"],["uint","UInt32"],["uint128","UInt128"],["uint256","UInt256"],["usmallint","UInt16"],["utinyint","UInt8"],["ipv4","IPv4"],["ipv6","IPv6"],["point","Point"],["ring","Ring"],["linestring","LineString"],["multilinestring","MultiLineString"],["polygon","Polygon"],["multipolygon","MultiPolygon"],["aggregatefunction","AggregateFunction"],["simpleaggregatefunction","SimpleAggregateFunction"],["dynamic","Dynamic"]])}static get ORIGINAL_TRANSFORMS(){return new Map([...b.ORIGINAL_TRANSFORMS,[wt,p("any")],[bt,p("uniq")],[Le,p("arrayConcat")],[gt,p("has")],[De,function(t){return this.func("arrayFilter",[t.args.expression,t.args.this])}],[me,xr],[It,p("arrayReverse")],[dt,p("arraySlice")],[xt,p("arraySum")],[Ze,Wt("argMax")],[ze,Wt("argMin")],[y,Tr],[Me,p("CAST")],[Nt,p("CURRENT_DATABASE")],[mt,p("CURRENT_SCHEMAS")],[Bt,p("countIf")],[St,p("cosineDistance")],[ue,function(t){return`CODEC(${this.expressions(t,{key:"this",flat:!0})})`}],[ce,function(t){return`${t.args.persisted?"MATERIALIZED":"ALIAS"} ${this.sql(t,"this")}`}],[Ce,function(t){return this.func("CURRENT_DATE",[])}],[Rt,p("VERSION")],[v,w("DATE_ADD")],[$,w("DATE_DIFF")],[qe,p("toDate")],[V,w("DATE_SUB")],[Ot,p("arrayJoin")],[Re,p("farmFingerprint64")],[st,function(t){return`${this.sql(t,"this")} FINAL`}],[Ge,p("isNaN")],[rr,function(t){return`${this.sql(t,"this")}.:${this.sql(t,"to")}`}],[be,Jt("JSONExtractString",{quotedIndex:!1})],[Lt,Jt("JSONExtractString",{quotedIndex:!1})],[ut,dr],[Tt,()=>""],[yt,Rr],[we,Pr],[ir,p("median")],[Fe,p("nullIf")],[Y,function(t){return`PARTITION BY ${this.sql(t,"this")}`}],[oe,cr],[z,Ps],[qt,function(t){return this.func("match",[t.args.this,t.args.expression])}],[Ct,p("randCanonical")],[We,p("startsWith")],[j,p("tuple")],[Ye,p("trunc")],[Je,p("endsWith")],[ht,p("L2Distance")],[Xe,function(t){return lr.call(this,t,{funcName:"POSITION",supportsPosition:!0,useAnsiPosition:!1})}],[Z,function(t){return this.func("formatDateTime",[t.args.this,this.formatTime(t),t.args.zone])}],[ke,Ds],[W,w("TIMESTAMP_ADD")],[J,w("TIMESTAMP_SUB")],[lt,p("toTypeName")],[Mt,Pr],[Yt,function(t){return this.func("xor",[t.args.this,t.args.expression,...t.args.expressions||[]])}],[_t,p("MD5")],[Be,function(t){return this.func("LOWER",[this.func("HEX",[this.func("MD5",[t.args.this])])])}],[Ke,p("SHA1")],[ve,p("SHA1")],[k,Nr],[Ve,mr],[Q,function(t){return this.func("splitByString",[t.args.expression,t.args.this,typeof t.args.limit=="number"?x.number(t.args.limit):t.args.limit])}],[Ut,function(t){return this.func("splitByRegexp",[t.args.expression,t.args.this,typeof t.args.limit=="number"?x.number(t.args.limit):t.args.limit])}],[M,ms],[Pt,Ar({func:"dateTrunc",zone:!0})],[Qe,function(t){return fr.call(this,t,{defaultTrimType:"BOTH"})}],[or,p("varSamp")],[Et,function(t){return this.nakedProperty(t)}],[ar,p("stddevSamp")],[_e,p("CHAR")],[tr,function(t){return this.func("lagInFrame",[t.args.this,t.args.offset,t.args.default])}],[er,function(t){return this.func("leadInFrame",[t.args.this,t.args.offset,t.args.default])}],[At,p("jaroWinklerSimilarity")],[X,function(t){return ur.call(this,t,"insCost","delCost","subCost","maxDist"),p("editDistance").call(this,t)}],[Dt,p("parseDateTime")]])}static get PROPERTIES_LOCATION(){return new Map([...b.PROPERTIES_LOCATION,[ot,"postName"],[Y,"postSchema"],[Se,"postName"],[he,"unsupported"]])}static get ON_CLUSTER_TARGETS(){return new Set(["SCHEMA","DATABASE","TABLE","VIEW","DICTIONARY","INDEX","FUNCTION","NAMED COLLECTION"])}static get NON_NULLABLE_TYPES(){return new Set(["array","map","struct","point","ring","linestring","multilinestring","polygon","multipolygon"])}offsetSql(t){let e=super.offsetSql(t),r=t.parent;return r instanceof Ae&&r.args.limit instanceof ae&&(e=`${e} ROWS`),e}strToDateSql(t){let e=this.functionFallbackSql(t);return t.parent instanceof ye?e:this.castSql(P(t,"DATE"))}castSql(t,e={}){let{safePrefix:r}=e,s=t.args.this;return s instanceof Ft&&pr(t.args.to,"datetime")?this.sql(s):super.castSql(t,{safePrefix:r})}tryCastSql(t){let e=t.args.to;return e instanceof D&&!e.isType([...this._constructor.NON_NULLABLE_TYPES],{checkNullable:!0})&&e.setArgKey("nullable",!0),super.castSql(t)}jsonPathSubscriptSql(t){let e=this.jsonPathPart(t.args.this);return zt(e)?(parseInt(e)+1).toString():e}likePropertySql(t){return`AS ${this.sql(t,"this")}`}anyToHas(t,e,r={}){let{prefix:s=""}=r,n,c;if(t.left instanceof Gt)n=t.left,c=t.right;else if(t.right instanceof Gt)n=t.right,c=t.left;else return e(t);return s+this.func("has",[n.args.this?.unnest(),c])}eqSql(t){return this.anyToHas(t,e=>super.eqSql(e))}neqSql(t){return this.anyToHas(t,e=>super.neqSql(e),{prefix:"NOT "})}regexpILikeSql(t){let e=this.func("CONCAT",["'(?i)'",t.args.expression]);return this.func("match",[t.args.this,e])}dataTypeSql(t){let e,r=this._constructor;r.STRING_TYPE_MAPPING.has(t.args.this)?e="String":e=super.dataTypeSql(t);let s=t.parent,n=t.args.nullable;return(n===!0||n===void 0&&!(s instanceof F&&s.isType("map",{checkNullable:!0})&&(t.index===null||t.index===0))&&!t.isType(r.NON_NULLABLE_TYPES,{checkNullable:!0}))&&(e=`Nullable(${e})`),e}cteSql(t){if(t.args.scalar){let e=this.sql(t,"this"),r=this.sql(t,"alias");return`${e} AS ${r}`}return super.cteSql(t)}afterLimitModifiers(t){let e=t.getArgKey("settings")?this.seg("SETTINGS ")+this.expressions(t,{key:"settings",flat:!0}):"",r=t.getArgKey("format")?this.seg("FORMAT ")+this.sql(t,"format"):"";return[...super.afterLimitModifiers(t),e,r].filter(Boolean)}placeholderSql(t){return`{${t.name}: ${this.sql(t,"kind")}}`}onClusterSql(t){return`ON CLUSTER ${this.sql(t,"this")}`}createableSql(t,e){let r=this._constructor,s=e.get("postName");if(r.ON_CLUSTER_TARGETS.has(t.kind)&&s){let n=t.args.this instanceof it?t.args.this:t,c=this.sql(n,"this"),l=s.map(g=>this.sql(g)).join(" "),A=t.args.this instanceof it?this.schemaColumnsSql(t.args.this):void 0;return A=A?`${this.sep()}${A}`:"",`${c}${this.sep()}${l}${A}`}return super.createableSql(t,e)}createSql(t){let e=t.args.expression,r;e instanceof te&&(r=t.find(Et),r&&(r.pop(),e.replace(vt(e))));let s=super.createSql(t),n=r?` ${this.sql(r)}`:"";return`${s}${n}`}prewhereSql(t){let e=this.indent(this.sql(t,"this"));return`${this.seg("PREWHERE")}${this.sep()}${e}`}indexColumnConstraintSql(t){let e=this.sql(t,"this"),r=e?` ${e}`:"",s=this.sql(t,"expression"),n=s?` ${s}`:"",c=this.sql(t,"indexType"),l=c?` TYPE ${c}`:"",A=this.sql(t,"granularity"),g=A?` GRANULARITY ${A}`:"";return`INDEX${r}${n}${l}${g}`}partitionSql(t){return`PARTITION ${this.expressions(t,{flat:!0})}`}partitionIdSql(t){return`ID ${this.sql(t.args.this)}`}replacePartitionSql(t){return`REPLACE ${this.sql(t.args.expression)} FROM ${this.sql(t,"source")}`}projectionDefSql(t){return`PROJECTION ${this.sql(t.args.this)} ${this.wrap(t.args.expression??"")}`}isSql(t){let e=super.isSql(t);return t.parent instanceof K&&(e=this.wrap(e)),e}inSql(t){let e=super.inSql(t);return t.parent instanceof K&&t.args.isGlobal&&(e=e.replace("GLOBAL IN","GLOBAL NOT IN")),e}notSql(t){let e=t.args.this;if(e instanceof Ne){if(e.args.isGlobal)return this.sql(t,"this");t.setArgKey("this",vt(e,{copy:!1}))}return super.notSql(t)}valuesSql(t,e={}){let{valuesAsTable:r=!0}=e,s=t.args.alias,n=t.args.expressions;return s?.args.columns&&n&&0<n.length?r=n[0].args.expressions?.some(l=>l instanceof U)??!1:r=!0,super.valuesSql(t,{valuesAsTable:r})}};R=_(Ss),i(R,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",ls,T),i(R,10,"STRUCT_DELIMITER",cs,T),i(R,10,"STRING_TYPE_MAPPING",Ts,T),i(R,10,"SUPPORTED_JSON_PATH_PARTS",us,T),i(R,10,"TYPE_MAPPING",ps,T),i(R,10,"ORIGINAL_TRANSFORMS",Es,T),i(R,10,"PROPERTIES_LOCATION",os,T),i(R,10,"ON_CLUSTER_TARGETS",as,T),i(R,10,"NON_NULLABLE_TYPES",is,T),C(R,T),q(R,3,T),T.SUPPORTS_DECODE_CASE=!1,T.SELECT_KINDS=[],T.TRY_SUPPORTED=!1,T.SUPPORTS_UESCAPE=!1,T.QUERY_HINTS=!1,T.NVL2_SUPPORTED=!1,T.TABLESAMPLE_REQUIRES_PARENS=!1,T.TABLESAMPLE_SIZE_IS_ROWS=!1,T.TABLESAMPLE_KEYWORDS="SAMPLE",T.LAST_DAY_SUPPORTS_DATE_PART=!1,T.CAN_IMPLEMENT_ARRAY_ANY=!0,T.SUPPORTS_TO_NUMBER=!1,T.JOIN_HINTS=!1,T.TABLE_HINTS=!1,T.GROUPINGS_SEP="",T.SET_OP_MODIFIERS=!1,T.ARRAY_SIZE_NAME="LENGTH",T.WRAP_DERIVED_VALUES=!1;var jt=T,hs,As,fs,gs,Is,ds,xs,L,S=class extends(xs=$t,ds=[a],Is=[a],gs=[a],fs=[a],As=[a],hs=[a],xs){static get NORMALIZE_FUNCTIONS(){return""}static get NULL_ORDERING(){return"nulls_are_last"}static get NORMALIZATION_STRATEGY(){return"caseSensitive"}static get UNESCAPED_SEQUENCES(){return{"\\0":"\0"}}static get CREATABLE_KIND_MAPPING(){return{DATABASE:"SCHEMA"}}static get SET_OP_DISTINCT_BY_DEFAULT(){return{except:!1,intersect:!1}}generateValuesAliases(t){let e=t.args.expressions?.[0]?.args.expressions,r=e?.[0],s=e?.[1],n=e&&1<e.length&&r instanceof D&&r?.isString&&s instanceof U?r:void 0,c=[];if(n)c=n.name.split(",").map(A=>A.trim()).map(A=>H(A.split(" ")[0]));else if(e?.[0]instanceof D){let l=e[0].args.expressions?.length;c=Array.from({length:l??0},(A,g)=>H(`c${g+1}`))}return c}};L=_(xs),i(L,10,"NORMALIZE_FUNCTIONS",ds,S),i(L,10,"NULL_ORDERING",Is,S),i(L,10,"NORMALIZATION_STRATEGY",gs,S),i(L,10,"UNESCAPED_SEQUENCES",fs,S),i(L,10,"CREATABLE_KIND_MAPPING",As,S),i(L,10,"SET_OP_DISTINCT_BY_DEFAULT",hs,S),C(L,S),q(L,3,S),S.DIALECT_NAME="clickhouse",S.INDEX_OFFSET=1,S.SUPPORTS_USER_DEFINED_TYPES=!1,S.SAFE_DIVISION=!0,S.LOG_BASE_FIRST=void 0,S.FORCE_EARLY_ALIAS_REF_EXPANSION=!0,S.PRESERVE_ORIGINAL_NAMES=!0,S.NUMBERS_CAN_BE_UNDERSCORE_SEPARATED=!0,S.IDENTIFIERS_CAN_START_WITH_DIGIT=!0,S.HEX_STRING_IS_INTEGER_TYPE=!0,S.Tokenizer=I,S.Parser=Qt,S.Generator=jt;$t.register("clickhouse",S);export{S as ClickHouse,jt as ClickHouseGenerator,ms as unixToTimeSql};
2
+ //# sourceMappingURL=clickhouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dialects/clickhouse.ts"],"sourcesContent":["import {\n Generator, unsupportedArgs,\n} from '../generator';\nimport {\n buildVarMap, Parser,\n} from '../parser';\nimport {\n Tokenizer, TokenType,\n} from '../tokens';\nimport type {\n Token, TokenPair,\n} from '../tokens';\nimport type {\n ValuesExpr,\n JoinExpr,\n FuncExpr,\n PrimaryKeyColumnConstraintExpr,\n PrimaryKeyExpr,\n ExtractExpr,\n RegexpILikeExpr,\n NeqExpr,\n EqExpr,\n LikePropertyExpr,\n TryCastExpr,\n OffsetExpr,\n PreWhereExpr,\n CreateExpr,\n IsExpr,\n} from '../expressions';\nimport {\n InExpr,\n CastExpr,\n MapExpr, TimeStrToTimeExpr,\n StrPositionExpr,\n PropertiesLocation,\n ToTablePropertyExpr,\n VolatilePropertyExpr,\n LeadExpr,\n LagExpr,\n ChrExpr,\n StddevExpr,\n SchemaCommentPropertyExpr,\n VarianceExpr,\n TrimExpr,\n Sha2DigestExpr,\n Sha1DigestExpr,\n IndexColumnConstraintExpr,\n PartitionExpr,\n PartitionIdExpr,\n ReplacePartitionExpr,\n QuantileExpr,\n CteExpr,\n NotExpr,\n VarMapExpr,\n IdentifierExpr,\n EnginePropertyExpr,\n SplitExpr,\n Expression,\n DateAddExpr,\n DateDiffExpr,\n TimestampTruncExpr,\n ArrayContainsExpr,\n TimeToStrExpr,\n ExplodeExpr,\n PartitionedByPropertyExpr,\n PivotExpr,\n RandExpr,\n StructExpr,\n AnyValueExpr,\n ApproxDistinctExpr,\n ArrayConcatExpr,\n ArraySumExpr,\n CountIfExpr,\n ColumnsExpr,\n ApplyExpr,\n DataTypeExprKind,\n ArrayFilterExpr,\n ArrayRemoveExpr,\n ArrayReverseExpr,\n ArraySliceExpr,\n ArrayExpr,\n ArgMaxExpr,\n ArgMinExpr,\n CurrentDatabaseExpr,\n CurrentSchemasExpr,\n CosineDistanceExpr,\n CompressColumnConstraintExpr,\n var_,\n UnixToTimeExpr,\n cast,\n DivExpr,\n CombinedAggFuncExpr,\n AnonymousExpr,\n StrToDateExpr,\n DataTypeExpr,\n LiteralExpr,\n DataTypeParamExpr,\n toIdentifier,\n TupleExpr,\n CurrentVersionExpr,\n DateSubExpr,\n ILikeExpr,\n JsonExtractScalarExpr,\n LengthExpr,\n LikeExpr,\n EuclideanDistanceExpr,\n RegexpLikeExpr,\n ParseDatetimeExpr,\n TimestampSubExpr,\n TimestampAddExpr,\n XorExpr,\n Md5DigestExpr,\n Sha2Expr,\n RegexpSplitExpr,\n SubstringIndexExpr,\n TypeofExpr,\n LevenshteinExpr,\n JarowinklerSimilarityExpr,\n TableExpr,\n GenerateSeriesExpr,\n TableAliasExpr,\n FinalExpr,\n WindowExpr,\n CombinedParameterizedAggExpr,\n ParameterizedAggExpr,\n AnonymousAggFuncExpr,\n OnClusterExpr,\n ProjectionDefExpr,\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n ShaExpr,\n Md5Expr,\n StartsWithExpr,\n TruncExpr,\n EndsWithExpr,\n NullifExpr,\n MedianExpr,\n JsonExtractExpr,\n AndExpr,\n OrExpr,\n IfExpr,\n PlaceholderExpr,\n PropertyEqExpr,\n CastToStrTypeExpr,\n ComputedColumnConstraintExpr,\n CurrentDateExpr,\n DateStrToDateExpr,\n FarmFingerprintExpr,\n IsNanExpr,\n JsonCastExpr,\n ExpressionKey,\n AnyExpr,\n isType,\n SelectExpr,\n FetchExpr,\n paren,\n QueryExpr,\n SchemaExpr,\n JoinExprKind,\n} from '../expressions';\nimport {\n isInt,\n seqGet,\n} from '../helper';\nimport {\n cache, narrowInstanceOf,\n} from '../port_internals';\nimport type {\n DatetimeDelta,\n} from './dialect';\nimport {\n buildDateDelta,\n buildFormattedTime,\n noPivotSql,\n Dialect, NormalizationStrategy, Dialects,\n unitToVar,\n renameFunc,\n varMapSql,\n buildLike,\n buildJsonExtractPath,\n trimSql,\n timestampTruncSql,\n sha256Sql,\n sha2DigestSql,\n strPositionSql,\n lengthOrCharLengthSql,\n jsonPathKeyOnlyName,\n jsonExtractSegments,\n removeFromArrayUsingFilter,\n argMaxOrMinNoCount,\n inlineArraySql,\n NullOrdering,\n NormalizeFunctions,\n} from './dialect';\n\nconst TIMESTAMP_TRUNC_UNITS = new Set([\n 'MICROSECOND',\n 'MILLISECOND',\n 'SECOND',\n 'MINUTE',\n 'HOUR',\n 'DAY',\n 'MONTH',\n 'QUARTER',\n 'YEAR',\n]);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction buildDateTimeFormat<E extends Expression> (exprType: new (args: any) => E): (args: Expression[]) => E {\n return (args: Expression[]) => {\n const expr = buildFormattedTime(exprType, {\n dialect: Dialects.CLICKHOUSE,\n })(args);\n const timezone = seqGet(args, 2);\n if (timezone) {\n expr.setArgKey('zone', timezone);\n }\n return expr;\n };\n}\n\nexport function unixToTimeSql (this: Generator, expression: UnixToTimeExpr): string {\n const scale = expression.args.scale;\n const scaleValue = scale?.toValue();\n const timestamp = expression.args.this;\n\n if (scaleValue === undefined || scaleValue === UnixToTimeExpr.SECONDS.toValue()) {\n return this.func('fromUnixTimestamp', [\n cast(timestamp, DataTypeExprKind.BIGINT),\n ]);\n }\n if (scaleValue === UnixToTimeExpr.MILLIS.toValue()) {\n return this.func('fromUnixTimestamp64Milli', [\n cast(timestamp, DataTypeExprKind.BIGINT),\n ]);\n }\n if (scaleValue === UnixToTimeExpr.MICROS.toValue()) {\n return this.func('fromUnixTimestamp64Micro', [\n cast(timestamp, DataTypeExprKind.BIGINT),\n ]);\n }\n if (scaleValue === UnixToTimeExpr.NANOS.toValue()) {\n return this.func('fromUnixTimestamp64Nano', [\n cast(timestamp, DataTypeExprKind.BIGINT),\n ]);\n }\n\n return this.func('fromUnixTimestamp', [\n cast(\n new DivExpr({\n this: timestamp,\n expression: this.func('POW', [\n '10',\n scale,\n ]),\n }),\n DataTypeExprKind.BIGINT,\n ),\n ]);\n}\n\nfunction lowerFunc (sql: string): string {\n const index = sql.indexOf('(');\n if (index === -1) return sql.toLowerCase();\n return sql.slice(0, index).toLowerCase() + sql.slice(index);\n}\n\nfunction quantileSql (this: Generator, expression: QuantileExpr): string {\n const quantile = expression.args.quantile;\n const argsSql = `(${this.sql(expression, 'this')})`;\n\n let func: string;\n if (quantile instanceof ArrayExpr) {\n func = this.func('quantiles', quantile.args.expressions || [\n ]);\n } else {\n func = this.func('quantile', [\n quantile,\n ]);\n }\n\n return func + argsSql;\n}\n\nfunction buildCountIf (args: Expression[]): CountIfExpr | CombinedAggFuncExpr {\n if (args.length === 1) {\n return new CountIfExpr({\n this: seqGet(args, 0),\n });\n }\n\n return new CombinedAggFuncExpr({\n this: 'countIf',\n expressions: args,\n });\n}\n\nfunction buildStrToDate (args: Expression[]): CastExpr | AnonymousExpr {\n if (args.length === 3) {\n return new AnonymousExpr({\n this: 'STR_TO_DATE',\n expressions: args,\n });\n }\n\n const strToDate = StrToDateExpr.fromArgList(args);\n return cast(strToDate, DataTypeExpr.build(DataTypeExprKind.DATETIME));\n}\n\nfunction datetimeDeltaSql (name: string): (this: Generator, expression: DatetimeDelta) => string {\n return function (this: Generator, expression: DatetimeDelta): string {\n if (!expression.unit) {\n return renameFunc(name).call(this, expression);\n }\n\n const zone = expression.getArgKey('zone');\n\n return this.func(name, [\n unitToVar(expression),\n expression.args.expression,\n expression.args.this,\n ...(Array.isArray(zone)\n ? [\n ]\n : [\n narrowInstanceOf(zone, 'string', Expression),\n ]),\n ]);\n };\n}\n\nfunction timeStrToTimeSql (this: Generator, expression: TimeStrToTimeExpr): string {\n let ts = expression.args.this;\n const tz = expression.args.zone;\n\n if (tz && ts instanceof LiteralExpr) {\n let tsString = ts.name.trim();\n\n // separate [date and time] from [fractional seconds and UTC offset]\n const tsParts = tsString.split('.');\n if (tsParts.length === 2) {\n // separate fractional seconds and UTC offset\n const offsetSep = tsParts[1].includes('+') ? '+' : '-';\n const tsFracParts = tsParts[1].split(offsetSep);\n const numFracParts = tsFracParts.length;\n\n // pad to 6 digits if fractional seconds present\n tsFracParts[0] = tsFracParts[0].padEnd(6, '0');\n tsString = [\n tsParts[0],\n '.',\n tsFracParts[0],\n 1 < numFracParts ? offsetSep : '',\n 1 < numFracParts ? tsFracParts[1] : '',\n ].join('');\n }\n\n // Convert to ISO format without timezone for Clickhouse\n // We use Date parsing; replace ' ' with 'T' for standard ISO compatibility if needed\n const date = new Date(tsString.replace(' ', 'T'));\n const tsWithoutTz = date.toISOString().replace('T', ' ')\n .split('.')[0];\n\n ts = LiteralExpr.string(tsWithoutTz);\n }\n\n // Non-nullable DateTime64 with microsecond precision\n const expressions = tz\n ? [\n new DataTypeParamExpr({\n this: tz,\n }),\n ]\n : [\n ];\n const datatype = DataTypeExpr.build(DataTypeExprKind.DATETIME64, {\n expressions: [\n new DataTypeParamExpr({\n this: LiteralExpr.number(6),\n }),\n ...expressions,\n ],\n nullable: false,\n });\n\n return this.sql(cast(\n ts,\n datatype,\n {\n dialect: this.dialect,\n },\n ));\n}\n\nfunction mapSql (this: Generator, expression: MapExpr | VarMapExpr): string {\n if (!(expression.parent && expression.parent.argKey === 'settings')) {\n return lowerFunc(varMapSql.call(this, expression));\n }\n\n const keys = expression.args.keys;\n const values = expression.args.values;\n\n if (!(keys instanceof ArrayExpr) || !(values instanceof ArrayExpr)) {\n this.unsupported('Cannot convert array columns into map.');\n return '';\n }\n\n const args: string[] = [\n ];\n const keyExprs = keys.args.expressions;\n const valueExprs = values.args.expressions;\n\n for (let i = 0; i < Math.min(keyExprs?.length ?? 0, valueExprs?.length ?? 0); i++) {\n args.push(`${this.sql(keyExprs?.[i])}: ${this.sql(valueExprs?.[i])}`);\n }\n\n return `{${args.join(', ')}}`;\n}\n\nfunction buildTimestampTrunc (unit: string): (args: Expression[]) => TimestampTruncExpr {\n return (args: Expression[]): TimestampTruncExpr => {\n return new TimestampTruncExpr({\n this: seqGet(args, 0),\n unit: var_(unit),\n zone: seqGet(args, 1),\n });\n };\n}\n\nfunction buildSplitByChar (args: Expression[]): SplitExpr | AnonymousExpr {\n const sep = seqGet(args, 0);\n if (sep instanceof LiteralExpr) {\n const sepValue = sep.toValue();\n if (typeof sepValue === 'string' && new TextEncoder().encode(sepValue).length === 1) {\n return buildSplit(SplitExpr)(args);\n }\n }\n\n return new AnonymousExpr({\n this: 'splitByChar',\n expressions: args,\n });\n}\n\nfunction buildSplit<E extends Expression> (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n expClass: new (args: any) => E,\n): (args: Expression[]) => E {\n return (args: Expression[]): E =>\n new expClass({\n this: seqGet(args, 1),\n expression: seqGet(args, 0),\n limit: seqGet(args, 2),\n });\n}\n\nclass ClickHouseTokenizer extends Tokenizer {\n @cache\n static get COMMENTS (): (string | [string, string])[] {\n return [\n '--',\n '#',\n '#!',\n [\n '/*',\n '*/',\n ],\n ];\n }\n\n @cache\n static get IDENTIFIERS () {\n return [\n '\"',\n '`',\n ];\n }\n\n @cache\n static get IDENTIFIER_ESCAPES () {\n return [\n '\\\\',\n ];\n }\n\n @cache\n static get STRING_ESCAPES () {\n return [\n '\\'',\n '\\\\',\n ];\n }\n\n @cache\n static get BIT_STRINGS (): TokenPair[] {\n return [\n [\n '0b',\n '',\n ],\n ];\n }\n\n @cache\n static get HEX_STRINGS (): TokenPair[] {\n return [\n [\n '0x',\n '',\n ],\n [\n '0X',\n '',\n ],\n ];\n }\n\n @cache\n static get HEREDOC_STRINGS () {\n return [\n '$',\n ];\n }\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n const keywords: Record<string, TokenType> = {\n ...Tokenizer.KEYWORDS,\n '.:': TokenType.DOTCOLON,\n 'ATTACH': TokenType.COMMAND,\n 'DATE32': TokenType.DATE32,\n 'DATETIME64': TokenType.DATETIME64,\n 'DICTIONARY': TokenType.DICTIONARY,\n 'DYNAMIC': TokenType.DYNAMIC,\n 'ENUM8': TokenType.ENUM8,\n 'ENUM16': TokenType.ENUM16,\n 'EXCHANGE': TokenType.COMMAND,\n 'FINAL': TokenType.FINAL,\n 'FIXEDSTRING': TokenType.FIXEDSTRING,\n 'FLOAT32': TokenType.FLOAT,\n 'FLOAT64': TokenType.DOUBLE,\n 'GLOBAL': TokenType.GLOBAL,\n 'LOWCARDINALITY': TokenType.LOWCARDINALITY,\n 'MAP': TokenType.MAP,\n 'NESTED': TokenType.NESTED,\n 'NOTHING': TokenType.NOTHING,\n 'SAMPLE': TokenType.TABLE_SAMPLE,\n 'TUPLE': TokenType.STRUCT,\n 'UINT16': TokenType.USMALLINT,\n 'UINT32': TokenType.UINT,\n 'UINT64': TokenType.UBIGINT,\n 'UINT8': TokenType.UTINYINT,\n 'IPV4': TokenType.IPV4,\n 'IPV6': TokenType.IPV6,\n 'POINT': TokenType.POINT,\n 'RING': TokenType.RING,\n 'LINESTRING': TokenType.LINESTRING,\n 'MULTILINESTRING': TokenType.MULTILINESTRING,\n 'POLYGON': TokenType.POLYGON,\n 'MULTIPOLYGON': TokenType.MULTIPOLYGON,\n 'AGGREGATEFUNCTION': TokenType.AGGREGATEFUNCTION,\n 'SIMPLEAGGREGATEFUNCTION': TokenType.SIMPLEAGGREGATEFUNCTION,\n 'SYSTEM': TokenType.COMMAND,\n 'PREWHERE': TokenType.PREWHERE,\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.HEREDOC_STRING,\n };\n }\n}\n\nclass ClickHouseParser 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.LIKE,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get NO_PAREN_FUNCTIONS () {\n const noParenFunctions = {\n ...Parser.NO_PAREN_FUNCTIONS,\n };\n delete noParenFunctions[TokenType.CURRENT_TIMESTAMP];\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n static MODIFIERS_ATTACHED_TO_SET_OP = false;\n static INTERVAL_SPANS = false;\n static OPTIONAL_ALIAS_TOKEN_CTE = false;\n static JOINS_HAVE_EQUAL_PRECEDENCE = true;\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n const parsers: Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> = {\n ...Parser.FUNCTIONS,\n ...Object.fromEntries(\n [\n ...TIMESTAMP_TRUNC_UNITS,\n ].map((unit) => [\n `TOSTARTOF${unit}`,\n buildTimestampTrunc(unit),\n ]),\n ),\n ANY: (args: unknown[]) => AnyValueExpr.fromArgList(args),\n ARRAYSUM: (args: unknown[]) => ArraySumExpr.fromArgList(args),\n ARRAYREVERSE: (args: unknown[]) => ArrayReverseExpr.fromArgList(args),\n ARRAYSLICE: (args: unknown[]) => ArraySliceExpr.fromArgList(args),\n CURRENTDATABASE: (args: unknown[]) => CurrentDatabaseExpr.fromArgList(args),\n CURRENTSCHEMAS: (args: unknown[]) => CurrentSchemasExpr.fromArgList(args),\n COUNTIF: buildCountIf,\n COSINEDISTANCE: (args: unknown[]) => CosineDistanceExpr.fromArgList(args),\n VERSION: (args: unknown[]) => CurrentVersionExpr.fromArgList(args),\n DATE_ADD: buildDateDelta(DateAddExpr, undefined, {\n defaultUnit: undefined,\n }),\n DATEADD: buildDateDelta(DateAddExpr, undefined, {\n defaultUnit: undefined,\n }),\n DATE_DIFF: buildDateDelta(DateDiffExpr, undefined, {\n defaultUnit: undefined,\n supportsTimezone: true,\n }),\n DATEDIFF: buildDateDelta(DateDiffExpr, undefined, {\n defaultUnit: undefined,\n supportsTimezone: true,\n }),\n DATE_FORMAT: buildDateTimeFormat(TimeToStrExpr),\n DATE_SUB: buildDateDelta(DateSubExpr, undefined, {\n defaultUnit: undefined,\n }),\n DATESUB: buildDateDelta(DateSubExpr, undefined, {\n defaultUnit: undefined,\n }),\n FORMATDATETIME: buildDateTimeFormat(TimeToStrExpr),\n HAS: (args: unknown[]) => ArrayContainsExpr.fromArgList(args),\n ILIKE: buildLike(ILikeExpr),\n JSONEXTRACTSTRING: buildJsonExtractPath(JsonExtractScalarExpr, {\n zeroBasedIndexing: false,\n }),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LENGTH: (args: any[]) => new LengthExpr({\n this: seqGet(args, 0),\n binary: true,\n }),\n LIKE: buildLike(LikeExpr),\n L2Distance: (args: unknown[]) => EuclideanDistanceExpr.fromArgList(args),\n MAP: buildVarMap,\n MATCH: (args: unknown[]) => RegexpLikeExpr.fromArgList(args),\n NOTLIKE: buildLike(LikeExpr, {\n notLike: true,\n }),\n PARSEDATETIME: buildDateTimeFormat(ParseDatetimeExpr),\n RANDCANONICAL: (args: unknown[]) => RandExpr.fromArgList(args),\n STR_TO_DATE: buildStrToDate,\n TIMESTAMP_SUB: buildDateDelta(TimestampSubExpr, undefined, {\n defaultUnit: undefined,\n }),\n TIMESTAMPSUB: buildDateDelta(TimestampSubExpr, undefined, {\n defaultUnit: undefined,\n }),\n TIMESTAMP_ADD: buildDateDelta(TimestampAddExpr, undefined, {\n defaultUnit: undefined,\n }),\n TIMESTAMPADD: buildDateDelta(TimestampAddExpr, undefined, {\n defaultUnit: undefined,\n }),\n TOMONDAY: buildTimestampTrunc('WEEK'),\n UNIQ: (args: unknown[]) => ApproxDistinctExpr.fromArgList(args),\n XOR: (args: Expression[]) => new XorExpr({\n expressions: args,\n }),\n MD5: (args: unknown[]) => Md5DigestExpr.fromArgList(args),\n SHA256: (args: Expression[]) =>\n new Sha2Expr({\n this: seqGet(args, 0),\n length: LiteralExpr.number(256),\n }),\n SHA512: (args: Expression[]) =>\n new Sha2Expr({\n this: seqGet(args, 0),\n length: LiteralExpr.number(512),\n }),\n SPLITBYCHAR: buildSplitByChar,\n SPLITBYREGEXP: buildSplit(RegexpSplitExpr),\n SPLITBYSTRING: buildSplit(SplitExpr),\n SUBSTRINGINDEX: (args: unknown[]) => SubstringIndexExpr.fromArgList(args),\n TOTYPENAME: (args: unknown[]) => TypeofExpr.fromArgList(args),\n EDITDISTANCE: (args: unknown[]) => LevenshteinExpr.fromArgList(args),\n JAROWINKLERSIMILARITY: (args: unknown[]) => JarowinklerSimilarityExpr.fromArgList(args),\n LEVENSHTEINDISTANCE: (args: unknown[]) => LevenshteinExpr.fromArgList(args),\n };\n delete parsers['TRANSFORM'];\n delete parsers['APPROX_TOP_SUM'];\n\n return parsers;\n }\n\n @cache\n static get AGG_FUNCTIONS () {\n return new Set([\n 'count',\n 'min',\n 'max',\n 'sum',\n 'avg',\n 'any',\n 'stddevPop',\n 'stddevSamp',\n 'varPop',\n 'varSamp',\n 'corr',\n 'covarPop',\n 'covarSamp',\n 'entropy',\n 'exponentialMovingAverage',\n 'intervalLengthSum',\n 'kolmogorovSmirnovTest',\n 'mannWhitneyUTest',\n 'median',\n 'rankCorr',\n 'sumKahan',\n 'studentTTest',\n 'welchTTest',\n 'anyHeavy',\n 'anyLast',\n 'boundingRatio',\n 'first_value',\n 'last_value',\n 'argMin',\n 'argMax',\n 'avgWeighted',\n 'topK',\n 'approx_top_sum',\n 'topKWeighted',\n 'deltaSum',\n 'deltaSumTimestamp',\n 'groupArray',\n 'groupArrayLast',\n 'groupUniqArray',\n 'groupArrayInsertAt',\n 'groupArrayMovingAvg',\n 'groupArrayMovingSum',\n 'groupArraySample',\n 'groupBitAnd',\n 'groupBitOr',\n 'groupBitXor',\n 'groupBitmap',\n 'groupBitmapAnd',\n 'groupBitmapOr',\n 'groupBitmapXor',\n 'sumWithOverflow',\n 'sumMap',\n 'minMap',\n 'maxMap',\n 'skewSamp',\n 'skewPop',\n 'kurtSamp',\n 'kurtPop',\n 'uniq',\n 'uniqExact',\n 'uniqCombined',\n 'uniqCombined64',\n 'uniqHLL12',\n 'uniqTheta',\n 'quantile',\n 'quantiles',\n 'quantileExact',\n 'quantilesExact',\n 'quantilesExactExclusive',\n 'quantileExactLow',\n 'quantilesExactLow',\n 'quantileExactHigh',\n 'quantilesExactHigh',\n 'quantileExactWeighted',\n 'quantilesExactWeighted',\n 'quantileTiming',\n 'quantilesTiming',\n 'quantileTimingWeighted',\n 'quantilesTimingWeighted',\n 'quantileDeterministic',\n 'quantilesDeterministic',\n 'quantileTDigest',\n 'quantilesTDigest',\n 'quantileTDigestWeighted',\n 'quantilesTDigestWeighted',\n 'quantileBFloat16',\n 'quantilesBFloat16',\n 'quantileBFloat16Weighted',\n 'quantilesBFloat16Weighted',\n 'simpleLinearRegression',\n 'stochasticLinearRegression',\n 'stochasticLogisticRegression',\n 'categoricalInformationValue',\n 'contingency',\n 'cramersV',\n 'cramersVBiasCorrected',\n 'theilsU',\n 'maxIntersections',\n 'maxIntersectionsPosition',\n 'meanZTest',\n 'quantileInterpolatedWeighted',\n 'quantilesInterpolatedWeighted',\n 'quantileGK',\n 'quantilesGK',\n 'sparkBar',\n 'sumCount',\n 'largestTriangleThreeBuckets',\n 'histogram',\n 'sequenceMatch',\n 'sequenceCount',\n 'windowFunnel',\n 'retention',\n 'uniqUpTo',\n 'sequenceNextNode',\n 'exponentialTimeDecayedAvg',\n ]);\n }\n\n @cache\n static get AGG_FUNCTIONS_SUFFIXES () {\n return [\n 'If',\n 'Array',\n 'ArrayIf',\n 'Map',\n 'SimpleState',\n 'State',\n 'Merge',\n 'MergeState',\n 'ForEach',\n 'Distinct',\n 'OrDefault',\n 'OrNull',\n 'Resample',\n 'ArgMin',\n 'ArgMax',\n ];\n }\n\n @cache\n static get FUNC_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.FUNC_TOKENS,\n TokenType.AND,\n TokenType.OR,\n TokenType.SET,\n ]);\n }\n\n @cache\n static get RESERVED_TOKENS (): Set<TokenType> {\n return new Set(\n [\n ...Parser.RESERVED_TOKENS,\n ].filter((t) => t !== TokenType.SELECT),\n );\n }\n\n @cache\n static get AGG_FUNC_MAPPING (): Record<string, [string, string]> {\n const mapping: Record<string, [string, string]> = {};\n const suffixes = [\n ...ClickHouseParser.AGG_FUNCTIONS_SUFFIXES,\n '',\n ];\n for (const sfx of suffixes) {\n for (const f of ClickHouseParser.AGG_FUNCTIONS) {\n mapping[`${f}${sfx}`] = [\n f,\n sfx,\n ];\n }\n }\n return mapping;\n }\n\n @cache\n static get FUNCTION_PARSERS (): Record<string, (this: Parser) => Expression> {\n const parsers: Record<string, (this: Parser) => Expression> = {\n ...Parser.FUNCTION_PARSERS,\n ARRAYJOIN: function (this: Parser) {\n return this.expression(ExplodeExpr, {\n this: this.parseExpression(),\n });\n },\n QUANTILE: function (this: Parser) {\n return (this as ClickHouseParser).parseQuantile();\n },\n MEDIAN: function (this: Parser) {\n return (this as ClickHouseParser).parseQuantile();\n },\n COLUMNS: function (this: Parser) {\n return (this as ClickHouseParser).parseColumns();\n },\n TUPLE: function (this: Parser) {\n return StructExpr.fromArgList(this.parseFunctionArgs({\n alias: true,\n }));\n },\n AND: function (this: Parser) {\n const args = this.parseFunctionArgs({\n alias: false,\n });\n return new AndExpr({\n this: args[0],\n expression: args[1],\n });\n },\n OR: function (this: Parser) {\n const args = this.parseFunctionArgs({\n alias: false,\n });\n return new OrExpr({\n this: args[0],\n expression: args[1],\n });\n },\n };\n\n delete parsers['MATCH'];\n return parsers;\n }\n\n @cache\n static get PROPERTY_PARSERS (): Record<string, (this: Parser) => Expression> {\n const parsers: Record<string, (this: Parser) => Expression> = {\n ...Parser.PROPERTY_PARSERS,\n ENGINE: function (this: Parser) {\n return (this as ClickHouseParser).parseEngineProperty();\n },\n };\n delete parsers['DYNAMIC'];\n return parsers;\n }\n\n @cache\n static get NO_PAREN_FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n const parsers = {\n ...Parser.NO_PAREN_FUNCTION_PARSERS,\n };\n delete parsers['ANY'];\n return parsers;\n }\n\n @cache\n static get RANGE_PARSERS (): Partial<Record<TokenType, (this: Parser, this_: Expression) => Expression | undefined>> {\n return {\n ...Parser.RANGE_PARSERS,\n [TokenType.GLOBAL]: function (this: Parser, thisNode: Expression) {\n return (this as ClickHouseParser).parseGlobalIn(thisNode);\n },\n };\n }\n\n @cache\n static get COLUMN_OPERATORS (): Partial<Record<TokenType, undefined | ((this: Parser, this_?: Expression, to?: Expression) => Expression)>> {\n const parsers = {\n ...Parser.COLUMN_OPERATORS,\n };\n delete parsers[TokenType.PLACEHOLDER];\n return parsers;\n }\n\n @cache\n static get JOIN_KINDS (): Set<TokenType> {\n return new Set([\n ...Parser.JOIN_KINDS,\n TokenType.ANY,\n TokenType.ASOF,\n TokenType.ARRAY,\n ]);\n }\n\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.TABLE_ALIAS_TOKENS,\n TokenType.ANY,\n TokenType.ARRAY,\n TokenType.FINAL,\n TokenType.FORMAT,\n TokenType.SETTINGS,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n\n @cache\n static get ALIAS_TOKENS (): Set<TokenType> {\n return new Set(\n [\n ...Parser.ALIAS_TOKENS,\n ].filter((t) => t !== TokenType.FORMAT),\n );\n }\n\n static LOG_DEFAULTS_TO_LN = true;\n\n @cache\n static get QUERY_MODIFIER_PARSERS (): Record<string, (this: Parser) => [string, string | Expression | Expression[] | undefined]> {\n return {\n ...Parser.QUERY_MODIFIER_PARSERS,\n [TokenType.SETTINGS]: function (this: Parser) {\n return [\n 'settings',\n ((this as ClickHouseParser).advance(), this.parseCsv(() => this.parseAssignment())),\n ];\n },\n [TokenType.FORMAT]: function (this: Parser) {\n return [\n 'format',\n ((this as ClickHouseParser).advance(), this.parseIdVar()),\n ];\n },\n };\n }\n\n @cache\n static get CONSTRAINT_PARSERS (): Record<string, (this: Parser) => Expression> {\n return {\n ...Parser.CONSTRAINT_PARSERS,\n INDEX: function (this: Parser) {\n return (this as ClickHouseParser).parseIndexConstraint();\n },\n CODEC: function (this: Parser) {\n return (this as ClickHouseParser).parseCompress();\n },\n };\n }\n\n @cache\n static get ALTER_PARSERS (): Record<string, (this: Parser) => Expression> {\n return {\n ...Parser.ALTER_PARSERS,\n REPLACE: function (this: Parser) {\n return (this as ClickHouseParser).parseAlterTableReplace()!;\n },\n };\n }\n\n @cache\n static get SCHEMA_UNNAMED_CONSTRAINTS (): Set<string> {\n return new Set([\n ...Parser.SCHEMA_UNNAMED_CONSTRAINTS,\n 'INDEX',\n ]);\n }\n\n @cache\n static get PLACEHOLDER_PARSERS (): Record<string, (this: Parser) => Expression | undefined> {\n return {\n ...Parser.PLACEHOLDER_PARSERS,\n [TokenType.L_BRACE]: function (this: Parser) {\n return (this as ClickHouseParser).parseQueryParameter();\n },\n };\n }\n\n parseEngineProperty (): EnginePropertyExpr {\n this.match(TokenType.EQ);\n return this.expression(EnginePropertyExpr, {\n this: this.parseField({\n anyToken: true,\n anonymousFunc: true,\n }),\n });\n }\n\n // https://clickhouse.com/docs/en/sql-reference/statements/create/function\n parseUserDefinedFunctionExpression (): Expression | undefined {\n return this.parseLambda();\n }\n\n parseTypes (options: {checkFunc?: boolean;\n schema?: boolean;\n allowIdentifiers?: boolean;} = {}): Expression | undefined {\n const {\n checkFunc = false, schema = false, allowIdentifiers = true,\n } = options;\n const dtype = super.parseTypes({\n checkFunc,\n schema,\n allowIdentifiers,\n });\n\n if (dtype instanceof DataTypeExpr && (dtype.args.nullable as unknown) !== true) {\n // Mark every type as non-nullable which is ClickHouse's default\n dtype.setArgKey('nullable', false);\n }\n\n return dtype;\n }\n\n parseExtract (): ExtractExpr | AnonymousExpr {\n const index = this.index;\n const thisNode = this.parseBitwise();\n\n if (this.match(TokenType.FROM)) {\n this.retreat(index);\n return super.parseExtract() as ExtractExpr;\n }\n\n this.match(TokenType.COMMA);\n return this.expression(AnonymousExpr, {\n this: 'extract',\n expressions: [\n thisNode,\n this.parseBitwise(),\n ],\n });\n }\n\n parseAssignment (): Expression | undefined {\n const thisNode = super.parseAssignment();\n\n if (this.match(TokenType.PLACEHOLDER)) {\n return this.expression(IfExpr, {\n this: thisNode,\n true: this.parseAssignment(),\n false: this.match(TokenType.COLON) ? this.parseAssignment() : undefined,\n });\n }\n\n return thisNode;\n }\n\n /**\n * Parse a placeholder expression like SELECT {abc: UInt32} or FROM {table: Identifier}\n */\n parseQueryParameter (): Expression | undefined {\n const index = this.index;\n\n const thisNode = this.parseIdVar();\n this.match(TokenType.COLON);\n\n const kind =\n this.parseTypes({\n checkFunc: false,\n allowIdentifiers: false,\n })\n || (this.matchTextSeq('IDENTIFIER') ? 'Identifier' : undefined);\n\n if (!kind) {\n this.retreat(index);\n return undefined;\n } else if (!this.match(TokenType.R_BRACE)) {\n this.raiseError('Expecting }');\n }\n\n let finalThis = thisNode;\n if (thisNode instanceof IdentifierExpr && !thisNode.quoted) {\n finalThis = var_(thisNode.name);\n }\n\n return this.expression(PlaceholderExpr, {\n this: finalThis,\n kind: kind,\n });\n }\n\n parseBracket (thisNode?: Expression): Expression | undefined {\n const lBrace = this.match(TokenType.L_BRACE, {\n advance: false,\n });\n const bracket = super.parseBracket(thisNode);\n\n if (lBrace && bracket instanceof StructExpr) {\n const varmap = new VarMapExpr({\n keys: new ArrayExpr({\n expressions: [\n ],\n }),\n values: new ArrayExpr({\n expressions: [\n ],\n }),\n });\n\n for (const expression of (bracket.args.expressions ?? [\n ])) {\n if (!(expression instanceof PropertyEqExpr)) {\n break;\n }\n\n narrowInstanceOf(varmap.args.keys, Expression)?.append('expressions', LiteralExpr.string(expression.name));\n narrowInstanceOf(varmap.args.values, Expression)?.append('expressions', expression.args.expression);\n }\n\n return varmap;\n }\n\n return bracket;\n }\n\n parseIn (thisNode?: Expression, options: {\n isGlobal?: boolean;\n [index: string]: unknown;\n } = {}): InExpr {\n const {\n isGlobal = false,\n } = options;\n const result = super.parseIn(thisNode);\n result.setArgKey('isGlobal', isGlobal);\n return result;\n }\n\n parseGlobalIn (thisNode?: Expression): NotExpr | InExpr | undefined {\n const isNegated = this.match(TokenType.NOT);\n const resultIn = this.match(TokenType.IN)\n ? this.parseIn(thisNode, {\n isGlobal: true,\n })\n : undefined;\n\n return isNegated\n ? this.expression(NotExpr, {\n this: resultIn,\n })\n : resultIn;\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 const {\n schema = false,\n joins = false,\n aliasTokens,\n parseBracket = false,\n isDbReference = false,\n } = options;\n\n let thisNode = super.parseTable({\n schema,\n joins,\n aliasTokens,\n parseBracket,\n isDbReference,\n });\n\n if (thisNode instanceof TableExpr) {\n const inner = thisNode.args.this;\n const alias = thisNode.args.alias;\n\n if (inner instanceof GenerateSeriesExpr && alias instanceof TableAliasExpr && !alias.args.columns) {\n alias.setArgKey('columns', [\n toIdentifier('generate_series'),\n ]);\n }\n }\n\n if (this.match(TokenType.FINAL)) {\n thisNode = this.expression(FinalExpr, {\n this: thisNode,\n });\n }\n\n return thisNode;\n }\n\n parsePosition (_options: {haystackFirst?: boolean} = {}): StrPositionExpr {\n return super.parsePosition({\n haystackFirst: true,\n });\n }\n\n parseCte (): CteExpr | undefined {\n // WITH <identifier> AS <subquery expression>\n let cte = this.tryParse(() => super.parseCte() as CteExpr);\n\n if (!cte) {\n // WITH <expression> AS <identifier>\n cte = this.expression(CteExpr, {\n this: this.parseAssignment(),\n alias: this.parseTableAlias(),\n scalar: true,\n });\n }\n\n return cte;\n }\n\n parseJoinParts (): {\n method: Token | undefined;\n side: Token | undefined;\n kind: Token | undefined;\n } {\n const isGlobal = this.match(TokenType.GLOBAL) ? this.prev : undefined;\n const kindPre = this.matchSet(this._constructor.JOIN_KINDS, {\n advance: false,\n })\n ? this.prev\n : undefined;\n\n if (kindPre) {\n const kind = this.matchSet(this._constructor.JOIN_KINDS) ? this.prev : undefined;\n const side = this.matchSet(this._constructor.JOIN_SIDES) ? this.prev : undefined;\n return {\n method: isGlobal,\n side,\n kind,\n };\n }\n\n return {\n method: isGlobal,\n side: this.matchSet(this._constructor.JOIN_SIDES) ? this.prev : undefined,\n kind: this.matchSet(this._constructor.JOIN_KINDS) ? this.prev : undefined,\n };\n }\n\n parseJoin (options: {\n skipJoinToken?: boolean;\n parseBracket?: boolean;\n } = {}): JoinExpr | undefined {\n const {\n skipJoinToken = false,\n } = options;\n const join = super.parseJoin({\n skipJoinToken,\n parseBracket: true,\n });\n\n if (join) {\n const method = join.args.method;\n join.setArgKey('method', undefined);\n join.setArgKey('global', method);\n\n // tbl ARRAY JOIN arr <-- this should be a `Column` reference, not a `Table`\n if (join.args.kind === JoinExprKind.ARRAY) {\n for (const table of join.findAll(TableExpr)) {\n table.replace(table.toColumn());\n }\n }\n }\n\n return join;\n }\n\n parseFunction (options: {\n functions?: Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression>;\n anonymous?: boolean;\n optionalParens?: boolean;\n anyToken?: boolean;\n } = {}): Expression | undefined {\n const {\n functions, anonymous, optionalParens = true, anyToken = false,\n } = options;\n\n let expr = super.parseFunction({\n functions,\n anonymous,\n optionalParens,\n anyToken,\n });\n\n if (!expr) return undefined;\n\n let func = expr instanceof WindowExpr ? expr.args.this : expr;\n\n // Aggregate functions can be split in 2 parts: <func_name><suffix>\n const parts =\n func instanceof AnonymousExpr\n ? (this._constructor as typeof ClickHouseParser).AGG_FUNC_MAPPING[(func.args.this ?? '').toString()]\n : undefined;\n\n if (parts) {\n const anonFunc = func as AnonymousExpr;\n const params = this.parseFuncParams(anonFunc);\n\n const kwargs: Record<string, unknown> = {\n this: anonFunc.args.this,\n expressions: anonFunc.args.expressions,\n };\n\n let expClass: typeof Expression;\n if (parts[1]) {\n expClass = params ? CombinedParameterizedAggExpr : CombinedAggFuncExpr;\n } else {\n expClass = params ? ParameterizedAggExpr : AnonymousAggFuncExpr;\n }\n\n if (params) {\n kwargs.params = params;\n }\n\n func = this.expression(expClass, kwargs);\n\n if (expr instanceof WindowExpr) {\n // The window's func was parsed as Anonymous in base parser, fix its type\n expr.setArgKey('this', func);\n } else if (params) {\n // Params blocked super.parseFunction from parsing the following window\n expr = this.parseWindow(func);\n } else {\n expr = func;\n }\n }\n\n return expr;\n }\n\n parseFuncParams (thisNode?: FuncExpr): Expression[] | undefined {\n if (this.matchPair(TokenType.R_PAREN, TokenType.L_PAREN)) {\n return this.parseCsv(() => this.parseLambda());\n }\n\n if (this.match(TokenType.L_PAREN)) {\n const params = this.parseCsv(() => this.parseLambda());\n this.matchRParen(thisNode);\n return params;\n }\n\n return undefined;\n }\n\n parseQuantile (): QuantileExpr {\n const thisNode = this.parseLambda() as Expression;\n const params = this.parseFuncParams();\n\n if (params && 0 < params.length) {\n return this.expression(QuantileExpr, {\n this: params[0],\n quantile: thisNode,\n });\n }\n\n return this.expression(QuantileExpr, {\n this: thisNode,\n quantile: LiteralExpr.number(0.5),\n });\n }\n\n parseWrappedIdVars (): Expression[] {\n return super.parseWrappedIdVars({\n optional: true,\n });\n }\n\n parsePrimaryKey (options: {\n wrappedOptional?: boolean;\n inProps?: boolean;\n namedPrimaryKey?: boolean;\n } = {}): PrimaryKeyColumnConstraintExpr | PrimaryKeyExpr {\n const {\n wrappedOptional = false, inProps = false, namedPrimaryKey = false,\n } = options;\n\n return super.parsePrimaryKey({\n wrappedOptional: wrappedOptional || inProps,\n inProps,\n namedPrimaryKey,\n });\n }\n\n parseOnProperty (): Expression | undefined {\n const index = this.index;\n if (this.matchTextSeq('CLUSTER')) {\n const thisNode = this.parseString() || this.parseIdVar();\n if (thisNode) {\n return this.expression(OnClusterExpr, {\n this: thisNode,\n });\n } else {\n this.retreat(index);\n }\n }\n return undefined;\n }\n\n parseIndexConstraint (): IndexColumnConstraintExpr {\n // INDEX name1 expr TYPE type1(args) GRANULARITY value\n const thisNode = this.parseIdVar();\n const expression = this.parseAssignment();\n\n const indexType = this.matchTextSeq('TYPE')\n ? (this.parseFunction() || this.parseVar())\n : undefined;\n\n const granularity = this.matchTextSeq('GRANULARITY') ? this.parseTerm() : undefined;\n\n return this.expression(IndexColumnConstraintExpr, {\n this: thisNode,\n expression: expression,\n indexType: indexType,\n granularity: granularity,\n });\n }\n\n parsePartition (): PartitionExpr | undefined {\n // https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression\n if (!this.match(TokenType.PARTITION)) {\n return undefined;\n }\n\n let expressions: Expression[];\n if (this.matchTextSeq('ID')) {\n // Corresponds to the PARTITION ID <string_value> syntax\n expressions = [\n this.expression(PartitionIdExpr, {\n this: this.parseString(),\n }),\n ];\n } else {\n expressions = this.parseExpressions();\n }\n\n return this.expression(PartitionExpr, {\n expressions,\n });\n }\n\n parseAlterTableReplace (): Expression | undefined {\n const partition = this.parsePartition();\n\n if (!partition || !this.match(TokenType.FROM)) {\n return undefined;\n }\n\n return this.expression(ReplacePartitionExpr, {\n expression: partition,\n source: this.parseTableParts(),\n });\n }\n\n parseProjectionDef (): ProjectionDefExpr | undefined {\n if (!this.matchTextSeq('PROJECTION')) {\n return undefined;\n }\n\n return this.expression(ProjectionDefExpr, {\n this: this.parseIdVar(),\n expression: this.parseWrapped(() => this.parseStatement()),\n });\n }\n\n parseConstraint (): Expression | undefined {\n return super.parseConstraint() || this.parseProjectionDef();\n }\n\n parseAlias (thisNode: Expression | undefined, options: {explicit?: boolean} = {}): Expression | undefined {\n const {\n explicit = false,\n } = options;\n // In clickhouse \"SELECT <expr> APPLY(...)\" is a query modifier,\n // so \"APPLY\" shouldn't be parsed as <expr>'s alias.\n if (this.matchPair(TokenType.APPLY, TokenType.L_PAREN, {\n advance: false,\n })) {\n return thisNode;\n }\n\n return super.parseAlias(thisNode, {\n explicit,\n });\n }\n\n parseExpression (): Expression | undefined {\n let thisNode = super.parseExpression();\n\n // Clickhouse allows \"SELECT <expr> [APPLY(func)] [...]]\" modifier\n while (this.matchPair(TokenType.APPLY, TokenType.L_PAREN)) {\n thisNode = new ApplyExpr({\n this: thisNode,\n expression: this.parseVar({\n anyToken: true,\n }),\n });\n this.match(TokenType.R_PAREN);\n }\n\n return thisNode;\n }\n\n parseColumns (): Expression {\n let thisNode: Expression = this.expression(ColumnsExpr, {\n this: this.parseLambda(),\n });\n\n while (this.next && this.matchTextSeq([\n ')',\n 'APPLY',\n '(',\n ])) {\n this.match(TokenType.R_PAREN);\n thisNode = new ApplyExpr({\n this: thisNode,\n expression: this.parseVar({\n anyToken: true,\n }),\n });\n }\n\n return thisNode;\n }\n\n parseValue (options: {values?: boolean} = {}): TupleExpr | undefined {\n const {\n values = true,\n } = options;\n const value = super.parseValue({\n values,\n });\n\n if (!value) {\n return undefined;\n }\n\n // In Clickhouse \"SELECT * FROM VALUES (1, 2, 3)\" generates a table with a single column.\n // We canonicalize the values into a tuple-of-tuples AST if it's not already one.\n const expressions = value.args.expressions;\n const lastExpr = expressions?.[expressions.length - 1];\n\n if (values && !(lastExpr instanceof TupleExpr)) {\n value.setArgKey(\n 'expressions',\n expressions?.map((expr) =>\n this.expression(TupleExpr, {\n expressions: [\n expr,\n ],\n })),\n );\n }\n\n return value;\n }\n\n parsePartitionedBy (): PartitionedByPropertyExpr {\n // ClickHouse allows custom expressions as partition key\n // https://clickhouse.com/docs/engines/table-engines/mergetree-family/custom-partitioning-key\n return this.expression(PartitionedByPropertyExpr, {\n this: this.parseAssignment(),\n });\n }\n}\n\nexport class ClickHouseGenerator extends Generator {\n @cache\n static get AFTER_HAVING_MODIFIER_TRANSFORMS () {\n const modifiers = new Map(super.AFTER_HAVING_MODIFIER_TRANSFORMS);\n [\n 'cluster',\n 'distribute',\n 'sort',\n ].forEach((m) => modifiers.delete(m));\n return modifiers;\n }\n\n // port from _Dialect metaclass logic\n static SUPPORTS_DECODE_CASE = false;\n // port from _Dialect metaclass logic\n static readonly SELECT_KINDS: string[] = [\n ];\n // port from _Dialect metaclass logic\n static TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\n static QUERY_HINTS = false;\n\n @cache\n static get STRUCT_DELIMITER () {\n return [\n '(',\n ')',\n ];\n }\n\n static NVL2_SUPPORTED = false;\n static TABLESAMPLE_REQUIRES_PARENS = false;\n static TABLESAMPLE_SIZE_IS_ROWS = false;\n static TABLESAMPLE_KEYWORDS = 'SAMPLE';\n static LAST_DAY_SUPPORTS_DATE_PART = false;\n static CAN_IMPLEMENT_ARRAY_ANY = true;\n static SUPPORTS_TO_NUMBER = false;\n static JOIN_HINTS = false;\n static TABLE_HINTS = false;\n static GROUPINGS_SEP = '';\n static SET_OP_MODIFIERS = false;\n static ARRAY_SIZE_NAME = 'LENGTH';\n static WRAP_DERIVED_VALUES = false;\n\n @cache\n static get STRING_TYPE_MAPPING (): Map<DataTypeExprKind, string> {\n return new Map<DataTypeExprKind, string>([\n [\n DataTypeExprKind.BLOB,\n 'String',\n ],\n [\n DataTypeExprKind.CHAR,\n 'String',\n ],\n [\n DataTypeExprKind.LONGBLOB,\n 'String',\n ],\n [\n DataTypeExprKind.LONGTEXT,\n 'String',\n ],\n [\n DataTypeExprKind.MEDIUMBLOB,\n 'String',\n ],\n [\n DataTypeExprKind.MEDIUMTEXT,\n 'String',\n ],\n [\n DataTypeExprKind.TINYBLOB,\n 'String',\n ],\n [\n DataTypeExprKind.TINYTEXT,\n 'String',\n ],\n [\n DataTypeExprKind.TEXT,\n 'String',\n ],\n [\n DataTypeExprKind.VARBINARY,\n 'String',\n ],\n [\n DataTypeExprKind.VARCHAR,\n 'String',\n ],\n ]);\n }\n\n @cache\n static get SUPPORTED_JSON_PATH_PARTS (): Set<typeof Expression> {\n return new Set([\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n ]);\n }\n\n @cache\n static get TYPE_MAPPING () {\n return new Map<DataTypeExprKind | string, string>([\n ...Generator.TYPE_MAPPING,\n ...ClickHouseGenerator.STRING_TYPE_MAPPING,\n [\n DataTypeExprKind.ARRAY,\n 'Array',\n ],\n [\n DataTypeExprKind.BOOLEAN,\n 'Bool',\n ],\n [\n DataTypeExprKind.BIGINT,\n 'Int64',\n ],\n [\n DataTypeExprKind.DATE32,\n 'Date32',\n ],\n [\n DataTypeExprKind.DATETIME,\n 'DateTime',\n ],\n [\n DataTypeExprKind.DATETIME2,\n 'DateTime',\n ],\n [\n DataTypeExprKind.SMALLDATETIME,\n 'DateTime',\n ],\n [\n DataTypeExprKind.DATETIME64,\n 'DateTime64',\n ],\n [\n DataTypeExprKind.DECIMAL,\n 'Decimal',\n ],\n [\n DataTypeExprKind.DECIMAL32,\n 'Decimal32',\n ],\n [\n DataTypeExprKind.DECIMAL64,\n 'Decimal64',\n ],\n [\n DataTypeExprKind.DECIMAL128,\n 'Decimal128',\n ],\n [\n DataTypeExprKind.DECIMAL256,\n 'Decimal256',\n ],\n [\n DataTypeExprKind.TIMESTAMP,\n 'DateTime',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'DateTime',\n ],\n [\n DataTypeExprKind.TIMESTAMPTZ,\n 'DateTime',\n ],\n [\n DataTypeExprKind.DOUBLE,\n 'Float64',\n ],\n [\n DataTypeExprKind.ENUM,\n 'Enum',\n ],\n [\n DataTypeExprKind.ENUM8,\n 'Enum8',\n ],\n [\n DataTypeExprKind.ENUM16,\n 'Enum16',\n ],\n [\n DataTypeExprKind.FIXEDSTRING,\n 'FixedString',\n ],\n [\n DataTypeExprKind.FLOAT,\n 'Float32',\n ],\n [\n DataTypeExprKind.INT,\n 'Int32',\n ],\n [\n DataTypeExprKind.MEDIUMINT,\n 'Int32',\n ],\n [\n DataTypeExprKind.INT128,\n 'Int128',\n ],\n [\n DataTypeExprKind.INT256,\n 'Int256',\n ],\n [\n DataTypeExprKind.LOWCARDINALITY,\n 'LowCardinality',\n ],\n [\n DataTypeExprKind.MAP,\n 'Map',\n ],\n [\n DataTypeExprKind.NESTED,\n 'Nested',\n ],\n [\n DataTypeExprKind.NOTHING,\n 'Nothing',\n ],\n [\n DataTypeExprKind.SMALLINT,\n 'Int16',\n ],\n [\n DataTypeExprKind.STRUCT,\n 'Tuple',\n ],\n [\n DataTypeExprKind.TINYINT,\n 'Int8',\n ],\n [\n DataTypeExprKind.UBIGINT,\n 'UInt64',\n ],\n [\n DataTypeExprKind.UINT,\n 'UInt32',\n ],\n [\n DataTypeExprKind.UINT128,\n 'UInt128',\n ],\n [\n DataTypeExprKind.UINT256,\n 'UInt256',\n ],\n [\n DataTypeExprKind.USMALLINT,\n 'UInt16',\n ],\n [\n DataTypeExprKind.UTINYINT,\n 'UInt8',\n ],\n [\n DataTypeExprKind.IPV4,\n 'IPv4',\n ],\n [\n DataTypeExprKind.IPV6,\n 'IPv6',\n ],\n [\n DataTypeExprKind.POINT,\n 'Point',\n ],\n [\n DataTypeExprKind.RING,\n 'Ring',\n ],\n [\n DataTypeExprKind.LINESTRING,\n 'LineString',\n ],\n [\n DataTypeExprKind.MULTILINESTRING,\n 'MultiLineString',\n ],\n [\n DataTypeExprKind.POLYGON,\n 'Polygon',\n ],\n [\n DataTypeExprKind.MULTIPOLYGON,\n 'MultiPolygon',\n ],\n [\n DataTypeExprKind.AGGREGATEFUNCTION,\n 'AggregateFunction',\n ],\n [\n DataTypeExprKind.SIMPLEAGGREGATEFUNCTION,\n 'SimpleAggregateFunction',\n ],\n [\n DataTypeExprKind.DYNAMIC,\n 'Dynamic',\n ],\n ]);\n }\n\n @cache\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static get ORIGINAL_TRANSFORMS (): Map<typeof Expression, (this: Generator, e: any) => string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Generator.ORIGINAL_TRANSFORMS,\n [\n AnyValueExpr,\n renameFunc('any'),\n ],\n [\n ApproxDistinctExpr,\n renameFunc('uniq'),\n ],\n [\n ArrayConcatExpr,\n renameFunc('arrayConcat'),\n ],\n [\n ArrayContainsExpr,\n renameFunc('has'),\n ],\n [\n ArrayFilterExpr,\n function (this: Generator, e: ArrayFilterExpr) {\n return this.func('arrayFilter', [\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n ArrayRemoveExpr,\n removeFromArrayUsingFilter,\n ],\n [\n ArrayReverseExpr,\n renameFunc('arrayReverse'),\n ],\n [\n ArraySliceExpr,\n renameFunc('arraySlice'),\n ],\n [\n ArraySumExpr,\n renameFunc('arraySum'),\n ],\n [\n ArgMaxExpr,\n argMaxOrMinNoCount('argMax'),\n ],\n [\n ArgMinExpr,\n argMaxOrMinNoCount('argMin'),\n ],\n [\n ArrayExpr,\n inlineArraySql,\n ],\n [\n CastToStrTypeExpr,\n renameFunc('CAST'),\n ],\n [\n CurrentDatabaseExpr,\n renameFunc('CURRENT_DATABASE'),\n ],\n [\n CurrentSchemasExpr,\n renameFunc('CURRENT_SCHEMAS'),\n ],\n [\n CountIfExpr,\n renameFunc('countIf'),\n ],\n [\n CosineDistanceExpr,\n renameFunc('cosineDistance'),\n ],\n [\n CompressColumnConstraintExpr,\n function (this: Generator, e: CompressColumnConstraintExpr) {\n return `CODEC(${this.expressions(e, {\n key: 'this',\n flat: true,\n })})`;\n },\n ],\n [\n ComputedColumnConstraintExpr,\n function (this: Generator, e: ComputedColumnConstraintExpr) {\n return `${e.args.persisted ? 'MATERIALIZED' : 'ALIAS'} ${this.sql(e, 'this')}`;\n },\n ],\n [\n CurrentDateExpr,\n function (this: Generator, _e: CurrentDateExpr) {\n return this.func('CURRENT_DATE', [\n ]);\n },\n ],\n [\n CurrentVersionExpr,\n renameFunc('VERSION'),\n ],\n [\n DateAddExpr,\n datetimeDeltaSql('DATE_ADD'),\n ],\n [\n DateDiffExpr,\n datetimeDeltaSql('DATE_DIFF'),\n ],\n [\n DateStrToDateExpr,\n renameFunc('toDate'),\n ],\n [\n DateSubExpr,\n datetimeDeltaSql('DATE_SUB'),\n ],\n [\n ExplodeExpr,\n renameFunc('arrayJoin'),\n ],\n [\n FarmFingerprintExpr,\n renameFunc('farmFingerprint64'),\n ],\n [\n FinalExpr,\n function (this: Generator, e: FinalExpr) {\n return `${this.sql(e, 'this')} FINAL`;\n },\n ],\n [\n IsNanExpr,\n renameFunc('isNaN'),\n ],\n [\n JsonCastExpr,\n function (this: Generator, e: JsonCastExpr) {\n return `${this.sql(e, 'this')}.:${this.sql(e, 'to')}`;\n },\n ],\n [\n JsonExtractExpr,\n jsonExtractSegments('JSONExtractString', {\n quotedIndex: false,\n }),\n ],\n [\n JsonExtractScalarExpr,\n jsonExtractSegments('JSONExtractString', {\n quotedIndex: false,\n }),\n ],\n [\n JsonPathKeyExpr,\n jsonPathKeyOnlyName,\n ],\n [\n JsonPathRootExpr,\n () => '',\n ],\n [\n LengthExpr,\n lengthOrCharLengthSql,\n ],\n [\n MapExpr,\n mapSql,\n ],\n [\n MedianExpr,\n renameFunc('median'),\n ],\n [\n NullifExpr,\n renameFunc('nullIf'),\n ],\n [\n PartitionedByPropertyExpr,\n function (this: Generator, e: PartitionedByPropertyExpr) {\n return `PARTITION BY ${this.sql(e, 'this')}`;\n },\n ],\n [\n PivotExpr,\n noPivotSql,\n ],\n [\n QuantileExpr,\n quantileSql,\n ],\n [\n RegexpLikeExpr,\n function (this: Generator, e: RegexpLikeExpr) {\n return this.func('match', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n RandExpr,\n renameFunc('randCanonical'),\n ],\n [\n StartsWithExpr,\n renameFunc('startsWith'),\n ],\n [\n StructExpr,\n renameFunc('tuple'),\n ],\n [\n TruncExpr,\n renameFunc('trunc'),\n ],\n [\n EndsWithExpr,\n renameFunc('endsWith'),\n ],\n [\n EuclideanDistanceExpr,\n renameFunc('L2Distance'),\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr) {\n return strPositionSql.call(this, e, {\n funcName: 'POSITION',\n supportsPosition: true,\n useAnsiPosition: false,\n });\n },\n ],\n [\n TimeToStrExpr,\n function (this: Generator, e: TimeToStrExpr) {\n return this.func('formatDateTime', [\n e.args.this,\n this.formatTime(e),\n e.args.zone,\n ]);\n },\n ],\n [\n TimeStrToTimeExpr,\n timeStrToTimeSql,\n ],\n [\n TimestampAddExpr,\n datetimeDeltaSql('TIMESTAMP_ADD'),\n ],\n [\n TimestampSubExpr,\n datetimeDeltaSql('TIMESTAMP_SUB'),\n ],\n [\n TypeofExpr,\n renameFunc('toTypeName'),\n ],\n [\n VarMapExpr,\n mapSql,\n ],\n [\n XorExpr,\n function (this: Generator, e: XorExpr) {\n return this.func('xor', [\n e.args.this,\n e.args.expression,\n ...e.args.expressions || [\n ],\n ]);\n },\n ],\n [\n Md5DigestExpr,\n renameFunc('MD5'),\n ],\n [\n Md5Expr,\n function (this: Generator, e: Md5Expr) {\n return this.func('LOWER', [\n this.func('HEX', [\n this.func('MD5', [\n e.args.this,\n ]),\n ]),\n ]);\n },\n ],\n [\n ShaExpr,\n renameFunc('SHA1'),\n ],\n [\n Sha1DigestExpr,\n renameFunc('SHA1'),\n ],\n [\n Sha2Expr,\n sha256Sql,\n ],\n [\n Sha2DigestExpr,\n sha2DigestSql,\n ],\n [\n SplitExpr,\n function (this: Generator, e: SplitExpr) {\n return this.func('splitByString', [\n e.args.expression,\n e.args.this,\n typeof e.args.limit === 'number' ? LiteralExpr.number(e.args.limit) : e.args.limit,\n ]);\n },\n ],\n [\n RegexpSplitExpr,\n function (this: Generator, e: RegexpSplitExpr) {\n return this.func('splitByRegexp', [\n e.args.expression,\n e.args.this,\n typeof e.args.limit === 'number' ? LiteralExpr.number(e.args.limit) : e.args.limit,\n ]);\n },\n ],\n [\n UnixToTimeExpr,\n unixToTimeSql,\n ],\n [\n TimestampTruncExpr,\n timestampTruncSql({\n func: 'dateTrunc',\n zone: true,\n }),\n ],\n [\n TrimExpr,\n function (this: Generator, e: TrimExpr) {\n return trimSql.call(this, e, {\n defaultTrimType: 'BOTH',\n });\n },\n ],\n [\n VarianceExpr,\n renameFunc('varSamp'),\n ],\n [\n SchemaCommentPropertyExpr,\n function (this: Generator, e: SchemaCommentPropertyExpr) {\n return this.nakedProperty(e);\n },\n ],\n [\n StddevExpr,\n renameFunc('stddevSamp'),\n ],\n [\n ChrExpr,\n renameFunc('CHAR'),\n ],\n [\n LagExpr,\n function (this: Generator, e: LagExpr) {\n return this.func('lagInFrame', [\n e.args.this,\n e.args.offset,\n e.args.default,\n ]);\n },\n ],\n [\n LeadExpr,\n function (this: Generator, e: LeadExpr) {\n return this.func('leadInFrame', [\n e.args.this,\n e.args.offset,\n e.args.default,\n ]);\n },\n ],\n [\n JarowinklerSimilarityExpr,\n renameFunc('jaroWinklerSimilarity'),\n ],\n [\n LevenshteinExpr,\n function (this: Generator, e: LevenshteinExpr) {\n unsupportedArgs.call(this, e, 'insCost', 'delCost', 'subCost', 'maxDist');\n return renameFunc('editDistance').call(this, e);\n },\n ],\n [\n ParseDatetimeExpr,\n renameFunc('parseDateTime'),\n ],\n ]);\n }\n\n @cache\n static get PROPERTIES_LOCATION () {\n return new Map<typeof Expression, PropertiesLocation>([\n ...Generator.PROPERTIES_LOCATION,\n [\n OnClusterExpr,\n PropertiesLocation.POST_NAME,\n ],\n [\n PartitionedByPropertyExpr,\n PropertiesLocation.POST_SCHEMA,\n ],\n [\n ToTablePropertyExpr,\n PropertiesLocation.POST_NAME,\n ],\n [\n VolatilePropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n ]);\n }\n\n @cache\n static get ON_CLUSTER_TARGETS () {\n return new Set([\n 'SCHEMA',\n 'DATABASE',\n 'TABLE',\n 'VIEW',\n 'DICTIONARY',\n 'INDEX',\n 'FUNCTION',\n 'NAMED COLLECTION',\n ]);\n }\n\n @cache\n static get NON_NULLABLE_TYPES () {\n return new Set([\n DataTypeExprKind.ARRAY,\n DataTypeExprKind.MAP,\n DataTypeExprKind.STRUCT,\n DataTypeExprKind.POINT,\n DataTypeExprKind.RING,\n DataTypeExprKind.LINESTRING,\n DataTypeExprKind.MULTILINESTRING,\n DataTypeExprKind.POLYGON,\n DataTypeExprKind.MULTIPOLYGON,\n ]);\n }\n\n offsetSql (expression: OffsetExpr): string {\n let offset = super.offsetSql(expression);\n\n // OFFSET ... FETCH syntax requires a \"ROW\" or \"ROWS\" keyword\n const parent = expression.parent;\n if (\n parent instanceof SelectExpr\n && parent.args.limit instanceof FetchExpr\n ) {\n offset = `${offset} ROWS`;\n }\n\n return offset;\n }\n\n strToDateSql (expression: StrToDateExpr): string {\n const strToDateSql = this.functionFallbackSql(expression);\n\n if (!(expression.parent instanceof CastExpr)) {\n // StrToDate returns DATEs in other dialects, so improve transpilation\n return this.castSql(cast(expression, 'DATE'));\n }\n\n return strToDateSql;\n }\n\n castSql (expression: CastExpr, options: {safePrefix?: string} = {}): string {\n const {\n safePrefix,\n } = options;\n const thisNode = expression.args.this;\n\n if (\n thisNode instanceof StrToDateExpr\n && isType(expression.args.to, 'datetime')\n ) {\n return this.sql(thisNode);\n }\n\n return super.castSql(expression, {\n safePrefix,\n });\n }\n\n tryCastSql (expression: TryCastExpr): string {\n const dtype = expression.args.to;\n\n if (\n dtype instanceof Expression\n && !dtype.isType(\n [\n ...(this._constructor as typeof ClickHouseGenerator).NON_NULLABLE_TYPES,\n ],\n {\n checkNullable: true,\n },\n )\n ) {\n // Casting x into Nullable(T) behaves similarly to TRY_CAST\n dtype.setArgKey('nullable', true);\n }\n\n return super.castSql(expression);\n }\n\n jsonPathSubscriptSql (expression: JsonPathSubscriptExpr): string {\n const thisNode = this.jsonPathPart(expression.args.this);\n return isInt(thisNode) ? (parseInt(thisNode) + 1).toString() : thisNode;\n }\n\n likePropertySql (expression: LikePropertyExpr): string {\n return `AS ${this.sql(expression, 'this')}`;\n }\n\n anyToHas (\n expression: EqExpr | NeqExpr,\n defaultCallback: (e: EqExpr | NeqExpr) => string,\n options: {\n prefix?: string;\n } = {},\n ): string {\n const {\n prefix = '',\n } = options;\n let arr: AnyExpr;\n let thisNode: Expression | undefined;\n\n if (expression.left instanceof AnyExpr) {\n arr = expression.left;\n thisNode = expression.right;\n } else if (expression.right instanceof AnyExpr) {\n arr = expression.right;\n thisNode = expression.left;\n } else {\n return defaultCallback(expression);\n }\n\n return prefix + this.func('has', [\n arr.args.this?.unnest(),\n thisNode,\n ]);\n }\n\n eqSql (expression: EqExpr): string {\n return this.anyToHas(expression, (e) => super.eqSql(e));\n }\n\n neqSql (expression: NeqExpr): string {\n return this.anyToHas(expression, (e) => super.neqSql(e), {\n prefix: 'NOT ',\n });\n }\n\n regexpILikeSql (expression: RegexpILikeExpr): string {\n // Manually add a flag to make the search case-insensitive\n const regex = this.func('CONCAT', [\n '\\'(?i)\\'',\n expression.args.expression,\n ]);\n return this.func('match', [\n expression.args.this,\n regex,\n ]);\n }\n\n dataTypeSql (expression: DataTypeExpr): string {\n let dtype: string;\n const Constructor = this._constructor as typeof ClickHouseGenerator;\n\n // String is the standard ClickHouse type, every other variant is just an alias.\n if (Constructor.STRING_TYPE_MAPPING.has(expression.args.this as DataTypeExprKind)) {\n dtype = 'String';\n } else {\n dtype = super.dataTypeSql(expression);\n }\n\n const parent = expression.parent;\n const nullable = expression.args.nullable;\n\n if (\n nullable === true\n || (nullable === undefined\n && !(\n parent instanceof DataTypeExpr\n && parent.isType(DataTypeExprKind.MAP, {\n checkNullable: true,\n })\n && (expression.index === null || expression.index === 0)\n )\n && !expression.isType(Constructor.NON_NULLABLE_TYPES, {\n checkNullable: true,\n }))\n ) {\n dtype = `Nullable(${dtype})`;\n }\n\n return dtype;\n }\n\n cteSql (expression: CteExpr): string {\n if (expression.args.scalar) {\n const thisSql = this.sql(expression, 'this');\n const aliasSql = this.sql(expression, 'alias');\n return `${thisSql} AS ${aliasSql}`;\n }\n\n return super.cteSql(expression);\n }\n\n afterLimitModifiers (expression: Expression): string[] {\n const settings = expression.getArgKey('settings')\n ? this.seg('SETTINGS ') + this.expressions(expression, {\n key: 'settings',\n flat: true,\n })\n : '';\n\n const format = expression.getArgKey('format')\n ? this.seg('FORMAT ') + this.sql(expression, 'format')\n : '';\n\n return [\n ...super.afterLimitModifiers(expression),\n settings,\n format,\n ].filter(Boolean);\n }\n\n placeholderSql (expression: PlaceholderExpr): string {\n return `{${expression.name}: ${this.sql(expression, 'kind')}}`;\n }\n\n onClusterSql (expression: OnClusterExpr): string {\n return `ON CLUSTER ${this.sql(expression, 'this')}`;\n }\n\n createableSql (expression: CreateExpr, locations: Map<PropertiesLocation, Expression[]>): string {\n const Constructor = this._constructor as typeof ClickHouseGenerator;\n const postNameLocation = locations.get(PropertiesLocation.POST_NAME);\n\n if (Constructor.ON_CLUSTER_TARGETS.has(expression.kind as string) && postNameLocation) {\n const thisNode = expression.args.this instanceof SchemaExpr ? expression.args.this : expression;\n const thisName = this.sql(thisNode, 'this');\n const thisProperties = postNameLocation.map((prop) => this.sql(prop)).join(' ');\n\n let thisSchema = expression.args.this instanceof SchemaExpr ? this.schemaColumnsSql(expression.args.this) : undefined;\n thisSchema = thisSchema ? `${this.sep()}${thisSchema}` : '';\n\n return `${thisName}${this.sep()}${thisProperties}${thisSchema}`;\n }\n\n return super.createableSql(expression, locations);\n }\n\n createSql (expression: CreateExpr): string {\n const query = expression.args.expression;\n let commentProp: SchemaCommentPropertyExpr | undefined;\n\n if (query instanceof QueryExpr) {\n commentProp = expression.find(SchemaCommentPropertyExpr);\n if (commentProp) {\n commentProp.pop();\n query.replace(paren(query));\n }\n }\n\n const createSql = super.createSql(expression);\n const commentSql = commentProp ? ` ${this.sql(commentProp)}` : '';\n\n return `${createSql}${commentSql}`;\n }\n\n prewhereSql (expression: PreWhereExpr): string {\n const thisSql = this.indent(this.sql(expression, 'this'));\n return `${this.seg('PREWHERE')}${this.sep()}${thisSql}`;\n }\n\n indexColumnConstraintSql (expression: IndexColumnConstraintExpr): string {\n const thisName = this.sql(expression, 'this');\n const thisSql = thisName ? ` ${thisName}` : '';\n\n const exprName = this.sql(expression, 'expression');\n const exprSql = exprName ? ` ${exprName}` : '';\n\n const typeName = this.sql(expression, 'indexType');\n const typeSql = typeName ? ` TYPE ${typeName}` : '';\n\n const granName = this.sql(expression, 'granularity');\n const granSql = granName ? ` GRANULARITY ${granName}` : '';\n\n return `INDEX${thisSql}${exprSql}${typeSql}${granSql}`;\n }\n\n partitionSql (expression: PartitionExpr): string {\n return `PARTITION ${this.expressions(expression, {\n flat: true,\n })}`;\n }\n\n partitionIdSql (expression: PartitionIdExpr): string {\n return `ID ${this.sql(expression.args.this)}`;\n }\n\n replacePartitionSql (expression: ReplacePartitionExpr): string {\n return `REPLACE ${this.sql(expression.args.expression)} FROM ${this.sql(expression, 'source')}`;\n }\n\n projectionDefSql (expression: ProjectionDefExpr): string {\n return `PROJECTION ${this.sql(expression.args.this)} ${this.wrap(expression.args.expression ?? '')}`;\n }\n\n isSql (expression: IsExpr): string {\n let isSql = super.isSql(expression);\n\n if (expression.parent instanceof NotExpr) {\n // value IS NOT NULL -> NOT (value IS NULL)\n isSql = this.wrap(isSql);\n }\n\n return isSql;\n }\n\n inSql (expression: InExpr): string {\n let inSql = super.inSql(expression);\n\n if (expression.parent instanceof NotExpr && expression.args.isGlobal) {\n inSql = inSql.replace('GLOBAL IN', 'GLOBAL NOT IN');\n }\n\n return inSql;\n }\n\n notSql (expression: NotExpr): string {\n const thisNode = expression.args.this;\n\n if (thisNode instanceof InExpr) {\n if (thisNode.args.isGlobal) {\n // let `GLOBAL IN` child interpose `NOT`\n return this.sql(expression, 'this');\n }\n\n expression.setArgKey('this', paren(thisNode, {\n copy: false,\n }));\n }\n\n return super.notSql(expression);\n }\n\n valuesSql (expression: ValuesExpr, options: {valuesAsTable?: boolean} = {}): string {\n let {\n valuesAsTable = true,\n } = options;\n const alias = expression.args.alias;\n const expressions = expression.args.expressions;\n\n if (alias?.args.columns && expressions && 0 < expressions.length) {\n const rowValues = expressions[0].args.expressions;\n valuesAsTable = rowValues?.some((value) => value instanceof TupleExpr) ?? false;\n } else {\n valuesAsTable = true;\n }\n\n return super.valuesSql(expression, {\n valuesAsTable,\n });\n }\n}\n\nexport class ClickHouse extends Dialect {\n static DIALECT_NAME = Dialects.CLICKHOUSE;\n static INDEX_OFFSET = 1;\n\n @cache\n static get NORMALIZE_FUNCTIONS () {\n return NormalizeFunctions.NONE;\n }\n\n @cache\n static get NULL_ORDERING () {\n return NullOrdering.NULLS_ARE_LAST;\n }\n\n static SUPPORTS_USER_DEFINED_TYPES = false;\n static SAFE_DIVISION = true;\n static LOG_BASE_FIRST: boolean | undefined = undefined;\n static FORCE_EARLY_ALIAS_REF_EXPANSION = true;\n static PRESERVE_ORIGINAL_NAMES = true;\n static NUMBERS_CAN_BE_UNDERSCORE_SEPARATED = true;\n static IDENTIFIERS_CAN_START_WITH_DIGIT = true;\n static HEX_STRING_IS_INTEGER_TYPE = true;\n\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.CASE_SENSITIVE;\n }\n\n @cache\n static get UNESCAPED_SEQUENCES () {\n return {\n '\\\\0': '\\0',\n };\n }\n\n @cache\n static get CREATABLE_KIND_MAPPING () {\n return {\n DATABASE: 'SCHEMA',\n };\n }\n\n @cache\n static get SET_OP_DISTINCT_BY_DEFAULT (): Partial<Record<ExpressionKey, boolean>> {\n return {\n [ExpressionKey.EXCEPT]: false,\n [ExpressionKey.INTERSECT]: false,\n };\n }\n\n generateValuesAliases (expression: ValuesExpr): IdentifierExpr[] {\n // Clickhouse allows VALUES to have an embedded structure e.g:\n // VALUES('person String, place String', ('Noah', 'Paris'), ...)\n // In this case, we don't want to qualify the columns\n const values = expression.args.expressions?.[0]?.args.expressions;\n\n const firstVal = values?.[0];\n const secondVal = values?.[1];\n\n const structure =\n values && 1 < values.length && firstVal instanceof Expression && firstVal?.isString && secondVal instanceof TupleExpr\n ? firstVal\n : undefined;\n\n let columnAliases: IdentifierExpr[] = [\n ];\n\n if (structure) {\n // Split each column definition into the column name e.g:\n // 'person String, place String' -> ['person', 'place']\n const structureColdefs = structure.name.split(',').map((coldef) => coldef.trim());\n columnAliases = structureColdefs.map((coldef) =>\n toIdentifier(coldef.split(' ')[0]));\n } else if (values?.[0] instanceof Expression) {\n // Default column aliases in CH are \"c1\", \"c2\", etc.\n const rowWidth = values[0].args.expressions?.length;\n columnAliases = Array.from({\n length: rowWidth ?? 0,\n }, (_, i) =>\n toIdentifier(`c${i + 1}`));\n }\n\n return columnAliases;\n }\n\n static Tokenizer = ClickHouseTokenizer;\n static Parser = ClickHouseParser;\n static Generator = ClickHouseGenerator;\n}\n\nDialect.register(Dialects.CLICKHOUSE, ClickHouse);\n"],"mappings":"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CA,gBACA,cACA,aACA,SACA,SACA,cACA,OACA,iBACA,eACA,WACA,oBACA,aACA,iBACA,iBACA,qBACA,sBACA,sBACA,mBACA,cACA,aACA,cACA,cACA,iBACA,gBACA,iBACA,kBACA,SACA,SACA,SACA,WACA,UACA,WACA,UACA,OACA,YACA,eACA,iBACA,YACA,YACA,WACA,YACA,gBACA,iBACA,0BACA,mBACA,oBACA,oBACA,qBACA,wBACA,yBACA,iBACA,kBACA,yBACA,0BACA,wBACA,yBACA,kBACA,mBACA,0BACA,2BACA,mBACA,oBACA,2BACA,4BACA,yBACA,6BACA,+BACA,8BACA,cACA,WACA,wBACA,UACA,mBACA,2BACA,YACA,+BACA,gCACA,aACA,cACA,WACA,WACA,8BACA,YACA,gBACA,gBACA,eACA,YACA,WACA,mBACA,2BACF,CAAC,CACH,CAGA,WAAW,wBAA0B,CACnC,MAAO,CACL,KACA,QACA,UACA,MACA,cACA,QACA,QACA,aACA,UACA,WACA,YACA,SACA,WACA,SACA,QACF,CACF,CAGA,WAAW,aAA+B,CACxC,OAAO,IAAI,IAAI,CACb,GAAGF,EAAO,4BAIZ,CAAC,CACH,CAGA,WAAW,iBAAmC,CAC5C,OAAO,IAAI,IACT,CACE,GAAGA,EAAO,eACZ,EAAE,OAAQ,GAAM,IAAM,QAAgB,CACxC,CACF,CAGA,WAAW,kBAAsD,CAC/D,IAAMuC,EAA4C,CAAC,EAC7CC,EAAW,CACf,GAAGzC,EAAiB,uBACpB,EACF,EACA,QAAW0C,KAAOD,EAChB,QAAWE,KAAK3C,EAAiB,cAC/BwC,EAAQ,GAAGG,CAAC,GAAGD,CAAG,EAAE,EAAI,CACtBC,EACAD,CACF,EAGJ,OAAOF,CACT,CAGA,WAAW,kBAAkE,CAC3E,IAAMrC,EAAwD,CAC5D,GAAGF,EAAO,iBACV,UAAW,UAAwB,CACjC,OAAO,KAAK,WAAW2C,GAAa,CAClC,KAAM,KAAK,gBAAgB,CAC7B,CAAC,CACH,EACA,SAAU,UAAwB,CAChC,OAAQ,KAA0B,cAAc,CAClD,EACA,OAAQ,UAAwB,CAC9B,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UACF,EACA,cAEE,YACF,EACA,WAEE,SACF,EACA,aAEE,WACF,EACA,aAEE,WACF,EACA,cAEE,YACF,EACA,cAEE,YACF,EACA,aAEE,UACF,EACA,gBAEE,UACF,EACA,eAEE,UACF,EACA,UAEE,SACF,EACA,QAEE,MACF,EACA,SAEE,OACF,EACA,UAEE,QACF,EACA,eAEE,aACF,EACA,SAEE,SACF,EACA,OAEE,OACF,EACA,aAEE,OACF,EACA,UAEE,QACF,EACA,UAEE,QACF,EACA,kBAEE,gBACF,EACA,OAEE,KACF,EACA,UAEE,QACF,EACA,WAEE,SACF,EACA,YAEE,OACF,EACA,UAEE,OACF,EACA,WAEE,MACF,EACA,WAEE,QACF,EACA,QAEE,QACF,EACA,WAEE,SACF,EACA,WAEE,SACF,EACA,aAEE,QACF,EACA,YAEE,OACF,EACA,QAEE,MACF,EACA,QAEE,MACF,EACA,SAEE,OACF,EACA,QAEE,MACF,EACA,cAEE,YACF,EACA,mBAEE,iBACF,EACA,WAEE,SACF,EACA,gBAEE,cACF,EACA,qBAEE,mBACF,EACA,2BAEE,yBACF,EACA,WAEE,SACF,CACF,CAAC,CACH,CAIA,WAAW,qBAAoF,CAE7F,OAAO,IAAI,IAA4D,CACrE,GAAGC,EAAU,oBACb,CACEhI,GACA/E,EAAW,KAAK,CAClB,EACA,CACE0G,GACA1G,EAAW,MAAM,CACnB,EACA,CACEqN,GACArN,EAAW,aAAa,CAC1B,EACA,CACE4F,GACA5F,EAAW,KAAK,CAClB,EACA,CACEsN,GACA,SAA2BC,EAAoB,CAC7C,OAAO,KAAK,KAAK,cAAe,CAC9BA,EAAE,KAAK,WACPA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACEC,GACAC,EACF,EACA,CACExI,GACAjF,EAAW,cAAc,CAC3B,EACA,CACEkF,GACAlF,EAAW,YAAY,CACzB,EACA,CACEgF,GACAhF,EAAW,UAAU,CACvB,EACA,CACE0N,GACAC,GAAmB,QAAQ,CAC7B,EACA,CACEC,GACAD,GAAmB,QAAQ,CAC7B,EACA,CACEtO,EACAwO,EACF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","names":["TIMESTAMP_TRUNC_UNITS","buildDateTimeFormat","exprType","args","expr","buildFormattedTime","timezone","seqGet","unixToTimeSql","expression","scale","scaleValue","timestamp","UnixToTimeExpr","cast","DivExpr","lowerFunc","sql","index","quantileSql","quantile","argsSql","func","ArrayExpr","buildCountIf","CountIfExpr","CombinedAggFuncExpr","buildStrToDate","AnonymousExpr","strToDate","StrToDateExpr","DataTypeExpr","datetimeDeltaSql","name","renameFunc","zone","unitToVar","narrowInstanceOf","Expression","timeStrToTimeSql","ts","tz","LiteralExpr","tsString","tsParts","offsetSep","tsFracParts","numFracParts","tsWithoutTz","expressions","DataTypeParamExpr","datatype","mapSql","varMapSql","keys","values","keyExprs","valueExprs","i","buildTimestampTrunc","unit","TimestampTruncExpr","var_","buildSplitByChar","sep","sepValue","buildSplit","SplitExpr","expClass","_SINGLE_TOKENS_dec","_ORIGINAL_KEYWORDS_dec","_HEREDOC_STRINGS_dec","_HEX_STRINGS_dec","_BIT_STRINGS_dec","_STRING_ESCAPES_dec","_IDENTIFIER_ESCAPES_dec","_IDENTIFIERS_dec","_COMMENTS_dec","_a","_init","ClickHouseTokenizer","Tokenizer","cache","keywords","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","_PLACEHOLDER_PARSERS_dec","_SCHEMA_UNNAMED_CONSTRAINTS_dec","_ALTER_PARSERS_dec","_CONSTRAINT_PARSERS_dec","_QUERY_MODIFIER_PARSERS_dec","_ALIAS_TOKENS_dec","_TABLE_ALIAS_TOKENS_dec","_JOIN_KINDS_dec","_COLUMN_OPERATORS_dec","_RANGE_PARSERS_dec","_NO_PAREN_FUNCTION_PARSERS_dec","_PROPERTY_PARSERS_dec","_FUNCTION_PARSERS_dec","_AGG_FUNC_MAPPING_dec","_RESERVED_TOKENS_dec","_FUNC_TOKENS_dec","_AGG_FUNCTIONS_SUFFIXES_dec","_AGG_FUNCTIONS_dec","_FUNCTIONS_dec","_NO_PAREN_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","_ClickHouseParser","Parser","noParenFunctions","parsers","AnyValueExpr","ArraySumExpr","ArrayReverseExpr","ArraySliceExpr","CurrentDatabaseExpr","CurrentSchemasExpr","CosineDistanceExpr","CurrentVersionExpr","buildDateDelta","DateAddExpr","DateDiffExpr","TimeToStrExpr","DateSubExpr","ArrayContainsExpr","buildLike","ILikeExpr","buildJsonExtractPath","JsonExtractScalarExpr","LengthExpr","LikeExpr","EuclideanDistanceExpr","buildVarMap","RegexpLikeExpr","ParseDatetimeExpr","RandExpr","TimestampSubExpr","TimestampAddExpr","ApproxDistinctExpr","XorExpr","Md5DigestExpr","Sha2Expr","RegexpSplitExpr","SubstringIndexExpr","TypeofExpr","LevenshteinExpr","JarowinklerSimilarityExpr","mapping","suffixes","sfx","f","ExplodeExpr","StructExpr","AndExpr","OrExpr","thisNode","EnginePropertyExpr","options","checkFunc","schema","allowIdentifiers","dtype","IfExpr","kind","finalThis","IdentifierExpr","PlaceholderExpr","lBrace","bracket","varmap","VarMapExpr","PropertyEqExpr","isGlobal","result","isNegated","resultIn","NotExpr","joins","aliasTokens","parseBracket","isDbReference","TableExpr","inner","alias","GenerateSeriesExpr","TableAliasExpr","toIdentifier","FinalExpr","_options","cte","CteExpr","side","skipJoinToken","join","method","table","functions","anonymous","optionalParens","anyToken","WindowExpr","parts","anonFunc","params","kwargs","CombinedParameterizedAggExpr","ParameterizedAggExpr","AnonymousAggFuncExpr","QuantileExpr","wrappedOptional","inProps","namedPrimaryKey","OnClusterExpr","indexType","granularity","IndexColumnConstraintExpr","PartitionIdExpr","PartitionExpr","partition","ReplacePartitionExpr","ProjectionDefExpr","explicit","ApplyExpr","ColumnsExpr","value","lastExpr","TupleExpr","PartitionedByPropertyExpr","ClickHouseParser","_NON_NULLABLE_TYPES_dec","_ON_CLUSTER_TARGETS_dec","_PROPERTIES_LOCATION_dec","_ORIGINAL_TRANSFORMS_dec","_TYPE_MAPPING_dec","_SUPPORTED_JSON_PATH_PARTS_dec","_STRING_TYPE_MAPPING_dec","_STRUCT_DELIMITER_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","_ClickHouseGenerator","Generator","modifiers","m","JsonPathKeyExpr","JsonPathRootExpr","JsonPathSubscriptExpr","ArrayConcatExpr","ArrayFilterExpr","e","ArrayRemoveExpr","removeFromArrayUsingFilter","ArgMaxExpr","argMaxOrMinNoCount","ArgMinExpr","inlineArraySql","CastToStrTypeExpr","CompressColumnConstraintExpr","ComputedColumnConstraintExpr","CurrentDateExpr","_e","DateStrToDateExpr","FarmFingerprintExpr","IsNanExpr","JsonCastExpr","JsonExtractExpr","jsonExtractSegments","jsonPathKeyOnlyName","lengthOrCharLengthSql","MapExpr","MedianExpr","NullifExpr","PivotExpr","noPivotSql","StartsWithExpr","TruncExpr","EndsWithExpr","StrPositionExpr","strPositionSql","TimeStrToTimeExpr","Md5Expr","ShaExpr","Sha1DigestExpr","sha256Sql","Sha2DigestExpr","sha2DigestSql","timestampTruncSql","TrimExpr","trimSql","VarianceExpr","SchemaCommentPropertyExpr","StddevExpr","ChrExpr","LagExpr","LeadExpr","unsupportedArgs","ToTablePropertyExpr","VolatilePropertyExpr","offset","parent","SelectExpr","FetchExpr","strToDateSql","CastExpr","safePrefix","isType","isInt","defaultCallback","prefix","arr","AnyExpr","regex","Constructor","nullable","thisSql","aliasSql","settings","format","locations","postNameLocation","SchemaExpr","thisName","thisProperties","prop","thisSchema","query","commentProp","QueryExpr","paren","createSql","commentSql","exprName","exprSql","typeName","typeSql","granName","granSql","isSql","inSql","InExpr","valuesAsTable","ClickHouseGenerator","_SET_OP_DISTINCT_BY_DEFAULT_dec","_CREATABLE_KIND_MAPPING_dec","_UNESCAPED_SEQUENCES_dec","_NORMALIZATION_STRATEGY_dec","_NULL_ORDERING_dec","_NORMALIZE_FUNCTIONS_dec","ClickHouse","Dialect","firstVal","secondVal","structure","columnAliases","coldef","rowWidth","_"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk4ZMKB6PVcjs = require('../chunk-4ZMKB6PV.cjs');require('../chunk-2YNOERAO.cjs');require('../chunk-XZQFOICX.cjs');require('../chunk-DOKMTZYO.cjs');var _chunk2Z3O2CFMcjs = require('../chunk-2Z3O2CFM.cjs');function Tt(A){let S=this.sql(A,"this"),t=this.sql(A,"expression");return`${S}:${t}`}var At,St,P,_=class extends(St=_chunk2Z3O2CFMcjs.Mo,At=[_chunk2Z3O2CFMcjs.r],St){static get IDENTIFIERS(){return["`",'"']}};P=_chunk2Z3O2CFMcjs.a.call(void 0, St),_chunk2Z3O2CFMcjs.d.call(void 0, P,10,"IDENTIFIERS",At,_),_chunk2Z3O2CFMcjs.b.call(void 0, P,_),_chunk2Z3O2CFMcjs.c.call(void 0, P,3,_);var ut,at,L,x=class extends(at=_chunk4ZMKB6PVcjs.a.Tokenizer,ut=[_chunk2Z3O2CFMcjs.r],at){static get ORIGINAL_KEYWORDS(){return{..._chunk4ZMKB6PVcjs.a.Tokenizer.KEYWORDS,VOID:"void"}}};L=_chunk2Z3O2CFMcjs.a.call(void 0, at),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"ORIGINAL_KEYWORDS",ut,x),_chunk2Z3O2CFMcjs.b.call(void 0, L,x),_chunk2Z3O2CFMcjs.c.call(void 0, L,3,x);var Ot,Rt,_t,xt,lt,Nt,Ct,ct,p,n=class extends(ct=_chunk4ZMKB6PVcjs.a.Parser,Ct=[_chunk2Z3O2CFMcjs.r],Nt=[_chunk2Z3O2CFMcjs.r],lt=[_chunk2Z3O2CFMcjs.r],xt=[_chunk2Z3O2CFMcjs.r],_t=[_chunk2Z3O2CFMcjs.r],Rt=[_chunk2Z3O2CFMcjs.r],Ot=[_chunk2Z3O2CFMcjs.r],ct){static get ID_VAR_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.ID_VAR_TOKENS,"sessionUser","straightJoin"])}static get NO_PAREN_FUNCTIONS(){let t={..._chunk4ZMKB6PVcjs.a.Parser.NO_PAREN_FUNCTIONS};return delete t.localtime,delete t.localtimestamp,t}static get FUNCTIONS(){return{..._chunk4ZMKB6PVcjs.a.Parser.FUNCTIONS,GETDATE:t=>_chunk2Z3O2CFMcjs.fh.fromArgList(t),DATEADD:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.uh),DATE_ADD:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.uh),DATEDIFF:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.xh),DATE_DIFF:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.xh),NOW:t=>_chunk2Z3O2CFMcjs.fh.fromArgList(t),TO_DATE:_chunk2Z3O2CFMcjs.Kp.call(void 0, _chunk2Z3O2CFMcjs.Pl,{dialect:"databricks"}),UNIFORM:t=>new (0, _chunk2Z3O2CFMcjs.Wl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, t,0),expression:_chunk2Z3O2CFMcjs.ca.call(void 0, t,1),seed:_chunk2Z3O2CFMcjs.ca.call(void 0, t,2)})}}static get NO_PAREN_FUNCTION_PARSERS(){return{..._chunk4ZMKB6PVcjs.a.Parser.NO_PAREN_FUNCTION_PARSERS,CURDATE:function(){return this.parseCurdate()}}}static get FACTOR(){return{..._chunk4ZMKB6PVcjs.a.Parser.FACTOR,colon:_chunk2Z3O2CFMcjs.uj}}static get COLUMN_OPERATORS(){return{..._chunk2Z3O2CFMcjs.za.COLUMN_OPERATORS,qdcolon:function(t,e){return this.expression(_chunk2Z3O2CFMcjs.bn,{this:t,to:e})}}}parseCurdate(){return this.match("lParen")&&this.matchRParen(),this.expression(_chunk2Z3O2CFMcjs.$g)}static get TABLE_ALIAS_TOKENS(){return new Set([..._chunk4ZMKB6PVcjs.a.Parser.TABLE_ALIAS_TOKENS,"straightJoin"])}};p=_chunk2Z3O2CFMcjs.a.call(void 0, ct),_chunk2Z3O2CFMcjs.d.call(void 0, p,10,"ID_VAR_TOKENS",Ct,n),_chunk2Z3O2CFMcjs.d.call(void 0, p,10,"NO_PAREN_FUNCTIONS",Nt,n),_chunk2Z3O2CFMcjs.d.call(void 0, p,10,"FUNCTIONS",lt,n),_chunk2Z3O2CFMcjs.d.call(void 0, p,10,"NO_PAREN_FUNCTION_PARSERS",xt,n),_chunk2Z3O2CFMcjs.d.call(void 0, p,10,"FACTOR",_t,n),_chunk2Z3O2CFMcjs.d.call(void 0, p,10,"COLUMN_OPERATORS",Rt,n),_chunk2Z3O2CFMcjs.d.call(void 0, p,10,"TABLE_ALIAS_TOKENS",Ot,n),_chunk2Z3O2CFMcjs.b.call(void 0, p,n),_chunk2Z3O2CFMcjs.c.call(void 0, p,3,n),n.LOG_DEFAULTS_TO_LN=!0,n.STRICT_CAST=!0,n.COLON_IS_VARIANT_EXTRACT=!0;var ft,It,gt,f,r=class extends(gt=_chunk4ZMKB6PVcjs.a.Generator,It=[_chunk2Z3O2CFMcjs.r],ft=[_chunk2Z3O2CFMcjs.r],gt){static get TYPE_MAPPING(){return new Map([..._chunk4ZMKB6PVcjs.a.Generator.TYPE_MAPPING,["null","VOID"]])}static get ORIGINAL_TRANSFORMS(){let t=new Map([..._chunk4ZMKB6PVcjs.a.Generator.TRANSFORMS,[_chunk2Z3O2CFMcjs.Yg,()=>"CURRENT_VERSION()"],[_chunk2Z3O2CFMcjs.uh,_chunk2Z3O2CFMcjs.sq.call(void 0, "DATEADD")],[_chunk2Z3O2CFMcjs.xh,_chunk2Z3O2CFMcjs.sq.call(void 0, "DATEDIFF")],[_chunk2Z3O2CFMcjs.$f,function(e){return this.func("CONVERT_TIMEZONE",[e.args.sourceTz,e.args.targetTz,e.args.timestamp])}],[_chunk2Z3O2CFMcjs.Ah,function(e){return this.func("TIMESTAMPADD",[e.args.unit,e.args.expression,e.args.this])}],[_chunk2Z3O2CFMcjs.Bh,function(e){return this.func("TIMESTAMPADD",[e.args.unit,new (0, _chunk2Z3O2CFMcjs.Qe)({this:e.args.expression,expression:_chunk2Z3O2CFMcjs.$c.number(-1)}),e.args.this])}],[_chunk2Z3O2CFMcjs.Dh,_chunk2Z3O2CFMcjs.Qp.call(void 0, )],[_chunk2Z3O2CFMcjs.in,_chunk2Z3O2CFMcjs.Qq],[_chunk2Z3O2CFMcjs.Wd,_chunk2Z3O2CFMcjs.Po.call(void 0, [_chunk2Z3O2CFMcjs.So,_chunk2Z3O2CFMcjs.Wo,_chunk2Z3O2CFMcjs.Xo])],[_chunk2Z3O2CFMcjs.uj,function(e){return Tt.call(this,e)}],[_chunk2Z3O2CFMcjs.wj,function(e){return Tt.call(this,e)}],[_chunk2Z3O2CFMcjs.je,()=>""],[_chunk2Z3O2CFMcjs.Qf,function(e){return e.args.isNumeric?this.castSql(new (0, _chunk2Z3O2CFMcjs.Cg)({this:e.args.this,to:new (0, _chunk2Z3O2CFMcjs.ac)({this:"STRING"})})):this.functionFallbackSql(e)}],[_chunk2Z3O2CFMcjs.lh,()=>"CURRENT_CATALOG()"]]);return t.delete(_chunk2Z3O2CFMcjs.Lk),t.delete(_chunk2Z3O2CFMcjs.bn),t}columnDefSql(t,e={}){let{sep:u=" "}=e,ht=t.find(_chunk2Z3O2CFMcjs.Pc),M=t.kind;return ht&&M instanceof _chunk2Z3O2CFMcjs.ac&&_chunk2Z3O2CFMcjs.ac.INTEGER_TYPES.has(M.args.this)&&t.setArgKey("kind",_chunk2Z3O2CFMcjs.ac.build("bigint")),super.columnDefSql(t,{sep:u})}generatedAsIdentityColumnConstraintSql(t){return t.setArgKey("this",!0),super.generatedAsIdentityColumnConstraintSql(t)}jsonPathSql(t){return t.setArgKey("escape",void 0),super.jsonPathSql(t)}uniformSql(t){let e=t.args.gen,u=t.args.seed;return e&&(u=_chunk2Z3O2CFMcjs.p.call(void 0, e.args.this,_chunk2Z3O2CFMcjs.Ca,"string")),this.func("UNIFORM",[t.args.this,t.args.expression,u])}};f=_chunk2Z3O2CFMcjs.a.call(void 0, gt),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"TYPE_MAPPING",It,r),_chunk2Z3O2CFMcjs.d.call(void 0, f,10,"ORIGINAL_TRANSFORMS",ft,r),_chunk2Z3O2CFMcjs.b.call(void 0, f,r),_chunk2Z3O2CFMcjs.c.call(void 0, f,3,r),r.TRY_SUPPORTED=!1,r.SUPPORTS_UESCAPE=!1,r.TABLESAMPLE_SEED_KEYWORD="REPEATABLE",r.COPY_PARAMS_ARE_WRAPPED=!1,r.COPY_PARAMS_EQ_REQUIRED=!0,r.JSON_PATH_SINGLE_QUOTE_ESCAPE=!1,r.QUOTE_JSON_PATH=!1,r.PARSE_JSON_NAME="PARSE_JSON";var dt,mt,y,o= exports.Databricks =class extends(mt=_chunk4ZMKB6PVcjs.a,dt=[_chunk2Z3O2CFMcjs.r],mt){static get COERCES_TO(){let t=new Map(_chunk2Z3O2CFMcjs.Z.COERCES_TO);for(let e of _chunk2Z3O2CFMcjs.ac.TEXT_TYPES){let u=new Set([...t.get(e)||[],..._chunk2Z3O2CFMcjs.ac.NUMERIC_TYPES,..._chunk2Z3O2CFMcjs.ac.TEMPORAL_TYPES,"binary","boolean","interval"]);t.set(e,u)}return t}};y=_chunk2Z3O2CFMcjs.a.call(void 0, mt),_chunk2Z3O2CFMcjs.d.call(void 0, y,10,"COERCES_TO",dt,o),_chunk2Z3O2CFMcjs.b.call(void 0, y,o),_chunk2Z3O2CFMcjs.c.call(void 0, y,3,o),o.DIALECT_NAME="databricks",o.SAFE_DIVISION=!1,o.COPY_PARAMS_ARE_CSV=!1,o.Tokenizer=x,o.JsonPathTokenizer=_,o.Parser=n,o.Generator=r;_chunk2Z3O2CFMcjs.op.register("databricks",o);exports.Databricks = o;
2
+ //# sourceMappingURL=databricks.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/huydna/projects/sqlingo.js/dist/dialects/databricks.cjs","../../src/dialects/databricks.ts"],"names":["jsonExtractSql","expression","thisSql","exprSql"],"mappings":"AAAA,kIAAyC,iCAA8B,iCAA8B,iCAA8B,yDAAgZ,SCqE1gBA,EAAAA,CAAiCC,CAAAA,CAA6D,CACrG,IAAMC,CAAAA,CAAU,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAY,MAAM,CAAA,CACrCE,CAAAA,CAAU,IAAA,CAAK,GAAA,CAAIF,CAAAA,CAAY,YAAY,CAAA,CACjD,MAAO,CAAA,EAAA","file":"/home/huydna/projects/sqlingo.js/dist/dialects/databricks.cjs","sourcesContent":[null,"import type {\n Generator,\n} from '../generator';\nimport {\n Parser,\n} from '../parser';\nimport {\n TokenType,\n} from '../tokens';\nimport type {\n ColumnDefExpr,\n JsonPathExpr,\n} from '../expressions';\nimport {\n JsonExtractScalarExpr,\n Expression,\n JsonPathRootExpr,\n GroupConcatExpr,\n JsonExtractExpr,\n DataTypeExpr,\n DataTypeExprKind,\n CurrentTimestampExpr,\n DateAddExpr,\n DateDiffExpr,\n TsOrDsToDateExpr,\n UniformExpr,\n CurrentDateExpr,\n TryCastExpr,\n CurrentVersionExpr,\n DatetimeAddExpr,\n DatetimeSubExpr,\n MulExpr,\n DatetimeTruncExpr,\n SelectExpr,\n ConvertTimezoneExpr,\n ToCharExpr,\n CastExpr,\n CurrentCatalogExpr,\n GeneratedAsIdentityColumnConstraintExpr,\n RegexpLikeExpr,\n LiteralExpr,\n} from '../expressions';\nimport {\n seqGet,\n} from '../helper';\nimport {\n TypeAnnotator,\n} from '../optimizer';\nimport {\n JsonPathTokenizer,\n} from '../jsonpath';\nimport {\n anyToExists, eliminateDistinctOn, preprocess, unnestToExplode,\n} from '../transforms';\nimport {\n cache, narrowInstanceOf,\n} from '../port_internals';\nimport {\n Spark,\n} from './spark';\nimport {\n dateDeltaSql,\n buildDateDelta,\n buildFormattedTime,\n Dialect, Dialects,\n timestampTruncSql,\n groupConcatSql,\n} from './dialect';\n\nfunction jsonExtractSql (this: Generator, expression: JsonExtractExpr | JsonExtractScalarExpr): string {\n const thisSql = this.sql(expression, 'this');\n const exprSql = this.sql(expression, 'expression');\n return `${thisSql}:${exprSql}`;\n}\n\nclass DatabricksJsonPathTokenizer extends JsonPathTokenizer {\n @cache\n static get IDENTIFIERS () {\n return [\n '`',\n '\"',\n ];\n }\n}\n\nclass DatabricksTokenizer extends Spark.Tokenizer {\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n return {\n ...Spark.Tokenizer.KEYWORDS,\n VOID: TokenType.VOID,\n };\n }\n}\n\nclass DatabricksParser extends Spark.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.STRAIGHT_JOIN,\n ]);\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get NO_PAREN_FUNCTIONS () {\n const noParenFunctions = {\n ...Spark.Parser.NO_PAREN_FUNCTIONS,\n };\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n static LOG_DEFAULTS_TO_LN = true;\n static STRICT_CAST = true;\n static COLON_IS_VARIANT_EXTRACT = true;\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return {\n ...Spark.Parser.FUNCTIONS,\n GETDATE: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n DATEADD: buildDateDelta(DateAddExpr),\n DATE_ADD: buildDateDelta(DateAddExpr),\n DATEDIFF: buildDateDelta(DateDiffExpr),\n DATE_DIFF: buildDateDelta(DateDiffExpr),\n NOW: (args: unknown[]) => CurrentTimestampExpr.fromArgList(args),\n TO_DATE: buildFormattedTime(TsOrDsToDateExpr, {\n dialect: Dialects.DATABRICKS,\n }),\n UNIFORM: (args: Expression[]) => new UniformExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n seed: seqGet(args, 2),\n }),\n };\n }\n\n @cache\n static get NO_PAREN_FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return {\n ...Spark.Parser.NO_PAREN_FUNCTION_PARSERS,\n CURDATE: function (this: Parser) {\n return (this as DatabricksParser).parseCurdate();\n },\n };\n }\n\n @cache\n static get FACTOR (): Partial<Record<TokenType, typeof Expression>> {\n return {\n ...Spark.Parser.FACTOR,\n [TokenType.COLON]: JsonExtractExpr,\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.QDCOLON]: function (this: Parser, thisNode?: Expression, to?: Expression) {\n return this.expression(TryCastExpr, {\n this: thisNode,\n to: to,\n });\n },\n };\n }\n\n parseCurdate (): CurrentDateExpr {\n if (this.match(TokenType.L_PAREN)) {\n this.matchRParen();\n }\n return this.expression(CurrentDateExpr);\n }\n\n // port from _Dialect metaclass logic\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return new Set([\n ...Spark.Parser.TABLE_ALIAS_TOKENS,\n TokenType.STRAIGHT_JOIN,\n ]);\n }\n}\nclass DatabricksGenerator extends Spark.Generator {\n // port from _Dialect metaclass logic\n static TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\n static TABLESAMPLE_SEED_KEYWORD = 'REPEATABLE';\n static COPY_PARAMS_ARE_WRAPPED = false;\n static COPY_PARAMS_EQ_REQUIRED = true;\n static JSON_PATH_SINGLE_QUOTE_ESCAPE = false;\n static QUOTE_JSON_PATH = false;\n static PARSE_JSON_NAME = 'PARSE_JSON' as const;\n\n @cache\n static get TYPE_MAPPING () {\n return new Map([\n ...Spark.Generator.TYPE_MAPPING,\n [\n DataTypeExprKind.NULL,\n 'VOID',\n ],\n ]);\n }\n\n @cache\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static get ORIGINAL_TRANSFORMS (): Map<typeof Expression, (this: Generator, e: any) => string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transforms = new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Spark.Generator.TRANSFORMS,\n [\n CurrentVersionExpr,\n () => 'CURRENT_VERSION()',\n ],\n [\n DateAddExpr,\n dateDeltaSql('DATEADD'),\n ],\n [\n DateDiffExpr,\n dateDeltaSql('DATEDIFF'),\n ],\n [\n ConvertTimezoneExpr,\n function (this: Generator, e: ConvertTimezoneExpr) {\n return this.func('CONVERT_TIMEZONE', [\n e.args.sourceTz,\n e.args.targetTz,\n e.args.timestamp,\n ]);\n },\n ],\n [\n DatetimeAddExpr,\n function (this: Generator, e) {\n return this.func('TIMESTAMPADD', [\n e.args.unit,\n e.args.expression,\n e.args.this,\n ]);\n },\n ],\n [\n DatetimeSubExpr,\n function (this: Generator, e) {\n return this.func('TIMESTAMPADD', [\n e.args.unit,\n new MulExpr({\n this: e.args.expression,\n expression: LiteralExpr.number(-1),\n }),\n e.args.this,\n ]);\n },\n ],\n [\n DatetimeTruncExpr,\n timestampTruncSql(),\n ],\n [\n GroupConcatExpr,\n groupConcatSql,\n ],\n [\n SelectExpr,\n preprocess([\n eliminateDistinctOn,\n unnestToExplode,\n anyToExists,\n ]),\n ],\n [\n JsonExtractExpr,\n function (this: Generator, e) {\n return jsonExtractSql.call(this, e);\n },\n ],\n [\n JsonExtractScalarExpr,\n function (this: Generator, e) {\n return jsonExtractSql.call(this, e);\n },\n ],\n [\n JsonPathRootExpr,\n () => '',\n ],\n [\n ToCharExpr,\n function (this: Generator, e: ToCharExpr) {\n return e.args.isNumeric\n ? this.castSql(new CastExpr({\n this: e.args.this,\n to: new DataTypeExpr({\n this: 'STRING',\n }),\n }))\n : this.functionFallbackSql(e);\n },\n ],\n [\n CurrentCatalogExpr,\n () => 'CURRENT_CATALOG()',\n ],\n ]);\n\n transforms.delete(RegexpLikeExpr);\n transforms.delete(TryCastExpr);\n\n return transforms;\n }\n\n columnDefSql (expression: ColumnDefExpr, options: {sep?: string} = {}): string {\n const {\n sep = ' ',\n } = options;\n const constraint = expression.find(GeneratedAsIdentityColumnConstraintExpr);\n const kind = expression.kind;\n\n if (\n constraint\n && kind instanceof DataTypeExpr\n && DataTypeExpr.INTEGER_TYPES.has(kind.args.this as DataTypeExprKind)\n ) {\n // only BIGINT generated identity constraints are supported\n expression.setArgKey('kind', DataTypeExpr.build('bigint'));\n }\n\n return super.columnDefSql(expression, {\n sep,\n });\n }\n\n generatedAsIdentityColumnConstraintSql (expression: GeneratedAsIdentityColumnConstraintExpr): string {\n expression.setArgKey('this', true); // trigger ALWAYS in super class\n return super.generatedAsIdentityColumnConstraintSql(expression);\n }\n\n jsonPathSql (expression: JsonPathExpr): string {\n expression.setArgKey('escape', undefined);\n return super.jsonPathSql(expression);\n }\n\n uniformSql (expression: UniformExpr): string {\n const gen = expression.args.gen;\n let seed: Expression | string | undefined = expression.args.seed;\n\n // From Snowflake UNIFORM(min, max, gen) as RANDOM(), RANDOM(seed), or constant value -> Extract seed\n if (gen) {\n seed = narrowInstanceOf(gen.args.this, Expression, 'string');\n }\n\n return this.func('UNIFORM', [\n expression.args.this,\n expression.args.expression,\n seed,\n ]);\n }\n}\n\nexport class Databricks extends Spark {\n static DIALECT_NAME = Dialects.DATABRICKS;\n static SAFE_DIVISION = false;\n static COPY_PARAMS_ARE_CSV = false;\n\n static Tokenizer = DatabricksTokenizer;\n static JsonPathTokenizer = DatabricksJsonPathTokenizer;\n static Parser = DatabricksParser;\n static Generator = DatabricksGenerator;\n\n @cache\n static get COERCES_TO (): Map<DataTypeExprKind, Set<DataTypeExprKind>> {\n const coercionMap = new Map(TypeAnnotator.COERCES_TO);\n\n for (const textType of DataTypeExpr.TEXT_TYPES) {\n const types = new Set([\n ...(coercionMap.get(textType) || [\n ]),\n ...DataTypeExpr.NUMERIC_TYPES,\n ...DataTypeExpr.TEMPORAL_TYPES,\n DataTypeExprKind.BINARY,\n DataTypeExprKind.BOOLEAN,\n DataTypeExprKind.INTERVAL,\n ] as DataTypeExprKind[]);\n coercionMap.set(textType, types);\n }\n return coercionMap;\n }\n}\n\nDialect.register(Dialects.DATABRICKS, Databricks);\n"]}