@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,3 @@
1
+ import{$c as v,$d as Te,$h as Re,$k as Hs,$m as ln,$p as Wn,Ac as ie,Ae as it,Ah as le,Ai as de,Aj as hs,Am as En,Ao as Q,Bf as pt,Bh as fe,Bi as Es,Bm as pn,Ca as x,Cd as Ee,Cf as Ur,Cg as Se,Cj as Rs,Ck as ws,Cl as $s,Cn as On,Cq as be,Dh as Wr,Dj as Is,Eh as bt,Ej as Ns,Eo as Un,Ep as Vn,Fa as st,Fc as ae,Fe as _r,Ff as yr,Fl as js,Fo as yn,Gc as Er,Gk as Fs,Gl as Zs,Gm as Tn,Hc as pr,Hf as wr,Hl as zs,Hq as zn,Ic as nt,Id as pe,Ie as dr,Ig as Jr,Ij as ut,Ik as J,Il as Qs,Iq as Qn,Ja as Be,Je as Ut,Jf as wt,Jj as xt,Jk as ft,Kk as Ht,Kl as tn,Kp as tt,Le as at,Lg as kr,Lj as _s,Lk as Pe,Lm as cn,Lo as Le,Mf as U,Mg as Vr,Mj as ds,Ml as en,Mo as wn,Ni as ps,Nj as ms,Nl as rn,Np as y,Od as cr,Oj as Yt,Ok as bs,Ol as sn,Pb as ze,Pf as Fr,Ph as $r,Pl as Ce,Po as Zt,Pp as D,Ql as z,Qn as gn,Qq as ti,Rf as br,Ri as Ts,Rj as me,Rk as qs,Rl as Y,Sh as jr,Sj as Os,Sk as Gs,Sl as _t,Sn as Pn,So as Fn,Tb as ne,Td as Ar,Th as Zr,Tj as gs,Tm as An,Ua as We,Ub as Ct,Ud as Sr,Uh as zr,Uj as H,Uk as Ys,Ul as dt,Uo as bn,Vb as Qe,Vd as ur,Ve as ce,Vh as Qr,Vm as Sn,Vn as Mn,Vo as qn,Wd as K,Wk as Ks,Wm as un,Wn as Dn,Wp as Xn,Wq as zt,Xd as xr,Xf as qr,Xh as ts,Xl as nn,Xp as vn,Xq as qe,Y as ee,Ya as $e,Yo as Gn,Z as ve,Za as je,Ze as yt,Zh as es,Zl as M,Zm as xn,_h as he,_i as cs,_p as Bn,a as b,ac as l,ag as Gr,ah as Xr,ai as rs,al as ht,b as q,bc as tr,bg as Ae,bi as ss,bl as Js,bp as Yn,c as G,ca as p,cc as er,cf as mr,cl as ks,cm as Xt,d as o,dc as rr,dd as Tr,de as lr,di as Ie,dj as As,dl as Vs,dm as mt,ef as Or,ei as Ne,el as Xs,em as an,eo as k,fl as Jt,fm as on,fn,ge as fr,gf as gr,gi as ns,gk as Oe,gl as Rt,gn as hn,gq as $n,ha as re,hb as Ze,hc as Lt,hf as Pr,hi as _e,hj as Ss,hk as Z,hl as It,ho as Cn,ie as hr,if as Mr,ii as ct,il as Nt,in as Wt,iq as jn,je as Rr,jf as Dr,ji as is,jj as At,jl as vs,jn as $t,ke as Ir,kj as us,kp as Kn,lc as sr,li as as,lj as qt,ll as Bs,lp as V,mg as Yr,mo as jt,n as _,ng as Kr,nj as xs,nk as lt,nl as kt,no as Ln,np as Ue,oc as nr,of as Cr,oj as Gt,om as Ot,op as ye,p as g,pc as ir,pj as B,pk as Kt,pl as Ws,pm as gt,pp as S,q as te,qc as ar,qf as Lr,qh as vr,qj as ls,qk as Ps,qm as Pt,qq as we,r as E,rb as h,rj as fs,rk as Ms,rp as Hn,rq as Zn,se as Nr,sn as Rn,tf as ot,tk as Ds,tl as Me,ua as se,ud as oe,ug as Hr,uh as Tt,uj as St,uk as Cs,up as Jn,vc as or,vj as W,vk as Ls,vm as vt,vn as In,vp as kn,vq as Fe,wh as ue,wi as os,wj as $,wk as ge,wl as Vt,wm as Bt,wn as Nn,xf as Et,xh as xe,xk as Us,xl as De,xm as Mt,xn as _n,yh as Ft,yk as ys,yn as dn,za as d,zh as Br,zj as j,zn as mn}from"../chunk-KCNOE4DZ.js";function Qi(s){let n=s.args.this;if(!_(n,x))return s;let t=n.type;return this.setType(s,n.isType(l.INTEGER_TYPES)?"double":_(t,l)?t:void 0),s}function ta(s){let n=s.args.this,t=s.args.expression;return _(n,x)&&_(t,x)&&n.isType(l.INTEGER_TYPES)&&t.isType(l.INTEGER_TYPES)?this.setType(s,"double"):si.call(this,s)}function si(s){let n=s.args.this,t=s.args.expression,e=_(n,x)?n.type:void 0,r=_(t,x)?t.type:void 0;return this.setType(s,this.maybeCoerce(_(e,l)?e:void 0,_(r,l)?r:void 0)),s}function ei(s){let n=s.args.this,t=_(n,x)?n.type:void 0,e=_(t,l)?t:new l({this:"unknown"}),r=new l({this:"struct",expressions:[e,new l({this:"bigint"})],nested:!0});return this.setType(s,new l({this:"array",expressions:[r],nested:!0})),s}function ea(s,n){return s.annotateByArgs(n,["expressions"]),n.isType(["binary","unknown"])||s.setType(n,"varchar"),n}function ra(s,n){let t=n.args.expressions;if(t&&t.length===1){let e=t[0];if(!_(e,x))return n;let r=e.unnest(),i;if(r instanceof K){let a=r.meta?.queryType,T=_(a,l)?a:void 0;if(T&&T.isType("struct")&&T.args.expressions?.length===1){let u=T.args.expressions[0];if(_(u,je)){let R=u.args.kind;_(R,l)&&!R.isType("unknown")&&(i=R)}}}else if(r instanceof Sr){let a=s.getSetopColumnTypes(r),T=r.left;if(a&&_(T,st)&&0<T.selects.length){let u=T.selects[0].aliasOrName;i=a[u]}}if(i&&!(i instanceof l&&i.isType("unknown")||i==="unknown")){let a=i instanceof l?i.copy():new l({this:i}),T=new l({this:"array",expressions:[a],nested:!0});return s.setType(n,T),n}}return s.annotateByArgs(n,["expressions"],{array:!0}),n}var ri,Ge;ri=[E];var X=class{static get EXPRESSION_METADATA(){let n=new Map(Ue.EXPRESSION_METADATA),t=(e,r)=>{for(let i of e)n.set(i,r)};return t([An,Jr,os,Es,Os,gs,Ys,js],{annotator:(e,r)=>Qi.call(e,r)}),t([vt,Bt,Tt,Ft,Wr,xn,Wt,ir,St,un,_s,H,Kt,ln,Fr,dn,J,Ht,qs,Gs,ar,ms,ds,yt,ks,vs,Ws,ss,wt,en,an],{annotator:(e,r)=>e.annotateByArgs(r,["this"])}),t([Ot,ot,gt,Pt,Et,hn,yr,Tn,zr,Yt,Nn,On,Fs,bs,Ks],{returns:"bigint"}),t([pr,qr,Z,Jt,Rt,It,Nt,dt],{returns:"binary"}),t([pt,jr],{returns:"boolean"}),t([xt,mt],{returns:"datetime"}),t([mr,on,Cr,Or,Dn,Mn,gr,Pr,gn,Lr,wr,Zr,mn,ws,Mr,Dr],{returns:"double"}),t([qt,hs,Rs,us,ls,xs,Gt],{returns:"json"}),t([ut,ct,ns,Y],{returns:"time"}),t([Gr,Ss,Ps,$,fs,Qr,$t,lt,Ms,Xs,Bs,Xt],{returns:"varchar"}),t([_n,Hs,ht,Js,Vs],{annotator:(e,r)=>si.call(e,r)}),t([pn,W,ft,kt],{annotator:(e,r)=>e.annotateByArgs(r,["this"],{array:!0})}),Ue.TIMESTAMP_EXPRESSIONS.forEach(e=>n.set(e,{returns:"timestamptz"})),n.set(Mt,{annotator:(e,r)=>ei.call(e,r)}),n.set(En,{annotator:(e,r)=>ei.call(e,r)}),n.set(U,{annotator:ra}),n.set(kr,{annotator:ea}),n.set(bt,{returns:"date"}),n.set(ps,{annotator:(e,r)=>e.setType(r,l.build("ARRAY<TIMESTAMP>",{dialect:"bigquery"}))}),n.set(j,{annotator:(e,r)=>e.setType(r,r.args.toJson?"json":"varchar")}),n.set(At,{annotator:(e,r)=>e.setType(r,l.build("ARRAY<VARCHAR>",{dialect:"bigquery"}))}),n.set(B,{annotator:(e,r)=>e.setType(r,l.build("ARRAY<VARCHAR>",{dialect:"bigquery"}))}),n.set(Sn,{annotator:(e,r)=>e.annotateByArgs(r,["this","default"])}),n.set(Is,{returns:"bigdecimal"}),n.set(Ns,{returns:"decimal"}),n.set(ht,{annotator:(e,r)=>ta.call(e,r)}),n.set(br,{annotator:(e,r)=>e.setType(r,l.build("ARRAY<BIGINT>",{dialect:"bigquery"}))}),n}};Ge=b(null),o(Ge,10,"EXPRESSION_METADATA",ri,X),q(Ge,X),G(Ge,3,X);var sa=["JSON_QUERY","JSON_VALUE","JSON_QUERY_ARRAY"],na=["year","month","day","hour","minute","second"];function ia(s){if(!s.findAncestor(K))return this.valuesSql(s);let n=[],t=s.args.alias;for(let r of s.findAll(ze)){let a=te(t&&t.args.columns?t.args.columns:Array.from({length:(r.args.expressions||[]).length},(T,u)=>`_c${u}`),"string",h)?.map((T,u)=>new _r({this:k(T),expression:(r.args.expressions||[])[u]}));n.push(new $s({expressions:a}))}let e=t?.args.this?new $e({columns:[t.args.this]}):void 0;return this.unnestSql(new de({expressions:[yn(...n)],alias:e}))}function aa(s){let n=s.args.this;return n instanceof Qe?n=`${this.sql(n,"this")} <${this.expressions(n)}>`:n=this.sql(n),`RETURNS ${n}`}function oa(s){let n=s.find(Ee);return s.args.kind==="function"&&n&&n.args.isTable&&(s.setArgKey("kind","TABLE FUNCTION"),(s.args.expression instanceof xr||s.args.expression instanceof v)&&s.setArgKey("expression",s.args.expression.args.this)),this.createSql(s)}function Ea(s){if(s instanceof K){let n=s.args.group,t=s.args.order;if(n&&t){let e={};for(let r of s.selects){let i=g(r.args.alias,h);r instanceof Lt&&i&&(e[r.args.this?.toString()??""]=i)}for(let r of n.args.expressions||[]){if(!(r instanceof x)||r.isInteger)continue;let i=e[r.toString()];i&&r.replace(new nt({this:i}))}}}return s}function pa(s){if(!(s instanceof ae))return s;let n=s.args.alias;if(!n)return s;let t=n.getArgKey("columns");if(!Array.isArray(t)||!t.length)return s;let e=s.args.this;if(!(e instanceof st))return s;if(e.isStar)return console.warn("Can't push down CTE column names for star queries. Run the query through the optimizer or use 'qualify' to expand the star projections first."),s;n.setArgKey("columns",void 0);let r=e.selects;for(let i=0;i<t.length&&!(r.length<=i);i++){let a=t[i],T=r[i],u=T;T instanceof Lt&&T.args.this&&(u=T.args.this),T.replace(new Lt({this:u,alias:g(a,"string",x)}))}return s}function Ta(s){let n=tt(De,{dialect:"bigquery"})([p(s,1),p(s,0)]);return n.setArgKey("zone",p(s,2)),n}function ca(s){let n=es.fromArgList(s);return n.setArgKey("withTz",!0),n}function Aa(s){return(s.length===3?_e:as).fromArgList(s)}function Sa(s){let n=p(s,0);return n instanceof Z?new Oe({this:n.args.this}):new $t({this:n})}function ua(s){let n=new Gt({this:s[0]});for(let t of s.slice(1))if(t instanceof at){let e=t.args.this?.name.toLowerCase();e!==void 0&&n.setArgKey(e,t)}else n.setArgKey("expression",t);return n}function xa(s){let n=new K({expressions:[new h({this:"1"})]}).from(new de({expressions:te([s.left],x)}).as("_unnest",{table:["_col"]})).where(new nt({this:"_col"}).eq(s.right)),t=new ts({this:n});return this.sql(t)}function la(s){return s.length===1?new Y({this:s[0]}):s.length===2?Zs.fromArgList(s):ct.fromArgList(s)}function fa(s){return s.length===1?z.fromArgList(s):s.length===2?Br.fromArgList(s):mt.fromArgList(s)}function ha(s){let n=new xe({this:p(s,0),expression:p(s,1),unit:p(s,2),datePartBoundary:!0}),t=n.args.unit;return t instanceof Ct&&t.name.toUpperCase()==="WEEK"&&n.setArgKey("unit",new ie({this:new Ct({this:"SUNDAY"})})),n}function Ye(s,n){return(t,{dialect:e})=>{let r=!1;try{r=((t[1]?.name).match(/(^|[^\\])(\\\\)*\((?!\?)/g)?.length??0)===1}catch{r=!1}let i={this:p(t,0),expression:p(t,1),position:p(t,2),occurrence:p(t,3),group:r?v.number(1):n};return s===J&&(i.nullIfPosOverflow=e._constructor.REGEXP_EXTRACT_POSITION_OVERFLOW_RETURNS_NULL),new s(i)}}function et(s){return(n,t)=>(n.length===1&&n.push(v.string("$")),se(s)(n,t))}var Ra=function(s){Kn.call(this,s,"insCost","delCost","subCost");let n=s.args.maxDist;return n&&(n=new at({this:new Ct({this:"max_distance"}),expression:n})),this.func("EDIT_DISTANCE",[s.args.this,s.args.expression,n])};function Ia(s){let n=p(s,2);return new me({this:p(s,0),expression:p(s,1),maxDist:g(n?.args.expression,x)})}function Ke(s){let n=s.meta?.name||s._constructor.sqlName(),t=typeof n=="string"?n.toUpperCase():"",e=sa.includes(t);e&&(this.quoteJsonPathKeyUsingBrackets=!1);let r=S(t).call(this,s);return e&&(this.quoteJsonPathKeyUsingBrackets=!0),r}function Qt(s){return n=>{let t=tt(zs,{dialect:"bigquery"})([new s({this:n[1]}),n[0]]);return t.setArgKey("zone",n[2]),t}}function Na(s){let n=new H({this:p(s,0)}),t=new H({this:p(s,1)});return new Vr({this:n,expression:t,jsonScope:p(s,2)})}function ni(s){let n=this.sql(s,"this"),t=s instanceof Vt?"DATE":"TIMESTAMP";if(s.args.safe){let r=this.dialect._constructor,i=this.formatTime(s,r.INVERSE_FORMAT_MAPPING,r.INVERSE_FORMAT_TRIE);return`SAFE_CAST(${n} AS ${t} FORMAT ${i})`}let e=this.formatTime(s);return this.func(`PARSE_${t}`,[e,n,s.getArgKey("zone")])}function _a(s){return D("DATE","ADD").call(this,Zn(s))}function da(s){s.args.this?.replace(jt(s.args.this,"timestamp".toUpperCase())),s.args.expression?.replace(jt(s.args.expression,"timestamp".toUpperCase()));let n=Fe(s);return this.func("DATE_DIFF",[s.args.this,s.args.expression,n])}function ma(s){let n=s.args.scale,t=s.args.this;if(!n||n.name===M.SECONDS.name)return this.func("TIMESTAMP_SECONDS",[t]);if(n.name===M.MILLIS.name)return this.func("TIMESTAMP_MILLIS",[t]);if(n.name===M.MICROS.name)return this.func("TIMESTAMP_MICROS",[t]);let e=Ln("POW",Q("10"),n),r=jt(new Ut({this:t,expression:e}),"bigint");return this.func("TIMESTAMP_SECONDS",[r])}var ii,ai,oi,Ei,pi,Ti,ci,Ai,Si,C,m=class m extends(Si=qe,Ai=[E],ci=[E],Ti=[E],pi=[E],Ei=[E],oi=[E],ai=[E],ii=[E],Si){static get QUOTES(){return["'",'"','"""',"'''"]}static get COMMENTS(){return["--","#",["/*","*/"]]}static get IDENTIFIERS(){return["`"]}static get STRING_ESCAPES(){return["\\"]}static get HEX_STRINGS(){return[["0x",""],["0X",""]]}static get BYTE_STRINGS(){return["b","B"].flatMap(t=>m.QUOTES.map(e=>[t+e,e]))}static get RAW_STRINGS(){return["r","R"].flatMap(t=>m.QUOTES.map(e=>[t+e,e]))}static get ORIGINAL_KEYWORDS(){let t={...qe.KEYWORDS,"ANY TYPE":"variant",BEGIN:"command","BEGIN TRANSACTION":"begin",BYTEINT:"int",BYTES:"binary",CURRENT_DATETIME:"currentDatetime",DATETIME:"timestamp",DECLARE:"declare",ELSEIF:"command",EXCEPTION:"command",EXPORT:"export",FLOAT64:"double","FOR SYSTEM_TIME":"timestampSnapshot",LOOP:"command",MODEL:"model","NOT DETERMINISTIC":"volatile",RECORD:"struct",REPEAT:"command",TIMESTAMP:"timestamptz",WHILE:"command"};return delete t.DIV,delete t.VALUES,delete t["/*+"],t}};C=b(Si),o(C,10,"QUOTES",Ai,m),o(C,10,"COMMENTS",ci,m),o(C,10,"IDENTIFIERS",Ti,m),o(C,10,"STRING_ESCAPES",pi,m),o(C,10,"HEX_STRINGS",Ei,m),o(C,10,"BYTE_STRINGS",oi,m),o(C,10,"RAW_STRINGS",ai,m),o(C,10,"ORIGINAL_KEYWORDS",ii,m),q(C,m),G(C,3,m),m.NESTED_COMMENTS=!1;var Je=m,ui,xi,li,fi,hi,Ri,Ii,Ni,_i,di,mi,Oi,gi,Pi,Mi,Di,I,f=class extends(Di=d,Mi=[E],Pi=[E],gi=[E],Oi=[E],mi=[E],di=[E],_i=[E],Ni=[E],Ii=[E],Ri=[E],hi=[E],fi=[E],li=[E],xi=[E],ui=[E],Di){static get ID_VAR_TOKENS(){return(()=>{let t=new Set([...d.ID_VAR_TOKENS,"currentCatalog","grant","straightJoin"]);return t.delete("asc"),t.delete("desc"),t})()}static get NO_PAREN_FUNCTIONS(){let t={...d.NO_PAREN_FUNCTIONS,currentDatetime:Xr};return delete t.localtime,delete t.localtimestamp,t}static get ALIAS_TOKENS(){return(()=>{let t=new Set([...d.ALIAS_TOKENS,"grant"]);return t.delete("asc"),t.delete("desc"),t})()}static get TABLE_ALIAS_TOKENS(){return(()=>{let t=new Set([...d.TABLE_ALIAS_TOKENS,"grant","straightJoin"]);return t.delete("asc"),t.delete("desc"),t})()}static get COMMENT_TABLE_ALIAS_TOKENS(){return(()=>{let t=new Set([...d.COMMENT_TABLE_ALIAS_TOKENS,"grant"]);return t.delete("asc"),t.delete("desc"),t})()}static get UPDATE_ALIAS_TOKENS(){return(()=>{let t=new Set([...d.UPDATE_ALIAS_TOKENS,"grant"]);return t.delete("asc"),t.delete("desc"),t})()}static get NESTED_TYPE_TOKENS(){return new Set([...d.NESTED_TYPE_TOKENS,"table"])}static get PROPERTY_PARSERS(){return{...d.PROPERTY_PARSERS,"NOT DETERMINISTIC":function(){return this.expression(pe,{this:v.string("VOLATILE")})},OPTIONS:function(){return this.parseWithProperty()}}}static get CONSTRAINT_PARSERS(){return{...d.CONSTRAINT_PARSERS,OPTIONS:function(){return this.expression(Ar,{expressions:this.parseWithProperty()})}}}static get RANGE_PARSERS(){return(()=>{let t={...d.RANGE_PARSERS};return delete t.overlaps,t})()}static get DASHED_TABLE_PART_FOLLOW_TOKENS(){return new Set(["dot","lParen","rParen"])}static get STATEMENT_PARSERS(){return{...d.STATEMENT_PARSERS,else:function(){return this.parseAsCommand(this.prev)},end:function(){return this.parseAsCommand(this.prev)},for:function(){return this.parseForIn()},export:function(){return this.parseExportData()},declare:function(){return this.parseDeclare()}}}static get BRACKET_OFFSETS(){return{OFFSET:[0,!1],ORDINAL:[1,!1],SAFE_OFFSET:[0,!0],SAFE_ORDINAL:[1,!0]}}static get FUNCTIONS(){return(()=>{let t={...d.FUNCTIONS,APPROX_TOP_COUNT:e=>Mt.fromArgList(e),BIT_AND:e=>Ot.fromArgList(e),BIT_OR:e=>gt.fromArgList(e),BIT_XOR:e=>Pt.fromArgList(e),BIT_COUNT:e=>ot.fromArgList(e),BOOL:e=>pt.fromArgList(e),CONTAINS_SUBSTR:Na,DATE:Aa,DATE_ADD:e=>y(Tt)(e),DATE_DIFF:ha,DATE_SUB:e=>y(ue)(e),DATE_TRUNC:e=>new Ft({unit:e[1],this:e[0],zone:p(e,2)}),DATETIME:fa,DATETIME_ADD:e=>y(le)(e),DATETIME_SUB:e=>y(fe)(e),DIV:jn(Ut),EDIT_DISTANCE:Ia,FORMAT_DATE:Qt(Ce),GENERATE_ARRAY:e=>Ae.fromArgList(e),JSON_EXTRACT_SCALAR:et($),JSON_EXTRACT_ARRAY:et(W),JSON_EXTRACT_STRING_ARRAY:et(B),JSON_KEYS:e=>At.fromArgList(e),JSON_QUERY:se(St),JSON_QUERY_ARRAY:et(W),JSON_STRIP_NULLS:ua,JSON_VALUE:et($),JSON_VALUE_ARRAY:et(B),LENGTH:e=>new Yt({this:p(e,0),binary:!0}),MD5:e=>Z.fromArgList(e),SHA1:e=>It.fromArgList(e),NORMALIZE_AND_CASEFOLD:e=>new lt({this:p(e,0),form:p(e,1),isCasefold:!0}),OCTET_LENGTH:e=>Et.fromArgList(e),TO_HEX:Sa,PARSE_DATE:e=>tt(Vt,{dialect:"bigquery"})([p(e,1),p(e,0)]),PARSE_TIME:e=>tt(ut,{dialect:"bigquery"})([p(e,1),p(e,0)]),PARSE_TIMESTAMP:Ta,PARSE_DATETIME:e=>tt(xt,{dialect:"bigquery"})([p(e,1),p(e,0)]),REGEXP_CONTAINS:e=>Pe.fromArgList(e),REGEXP_EXTRACT:Ye(J),REGEXP_SUBSTR:Ye(J),REGEXP_EXTRACT_ALL:Ye(ft,Q(0)),SHA256:e=>new Nt({this:p(e,0),length:Q(256)}),SHA512:e=>new Rt({this:p(e,0),length:Q(512)}),SPLIT:e=>new kt({this:p(e,0),expression:p(e,1)||Q(",")}),STRPOS:e=>Me.fromArgList(e),TIME:la,TIME_ADD:e=>y(Ie)(e),TIME_SUB:e=>y(Ne)(e),TIMESTAMP:ca,TIMESTAMP_ADD:e=>y(he)(e),TIMESTAMP_SUB:e=>y(Re)(e),TIMESTAMP_MICROS:e=>new M({this:p(e,0),scale:M.MICROS}),TIMESTAMP_MILLIS:e=>new M({this:p(e,0),scale:M.MILLIS}),TIMESTAMP_SECONDS:e=>new M({this:p(e,0)}),TO_JSON:e=>new j({this:p(e,0),options:p(e,1),toJson:!0}),TO_JSON_STRING:e=>j.fromArgList(e),FORMAT_DATETIME:Qt(z),FORMAT_TIMESTAMP:Qt(_t),FORMAT_TIME:Qt(Y),FROM_HEX:e=>dt.fromArgList(e),WEEK:e=>new ie({this:Un(p(e,0))})};return delete t.SEARCH,t})()}static get FUNCTION_PARSERS(){return(()=>{let t={...d.FUNCTION_PARSERS,ARRAY:function(){return this.expression(U,{expressions:[this.parseStatement()],structNameInheritance:!0})},JSON_ARRAY:function(){return this.expression(qt,{expressions:this.parseCsv(()=>this.parseBitwise())})},MAKE_INTERVAL:function(){return this.parseMakeInterval()},PREDICT:function(){return this.parseMl(Ds)},TRANSLATE:function(){return this.parseTranslate()},FEATURES_AT_TIME:function(){return this.parseFeaturesAtTime()},GENERATE_EMBEDDING:function(){return this.parseMl(ge)},GENERATE_TEXT_EMBEDDING:function(){return this.parseMl(ge,{isText:!0})},VECTOR_SEARCH:function(){return this.parseVectorSearch()},FORECAST:function(){return this.parseMl(Us)}};return delete t.TRIM,t})()}parseForIn(){let t=this.index,e=this.parseRange();return this.matchTextSeq("DO"),this.match("command")?(this.retreat(t),this.parseAsCommand(this.prev)):this.expression(nr,{this:e,expression:this.parseStatement()})}parseExportData(){return this.matchTextSeq("DATA"),this.expression(Ze,{connection:this.matchTextSeq("WITH")&&this.matchTextSeq("CONNECTION")&&this.parseTableParts(),options:this.parseProperties(),this:this.matchTextSeq("AS")&&this.parseSelect()})}parseMakeInterval(){let t=new $r({});for(let e of na){let r=this.parseLambda();if(!r)break;let i=r instanceof at?r.args.this?.name:e;i!==void 0&&t.setArgKey(i,r),this.match("comma")}return t}parseMl(t,e={}){this.matchTextSeq("MODEL");let r=this.parseTable();this.match("comma"),this.matchTextSeq("TABLE");let i=this.match("struct",{advance:!1})?void 0:this.parseTable();return this.match("comma"),this.expression(t,{this:r,expression:i,paramsStruct:this.parseBitwise(),...e})}parseTranslate(){let t=this.tokens[this.index-4];return t&&t.text.toUpperCase()==="ML"?this.parseMl(Cs):wt.fromArgList(this.parseFunctionArgs())}parseFeaturesAtTime(){this.match("table");let t=this.parseTable(),e=this.expression(Ls,{this:t});for(;this.match("comma");){let r=this.parseLambda();if(r){let i=r.args.this;i&&e.setArgKey(i.name,r)}}return e}parseVectorSearch(){this.match("table");let t=this.parseTable();this.match("comma");let e=this.parseBitwise();this.match("comma"),this.match("table");let r=this.parseTable(),i=this.expression(ys,{this:t,columnToSearch:e,queryTable:r});for(;this.match("comma");)if(this.match("string",{advance:!1})){let a=this.parseString();i.setArgKey("queryColumnToSearch",a)}else{let a=this.parseLambda();a instanceof at&&a.args.this&&i.setArgKey(a.args.this.name,a)}return i}parseTablePart(t={}){let{schema:e=!1}=t,r=super.parseTablePart({schema:e})||this.parseNumber();if(r){if(r instanceof h){let i=r.name;for(;this.match("dash",{advance:!1})&&this.next;){let a=this.curr;for(;this.isConnected()&&!this.matchSet(this._constructor.DASHED_TABLE_PART_FOLLOW_TOKENS,{advance:!1});)this.advance();if(a===this.curr)break;i+=this.findSql(a,this.prev)}r=new h({this:i,quoted:r.args.quoted}).updatePositions(r)}else if(r instanceof v){let i=r.name;this.isConnected()&&this.parseVar({anyToken:!0})&&(i+=this.prev?.text),r=new h({this:i,quoted:!0}).updatePositions(r)}return r}}parseTableParts(t={}){let{schema:e=!1,isDbReference:r=!1,wildcard:i=!1}=t,a=super.parseTableParts({schema:e,isDbReference:r,wildcard:!0});if(!a.catalog)if(a.db){let O=a.args.db,N=a.db.split(".");N.length===2&&!g(a.args.db,h)?.quoted&&(a.setArgKey("catalog",new h({this:N[0]}).updatePositions(O)),a.setArgKey("db",new h({this:N[1]}).updatePositions(O)))}else{let O=a.args.this,N=a.name.split(".");N.length===2&&!g(a.args.this,h)?.quoted&&(a.setArgKey("db",new h({this:N[0]}).updatePositions(g(O,zt,x))),a.setArgKey("this",new h({this:N[1]}).updatePositions(g(O,zt,x))))}let T;if(a.args.this instanceof h&&a.parts.some(O=>O.name.includes("."))){T=a.args.this;let O=a.parts.map(F=>F.name).join("."),N=re(O,".",3),[w,ke,Ve,...Xe]=N.map(F=>k(F,{quoted:!0}));[w,ke,Ve].forEach(F=>{F&&F.updatePositions(g(a.args.this,zt,x))});let Dt=Ve;0<Xe.length&&Dt&&(Dt=it.build([Dt,...Xe.map(F=>F??k("",{quoted:!0}))])),a=new ne({this:Dt,db:ke,catalog:w,pivots:a.args.pivots}),a.meta.quotedTable=!0}let u=a.parts,R=u.length;if(1<R&&u[R-2].name.toUpperCase()==="INFORMATION_SCHEMA"){Cn(a,T||u[R-1],{table:!0,copy:!1});let O=`${u[R-2].name}.${u[R-1].name}`,N=new h({this:O,quoted:!0}).updatePositions(void 0,{line:u[R-2].meta?.line,col:u[R-1].meta?.col,start:u[R-2].meta?.start,end:u[R-1].meta?.end});a.setArgKey("this",N),a.setArgKey("db",p(u,-3)),a.setArgKey("catalog",p(u,-4))}return a}parseColumn(){let t=super.parseColumn();if(t instanceof nt){let e=t.parts;if(e.some(r=>r.name.includes("."))){let r=e.map(w=>w.name).join("."),i=re(r,".",4),[a,T,u,R,...O]=i.map(w=>k(w,{quoted:!0})),N=R||k("",{quoted:!0});0<O.length&&N&&(N=it.build([N,...O.map(w=>w??k("",{quoted:!0}))])),t=new nt({this:N,table:u,db:T,catalog:a}),t.meta.quotedColumn=!0}}return t}parseJsonObject(t={}){let{agg:e=!1}=t,r=super.parseJsonObject(),i=p(r.args.expressions||[],0);if(i instanceof x&&i.args.this instanceof U&&i.args.expression instanceof U){let a=i.args.this.args.expressions,T=i.args.expression.args.expressions;r.setArgKey("expressions",a?.map((u,R)=>new or({this:u,expression:T?.[R]||""})))}return r}parseBracket(t){let e=super.parseBracket(t);if(e instanceof U&&e.setArgKey("structNameInheritance",!0),t===e)return e;if(e instanceof lr)for(let r of e.args.expressions??[]){let i=r.name.toUpperCase();if(!(i in this._constructor.BRACKET_OFFSETS))break;let[a,T]=this._constructor.BRACKET_OFFSETS[i];e.setArgKey("offset",a),e.setArgKey("safe",T),r.replace(g(r.args.expressions?.[0],x))}return e}parseUnnest(t={}){let{withAlias:e=!0}=t,r=super.parseUnnest({withAlias:e});if(!r)return;let i=p(r.args.expressions??[],0);return i instanceof x&&(i=ee(i,{dialect:this.dialect}),i.isType("array")&&i.type instanceof x&&i.type.args.expressions?.some(a=>Le(a,"struct"))&&r.setArgKey("explodeArray",!0)),r}parseColumnOps(t){let e=this.index+1,r=super.parseColumnOps(t);if(r instanceof it&&r.args.expression instanceof fr){let i=r.args.this instanceof x?r.args.this.name.toUpperCase():void 0,a;i==="NET"?a=Kt:i==="SAFE"&&(a=yt),a&&(this.retreat(e),r=new a({this:this.parseFunction({anyToken:!0})}))}return r}};I=b(Di),o(I,10,"ID_VAR_TOKENS",Mi,f),o(I,10,"NO_PAREN_FUNCTIONS",Pi,f),o(I,10,"ALIAS_TOKENS",gi,f),o(I,10,"TABLE_ALIAS_TOKENS",Oi,f),o(I,10,"COMMENT_TABLE_ALIAS_TOKENS",mi,f),o(I,10,"UPDATE_ALIAS_TOKENS",di,f),o(I,10,"NESTED_TYPE_TOKENS",_i,f),o(I,10,"PROPERTY_PARSERS",Ni,f),o(I,10,"CONSTRAINT_PARSERS",Ii,f),o(I,10,"RANGE_PARSERS",Ri,f),o(I,10,"DASHED_TABLE_PART_FOLLOW_TOKENS",hi,f),o(I,10,"STATEMENT_PARSERS",fi,f),o(I,10,"BRACKET_OFFSETS",li,f),o(I,10,"FUNCTIONS",xi,f),o(I,10,"FUNCTION_PARSERS",ui,f),q(I,f),G(I,3,f),f.PREFIXED_PIVOT_COLUMNS=!0,f.LOG_DEFAULTS_TO_LN=!0,f.SUPPORTS_IMPLICIT_UNNEST=!0,f.JOINS_HAVE_EQUAL_PRECEDENCE=!0;var Ci,Li,Ui,yi,wi,Fi,bi,qi,Gi,L,A=class extends(Gi=V,qi=[E],bi=[E],Fi=[E],wi=[E],yi=[E],Ui=[E],Li=[E],Ci=[E],Gi){static get AFTER_HAVING_MODIFIER_TRANSFORMS(){let t=new Map([["qualify",V.AFTER_HAVING_MODIFIER_TRANSFORMS.get("qualify")],["windows",V.AFTER_HAVING_MODIFIER_TRANSFORMS.get("windows")],...super.AFTER_HAVING_MODIFIER_TRANSFORMS]);return["cluster","distribute","sort"].forEach(e=>t.delete(e)),t}static get NULL_ORDERING_SUPPORTED(){return"partial"}static get TS_OR_DS_TYPES(){return[z,_t,Y,Ce]}static get ORIGINAL_TRANSFORMS(){return new Map([...V.TRANSFORMS,[Mt,S("APPROX_TOP_COUNT")],[cn,S("APPROX_COUNT_DISTINCT")],[vt,we("MAX_BY")],[Bt,we("MIN_BY")],[U,Jn],[Yr,xa],[Kr,be],[Ur,be],[Ot,S("BIT_AND")],[gt,S("BIT_OR")],[Pt,S("BIT_XOR")],[ot,S("BIT_COUNT")],[Et,S("BYTE_LENGTH")],[Se,Zt([bn])],[Tr,function(t){return t.args.default?`DEFAULT COLLATE ${this.sql(t,"this")}`:`COLLATE ${this.sql(t,"this")}`}],[er,()=>"COMMIT TRANSACTION"],[fn,S("COUNTIF")],[Be,oa],[ae,Zt([pa])],[Tt,D("DATE","ADD")],[xe,function(t){return this.func("DATE_DIFF",[t.args.this,t.args.expression,Fe(t)])}],[_e,S("DATE")],[is,vn],[ue,D("DATE","SUB")],[le,D("DATETIME","ADD")],[fe,D("DATETIME","SUB")],[bt,S("DATE_FROM_UNIX_DATE")],[sr,function(t){return this.func("DATETIME",[this.func("TIMESTAMP",[t.args.this,t.args.zone]),"'UTC'"])}],[Ae,S("GENERATE_ARRAY")],[Wt,function(t){return ti.call(this,t,{funcName:"STRING_AGG",withinGroup:!1,sep:void 0})}],[Ts,function(t){return this.func("UPPER",[this.func("TO_HEX",[this.sql(t,"this")])])}],[Er,function(t){return this.hexStringSql(t,{binaryFunctionRepr:"FROM_HEX"})}],[cs,Hn("IF","NULL")],[dr,kn],[Ut,S("DIV")],[As,S("INT64")],[pt,S("BOOL")],[St,Ke],[W,Ke],[$,Ke],[j,function(t){return this.func(t.args.toJson?"TO_JSON":"TO_JSON_STRING",[t.args.this,...Array.isArray(t.args.options)?t.args.options:t.args.options?[t.args.options]:[]])}],[At,S("JSON_KEYS")],[B,S("JSON_VALUE_ARRAY")],[me,Ra],[Rn,Wn],[Oe,function(t){return this.func("TO_HEX",[this.func("MD5",[t.args.this])])}],[Z,S("MD5")],[In,Bn],[lt,function(t){return this.func(t.args.isCasefold?"NORMALIZE_AND_CASEFOLD":"NORMALIZE",[t.args.this,t.args.form])}],[oe,function(t){return`PARTITION BY ${this.sql(t,"this")}`}],[J,function(t){return this.func("REGEXP_EXTRACT",[t.args.this,t.args.expression,t.args.position,t.args.occurrence])}],[ft,function(t){return this.func("REGEXP_EXTRACT_ALL",[t.args.this,t.args.expression])}],[Ht,$n],[Pe,S("REGEXP_CONTAINS")],[Ee,aa],[rr,()=>"ROLLBACK TRANSACTION"],[ut,function(t){return this.func("PARSE_TIME",[this.formatTime(t),t.args.this])}],[xt,function(t){return this.func("PARSE_DATETIME",[this.formatTime(t),t.args.this])}],[K,Zt([Gn(),qn,Fn,Ea,Yn])],[Jt,S("SHA1")],[Rt,zn],[It,S("SHA1")],[Nt,Qn],[pe,function(t){return t.name==="IMMUTABLE"?"DETERMINISTIC":"NOT DETERMINISTIC"}],[Hr,S("STRING")],[Me,function(t){return Vn.call(this,t,{funcName:"INSTR",supportsPosition:!0,supportsOccurrence:!0})}],[Vt,ni],[De,ni],[vr,()=>"SESSION_USER()"],[Ie,D("TIME","ADD")],[ct,S("TIME")],[mt,S("DATETIME")],[Ne,D("TIME","SUB")],[he,D("TIMESTAMP","ADD")],[rs,S("TIMESTAMP_DIFF")],[Re,D("TIMESTAMP","SUB")],[tn,Xn],[tr,()=>"BEGIN TRANSACTION"],[rn,_a],[sn,da],[Y,S("TIME")],[z,S("DATETIME")],[_t,S("TIMESTAMP")],[dt,S("FROM_HEX")],[nn,S("UNIX_DATE")],[M,ma],[Qs,S("TIME_TO_UNIX")],[Xt,()=>"GENERATE_UUID()"],[Nr,ia],[Pn,S("VAR_POP")],[ht,S("SAFE_DIVIDE")]])}static get SUPPORTED_JSON_PATH_PARTS(){return new Set([hr,Rr,Ir])}static get TYPE_MAPPING(){return new Map([...V.TYPE_MAPPING,["bigdecimal","BIGNUMERIC"],["bigint","INT64"],["binary","BYTES"],["blob","BYTES"],["boolean","BOOL"],["char","STRING"],["decimal","NUMERIC"],["double","FLOAT64"],["float","FLOAT64"],["int","INT64"],["nchar","STRING"],["nvarchar","STRING"],["smallint","INT64"],["text","STRING"],["timestamp","DATETIME"],["timestampntz","DATETIME"],["timestamptz","TIMESTAMP"],["timestampltz","TIMESTAMP"],["tinyint","INT64"],["rowversion","BYTES"],["uuid","STRING"],["varbinary","BYTES"],["varchar","STRING"],["variant","ANY TYPE"]])}static get PROPERTIES_LOCATION(){return new Map([...V.PROPERTIES_LOCATION,[oe,"postSchema"],[cr,"unsupported"]])}static get RESERVED_KEYWORDS(){return new Set(["all","and","any","array","as","asc","assert_rows_modified","at","between","by","case","cast","collate","contains","create","cross","cube","current","default","define","desc","distinct","else","end","enum","escape","except","exclude","exists","extract","false","fetch","following","for","from","full","group","grouping","groups","hash","having","if","ignore","in","inner","intersect","interval","into","is","join","lateral","left","like","limit","lookup","merge","natural","new","no","not","null","nulls","of","on","or","order","outer","over","partition","preceding","proto","qualify","range","recursive","respect","right","rollup","rows","select","set","some","struct","tablesample","then","to","treat","true","unbounded","union","unnest","using","when","where","window","with","within"])}dateTruncSql(t){let e=t.unit,r=e?.isString?e.name:this.sql(e);return this.func("DATE_TRUNC",[t.args.this,r,t.args.zone])}modSql(t){let e=t.args.this,r=t.args.expression;return this.func("MOD",[e instanceof ce?e.unnest():e,r instanceof ce?r.unnest():r])}columnParts(t){if(t.meta?.quotedColumn){let e=t.parts.slice(0,-1).map(i=>i.name).join(".");return`${this.sql(new h({this:e,quoted:!0}))}.${this.sql(t,"this")}`}return super.columnParts(t)}tableParts(t){if(t.meta?.quotedTable){let e=t.parts.map(r=>r.name).join(".");return this.sql(new h({this:e,quoted:!0}))}return super.tableParts(t)}timeToStrSql(t){let e=t.args.this,r;e instanceof z?r="FORMAT_DATETIME":e instanceof _t?r="FORMAT_TIMESTAMP":e instanceof Y?r="FORMAT_TIME":r="FORMAT_DATE";let a=this._constructor.TS_OR_DS_TYPES.some(T=>e instanceof T)&&e?e:t;return this.func(r,[this.formatTime(t),g(a.args.this,"string",x),t.args.zone])}eqSql(t){return(t.left instanceof Te||t.right instanceof Te)&&!(t.parent instanceof ur)?"NULL":this.binary(t,"=")}atTimeZoneSql(t){let e=t.parent;return!(e instanceof Se)||!Le(e.args.to,"text")?this.func("TIMESTAMP",[this.func("DATETIME",[t.args.this,t.args.zone])]):super.atTimeZoneSql(t)}tryCastSql(t){return this.castSql(t,{safePrefix:"SAFE_"})}bracketSql(t){let e=t.args.this,r=t.args.expressions;if(r&&r.length===1&&e instanceof x&&e.isType("struct")){let T=r[0];if(T.type||(T=ee(T,{dialect:this.dialect})),T.type&&l.TEXT_TYPES.has(g(T.type,x)?.args.this))return`${this.sql(e)}.${T.name}`}let i=this.expressions(t,{flat:!0}),a=t.args.offset;return a===0?i=`OFFSET(${i})`:a===1?i=`ORDINAL(${i})`:a!==void 0&&this.unsupported(`Unsupported array offset: ${a}`),t.args.safe&&(i=`SAFE_${i}`),`${this.sql(e)}[${i}]`}inUnnestOp(t){return this.sql(t)}versionSql(t){return t.name==="TIMESTAMP"&&t.setArgKey("this","SYSTEM_TIME"),super.versionSql(t)}containsSql(t){let e=t.args.this,r=t.args.expression,i=e instanceof x||typeof e=="string"?e:void 0,a=r instanceof x||typeof r=="string"?r:void 0;if(i instanceof H&&a instanceof H){let T=i.args.this,u=a.args.this;i=T instanceof x||typeof T=="string"?T:i,a=u instanceof x||typeof u=="string"?u:a}return this.func("CONTAINS_SUBSTR",[i,a,t.args.jsonScope])}castSql(t,e={}){let{safePrefix:r}=e,i=t.args.this;if(i instanceof U){let a=p(i.args.expressions||[],0);if(!(a instanceof x&&a.find(st)))return`${this.sql(t,"to")}${this.sql(i)}`}return super.castSql(t,{safePrefix:r})}declareItemSql(t){let e=this.expressions(t,{key:"this"}),r=this.sql(t,"default");r=r?` DEFAULT ${r}`:"";let i=this.sql(t,"kind");return i=i?` ${i}`:"",`${e}${i}${r}`}};L=b(Gi),o(L,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",qi,A),o(L,10,"NULL_ORDERING_SUPPORTED",bi,A),o(L,10,"TS_OR_DS_TYPES",Fi,A),o(L,10,"ORIGINAL_TRANSFORMS",wi,A),o(L,10,"SUPPORTED_JSON_PATH_PARTS",yi,A),o(L,10,"TYPE_MAPPING",Ui,A),o(L,10,"PROPERTIES_LOCATION",Li,A),o(L,10,"RESERVED_KEYWORDS",Ci,A),q(L,A),G(L,3,A),A.SUPPORTS_DECODE_CASE=!1,A.TRY_SUPPORTED=!1,A.SUPPORTS_UESCAPE=!1,A.INTERVAL_ALLOWS_PLURAL_FORM=!1,A.JOIN_HINTS=!1,A.QUERY_HINTS=!1,A.TABLE_HINTS=!1,A.LIMIT_FETCH="LIMIT",A.RENAME_TABLE_WITH_DB=!1,A.NVL2_SUPPORTED=!1,A.UNNEST_WITH_ORDINALITY=!1,A.COLLATE_IS_FUNC=!0,A.LIMIT_ONLY_LITERALS=!0,A.SUPPORTS_TABLE_ALIAS_COLUMNS=!1,A.UNPIVOT_ALIASES_ARE_IDENTIFIERS=!1,A.JSON_KEY_VALUE_PAIR_SEP=",",A.IGNORE_NULLS_IN_FUNC=!0,A.JSON_PATH_SINGLE_QUOTE_ESCAPE=!0,A.CAN_IMPLEMENT_ARRAY_ANY=!0,A.SUPPORTS_TO_NUMBER=!1,A.NAMED_PLACEHOLDER_TOKEN="@",A.HEX_FUNC="TO_HEX",A.WITH_PROPERTIES_PREFIX="OPTIONS",A.SUPPORTS_EXPLODING_PROJECTIONS=!1,A.EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE=!1,A.SUPPORTS_UNIX_SECONDS=!0,A.SAFE_JSON_PATH_KEY_RE=/^[_\-a-zA-Z][\-\w]*$/;var Yi,Ki,He,rt=class extends(Ki=wn,Yi=[E],Ki){static get VAR_TOKENS(){return new Set(["dash","var"])}};He=b(Ki),o(He,10,"VAR_TOKENS",Yi,rt),q(He,rt),G(He,3,rt);var Hi,Ji,ki,Vi,Xi,vi,Bi,Wi,$i,ji,Zi,P,c=class extends(Zi=ye,ji=[E],$i=[E],Wi=[E],Bi=[E],vi=[E],Xi=[E],Vi=[E],ki=[E],Ji=[E],Hi=[E],Zi){static get DEFAULT_NULL_TYPE(){return"bigint"}static get NORMALIZATION_STRATEGY(){return"caseInsensitive"}static get NORMALIZE_FUNCTIONS(){return""}static get TIME_MAPPING(){return{"%x":"%m/%d/%y","%D":"%m/%d/%y","%E6S":"%S.%f","%e":"%-d","%F":"%Y-%m-%d","%T":"%H:%M:%S","%c":"%a %b %e %H:%M:%S %Y"}}static get INVERSE_TIME_MAPPING(){return{...super.INVERSE_TIME_MAPPING,"%H:%M:%S.%f":"%H:%M:%E6S"}}static get FORMAT_MAPPING(){return{DD:"%d",MM:"%m",MON:"%b",MONTH:"%B",YYYY:"%Y",YY:"%y",HH:"%I",HH12:"%I",HH24:"%H",MI:"%M",SS:"%S",SSSSS:"%f",TZH:"%z"}}static get PSEUDOCOLUMNS(){return new Set(["_PARTITIONTIME","_PARTITIONDATE","_TABLE_SUFFIX","_FILE_NAME","_DBT_MAX_PARTITION"])}static get SET_OP_DISTINCT_BY_DEFAULT(){return{}}static get COERCES_TO(){let t=new Map;for(let[e,r]of ve.COERCES_TO)t.set(e,new Set(r));t.set("bigdecimal",new Set(["double"])),t.get("decimal")?.add("bigdecimal"),t.get("bigint")?.add("bigdecimal"),t.has("varchar")||t.set("varchar",new Set);for(let e of["date","datetime","time","timestamp","timestamptz"])t.get("varchar")?.add(e);return t}static get EXPRESSION_METADATA(){return new Map(X.EXPRESSION_METADATA)}normalizeIdentifier(t){if(t instanceof h&&this.normalizationStrategy==="caseInsensitive"){let e=t.parent;for(;e instanceof it;)e=e.parent;return e instanceof We||e instanceof ne&&e.db&&(e.meta.quotedTable||!e.meta.maybeColumn)||t.meta.isTable||t.setArgKey("this",t.args.this.toLowerCase()),t}return super.normalizeIdentifier(t)}};P=b(Zi),o(P,10,"DEFAULT_NULL_TYPE",ji,c),o(P,10,"NORMALIZATION_STRATEGY",$i,c),o(P,10,"NORMALIZE_FUNCTIONS",Wi,c),o(P,10,"TIME_MAPPING",Bi,c),o(P,10,"INVERSE_TIME_MAPPING",vi,c),o(P,10,"FORMAT_MAPPING",Xi,c),o(P,10,"PSEUDOCOLUMNS",Vi,c),o(P,10,"SET_OP_DISTINCT_BY_DEFAULT",ki,c),o(P,10,"COERCES_TO",Ji,c),o(P,10,"EXPRESSION_METADATA",Hi,c),q(P,c),G(P,3,c),c.DIALECT_NAME="bigquery",c.WEEK_OFFSET=-1,c.UNNEST_COLUMN_ONLY=!0,c.SUPPORTS_USER_DEFINED_TYPES=!1,c.SUPPORTS_SEMI_ANTI_JOIN=!1,c.LOG_BASE_FIRST=!1,c.HEX_LOWERCASE=!0,c.FORCE_EARLY_ALIAS_REF_EXPANSION=!0,c.EXPAND_ONLY_GROUP_ALIAS_REF=!0,c.PRESERVE_ORIGINAL_NAMES=!0,c.HEX_STRING_IS_INTEGER_TYPE=!0,c.BYTE_STRING_IS_BYTES_TYPE=!0,c.UUID_IS_STRING_TYPE=!0,c.ANNOTATE_ALL_SCOPES=!0,c.PROJECTION_ALIASES_SHADOW_SOURCE_NAMES=!0,c.TABLES_REFERENCEABLE_AS_COLUMNS=!0,c.SUPPORTS_STRUCT_STAR_EXPANSION=!0,c.EXCLUDES_PSEUDOCOLUMNS_FROM_STAR=!0,c.QUERY_RESULTS_ARE_STRUCTS=!0,c.JSON_EXTRACT_SCALAR_SCALAR_ONLY=!0,c.LEAST_GREATEST_IGNORES_NULLS=!1,c.PRIORITIZE_NON_LITERAL_TYPES=!0,c.INITCAP_DEFAULT_DELIMITER_CHARS=`
2
+ \r\f\v\\[\\](){}/|<>!?@"^#$&~_,.:;*%+\\-`,c.Tokenizer=Je,c.Parser=f,c.Generator=A,c.JsonPathTokenizer=rt;ye.register("bigquery",c);export{c as BigQuery,A as BigQueryGenerator,rt as BigQueryJsonPathTokenizer,f as BigQueryParser,Je as BigQueryTokenizer,xa as arrayContainsSql,Na as buildContainsSubstring,Aa as buildDate,ha as buildDateDiff,fa as buildDatetime,et as buildExtractJsonWithDefaultPath,ua as buildJsonStripNulls,Ia as buildLevenshtein,Ta as buildParseTimestamp,Ye as buildRegexpExtract,la as buildTime,ca as buildTimestamp,Sa as buildToHex,Ra as levenshteinSql,pa as pushdownCteColumnNames};
3
+ //# sourceMappingURL=bigquery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/typing/bigquery.ts","../../src/dialects/bigquery.ts"],"sourcesContent":["import {\n DataTypeExpr, Expression, SelectExpr, SetOperationExpr, ColumnDefExpr, QueryExpr,\n ApproxTopKExpr, ApproxTopSumExpr, ArrayExpr, ConcatExpr, AvgExpr, CeilExpr,\n ExpExpr, FloorExpr, LnExpr, LogExpr, RoundExpr, SqrtExpr, ArgMaxExpr,\n ArgMinExpr, DateAddExpr, DateTruncExpr, DatetimeTruncExpr, FirstValueExpr,\n GroupConcatExpr, IgnoreNullsExpr, JsonExtractExpr, LeadExpr, LeftExpr,\n LowerExpr, NetFuncExpr, NthValueExpr, PadExpr, PercentileDiscExpr,\n RegexpExtractExpr, RegexpReplaceExpr, RepeatExpr, ReplaceExpr, RespectNullsExpr,\n ReverseExpr, RightExpr, SafeFuncExpr, SafeNegateExpr, SignExpr, SubstringExpr,\n TimestampTruncExpr, TranslateExpr, TrimExpr, UpperExpr, BitwiseAndAggExpr,\n BitwiseCountExpr, BitwiseOrAggExpr, BitwiseXorAggExpr, ByteLengthExpr,\n DenseRankExpr, FarmFingerprintExpr, GroupingExpr, LaxInt64Expr, LengthExpr,\n NtileExpr, RankExpr, RangeBucketExpr, RegexpInstrExpr, RowNumberExpr,\n ByteStringExpr, CodePointsToBytesExpr, Md5DigestExpr, ShaExpr, Sha2Expr,\n Sha1DigestExpr, Sha2DigestExpr, UnhexExpr, JsonBoolExpr, LaxBoolExpr,\n ParseDatetimeExpr, TimestampFromPartsExpr, Atan2Expr, CorrExpr, CosineDistanceExpr,\n CothExpr, CovarPopExpr, CovarSampExpr, CscExpr, CschExpr, CumeDistExpr,\n EuclideanDistanceExpr, Float64Expr, LaxFloat64Expr, PercentRankExpr, RandExpr,\n SecExpr, SechExpr, JsonArrayExpr, JsonArrayAppendExpr, JsonArrayInsertExpr,\n JsonObjectExpr, JsonRemoveExpr, JsonSetExpr, JsonStripNullsExpr, ParseTimeExpr,\n TimeFromPartsExpr, TimeTruncExpr, TsOrDsToTimeExpr, CodePointsToStringExpr,\n FormatExpr, HostExpr, JsonExtractScalarExpr, JsonTypeExpr, LaxStringExpr,\n LowerHexExpr, NormalizeExpr, RegDomainExpr, SafeConvertBytesToStringExpr,\n SoundexExpr, UuidExpr, PercentileContExpr, SafeAddExpr, SafeDivideExpr,\n SafeMultiplyExpr, SafeSubtractExpr, ApproxQuantilesExpr, JsonExtractArrayExpr,\n RegexpExtractAllExpr, SplitExpr, DateFromUnixDateExpr, GenerateTimestampArrayExpr,\n JsonFormatExpr, JsonKeysAtDepthExpr, JsonValueArrayExpr, LagExpr, ParseBignumericExpr,\n ParseNumericExpr, ToCodePointsExpr,\n} from '../expressions/expressions';\nimport {\n DataTypeExprKind,\n} from '../expressions/types';\nimport {\n cache, isInstanceOf,\n} from '../port_internals';\nimport type {\n TypeAnnotator,\n} from '../optimizer';\nimport {\n DialectTyping,\n} from './dialect';\nimport type {\n ExpressionMetadata,\n} from './dialect';\n\n/**\n * Many BigQuery math functions such as CEIL, FLOOR etc follow this return type convention.\n */\nfunction annotateMathFunctions (this: TypeAnnotator, expression: Expression): Expression {\n const thisArg = expression.args.this;\n if (!isInstanceOf(thisArg, Expression)) return expression;\n const thisType = thisArg.type;\n this.setType(\n expression,\n thisArg.isType(DataTypeExpr.INTEGER_TYPES)\n ? DataTypeExprKind.DOUBLE\n : isInstanceOf(thisType, DataTypeExpr) ? thisType : undefined,\n );\n return expression;\n}\n\nfunction annotateSafeDivide (this: TypeAnnotator, expression: SafeDivideExpr): Expression {\n const thisArg = expression.args.this;\n const exprArg = expression.args.expression;\n if (\n isInstanceOf(thisArg, Expression)\n && isInstanceOf(exprArg, Expression)\n && thisArg.isType(DataTypeExpr.INTEGER_TYPES)\n && exprArg.isType(DataTypeExpr.INTEGER_TYPES)\n ) {\n return this.setType(expression, DataTypeExprKind.DOUBLE);\n }\n\n return annotateByArgsWithCoerce.call(this, expression);\n}\n\nfunction annotateByArgsWithCoerce (this: TypeAnnotator, expression: Expression): Expression {\n const thisArg = expression.args.this;\n const exprArg = expression.args.expression;\n const thisType = isInstanceOf(thisArg, Expression) ? thisArg.type : undefined;\n const exprType = isInstanceOf(exprArg, Expression) ? exprArg.type : undefined;\n this.setType(\n expression,\n this.maybeCoerce(\n isInstanceOf(thisType, DataTypeExpr) ? thisType : undefined,\n isInstanceOf(exprType, DataTypeExpr) ? exprType : undefined,\n ),\n );\n return expression;\n}\n\nfunction annotateByArgsApproxTop (\n this: TypeAnnotator,\n expression: ApproxTopKExpr | ApproxTopSumExpr,\n): Expression {\n const thisArg = expression.args.this;\n const thisType = isInstanceOf(thisArg, Expression) ? thisArg.type : undefined;\n const valueTypeExpr = isInstanceOf(thisType, DataTypeExpr)\n ? thisType\n : new DataTypeExpr({\n this: DataTypeExprKind.UNKNOWN,\n });\n\n const structType = new DataTypeExpr({\n this: DataTypeExprKind.STRUCT,\n expressions: [\n valueTypeExpr,\n new DataTypeExpr({\n this: DataTypeExprKind.BIGINT,\n }),\n ],\n nested: true,\n });\n\n this.setType(\n expression,\n new DataTypeExpr({\n this: DataTypeExprKind.ARRAY,\n expressions: [\n structType,\n ],\n nested: true,\n }),\n );\n\n return expression;\n}\n\nfunction annotateConcat (annotator: TypeAnnotator, expression: ConcatExpr): ConcatExpr {\n annotator.annotateByArgs(expression, [\n 'expressions',\n ]);\n\n // Args must be BYTES or types that can be cast to STRING, return type is either BYTES or STRING\n if (!expression.isType([\n DataTypeExprKind.BINARY,\n DataTypeExprKind.UNKNOWN,\n ])) {\n annotator.setType(expression, DataTypeExprKind.VARCHAR);\n }\n\n return expression;\n}\n\nfunction annotateArray (annotator: TypeAnnotator, expression: ArrayExpr): ArrayExpr {\n const arrayArgs = expression.args.expressions;\n\n if (arrayArgs && arrayArgs.length === 1) {\n const firstArg = arrayArgs[0];\n if (!isInstanceOf(firstArg, Expression)) {\n return expression;\n }\n const unnested = firstArg.unnest();\n let projectionType: DataTypeExpr | string | undefined;\n\n // Handle ARRAY(SELECT ...) - single SELECT query\n if (unnested instanceof SelectExpr) {\n const queryTypeRaw = unnested.meta?.queryType;\n const queryType = isInstanceOf(queryTypeRaw, DataTypeExpr) ? queryTypeRaw : undefined;\n if (\n queryType\n && queryType.isType(DataTypeExprKind.STRUCT)\n && queryType.args.expressions?.length === 1\n ) {\n const colDef = queryType.args.expressions[0];\n if (isInstanceOf(colDef, ColumnDefExpr)) {\n const colKind: unknown = colDef.args.kind;\n if (isInstanceOf(colKind, DataTypeExpr) && !colKind.isType(DataTypeExprKind.UNKNOWN)) {\n projectionType = colKind;\n }\n }\n }\n } else if (unnested instanceof SetOperationExpr) {\n // Handle ARRAY(SELECT ... UNION ALL SELECT ...) - set operations\n const colTypes = annotator.getSetopColumnTypes(unnested);\n const left = unnested.left;\n if (colTypes && isInstanceOf(left, QueryExpr) && 0 < left.selects.length) {\n const firstColName = left.selects[0].aliasOrName;\n projectionType = colTypes[firstColName];\n }\n }\n\n // If we successfully determine a projection type and it's not UNKNOWN, wrap it in ARRAY\n if (\n projectionType\n && !(\n (projectionType instanceof DataTypeExpr && projectionType.isType(DataTypeExprKind.UNKNOWN))\n || projectionType === DataTypeExprKind.UNKNOWN\n )\n ) {\n const elementType =\n projectionType instanceof DataTypeExpr\n ? projectionType.copy()\n : new DataTypeExpr({\n this: projectionType,\n });\n\n const arrayType = new DataTypeExpr({\n this: DataTypeExprKind.ARRAY,\n expressions: [\n elementType,\n ],\n nested: true,\n });\n\n annotator.setType(expression, arrayType);\n return expression;\n }\n }\n\n annotator.annotateByArgs(expression, [\n 'expressions',\n ], {\n array: true,\n });\n return expression;\n}\n\nexport class BigQueryTyping {\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n const map: ExpressionMetadata = new Map(DialectTyping.EXPRESSION_METADATA);\n\n const extend = (types: (typeof Expression)[], data: Record<string, unknown>) => {\n for (const type of types) map.set(type, data);\n };\n\n // --- Type Returns ---\n extend([\n AvgExpr,\n CeilExpr,\n ExpExpr,\n FloorExpr,\n LnExpr,\n LogExpr,\n RoundExpr,\n SqrtExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => annotateMathFunctions.call(s, e),\n });\n\n extend([\n ArgMaxExpr,\n ArgMinExpr,\n DateAddExpr,\n DateTruncExpr,\n DatetimeTruncExpr,\n FirstValueExpr,\n GroupConcatExpr,\n IgnoreNullsExpr,\n JsonExtractExpr,\n LeadExpr,\n LeftExpr,\n LowerExpr,\n NetFuncExpr,\n NthValueExpr,\n PadExpr,\n PercentileDiscExpr,\n RegexpExtractExpr,\n RegexpReplaceExpr,\n RepeatExpr,\n ReplaceExpr,\n RespectNullsExpr,\n ReverseExpr,\n RightExpr,\n SafeFuncExpr,\n SafeNegateExpr,\n SignExpr,\n SubstringExpr,\n TimestampTruncExpr,\n TranslateExpr,\n TrimExpr,\n UpperExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => s.annotateByArgs(e, [\n 'this',\n ]),\n });\n\n extend([\n BitwiseAndAggExpr,\n BitwiseCountExpr,\n BitwiseOrAggExpr,\n BitwiseXorAggExpr,\n ByteLengthExpr,\n DenseRankExpr,\n FarmFingerprintExpr,\n GroupingExpr,\n LaxInt64Expr,\n LengthExpr,\n NtileExpr,\n RankExpr,\n RangeBucketExpr,\n RegexpInstrExpr,\n RowNumberExpr,\n ], {\n returns: DataTypeExprKind.BIGINT,\n });\n\n extend([\n ByteStringExpr,\n CodePointsToBytesExpr,\n Md5DigestExpr,\n ShaExpr,\n Sha2Expr,\n Sha1DigestExpr,\n Sha2DigestExpr,\n UnhexExpr,\n ], {\n returns: DataTypeExprKind.BINARY,\n });\n\n extend([\n JsonBoolExpr,\n LaxBoolExpr,\n ], {\n returns: DataTypeExprKind.BOOLEAN,\n });\n\n extend([\n ParseDatetimeExpr,\n TimestampFromPartsExpr,\n ], {\n returns: DataTypeExprKind.DATETIME,\n });\n\n extend([\n Atan2Expr,\n CorrExpr,\n CosineDistanceExpr,\n CothExpr,\n CovarPopExpr,\n CovarSampExpr,\n CscExpr,\n CschExpr,\n CumeDistExpr,\n EuclideanDistanceExpr,\n Float64Expr,\n LaxFloat64Expr,\n PercentRankExpr,\n RandExpr,\n SecExpr,\n SechExpr,\n ], {\n returns: DataTypeExprKind.DOUBLE,\n });\n\n extend([\n JsonArrayExpr,\n JsonArrayAppendExpr,\n JsonArrayInsertExpr,\n JsonObjectExpr,\n JsonRemoveExpr,\n JsonSetExpr,\n JsonStripNullsExpr,\n ], {\n returns: DataTypeExprKind.JSON,\n });\n\n extend([\n ParseTimeExpr,\n TimeFromPartsExpr,\n TimeTruncExpr,\n TsOrDsToTimeExpr,\n ], {\n returns: DataTypeExprKind.TIME,\n });\n\n extend([\n CodePointsToStringExpr,\n FormatExpr,\n HostExpr,\n JsonExtractScalarExpr,\n JsonTypeExpr,\n LaxStringExpr,\n LowerHexExpr,\n NormalizeExpr,\n RegDomainExpr,\n SafeConvertBytesToStringExpr,\n SoundexExpr,\n UuidExpr,\n ], {\n returns: DataTypeExprKind.VARCHAR,\n });\n\n extend([\n PercentileContExpr,\n SafeAddExpr,\n SafeDivideExpr,\n SafeMultiplyExpr,\n SafeSubtractExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => annotateByArgsWithCoerce.call(s, e),\n });\n\n extend([\n ApproxQuantilesExpr,\n JsonExtractArrayExpr,\n RegexpExtractAllExpr,\n SplitExpr,\n ], {\n annotator: (s: TypeAnnotator, e: Expression) => s.annotateByArgs(e, [\n 'this',\n ], {\n array: true,\n }),\n });\n\n DialectTyping.TIMESTAMP_EXPRESSIONS.forEach((type) => map.set(type, {\n returns: DataTypeExprKind.TIMESTAMPTZ,\n }));\n\n map.set(ApproxTopKExpr, {\n annotator: (s: TypeAnnotator, e: ApproxTopKExpr) => annotateByArgsApproxTop.call(s, e),\n });\n map.set(ApproxTopSumExpr, {\n annotator: (s: TypeAnnotator, e: ApproxTopSumExpr) => annotateByArgsApproxTop.call(s, e),\n });\n map.set(ArrayExpr, {\n annotator: annotateArray,\n });\n map.set(ConcatExpr, {\n annotator: annotateConcat,\n });\n map.set(DateFromUnixDateExpr, {\n returns: DataTypeExprKind.DATE,\n });\n\n map.set(GenerateTimestampArrayExpr, {\n annotator: (s: TypeAnnotator, e: GenerateTimestampArrayExpr) => s.setType(e, DataTypeExpr.build('ARRAY<TIMESTAMP>', {\n dialect: 'bigquery',\n })),\n });\n\n map.set(JsonFormatExpr, {\n annotator: (s: TypeAnnotator, e: JsonFormatExpr) => s.setType(e, e.args.toJson ? DataTypeExprKind.JSON : DataTypeExprKind.VARCHAR),\n });\n\n map.set(JsonKeysAtDepthExpr, {\n annotator: (s: TypeAnnotator, e: JsonKeysAtDepthExpr) => s.setType(e, DataTypeExpr.build('ARRAY<VARCHAR>', {\n dialect: 'bigquery',\n })),\n });\n\n map.set(JsonValueArrayExpr, {\n annotator: (s: TypeAnnotator, e: JsonValueArrayExpr) => s.setType(e, DataTypeExpr.build('ARRAY<VARCHAR>', {\n dialect: 'bigquery',\n })),\n });\n\n map.set(LagExpr, {\n annotator: (s: TypeAnnotator, e: LagExpr) => s.annotateByArgs(e, [\n 'this',\n 'default',\n ]),\n });\n map.set(ParseBignumericExpr, {\n returns: DataTypeExprKind.BIGDECIMAL,\n });\n map.set(ParseNumericExpr, {\n returns: DataTypeExprKind.DECIMAL,\n });\n map.set(SafeDivideExpr, {\n annotator: (s: TypeAnnotator, e: SafeDivideExpr) => annotateSafeDivide.call(s, e),\n });\n\n map.set(ToCodePointsExpr, {\n annotator: (s: TypeAnnotator, e: ToCodePointsExpr) => s.setType(e, DataTypeExpr.build('ARRAY<BIGINT>', {\n dialect: 'bigquery',\n })),\n });\n\n return map;\n }\n}\n","import {\n Generator, unsupportedArgs,\n} from '../generator';\nimport {\n buildExtractJsonWithPath, Parser,\n} from '../parser';\nimport type {\n TokenPair,\n} from '../tokens';\nimport {\n Token,\n Tokenizer, TokenType,\n} from '../tokens';\nimport type {\n ExpressionKey,\n CommandExpr,\n JsonObjectExpr,\n JsonObjectAggExpr,\n ModExpr,\n VersionExpr,\n EqExpr,\n AtTimeZoneExpr,\n TryCastExpr,\n DeclareItemExpr,\n} from '../expressions';\nimport {\n ValuesExpr,\n CreateExpr,\n HexExpr,\n ArrayContainsExpr,\n TsOrDsAddExpr,\n TsOrDsDiffExpr,\n FuncExpr,\n NetFuncExpr,\n SafeFuncExpr,\n Expression,\n TupleExpr,\n StructExpr,\n TableAliasExpr,\n UnnestExpr,\n ArrayExpr,\n ReturnsPropertyExpr,\n SchemaExpr,\n SubqueryExpr,\n LiteralExpr,\n SelectExpr,\n DateFromPartsExpr,\n TsOrDsToTimeExpr,\n TsOrDsToDatetimeExpr,\n DateDiffExpr,\n CurrentDatetimeExpr,\n StabilityPropertyExpr,\n ApproxTopKExpr,\n ApproxDistinctExpr,\n ArgMaxExpr,\n ArgMinExpr,\n BitwiseAndAggExpr,\n BitwiseOrAggExpr,\n BitwiseXorAggExpr,\n BitwiseCountExpr,\n ByteLengthExpr,\n CastExpr,\n CountIfExpr,\n DateAddExpr,\n DateSubExpr,\n DatetimeAddExpr,\n DatetimeSubExpr,\n DateFromUnixDateExpr,\n GenerateSeriesExpr,\n GroupConcatExpr,\n IfExpr,\n IntDivExpr,\n MaxExpr,\n MinExpr,\n RegexpLikeExpr,\n TimeAddExpr,\n TimestampAddExpr,\n TimestampDiffExpr,\n TimeStrToTimeExpr,\n TsOrDsToTimestampExpr,\n UnhexExpr,\n UnixDateExpr,\n UuidExpr,\n VariancePopExpr,\n SafeDivideExpr,\n DataTypeExprKind,\n DateTruncExpr,\n BracketExpr,\n literal,\n PropertyEqExpr,\n toIdentifier,\n DateStrToDateExpr,\n ILikeExpr,\n JsonExtractExpr,\n JsonExtractArrayExpr,\n JsonExtractScalarExpr,\n ShaExpr,\n Sha2Expr,\n Sha1DigestExpr,\n Sha2DigestExpr,\n StrPositionExpr,\n Md5DigestExpr,\n JsonFormatExpr,\n JsonBoolExpr,\n TimeSubExpr,\n TimestampSubExpr,\n JsonArrayExpr,\n DateExpr,\n array,\n ArrayFilterExpr,\n ArrayRemoveExpr,\n CollatePropertyExpr,\n CommitExpr,\n RollbackExpr,\n TransactionExpr,\n FromTimeZoneExpr,\n HexStringExpr,\n Int64Expr,\n JsonKeysAtDepthExpr,\n JsonValueArrayExpr,\n LevenshteinExpr,\n LowerHexExpr,\n Md5Expr,\n NormalizeExpr,\n PartitionedByPropertyExpr,\n ParseDatetimeExpr,\n ParseTimeExpr,\n RegexpExtractExpr,\n RegexpExtractAllExpr,\n RegexpReplaceExpr,\n SessionUserExpr,\n SplitExpr,\n StrToDateExpr,\n StrToTimeExpr,\n TimestampExpr,\n TimeFromPartsExpr,\n TimestampFromPartsExpr,\n TsOrDsToDateExpr,\n UnixToTimeExpr,\n TimeToUnixExpr,\n LengthExpr,\n ContainsExpr,\n JsonStripNullsExpr,\n cast,\n func,\n KwargExpr,\n var_,\n LowerExpr,\n WeekStartExpr,\n TimeExpr,\n DatetimeExpr,\n TimeToStrExpr,\n ExistsExpr,\n ColumnExpr,\n alias,\n IdentifierExpr,\n CreateExprKind,\n DotExpr,\n TableExpr,\n UserDefinedFunctionExpr,\n MakeIntervalExpr,\n MlForecastExpr,\n PredictExpr,\n VectorSearchExpr,\n FeaturesAtTimeExpr,\n GenerateEmbeddingExpr,\n MlTranslateExpr,\n TranslateExpr,\n ForInExpr,\n ExportExpr,\n PropertiesExpr,\n AliasExpr,\n CteExpr,\n QueryExpr,\n VarExpr,\n JsonKeyValueExpr,\n isType,\n JsonPathKeyExpr,\n JsonPathRootExpr,\n JsonPathSubscriptExpr,\n VolatilePropertyExpr,\n PropertiesLocation,\n StringExpr,\n ParenExpr,\n NullExpr,\n UpdateExpr,\n DataTypeExpr,\n} from '../expressions';\nimport {\n annotateTypes, TypeAnnotator,\n} from '../optimizer/annotate_types';\nimport {\n BigQueryTyping,\n} from '../typing/bigquery';\nimport type {\n ExpressionMetadata,\n} from '../typing/dialect';\nimport {\n seqGet,\n splitNumWords,\n} from '../helper';\nimport {\n cache, filterInstanceOf, narrowInstanceOf,\n} from '../port_internals';\nimport {\n JsonPathTokenizer,\n} from '../jsonpath';\nimport {\n eliminateDistinctOn,\n eliminateSemiAndAntiJoins,\n explodeProjectionToUnnest,\n preprocess,\n unqualifyUnnest,\n removePrecisionParameterizedTypes,\n} from '../transforms';\nimport type {\n JsonExtractType,\n} from './dialect';\nimport {\n argMaxOrMinNoCount,\n dateAddIntervalSql,\n dateStrToDateSql,\n ifSql,\n inlineArrayUnlessQuery,\n maxOrGreatest,\n minOrLeast,\n noIlikeSql,\n buildDateDeltaWithInterval,\n sha256Sql,\n timeStrToTimeSql,\n unitToVar,\n strPositionSql,\n sha2DigestSql,\n Dialect, NormalizationStrategy, Dialects, NullOrderingSupported,\n groupConcatSql,\n renameFunc,\n binaryFromFunction,\n filterArrayUsingUnnest,\n tsOrDsAddCast,\n regexpReplaceSql,\n buildFormattedTime,\n NormalizeFunctions,\n} from './dialect';\n\nconst DQUOTES_ESCAPING_JSON_FUNCTIONS = [\n 'JSON_QUERY',\n 'JSON_VALUE',\n 'JSON_QUERY_ARRAY',\n];\n\nconst MAKE_INTERVAL_KWARGS = [\n 'year',\n 'month',\n 'day',\n 'hour',\n 'minute',\n 'second',\n];\n\nfunction derivedTableValuesToUnnest (this: Generator, expression: ValuesExpr): string {\n if (!expression.findAncestor(SelectExpr)) {\n return this.valuesSql(expression);\n }\n\n const structs: StructExpr[] = [\n ];\n const aliasExpr = expression.args.alias;\n for (const tup of expression.findAll(TupleExpr)) {\n const fieldAliases = filterInstanceOf(\n aliasExpr && aliasExpr.args.columns\n ? aliasExpr.args.columns\n : (Array.from({\n length: (tup.args.expressions || [\n ]).length,\n }, (_, i) => `_c${i}`)),\n 'string',\n IdentifierExpr,\n );\n const expressions = fieldAliases?.map((name, i) =>\n new PropertyEqExpr({\n this: toIdentifier(name),\n expression: (tup.args.expressions || [\n ])[i],\n }));\n structs.push(new StructExpr({\n expressions,\n }));\n }\n\n const aliasNameOnly = aliasExpr?.args.this\n ? new TableAliasExpr({\n columns: [\n aliasExpr.args.this,\n ],\n })\n : undefined;\n return this.unnestSql(\n new UnnestExpr({\n expressions: [\n array(...structs),\n ],\n alias: aliasNameOnly,\n }),\n );\n}\n\nfunction returnsPropertySql (this: Generator, expression: ReturnsPropertyExpr): string {\n let thisExpr: string | Expression | undefined = expression.args.this;\n if (thisExpr instanceof SchemaExpr) {\n thisExpr = `${this.sql(thisExpr, 'this')} <${this.expressions(thisExpr)}>`;\n } else {\n thisExpr = this.sql(thisExpr);\n }\n return `RETURNS ${thisExpr}`;\n}\n\nfunction createSql (this: Generator, expression: CreateExpr): string {\n const returns = expression.find(ReturnsPropertyExpr);\n if (expression.args.kind === CreateExprKind.FUNCTION && returns && returns.args.isTable) {\n expression.setArgKey('kind', 'TABLE FUNCTION');\n\n if (expression.args.expression instanceof SubqueryExpr || expression.args.expression instanceof LiteralExpr) {\n expression.setArgKey('expression', expression.args.expression.args.this);\n }\n }\n\n return this.createSql(expression);\n}\n\nfunction aliasOrderedGroup (expression: Expression): Expression {\n if (expression instanceof SelectExpr) {\n const group = expression.args.group;\n const order = expression.args.order;\n if (group && order) {\n const aliases: Record<string, IdentifierExpr> = {};\n\n for (const select of expression.selects) {\n const selectAlias = narrowInstanceOf(select.args.alias, IdentifierExpr);\n if (select instanceof AliasExpr && selectAlias) {\n aliases[select.args.this?.toString() ?? ''] = selectAlias;\n }\n }\n\n for (const grouped of group.args.expressions || [\n ]) {\n if (!(grouped instanceof Expression)) {\n continue;\n }\n\n // Skip integer literals (ordinal references)\n if (grouped.isInteger) {\n continue;\n }\n\n const alias = aliases[grouped.toString()];\n\n if (alias) {\n grouped.replace(new ColumnExpr({\n this: alias,\n }));\n }\n }\n }\n }\n return expression;\n}\n\n/**\n * BigQuery doesn't allow column names when defining a CTE (e.g. WITH x (a, b) AS...),\n * so we try to push them down into the inner SELECT statement (e.g. WITH x AS (SELECT ... AS a, ... AS b)).\n */\nexport function pushdownCteColumnNames (expression: Expression): Expression {\n if (!(expression instanceof CteExpr)) {\n return expression;\n }\n\n const alias = expression.args.alias;\n if (!alias) {\n return expression;\n }\n\n const columns = alias.getArgKey('columns');\n if (\n !Array.isArray(columns)\n || !columns.length\n ) {\n return expression;\n }\n const cteQuery = expression.args.this;\n\n if (!(cteQuery instanceof QueryExpr)) {\n return expression;\n }\n\n if (cteQuery.isStar) {\n console.warn(\n 'Can\\'t push down CTE column names for star queries. Run the query through'\n + ' the optimizer or use \\'qualify\\' to expand the star projections first.',\n );\n return expression;\n }\n\n // Remove the columns from the CTE definition: WITH x (a, b) -> WITH x\n alias.setArgKey('columns', undefined);\n\n const selects = cteQuery.selects;\n\n // Iterate through the aliases and the inner SELECTs simultaneously\n for (let i = 0; i < columns.length; i++) {\n if (selects.length <= i) break;\n\n const name = columns[i];\n const toReplace = selects[i];\n let selectContent = toReplace;\n\n if (toReplace instanceof AliasExpr && toReplace.args.this) {\n selectContent = toReplace.args.this;\n }\n\n // Inner aliases are shadowed by the CTE column names, so we replace the\n // entire projection with a new AliasExpr using the CTE's column name.\n toReplace.replace(\n new AliasExpr({\n this: selectContent,\n alias: narrowInstanceOf(name, 'string', Expression),\n }),\n );\n }\n\n return expression;\n}\n\n/**\n * Builds a StrToTime expression tailored for BigQuery's parsing format.\n */\nexport function buildParseTimestamp (args: Expression[]): StrToTimeExpr {\n const thisExpr = buildFormattedTime(StrToTimeExpr, {\n dialect: Dialects.BIGQUERY,\n })([\n seqGet(args, 1),\n seqGet(args, 0),\n ]);\n thisExpr.setArgKey('zone', seqGet(args, 2));\n return thisExpr;\n}\n\n/**\n * Builds a Timestamp expression ensuring with_tz is set to true.\n */\nexport function buildTimestamp (args: Expression[]): TimestampExpr {\n const timestamp = TimestampExpr.fromArgList(args);\n timestamp.setArgKey('withTz', true);\n return timestamp;\n}\n\n/**\n * Chooses between Date and DateFromParts based on argument count.\n */\nexport function buildDate (args: Expression[]): DateExpr | DateFromPartsExpr {\n const exprType = args.length === 3 ? DateFromPartsExpr : DateExpr;\n return exprType.fromArgList(args) as DateExpr | DateFromPartsExpr;\n}\n\n/**\n * Simplifies TO_HEX(MD5(..)) structures commonly found in BigQuery\n * into a single MD5Expr for easier transpilation.\n */\nexport function buildToHex (args: Expression[]): HexExpr | Md5Expr | LowerHexExpr {\n const arg = seqGet(args, 0);\n\n if (arg instanceof Md5DigestExpr) {\n return new Md5Expr({\n this: arg.args.this,\n });\n }\n\n return new LowerHexExpr({\n this: arg,\n });\n}\n\n/**\n * Builds JSONStripNulls and safely maps kwargs to their specific properties.\n */\nexport function buildJsonStripNulls (args: Expression[]): JsonStripNullsExpr {\n const expression = new JsonStripNullsExpr({\n this: args[0],\n });\n\n for (const arg of args.slice(1)) {\n if (arg instanceof KwargExpr) {\n const kwargName = arg.args.this?.name.toLowerCase();\n if (kwargName !== undefined) {\n expression.setArgKey(kwargName, arg);\n }\n } else {\n expression.setArgKey('expression', arg);\n }\n }\n\n return expression;\n}\n\n/**\n * Converts BigQuery's ARRAY_CONTAINS logic into a universally compatible\n * EXISTS(SELECT 1 FROM UNNEST(...) ...) subquery structure.\n */\nexport function arrayContainsSql (this: Generator, expression: ArrayContainsExpr): string {\n const select = new SelectExpr({\n expressions: [\n new IdentifierExpr({\n this: '1',\n }),\n ],\n })\n .from(\n new UnnestExpr({\n expressions: filterInstanceOf([\n expression.left,\n ], Expression),\n })\n .as('_unnest', {\n table: [\n '_col',\n ],\n }),\n )\n .where(\n new ColumnExpr({\n this: '_col',\n }).eq(expression.right),\n );\n\n const exists = new ExistsExpr({\n this: select,\n });\n\n return this.sql(exists);\n}\n\nexport function buildTime (args: Expression[]): Expression {\n if (args.length === 1) {\n return new TsOrDsToTimeExpr({\n this: args[0],\n });\n }\n if (args.length === 2) {\n return TimeExpr.fromArgList(args);\n }\n return TimeFromPartsExpr.fromArgList(args);\n}\n\nexport function buildDatetime (args: Expression[]): Expression {\n if (args.length === 1) {\n return TsOrDsToDatetimeExpr.fromArgList(args);\n }\n if (args.length === 2) {\n return DatetimeExpr.fromArgList(args);\n }\n return TimestampFromPartsExpr.fromArgList(args);\n}\n\nexport function buildDateDiff (args: Expression[]): DateDiffExpr {\n const expr = new DateDiffExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n unit: seqGet(args, 2),\n datePartBoundary: true,\n });\n\n // Normalize plain WEEK to WEEK(SUNDAY) to preserve the semantic in the AST to facilitate transpilation\n const unit = expr.args.unit;\n\n if (unit instanceof VarExpr && unit.name.toUpperCase() === 'WEEK') {\n expr.setArgKey('unit', new WeekStartExpr({\n this: new VarExpr({\n this: 'SUNDAY',\n }),\n }));\n }\n\n return expr;\n}\n\nexport function buildRegexpExtract<T extends Expression> (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exprType: new (args: any) => T,\n defaultGroup?: Expression,\n): (args: Expression[], options: {dialect: BigQuery}) => T {\n return (args: Expression[], {\n dialect,\n }: {dialect: BigQuery}): T => {\n let group = false;\n try {\n const pattern = args[1]?.name;\n const matches = pattern.match(/(^|[^\\\\])(\\\\\\\\)*\\((?!\\?)/g)?.length ?? 0;\n group = matches === 1;\n } catch {\n group = false;\n }\n\n // Default group is used for the transpilation of REGEXP_EXTRACT_ALL\n const kwargs: Record<string, unknown> = {\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n position: seqGet(args, 2),\n occurrence: seqGet(args, 3),\n group: group ? LiteralExpr.number(1) : defaultGroup,\n };\n\n if (exprType === RegexpExtractExpr as unknown) {\n kwargs.nullIfPosOverflow = dialect._constructor.REGEXP_EXTRACT_POSITION_OVERFLOW_RETURNS_NULL;\n }\n\n return new exprType(kwargs);\n };\n}\n\nexport function buildExtractJsonWithDefaultPath<T extends typeof Expression> (\n exprType: T,\n): (args: Expression[], options: {dialect: Dialect}) => InstanceType<T> {\n return (args: Expression[], options: {dialect: Dialect}): InstanceType<T> => {\n if (args.length === 1) {\n // The default value for the JSONPath is '$' i.e all of the data\n args.push(LiteralExpr.string('$'));\n }\n return buildExtractJsonWithPath(exprType)(args, options) as InstanceType<T>;\n };\n}\n\n/**\n * Maps Levenshtein distance to BigQuery's EDIT_DISTANCE function,\n * wrapping the 'max_dist' argument in a named Kwarg if present.\n */\nexport const levenshteinSql = function (this: Generator, expression: LevenshteinExpr) {\n unsupportedArgs.call(this, expression, 'insCost', 'delCost', 'subCost');\n let maxDist = expression.args.maxDist;\n\n if (maxDist) {\n maxDist = new KwargExpr({\n this: new VarExpr({\n this: 'max_distance',\n }),\n expression: maxDist,\n });\n }\n\n return this.func(\n 'EDIT_DISTANCE',\n [\n expression.args.this,\n expression.args.expression,\n maxDist,\n ],\n );\n};\n\n/**\n * Builder for Levenshtein expressions, extracting the max distance value\n * from the parsed argument list.\n */\nexport function buildLevenshtein (args: Expression[]): LevenshteinExpr {\n const maxDist = seqGet(args, 2);\n\n return new LevenshteinExpr({\n this: seqGet(args, 0),\n expression: seqGet(args, 1),\n maxDist: narrowInstanceOf(maxDist?.args.expression, Expression),\n });\n}\n\nfunction jsonExtractSql (this: Generator, expression: JsonExtractType): string {\n const name = expression.meta?.name || (expression._constructor as typeof FuncExpr).sqlName();\n const upper = typeof name === 'string' ? name.toUpperCase() : '';\n\n const dquoteEscaping = DQUOTES_ESCAPING_JSON_FUNCTIONS.includes(upper);\n\n if (dquoteEscaping) {\n (this as BigQueryGenerator).quoteJsonPathKeyUsingBrackets = false;\n }\n\n const sql = renameFunc(upper).call(this, expression);\n\n if (dquoteEscaping) {\n (this as BigQueryGenerator).quoteJsonPathKeyUsingBrackets = true;\n }\n\n return sql;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction buildFormatTime (exprType: new (args: any) => Expression): (args: Expression[]) => Expression {\n return (args: Expression[]) => {\n const formatted = buildFormattedTime(TimeToStrExpr, {\n dialect: Dialects.BIGQUERY,\n })(\n [\n new exprType({\n this: args[1],\n }),\n args[0],\n ],\n );\n formatted.setArgKey('zone', args[2]);\n return formatted;\n };\n}\n\n/**\n * Builds a Contains expression (typically for BigQuery's CONTAINS_SUBSTR).\n * Wraps operands in LOWER() to ensure case-insensitive transpilation to other dialects.\n */\nexport function buildContainsSubstring (args: Expression[]): ContainsExpr {\n // Lowercase the operands in case of transpilation, as ContainsExpr\n // is case-sensitive on other dialects\n const thisExpr = new LowerExpr({\n this: seqGet(args, 0),\n });\n const expr = new LowerExpr({\n this: seqGet(args, 1),\n });\n\n return new ContainsExpr({\n this: thisExpr,\n expression: expr,\n jsonScope: seqGet(args, 2),\n });\n}\n\nfunction strToDatetimeSql (this: Generator, expression: StrToDateExpr | StrToTimeExpr): string {\n const thisStr = this.sql(expression, 'this');\n const dtype = expression instanceof StrToDateExpr ? 'DATE' : 'TIMESTAMP';\n\n if (expression.args.safe) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dialectCls = (this as any).dialect._constructor;\n const fmt = this.formatTime(\n expression,\n dialectCls.INVERSE_FORMAT_MAPPING,\n dialectCls.INVERSE_FORMAT_TRIE,\n );\n return `SAFE_CAST(${thisStr} AS ${dtype} FORMAT ${fmt})`;\n }\n\n const fmt = this.formatTime(expression);\n return this.func(`PARSE_${dtype}`, [\n fmt,\n thisStr,\n expression.getArgKey('zone') as string | Expression | undefined,\n ]);\n}\n\nfunction tsOrDsAddSql (this: Generator, expression: TsOrDsAddExpr): string {\n return dateAddIntervalSql('DATE', 'ADD').call(this, tsOrDsAddCast(expression));\n}\n\nfunction tsOrDsDiffSql (this: Generator, expression: TsOrDsDiffExpr): string {\n expression.args.this?.replace(cast(expression.args.this, DataTypeExprKind.TIMESTAMP.toUpperCase()));\n expression.args.expression?.replace(cast(expression.args.expression, DataTypeExprKind.TIMESTAMP.toUpperCase()));\n const unit = unitToVar(expression);\n return this.func('DATE_DIFF', [\n expression.args.this,\n expression.args.expression,\n unit,\n ]);\n}\n\nfunction unixToTimeSql (this: Generator, expression: UnixToTimeExpr): string {\n const scale = expression.args.scale;\n const timestamp = expression.args.this;\n\n if (!scale || scale.name === UnixToTimeExpr.SECONDS.name) {\n return this.func('TIMESTAMP_SECONDS', [\n timestamp,\n ]);\n }\n if (scale.name === UnixToTimeExpr.MILLIS.name) {\n return this.func('TIMESTAMP_MILLIS', [\n timestamp,\n ]);\n }\n if (scale.name === UnixToTimeExpr.MICROS.name) {\n return this.func('TIMESTAMP_MICROS', [\n timestamp,\n ]);\n }\n\n const powExpr = func('POW', literal('10'), scale);\n const unixSeconds = cast(\n new IntDivExpr({\n this: timestamp,\n expression: powExpr,\n }),\n DataTypeExprKind.BIGINT,\n );\n return this.func('TIMESTAMP_SECONDS', [\n unixSeconds,\n ]);\n}\n\nexport class BigQueryTokenizer extends Tokenizer {\n @cache\n static get QUOTES (): TokenPair[] {\n return [\n '\\'',\n '\"',\n '\"\"\"',\n '\\'\\'\\'',\n ];\n }\n\n @cache\n static get COMMENTS (): TokenPair[] {\n return [\n '--',\n '#',\n [\n '/*',\n '*/',\n ],\n ];\n }\n\n @cache\n static get IDENTIFIERS () {\n return [\n '`',\n ];\n }\n\n @cache\n static get STRING_ESCAPES () {\n return [\n '\\\\',\n ];\n }\n\n @cache\n static get HEX_STRINGS (): TokenPair[] {\n return [\n [\n '0x',\n '',\n ],\n [\n '0X',\n '',\n ],\n ];\n }\n\n @cache\n static get BYTE_STRINGS (): TokenPair[] {\n return ([\n 'b',\n 'B',\n ] as const).flatMap((prefix) =>\n (BigQueryTokenizer.QUOTES as string[]).map((q): TokenPair => [\n prefix + q,\n q as string,\n ]));\n }\n\n @cache\n static get RAW_STRINGS (): TokenPair[] {\n return ([\n 'r',\n 'R',\n ] as const).flatMap((prefix) =>\n (BigQueryTokenizer.QUOTES as string[]).map((q): TokenPair => [\n prefix + q,\n q as string,\n ]));\n }\n\n static NESTED_COMMENTS = false;\n\n @cache\n static get ORIGINAL_KEYWORDS (): Record<string, TokenType> {\n const keywords: Record<string, TokenType> = {\n ...Tokenizer.KEYWORDS,\n 'ANY TYPE': TokenType.VARIANT,\n 'BEGIN': TokenType.COMMAND,\n 'BEGIN TRANSACTION': TokenType.BEGIN,\n 'BYTEINT': TokenType.INT,\n 'BYTES': TokenType.BINARY,\n 'CURRENT_DATETIME': TokenType.CURRENT_DATETIME,\n 'DATETIME': TokenType.TIMESTAMP,\n 'DECLARE': TokenType.DECLARE,\n 'ELSEIF': TokenType.COMMAND,\n 'EXCEPTION': TokenType.COMMAND,\n 'EXPORT': TokenType.EXPORT,\n 'FLOAT64': TokenType.DOUBLE,\n 'FOR SYSTEM_TIME': TokenType.TIMESTAMP_SNAPSHOT,\n 'LOOP': TokenType.COMMAND,\n 'MODEL': TokenType.MODEL,\n 'NOT DETERMINISTIC': TokenType.VOLATILE,\n 'RECORD': TokenType.STRUCT,\n 'REPEAT': TokenType.COMMAND,\n 'TIMESTAMP': TokenType.TIMESTAMPTZ,\n 'WHILE': TokenType.COMMAND,\n };\n delete keywords['DIV'];\n delete keywords['VALUES'];\n delete keywords['/*+'];\n return keywords;\n };\n}\n\nexport class BigQueryParser extends Parser {\n @cache\n static get ID_VAR_TOKENS (): Set<TokenType> {\n return (() => {\n const s = new Set([\n ...Parser.ID_VAR_TOKENS,\n TokenType.CURRENT_CATALOG,\n TokenType.GRANT,\n TokenType.STRAIGHT_JOIN,\n ]);\n s.delete(TokenType.ASC);\n s.delete(TokenType.DESC);\n return s;\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 [TokenType.CURRENT_DATETIME]: CurrentDatetimeExpr,\n };\n delete noParenFunctions[TokenType.LOCALTIME];\n delete noParenFunctions[TokenType.LOCALTIMESTAMP];\n return noParenFunctions;\n }\n\n static PREFIXED_PIVOT_COLUMNS = true;\n static LOG_DEFAULTS_TO_LN = true;\n static SUPPORTS_IMPLICIT_UNNEST = true;\n static JOINS_HAVE_EQUAL_PRECEDENCE = true;\n\n // BigQuery does not allow ASC/DESC to be used as an identifier, allows GRANT as an identifier\n\n @cache\n static get ALIAS_TOKENS (): Set<TokenType> {\n return (() => {\n const s = new Set([\n ...Parser.ALIAS_TOKENS,\n TokenType.GRANT,\n ]);\n s.delete(TokenType.ASC);\n s.delete(TokenType.DESC);\n return s;\n })();\n }\n\n @cache\n static get TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return (() => {\n const s = new Set([\n ...Parser.TABLE_ALIAS_TOKENS,\n TokenType.GRANT,\n TokenType.STRAIGHT_JOIN,\n ]);\n s.delete(TokenType.ASC);\n s.delete(TokenType.DESC);\n return s;\n })();\n }\n\n @cache\n static get COMMENT_TABLE_ALIAS_TOKENS (): Set<TokenType> {\n return (() => {\n const s = new Set([\n ...Parser.COMMENT_TABLE_ALIAS_TOKENS,\n TokenType.GRANT,\n ]);\n s.delete(TokenType.ASC);\n s.delete(TokenType.DESC);\n return s;\n })();\n }\n\n @cache\n static get UPDATE_ALIAS_TOKENS (): Set<TokenType> {\n return (() => {\n const s = new Set([\n ...Parser.UPDATE_ALIAS_TOKENS,\n TokenType.GRANT,\n ]);\n s.delete(TokenType.ASC);\n s.delete(TokenType.DESC);\n return s;\n })();\n }\n\n @cache\n static get NESTED_TYPE_TOKENS (): Set<TokenType> {\n return new Set([\n ...Parser.NESTED_TYPE_TOKENS,\n TokenType.TABLE,\n ]);\n }\n\n @cache\n static get PROPERTY_PARSERS (): Record<string, (this: Parser, ...args: unknown[]) => Expression | Expression[] | undefined> {\n return {\n ...Parser.PROPERTY_PARSERS,\n 'NOT DETERMINISTIC': function (this: Parser) {\n return this.expression(StabilityPropertyExpr, {\n this: LiteralExpr.string('VOLATILE'),\n });\n },\n 'OPTIONS': function (this: Parser) {\n return this.parseWithProperty();\n },\n };\n }\n\n @cache\n static get CONSTRAINT_PARSERS (): Partial<Record<string, (this: Parser, ...args: unknown[]) => Expression | Expression[] | undefined>> {\n return {\n ...Parser.CONSTRAINT_PARSERS,\n OPTIONS: function (this: Parser) {\n return this.expression(PropertiesExpr, {\n expressions: this.parseWithProperty(),\n });\n },\n };\n }\n\n @cache\n static get RANGE_PARSERS (): Partial<Record<TokenType, (this: Parser, this_: Expression) => Expression | undefined>> {\n return (() => {\n const m = {\n ...Parser.RANGE_PARSERS,\n };\n delete m[TokenType.OVERLAPS];\n return m;\n })();\n }\n\n @cache\n static get DASHED_TABLE_PART_FOLLOW_TOKENS (): Set<TokenType> {\n return new Set([\n TokenType.DOT,\n TokenType.L_PAREN,\n TokenType.R_PAREN,\n ]);\n }\n\n @cache\n static get STATEMENT_PARSERS (): Partial<Record<TokenType, (this: Parser) => Expression | undefined>> {\n return {\n ...Parser.STATEMENT_PARSERS,\n [TokenType.ELSE]: function (this: Parser) {\n return this.parseAsCommand((this as BigQueryParser).prev);\n },\n [TokenType.END]: function (this: Parser) {\n return this.parseAsCommand((this as BigQueryParser).prev);\n },\n [TokenType.FOR]: function (this: Parser) {\n return (this as BigQueryParser).parseForIn();\n },\n [TokenType.EXPORT]: function (this: Parser) {\n return (this as BigQueryParser).parseExportData();\n },\n [TokenType.DECLARE]: function (this: Parser) {\n return this.parseDeclare();\n },\n };\n }\n\n @cache\n static get BRACKET_OFFSETS (): Record<string, [number, boolean]> {\n return {\n OFFSET: [\n 0,\n false,\n ],\n ORDINAL: [\n 1,\n false,\n ],\n SAFE_OFFSET: [\n 0,\n true,\n ],\n SAFE_ORDINAL: [\n 1,\n true,\n ],\n };\n }\n\n @cache\n static get FUNCTIONS (): Record<string, (args: Expression[], options: {dialect: Dialect}) => Expression> {\n return (() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fns: Record<string, (args: Expression[], dialect: any) => Expression> = {\n ...Parser.FUNCTIONS,\n APPROX_TOP_COUNT: (args: unknown[]) => ApproxTopKExpr.fromArgList(args),\n BIT_AND: (args: unknown[]) => BitwiseAndAggExpr.fromArgList(args),\n BIT_OR: (args: unknown[]) => BitwiseOrAggExpr.fromArgList(args),\n BIT_XOR: (args: unknown[]) => BitwiseXorAggExpr.fromArgList(args),\n BIT_COUNT: (args: unknown[]) => BitwiseCountExpr.fromArgList(args),\n BOOL: (args: unknown[]) => JsonBoolExpr.fromArgList(args),\n CONTAINS_SUBSTR: buildContainsSubstring,\n DATE: buildDate,\n DATE_ADD: (args) => buildDateDeltaWithInterval(DateAddExpr)(args),\n DATE_DIFF: buildDateDiff,\n DATE_SUB: (args) => buildDateDeltaWithInterval(DateSubExpr)(args),\n DATE_TRUNC: (args) => new DateTruncExpr({\n unit: args[1],\n this: args[0],\n zone: seqGet(args, 2),\n }),\n DATETIME: buildDatetime,\n DATETIME_ADD: (args) => buildDateDeltaWithInterval(DatetimeAddExpr)(args),\n DATETIME_SUB: (args) => buildDateDeltaWithInterval(DatetimeSubExpr)(args),\n DIV: binaryFromFunction(IntDivExpr),\n EDIT_DISTANCE: buildLevenshtein,\n FORMAT_DATE: buildFormatTime(TsOrDsToDateExpr),\n GENERATE_ARRAY: (args: unknown[]) => GenerateSeriesExpr.fromArgList(args),\n JSON_EXTRACT_SCALAR: buildExtractJsonWithDefaultPath(JsonExtractScalarExpr),\n JSON_EXTRACT_ARRAY: buildExtractJsonWithDefaultPath(JsonExtractArrayExpr),\n JSON_EXTRACT_STRING_ARRAY: buildExtractJsonWithDefaultPath(JsonValueArrayExpr),\n JSON_KEYS: (args: unknown[]) => JsonKeysAtDepthExpr.fromArgList(args),\n JSON_QUERY: buildExtractJsonWithPath(JsonExtractExpr),\n JSON_QUERY_ARRAY: buildExtractJsonWithDefaultPath(JsonExtractArrayExpr),\n JSON_STRIP_NULLS: buildJsonStripNulls,\n JSON_VALUE: buildExtractJsonWithDefaultPath(JsonExtractScalarExpr),\n JSON_VALUE_ARRAY: buildExtractJsonWithDefaultPath(JsonValueArrayExpr),\n LENGTH: (args) => new LengthExpr({\n this: seqGet(args, 0),\n binary: true,\n }),\n MD5: (args: unknown[]) => Md5DigestExpr.fromArgList(args),\n SHA1: (args: unknown[]) => Sha1DigestExpr.fromArgList(args),\n NORMALIZE_AND_CASEFOLD: (args) => new NormalizeExpr({\n this: seqGet(args, 0),\n form: seqGet(args, 1),\n isCasefold: true,\n }),\n OCTET_LENGTH: (args: unknown[]) => ByteLengthExpr.fromArgList(args),\n TO_HEX: buildToHex,\n PARSE_DATE: (args) => buildFormattedTime(StrToDateExpr, {\n dialect: Dialects.BIGQUERY,\n })(\n [\n seqGet(args, 1),\n seqGet(args, 0),\n ],\n ),\n PARSE_TIME: (args) => buildFormattedTime(ParseTimeExpr, {\n dialect: Dialects.BIGQUERY,\n })(\n [\n seqGet(args, 1),\n seqGet(args, 0),\n ],\n ),\n PARSE_TIMESTAMP: buildParseTimestamp,\n PARSE_DATETIME: (args) => buildFormattedTime(ParseDatetimeExpr, {\n dialect: Dialects.BIGQUERY,\n })(\n [\n seqGet(args, 1),\n seqGet(args, 0),\n ],\n ),\n REGEXP_CONTAINS: (args: unknown[]) => RegexpLikeExpr.fromArgList(args),\n REGEXP_EXTRACT: buildRegexpExtract(RegexpExtractExpr),\n REGEXP_SUBSTR: buildRegexpExtract(RegexpExtractExpr),\n REGEXP_EXTRACT_ALL: buildRegexpExtract(RegexpExtractAllExpr, literal(0)),\n SHA256: (args) => new Sha2DigestExpr({\n this: seqGet(args, 0),\n length: literal(256),\n }),\n SHA512: (args) => new Sha2Expr({\n this: seqGet(args, 0),\n length: literal(512),\n }),\n SPLIT: (args) => new SplitExpr({\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split\n this: seqGet(args, 0),\n expression: seqGet(args, 1) || literal(','),\n }),\n STRPOS: (args: unknown[]) => StrPositionExpr.fromArgList(args),\n TIME: buildTime,\n TIME_ADD: (args) => buildDateDeltaWithInterval(TimeAddExpr)(args),\n TIME_SUB: (args) => buildDateDeltaWithInterval(TimeSubExpr)(args),\n TIMESTAMP: buildTimestamp,\n TIMESTAMP_ADD: (args) => buildDateDeltaWithInterval(TimestampAddExpr)(args),\n TIMESTAMP_SUB: (args) => buildDateDeltaWithInterval(TimestampSubExpr)(args),\n TIMESTAMP_MICROS: (args) => new UnixToTimeExpr({\n this: seqGet(args, 0),\n scale: UnixToTimeExpr.MICROS,\n }),\n TIMESTAMP_MILLIS: (args) => new UnixToTimeExpr({\n this: seqGet(args, 0),\n scale: UnixToTimeExpr.MILLIS,\n }),\n TIMESTAMP_SECONDS: (args) => new UnixToTimeExpr({\n this: seqGet(args, 0),\n }),\n TO_JSON: (args) => new JsonFormatExpr({\n this: seqGet(args, 0),\n options: seqGet(args, 1),\n toJson: true,\n }),\n TO_JSON_STRING: (args: unknown[]) => JsonFormatExpr.fromArgList(args),\n FORMAT_DATETIME: buildFormatTime(TsOrDsToDatetimeExpr),\n FORMAT_TIMESTAMP: buildFormatTime(TsOrDsToTimestampExpr),\n FORMAT_TIME: buildFormatTime(TsOrDsToTimeExpr),\n FROM_HEX: (args: unknown[]) => UnhexExpr.fromArgList(args),\n WEEK: (args) => new WeekStartExpr({\n this: var_(seqGet(args, 0)),\n }),\n };\n // Remove SEARCH to avoid parameter routing issues - let it fall back to Anonymous function\n delete fns['SEARCH'];\n return fns;\n })();\n }\n\n @cache\n static get FUNCTION_PARSERS (): Partial<Record<string, (this: Parser) => Expression | undefined>> {\n return (() => {\n const fps = {\n ...Parser.FUNCTION_PARSERS,\n ARRAY: function (this: Parser) {\n return this.expression(ArrayExpr, {\n expressions: [\n this.parseStatement(),\n ],\n structNameInheritance: true,\n });\n },\n JSON_ARRAY: function (this: Parser) {\n return this.expression(JsonArrayExpr, {\n expressions: this.parseCsv(() => this.parseBitwise()),\n });\n },\n MAKE_INTERVAL: function (this: Parser) {\n return (this as BigQueryParser).parseMakeInterval();\n },\n PREDICT: function (this: Parser) {\n return (this as BigQueryParser).parseMl(PredictExpr);\n },\n TRANSLATE: function (this: Parser) {\n return (this as BigQueryParser).parseTranslate();\n },\n FEATURES_AT_TIME: function (this: Parser) {\n return (this as BigQueryParser).parseFeaturesAtTime();\n },\n GENERATE_EMBEDDING: function (this: Parser) {\n return (this as BigQueryParser).parseMl(GenerateEmbeddingExpr);\n },\n GENERATE_TEXT_EMBEDDING: function (this: Parser) {\n return (this as BigQueryParser).parseMl(GenerateEmbeddingExpr, {\n isText: true,\n });\n },\n VECTOR_SEARCH: function (this: Parser) {\n return (this as BigQueryParser).parseVectorSearch();\n },\n FORECAST: function (this: Parser) {\n return (this as BigQueryParser).parseMl(MlForecastExpr);\n },\n };\n delete (fps as Record<string, unknown>)['TRIM'];\n return fps;\n })();\n }\n\n parseForIn (): ForInExpr | CommandExpr {\n const index = this.index;\n const thisExpr = this.parseRange();\n this.matchTextSeq('DO');\n if (this.match(TokenType.COMMAND)) {\n this.retreat(index);\n return this.parseAsCommand(this.prev)!;\n }\n return this.expression(ForInExpr, {\n this: thisExpr,\n expression: this.parseStatement(),\n });\n }\n\n parseExportData (): ExportExpr {\n this.matchTextSeq('DATA');\n return this.expression(ExportExpr, {\n connection: this.matchTextSeq('WITH') && this.matchTextSeq('CONNECTION') && this.parseTableParts(),\n options: this.parseProperties(),\n this: this.matchTextSeq('AS') && this.parseSelect(),\n });\n }\n\n parseMakeInterval (): MakeIntervalExpr {\n const expr = new MakeIntervalExpr({});\n for (const argKey of MAKE_INTERVAL_KWARGS) {\n const value = this.parseLambda();\n if (!value) break;\n\n // Non-named arguments are filled sequentially, (optionally) followed by named arguments\n // that can appear in any order e.g MAKE_INTERVAL(1, minute => 5, day => 2)\n const key = value instanceof KwargExpr ? value.args.this?.name : argKey;\n if (key !== undefined) {\n expr.setArgKey(key, value);\n }\n this.match(TokenType.COMMA);\n }\n return expr;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parseMl<T extends Expression> (exprType: new (args: any) => T, kwargs: Record<string, unknown> = {}): T {\n this.matchTextSeq('MODEL');\n const thisExpr = this.parseTable();\n this.match(TokenType.COMMA);\n this.matchTextSeq('TABLE');\n\n // Certain functions like ML.FORECAST require a STRUCT argument but not a TABLE/SELECT one\n const expression = !this.match(TokenType.STRUCT, {\n advance: false,\n })\n ? this.parseTable()\n : undefined;\n this.match(TokenType.COMMA);\n\n return this.expression(exprType, {\n this: thisExpr,\n expression,\n paramsStruct: this.parseBitwise(),\n ...kwargs,\n });\n }\n\n parseTranslate (): TranslateExpr | MlTranslateExpr {\n // Check if this is ML.TRANSLATE by looking at the preceding token\n const token = this.tokens[this.index - 4];\n if (token && token.text.toUpperCase() === 'ML') {\n return this.parseMl(MlTranslateExpr);\n }\n return TranslateExpr.fromArgList(this.parseFunctionArgs());\n }\n\n parseFeaturesAtTime (): FeaturesAtTimeExpr {\n this.match(TokenType.TABLE);\n const thisExpr = this.parseTable();\n const expr = this.expression(FeaturesAtTimeExpr, {\n this: thisExpr,\n });\n\n while (this.match(TokenType.COMMA)) {\n const arg = this.parseLambda();\n // Get the LHS of the Kwarg and set the arg to that value, e.g\n // \"num_rows => 1\" sets the expr's `num_rows` arg\n if (arg) {\n const kwargThis = (arg as KwargExpr).args.this;\n if (kwargThis) {\n expr.setArgKey(kwargThis.name, arg);\n }\n }\n }\n return expr;\n }\n\n parseVectorSearch (): VectorSearchExpr {\n this.match(TokenType.TABLE);\n const baseTable = this.parseTable();\n this.match(TokenType.COMMA);\n\n const columnToSearch = this.parseBitwise();\n this.match(TokenType.COMMA);\n\n this.match(TokenType.TABLE);\n const queryTable = this.parseTable();\n\n const expr = this.expression(VectorSearchExpr, {\n this: baseTable,\n columnToSearch,\n queryTable,\n });\n\n while (this.match(TokenType.COMMA)) {\n // query_column_to_search can be named argument or positional\n if (this.match(TokenType.STRING, {\n advance: false,\n })) {\n const queryColumn = this.parseString();\n expr.setArgKey('queryColumnToSearch', queryColumn);\n } else {\n const arg = this.parseLambda();\n if (arg instanceof KwargExpr && arg.args.this) {\n expr.setArgKey(arg.args.this.name, arg);\n }\n }\n }\n return expr;\n }\n\n parseTablePart (options: {schema?: boolean} = {}): Expression | undefined {\n const {\n schema = false,\n } = options;\n let thisNode = super.parseTablePart({\n schema,\n }) || this.parseNumber();\n\n if (!thisNode) return undefined;\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#table_names\n if (thisNode instanceof IdentifierExpr) {\n let tableName = thisNode.name;\n\n while (this.match(TokenType.DASH, {\n advance: false,\n }) && this.next) {\n const start = this.curr;\n\n while (\n this.isConnected()\n && !this.matchSet((this._constructor as typeof BigQueryParser).DASHED_TABLE_PART_FOLLOW_TOKENS, {\n advance: false,\n })\n ) {\n this.advance();\n }\n\n if (start === this.curr) {\n break;\n }\n\n tableName += this.findSql(start, this.prev);\n }\n\n thisNode = new IdentifierExpr({\n this: tableName,\n quoted: thisNode.args.quoted,\n }).updatePositions(thisNode);\n } else if (thisNode instanceof LiteralExpr) {\n let tableName = thisNode.name;\n\n if (this.isConnected() && this.parseVar({\n anyToken: true,\n })) {\n tableName += this.prev?.text;\n }\n\n thisNode = new IdentifierExpr({\n this: tableName,\n quoted: true,\n }).updatePositions(thisNode);\n }\n\n return thisNode;\n }\n\n parseTableParts (\n options: {\n schema?: boolean;\n isDbReference?: boolean;\n wildcard?: boolean;\n } = {},\n ): TableExpr {\n const {\n schema = false, isDbReference = false, wildcard: _wildcard = false,\n } = options;\n\n let table = super.parseTableParts({\n schema,\n isDbReference,\n wildcard: true,\n });\n\n // proj-1.db.tbl -- `1.` is tokenized as a float so we need to unravel it here\n if (!table.catalog) {\n if (table.db) {\n const previousDb = table.args.db;\n const parts = table.db.split('.');\n if (parts.length === 2 && !narrowInstanceOf(table.args.db, IdentifierExpr)?.quoted) {\n table.setArgKey(\n 'catalog',\n new IdentifierExpr({\n this: parts[0],\n }).updatePositions(previousDb),\n );\n table.setArgKey(\n 'db',\n new IdentifierExpr({\n this: parts[1],\n }).updatePositions(previousDb),\n );\n }\n } else {\n const previousThis = table.args.this;\n const parts = table.name.split('.');\n if (parts.length === 2 && !narrowInstanceOf(table.args.this, IdentifierExpr)?.quoted) {\n table.setArgKey(\n 'db',\n new IdentifierExpr({\n this: parts[0],\n }).updatePositions(narrowInstanceOf(previousThis, Token, Expression)),\n );\n table.setArgKey(\n 'this',\n new IdentifierExpr({\n this: parts[1],\n }).updatePositions(narrowInstanceOf(previousThis, Token, Expression)),\n );\n }\n }\n }\n\n let aliasExpr: IdentifierExpr | undefined = undefined;\n\n if (\n table.args.this instanceof IdentifierExpr\n && table.parts.some((p) => p.name.includes('.'))\n ) {\n aliasExpr = table.args.this;\n\n const joinedParts = table.parts.map((p) => p.name).join('.');\n const splitParts = splitNumWords(joinedParts, '.', 3);\n\n const [\n catalog,\n db,\n thisNode,\n ...rest\n ] = splitParts.map((p) =>\n toIdentifier(p, {\n quoted: true,\n }));\n\n [\n catalog,\n db,\n thisNode,\n ].forEach((part) => {\n if (part) part.updatePositions(narrowInstanceOf(table.args.this, Token, Expression));\n });\n\n let finalThis: Expression | undefined = thisNode;\n if (0 < rest.length && finalThis) {\n finalThis = DotExpr.build([\n finalThis,\n ...rest.map((e) => e ?? toIdentifier('', {\n quoted: true,\n })),\n ]);\n }\n\n table = new TableExpr({\n this: finalThis,\n db: db,\n catalog: catalog,\n pivots: table.args.pivots,\n });\n table.meta.quotedTable = true;\n }\n\n const tableParts = table.parts;\n const len = tableParts.length;\n if (1 < len && tableParts[len - 2].name.toUpperCase() === 'INFORMATION_SCHEMA') {\n alias(\n table,\n (aliasExpr || tableParts[len - 1]) as IdentifierExpr,\n {\n table: true,\n copy: false,\n },\n );\n\n const infoSchemaView = `${tableParts[len - 2].name}.${tableParts[len - 1].name}`;\n\n const newThis = new IdentifierExpr({\n this: infoSchemaView,\n quoted: true,\n }).updatePositions(undefined, {\n line: tableParts[len - 2].meta?.line as number,\n col: tableParts[len - 1].meta?.col as number,\n start: tableParts[len - 2].meta?.start as number,\n end: tableParts[len - 1].meta?.end as number,\n });\n\n table.setArgKey('this', newThis);\n table.setArgKey('db', seqGet(tableParts, -3));\n table.setArgKey('catalog', seqGet(tableParts, -4));\n }\n\n return table;\n }\n\n parseColumn (): Expression | undefined {\n let column = super.parseColumn();\n\n if (column instanceof ColumnExpr) {\n const parts = column.parts;\n\n if (parts.some((p) => p.name.includes('.'))) {\n const joinedParts = parts.map((p) => p.name).join('.');\n const splitParts = splitNumWords(joinedParts, '.', 4);\n\n const [\n catalog,\n db,\n table,\n thisNode,\n ...rest\n ] = splitParts.map((p) =>\n toIdentifier(p, {\n quoted: true,\n }));\n\n let finalThis: Expression = thisNode || toIdentifier('', {\n quoted: true,\n });\n if (0 < rest.length && finalThis) {\n finalThis = DotExpr.build([\n finalThis,\n ...rest.map((p) => p ?? toIdentifier('', {\n quoted: true,\n })),\n ]);\n }\n\n column = new ColumnExpr({\n this: finalThis,\n table: table,\n db: db,\n catalog: catalog,\n });\n column.meta.quotedColumn = true;\n }\n }\n\n return column;\n }\n\n parseJsonObject (options: {agg?: boolean} = {}): JsonObjectExpr | JsonObjectAggExpr {\n const {\n agg: _agg = false,\n } = options;\n const jsonObject = super.parseJsonObject();\n const arrayKvPair = seqGet(jsonObject.args.expressions || [\n ], 0);\n\n if (\n arrayKvPair instanceof Expression\n && arrayKvPair.args.this instanceof ArrayExpr\n && arrayKvPair.args.expression instanceof ArrayExpr\n ) {\n const keys = arrayKvPair.args.this.args.expressions;\n const values = arrayKvPair.args.expression.args.expressions;\n\n jsonObject.setArgKey(\n 'expressions',\n keys?.map((k, i) => new JsonKeyValueExpr({\n this: k,\n expression: values?.[i] || '',\n })),\n );\n }\n\n return jsonObject;\n }\n\n parseBracket (thisNode?: Expression): Expression | undefined {\n const bracket = super.parseBracket(thisNode);\n\n if (bracket instanceof ArrayExpr) {\n bracket.setArgKey('structNameInheritance', true);\n }\n\n if (thisNode === bracket) {\n return bracket;\n }\n\n if (bracket instanceof BracketExpr) {\n for (const expression of bracket.args.expressions ?? [\n ]) {\n const name = expression.name.toUpperCase();\n\n if (!(name in (this._constructor as typeof BigQueryParser).BRACKET_OFFSETS)) {\n break;\n }\n\n const [\n offset,\n safe,\n ] = (this._constructor as typeof BigQueryParser).BRACKET_OFFSETS[name];\n bracket.setArgKey('offset', offset);\n bracket.setArgKey('safe', safe);\n expression.replace(narrowInstanceOf(expression.args.expressions?.[0], Expression));\n }\n }\n\n return bracket;\n }\n\n parseUnnest (options: {withAlias?: boolean} = {}): UnnestExpr | undefined {\n const {\n withAlias = true,\n } = options;\n const unnest = super.parseUnnest({\n withAlias,\n }) as UnnestExpr | undefined;\n\n if (!unnest) {\n return undefined;\n }\n\n let unnestExpr = seqGet(unnest.args.expressions ?? [\n ], 0);\n if (unnestExpr instanceof Expression) {\n unnestExpr = annotateTypes(unnestExpr, {\n dialect: this.dialect,\n });\n\n // Unnesting a nested array (i.e array of structs) explodes the top-level struct fields\n if (\n unnestExpr.isType(DataTypeExprKind.ARRAY)\n && unnestExpr.type instanceof Expression\n && unnestExpr.type.args.expressions?.some((arrayElem) =>\n isType(arrayElem, DataTypeExprKind.STRUCT))\n ) {\n unnest.setArgKey('explodeArray', true);\n }\n }\n\n return unnest;\n }\n\n parseColumnOps (thisNode?: Expression): Expression | undefined {\n const funcIndex = this.index + 1;\n let result = super.parseColumnOps(thisNode);\n\n if (result instanceof DotExpr && result.args.expression instanceof FuncExpr) {\n const prefix = result.args.this instanceof Expression ? result.args.this.name.toUpperCase() : undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let FuncClass: (new (args: any) => Expression) | undefined = undefined;\n\n if (prefix === 'NET') {\n FuncClass = NetFuncExpr;\n } else if (prefix === 'SAFE') {\n FuncClass = SafeFuncExpr;\n }\n\n if (FuncClass) {\n // Retreat to try and parse a known function instead of an anonymous one\n this.retreat(funcIndex);\n result = new FuncClass({\n this: this.parseFunction({\n anyToken: true,\n }),\n });\n }\n }\n\n return result;\n }\n}\nexport class BigQueryGenerator extends Generator {\n // port from _Dialect metaclass logic\n @cache\n static get AFTER_HAVING_MODIFIER_TRANSFORMS () {\n const modifiers = new Map([\n [\n 'qualify',\n Generator.AFTER_HAVING_MODIFIER_TRANSFORMS.get('qualify')!,\n ],\n [\n 'windows',\n Generator.AFTER_HAVING_MODIFIER_TRANSFORMS.get('windows')!,\n ],\n ...super.AFTER_HAVING_MODIFIER_TRANSFORMS,\n ]);\n [\n 'cluster',\n 'distribute',\n 'sort',\n ].forEach((m) => modifiers.delete(m));\n return modifiers;\n }\n\n // port from _Dialect metaclass logic\n static SUPPORTS_DECODE_CASE = false;\n // port from _Dialect metaclass logic\n static TRY_SUPPORTED = false;\n // port from _Dialect metaclass logic\n static SUPPORTS_UESCAPE = false;\n static INTERVAL_ALLOWS_PLURAL_FORM = false;\n static JOIN_HINTS = false;\n static QUERY_HINTS = false;\n static TABLE_HINTS = false;\n static LIMIT_FETCH = 'LIMIT';\n static RENAME_TABLE_WITH_DB = false;\n static NVL2_SUPPORTED = false;\n static UNNEST_WITH_ORDINALITY = false;\n static COLLATE_IS_FUNC = true;\n static LIMIT_ONLY_LITERALS = true;\n static SUPPORTS_TABLE_ALIAS_COLUMNS = false;\n static UNPIVOT_ALIASES_ARE_IDENTIFIERS = false;\n static JSON_KEY_VALUE_PAIR_SEP = ',';\n @cache\n static get NULL_ORDERING_SUPPORTED () {\n return NullOrderingSupported.PARTIAL;\n }\n\n static IGNORE_NULLS_IN_FUNC = true;\n static JSON_PATH_SINGLE_QUOTE_ESCAPE = true;\n static CAN_IMPLEMENT_ARRAY_ANY = true;\n static SUPPORTS_TO_NUMBER = false;\n static NAMED_PLACEHOLDER_TOKEN = '@';\n static HEX_FUNC = 'TO_HEX';\n static WITH_PROPERTIES_PREFIX = 'OPTIONS';\n static SUPPORTS_EXPLODING_PROJECTIONS = false;\n static EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE = false;\n static SUPPORTS_UNIX_SECONDS = true;\n\n static SAFE_JSON_PATH_KEY_RE = /^[_\\-a-zA-Z][\\-\\w]*$/;\n\n @cache\n static get TS_OR_DS_TYPES () {\n return [\n TsOrDsToDatetimeExpr,\n TsOrDsToTimestampExpr,\n TsOrDsToTimeExpr,\n TsOrDsToDateExpr,\n ];\n }\n\n @cache\n static get ORIGINAL_TRANSFORMS () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new Map<typeof Expression, (this: Generator, e: any) => string>([\n ...Generator.TRANSFORMS,\n [\n ApproxTopKExpr,\n renameFunc('APPROX_TOP_COUNT'),\n ],\n [\n ApproxDistinctExpr,\n renameFunc('APPROX_COUNT_DISTINCT'),\n ],\n [\n ArgMaxExpr,\n argMaxOrMinNoCount('MAX_BY'),\n ],\n [\n ArgMinExpr,\n argMaxOrMinNoCount('MIN_BY'),\n ],\n [\n ArrayExpr,\n inlineArrayUnlessQuery,\n ],\n [\n ArrayContainsExpr,\n arrayContainsSql,\n ],\n [\n ArrayFilterExpr,\n filterArrayUsingUnnest,\n ],\n [\n ArrayRemoveExpr,\n filterArrayUsingUnnest,\n ],\n [\n BitwiseAndAggExpr,\n renameFunc('BIT_AND'),\n ],\n [\n BitwiseOrAggExpr,\n renameFunc('BIT_OR'),\n ],\n [\n BitwiseXorAggExpr,\n renameFunc('BIT_XOR'),\n ],\n [\n BitwiseCountExpr,\n renameFunc('BIT_COUNT'),\n ],\n [\n ByteLengthExpr,\n renameFunc('BYTE_LENGTH'),\n ],\n [\n CastExpr,\n preprocess([\n removePrecisionParameterizedTypes,\n ]),\n ],\n [\n CollatePropertyExpr,\n function (this: Generator, e: CollatePropertyExpr) {\n return e.args.default\n ? `DEFAULT COLLATE ${this.sql(e, 'this')}`\n : `COLLATE ${this.sql(e, 'this')}`;\n },\n ],\n [\n CommitExpr,\n () => 'COMMIT TRANSACTION',\n ],\n [\n CountIfExpr,\n renameFunc('COUNTIF'),\n ],\n [\n CreateExpr,\n createSql,\n ],\n [\n CteExpr,\n preprocess([\n pushdownCteColumnNames,\n ]),\n ],\n [\n DateAddExpr,\n dateAddIntervalSql('DATE', 'ADD'),\n ],\n [\n DateDiffExpr,\n function (this: Generator, e: DateDiffExpr) {\n return this.func('DATE_DIFF', [\n e.args.this,\n e.args.expression,\n unitToVar(e),\n ]);\n },\n ],\n [\n DateFromPartsExpr,\n renameFunc('DATE'),\n ],\n [\n DateStrToDateExpr,\n dateStrToDateSql,\n ],\n [\n DateSubExpr,\n dateAddIntervalSql('DATE', 'SUB'),\n ],\n [\n DatetimeAddExpr,\n dateAddIntervalSql('DATETIME', 'ADD'),\n ],\n [\n DatetimeSubExpr,\n dateAddIntervalSql('DATETIME', 'SUB'),\n ],\n [\n DateFromUnixDateExpr,\n renameFunc('DATE_FROM_UNIX_DATE'),\n ],\n [\n FromTimeZoneExpr,\n function (this: Generator, e: FromTimeZoneExpr) {\n return this.func(\n 'DATETIME',\n [\n this.func('TIMESTAMP', [\n e.args.this,\n e.args.zone,\n ]),\n '\\'UTC\\'',\n ],\n );\n },\n ],\n [\n GenerateSeriesExpr,\n renameFunc('GENERATE_ARRAY'),\n ],\n [\n GroupConcatExpr,\n function (this: Generator, e: GroupConcatExpr) {\n return groupConcatSql.call(this, e, {\n funcName: 'STRING_AGG',\n withinGroup: false,\n sep: undefined,\n });\n },\n ],\n [\n HexExpr,\n function (this: Generator, e: HexExpr) {\n return this.func('UPPER', [\n this.func('TO_HEX', [\n this.sql(e, 'this'),\n ]),\n ]);\n },\n ],\n [\n HexStringExpr,\n function (this: Generator, e: HexStringExpr) {\n return this.hexStringSql(e, {\n binaryFunctionRepr: 'FROM_HEX',\n });\n },\n ],\n [\n IfExpr,\n ifSql('IF', 'NULL'),\n ],\n [\n ILikeExpr,\n noIlikeSql,\n ],\n [\n IntDivExpr,\n renameFunc('DIV'),\n ],\n [\n Int64Expr,\n renameFunc('INT64'),\n ],\n [\n JsonBoolExpr,\n renameFunc('BOOL'),\n ],\n [\n JsonExtractExpr,\n jsonExtractSql,\n ],\n [\n JsonExtractArrayExpr,\n jsonExtractSql,\n ],\n [\n JsonExtractScalarExpr,\n jsonExtractSql,\n ],\n [\n JsonFormatExpr,\n function (this: Generator, e: JsonFormatExpr) {\n return this.func(\n e.args.toJson ? 'TO_JSON' : 'TO_JSON_STRING',\n [\n e.args.this,\n ...(Array.isArray(e.args.options)\n ? e.args.options\n : e.args.options\n ? [\n e.args.options,\n ]\n : [\n ]),\n ],\n );\n },\n ],\n [\n JsonKeysAtDepthExpr,\n renameFunc('JSON_KEYS'),\n ],\n [\n JsonValueArrayExpr,\n renameFunc('JSON_VALUE_ARRAY'),\n ],\n [\n LevenshteinExpr,\n levenshteinSql,\n ],\n [\n MaxExpr,\n maxOrGreatest,\n ],\n [\n Md5Expr,\n function (this: Generator, e: Md5Expr) {\n return this.func('TO_HEX', [\n this.func('MD5', [\n e.args.this,\n ]),\n ]);\n },\n ],\n [\n Md5DigestExpr,\n renameFunc('MD5'),\n ],\n [\n MinExpr,\n minOrLeast,\n ],\n [\n NormalizeExpr,\n function (this: Generator, e: NormalizeExpr) {\n return this.func(\n e.args.isCasefold ? 'NORMALIZE_AND_CASEFOLD' : 'NORMALIZE',\n [\n e.args.this,\n e.args.form,\n ],\n );\n },\n ],\n [\n PartitionedByPropertyExpr,\n function (this: Generator, e: PartitionedByPropertyExpr) {\n return `PARTITION BY ${this.sql(e, 'this')}`;\n },\n ],\n [\n RegexpExtractExpr,\n function (this: Generator, e: RegexpExtractExpr) {\n return this.func(\n 'REGEXP_EXTRACT',\n [\n e.args.this,\n e.args.expression,\n e.args.position,\n e.args.occurrence,\n ],\n );\n },\n ],\n [\n RegexpExtractAllExpr,\n function (this: Generator, e: RegexpExtractAllExpr) {\n return this.func('REGEXP_EXTRACT_ALL', [\n e.args.this,\n e.args.expression,\n ]);\n },\n ],\n [\n RegexpReplaceExpr,\n regexpReplaceSql,\n ],\n [\n RegexpLikeExpr,\n renameFunc('REGEXP_CONTAINS'),\n ],\n [\n ReturnsPropertyExpr,\n returnsPropertySql,\n ],\n [\n RollbackExpr,\n () => 'ROLLBACK TRANSACTION',\n ],\n [\n ParseTimeExpr,\n function (this: Generator, e: ParseTimeExpr) {\n return this.func('PARSE_TIME', [\n this.formatTime(e),\n e.args.this,\n ]);\n },\n ],\n [\n ParseDatetimeExpr,\n function (this: Generator, e: ParseDatetimeExpr) {\n return this.func('PARSE_DATETIME', [\n this.formatTime(e),\n e.args.this,\n ]);\n },\n ],\n [\n SelectExpr,\n preprocess([\n explodeProjectionToUnnest(),\n unqualifyUnnest,\n eliminateDistinctOn,\n aliasOrderedGroup,\n eliminateSemiAndAntiJoins,\n ]),\n ],\n [\n ShaExpr,\n renameFunc('SHA1'),\n ],\n [\n Sha2Expr,\n sha256Sql,\n ],\n [\n Sha1DigestExpr,\n renameFunc('SHA1'),\n ],\n [\n Sha2DigestExpr,\n sha2DigestSql,\n ],\n [\n StabilityPropertyExpr,\n function (this: Generator, e: StabilityPropertyExpr) {\n return e.name === 'IMMUTABLE' ? 'DETERMINISTIC' : 'NOT DETERMINISTIC';\n },\n ],\n [\n StringExpr,\n renameFunc('STRING'),\n ],\n [\n StrPositionExpr,\n function (this: Generator, e: StrPositionExpr) {\n return strPositionSql.call(this, e, {\n funcName: 'INSTR',\n supportsPosition: true,\n supportsOccurrence: true,\n });\n },\n ],\n [\n StrToDateExpr,\n strToDatetimeSql,\n ],\n [\n StrToTimeExpr,\n strToDatetimeSql,\n ],\n [\n SessionUserExpr,\n () => 'SESSION_USER()',\n ],\n [\n TimeAddExpr,\n dateAddIntervalSql('TIME', 'ADD'),\n ],\n [\n TimeFromPartsExpr,\n renameFunc('TIME'),\n ],\n [\n TimestampFromPartsExpr,\n renameFunc('DATETIME'),\n ],\n [\n TimeSubExpr,\n dateAddIntervalSql('TIME', 'SUB'),\n ],\n [\n TimestampAddExpr,\n dateAddIntervalSql('TIMESTAMP', 'ADD'),\n ],\n [\n TimestampDiffExpr,\n renameFunc('TIMESTAMP_DIFF'),\n ],\n [\n TimestampSubExpr,\n dateAddIntervalSql('TIMESTAMP', 'SUB'),\n ],\n [\n TimeStrToTimeExpr,\n timeStrToTimeSql,\n ],\n [\n TransactionExpr,\n () => 'BEGIN TRANSACTION',\n ],\n [\n TsOrDsAddExpr,\n tsOrDsAddSql,\n ],\n [\n TsOrDsDiffExpr,\n tsOrDsDiffSql,\n ],\n [\n TsOrDsToTimeExpr,\n renameFunc('TIME'),\n ],\n [\n TsOrDsToDatetimeExpr,\n renameFunc('DATETIME'),\n ],\n [\n TsOrDsToTimestampExpr,\n renameFunc('TIMESTAMP'),\n ],\n [\n UnhexExpr,\n renameFunc('FROM_HEX'),\n ],\n [\n UnixDateExpr,\n renameFunc('UNIX_DATE'),\n ],\n [\n UnixToTimeExpr,\n unixToTimeSql,\n ],\n [\n TimeToUnixExpr,\n renameFunc('TIME_TO_UNIX'),\n ],\n [\n UuidExpr,\n () => 'GENERATE_UUID()',\n ],\n [\n ValuesExpr,\n derivedTableValuesToUnnest,\n ],\n [\n VariancePopExpr,\n renameFunc('VAR_POP'),\n ],\n [\n SafeDivideExpr,\n renameFunc('SAFE_DIVIDE'),\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([\n ...Generator.TYPE_MAPPING,\n [\n DataTypeExprKind.BIGDECIMAL,\n 'BIGNUMERIC',\n ],\n [\n DataTypeExprKind.BIGINT,\n 'INT64',\n ],\n [\n DataTypeExprKind.BINARY,\n 'BYTES',\n ],\n [\n DataTypeExprKind.BLOB,\n 'BYTES',\n ],\n [\n DataTypeExprKind.BOOLEAN,\n 'BOOL',\n ],\n [\n DataTypeExprKind.CHAR,\n 'STRING',\n ],\n [\n DataTypeExprKind.DECIMAL,\n 'NUMERIC',\n ],\n [\n DataTypeExprKind.DOUBLE,\n 'FLOAT64',\n ],\n [\n DataTypeExprKind.FLOAT,\n 'FLOAT64',\n ],\n [\n DataTypeExprKind.INT,\n 'INT64',\n ],\n [\n DataTypeExprKind.NCHAR,\n 'STRING',\n ],\n [\n DataTypeExprKind.NVARCHAR,\n 'STRING',\n ],\n [\n DataTypeExprKind.SMALLINT,\n 'INT64',\n ],\n [\n DataTypeExprKind.TEXT,\n 'STRING',\n ],\n [\n DataTypeExprKind.TIMESTAMP,\n 'DATETIME',\n ],\n [\n DataTypeExprKind.TIMESTAMPNTZ,\n 'DATETIME',\n ],\n [\n DataTypeExprKind.TIMESTAMPTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TIMESTAMPLTZ,\n 'TIMESTAMP',\n ],\n [\n DataTypeExprKind.TINYINT,\n 'INT64',\n ],\n [\n DataTypeExprKind.ROWVERSION,\n 'BYTES',\n ],\n [\n DataTypeExprKind.UUID,\n 'STRING',\n ],\n [\n DataTypeExprKind.VARBINARY,\n 'BYTES',\n ],\n [\n DataTypeExprKind.VARCHAR,\n 'STRING',\n ],\n [\n DataTypeExprKind.VARIANT,\n 'ANY TYPE',\n ],\n ]);\n }\n\n @cache\n static get PROPERTIES_LOCATION () {\n return new Map([\n ...Generator.PROPERTIES_LOCATION,\n [\n PartitionedByPropertyExpr,\n PropertiesLocation.POST_SCHEMA,\n ],\n [\n VolatilePropertyExpr,\n PropertiesLocation.UNSUPPORTED,\n ],\n ]);\n }\n\n @cache\n static get RESERVED_KEYWORDS () {\n return new Set([\n 'all',\n 'and',\n 'any',\n 'array',\n 'as',\n 'asc',\n 'assert_rows_modified',\n 'at',\n 'between',\n 'by',\n 'case',\n 'cast',\n 'collate',\n 'contains',\n 'create',\n 'cross',\n 'cube',\n 'current',\n 'default',\n 'define',\n 'desc',\n 'distinct',\n 'else',\n 'end',\n 'enum',\n 'escape',\n 'except',\n 'exclude',\n 'exists',\n 'extract',\n 'false',\n 'fetch',\n 'following',\n 'for',\n 'from',\n 'full',\n 'group',\n 'grouping',\n 'groups',\n 'hash',\n 'having',\n 'if',\n 'ignore',\n 'in',\n 'inner',\n 'intersect',\n 'interval',\n 'into',\n 'is',\n 'join',\n 'lateral',\n 'left',\n 'like',\n 'limit',\n 'lookup',\n 'merge',\n 'natural',\n 'new',\n 'no',\n 'not',\n 'null',\n 'nulls',\n 'of',\n 'on',\n 'or',\n 'order',\n 'outer',\n 'over',\n 'partition',\n 'preceding',\n 'proto',\n 'qualify',\n 'range',\n 'recursive',\n 'respect',\n 'right',\n 'rollup',\n 'rows',\n 'select',\n 'set',\n 'some',\n 'struct',\n 'tablesample',\n 'then',\n 'to',\n 'treat',\n 'true',\n 'unbounded',\n 'union',\n 'unnest',\n 'using',\n 'when',\n 'where',\n 'window',\n 'with',\n 'within',\n ]);\n }\n\n dateTruncSql (expression: DateTruncExpr): string {\n const unit = expression.unit;\n const unitSql = unit?.isString ? unit.name : this.sql(unit);\n return this.func('DATE_TRUNC', [\n expression.args.this,\n unitSql,\n expression.args.zone,\n ]);\n }\n\n modSql (expression: ModExpr): string {\n const thisNode = expression.args.this;\n const expr = expression.args.expression;\n\n return this.func(\n 'MOD',\n [\n thisNode instanceof ParenExpr ? thisNode.unnest() : thisNode,\n expr instanceof ParenExpr ? expr.unnest() : expr,\n ],\n );\n }\n\n columnParts (expression: ColumnExpr): string {\n if (expression.meta?.quotedColumn) {\n // If a column reference is of the form `dataset.table`.name, we need\n // to preserve the quoted table path, otherwise the reference breaks\n const tableParts = expression.parts.slice(0, -1).map((p) => p.name)\n .join('.');\n const tablePath = this.sql(new IdentifierExpr({\n this: tableParts,\n quoted: true,\n }));\n return `${tablePath}.${this.sql(expression, 'this')}`;\n }\n\n return super.columnParts(expression);\n }\n\n tableParts (expression: TableExpr): string {\n // Depending on the context, `x.y` may not resolve to the same data source as `x`.`y`\n if (expression.meta?.quotedTable) {\n const tableParts = expression.parts.map((p) => p.name).join('.');\n return this.sql(new IdentifierExpr({\n this: tableParts,\n quoted: true,\n }));\n }\n\n return super.tableParts(expression);\n }\n\n timeToStrSql (expression: TimeToStrExpr): string {\n const thisNode = expression.args.this;\n let funcName: string;\n\n if (thisNode instanceof TsOrDsToDatetimeExpr) {\n funcName = 'FORMAT_DATETIME';\n } else if (thisNode instanceof TsOrDsToTimestampExpr) {\n funcName = 'FORMAT_TIMESTAMP';\n } else if (thisNode instanceof TsOrDsToTimeExpr) {\n funcName = 'FORMAT_TIME';\n } else {\n funcName = 'FORMAT_DATE';\n }\n\n const isTsOrDs = (this._constructor as typeof BigQueryGenerator).TS_OR_DS_TYPES.some(\n (type) => thisNode instanceof type,\n );\n\n const timeExpr = (isTsOrDs && thisNode) ? thisNode : expression;\n\n return this.func(\n funcName,\n [\n this.formatTime(expression),\n narrowInstanceOf(timeExpr.args.this, 'string', Expression),\n expression.args.zone,\n ],\n );\n }\n\n eqSql (expression: EqExpr): string {\n // Operands of = cannot be NULL in BigQuery\n if (expression.left instanceof NullExpr || expression.right instanceof NullExpr) {\n if (!(expression.parent instanceof UpdateExpr)) {\n return 'NULL';\n }\n }\n\n return this.binary(expression, '=');\n }\n\n atTimeZoneSql (expression: AtTimeZoneExpr): string {\n const parent = expression.parent;\n\n // BigQuery allows CAST(.. AS {STRING|TIMESTAMP} [FORMAT <fmt> [AT TIME ZONE <tz>]]).\n // Only the TIMESTAMP one should use the below conversion.\n if (\n !(parent instanceof CastExpr)\n || !isType(parent.args.to, 'text')\n ) {\n return this.func(\n 'TIMESTAMP',\n [\n this.func('DATETIME', [\n expression.args.this,\n expression.args.zone,\n ]),\n ],\n );\n }\n\n return super.atTimeZoneSql(expression);\n }\n\n tryCastSql (expression: TryCastExpr): string {\n return this.castSql(expression, {\n safePrefix: 'SAFE_',\n });\n }\n\n bracketSql (expression: BracketExpr): string {\n const thisNode = expression.args.this;\n const expressions = expression.args.expressions;\n\n if (expressions && expressions.length === 1 && thisNode instanceof Expression && thisNode.isType(DataTypeExprKind.STRUCT)) {\n let arg = expressions[0];\n if (!arg.type) {\n arg = annotateTypes(arg, {\n dialect: this.dialect,\n });\n }\n\n if (arg.type && DataTypeExpr.TEXT_TYPES.has(narrowInstanceOf(arg.type, Expression)?.args.this as DataTypeExprKind)) {\n // BQ doesn't support bracket syntax with string values for structs\n return `${this.sql(thisNode)}.${arg.name}`;\n }\n }\n\n let expressionsSql = this.expressions(expression, {\n flat: true,\n });\n const offset = expression.args.offset;\n\n if (offset === 0) {\n expressionsSql = `OFFSET(${expressionsSql})`;\n } else if (offset === 1) {\n expressionsSql = `ORDINAL(${expressionsSql})`;\n } else if (offset !== undefined) {\n this.unsupported(`Unsupported array offset: ${offset}`);\n }\n\n if (expression.args.safe) {\n expressionsSql = `SAFE_${expressionsSql}`;\n }\n\n return `${this.sql(thisNode)}[${expressionsSql}]`;\n }\n\n inUnnestOp (expression: UnnestExpr): string {\n return this.sql(expression);\n }\n\n versionSql (expression: VersionExpr): string {\n if (expression.name === 'TIMESTAMP') {\n expression.setArgKey('this', 'SYSTEM_TIME');\n }\n return super.versionSql(expression);\n }\n\n containsSql (expression: ContainsExpr): string {\n const _thisNode = expression.args.this;\n const _expr = expression.args.expression;\n let thisNode: string | Expression | undefined = (_thisNode instanceof Expression || typeof _thisNode === 'string') ? _thisNode : undefined;\n let expr: string | Expression | undefined = (_expr instanceof Expression || typeof _expr === 'string') ? _expr : undefined;\n\n if (thisNode instanceof LowerExpr && expr instanceof LowerExpr) {\n const tn = thisNode.args.this;\n const ex = expr.args.this;\n thisNode = (tn instanceof Expression || typeof tn === 'string') ? tn : thisNode;\n expr = (ex instanceof Expression || typeof ex === 'string') ? ex : expr;\n }\n\n return this.func('CONTAINS_SUBSTR', [\n thisNode,\n expr,\n expression.args.jsonScope,\n ]);\n }\n\n castSql (expression: CastExpr, options: {safePrefix?: string} = {}): string {\n const {\n safePrefix,\n } = options;\n const thisNode = expression.args.this;\n\n // This ensures that inline type-annotated ARRAY literals like ARRAY<INT64>[1, 2, 3]\n // are roundtripped unaffected. The inner check excludes ARRAY(SELECT ...) expressions.\n if (thisNode instanceof ArrayExpr) {\n const elem = seqGet(thisNode.args.expressions || [\n ], 0);\n if (!(elem instanceof Expression && elem.find(QueryExpr))) {\n return `${this.sql(expression, 'to')}${this.sql(thisNode)}`;\n }\n }\n\n return super.castSql(expression, {\n safePrefix,\n });\n }\n\n declareItemSql (expression: DeclareItemExpr): string {\n const variables = this.expressions(expression, {\n key: 'this',\n });\n\n let defaultValue = this.sql(expression, 'default');\n defaultValue = defaultValue ? ` DEFAULT ${defaultValue}` : '';\n\n let kind = this.sql(expression, 'kind');\n kind = kind ? ` ${kind}` : '';\n\n return `${variables}${kind}${defaultValue}`;\n }\n}\n\nexport class BigQueryJsonPathTokenizer extends JsonPathTokenizer {\n @cache\n static get VAR_TOKENS () {\n return new Set([\n TokenType.DASH,\n TokenType.VAR,\n ]);\n }\n}\n\nexport class BigQuery extends Dialect {\n static DIALECT_NAME = Dialects.BIGQUERY;\n static WEEK_OFFSET = -1;\n static UNNEST_COLUMN_ONLY = true;\n static SUPPORTS_USER_DEFINED_TYPES = false;\n static SUPPORTS_SEMI_ANTI_JOIN = false;\n static LOG_BASE_FIRST = false;\n static HEX_LOWERCASE = true;\n static FORCE_EARLY_ALIAS_REF_EXPANSION = true;\n static EXPAND_ONLY_GROUP_ALIAS_REF = true;\n static PRESERVE_ORIGINAL_NAMES = true;\n static HEX_STRING_IS_INTEGER_TYPE = true;\n static BYTE_STRING_IS_BYTES_TYPE = true;\n static UUID_IS_STRING_TYPE = true;\n static ANNOTATE_ALL_SCOPES = true;\n static PROJECTION_ALIASES_SHADOW_SOURCE_NAMES = true;\n static TABLES_REFERENCEABLE_AS_COLUMNS = true;\n static SUPPORTS_STRUCT_STAR_EXPANSION = true;\n static EXCLUDES_PSEUDOCOLUMNS_FROM_STAR = true;\n static QUERY_RESULTS_ARE_STRUCTS = true;\n static JSON_EXTRACT_SCALAR_SCALAR_ONLY = true;\n static LEAST_GREATEST_IGNORES_NULLS = false;\n\n @cache\n static get DEFAULT_NULL_TYPE () {\n return DataTypeExprKind.BIGINT;\n }\n\n static PRIORITIZE_NON_LITERAL_TYPES = true;\n\n static INITCAP_DEFAULT_DELIMITER_CHARS = ' \\t\\n\\r\\f\\v\\\\[\\\\](){}/|<>!?@\"^#$&~_,.:;*%+\\\\-';\n\n @cache\n static get NORMALIZATION_STRATEGY () {\n return NormalizationStrategy.CASE_INSENSITIVE;\n }\n\n @cache\n static get NORMALIZE_FUNCTIONS () {\n return NormalizeFunctions.NONE;\n }\n\n @cache\n static get TIME_MAPPING () {\n return {\n '%x': '%m/%d/%y',\n '%D': '%m/%d/%y',\n '%E6S': '%S.%f',\n '%e': '%-d',\n '%F': '%Y-%m-%d',\n '%T': '%H:%M:%S',\n '%c': '%a %b %e %H:%M:%S %Y',\n };\n }\n\n @cache\n static get INVERSE_TIME_MAPPING () {\n return {\n ...super.INVERSE_TIME_MAPPING,\n '%H:%M:%S.%f': '%H:%M:%E6S',\n };\n }\n\n @cache\n static get FORMAT_MAPPING (): Record<string, string> {\n return {\n DD: '%d',\n MM: '%m',\n MON: '%b',\n MONTH: '%B',\n YYYY: '%Y',\n YY: '%y',\n HH: '%I',\n HH12: '%I',\n HH24: '%H',\n MI: '%M',\n SS: '%S',\n SSSSS: '%f',\n TZH: '%z',\n };\n }\n\n // The _PARTITIONTIME and _PARTITIONDATE pseudo-columns are not returned by a SELECT * statement\n // https://cloud.google.com/bigquery/docs/querying-partitioned-tables#query_an_ingestion-time_partitioned_table\n // https://cloud.google.com/bigquery/docs/querying-wildcard-tables#scanning_a_range_of_tables_using_table_suffix\n // https://cloud.google.com/bigquery/docs/query-cloud-storage-data#query_the_file_name_pseudo-column\n @cache\n static get PSEUDOCOLUMNS (): Set<string> {\n return new Set([\n '_PARTITIONTIME',\n '_PARTITIONDATE',\n '_TABLE_SUFFIX',\n '_FILE_NAME',\n '_DBT_MAX_PARTITION',\n ]);\n }\n\n // All set operations require either a DISTINCT or ALL specifier\n @cache\n static get SET_OP_DISTINCT_BY_DEFAULT (): Partial<Record<ExpressionKey, boolean>> {\n return {};\n }\n\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions#percentile_cont\n @cache\n static get COERCES_TO (): Map<string, Set<string>> {\n const base = new Map<string, Set<string>>();\n for (const [\n k,\n v,\n ] of TypeAnnotator.COERCES_TO) {\n base.set(k, new Set(v as Iterable<string>));\n }\n base.set(DataTypeExprKind.BIGDECIMAL, new Set([\n DataTypeExprKind.DOUBLE,\n ]));\n base.get(DataTypeExprKind.DECIMAL)?.add(DataTypeExprKind.BIGDECIMAL);\n base.get(DataTypeExprKind.BIGINT)?.add(DataTypeExprKind.BIGDECIMAL);\n if (!base.has(DataTypeExprKind.VARCHAR)) base.set(DataTypeExprKind.VARCHAR, new Set());\n for (const t of [\n DataTypeExprKind.DATE,\n DataTypeExprKind.DATETIME,\n DataTypeExprKind.TIME,\n DataTypeExprKind.TIMESTAMP,\n DataTypeExprKind.TIMESTAMPTZ,\n ]) base.get(DataTypeExprKind.VARCHAR)?.add(t);\n return base;\n };\n\n @cache\n static get EXPRESSION_METADATA (): ExpressionMetadata {\n return new Map(BigQueryTyping.EXPRESSION_METADATA);\n }\n\n normalizeIdentifier<E extends Expression> (expression: E): E {\n if (\n expression instanceof IdentifierExpr\n && this.normalizationStrategy === NormalizationStrategy.CASE_INSENSITIVE\n ) {\n let parent = expression.parent;\n while (parent instanceof DotExpr) {\n parent = parent.parent;\n }\n\n // In BigQuery, CTEs are case-insensitive, but UDF and table names are case-sensitive\n // by default. The following check uses a heuristic to detect tables based on whether\n // they are qualified. This should generally be correct, because tables in BigQuery\n // must be qualified with at least a dataset, unless @@dataset_id is set.\n const caseSensitive = (\n parent instanceof UserDefinedFunctionExpr\n || (\n parent instanceof TableExpr\n && parent.db\n && (parent.meta['quotedTable'] || !parent.meta['maybeColumn'])\n )\n || expression.meta['isTable']\n );\n\n if (!caseSensitive) {\n expression.setArgKey('this', (expression.args.this as string).toLowerCase());\n }\n\n return expression;\n }\n\n return super.normalizeIdentifier(expression);\n }\n\n static Tokenizer = BigQueryTokenizer;\n static Parser = BigQueryParser;\n static Generator = BigQueryGenerator;\n static JsonPathTokenizer = BigQueryJsonPathTokenizer;\n}\n\nDialect.register(Dialects.BIGQUERY, BigQuery);\n"],"mappings":"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,CAE1B,WAAW,qBAA2C,CACpD,IAAMC,EAA0B,IAAI,IAAIC,GAAc,mBAAmB,EAEnEC,EAAS,CAACC,EAA8BC,IAAkC,CAC9E,QAAWC,KAAQF,EAAOH,EAAI,IAAIK,EAAMD,CAAI,CAC9C,EAGA,OAAAF,EAAO,CACLI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACF,EAAG,CACD,UAAW,CAACC,EAAkBC,IAAkBrD,GAAsB,KAAKoD,EAAGC,CAAC,CACjF,CAAC,EAEDb,EAAO,CACLc,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACAC,GACAC,GACAC,GACAC,GACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACF,EAAG,CACD,UAAW,CAAChC,EAAkBC,IAAkBD,EAAE,eAAeC,EAAG,CAClE,MACF,CAAC,CACH,CAAC,EAEDb,EAAO,CACL6C,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACF,EAAG,CACD,gBACF,CAAC,EAED3D,EAAO,CACL4D,GACAC,GACAC,EACAC,GACAC,GACAC,GACAC,GACAC,EACF,EAAG,CACD,gBACF,CAAC,EAEDnE,EAAO,CACLoE,GACAC,EACF,EAAG,CACD,iBACF,CAAC,EAEDrE,EAAO,CACLsE,GACAC,EACF,EAAG,CACD,kBACF,CAAC,EAEDvE,EAAO,CACLwE,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACF,EAAG,CACD,gBACF,CAAC,EAEDvF,EAAO,CACLwF,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACF,EAAG,CACD,cACF,CAAC,EAED9F,EAAO,CACL+F,GACAC,GACAC,GACAC,CACF,EAAG,CACD,cACF,CAAC,EAEDlG,EAAO,CACLmG,GACAC,GACAC,GACAC,EACAC,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EAAU,WACb,CACE3H,GACAxE,EAAW,kBAAkB,CAC/B,EACA,CACEqM,GACArM,EAAW,uBAAuB,CACpC,EACA,CACEsM,GACAC,GAAmB,QAAQ,CAC7B,EACA,CACEC,GACAD,GAAmB,QAAQ,CAC7B,EACA,CACEtF,EACAwF,EACF,EACA,CACEC,GACA7O,EACF,EACA,CACE8O,GACAC,EACF,EACA,CACEC,GACAD,EACF,EACA,CACEnI,GACAzE,EAAW,SAAS,CACtB,EACA,CACE0E,GACA1E,EAAW,QAAQ,CACrB,EACA,CACE2E,GACA3E,EAAW,SAAS,CACtB,EACA,CACE4E,GACA5E,EAAW,WAAW,CACxB,EACA,CACE+F,GACA/F,EAAW,aAAa,CAC1B,EACA,CACE8M,GACAC,GAAW,CACTC,EACF,CAAC,CACH,EACA,CACEC,GACA,SAA2BrD,EAAwB,CACjD,OAAOA,EAAE,KAAK,QACV,mBAAmB,KAAK,IAAIA,EAAG,MAAM,CAAC,GACtC,WAAW,KAAK,IAAIA,EAAG,MAAM,CAAC,EACpC,CACF,EACA,CACEsD,GACA,IAAM,oBACR,EACA,CACEC,GACAnN,EAAW,SAAS,CACtB,EACA,CACEoN,GACApS,EACF,EACA,CACEkB,GACA6Q,GAAW,CACT9Q,EACF,CAAC,CACH,EACA,CACE8I,GACAjE,EAAmB,OAAQ,KAAK,CAClC,EACA,CACEpC,GACA,SAA2BkL,EAAiB,CAC1C,OAAO,KAAK,KAAK,YAAa,CAC5BA,EAAE,KAAK,KACPA,EAAE,KAAK,WACP1I,GAAU0I,CAAC,CACb,CAAC,CACH,CACF,EACA,CACE1M,GACA8C,EAAW,MAAM,CACnB,EACA,CACEqN,GACAC,EACF,EACA,CACEtI,GACAlE,EAAmB,OAAQ,KAAK,CAClC,EACA,CACEoE,GACApE,EAAmB,WAAY,KAAK,CACtC,EACA,CACEqE,GACArE,EAAmB,WAAY,KAAK,CACtC,EACA,CACEyM,GACAvN,EAAW,qBAAqB,CAClC,EACA,CACEwN,GACA,SAA2B5D,EAAqB,CAC9C,OAAO,KAAK,KACV,WACA,CACE,KAAK,KAAK,YAAa,CACrBA,EAAE,KAAK,KACPA,EAAE,KAAK,IACT,CAAC,EACD,OACF,CACF,CACF,CACF,EACA,CACEtE,GACAtF,EAAW,gBAAgB,CAC7B,EACA,CACEyN,GACA,SAA2B7D,EAAoB,CAC7C,OAAO8D,GAAe,KAAK,KAAM9D,EAAG,CAClC,SAAU,aACV,YAAa,GACb,IAAK,MACP,CAAC,CACH,CACF,EACA,CACE+D,GACA,SAA2B/D,EAAY,CACrC,OAAO,KAAK,KAAK,QAAS,CACxB,KAAK,KAAK,SAAU,CAClB,KAAK,IAAIA,EAAG,MAAM,CACpB,CAAC,CACH,CAAC,CACH,CACF,EACA,CACEgE,GACA,SAA2BhE,EAAkB,CAC3C,OAAO,KAAK,aAAaA,EAAG,CAC1B,mBAAoB,UACtB,CAAC,CACH,CACF,EACA,CACEiE,GACAC,GAAM,KAAM,MAAM,CACpB,EACA,CACEC,GACAC,EACF,EACA,CACEtM,GACA1B,EAAW,KAAK,CAClB,EACA,CACEiO,GACAjO,EAAW,OAAO,CACpB,EACA,CACE6E,GACA7E,EAAW,MAAM,CACnB,EACA,CACE2F,GACA/F,EACF,EACA,CACE4F,EACA5F,EACF,EACA,CACE2F,EACA3F,EACF,EACA,CACEgH,EACA,SAA2BgD,EAAmB,CAC5C,OAAO,KAAK,KACVA,EAAE,KAAK,OAAS,UAAY,iBAC5B,CACEA,EAAE,KAAK,KACP,GAAI,MAAM,QAAQA,EAAE,KAAK,OAAO,EAC5BA,EAAE,KAAK,QACPA,EAAE,KAAK,QACL,CACAA,EAAE,KAAK,OACT,EACE,CACF,CACN,CACF,CACF,CACF,EACA,CACElE,GACA1F,EAAW,WAAW,CACxB,EACA,CACEyF,EACAzF,EAAW,kBAAkB,CAC/B,EACA,CACEL,GACAJ,EACF,EACA,CACE2O,GACAC,EACF,EACA,CACE5Q,GACA,SAA2BqM,EAAY,CACrC,OAAO,KAAK,KAAK,SAAU,CACzB,KAAK,KAAK,MAAO,CACfA,EAAE,KAAK,IACT,CAAC,CACH,CAAC,CACH,CACF,EACA,CACEtM,EACA0C,EAAW,KAAK,CAClB,EACA,CACEoO,GACAC,EACF,EACA,CACEvI,GACA,SAA2B8D,EAAkB,CAC3C,OAAO,KAAK,KACVA,EAAE,KAAK,WAAa,yBAA2B,YAC/C,CACEA,EAAE,KAAK,KACPA,EAAE,KAAK,IACT,CACF,CACF,CACF,EACA,CACE0E,GACA,SAA2B1E,EAA8B,CACvD,MAAO,gBAAgB,KAAK,IAAIA,EAAG,MAAM,CAAC,EAC5C,CACF,EACA,CACEzK,EACA,SAA2ByK,EAAsB,CAC/C,OAAO,KAAK,KACV,iBACA,CACEA,EAAE,KAAK,KACPA,EAAE,KAAK,WACPA,EAAE,KAAK,SACPA,EAAE,KAAK,UACT,CACF,CACF,CACF,EACA,CACEzD,GACA,SAA2ByD,EAAyB,CAClD,OAAO,KAAK,KAAK,qBAAsB,CACrCA,EAAE,KAAK,KACPA,EAAE,KAAK,UACT,CAAC,CACH,CACF,EACA,CACE2E,GACAC,EACF,EACA,CACEtI,GACAlG,EAAW,iBAAiB,CAC9B,EACA,CACE9E,GACAL,EACF,EACA,CACE4T,GACA,IAAM,sBACR,EACA,CACEzI,GACA,SAA2B4D,EAAkB,CAC3C,OAAO,KAAK,KAAK,aAAc,CAC7B,KAAK,WAAWA,CAAC,EACjBA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACE3D,GACA,SAA2B2D,EAAsB,CAC/C,OAAO,KAAK,KAAK,iBAAkB,CACjC,KAAK,WAAWA,CAAC,EACjBA,EAAE,KAAK,IACT,CAAC,CACH,CACF,EACA,CACEjQ,EACAoT,GAAW,CACT2B,GAA0B,EAC1BC,GACAC,GACAvT,GACAwT,EACF,CAAC,CACH,EACA,CACEC,GACA9O,EAAW,MAAM,CACnB,EACA,CACEqG,GACA0I,EACF,EACA,CACElJ,GACA7F,EAAW,MAAM,CACnB,EACA,CACEoG,GACA4I,EACF,EACA,CACE5K,GACA,SAA2BwF,EAA0B,CACnD,OAAOA,EAAE,OAAS,YAAc,gBAAkB,mBACpD,CACF,EACA,CACEqF,GACAjP,EAAW,QAAQ,CACrB,EACA,CACEuG,GACA,SAA2BqD,EAAoB,CAC7C,OAAOsF,GAAe,KAAK,KAAMtF,EAAG,CAClC,SAAU,QACV,iBAAkB,GAClB,mBAAoB,EACtB,CAAC,CACH,CACF,EACA,CACElJ,GACAH,EACF,EACA,CACE3D,GACA2D,EACF,EACA,CACE4O,GACA,IAAM,gBACR,EACA,CACE3I,GACA1F,EAAmB,OAAQ,KAAK,CAClC,EACA,CACE3C,GACA6B,EAAW,MAAM,CACnB,EACA,CACEzB,GACAyB,EAAW,UAAU,CACvB,EACA,CACEyG,GACA3F,EAAmB,OAAQ,KAAK,CAClC,EACA,CACE4F,GACA5F,EAAmB,YAAa,KAAK,CACvC,EACA,CACEsO,GACApP,EAAW,gBAAgB,CAC7B,EACA,CACE2G,GACA7F,EAAmB,YAAa,KAAK,CACvC,EACA,CACEuO,GACAC,EACF,EACA,CACEC,GACA,IAAM,mBACR,EACA,CACEC,GACA3O,EACF,EACA,CACE4O,GACAzO,EACF,EACA,CACE/C,EACA+B,EAAW,MAAM,CACnB,EACA,CACE3B,EACA2B,EAAW,UAAU,CACvB,EACA,CACE6G,GACA7G,EAAW,WAAW,CACxB,EACA,CACE8G,GACA9G,EAAW,UAAU,CACvB,EACA,CACE0P,GACA1P,EAAW,WAAW,CACxB,EACA,CACEqB,EACAF,EACF,EACA,CACEwO,GACA3P,EAAW,cAAc,CAC3B,EACA,CACE4P,GACA,IAAM,iBACR,EACA,CACEC,GACApW,EACF,EACA,CACEqW,GACA9P,EAAW,SAAS,CACtB,EACA,CACE+P,GACA/P,EAAW,aAAa,CAC1B,CACF,CAAC,CACH,CAGA,WAAW,2BAAqD,CAC9D,OAAO,IAAI,IAAI,CACbgQ,GACAC,GACAC,EACF,CAAC,CACH,CAGA,WAAW,cAAgB,CACzB,OAAO,IAAI,IAAI,CACb,GAAG/D,EAAU,aACb,cAEE,YACF,EACA,UAEE,OACF,EACA,UAEE,OACF,EACA,QAEE,OACF,EACA,WAEE,MACF,EACA,QAEE,QACF,EACA,WAEE,SACF,EACA,UAEE,SACF,EACA,SAEE,SACF,EACA,OAEE,OACF,EACA,SAEE,QACF,EACA,YAEE,QACF,EACA,YAEE,OACF,EACA,QAEE,QACF,EACA,aAEE,UACF,EACA,gBAEE,UACF,EACA,eAEE,WACF,EACA,gBAEE,WACF,EACA,WAEE,OACF,EACA,cAEE,OACF,EACA,QAEE,QACF,EACA,aAEE,OACF,EACA,WAEE,QACF,EACA,WAEE,UACF,CACF,CAAC,CACH,CAGA,WAAW,qBAAuB,CAChC,OAAO,IAAI,IAAI,CACb,GAAGA,EAAU,oBACb,CACEmC,eAEF,EACA,CACE6B,gBAEF,CACF,CAAC,CACH,CAGA,WAAW,mBAAqB,CAC9B,OAAO,IAAI,IAAI,CACb,MACA,MACA,MACA,QACA,KACA,MACA,uBACA,KACA,UACA,KACA,OACA,OACA,UACA,WACA,SACA,QACA,OACA,UACA,UACA,SACA,OACA,WACA,OACA,MACA,OACA,SACA,SACA,UACA,SACA,UACA,QACA,QACA,YACA,MACA,OACA,OACA,QACA,WACA,SACA,OACA,SACA,KACA,SACA,KACA,QACA,YACA,WACA,OACA,KACA,OACA,UACA,OACA,OACA,QACA,SACA,QACA,UACA,MACA,KACA,MACA,OACA,QACA,KACA,KACA,KACA,QACA,QACA,OACA,YACA,YACA,QACA,UACA,QACA,YACA,UACA,QACA,SACA,OACA,SACA,MACA,OACA,SACA,cACA,OACA,KACA,QACA,OACA,YACA,QACA,SACA,QACA,OACA,QACA,SACA,OACA,QACF,CAAC,CACH,CAEA,aAAczW,EAAmC,CAC/C,IAAMiF,EAAOjF,EAAW,KAClB0W,EAAUzR,GAAM,SAAWA,EAAK,KAAO,KAAK,IAAIA,CAAI,EAC1D,OAAO,KAAK,KAAK,aAAc,CAC7BjF,EAAW,KAAK,KAChB0W,EACA1W,EAAW,KAAK,IAClB,CAAC,CACH,CAEA,OAAQA,EAA6B,CACnC,IAAM8O,EAAW9O,EAAW,KAAK,KAC3B+E,EAAO/E,EAAW,KAAK,WAE7B,OAAO,KAAK,KACV,MACA,CACE8O,aAAoB6H,GAAY7H,EAAS,OAAO,EAAIA,EACpD/J,aAAgB4R,GAAY5R,EAAK,OAAO,EAAIA,CAC9C,CACF,CACF,CAEA,YAAa/E,EAAgC,CAC3C,GA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","names":["annotateMathFunctions","expression","thisArg","isInstanceOf","Expression","thisType","DataTypeExpr","annotateSafeDivide","exprArg","annotateByArgsWithCoerce","exprType","annotateByArgsApproxTop","valueTypeExpr","structType","annotateConcat","annotator","annotateArray","arrayArgs","firstArg","unnested","projectionType","SelectExpr","queryTypeRaw","queryType","colDef","ColumnDefExpr","colKind","SetOperationExpr","colTypes","left","QueryExpr","firstColName","elementType","arrayType","_EXPRESSION_METADATA_dec","_init","cache","BigQueryTyping","map","DialectTyping","extend","types","data","type","AvgExpr","CeilExpr","ExpExpr","FloorExpr","LnExpr","LogExpr","RoundExpr","SqrtExpr","s","e","ArgMaxExpr","ArgMinExpr","DateAddExpr","DateTruncExpr","DatetimeTruncExpr","FirstValueExpr","GroupConcatExpr","IgnoreNullsExpr","JsonExtractExpr","LeadExpr","LeftExpr","LowerExpr","NetFuncExpr","NthValueExpr","PadExpr","PercentileDiscExpr","RegexpExtractExpr","RegexpReplaceExpr","RepeatExpr","ReplaceExpr","RespectNullsExpr","ReverseExpr","RightExpr","SafeFuncExpr","SafeNegateExpr","SignExpr","SubstringExpr","TimestampTruncExpr","TranslateExpr","TrimExpr","UpperExpr","BitwiseAndAggExpr","BitwiseCountExpr","BitwiseOrAggExpr","BitwiseXorAggExpr","ByteLengthExpr","DenseRankExpr","FarmFingerprintExpr","GroupingExpr","LaxInt64Expr","LengthExpr","NtileExpr","RankExpr","RangeBucketExpr","RegexpInstrExpr","RowNumberExpr","ByteStringExpr","CodePointsToBytesExpr","Md5DigestExpr","ShaExpr","Sha2Expr","Sha1DigestExpr","Sha2DigestExpr","UnhexExpr","JsonBoolExpr","LaxBoolExpr","ParseDatetimeExpr","TimestampFromPartsExpr","Atan2Expr","CorrExpr","CosineDistanceExpr","CothExpr","CovarPopExpr","CovarSampExpr","CscExpr","CschExpr","CumeDistExpr","EuclideanDistanceExpr","Float64Expr","LaxFloat64Expr","PercentRankExpr","RandExpr","SecExpr","SechExpr","JsonArrayExpr","JsonArrayAppendExpr","JsonArrayInsertExpr","JsonObjectExpr","JsonRemoveExpr","JsonSetExpr","JsonStripNullsExpr","ParseTimeExpr","TimeFromPartsExpr","TimeTruncExpr","TsOrDsToTimeExpr","CodePointsToStringExpr","FormatExpr","HostExpr","JsonExtractScalarExpr","JsonTypeExpr","LaxStringExpr","LowerHexExpr","NormalizeExpr","RegDomainExpr","SafeConvertBytesToStringExpr","SoundexExpr","UuidExpr","PercentileContExpr","SafeAddExpr","SafeDivideExpr","SafeMultiplyExpr","SafeSubtractExpr","ApproxQuantilesExpr","JsonExtractArrayExpr","RegexpExtractAllExpr","SplitExpr","ApproxTopKExpr","ApproxTopSumExpr","ArrayExpr","ConcatExpr","DateFromUnixDateExpr","GenerateTimestampArrayExpr","JsonFormatExpr","JsonKeysAtDepthExpr","JsonValueArrayExpr","LagExpr","ParseBignumericExpr","ParseNumericExpr","ToCodePointsExpr","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","DQUOTES_ESCAPING_JSON_FUNCTIONS","MAKE_INTERVAL_KWARGS","derivedTableValuesToUnnest","expression","SelectExpr","structs","aliasExpr","tup","TupleExpr","expressions","filterInstanceOf","_","i","IdentifierExpr","name","PropertyEqExpr","toIdentifier","StructExpr","aliasNameOnly","TableAliasExpr","UnnestExpr","array","returnsPropertySql","thisExpr","SchemaExpr","createSql","returns","ReturnsPropertyExpr","SubqueryExpr","LiteralExpr","aliasOrderedGroup","group","order","aliases","select","selectAlias","narrowInstanceOf","AliasExpr","grouped","Expression","alias","ColumnExpr","pushdownCteColumnNames","CteExpr","columns","cteQuery","QueryExpr","selects","toReplace","selectContent","buildParseTimestamp","args","buildFormattedTime","StrToTimeExpr","seqGet","buildTimestamp","timestamp","TimestampExpr","buildDate","DateFromPartsExpr","DateExpr","buildToHex","arg","Md5DigestExpr","Md5Expr","LowerHexExpr","buildJsonStripNulls","JsonStripNullsExpr","KwargExpr","kwargName","arrayContainsSql","exists","ExistsExpr","buildTime","TsOrDsToTimeExpr","TimeExpr","TimeFromPartsExpr","buildDatetime","TsOrDsToDatetimeExpr","DatetimeExpr","TimestampFromPartsExpr","buildDateDiff","expr","DateDiffExpr","unit","VarExpr","WeekStartExpr","buildRegexpExtract","exprType","defaultGroup","dialect","kwargs","RegexpExtractExpr","buildExtractJsonWithDefaultPath","options","buildExtractJsonWithPath","levenshteinSql","unsupportedArgs","maxDist","buildLevenshtein","LevenshteinExpr","jsonExtractSql","upper","dquoteEscaping","sql","renameFunc","buildFormatTime","formatted","TimeToStrExpr","buildContainsSubstring","LowerExpr","ContainsExpr","strToDatetimeSql","thisStr","dtype","StrToDateExpr","dialectCls","fmt","tsOrDsAddSql","dateAddIntervalSql","tsOrDsAddCast","tsOrDsDiffSql","cast","unitToVar","unixToTimeSql","scale","UnixToTimeExpr","powExpr","func","literal","unixSeconds","IntDivExpr","_ORIGINAL_KEYWORDS_dec","_RAW_STRINGS_dec","_BYTE_STRINGS_dec","_HEX_STRINGS_dec","_STRING_ESCAPES_dec","_IDENTIFIERS_dec","_COMMENTS_dec","_QUOTES_dec","_a","_init","_BigQueryTokenizer","Tokenizer","cache","prefix","q","keywords","__decoratorStart","__decorateElement","__decoratorMetadata","__runInitializers","BigQueryTokenizer","_FUNCTION_PARSERS_dec","_FUNCTIONS_dec","_BRACKET_OFFSETS_dec","_STATEMENT_PARSERS_dec","_DASHED_TABLE_PART_FOLLOW_TOKENS_dec","_RANGE_PARSERS_dec","_CONSTRAINT_PARSERS_dec","_PROPERTY_PARSERS_dec","_NESTED_TYPE_TOKENS_dec","_UPDATE_ALIAS_TOKENS_dec","_COMMENT_TABLE_ALIAS_TOKENS_dec","_TABLE_ALIAS_TOKENS_dec","_ALIAS_TOKENS_dec","_NO_PAREN_FUNCTIONS_dec","_ID_VAR_TOKENS_dec","BigQueryParser","Parser","s","noParenFunctions","CurrentDatetimeExpr","StabilityPropertyExpr","PropertiesExpr","m","fns","ApproxTopKExpr","BitwiseAndAggExpr","BitwiseOrAggExpr","BitwiseXorAggExpr","BitwiseCountExpr","JsonBoolExpr","buildDateDeltaWithInterval","DateAddExpr","DateSubExpr","DateTruncExpr","DatetimeAddExpr","DatetimeSubExpr","binaryFromFunction","TsOrDsToDateExpr","GenerateSeriesExpr","JsonExtractScalarExpr","JsonExtractArrayExpr","JsonValueArrayExpr","JsonKeysAtDepthExpr","JsonExtractExpr","LengthExpr","Sha1DigestExpr","NormalizeExpr","ByteLengthExpr","ParseTimeExpr","ParseDatetimeExpr","RegexpLikeExpr","RegexpExtractAllExpr","Sha2DigestExpr","Sha2Expr","SplitExpr","StrPositionExpr","TimeAddExpr","TimeSubExpr","TimestampAddExpr","TimestampSubExpr","JsonFormatExpr","TsOrDsToTimestampExpr","UnhexExpr","var_","fps","ArrayExpr","JsonArrayExpr","PredictExpr","GenerateEmbeddingExpr","MlForecastExpr","index","ForInExpr","ExportExpr","MakeIntervalExpr","argKey","value","key","token","MlTranslateExpr","TranslateExpr","FeaturesAtTimeExpr","kwargThis","baseTable","columnToSearch","queryTable","VectorSearchExpr","queryColumn","schema","thisNode","tableName","start","isDbReference","_wildcard","table","previousDb","parts","previousThis","Token","p","joinedParts","splitParts","splitNumWords","catalog","db","rest","part","finalThis","DotExpr","e","TableExpr","tableParts","len","infoSchemaView","newThis","column","_agg","jsonObject","arrayKvPair","keys","values","k","JsonKeyValueExpr","bracket","BracketExpr","offset","safe","withAlias","unnest","unnestExpr","annotateTypes","arrayElem","isType","funcIndex","result","FuncExpr","FuncClass","NetFuncExpr","SafeFuncExpr","_RESERVED_KEYWORDS_dec","_PROPERTIES_LOCATION_dec","_TYPE_MAPPING_dec","_SUPPORTED_JSON_PATH_PARTS_dec","_ORIGINAL_TRANSFORMS_dec","_TS_OR_DS_TYPES_dec","_NULL_ORDERING_SUPPORTED_dec","_AFTER_HAVING_MODIFIER_TRANSFORMS_dec","BigQueryGenerator","Generator","modifiers","ApproxDistinctExpr","ArgMaxExpr","argMaxOrMinNoCount","ArgMinExpr","inlineArrayUnlessQuery","ArrayContainsExpr","ArrayFilterExpr","filterArrayUsingUnnest","ArrayRemoveExpr","CastExpr","preprocess","removePrecisionParameterizedTypes","CollatePropertyExpr","CommitExpr","CountIfExpr","CreateExpr","DateStrToDateExpr","dateStrToDateSql","DateFromUnixDateExpr","FromTimeZoneExpr","GroupConcatExpr","groupConcatSql","HexExpr","HexStringExpr","IfExpr","ifSql","ILikeExpr","noIlikeSql","Int64Expr","MaxExpr","maxOrGreatest","MinExpr","minOrLeast","PartitionedByPropertyExpr","RegexpReplaceExpr","regexpReplaceSql","RollbackExpr","explodeProjectionToUnnest","unqualifyUnnest","eliminateDistinctOn","eliminateSemiAndAntiJoins","ShaExpr","sha256Sql","sha2DigestSql","StringExpr","strPositionSql","SessionUserExpr","TimestampDiffExpr","TimeStrToTimeExpr","timeStrToTimeSql","TransactionExpr","TsOrDsAddExpr","TsOrDsDiffExpr","UnixDateExpr","TimeToUnixExpr","UuidExpr","ValuesExpr","VariancePopExpr","SafeDivideExpr","JsonPathKeyExpr","JsonPathRootExpr","JsonPathSubscriptExpr","VolatilePropertyExpr","unitSql","ParenExpr","funcName","timeExpr","type","NullExpr","UpdateExpr","parent","DataTypeExpr","expressionsSql","_thisNode","_expr","tn","ex","safePrefix","elem","variables","defaultValue","kind","_VAR_TOKENS_dec","BigQueryJsonPathTokenizer","JsonPathTokenizer","_EXPRESSION_METADATA_dec","_COERCES_TO_dec","_SET_OP_DISTINCT_BY_DEFAULT_dec","_PSEUDOCOLUMNS_dec","_FORMAT_MAPPING_dec","_INVERSE_TIME_MAPPING_dec","_TIME_MAPPING_dec","_NORMALIZE_FUNCTIONS_dec","_NORMALIZATION_STRATEGY_dec","_DEFAULT_NULL_TYPE_dec","BigQuery","Dialect","base","v","TypeAnnotator","t","BigQueryTyping","UserDefinedFunctionExpr"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk2Z3O2CFMcjs = require('../chunk-2Z3O2CFM.cjs');var Ns=new Set(["MICROSECOND","MILLISECOND","SECOND","MINUTE","HOUR","DAY","MONTH","QUARTER","YEAR"]);function Xt(E){return o=>{let t=_chunk2Z3O2CFMcjs.Kp.call(void 0, E,{dialect:"clickhouse"})(o),e=_chunk2Z3O2CFMcjs.ca.call(void 0, o,2);return e&&t.setArgKey("zone",e),t}}function ms(E){let o=E.args.scale,t=_optionalChain([o, 'optionalAccess', _2 => _2.toValue, 'call', _3 => _3()]),e=E.args.this;return t===void 0||t===_chunk2Z3O2CFMcjs.Zl.SECONDS.toValue()?this.func("fromUnixTimestamp",[_chunk2Z3O2CFMcjs.mo.call(void 0, e,"bigint")]):t===_chunk2Z3O2CFMcjs.Zl.MILLIS.toValue()?this.func("fromUnixTimestamp64Milli",[_chunk2Z3O2CFMcjs.mo.call(void 0, e,"bigint")]):t===_chunk2Z3O2CFMcjs.Zl.MICROS.toValue()?this.func("fromUnixTimestamp64Micro",[_chunk2Z3O2CFMcjs.mo.call(void 0, e,"bigint")]):t===_chunk2Z3O2CFMcjs.Zl.NANOS.toValue()?this.func("fromUnixTimestamp64Nano",[_chunk2Z3O2CFMcjs.mo.call(void 0, e,"bigint")]):this.func("fromUnixTimestamp",[_chunk2Z3O2CFMcjs.mo.call(void 0, new (0, _chunk2Z3O2CFMcjs.ze)({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 _chunk2Z3O2CFMcjs.Mf?e=this.func("quantiles",o.args.expressions||[]):e=this.func("quantile",[o]),e+t}function Os(E){return E.length===1?new (0, _chunk2Z3O2CFMcjs.fn)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, E,0)}):new (0, _chunk2Z3O2CFMcjs.Xn)({this:"countIf",expressions:E})}function Ls(E){if(E.length===3)return new (0, _chunk2Z3O2CFMcjs.Kf)({this:"STR_TO_DATE",expressions:E});let o=_chunk2Z3O2CFMcjs.wl.fromArgList(E);return _chunk2Z3O2CFMcjs.mo.call(void 0, o,_chunk2Z3O2CFMcjs.ac.build("datetime"))}function w(E){return function(o){if(!o.unit)return _chunk2Z3O2CFMcjs.pp.call(void 0, E).call(this,o);let t=o.getArgKey("zone");return this.func(E,[_chunk2Z3O2CFMcjs.vq.call(void 0, o),o.args.expression,o.args.this,...Array.isArray(t)?[]:[_chunk2Z3O2CFMcjs.p.call(void 0, t,"string",_chunk2Z3O2CFMcjs.Ca)]])}}function Ds(E){let o=E.args.this,t=E.args.zone;if(t&&o instanceof _chunk2Z3O2CFMcjs.$c){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=_chunk2Z3O2CFMcjs.$c.string(l)}let e=t?[new (0, _chunk2Z3O2CFMcjs.$b)({this:t})]:[],r=_chunk2Z3O2CFMcjs.ac.build("datetime64",{expressions:[new (0, _chunk2Z3O2CFMcjs.$b)({this:_chunk2Z3O2CFMcjs.$c.number(6)}),...e],nullable:!1});return this.sql(_chunk2Z3O2CFMcjs.mo.call(void 0, o,r,{dialect:this.dialect}))}function Pr(E){if(!(E.parent&&E.parent.argKey==="settings"))return Rs(_chunk2Z3O2CFMcjs.Ip.call(this,E));let o=E.args.keys,t=E.args.values;if(!(o instanceof _chunk2Z3O2CFMcjs.Mf)||!(t instanceof _chunk2Z3O2CFMcjs.Mf))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(_nullishCoalesce(_optionalChain([r, 'optionalAccess', _4 => _4.length]), () => (0)),_nullishCoalesce(_optionalChain([s, 'optionalAccess', _5 => _5.length]), () => (0)));n++)e.push(`${this.sql(_optionalChain([r, 'optionalAccess', _6 => _6[n]]))}: ${this.sql(_optionalChain([s, 'optionalAccess', _7 => _7[n]]))}`);return`{${e.join(", ")}}`}function Or(E){return o=>new (0, _chunk2Z3O2CFMcjs.bi)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, o,0),unit:_chunk2Z3O2CFMcjs.Eo.call(void 0, E),zone:_chunk2Z3O2CFMcjs.ca.call(void 0, o,1)})}function ys(E){let o=_chunk2Z3O2CFMcjs.ca.call(void 0, E,0);if(o instanceof _chunk2Z3O2CFMcjs.$c){let t=o.toValue();if(typeof t=="string"&&new TextEncoder().encode(t).length===1)return kt((0, _chunk2Z3O2CFMcjs.nl))(E)}return new (0, _chunk2Z3O2CFMcjs.Kf)({this:"splitByChar",expressions:E})}function kt(E){return o=>new E({this:_chunk2Z3O2CFMcjs.ca.call(void 0, o,1),expression:_chunk2Z3O2CFMcjs.ca.call(void 0, o,0),limit:_chunk2Z3O2CFMcjs.ca.call(void 0, o,2)})}var Lr,Dr,yr,Mr,_r,Cr,qr,Ur,Fr,Gr,m,I=class extends(Gr=_chunk2Z3O2CFMcjs.Xq,Fr=[_chunk2Z3O2CFMcjs.r],Ur=[_chunk2Z3O2CFMcjs.r],qr=[_chunk2Z3O2CFMcjs.r],Cr=[_chunk2Z3O2CFMcjs.r],_r=[_chunk2Z3O2CFMcjs.r],Mr=[_chunk2Z3O2CFMcjs.r],yr=[_chunk2Z3O2CFMcjs.r],Dr=[_chunk2Z3O2CFMcjs.r],Lr=[_chunk2Z3O2CFMcjs.r],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={..._chunk2Z3O2CFMcjs.Xq.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{..._chunk2Z3O2CFMcjs.Xq.SINGLE_TOKENS,$:"heredocString"}}};m=_chunk2Z3O2CFMcjs.a.call(void 0, Gr),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"COMMENTS",Fr,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"IDENTIFIERS",Ur,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"IDENTIFIER_ESCAPES",qr,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"STRING_ESCAPES",Cr,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"BIT_STRINGS",_r,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"HEX_STRINGS",Mr,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"HEREDOC_STRINGS",yr,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"ORIGINAL_KEYWORDS",Dr,I),_chunk2Z3O2CFMcjs.d.call(void 0, m,10,"SINGLE_TOKENS",Lr,I),_chunk2Z3O2CFMcjs.b.call(void 0, m,I),_chunk2Z3O2CFMcjs.c.call(void 0, 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=_chunk2Z3O2CFMcjs.za,ss=[_chunk2Z3O2CFMcjs.r],rs=[_chunk2Z3O2CFMcjs.r],es=[_chunk2Z3O2CFMcjs.r],ts=[_chunk2Z3O2CFMcjs.r],Hr=[_chunk2Z3O2CFMcjs.r],zr=[_chunk2Z3O2CFMcjs.r],Zr=[_chunk2Z3O2CFMcjs.r],jr=[_chunk2Z3O2CFMcjs.r],Qr=[_chunk2Z3O2CFMcjs.r],kr=[_chunk2Z3O2CFMcjs.r],Xr=[_chunk2Z3O2CFMcjs.r],Jr=[_chunk2Z3O2CFMcjs.r],Wr=[_chunk2Z3O2CFMcjs.r],$r=[_chunk2Z3O2CFMcjs.r],Vr=[_chunk2Z3O2CFMcjs.r],vr=[_chunk2Z3O2CFMcjs.r],Kr=[_chunk2Z3O2CFMcjs.r],Yr=[_chunk2Z3O2CFMcjs.r],Br=[_chunk2Z3O2CFMcjs.r],wr=[_chunk2Z3O2CFMcjs.r],br=[_chunk2Z3O2CFMcjs.r],ns){static get ID_VAR_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.ID_VAR_TOKENS,"sessionUser","currentCatalog","like","straightJoin"])}static get NO_PAREN_FUNCTIONS(){let t={..._chunk2Z3O2CFMcjs.za.NO_PAREN_FUNCTIONS};return delete t.currentTimestamp,delete t.localtime,delete t.localtimestamp,t}static get FUNCTIONS(){let t={..._chunk2Z3O2CFMcjs.za.FUNCTIONS,...Object.fromEntries([...Ns].map(e=>[`TOSTARTOF${e}`,Or(e)])),ANY:e=>_chunk2Z3O2CFMcjs.Um.fromArgList(e),ARRAYSUM:e=>_chunk2Z3O2CFMcjs.zg.fromArgList(e),ARRAYREVERSE:e=>_chunk2Z3O2CFMcjs.og.fromArgList(e),ARRAYSLICE:e=>_chunk2Z3O2CFMcjs.pg.fromArgList(e),CURRENTDATABASE:e=>_chunk2Z3O2CFMcjs.Tg.fromArgList(e),CURRENTSCHEMAS:e=>_chunk2Z3O2CFMcjs.Ug.fromArgList(e),COUNTIF:Os,COSINEDISTANCE:e=>_chunk2Z3O2CFMcjs.of.fromArgList(e),VERSION:e=>_chunk2Z3O2CFMcjs.Yg.fromArgList(e),DATE_ADD:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.uh,void 0,{defaultUnit:void 0}),DATEADD:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.uh,void 0,{defaultUnit:void 0}),DATE_DIFF:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.xh,void 0,{defaultUnit:void 0,supportsTimezone:!0}),DATEDIFF:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.xh,void 0,{defaultUnit:void 0,supportsTimezone:!0}),DATE_FORMAT:Xt(_chunk2Z3O2CFMcjs.Hl),DATE_SUB:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.wh,void 0,{defaultUnit:void 0}),DATESUB:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.wh,void 0,{defaultUnit:void 0}),FORMATDATETIME:Xt(_chunk2Z3O2CFMcjs.Hl),HAS:e=>_chunk2Z3O2CFMcjs.mg.fromArgList(e),ILIKE:_chunk2Z3O2CFMcjs.Kq.call(void 0, _chunk2Z3O2CFMcjs.Ie),JSONEXTRACTSTRING:_chunk2Z3O2CFMcjs.zq.call(void 0, _chunk2Z3O2CFMcjs.wj,{zeroBasedIndexing:!1}),LENGTH:e=>new (0, _chunk2Z3O2CFMcjs.Oj)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, e,0),binary:!0}),LIKE:_chunk2Z3O2CFMcjs.Kq.call(void 0, _chunk2Z3O2CFMcjs.Me),L2Distance:e=>_chunk2Z3O2CFMcjs.qf.fromArgList(e),MAP:_chunk2Z3O2CFMcjs.sa,MATCH:e=>_chunk2Z3O2CFMcjs.Lk.fromArgList(e),NOTLIKE:_chunk2Z3O2CFMcjs.Kq.call(void 0, _chunk2Z3O2CFMcjs.Me,{notLike:!0}),PARSEDATETIME:Xt(_chunk2Z3O2CFMcjs.Jj),RANDCANONICAL:e=>_chunk2Z3O2CFMcjs.Ck.fromArgList(e),STR_TO_DATE:Ls,TIMESTAMP_SUB:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.$h,void 0,{defaultUnit:void 0}),TIMESTAMPSUB:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs.$h,void 0,{defaultUnit:void 0}),TIMESTAMP_ADD:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs._h,void 0,{defaultUnit:void 0}),TIMESTAMPADD:_chunk2Z3O2CFMcjs.Mp.call(void 0, _chunk2Z3O2CFMcjs._h,void 0,{defaultUnit:void 0}),TOMONDAY:Or("WEEK"),UNIQ:e=>_chunk2Z3O2CFMcjs.Lm.fromArgList(e),XOR:e=>new (0, _chunk2Z3O2CFMcjs.mn)({expressions:e}),MD5:e=>_chunk2Z3O2CFMcjs.hk.fromArgList(e),SHA256:e=>new (0, _chunk2Z3O2CFMcjs.gl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, e,0),length:_chunk2Z3O2CFMcjs.$c.number(256)}),SHA512:e=>new (0, _chunk2Z3O2CFMcjs.gl)({this:_chunk2Z3O2CFMcjs.ca.call(void 0, e,0),length:_chunk2Z3O2CFMcjs.$c.number(512)}),SPLITBYCHAR:ys,SPLITBYREGEXP:kt(_chunk2Z3O2CFMcjs.Pk),SPLITBYSTRING:kt(_chunk2Z3O2CFMcjs.nl),SUBSTRINGINDEX:e=>_chunk2Z3O2CFMcjs.ql.fromArgList(e),TOTYPENAME:e=>_chunk2Z3O2CFMcjs._e.fromArgList(e),EDITDISTANCE:e=>_chunk2Z3O2CFMcjs.Rj.fromArgList(e),JAROWINKLERSIMILARITY:e=>_chunk2Z3O2CFMcjs.sf.fromArgList(e),LEVENSHTEINDISTANCE:e=>_chunk2Z3O2CFMcjs.Rj.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([..._chunk2Z3O2CFMcjs.za.FUNC_TOKENS,"and","or","set"])}static get RESERVED_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.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={..._chunk2Z3O2CFMcjs.za.FUNCTION_PARSERS,ARRAYJOIN:function(){return this.expression(_chunk2Z3O2CFMcjs.yi,{this:this.parseExpression()})},QUANTILE:function(){return this.parseQuantile()},MEDIAN:function(){return this.parseQuantile()},COLUMNS:function(){return this.parseColumns()},TUPLE:function(){return _chunk2Z3O2CFMcjs.Cl.fromArgList(this.parseFunctionArgs({alias:!0}))},AND:function(){let e=this.parseFunctionArgs({alias:!1});return new (0, _chunk2Z3O2CFMcjs.kn)({this:e[0],expression:e[1]})},OR:function(){let e=this.parseFunctionArgs({alias:!1});return new (0, _chunk2Z3O2CFMcjs.ln)({this:e[0],expression:e[1]})}};return delete t.MATCH,t}static get PROPERTY_PARSERS(){let t={..._chunk2Z3O2CFMcjs.za.PROPERTY_PARSERS,ENGINE:function(){return this.parseEngineProperty()}};return delete t.DYNAMIC,t}static get NO_PAREN_FUNCTION_PARSERS(){let t={..._chunk2Z3O2CFMcjs.za.NO_PAREN_FUNCTION_PARSERS};return delete t.ANY,t}static get RANGE_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.RANGE_PARSERS,global:function(t){return this.parseGlobalIn(t)}}}static get COLUMN_OPERATORS(){let t={..._chunk2Z3O2CFMcjs.za.COLUMN_OPERATORS};return delete t.placeholder,t}static get JOIN_KINDS(){return new Set([..._chunk2Z3O2CFMcjs.za.JOIN_KINDS,"any","asof","array"])}static get TABLE_ALIAS_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.TABLE_ALIAS_TOKENS,"any","array","final","format","settings","straightJoin"])}static get ALIAS_TOKENS(){return new Set([..._chunk2Z3O2CFMcjs.za.ALIAS_TOKENS].filter(t=>t!=="format"))}static get QUERY_MODIFIER_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.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{..._chunk2Z3O2CFMcjs.za.CONSTRAINT_PARSERS,INDEX:function(){return this.parseIndexConstraint()},CODEC:function(){return this.parseCompress()}}}static get ALTER_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.ALTER_PARSERS,REPLACE:function(){return this.parseAlterTableReplace()}}}static get SCHEMA_UNNAMED_CONSTRAINTS(){return new Set([..._chunk2Z3O2CFMcjs.za.SCHEMA_UNNAMED_CONSTRAINTS,"INDEX"])}static get PLACEHOLDER_PARSERS(){return{..._chunk2Z3O2CFMcjs.za.PLACEHOLDER_PARSERS,lBrace:function(){return this.parseQueryParameter()}}}parseEngineProperty(){return this.match("eq"),this.expression(_chunk2Z3O2CFMcjs.hd,{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 _chunk2Z3O2CFMcjs.ac&&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(_chunk2Z3O2CFMcjs.Kf,{this:"extract",expressions:[e,this.parseBitwise()]}))}parseAssignment(){let t=super.parseAssignment();return this.match("placeholder")?this.expression(_chunk2Z3O2CFMcjs._i,{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 _chunk2Z3O2CFMcjs.rb&&!e.quoted&&(s=_chunk2Z3O2CFMcjs.Eo.call(void 0, e.name)),this.expression(_chunk2Z3O2CFMcjs._d,{this:s,kind:r})}parseBracket(t){let e=this.match("lBrace",{advance:!1}),r=super.parseBracket(t);if(e&&r instanceof _chunk2Z3O2CFMcjs.Cl){let s=new (0, _chunk2Z3O2CFMcjs.ek)({keys:new (0, _chunk2Z3O2CFMcjs.Mf)({expressions:[]}),values:new (0, _chunk2Z3O2CFMcjs.Mf)({expressions:[]})});for(let n of _nullishCoalesce(r.args.expressions, () => ([]))){if(!(n instanceof _chunk2Z3O2CFMcjs.Fe))break;_optionalChain([_chunk2Z3O2CFMcjs.p.call(void 0, s.args.keys,_chunk2Z3O2CFMcjs.Ca), 'optionalAccess', _8 => _8.append, 'call', _9 => _9("expressions",_chunk2Z3O2CFMcjs.$c.string(n.name))]),_optionalChain([_chunk2Z3O2CFMcjs.p.call(void 0, s.args.values,_chunk2Z3O2CFMcjs.Ca), 'optionalAccess', _10 => _10.append, 'call', _11 => _11("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(_chunk2Z3O2CFMcjs.Ue,{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 _chunk2Z3O2CFMcjs.Tb){let A=l.args.this,g=l.args.alias;A instanceof _chunk2Z3O2CFMcjs.bg&&g instanceof _chunk2Z3O2CFMcjs.Ya&&!g.args.columns&&g.setArgKey("columns",[_chunk2Z3O2CFMcjs.eo.call(void 0, "generate_series")])}return this.match("final")&&(l=this.expression(_chunk2Z3O2CFMcjs.Db,{this:l})),l}parsePosition(t={}){return super.parsePosition({haystackFirst:!0})}parseCte(){let t=this.tryParse(()=>super.parseCte());return t||(t=this.expression(_chunk2Z3O2CFMcjs.Fc,{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(_chunk2Z3O2CFMcjs.Tb))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 _chunk2Z3O2CFMcjs.Yd?c.args.this:c,A=l instanceof _chunk2Z3O2CFMcjs.Kf?this._constructor.AGG_FUNC_MAPPING[(_nullishCoalesce(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?_chunk2Z3O2CFMcjs.Yn:_chunk2Z3O2CFMcjs.Xn:rt=O?_chunk2Z3O2CFMcjs.um:_chunk2Z3O2CFMcjs.Im,O&&(Zt.params=O),l=this.expression(rt,Zt),c instanceof _chunk2Z3O2CFMcjs.Yd?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(_chunk2Z3O2CFMcjs.An,{this:e[0],quantile:t}):this.expression(_chunk2Z3O2CFMcjs.An,{this:t,quantile:_chunk2Z3O2CFMcjs.$c.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(_chunk2Z3O2CFMcjs.nd,{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(_chunk2Z3O2CFMcjs.Qc,{this:t,expression:e,indexType:r,granularity:s})}parsePartition(){if(!this.match("partition"))return;let t;return this.matchTextSeq("ID")?t=[this.expression(_chunk2Z3O2CFMcjs.wb,{this:this.parseString()})]:t=this.parseExpressions(),this.expression(_chunk2Z3O2CFMcjs.ub,{expressions:t})}parseAlterTableReplace(){let t=this.parsePartition();if(!(!t||!this.match("from")))return this.expression(_chunk2Z3O2CFMcjs.gc,{expression:t,source:this.parseTableParts()})}parseProjectionDef(){if(this.matchTextSeq("PROJECTION"))return this.expression(_chunk2Z3O2CFMcjs.Xa,{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 (0, _chunk2Z3O2CFMcjs.Lf)({this:t,expression:this.parseVar({anyToken:!0})}),this.match("rParen");return t}parseColumns(){let t=this.expression(_chunk2Z3O2CFMcjs.Yf,{this:this.parseLambda()});for(;this.next&&this.matchTextSeq([")","APPLY","("]);)this.match("rParen"),t=new (0, _chunk2Z3O2CFMcjs.Lf)({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=_optionalChain([s, 'optionalAccess', _12 => _12[s.length-1]]);return e&&!(n instanceof _chunk2Z3O2CFMcjs.Pb)&&r.setArgKey("expressions",_optionalChain([s, 'optionalAccess', _13 => _13.map, 'call', _14 => _14(c=>this.expression(_chunk2Z3O2CFMcjs.Pb,{expressions:[c]}))])),r}parsePartitionedBy(){return this.expression(_chunk2Z3O2CFMcjs.ud,{this:this.parseAssignment()})}};h=_chunk2Z3O2CFMcjs.a.call(void 0, ns),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"ID_VAR_TOKENS",ss,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"NO_PAREN_FUNCTIONS",rs,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"FUNCTIONS",es,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"AGG_FUNCTIONS",ts,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"AGG_FUNCTIONS_SUFFIXES",Hr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"FUNC_TOKENS",zr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"RESERVED_TOKENS",Zr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"AGG_FUNC_MAPPING",jr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"FUNCTION_PARSERS",Qr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"PROPERTY_PARSERS",kr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"NO_PAREN_FUNCTION_PARSERS",Xr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"RANGE_PARSERS",Jr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"COLUMN_OPERATORS",Wr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"JOIN_KINDS",$r,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"TABLE_ALIAS_TOKENS",Vr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"ALIAS_TOKENS",vr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"QUERY_MODIFIER_PARSERS",Kr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"CONSTRAINT_PARSERS",Yr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"ALTER_PARSERS",Br,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"SCHEMA_UNNAMED_CONSTRAINTS",wr,u),_chunk2Z3O2CFMcjs.d.call(void 0, h,10,"PLACEHOLDER_PARSERS",br,u),_chunk2Z3O2CFMcjs.b.call(void 0, h,u),_chunk2Z3O2CFMcjs.c.call(void 0, 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=_chunk2Z3O2CFMcjs.lp,ls=[_chunk2Z3O2CFMcjs.r],cs=[_chunk2Z3O2CFMcjs.r],Ts=[_chunk2Z3O2CFMcjs.r],us=[_chunk2Z3O2CFMcjs.r],ps=[_chunk2Z3O2CFMcjs.r],Es=[_chunk2Z3O2CFMcjs.r],os=[_chunk2Z3O2CFMcjs.r],as=[_chunk2Z3O2CFMcjs.r],is=[_chunk2Z3O2CFMcjs.r],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([_chunk2Z3O2CFMcjs.ie,_chunk2Z3O2CFMcjs.je,_chunk2Z3O2CFMcjs.ke])}static get TYPE_MAPPING(){return new Map([..._chunk2Z3O2CFMcjs.lp.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([..._chunk2Z3O2CFMcjs.lp.ORIGINAL_TRANSFORMS,[_chunk2Z3O2CFMcjs.Um,_chunk2Z3O2CFMcjs.pp.call(void 0, "any")],[_chunk2Z3O2CFMcjs.Lm,_chunk2Z3O2CFMcjs.pp.call(void 0, "uniq")],[_chunk2Z3O2CFMcjs.hg,_chunk2Z3O2CFMcjs.pp.call(void 0, "arrayConcat")],[_chunk2Z3O2CFMcjs.mg,_chunk2Z3O2CFMcjs.pp.call(void 0, "has")],[_chunk2Z3O2CFMcjs.ng,function(t){return this.func("arrayFilter",[t.args.expression,t.args.this])}],[_chunk2Z3O2CFMcjs.Cf,_chunk2Z3O2CFMcjs.Eq],[_chunk2Z3O2CFMcjs.og,_chunk2Z3O2CFMcjs.pp.call(void 0, "arrayReverse")],[_chunk2Z3O2CFMcjs.pg,_chunk2Z3O2CFMcjs.pp.call(void 0, "arraySlice")],[_chunk2Z3O2CFMcjs.zg,_chunk2Z3O2CFMcjs.pp.call(void 0, "arraySum")],[_chunk2Z3O2CFMcjs.vm,_chunk2Z3O2CFMcjs.qq.call(void 0, "argMax")],[_chunk2Z3O2CFMcjs.wm,_chunk2Z3O2CFMcjs.qq.call(void 0, "argMin")],[_chunk2Z3O2CFMcjs.Mf,_chunk2Z3O2CFMcjs.tp],[_chunk2Z3O2CFMcjs.Dg,_chunk2Z3O2CFMcjs.pp.call(void 0, "CAST")],[_chunk2Z3O2CFMcjs.Tg,_chunk2Z3O2CFMcjs.pp.call(void 0, "CURRENT_DATABASE")],[_chunk2Z3O2CFMcjs.Ug,_chunk2Z3O2CFMcjs.pp.call(void 0, "CURRENT_SCHEMAS")],[_chunk2Z3O2CFMcjs.fn,_chunk2Z3O2CFMcjs.pp.call(void 0, "countIf")],[_chunk2Z3O2CFMcjs.of,_chunk2Z3O2CFMcjs.pp.call(void 0, "cosineDistance")],[_chunk2Z3O2CFMcjs.Oc,function(t){return`CODEC(${this.expressions(t,{key:"this",flat:!0})})`}],[_chunk2Z3O2CFMcjs.Yc,function(t){return`${t.args.persisted?"MATERIALIZED":"ALIAS"} ${this.sql(t,"this")}`}],[_chunk2Z3O2CFMcjs.$g,function(t){return this.func("CURRENT_DATE",[])}],[_chunk2Z3O2CFMcjs.Yg,_chunk2Z3O2CFMcjs.pp.call(void 0, "VERSION")],[_chunk2Z3O2CFMcjs.uh,w("DATE_ADD")],[_chunk2Z3O2CFMcjs.xh,w("DATE_DIFF")],[_chunk2Z3O2CFMcjs.ji,_chunk2Z3O2CFMcjs.pp.call(void 0, "toDate")],[_chunk2Z3O2CFMcjs.wh,w("DATE_SUB")],[_chunk2Z3O2CFMcjs.yi,_chunk2Z3O2CFMcjs.pp.call(void 0, "arrayJoin")],[_chunk2Z3O2CFMcjs.Ff,_chunk2Z3O2CFMcjs.pp.call(void 0, "farmFingerprint64")],[_chunk2Z3O2CFMcjs.Db,function(t){return`${this.sql(t,"this")} FINAL`}],[_chunk2Z3O2CFMcjs.cj,_chunk2Z3O2CFMcjs.pp.call(void 0, "isNaN")],[_chunk2Z3O2CFMcjs.cn,function(t){return`${this.sql(t,"this")}.:${this.sql(t,"to")}`}],[_chunk2Z3O2CFMcjs.uj,_chunk2Z3O2CFMcjs.Aq.call(void 0, "JSONExtractString",{quotedIndex:!1})],[_chunk2Z3O2CFMcjs.wj,_chunk2Z3O2CFMcjs.Aq.call(void 0, "JSONExtractString",{quotedIndex:!1})],[_chunk2Z3O2CFMcjs.ie,_chunk2Z3O2CFMcjs.Bq],[_chunk2Z3O2CFMcjs.je,()=>""],[_chunk2Z3O2CFMcjs.Oj,_chunk2Z3O2CFMcjs.Pq],[_chunk2Z3O2CFMcjs.Vj,Pr],[_chunk2Z3O2CFMcjs.tn,_chunk2Z3O2CFMcjs.pp.call(void 0, "median")],[_chunk2Z3O2CFMcjs.$i,_chunk2Z3O2CFMcjs.pp.call(void 0, "nullIf")],[_chunk2Z3O2CFMcjs.ud,function(t){return`PARTITION BY ${this.sql(t,"this")}`}],[_chunk2Z3O2CFMcjs.Yb,_chunk2Z3O2CFMcjs.zp],[_chunk2Z3O2CFMcjs.An,Ps],[_chunk2Z3O2CFMcjs.Lk,function(t){return this.func("match",[t.args.this,t.args.expression])}],[_chunk2Z3O2CFMcjs.Ck,_chunk2Z3O2CFMcjs.pp.call(void 0, "randCanonical")],[_chunk2Z3O2CFMcjs.rl,_chunk2Z3O2CFMcjs.pp.call(void 0, "startsWith")],[_chunk2Z3O2CFMcjs.Cl,_chunk2Z3O2CFMcjs.pp.call(void 0, "tuple")],[_chunk2Z3O2CFMcjs.Vk,_chunk2Z3O2CFMcjs.pp.call(void 0, "trunc")],[_chunk2Z3O2CFMcjs.sl,_chunk2Z3O2CFMcjs.pp.call(void 0, "endsWith")],[_chunk2Z3O2CFMcjs.qf,_chunk2Z3O2CFMcjs.pp.call(void 0, "L2Distance")],[_chunk2Z3O2CFMcjs.tl,function(t){return _chunk2Z3O2CFMcjs.Ep.call(this,t,{funcName:"POSITION",supportsPosition:!0,useAnsiPosition:!1})}],[_chunk2Z3O2CFMcjs.Hl,function(t){return this.func("formatDateTime",[t.args.this,this.formatTime(t),t.args.zone])}],[_chunk2Z3O2CFMcjs.Kl,Ds],[_chunk2Z3O2CFMcjs._h,w("TIMESTAMP_ADD")],[_chunk2Z3O2CFMcjs.$h,w("TIMESTAMP_SUB")],[_chunk2Z3O2CFMcjs._e,_chunk2Z3O2CFMcjs.pp.call(void 0, "toTypeName")],[_chunk2Z3O2CFMcjs.ek,Pr],[_chunk2Z3O2CFMcjs.mn,function(t){return this.func("xor",[t.args.this,t.args.expression,...t.args.expressions||[]])}],[_chunk2Z3O2CFMcjs.hk,_chunk2Z3O2CFMcjs.pp.call(void 0, "MD5")],[_chunk2Z3O2CFMcjs.gk,function(t){return this.func("LOWER",[this.func("HEX",[this.func("MD5",[t.args.this])])])}],[_chunk2Z3O2CFMcjs.fl,_chunk2Z3O2CFMcjs.pp.call(void 0, "SHA1")],[_chunk2Z3O2CFMcjs.hl,_chunk2Z3O2CFMcjs.pp.call(void 0, "SHA1")],[_chunk2Z3O2CFMcjs.gl,_chunk2Z3O2CFMcjs.Hq],[_chunk2Z3O2CFMcjs.il,_chunk2Z3O2CFMcjs.Iq],[_chunk2Z3O2CFMcjs.nl,function(t){return this.func("splitByString",[t.args.expression,t.args.this,typeof t.args.limit=="number"?_chunk2Z3O2CFMcjs.$c.number(t.args.limit):t.args.limit])}],[_chunk2Z3O2CFMcjs.Pk,function(t){return this.func("splitByRegexp",[t.args.expression,t.args.this,typeof t.args.limit=="number"?_chunk2Z3O2CFMcjs.$c.number(t.args.limit):t.args.limit])}],[_chunk2Z3O2CFMcjs.Zl,ms],[_chunk2Z3O2CFMcjs.bi,_chunk2Z3O2CFMcjs.Qp.call(void 0, {func:"dateTrunc",zone:!0})],[_chunk2Z3O2CFMcjs.Ml,function(t){return _chunk2Z3O2CFMcjs.bq.call(this,t,{defaultTrimType:"BOTH"})}],[_chunk2Z3O2CFMcjs.Rn,_chunk2Z3O2CFMcjs.pp.call(void 0, "varSamp")],[_chunk2Z3O2CFMcjs.Dd,function(t){return this.nakedProperty(t)}],[_chunk2Z3O2CFMcjs.Pn,_chunk2Z3O2CFMcjs.pp.call(void 0, "stddevSamp")],[_chunk2Z3O2CFMcjs.Kg,_chunk2Z3O2CFMcjs.pp.call(void 0, "CHAR")],[_chunk2Z3O2CFMcjs.Vm,function(t){return this.func("lagInFrame",[t.args.this,t.args.offset,t.args.default])}],[_chunk2Z3O2CFMcjs.Wm,function(t){return this.func("leadInFrame",[t.args.this,t.args.offset,t.args.default])}],[_chunk2Z3O2CFMcjs.sf,_chunk2Z3O2CFMcjs.pp.call(void 0, "jaroWinklerSimilarity")],[_chunk2Z3O2CFMcjs.Rj,function(t){return _chunk2Z3O2CFMcjs.kp.call(this,t,"insCost","delCost","subCost","maxDist"),_chunk2Z3O2CFMcjs.pp.call(void 0, "editDistance").call(this,t)}],[_chunk2Z3O2CFMcjs.Jj,_chunk2Z3O2CFMcjs.pp.call(void 0, "parseDateTime")]])}static get PROPERTIES_LOCATION(){return new Map([..._chunk2Z3O2CFMcjs.lp.PROPERTIES_LOCATION,[_chunk2Z3O2CFMcjs.nd,"postName"],[_chunk2Z3O2CFMcjs.ud,"postSchema"],[_chunk2Z3O2CFMcjs.id,"postName"],[_chunk2Z3O2CFMcjs.Od,"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 _chunk2Z3O2CFMcjs.Wd&&r.args.limit instanceof _chunk2Z3O2CFMcjs.xb&&(e=`${e} ROWS`),e}strToDateSql(t){let e=this.functionFallbackSql(t);return t.parent instanceof _chunk2Z3O2CFMcjs.Cg?e:this.castSql(_chunk2Z3O2CFMcjs.mo.call(void 0, t,"DATE"))}castSql(t,e={}){let{safePrefix:r}=e,s=t.args.this;return s instanceof _chunk2Z3O2CFMcjs.wl&&_chunk2Z3O2CFMcjs.Lo.call(void 0, t.args.to,"datetime")?this.sql(s):super.castSql(t,{safePrefix:r})}tryCastSql(t){let e=t.args.to;return e instanceof _chunk2Z3O2CFMcjs.Ca&&!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 _chunk2Z3O2CFMcjs.fa.call(void 0, 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 _chunk2Z3O2CFMcjs.nm)n=t.left,c=t.right;else if(t.right instanceof _chunk2Z3O2CFMcjs.nm)n=t.right,c=t.left;else return e(t);return s+this.func("has",[_optionalChain([n, 'access', _15 => _15.args, 'access', _16 => _16.this, 'optionalAccess', _17 => _17.unnest, 'call', _18 => _18()]),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 _chunk2Z3O2CFMcjs.ac&&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 _chunk2Z3O2CFMcjs.Vb?t.args.this:t,c=this.sql(n,"this"),l=s.map(g=>this.sql(g)).join(" "),A=t.args.this instanceof _chunk2Z3O2CFMcjs.Vb?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 _chunk2Z3O2CFMcjs.Fa&&(r=t.find(_chunk2Z3O2CFMcjs.Dd),r&&(r.pop(),e.replace(_chunk2Z3O2CFMcjs.do.call(void 0, 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(_nullishCoalesce(t.args.expression, () => ("")))}`}isSql(t){let e=super.isSql(t);return t.parent instanceof _chunk2Z3O2CFMcjs.Ue&&(e=this.wrap(e)),e}inSql(t){let e=super.inSql(t);return t.parent instanceof _chunk2Z3O2CFMcjs.Ue&&t.args.isGlobal&&(e=e.replace("GLOBAL IN","GLOBAL NOT IN")),e}notSql(t){let e=t.args.this;if(e instanceof _chunk2Z3O2CFMcjs.Ye){if(e.args.isGlobal)return this.sql(t,"this");t.setArgKey("this",_chunk2Z3O2CFMcjs.do.call(void 0, e,{copy:!1}))}return super.notSql(t)}valuesSql(t,e={}){let{valuesAsTable:r=!0}=e,s=t.args.alias,n=t.args.expressions;return _optionalChain([s, 'optionalAccess', _19 => _19.args, 'access', _20 => _20.columns])&&n&&0<n.length?r=_nullishCoalesce(_optionalChain([n, 'access', _21 => _21[0], 'access', _22 => _22.args, 'access', _23 => _23.expressions, 'optionalAccess', _24 => _24.some, 'call', _25 => _25(l=>l instanceof _chunk2Z3O2CFMcjs.Pb)]), () => (!1)):r=!0,super.valuesSql(t,{valuesAsTable:r})}};R=_chunk2Z3O2CFMcjs.a.call(void 0, Ss),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"AFTER_HAVING_MODIFIER_TRANSFORMS",ls,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"STRUCT_DELIMITER",cs,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"STRING_TYPE_MAPPING",Ts,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"SUPPORTED_JSON_PATH_PARTS",us,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"TYPE_MAPPING",ps,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"ORIGINAL_TRANSFORMS",Es,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"PROPERTIES_LOCATION",os,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"ON_CLUSTER_TARGETS",as,T),_chunk2Z3O2CFMcjs.d.call(void 0, R,10,"NON_NULLABLE_TYPES",is,T),_chunk2Z3O2CFMcjs.b.call(void 0, R,T),_chunk2Z3O2CFMcjs.c.call(void 0, 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= exports.ClickHouse =class extends(xs=_chunk2Z3O2CFMcjs.op,ds=[_chunk2Z3O2CFMcjs.r],Is=[_chunk2Z3O2CFMcjs.r],gs=[_chunk2Z3O2CFMcjs.r],fs=[_chunk2Z3O2CFMcjs.r],As=[_chunk2Z3O2CFMcjs.r],hs=[_chunk2Z3O2CFMcjs.r],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=_optionalChain([t, 'access', _26 => _26.args, 'access', _27 => _27.expressions, 'optionalAccess', _28 => _28[0], 'optionalAccess', _29 => _29.args, 'access', _30 => _30.expressions]),r=_optionalChain([e, 'optionalAccess', _31 => _31[0]]),s=_optionalChain([e, 'optionalAccess', _32 => _32[1]]),n=e&&1<e.length&&r instanceof _chunk2Z3O2CFMcjs.Ca&&_optionalChain([r, 'optionalAccess', _33 => _33.isString])&&s instanceof _chunk2Z3O2CFMcjs.Pb?r:void 0,c=[];if(n)c=n.name.split(",").map(A=>A.trim()).map(A=>_chunk2Z3O2CFMcjs.eo.call(void 0, A.split(" ")[0]));else if(_optionalChain([e, 'optionalAccess', _34 => _34[0]])instanceof _chunk2Z3O2CFMcjs.Ca){let l=_optionalChain([e, 'access', _35 => _35[0], 'access', _36 => _36.args, 'access', _37 => _37.expressions, 'optionalAccess', _38 => _38.length]);c=Array.from({length:_nullishCoalesce(l, () => (0))},(A,g)=>_chunk2Z3O2CFMcjs.eo.call(void 0, `c${g+1}`))}return c}};L=_chunk2Z3O2CFMcjs.a.call(void 0, xs),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"NORMALIZE_FUNCTIONS",ds,S),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"NULL_ORDERING",Is,S),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"NORMALIZATION_STRATEGY",gs,S),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"UNESCAPED_SEQUENCES",fs,S),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"CREATABLE_KIND_MAPPING",As,S),_chunk2Z3O2CFMcjs.d.call(void 0, L,10,"SET_OP_DISTINCT_BY_DEFAULT",hs,S),_chunk2Z3O2CFMcjs.b.call(void 0, L,S),_chunk2Z3O2CFMcjs.c.call(void 0, 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;_chunk2Z3O2CFMcjs.op.register("clickhouse",S);exports.ClickHouse = S; exports.ClickHouseGenerator = jt; exports.unixToTimeSql = ms;
2
+ //# sourceMappingURL=clickhouse.cjs.map