{"version":3,"file":"sql-formatter.min.cjs","mappings":"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AAEwE,cAAcD,KAGnDE,EAAaJ,GACxBA,EAAQK,QAAO,CAACrI,EAAKsI,IAAQvI,KAAKC,IAAIA,EAAKsI,EAAI3N,SAAS,GAG7C4N,EAAsB3J,GAAcA,EAAE4J,QAAQ,QAAS,KAGvDC,EAAmBvE,IAC9BwE,OAnBqBZ,EAmBdhE,OAAO6E,OAAOzE,GAAK0E,OAnBa,IAAI,IAAIC,IAAIf,IAA9BA,KAkBhB,EAIMgB,EAAejI,GAA0B,KAAK5D,KAAK4D,GCpBnDkI,EAAWN,EAAgB,CAEtCM,SAAU,CACR,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,QACA,YACA,UACA,QACA,SACA,OACA,SACA,MACA,OACA,SACA,QACA,cACA,OACA,KACA,QACA,OACA,YACA,QACA,SACA,QACA,OACA,QACA,SACA,OACA,UAEFC,UAAW,CACT,QACA,OACA,QACA,OACA,WACA,YACA,WACA,QACA,MACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,aACA,aACA,UACA,SACA,SACA,OACA,YAGFC,aAAc,CAAC,MAAO,QAAS,UAAW,QAAS,QAAS,QAC5DC,KAAM,CAAC,QAEPC,IAAK,CACH,OACA,OACA,QACA,KACA,MACA,QACA,UACA,WACA,UACA,WACA,mBC5ISC,EAAYX,EAAgB,CAEvCY,KAAM,CACJ,kBACA,8BACA,qBACA,sBACA,eACA,oBACA,wBACA,sBACA,qBACA,sBAGFC,kBAAmB,CACjB,YACA,YACA,MACA,OACA,QACA,UACA,YACA,aACA,MACA,MACA,mBACA,aACA,cACA,aACA,MACA,UACA,YAGFC,UAAW,CACT,YACA,YACA,mBACA,MACA,UACA,SACA,UACA,QACA,UACA,cACA,aACA,MACA,MACA,aACA,OAGFC,qBAAsB,CACpB,wBACA,mBACA,mBACA,kBAGFC,MAAO,CAEL,eACA,eACA,kBACA,iBACA,sBACA,2BACA,gBACA,SACA,cACA,UACA,gBAGFC,QAAS,CAAC,aAEVC,WAAY,CAEV,mBACA,gBACA,aAGFC,KAAM,CACJ,eACA,UACA,OACA,WACA,WACA,YACA,aACA,sBACA,cACA,WACA,aACA,aAGFC,SAAU,CACR,mBACA,WACA,UACA,eACA,eACA,gBACA,iBACA,kBACA,WACA,kBAGFC,UAAW,CAAC,SAEZC,eAAgB,CAAC,kBAEjBC,UAAW,CACT,qBACA,qBACA,WACA,UACA,cACA,eACA,YACA,aACA,cACA,iBACA,YACA,yBACA,cACA,kBACA,kBACA,mBACA,cACA,gBACA,eACA,YACA,gBACA,eACA,cACA,cACA,UACA,aACA,cACA,YACA,YACA,kBACA,cACA,qBACA,kBACA,iBACA,eACA,0BACA,aACA,kBACA,mBACA,kBACA,gBACA,mBACA,kBACA,aACA,YACA,cACA,iBACA,yBACA,iBACA,aACA,mBACA,eACA,eACA,YACA,cACA,gBACA,gBACA,aACA,WACA,eACA,YACA,OACA,QAGFC,KAAM,CAAC,mBAAoB,MAAO,OAAQ,SAAU,UAEpDC,IAAK,CAAC,iBAAkB,kBAAmB,0BAA2B,qBAEtEC,SAAU,CAAC,gBAAiB,UAAW,eAAgB,gBAAiB,oBAExEC,KAAM,CACJ,eACA,aACA,sBACA,aACA,qBACA,mBACA,4BACA,mBACA,kBAGFC,KAAM,CACJ,MACA,OACA,SACA,SACA,cACA,OACA,OACA,MACA,QACA,MACA,KACA,MACA,QACA,WACA,QACA,MACA,cACA,gBACA,cACA,WACA,gBACA,MACA,QACA,QACA,OACA,UACA,QACA,MACA,OACA,OACA,QACA,MACA,OACA,OACA,QACA,MACA,OACA,OACA,QACA,QACA,gBAGFC,WAAY,CACV,cACA,aACA,YACA,OACA,MACA,kBACA,mBAGFC,IAAK,CACH,qBACA,0BACA,mBACA,kBACA,eACA,sBACA,oBACA,WACA,oBACA,kBAGFC,UAAW,CAAC,OAAQ,aAAc,eAAgB,YAAa,QAAS,cAExEC,SAAU,CAAC,gBAEXC,qBAAsB,CACpB,OACA,YACA,aACA,aACA,cACA,SACA,UACA,WACA,YAGFC,OAAQ,CACN,QACA,cACA,cACA,mBACA,MACA,uBACA,wBACA,SACA,kBACA,YACA,SACA,cACA,cACA,WACA,UACA,QACA,OACA,SACA,OACA,QACA,QACA,YACA,yBACA,eACA,kBACA,iBACA,qBACA,eACA,iBACA,gBACA,UACA,SACA,UACA,QACA,OACA,QACA,+BACA,UACA,QACA,cACA,SACA,SACA,YACA,YACA,YACA,iBACA,SACA,YACA,OACA,UACA,SAGFC,KAAM,CACJ,eACA,OACA,UACA,WACA,WACA,YACA,aACA,cACA,cAGFC,UAAW,CACT,oBACA,UACA,SACA,YACA,gBACA,gBACA,iBACA,kBACA,mBACA,kBACA,oBACA,mBACA,mBACA,eACA,cACA,eAGFC,KAAM,CAAC,iBAEPC,YAAa,CAAC,WAAY,KAAM,SAAU,UAE1CC,gBAAiB,CACf,MACA,UACA,SACA,UACA,OACA,QACA,YACA,aACA,uBACA,QACA,eACA,wBACA,OACA,MACA,MACA,OACA,MACA,YACA,SACA,aACA,cACA,MACA,MACA,SACA,WACA,UACA,YAEFC,cAAe,CAAC,aAChBC,cAAe,CAAC,UAAW,QAAS,OAAQ,QAAS,aAAc,UAAW,UAC9EC,iBAAkB,CAEhB,WACA,WACA,SACA,SACA,SACA,wBACA,QACA,OAEFC,eAAgB,CACd,eACA,eACA,oBACA,OACA,WACA,WACA,MACA,YACA,YACA,kBACA,OACA,SACA,QACA,oBACA,MACA,iBACA,UACA,mBACA,SACA,oBACA,OACA,YACA,oBACA,mBACA,oBACA,oBACA,kBACA,mBACA,oBACA,mBACA,mBACA,OACA,QAEFC,SAAU,CAAC,YAAa,WAAY,mBAAoB,mBACxDC,WAAY,CAAC,eAAgB,uBAC7BC,WAAY,CACV,MACA,OACA,QACA,OACA,QACA,OACA,QACA,QACA,OACA,MACA,OACA,UACA,MACA,QACA,KACA,MACA,OACA,QACA,KACA,MACA,UACA,OACA,QACA,MACA,OACA,OACA,MACA,QAEFC,YAAa,CAAC,eAAgB,iBAAkB,kBAChDC,aAAc,CACZ,SAEA,QACA,OACA,SACA,QACA,OACA,QACA,UACA,QACA,OACA,QACA,QACA,SACA,SAEFC,oBAAqB,CAAC,mBAAoB,0BAA2B,eACrEC,UAAW,CAAC,OAAQ,SAAU,OAC9BC,aAAc,CACZ,MACA,QACA,MACA,MACA,SACA,MACA,YACA,aACA,cACA,MACA,aACA,OACA,YACA,QACA,eACA,kBACA,kBACA,OACA,kBACA,cAEFC,WAAY,CACV,eACA,QACA,cACA,OACA,mBACA,KACA,WACA,OACA,OACA,aAEFC,MAAO,CAAC,iBAAkB,gCAC1B3C,IAAK,CAAC,WACN4C,MAAO,CAAC,QAAS,WAGjBC,UAAW,CAAC,QAAS,UAAW,UAAW,aAAc,aAAc,YCxhBnEC,EAAiB1F,EAAc,CAAC,mDAEhC2F,EAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,UACA,SACA,eACA,WACA,QACA,SACA,iBAGA,gBACA,SAEA,MAEA,eACA,oDACA,aAEA,0DACA,+EAEA,aACA,wBACA,kBACA,yBACA,2BAGI4F,EAAiB5F,EAAc,CAEnC,SAEA,gBAEA,+CAEA,0BACA,6BACA,0BACA,YACA,2BACA,sBACA,cACA,gBACA,gBAEA,2BAEA,wCAEA,oBAEA,iBAEA,gCACA,kBAGA,sEACA,gDAEA,wDACA,WACA,eAEA,kBACA,UAEA,qBAEA,oBAEA,sCAEA,0BACA,uCACA,oCACA,6BACA,yBACA,+BACA,4BACA,+BACA,8BACA,gCACA,mBAEA,QACA,SAEA,UACA,oBACA,OACA,WACA,SACA,aACA,QACA,YACA,QACA,QACA,WACA,UACA,MACA,UACA,QACA,oBACA,qBACA,uBACA,QACA,SACA,OAEA,SAEA,gBAG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A,OACA,eACA,SACA,WACA,kBACA,mBACA,UACA,MACA,SACA,iBACA,cACA,eACA,aACA,yBACA,sBACA,uBACA,yBACA,0BACA,0BACA,0BACA,6BACA,UACA,aACA,SACA,mBACA,SACA,kBACA,aACA,aACA,kBACA,eACA,MACA,UACA,QACA,QACA,kBACA,yBACA,UACA,cACA,UACA,WACA,OACA,aACA,WACA,YACA,cACA,MACA,OACA,qBACA,SACA,SACA,QACA,UACA,MACA,aACA,WACA,QACA,QACA,OACA,SACA,KACA,SACA,mBACA,QACA,QACA,OACA,QACA,MACA,kBACA,cACA,mBACA,MACA,SACA,MACA,QACA,iBACA,SACA,aACA,YACA,gBACA,SACA,eACA,WACA,aACA,qBACA,mBACA,SACA,MACA,UACA,OACA,WACA,SACA,QACA,MACA,WACA,UACA,UACA,cACA,SACA,OACA,OACA,eACA,eACA,cACA,iBACA,gBACA,SACA,UACA,MACA,QACA,QACA,kBACA,QACA,OACA,QACA,QACA,SACA,OACA,MACA,OACA,WACA,UACA,YACA,YACA,aACA,aACA,QACA,OACA,QACA,UACA,SACA,WACA,SACA,YACA,MACA,OACA,OACA,YACA,eACA,gBACA,mBACA,gBACA,eACA,UACA,UACA,UACA,YACA,aACA,eACA,YACA,OACA,aACA,WACA,QACA,kBACA,QACA,UACA,cACA,SACA,QACA,QACA,YACA,UACA,WACA,qBACA,iBACA,aACA,wBACA,uBACA,uCACA,OACA,WACA,OACA,gBACA,aACA,YACA,cACA,aACA,YACA,YACA,gBACA,WACA,QACA,WACA,eACA,UACA,iBACA,eACA,QAGFtS,MAAO,CACL,kBACA,oBACA,oBACA,mBACA,YACA,gBACA,eACA,mBACA,YAGFuS,IAAK,CAAC,UAENC,KAAM,CACJ,YACA,eACA,OACA,aACA,QACA,MACA,OACA,aACA,cACA,aACA,YACA,mBAGFC,KAAM,CAAC,UC7TI/F,EAAWN,EAAgB,CAEtCsG,SAAU,CACR,MACA,WACA,QACA,WACA,MACA,KACA,QACA,eACA,aACA,YACA,UACA,KACA,QACA,MACA,YACA,SACA,QACA,UACA,aACA,KACA,UACA,WACA,OACA,QACA,YACA,QACA,QACA,UACA,aACA,SACA,SACA,YACA,aACA,aACA,UACA,WACA,SACA,OACA,UACA,eACA,mBACA,eACA,iBACA,eACA,oBACA,UACA,SACA,OACA,WACA,SACA,UACA,UACA,aACA,gBACA,UACA,WACA,WACA,KACA,WACA,SACA,UACA,WACA,OACA,SACA,WACA,aACA,SACA,WACA,QACA,SACA,YACA,SACA,OACA,WACA,SACA,YACA,QACA,QACA,MACA,OACA,OACA,WACA,YACA,MACA,SACA,OACA,QACA,UACA,OACA,QACA,KACA,YACA,KACA,YACA,QACA,UACA,QACA,QACA,cACA,OACA,KACA,SACA,UACA,MACA,OACA,MACA,WACA,OACA,WACA,QACA,OACA,QACA,SACA,UACA,WACA,OACA,UACA,WACA,OACA,OACA,aACA,eACA,eACA,gBACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,QACA,WACA,OACA,KACA,MACA,KACA,eACA,WACA,QACA,eACA,MACA,QACA,UACA,YACA,OACA,SACA,YACA,cACA,eACA,OACA,YACA,SACA,OACA,YACA,UACA,QACA,SACA,aACA,YACA,UACA,OACA,SACA,QACA,UACA,QACA,aACA,WACA,WACA,SACA,qBACA,SACA,UACA,OACA,SACA,gBACA,aACA,cACA,kBACA,kBACA,gBACA,WACA,MACA,SACA,SACA,aACA,UACA,SACA,WACA,WACA,YACA,eACA,SACA,OACA,SACA,WACA,WACA,SACA,YACA,OACA,WACA,SACA,QACA,UACA,UACA,UACA,SACA,eACA,QACA,aACA,OACA,KACA,UACA,OACA,OACA,SACA,QACA,OACA,QACA,YACA,WACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,MACA,YACA,UACA,QACA,QAGFC,WAAY,CAAC,aC5OT/C,EAAiB1F,EAAc,CAAC,4BAEhC2F,EAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,eACA,4BACA,cAGA,cACA,SAEA,MAEA,aACA,4BACA,aACA,SAEA,2BACA,oCAGI4F,EAAiB5F,EAAc,CAEnC,SACA,mBACA,2BAEA,cAEA,yBAEA,cACA,eACA,gBACA,kBACA,iBACA,gBACA,eACA,oDAEA,mBAEA,uBACA,QACA,KAEA,kBACA,iBACA,iBACA,cACA,aACA,mBACA,kBACA,iBACA,iBACA,mBACA,gBACA,wBACA,aACA,qBACA,wBACA,OACA,QACA,SACA,UACA,eACA,yBACA,kBACA,kBACA,gCACA,eACA,wBACA,cACA,oBACA,mBACA,cACA,kBACA,kBACA,iBACA,oBACA,iBACA,yBACA,cACA,kBACA,iBACA,iCACA,oBACA,gBACA,mBACA,kBACA,iBACA,kBACA,qBACA,iBACA,OACA,sBACA,WACA,UACA,oBACA,UACA,QACA,eACA,kBACA,QACA,eACA,UACA,QACA,aACA,OACA,UACA,UACA,UACA,oBACA,SACA,SACA,WACA,YACA,cACA,iBACA,0BACA,wCACA,0CACA,yBACA,qCACA,qBACA,2BACA,gCACA,8BACA,sDACA,gCACA,2BACA,yBACA,wBACA,iCACA,6CACA,0BACA,8BACA,oBACA,oBACA,qCACA,mCACA,0BACA,WACA,wBACA,SACA,cACA,aAGI6F,EAAwB7F,EAAc,CAAC,cAAe,eAAgB,oBAEtE8F,EAAgB9F,EAAc,CAClC,OACA,qCACA,yBAGI+F,EAAkB/F,EAAc,CACpC,YACA,YACA,WACA,2BAIW0I,EAAsB,CACjCzC,iBAAkB,CAChBP,eADgB,EAEhBC,gBAAiB,IAAIA,KAAoBC,GACzCC,sBAHgB,EAIhBC,cAJgB,EAKhBC,gBALgB,EAMhBG,iBAAkB1D,EAClB2D,sBAAuBtD,EACvBwD,YAAa,CACX,CAAEC,MAAO,QAASC,SAAU,CAAC,IAAK,IAAK,OACvC,CAAED,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAM,KAAM,MAAOC,eAAe,IAEvEC,WAAY,CAAC,SACbC,WAAY,CAAExF,MAAO,OACrB0F,WAAY,CAAEC,YAAY,EAAMC,MAAO,CAAC,MACxC6B,WAAY,CAAEzH,MAAO,MAAOC,KAAM,OAClCgG,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAElDa,cAAe,CACbpC,eAAcA,ICnML/C,EAAYX,EAAgB,CAEvCc,UAAW,CAET,YACA,MACA,OACA,cACA,QACA,YACA,YACA,aACA,QACA,aACA,kBACA,QACA,WACA,gBACA,iBACA,UACA,MACA,SACA,MACA,kBACA,kBAEA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,OACA,aACA,SACA,cACA,MACA,UACA,WACA,MACA,WACA,gBACA,SACA,YAGFoF,OAAQ,CACN,MACA,SACA,OACA,WACA,YACA,cACA,aACA,cACA,YACA,UACA,wBACA,aACA,QACA,OACA,OACA,QACA,QACA,gBACA,gBACA,SACA,SACA,aACA,SACA,YACA,SACA,QACA,SACA,OACA,UACA,eACA,cACA,OACA,UACA,cACA,OACA,mBACA,MACA,OACA,WACA,mBACA,SACA,WACA,MACA,OACA,MACA,UACA,UACA,WACA,oBACA,mBACA,OACA,MACA,UACA,aACA,gBACA,YACA,YACA,OACA,SACA,kBACA,iBACA,MACA,kBACA,mBACA,WACA,UACA,iBACA,cACA,eACA,aACA,UACA,aACA,SACA,YACA,aACA,gBACA,YACA,gBACA,cACA,cACA,UACA,mBACA,SACA,UACA,cACA,iBACA,cACA,eACA,MACA,UACA,YACA,QACA,QACA,kBACA,qBACA,qBACA,uBACA,eACA,UACA,UACA,WACA,WACA,WACA,YACA,cACA,cACA,cACA,eACA,MACA,WACA,OACA,qBACA,qBACA,mBACA,cACA,gBACA,WACA,kBACA,aACA,iBACA,YACA,gBACA,WACA,qBACA,SACA,SACA,QACA,MACA,UACA,YACA,UACA,aACA,YACA,SACA,aACA,cACA,aACA,eACA,cACA,aACA,aACA,OACA,WACA,QACA,QACA,OACA,SACA,KACA,OACA,mBACA,SACA,QACA,MACA,QACA,OACA,QACA,kBACA,MACA,cACA,mBACA,MACA,SACA,MACA,QACA,YACA,iBACA,SACA,aACA,YACA,gBACA,SACA,eACA,WACA,qBACA,MACA,SACA,MACA,eACA,UACA,KACA,WACA,SACA,MACA,QACA,WACA,UACA,UACA,cACA,iBACA,OACA,eACA,eACA,iBACA,gBACA,SACA,UACA,MACA,QACA,kBACA,QACA,QACA,OACA,MACA,QACA,QACA,SACA,OACA,MACA,OACA,WACA,UACA,QACA,OACA,QACA,UACA,SACA,WACA,SACA,YACA,aACA,eACA,MACA,OACA,OACA,mBACA,gBACA,YACA,oBACA,gBACA,UACA,UACA,UACA,YACA,eACA,aACA,YACA,aACA,OACA,kBACA,QACA,WACA,QACA,QACA,aACA,aACA,QACA,mBACA,YACA,qBACA,wBACA,iBACA,UACA,aACA,wBACA,WACA,OACA,OACA,gBACA,aACA,YACA,cACA,aACA,YACA,gBACA,WACA,QACA,SACA,eACA,UACA,cACA,MACA,eACA,OACA,SAGFtS,MAAO,CACL,aACA,2BACA,sBACA,wBACA,mBACA,0BACA,qBACA,yBACA,oBACA,wBACA,mBACA,aACA,YACA,gBACA,eACA,mBACA,YAGFuS,IAAK,CAAC,UAENC,KAAM,CACJ,YACA,aACA,cACA,MACA,aACA,OACA,YACA,QACA,eACA,OACA,kBACA,cAGFC,KAAM,CAAC,UC3WI/F,EAAWN,EAAgB,CAItCsG,SAAU,CACR,SACA,YACA,SACA,SACA,WACA,MACA,QACA,MACA,WACA,QACA,QACA,MACA,MACA,SACA,WACA,QACA,YACA,aACA,KACA,MACA,aACA,YACA,SACA,SACA,aACA,gBACA,aACA,SACA,QACA,UACA,SACA,OACA,MACA,UACA,OACA,aACA,KACA,QACA,OACA,SACA,cACA,OACA,OACA,QACA,OACA,YACA,QACA,KACA,QACA,UACA,UACA,aACA,SACA,UACA,SACA,UACA,cACA,WACA,SACA,aACA,YACA,UACA,kBACA,aACA,WACA,aACA,WACA,UACA,WACA,OACA,QACA,YACA,SACA,WACA,QACA,OACA,YACA,UACA,eACA,eACA,iBACA,iBACA,eACA,oBACA,mBACA,eACA,SACA,QACA,OACA,WACA,oBACA,mBACA,OACA,MACA,OACA,aACA,WACA,SACA,SACA,kBACA,iBACA,aACA,aACA,UACA,UACA,WACA,QACA,SACA,aACA,SACA,WACA,aACA,YACA,OACA,WACA,aACA,SACA,gBACA,cACA,UACA,WACA,aACA,WACA,KACA,WACA,SACA,OACA,UACA,OACA,OACA,SACA,QACA,SACA,WACA,aACA,MACA,WACA,SACA,WACA,QACA,SACA,QACA,SACA,YACA,YACA,YACA,UACA,SACA,OACA,SACA,WACA,UACA,QACA,SACA,QACA,YACA,OACA,QACA,cACA,MACA,UACA,SACA,OACA,WACA,OACA,OACA,WACA,WACA,UACA,YACA,MACA,SACA,KACA,OACA,QACA,UACA,QACA,UACA,OACA,WACA,eACA,SACA,OACA,OACA,OACA,QAEA,WACA,KACA,SACA,YACA,aACA,KACA,UACA,YACA,YACA,YACA,QACA,UACA,YACA,MACA,WACA,UACA,SACA,QACA,QACA,cACA,SACA,YACA,YACA,YACA,YACA,OACA,KACA,SACA,YACA,UACA,OACA,OACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,aACA,OACA,MACA,OACA,QACA,MACA,WACA,aACA,UACA,OACA,QACA,OACA,SACA,OACA,QACA,WACA,UACA,QACA,YACA,YACA,iBACA,WACA,UACA,OACA,WACA,MACA,SACA,OACA,OACA,aACA,OACA,UACA,eACA,WACA,QACA,cACA,eACA,aACA,SACA,UACA,WACA,SACA,QACA,OACA,WACA,QACA,SACA,YACA,MACA,WACA,QACA,QACA,SACA,MACA,YACA,UACA,KACA,UACA,UACA,WACA,aACA,aACA,aACA,OACA,UACA,aACA,MACA,UACA,YACA,QACA,OACA,QACA,WACA,OACA,SACA,KACA,MACA,SACA,MACA,YACA,OACA,KACA,OACA,OACA,WACA,SACA,KACA,QACA,aACA,WACA,MACA,QACA,OACA,UACA,aACA,UACA,SACA,OACA,WACA,YACA,OACA,YACA,cACA,eACA,aACA,UACA,WACA,OACA,UACA,eACA,kBACA,kBACA,SACA,aACA,YACA,OACA,OACA,WACA,UACA,UACA,UACA,QACA,SACA,aACA,YACA,UACA,YACA,QACA,QACA,OACA,kBACA,SACA,OACA,QACA,WACA,aACA,cACA,UACA,cACA,UACA,SACA,SACA,QACA,WACA,UACA,SACA,qBACA,SACA,YACA,UACA,SACA,MACA,QACA,WACA,SACA,UACA,MACA,aACA,YACA,OACA,MACA,MACA,YACA,OACA,SACA,SACA,aACA,SACA,SACA,SACA,UACA,SACA,UACA,SACA,YACA,WACA,UACA,eACA,MACA,SACA,SACA,OACA,OACA,OACA,SACA,WACA,MACA,QACA,iBACA,oBACA,UACA,QACA,WACA,YACA,SACA,WACA,YACA,UACA,UACA,cACA,cACA,QACA,aACA,cACA,MACA,OACA,aACA,OACA,YACA,KACA,cACA,WACA,UACA,OACA,aACA,OACA,WACA,WACA,OACA,OACA,QACA,SACA,OACA,UACA,SACA,QACA,SACA,WACA,MACA,QACA,MACA,OACA,SACA,QACA,QACA,SACA,WACA,UACA,OACA,UACA,aACA,OACA,WACA,OACA,OACA,WACA,QACA,QACA,OACA,SACA,UACA,UACA,UACA,QACA,aACA,SACA,gBACA,UACA,aACA,YACA,cACA,aACA,YACA,WACA,gBACA,WACA,QACA,SACA,eACA,WACA,UACA,cACA,eACA,YACA,OACA,QACA,MACA,UC1fE9C,EAAiB1F,EAAc,CAAC,4BAEhC2F,EAAkB3F,EAAc,CAEpC,OACA,OACA,OACA,QACA,WACA,SACA,eACA,uCACA,SACA,uBACA,QACA,kBACA,gBACA,eAGA,cACA,SAEA,MAEA,aACA,4BACA,aACA,SACA,SAEA,4BACA,kBAEA,yCAGI4F,EAAiB5F,EAAc,CAEnC,SACA,mBACA,gCAEA,cAEA,aAEA,cACA,eACA,iBACA,gBACA,kBACA,gBACA,gDACA,eACA,uCACA,gBACA,sFAEA,mBAEA,uBACA,qBAEA,kBACA,iDACA,0CACA,iDACA,8CACA,wBACA,OACA,QACA,iJACA,yDACA,iEACA,4CACA,2EACA,uBACA,4BACA,yGACA,gCACA,uCACA,gBACA,cACA,+CACA,iBACA,iCACA,UACA,kBACA,iBACA,oBACA,iCACA,iBACA,uBACA,uBACA,2HACA,+DACA,sBACA,sBAEA,eACA,wCACA,sCACA,qJACA,eACA,UACA,mIACA,uDACA,aACA,OACA,UACA,gBACA,UACA,yBACA,4BACA,sJACA,wCACA,YACA,iBACA,+GACA,wCACA,0BACA,aACA,iDACA,uDACA,4BACA,mBACA,kBACA,0BACA,MACA,wBACA,iDAGI6F,EAAwB7F,EAAc,CAAC,cAAe,eAAgB,oBAEtE8F,EAAgB9F,EAAc,CAClC,OACA,qCACA,iCACA,yBAGI+F,EAAkB/F,EAAc,CACpC,YACA,YACA,WACA,2BAIW4I,EAAuB,CAClC3C,iBAAkB,CAChBP,eADgB,EAEhBC,gBAAiB,IAAIA,KAAoBC,GACzCC,sBAHgB,EAIhBC,cAJgB,EAKhBC,gBALgB,EAMhBG,iBAAkB1D,EAClB2D,sBAAuBtD,EACvBwD,YAAa,CACX,CAAEC,MAAO,QAASC,SAAU,CAAC,IAAK,IAAK,OACvC,CAAED,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAM,KAAM,MAAOC,eAAe,IAEvEC,WAAY,CAAC,SACbC,WAAY,CAAExF,MAAO,OACrB0F,WAAY,CAAEC,YAAY,EAAMC,MAAO,CAAC,MACxC6B,WAAY,CAAEzH,MAAO,MAAOC,KAAM,OAClCgG,UAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAElDa,cAAe,CACbpC,eAAcA,IC9KL/C,EAAYX,EAAgB,CAEvC4B,KAAM,CACJ,MACA,OACA,OACA,OACA,MACA,SACA,OACA,OACA,UACA,OACA,MACA,UAEA,MACA,YACA,QACA,WACA,MACA,QACA,KACA,MACA,QACA,OACA,WACA,KACA,OACA,WACA,MACA,QACA,UACA,OACA,QACA,YACA,aACA,qBACA,OACA,MACA,OACA,MACA,QACA,gBAEFZ,MAAO,CAAC,iBAAkB,WAAY,aAAc,OAAQ,cAC5DE,WAAY,CAAC,SAAU,QACvBC,KAAM,CACJ,aACA,OACA,WACA,cACA,WACA,WACA,MACA,UACA,aACA,YACA,UACA,gBACA,qBACA,OACA,WACA,SACA,QACA,iBACA,WACA,UACA,SACA,YACA,UACA,mBACA,QACA,iBACA,aACA,QAEFmB,YAAa,CAAC,cAAe,WAAY,KAAM,YAAa,SAAU,SAAU,OAChFJ,OAAQ,CACN,QACA,SACA,mBACA,MACA,SACA,YACA,iBACA,SACA,MACA,SACA,QACA,cACA,gBACA,kBACA,UACA,UACA,QACA,QACA,SACA,cACA,SACA,QACA,OACA,QACA,SACA,eACA,YACA,SACA,QACA,iBACA,iBACA,SACA,UACA,OACA,QACA,YACA,UACA,QACA,QACA,aACA,SACA,YACA,YACA,OACA,QACA,WACA,SAEFyE,QAAS,CACP,OACA,eACA,YACA,cACA,oBACA,oBAEFlG,KAAM,CACJ,cACA,cACA,QACA,mBACA,eACA,OACA,cACA,iBACA,MACA,UACA,MACA,OACA,OACA,gBACA,WAEFK,UAAW,CACT,MACA,eACA,cACA,OACA,QACA,YACA,aACA,oBACA,MACA,MACA,QACA,aACA,oBACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,cACA,MACA,UACA,WACA,YAEFlN,MAAO,CAAC,UAAW,SAAU,aAAc,kBAAmB,aAAc,SAE5EgT,OAAQ,CACN,OACA,MACA,cACA,aACA,OACA,aACA,aACA,YACA,eACA,SAMFrD,UAAW,CAAC,UAAW,UAAW,UAAW,UCxMlCjD,EAAWN,EAAgB,CAGtC6G,YAAa,CACX,MACA,QACA,QACA,UACA,UACA,MACA,SACA,SACA,UACA,UACA,SACA,UACA,YACA,gBACA,aACA,UACA,UACA,UACA,cACA,UACA,cACA,WACA,OACA,YACA,WACA,MACA,eACA,WACA,UACA,YACA,aACA,OACA,cACA,YACA,UACA,aACA,YACA,SACA,UACA,YACA,UACA,SACA,SACA,OACA,aACA,QACA,SACA,YACA,YACA,eACA,OACA,gBACA,SACA,QACA,UACA,SACA,cACA,cACA,QACA,MACA,OACA,WACA,QACA,QACA,OACA,WACA,OACA,QACA,UACA,OACA,UACA,eACA,WACA,QACA,SACA,QACA,OACA,SACA,UACA,UACA,SACA,eACA,eACA,YACA,QACA,cACA,aACA,OACA,SACA,aACA,aACA,QACA,OACA,WACA,UACA,eACA,eACA,SACA,SACA,SACA,UACA,cACA,WACA,UACA,OACA,QACA,SACA,UACA,SACA,OACA,QACA,kBACA,SACA,OACA,SACA,OACA,gBACA,SACA,OACA,SACA,MACA,aACA,SACA,cACA,SACA,SACA,SACA,gBACA,YACA,aACA,UACA,QACA,eACA,YACA,OACA,YACA,SACA,QACA,WACA,MACA,MACA,MACA,eACA,aACA,OACA,QACA,OACA,aACA,YACA,QACA,SACA,WACA,cACA,OACA,QACA,QACA,MACA,OACA,SACA,aACA,QACA,OACA,WACA,SACA,MACA,aACA,WACA,UACA,UACA,gBACA,OACA,QACA,SACA,QACA,OACA,QACA,UACA,UACA,cACA,QAEFC,SAAU,CACR,MACA,QACA,MACA,QACA,KACA,gBACA,UACA,SACA,SACA,UACA,OACA,KACA,OACA,OACA,OACA,SACA,OACA,SACA,QACA,OACA,UACA,eACA,oBACA,SACA,WACA,OACA,UACA,SACA,WACA,WACA,SACA,OACA,OACA,MACA,WACA,SACA,WACA,WACA,QACA,QACA,QACA,YACA,MACA,OACA,OACA,WACA,QACA,QACA,WACA,SACA,KACA,SACA,KACA,QACA,SACA,MACA,YACA,WACA,OACA,KACA,OACA,UACA,OACA,OACA,OACA,QACA,QACA,MACA,OACA,OACA,MACA,OACA,KACA,KACA,KACA,QACA,MACA,QACA,OACA,cACA,YACA,UACA,YACA,WACA,YACA,QACA,QACA,SACA,SACA,QACA,SACA,MACA,OACA,SACA,MACA,WACA,QACA,cACA,OACA,YACA,KACA,YACA,UACA,OACA,WACA,YACA,QACA,aACA,SACA,OACA,QACA,eACA,SACA,UACA,OACA,QACA,SACA,OACA,SACA,OACA,SACA,QACA,WACA,QACA,QACA,aACA,UACA,UACA,aACA,YACA,UACA,QACA,UACA,YACA,QACA,OACA,UACA,QAEFC,UAAW,CACT,WACA,eACA,MACA,MACA,MACA,UACA,OACA,SACA,WACA,cACA,kBC7UEvD,EAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,UACA,aACA,gBACA,QAKA,sBACA,SAEA,MAEA,aACA,4BACA,aACA,kBAGA,qCAGA,2BACA,yBAEA,6CACA,wDAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,cAEA,yBAEA,cACA,YAEA,mBAEA,QACA,SACA,MACA,WACA,OACA,QACA,OACA,YACA,YACA,eAGI6F,GAAwB7F,EAAc,CAAC,2BAEvC8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBAEA,mBAGI+F,GAAkB/F,EAAc,CAAC,2BAG1BkJ,GAAuB,CAClCjD,iBAAkB,CAChBP,eADgB,EAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,EAClB2D,sBAAuBtD,EACvBuD,YAAa,CAAC,MACdC,YAAa,CAAC,QAAS,SACvBI,WAAY,CAAC,MACbO,cAAe,CAAC,CAAEV,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAC/DW,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,MAAO,KAAM,IAAK,OAEzDa,cAAe,CACbpC,eAAcA,KChGZ,SAAUwB,GAAYC,GAC1B,OAAOA,EAAOrQ,KAAI,CAACoC,EAAOpB,KACxB,MAAMmR,EAAY9B,EAAOrP,EAAI,IAAMmG,EACnC,GAAI1D,EAAQiE,IAAItF,IAA6B,MAAnB+P,EAAU7O,KAElC,OAAO,OAAP,wBAAYlB,GAAK,CAAEhD,KAAM2H,EAAUiB,yBAErC,MAAMsI,EAAYD,EAAOrP,EAAI,IAAMmG,EACnC,OAAI1D,EAAQqE,OAAO1F,IAA6B,MAAnBkO,EAAUhN,KAE9B,OAAP,wBAAYlB,GAAK,CAAEhD,KAAM2H,EAAUiB,yBAE9B5F,CAAP,GAEH,CChBM,MAAMoJ,GAAWN,EAAgB,CAEtC8G,SAAU,CACR,aACA,MACA,MACA,QACA,UACA,MACA,KACA,MACA,aACA,SACA,UACA,SACA,SACA,OACA,OACA,KACA,OACA,UACA,OACA,SACA,OACA,YACA,QACA,UACA,SACA,YACA,aACA,WACA,UACA,SACA,QACA,eACA,eACA,eACA,oBACA,eACA,SACA,WACA,YACA,WACA,kBACA,aACA,aACA,MACA,UACA,UACA,UACA,UACA,SACA,mBACA,OACA,WACA,gBACA,WACA,cACA,MACA,gBACA,SACA,OACA,OACA,OACA,OACA,SACA,WACA,UACA,SACA,SACA,OACA,UACA,QACA,QACA,QACA,SACA,SACA,MACA,QACA,UACA,OACA,WACA,UACA,QACA,QACA,SACA,gBACA,mBACA,cACA,cACA,KACA,SACA,oBACA,oBACA,KACA,QACA,SACA,QACA,QACA,cACA,SACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,YACA,WACA,OACA,KACA,UACA,OACA,MACA,OACA,OACA,UACA,QACA,OACA,OACA,QACA,SACA,QACA,OACA,YACA,iBACA,OACA,OACA,WACA,WACA,OACA,eACA,0BACA,gCACA,QACA,WACA,aACA,YACA,aACA,YACA,qBACA,gBACA,MACA,WACA,UACA,MACA,qBACA,OACA,UACA,SACA,KACA,WACA,SACA,aACA,KACA,QACA,MACA,QACA,UACA,OACA,gBACA,kBACA,YACA,WACA,YACA,UACA,YACA,QACA,QACA,OACA,QACA,aACA,OACA,YACA,gBACA,aACA,SACA,UACA,SACA,SACA,UACA,UACA,WACA,WACA,SACA,YACA,SACA,QACA,QACA,aACA,OACA,SACA,UACA,qBACA,SACA,YACA,YACA,MACA,OACA,SACA,OACA,WACA,UACA,WACA,MACA,eACA,WACA,aACA,iBACA,sBACA,mBACA,MACA,WACA,oBACA,mBACA,qBACA,gBACA,QACA,aACA,OACA,WACA,UACA,WACA,KACA,WACA,UACA,OACA,OACA,QACA,SACA,SACA,WACA,SACA,QACA,MACA,QACA,WACA,WACA,gBACA,SACA,YACA,UACA,eACA,UACA,OACA,QACA,QACA,SACA,OACA,QACA,MACA,aACA,cC7PSnG,GAAYX,EAAgB,CAEvCkH,IAAK,CACH,UACA,aACA,UACA,SACA,UACA,OACA,QACA,YACA,UACA,UACA,WACA,WACA,cACA,SACA,aACA,UACA,cACA,eACA,gBACA,iBACA,MACA,OACA,MACA,SACA,MACA,MACA,MACA,YACA,QACA,WACA,eACA,kBACA,kBACA,OACA,aACA,eACA,MACA,SACA,aACA,cACA,UACA,SACA,YACA,MACA,cACA,OACA,cACA,WACA,UACA,WACA,MACA,OACA,UACA,cACA,cACA,OACA,OACA,QACA,YACA,MACA,kBACA,YACA,aACA,OACA,UACA,mBACA,cACA,MACA,eACA,eACA,gBACA,cACA,cACA,WACA,SACA,yBACA,YACA,gBACA,OACA,aACA,MACA,MACA,QACA,WACA,UACA,aACA,YACA,YACA,UACA,mBACA,gBACA,cACA,cACA,MACA,SACA,UACA,MACA,aACA,eACA,QACA,cACA,QACA,SACA,aACA,cACA,YACA,gBACA,WACA,WACA,MACA,SACA,QACA,SACA,eACA,eACA,aACA,oBACA,oBACA,eACA,gBACA,qBACA,aACA,gBACA,cACA,eACA,cACA,YACA,cACA,aACA,aACA,mBACA,sBACA,aACA,aACA,cACA,cACA,eACA,WACA,cACA,YACA,eACA,aACA,aACA,WACA,iBACA,QACA,QACA,SACA,UACA,KACA,YACA,SACA,MACA,QACA,OACA,QACA,OACA,cACA,QACA,eACA,WACA,WACA,WACA,mBACA,kBACA,MACA,YACA,aACA,MACA,OACA,MACA,eACA,MACA,aACA,cACA,KACA,MACA,QACA,QACA,eACA,iBACA,gBACA,UACA,OACA,oBACA,eACA,iBACA,UACA,QACA,OACA,cACA,QACA,eACA,cACA,MACA,OACA,OACA,OACA,MACA,QACA,UACA,QACA,OACA,SACA,cACA,gBACA,kBACA,UACA,WACA,MACA,WACA,cACA,cACA,YACA,UACA,UACA,aACA,QACA,aACA,sBACA,QACA,iBACA,YACA,QACA,OACA,aACA,UACA,UACA,aACA,0BACA,uBACA,4BACA,WAEA,WACA,SAGA,UACA,WACA,YACA,MACA,UACA,SACA,UACA,MACA,UACA,QAEA,QACA,SACA,mBACA,OACA,MACA,SACA,OACA,OACA,gBACA,YACA,OACA,YACA,UACA,mBAEA,OACA,WACA,YACA,UC1QE1D,GAAiB1F,EAAc,CAAC,0CAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,eACA,WACA,QACA,SACA,uBAGA,kEACA,0CACA,SACA,0BAEA,MAEA,yFACA,wDAEA,cAGI4F,GAAiB5F,EAAc,CAEnC,iCAEA,8CAEA,qCAEA,4CACA,+BACA,yCACA,4BACA,cACA,gBACA,iBACA,uBACA,4BAEA,mBAEA,iBACA,yBACA,cACA,iBACA,kBACA,eACA,uBACA,iBACA,eACA,aACA,aACA,UACA,gBACA,cACA,eACA,gBACA,QACA,SACA,cACA,OACA,mBACA,cACA,aACA,iBACA,SACA,4BACA,kBACA,eACA,kBACA,eACA,mBACA,cACA,kBACA,gBACA,uBACA,iBACA,sBACA,cACA,qBACA,WACA,gBACA,aACA,gBACA,aACA,eACA,iBACA,YACA,gBACA,cACA,eACA,YACA,YACA,UACA,UACA,QACA,kBACA,4BACA,QACA,UACA,OACA,iBACA,iBACA,OACA,mBACA,wBACA,kBACA,aACA,iBACA,UACA,oBACA,oBACA,oBACA,eACA,cACA,eACA,cACA,eACA,oBACA,gBACA,cACA,WACA,SACA,WACA,YACA,oBACA,mBACA,yBACA,YACA,eACA,WACA,gBACA,kBACA,OACA,2BACA,yBACA,eACA,mBACA,qBACA,qBACA,qBACA,yBACA,iBACA,eACA,oBACA,uBACA,oBACA,uBACA,sBACA,2BACA,wBACA,uBACA,oBACA,sBACA,mBACA,mBACA,iBACA,cACA,4BACA,eACA,cACA,cACA,eACA,qBACA,uBACA,cACA,aACA,eACA,wBACA,YACA,eACA,mBACA,qBACA,mBACA,yBACA,2BACA,sBACA,eACA,sBACA,kBACA,sBACA,wBACA,mBACA,eACA,gBACA,2BACA,uBACA,eACA,qBACA,sBACA,eACA,aACA,mBACA,oBACA,cACA,uBACA,oBACA,cACA,gBACA,uBACA,iBACA,gBACA,wBACA,oBACA,WACA,SACA,qBACA,mBACA,gBACA,cACA,oBACA,oBACA,kBACA,eACA,aACA,mBACA,mBACA,eACA,MACA,WACA,YACA,SACA,aACA,aACA,cACA,aAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,6BACA,2BAGI8F,GAAgB9F,EAAc,CAClC,OACA,8BACA,uBACA,eACA,sCAEA,kBAGI+F,GAAkB/F,EAAc,CACpC,gDACA,gBACA,2BAIWqJ,GAA0B,CACrCpD,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBuD,aAAa,EACbpD,iBAAkB1D,GAClB2D,sBAAuBtD,GAEvBwD,YAAa,CACX,WACA,WACA,CAAEC,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAE1DC,WAAY,CAAC,MACbC,WAAY,CAAExF,MAAO,IAAKC,KAAM,IAAKoI,sBAAsB,GAC3DvC,cAAe,CACb,CAAEC,MAAO,sBACT,CAAEX,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAEjDI,WAAY,CAAEC,YAAY,GAC1BK,iBAAkB,CAAC,KAAM,KACzBC,UAAW,CAAC,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAAO,KAAM,KAAM,KAC1EC,YAAWA,IAEbY,cAAe,CACbpC,eAAcA,KCtSLpD,GAAWN,EAAgB,CAEtC8G,SAAU,CACR,aACA,MACA,MACA,QACA,UACA,MACA,KACA,MACA,aACA,SACA,UACA,SACA,SACA,OACA,OACA,KACA,OACA,UACA,OACA,SACA,OACA,YACA,QACA,UACA,SACA,YACA,aACA,WACA,UACA,SACA,QACA,OACA,YACA,eACA,eACA,oBACA,eACA,SACA,WACA,YACA,WACA,kBACA,aACA,aACA,MACA,UACA,UACA,UACA,UACA,SACA,aACA,OACA,WACA,gBACA,WACA,cACA,MACA,SACA,OACA,OACA,OACA,OACA,SACA,QACA,WACA,UACA,SACA,SACA,OACA,UACA,QACA,QACA,cACA,QACA,SACA,SACA,MACA,QACA,UACA,OACA,WACA,WACA,YACA,MACA,QACA,QACA,WACA,SACA,SACA,gBACA,mBACA,cACA,cACA,KACA,SACA,KACA,QACA,SACA,QACA,QACA,cACA,SACA,KACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,YACA,WACA,OACA,iBACA,kBACA,KACA,UACA,OACA,aACA,MACA,OACA,OACA,MACA,aACA,UACA,OACA,UACA,QACA,OACA,OACA,QACA,SACA,QACA,OACA,YACA,iBACA,OACA,OACA,WACA,WACA,OACA,eACA,cACA,gCACA,QACA,WACA,aACA,YACA,aACA,YACA,qBACA,gBACA,MACA,WACA,UACA,MACA,qBACA,YACA,QACA,OACA,UACA,KACA,KACA,WACA,kBACA,SACA,aACA,KACA,QACA,MACA,QACA,UACA,OACA,YACA,eACA,YACA,UACA,YACA,QACA,QACA,OACA,OACA,QACA,aACA,OACA,YACA,aACA,SACA,UACA,SACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,QACA,QACA,MACA,OACA,aACA,SACA,UACA,qBACA,SACA,YACA,YACA,MACA,OACA,SACA,WACA,UACA,WACA,MACA,eACA,WACA,aACA,iBACA,sBACA,mBACA,MACA,WACA,SACA,gBACA,SACA,QACA,aACA,OACA,WACA,UACA,WACA,KACA,WACA,UACA,OACA,OACA,QACA,SACA,SACA,WACA,SACA,QACA,MACA,QACA,WACA,WACA,gBACA,SACA,YACA,UACA,eACA,UACA,UACA,OACA,QACA,QACA,SACA,OACA,QACA,MACA,aACA,cCzQSnG,GAAYX,EAAgB,CAEvCkH,IAAK,CACH,MACA,OACA,UACA,UACA,cACA,cAEA,YACA,QACA,OACA,OACA,QACA,MACA,YACA,MACA,cACA,SACA,UACA,YACA,aACA,SACA,UACA,oBACA,sBACA,mBACA,kBACA,kBACA,OACA,OACA,UACA,OACA,cACA,mBACA,UACA,WACA,eACA,YACA,WACA,SACA,YACA,gBACA,OACA,UACA,aACA,MACA,MACA,QACA,QACA,YACA,UACA,eACA,eACA,eACA,oBACA,eACA,UACA,WACA,OACA,WACA,cACA,WACA,WACA,MACA,UACA,aACA,YACA,YACA,UACA,UACA,aACA,MACA,MACA,MACA,aACA,UACA,eACA,QACA,cACA,cACA,QACA,SACA,eACA,mBACA,aACA,cACA,YACA,gBACA,iBACA,qBACA,2BACA,wBACA,+BACA,aACA,WACA,WACA,eACA,WACA,cACA,gBACA,MACA,OACA,cACA,KACA,SAEA,YACA,YACA,aACA,aACA,SACA,QACA,0BACA,0BACA,sBACA,oBACA,qBACA,uBACA,0BACA,gCACA,iCACA,wBACA,wBACA,qCACA,oCACA,wBACA,2BACA,6BACA,yBACA,2BACA,sBACA,uBACA,WACA,KACA,eACA,UACA,iBACA,iBACA,UACA,SACA,cACA,UACA,eACA,UACA,SACA,aACA,oBACA,oBACA,gBACA,gBACA,qBACA,aACA,eACA,cACA,YACA,cACA,aACA,mBACA,sBACA,cACA,iBACA,gBACA,cACA,aACA,cACA,eACA,oBACA,gCACA,cACA,WACA,oBACA,oBACA,aACA,YACA,eACA,aACA,aACA,MACA,WACA,iBACA,aACA,QACA,OACA,QACA,OACA,SACA,OACA,aACA,KACA,YACA,YACA,iBACA,SACA,MACA,QACA,OACA,QACA,OACA,QACA,WACA,WACA,WACA,kBACA,QACA,MACA,cACA,eACA,YACA,cACA,YACA,gBACA,cACA,aACA,YACA,MACA,YACA,cACA,MACA,MACA,SACA,MACA,QACA,YACA,kBACA,aACA,eACA,aACA,MACA,SACA,WACA,aACA,MACA,YACA,QACA,SACA,MACA,eAEA,MACA,eACA,aACA,cACA,KACA,QACA,UACA,WACA,MACA,QACA,uBACA,eACA,UACA,QACA,UACA,OACA,eACA,OACA,SACA,eACA,cACA,iBACA,gBACA,oBACA,eACA,SACA,UACA,UACA,QACA,QACA,gBACA,QACA,YACA,aACA,OACA,QACA,SACA,cACA,SACA,eACA,OACA,OACA,OACA,MACA,QACA,UACA,cACA,kBACA,QACA,OACA,UACA,cACA,eACA,YACA,YACA,qBACA,cACA,aACA,cACA,gBACA,aACA,gBACA,eACA,cACA,cACA,qBACA,cACA,cACA,YACA,kBACA,qBACA,aACA,sBACA,qBACA,eACA,kBACA,qBACA,kBACA,iBACA,uBACA,mBACA,kBACA,gBACA,cACA,aACA,cACA,aACA,oBACA,cACA,YACA,kBACA,iBACA,0BACA,2BACA,qBACA,eACA,kBACA,mBACA,kBACA,oBACA,mBACA,mBACA,kBACA,mBACA,qBACA,eACA,cACA,qBACA,sBACA,mBACA,kBACA,YACA,kBACA,iBACA,cACA,UACA,gBACA,YACA,mBACA,aACA,eACA,WACA,cACA,YACA,OACA,OACA,mBACA,wBACA,MACA,SACA,aACA,cACA,cACA,SACA,UACA,SACA,YACA,kBACA,UACA,MACA,UACA,cACA,MACA,OACA,cACA,cACA,WACA,YACA,eACA,gBACA,YACA,UACA,aACA,OACA,WACA,QACA,aACA,sBACA,QACA,iBACA,YACA,QAEA,WACA,WACA,gBACA,OACA,aACA,cACA,6BACA,SACA,UACA,WACA,WACA,UACA,6BACA,oCACA,OACA,UACA,aACA,gBAEA,OACA,WAGA,MACA,UACA,WACA,YACA,MACA,UACA,SACA,UACA,MACA,UACA,QACA,QACA,SACA,mBACA,OACA,WACA,YACA,OACA,OACA,OACA,gBACA,UACA,mBACA,SACA,YACA,OACA,OACA,UCjcE1D,GAAiB1F,EAAc,CAAC,0CAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,QACA,SAGA,kEACA,0CACA,SACA,0BAEA,MAEA,yFACA,6CAGI4F,GAAiB5F,EAAc,CAEnC,iCAEA,8CAEA,qCAEA,cACA,eACA,6BACA,gBACA,mBACA,gBACA,iBACA,uBAEA,mBAEA,iBACA,cACA,iBACA,iBACA,sBACA,kBACA,uBACA,eACA,mBACA,aACA,aACA,gBACA,SACA,cACA,OACA,mBACA,4BACA,+BACA,cACA,iBACA,QACA,SACA,kBACA,eACA,kBACA,kBACA,eACA,uBACA,mBACA,wBACA,cACA,gBACA,kCACA,oBACA,iBACA,cACA,qBACA,WACA,gBACA,aACA,gBACA,gBACA,aACA,qBACA,iBACA,sBACA,YACA,cACA,gCACA,kBACA,eACA,YACA,YACA,UACA,UACA,QACA,QACA,UACA,OACA,eACA,oBACA,iBACA,OACA,YACA,wBACA,WACA,2BACA,cACA,kBACA,iBACA,UACA,oBACA,oBACA,eACA,cACA,eACA,QACA,eACA,gBACA,gBACA,cACA,UACA,SACA,WACA,wBACA,YACA,oBACA,mBACA,YACA,eACA,qBACA,WACA,kBACA,OACA,mBACA,qBACA,qBACA,iBACA,eACA,uBACA,oBACA,uBACA,wBACA,oBACA,sBACA,mBACA,mBACA,iBACA,cACA,eACA,cACA,cACA,qBACA,uBACA,cACA,aACA,qBACA,mBACA,eACA,kBACA,sBACA,wBACA,mBACA,eACA,gBACA,uBACA,sBACA,gBACA,aACA,mBACA,cACA,oBACA,cACA,gBACA,iBACA,gBACA,WACA,kBACA,0BACA,gBACA,cACA,oBACA,yBACA,eACA,aACA,QACA,sBACA,mBACA,kBACA,gBACA,MACA,KAGA,UACA,QACA,OACA,SACA,SACA,UAGI6F,GAAwB7F,EAAc,CAAC,2BAEvC8F,GAAgB9F,EAAc,CAClC,OACA,8BACA,uBACA,uBACA,sCAEA,kBAGI+F,GAAkB/F,EAAc,CACpC,kCACA,gBACA,2BAIWwJ,GAAwB,CACnCvD,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBuD,aAAa,EACbpD,iBAAkB1D,GAClB2D,sBAAuBtD,GAEvBwD,YAAa,CACX,WACA,CAAEC,MAAO,WAAYC,SAAU,CAAC,MAChC,CAAED,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAE1DC,WAAY,CAAC,MACbC,WAAY,CAAExF,MAAO,IAAKC,KAAM,IAAKoI,sBAAsB,GAC3DvC,cAAe,CACb,CAAEC,MAAO,sBACT,CAAEX,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAEjDI,WAAY,CAAEC,YAAY,GAC1BK,iBAAkB,CAAC,KAAM,KACzBC,UAAW,CAAC,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,KACvFC,YAAWA,IAEbY,cAAe,CACbpC,eAAcA,KCrQL/C,GAAYX,EAAgB,CAEvCkH,IAAK,CACH,QACA,MACA,OACA,UACA,YACA,YACA,eACA,YACA,sBACA,eACA,iBACA,cACA,iBACA,eACA,gBACA,eACA,eACA,kBACA,eACA,YACA,YACA,aACA,iBACA,gBACA,YACA,cACA,eACA,eACA,gBACA,gBACA,aACA,aACA,YACA,gBACA,iBACA,iBACA,cACA,OACA,OACA,QACA,MACA,SACA,gBACA,gBACA,UACA,YACA,UACA,SACA,UACA,YACA,WACA,UACA,OACA,cACA,eACA,YACA,WACA,YACA,WACA,SACA,UACA,WACA,iBACA,sBACA,wBACA,MACA,QACA,QACA,SACA,YACA,OACA,kBACA,eACA,mBACA,gBACA,kBACA,mBACA,gBACA,oBACA,iBACA,oBACA,iBACA,SACA,cACA,UACA,aACA,kBAEA,eACA,cACA,MACA,cACA,QACA,WACA,YACA,QACA,YACA,kBACA,QACA,aACA,SACA,UACA,UACA,SACA,WACA,YACA,WACA,WACA,WACA,MACA,aACA,OACA,QACA,SACA,KACA,MACA,QACA,QACA,MACA,OACA,SACA,OACA,SACA,kBACA,gBACA,eACA,gBACA,sBACA,MACA,YACA,QACA,WACA,YACA,aACA,UACA,SACA,UACA,YACA,QACA,SACA,MACA,OACA,aACA,gBACA,qBACA,sBACA,gBACA,eACA,eACA,aACA,gBACA,gBACA,iBACA,gBACA,gBACA,QACA,eACA,KACA,cACA,WACA,WACA,QACA,UACA,SACA,OACA,kBACA,kBACA,cACA,iBACA,kBACA,iBACA,eACA,iBACA,aACA,gBACA,iBACA,gBACA,cACA,SACA,UACA,UACA,QACA,aACA,QACA,SACA,cACA,eACA,OACA,MACA,QACA,OACA,SACA,aACA,cACA,kBACA,gBACA,YACA,aACA,mBACA,SACA,WACA,MACA,MACA,QACA,UACA,SACA,YACA,SACA,SACA,WACA,WACA,WACA,OACA,QAEA,QACA,OACA,WACA,eACA,gBACA,UACA,WACA,iBACA,cAIA,UCtOS5G,GAAWN,EAAgB,CAEtCkH,IAAK,CACH,SACA,MACA,QACA,UACA,MACA,MACA,QACA,KACA,MACA,KACA,QACA,UACA,SACA,UACA,QACA,SACA,QACA,KACA,OACA,OACA,OACA,UACA,UACA,aACA,SACA,YACA,UACA,WACA,aACA,QACA,SACA,UACA,WACA,UACA,YACA,UACA,YACA,SACA,UACA,OACA,WACA,WACA,KACA,OACA,OACA,UACA,OACA,MACA,QACA,SACA,UACA,UACA,SACA,UACA,QACA,QACA,SACA,QACA,UACA,QACA,YACA,MACA,QACA,OACA,MACA,WACA,SACA,QACA,QACA,SACA,MACA,OACA,SACA,KACA,YACA,SACA,QACA,KACA,UACA,YACA,QACA,QACA,SACA,QACA,SACA,YACA,OACA,KACA,aACA,OACA,MACA,OACA,WACA,QACA,WACA,OACA,OACA,MACA,UACA,QACA,OACA,QACA,MACA,MACA,UACA,UACA,eACA,QACA,QACA,UACA,YACA,OACA,KACA,KACA,MACA,YACA,OACA,QACA,SACA,SACA,SACA,KACA,SACA,UACA,KACA,QACA,SACA,QACA,OACA,QACA,YACA,WACA,OACA,OACA,YACA,UACA,UACA,UACA,YACA,QACA,YACA,SACA,QACA,MACA,QACA,SACA,SACA,UACA,SACA,YACA,SACA,QACA,OACA,WACA,MACA,OACA,YACA,YACA,SACA,QACA,SACA,OACA,OACA,MACA,OACA,OACA,QACA,aACA,SACA,SACA,OACA,OACA,KACA,OACA,cACA,UACA,OACA,WACA,YACA,QACA,QACA,SACA,UACA,SACA,QACA,SACA,SACA,MACA,OACA,QACA,WACA,QACA,SACA,SACA,MACA,OACA,OACA,QACA,QACA,SACA,OACA,SACA,OACA,SC3ME1D,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,QACA,SAGA,cACA,SAEA,MAEA,aACA,0BACA,aACA,SAEA,OACA,SACA,cAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,cAEA,aAEA,SACA,cACA,oBACA,cACA,qBACA,oBACA,kBACA,eACA,uBACA,eACA,kBACA,gBACA,aACA,qBACA,aACA,UACA,mBACA,UACA,QACA,QACA,UACA,SACA,uBACA,YACA,kBACA,oBACA,SAEA,MACA,qBACA,OACA,uBAGI6F,GAAwB7F,EAAc,CAAC,cAAe,eAAgB,oBAEtE8F,GAAgB9F,EAAc,CAAC,OAAQ,8BAA+B,eAEtE+F,GAAkB/F,EAAc,CAAC,oCAG1ByJ,GAAuB,CAClCxD,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBuD,aAAa,EACbpD,iBAAkB1D,GAClB2D,sBAAuBtD,GAIvBwD,YAAa,CAAC,QAAS,SACvBI,WAAY,CAAC,MACbL,YAAa,CAAC,KAAM,MACpBQ,WAAY,CAAEC,YAAY,EAAM6C,SAAU,CAAC,KAAM5C,MAAO,CAAC,MACzDI,iBAAkB,CAAC,IAAK,MACxBC,UAAW,CAAC,IAAK,KAAM,IAAK,OAE9Ba,cAAe,CACbpC,eAAcA,KCxGLpD,GAAWN,EAAgB,CAEtCkH,IAAK,CAEH,MACA,QACA,YACA,MACA,QACA,MACA,MACA,QACA,QACA,KACA,MACA,KACA,YACA,SACA,MACA,QACA,UACA,aACA,SACA,YACA,QACA,OACA,OACA,QACA,OACA,KACA,OAEA,OACA,UACA,UACA,OACA,OACA,YACA,YACA,UACA,cACA,YACA,QACA,YACA,QACA,UACA,WACA,UACA,UACA,UACA,UACA,SACA,YACA,WACA,WACA,UACA,WACA,cACA,UACA,UACA,QACA,QACA,SACA,UACA,SACA,cACA,WACA,OACA,OACA,YACA,MACA,UACA,UACA,UACA,SACA,SACA,OACA,gBACA,WACA,SACA,OACA,WACA,UACA,OACA,QACA,QACA,MACA,SACA,SACA,YACA,aACA,YACA,UACA,SACA,OACA,WACA,QACA,QACA,QACA,QACA,MACA,SACA,QACA,OACA,OACA,WACA,UACA,OACA,QACA,QACA,OACA,SACA,OACA,SACA,OACA,aACA,KACA,YACA,KACA,YACA,QACA,UACA,YACA,UACA,WACA,SACA,eACA,MACA,YACA,YACA,WACA,OACA,aACA,KACA,YACA,OACA,WACA,QACA,UACA,SACA,QACA,UACA,OACA,QACA,QACA,QACA,QACA,UACA,QACA,OACA,OACA,OACA,MACA,MACA,SACA,SACA,QACA,MACA,QACA,SACA,MACA,OACA,SACA,QACA,WACA,OACA,MACA,WACA,SACA,QACA,MACA,aACA,SACA,MACA,SACA,OACA,cACA,SACA,UACA,UACA,cACA,cACA,cACA,gBACA,YACA,SACA,SACA,eACA,WACA,YACA,UACA,KACA,KACA,OACA,SACA,OACA,WACA,SACA,KACA,SACA,UACA,QACA,WACA,eACA,SACA,UACA,SACA,MACA,aACA,UACA,kBACA,YACA,aACA,YACA,SACA,OACA,YACA,SACA,YACA,QACA,UACA,YACA,SACA,QACA,QACA,MACA,OACA,SACA,MACA,YACA,MACA,YACA,SACA,WACA,SACA,SACA,YACA,UACA,SACA,WACA,MACA,SACA,OACA,YACA,MACA,MACA,MACA,SACA,UACA,SACA,OACA,WACA,WACA,eACA,MACA,QACA,QACA,OACA,SACA,OACA,SACA,MACA,UACA,UACA,UACA,WACA,WACA,QACA,SACA,SACA,SACA,SACA,SACA,QACA,cACA,eACA,gBACA,UACA,MACA,UACA,UACA,QACA,MACA,MACA,OACA,OACA,YACA,gBACA,gBACA,kBACA,kBACA,KACA,WACA,UACA,gBACA,UACA,OACA,MACA,MACA,MACA,QACA,QACA,SACA,WACA,YACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,WACA,SACA,UACA,OACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,UACA,QACA,OACA,UCtUSvG,GAAYX,EAAgB,CAEvCyH,QAAS,CACP,MACA,OACA,OACA,OACA,QACA,SACA,OACA,MACA,OACA,MACA,QACA,KACA,MACA,MACA,QACA,QACA,YACA,QACA,OACA,MACA,OACA,OACA,MACA,OACA,QACA,gBAEFC,UAAW,CACT,MACA,SACA,UACA,QACA,OACA,QACA,cACA,YACA,UACA,YACA,iBACA,gBACA,UACA,OACA,QACA,UACA,SACA,YACA,QACA,OACA,QAEA,uBACA,iBACA,mBAEA,QACA,QACA,SACA,gBAEFtG,SAAU,CACR,aACA,eACA,oBACA,aACA,UACA,UACA,WACA,iBACA,iBACA,WACA,WACA,kBACA,kBACA,QACA,kBACA,kBACA,UACA,eACA,UACA,eACA,kBACA,gBACA,gBACA,QACA,aAEFuG,WAAY,CAAC,WAAY,SACzBzG,WAAY,CACV,WACA,aACA,OACA,cACA,UACA,UACA,YACA,WACA,kBACA,kBACA,WACA,YACA,cACA,eACA,mBACA,mBACA,mBACA,kBACA,UACA,UACA,UACA,gBACA,SACA,gBACA,WACA,WACA,YACA,gBACA,iBACA,eACA,kBACA,gBACA,gBACA,YACA,UAEF0G,YAAa,CAAC,YAAa,cAAe,cAC1CC,WAAY,CAAC,cAAe,UAAW,gBAAiB,+BAAgC,OACxFC,aAAc,CAAC,uBACfC,WAAY,CACV,aACA,sBACA,cACA,aACA,cACA,gBACA,aACA,kBACA,qBACA,yBACA,kBAEFC,IAAK,CACH,iBACA,YACA,QACA,UACA,aACA,eACA,iBACA,kBACA,OACA,eACA,aACA,aACA,YACA,SACA,WACA,eACA,aACA,YACA,YACA,WACA,QACA,WACA,UACA,cACA,eACA,WACA,gBAEFC,SAAU,CAAC,SAAU,OAAQ,WAAY,SACzCC,YAAa,CAAC,WAAY,QAAS,SAAU,MAAO,QACpDC,IAAK,CAAC,cAAe,WAAY,aAAc,MAAO,OAAQ,WAC9DrH,UAAW,CACT,MACA,UACA,OACA,SACA,SACA,QACA,YACA,aACA,YACA,aACA,QACA,WACA,WACA,cACA,OACA,MACA,SACA,MACA,kBACA,kBACA,eACA,OACA,aACA,iBACA,aACA,UACA,YACA,YACA,WACA,WACA,WACA,sBACA,iBACA,eACA,gBACA,aACA,gBACA,sBACA,mBACA,sBACA,qBACA,sBACA,iBACA,SACA,aACA,cACA,MACA,UACA,WACA,YAGF8F,OAAQ,CAAC,cAAe,MAAO,aAAc,OAAQ,QAAS,kBAAmB,cACjFwB,gBAAiB,CAAC,QAAS,WAAY,MAAO,WAAY,SAC1DC,MAAO,CAAC,KAAM,mBAAoB,aAAc,WAAY,YAG5D9E,UAAW,CAET,WACA,YACA,SACA,QACA,YACA,gBACA,eACA,MACA,SACA,QAEA,YACA,OACA,oBACA,eACA,qBACA,gBACA,6BACA,wBACA,gBACA,UACA,UACA,QAEA,aC/PEC,GAAiB1F,EAAc,CAAC,qCAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,eACA,sBACA,SACA,uBACA,kBAGA,2BACA,SAEA,MAEA,eACA,4BACA,aAEA,mHACA,2BACA,6HAEA,cAGI4F,GAAiB5F,EAAc,CAEnC,gBAEA,qBAEA,aAEA,cACA,MACA,oDACA,SACA,YACA,gBAEA,iBAEA,aACA,QACA,aACA,UACA,SACA,YACA,OACA,eAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,cAEhE8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,6CAEA,0BAGI+F,GAAkB/F,EAAc,CACpC,kCACA,YACA,2BAGWwK,GAAwB,CACnCvE,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBuD,aAAa,EACbpD,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CACX,CAAEC,MAAO,QAASC,SAAU,CAAC,MAC7B,CAAED,MAAO,MAAOC,SAAU,CAAC,OAK7BE,WAAY,CAAC,SACbC,WAAY,CAAEvF,KAAM,MACpB6F,cAAe,CAAC,CAAEC,MAAO,kCACzBL,WAAY,CAAE8C,SAAU,CAAC,KAAM5C,MAAO,CAAC,MACvC6B,WAAY,CAAC,EACbxB,UAAW,CACT,KACA,KACA,IACA,KACA,KAEA,KACA,KACA,KACA,IACA,MAEFC,YAQJ,SAAqBC,GACnB,IAAIoD,EAA+BtM,EAEnC,OAAOkJ,EAAOrQ,KAAIoC,GAEZqB,EAAQiE,IAAItF,IAAUqB,EAAQgE,GAAGgM,GAC5B,OAAP,wBAAYrR,GAAK,CAAEhD,KAAM2H,EAAUS,oBAGjCO,EAAW3F,EAAMhD,QACnBqU,EAAwBrR,GAGnBA,IAEV,GArBC4O,cAAe,CACb0C,qBAAsB,CAAC,KACvB9E,eAAcA,KCxHL/C,GAAYX,EAAgB,CAIvC4B,KAAM,CACJ,MACA,OACA,QACA,QACA,OACA,QACA,QACA,OACA,QACA,SACA,QACA,QACA,OACA,OACA,UACA,MACA,OACA,OACA,MACA,OACA,UACA,MACA,MACA,YACA,QACA,MACA,MACA,KACA,MACA,QACA,YACA,MACA,KACA,QACA,UACA,SACA,QACA,QACA,UACA,OACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,aACA,QACA,gBAGFM,OAAQ,CACN,MACA,QACA,aACA,QACA,mBACA,cACA,MACA,SACA,YACA,SACA,UACA,OACA,SACA,QACA,OACA,QACA,MACA,YACA,eACA,UACA,cACA,qBACA,WACA,cACA,gBACA,iBACA,eACA,iBACA,iBACA,wBACA,wBACA,SACA,UACA,UACA,QACA,OACA,QACA,aACA,UACA,cACA,aACA,kBACA,kBACA,SACA,SACA,YACA,WACA,SACA,YACA,OACA,SACA,SAGFuG,OAAQ,CACN,YACA,aACA,QACA,UACA,eACA,aACA,SACA,SACA,UACA,WACA,SACA,QACA,MACA,eACA,UACA,WACA,QACA,UACA,WACA,SACA,SACA,SACA,SACA,aACA,SACA,YACA,QAGFC,UAAW,CACT,YACA,aACA,UACA,SACA,eACA,UACA,WACA,UACA,aAGFC,QAAS,CACP,eACA,iBACA,iBACA,wBACA,yBAGFC,SAAU,CAAC,UAAW,UAAW,YAAa,gBAE9CxH,SAAU,CAER,kBACA,eACA,eACA,oBACA,WACA,YACA,aACA,UACA,WACA,eACA,gBACA,mBACA,YACA,iBACA,YACA,gBACA,YACA,iBACA,mBACA,MACA,WACA,eACA,iBACA,sBACA,YACA,eACA,yBAGFyH,KAAM,CAAC,aAAc,YAAa,cAElCC,SAAU,CACR,OACA,YACA,MACA,SACA,SACA,WACA,WACA,SACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,SACA,QACA,UACA,QACA,SACA,QACA,SAGFC,QAAS,CACP,SACA,YACA,SACA,OACA,WACA,aACA,mBACA,mBACA,UACA,UACA,UACA,cACA,OACA,SAGFC,WAAY,CACV,oBACA,wBACA,oBACA,mBACA,SACA,UACA,mBACA,kBACA,YACA,YACA,QACA,aACA,cACA,iBACA,oBACA,WACA,YACA,YACA,cACA,YACA,WACA,UACA,aACA,aACA,UACA,gBACA,wBAGF3G,KAAM,CAAC,QAEP2F,IAAK,CACH,gBACA,sBACA,kBACA,wBACA,gCACA,UACA,eACA,qBACA,6BACA,gBACA,sBACA,8BACA,SACA,eACA,qBACA,6BACA,SACA,aACA,YACA,aACA,YACA,YACA,WACA,QACA,UACA,eACA,WACA,qBACA,6BACA,8BACA,QACA,gBAGFrG,KAAM,CACJ,gBACA,YACA,uBACA,4BACA,qBACA,oBACA,qBACA,aACA,kBACA,qBACA,0BACA,eACA,eACA,mBACA,oBACA,oBACA,uBACA,mBACA,sBACA,mBACA,yBACA,4BACA,yBACA,4BACA,sBACA,wBACA,2BACA,eACA,YACA,gBACA,oBACA,kBACA,qBACA,eACA,WACA,sBACA,2BACA,oBACA,mBACA,oBACA,YACA,iBACA,oBACA,yBACA,cACA,kBACA,mBACA,uBACA,0BACA,mBACA,iBACA,oBACA,cACA,cACA,UACA,WACA,gBAGFsH,SAAU,CAAC,UAAW,UAAW,UAAW,UAE5C3G,YAAa,CAEX,WACA,WACA,QACA,UAGFtB,MAAO,CACL,YACA,eACA,YACA,aACA,aACA,eACA,cACA,cACA,iBACA,kBACA,gBACA,eACA,gBACA,kBACA,cACA,cACA,kBACA,aACA,UAGFkI,MAAO,CACL,UACA,QACA,YACA,YACA,aACA,cACA,QACA,YACA,aAGFpI,UAAW,CAET,YACA,MACA,UACA,SACA,UACA,WACA,UACA,WACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,WACA,YACA,mBACA,WACA,kBACA,MACA,MACA,OACA,kBACA,kBACA,eACA,YACA,sBACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WAEA,SACA,aACA,cACA,aACA,MACA,UACA,WACA,WACA,UACA,WACA,UAGF8F,OAAQ,CACN,YACA,aACA,cACA,MACA,aACA,OACA,YACA,QACA,eACA,OACA,cAGFuC,IAAK,CAAC,kBAAmB,uBAEzBC,QAAS,CACP,aACA,aACA,kBACA,kBACA,mBACA,gBACA,eACA,iBACA,kBACA,eACA,cACA,2BACA,uBACA,yBACA,qCACA,yBACA,yBACA,uBACA,yBACA,uBACA,2BACA,sBACA,qBACA,mBACA,mBACA,mBACA,mBACA,cACA,kBACA,iBACA,mBACA,0BACA,oBACA,wBACA,kBACA,oBACA,2BACA,qBACA,sBACA,qBACA,iCACA,qBACA,yBACA,8BACA,uBACA,cACA,qBACA,4BACA,qCACA,yBACA,kBACA,kBACA,wBACA,wBACA,iBACA,yBACA,0BACA,oBACA,kBACA,iBACA,cACA,qBACA,gCACA,0BACA,+BACA,wBACA,0BACA,mBACA,yBACA,wBACA,oBACA,8BACA,wBACA,yBACA,yBACA,sBACA,2BACA,iCACA,kBACA,mBACA,mBACA,+BACA,0BACA,yBACA,sBACA,mBACA,0BACA,wBACA,0BACA,4BACA,YACA,qBACA,yBACA,2BACA,kCACA,iBACA,kBACA,sBACA,eACA,oBACA,cACA,kBACA,kBACA,aACA,iBACA,aACA,kBACA,aACA,aACA,eACA,2BACA,wBACA,oBACA,qBACA,qBACA,cACA,2BACA,OACA,WAGFC,SAAU,CACR,yBACA,4BACA,uBACA,eACA,kBACA,yBACA,mBACA,0BACA,qBACA,yBACA,4BACA,wBACA,+BACA,uBACA,oBACA,8BACA,wBACA,iBACA,mCACA,oCACA,qCACA,sCACA,0BACA,2BACA,4BACA,qBACA,mBACA,2BACA,qBACA,uBACA,gCACA,8BACA,kBACA,kBACA,oBACA,0BACA,0BACA,yBACA,gCACA,0BACA,qCACA,8BACA,sCACA,+BACA,iCACA,0BACA,YACA,eACA,eACA,eACA,yBACA,oBACA,oBACA,aACA,sBACA,eACA,uBACA,uBACA,mBACA,iBACA,gCACA,+BACA,6BACA,4BACA,iCACA,yCACA,yCACA,sCACA,sCACA,mCACA,mCACA,8BACA,oBACA,gBACA,iBACA,kBACA,eACA,iBACA,gBACA,qBACA,gBACA,uBACA,yBACA,uBACA,8BACA,4BACA,mCACA,kBACA,yBACA,kBACA,sBACA,uBACA,cAGFC,QAAS,CACP,qCACA,0BACA,kCAGFC,aAAc,CACZ,gCACA,mCACA,qCACA,wCACA,yBAGFC,MAAO,CAAC,qBACRnD,KAAM,CAAC,QAGP9C,UAAW,CACT,MACA,cACA,YACA,oBACA,UACA,OACA,UACA,UACA,OACA,YACA,UCvtBSjD,GAAWN,EAAgB,CAEtCkH,IAAK,CACH,QACA,WACA,SACA,SACA,MACA,QACA,QACA,YACA,MACA,OACA,QACA,SACA,UACA,UACA,MACA,MACA,QACA,KACA,MACA,aACA,YACA,aACA,aACA,KACA,SACA,SACA,YACA,gBACA,WACA,SACA,QACA,UACA,SACA,SACA,MACA,UACA,OACA,UACA,KACA,QACA,OACA,SACA,UACA,WACA,OACA,OACA,UACA,QACA,OACA,YACA,kBACA,QACA,aACA,QACA,QACA,UACA,WACA,UACA,YACA,SACA,UACA,UACA,WACA,SACA,YACA,cACA,eACA,gBACA,WACA,aACA,aACA,cACA,UACA,WACA,aACA,OACA,OACA,SACA,QACA,MACA,OACA,UACA,kBACA,eACA,eACA,iBACA,eACA,oBACA,eACA,SACA,QACA,OACA,WACA,MACA,aACA,MACA,UACA,UACA,UACA,WACA,aACA,WACA,UACA,SACA,YACA,aACA,UACA,QACA,OACA,SACA,aACA,UACA,UACA,WACA,KACA,WACA,SACA,SACA,OACA,OACA,OACA,SACA,WACA,YACA,MACA,OACA,SACA,QACA,SACA,UACA,YACA,YACA,UACA,SACA,UACA,aACA,YACA,WACA,UACA,QACA,SACA,QACA,SACA,WACA,QACA,QACA,YACA,MACA,QACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,YACA,SACA,QACA,UACA,WACA,QACA,WACA,SACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,QACA,YACA,YACA,WACA,SACA,KACA,UACA,YACA,YACA,QACA,UACA,UACA,WACA,YACA,SACA,QACA,QACA,QACA,cACA,SACA,UACA,MACA,UACA,YACA,WACA,OACA,UACA,KACA,SACA,YACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,UACA,YACA,QACA,OACA,QACA,OACA,QACA,SACA,OACA,QACA,YACA,iBACA,WACA,OACA,SACA,SACA,UACA,QACA,eACA,WACA,SACA,SACA,WACA,OACA,QACA,OACA,OACA,QACA,WACA,UACA,QACA,MACA,OACA,MACA,MACA,OACA,OACA,KACA,OACA,YACA,aACA,MACA,UACA,SACA,UACA,SACA,OACA,SACA,QACA,UACA,SACA,KACA,MACA,SACA,OACA,MACA,KACA,OACA,WACA,SACA,UACA,KACA,QACA,aACA,SACA,MACA,QACA,OACA,WACA,UACA,aACA,QACA,QACA,WACA,SACA,UACA,YACA,UACA,WACA,UACA,QACA,SACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,QACA,aACA,aACA,YACA,aACA,UACA,cACA,QACA,QACA,OACA,OACA,WACA,UACA,YACA,MACA,aACA,cACA,UACA,UACA,WACA,UACA,SACA,aACA,UACA,UACA,QACA,UACA,WACA,SACA,YACA,UACA,SACA,QACA,OACA,WACA,SACA,UACA,WACA,MACA,OACA,OACA,YACA,SACA,UACA,SACA,SACA,SACA,WACA,SACA,WACA,YACA,eACA,SACA,UACA,eACA,MACA,QACA,OACA,QACA,OACA,UACA,SACA,OACA,WACA,WACA,OACA,MACA,SACA,aACA,QACA,YACA,aACA,QACA,SACA,UACA,SACA,SACA,QACA,eACA,YACA,UACA,YACA,QACA,SACA,QACA,SACA,cACA,aACA,OACA,WACA,YACA,OACA,OACA,OACA,OACA,YACA,KACA,WACA,cACA,YACA,QACA,UACA,OACA,OACA,WACA,UACA,OACA,QACA,UACA,YACA,cACA,cACA,QACA,SACA,UACA,WACA,WACA,QACA,SACA,OACA,QACA,SACA,QACA,WACA,YACA,QACA,SACA,UACA,WACA,UACA,UACA,UACA,OACA,QACA,WACA,OACA,QACA,aACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,MACA,gBACA,YACA,aACA,YACA,YACA,gBACA,WACA,QACA,UACA,eACA,WACA,OACA,MACA,UCxcE1D,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,4BACA,SACA,SACA,eACA,WACA,QACA,SACA,uBACA,wDAGA,cACA,SAEA,MAEA,0DACA,2CACA,8EAEA,cAGI4F,GAAiB5F,EAAc,CAEnC,gBACA,mBAEA,cAEA,qBAEA,yBAEA,iCACA,gCACA,kBACA,YACA,+BACA,4BACA,iBACA,kBACA,uBACA,wBAEA,0BAEA,aACA,QAEA,QACA,kBACA,kBACA,mBACA,iBACA,2BACA,eACA,sBACA,kBACA,6BACA,sBACA,iBACA,cACA,cACA,iBACA,qBACA,0BACA,iBACA,uBACA,wBACA,eACA,kBACA,oBACA,aACA,gBACA,aACA,eACA,iBACA,eACA,mBACA,qBACA,eACA,mBACA,kCACA,+BACA,2BACA,6BACA,gBACA,aACA,aACA,qBACA,aACA,UACA,QACA,OACA,aACA,QACA,UACA,SACA,kBACA,OACA,uBACA,mBACA,cACA,mBACA,oBACA,kBACA,gBACA,uBACA,mBACA,8BACA,uBACA,kBACA,eACA,eACA,kBACA,kBACA,wBACA,yBACA,gBACA,mBACA,qBACA,cACA,cACA,gBACA,kBACA,gBACA,oBACA,sBACA,oBACA,mCACA,gCACA,4BACA,8BACA,mBACA,iBACA,cACA,cACA,sBACA,aACA,UACA,UACA,qBACA,iBACA,YACA,iBACA,kBACA,gBACA,cACA,qBACA,iBACA,4BACA,qBACA,gBACA,aACA,aACA,gBACA,yBACA,gBACA,sBACA,uBACA,aACA,cACA,iBACA,mBACA,YACA,eACA,YACA,cACA,gBACA,cACA,kBACA,oBACA,kBACA,iCACA,8BACA,0BACA,4BACA,iBACA,eACA,YACA,YACA,oBACA,YACA,UACA,UACA,QACA,QACA,wBACA,SACA,OACA,OACA,OACA,SACA,UACA,sBACA,iBACA,4BACA,UACA,oBACA,QACA,SACA,WACA,oBACA,wBACA,YACA,iBACA,cACA,kBACA,WACA,4BACA,kBACA,OACA,oBACA,WACA,WAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,+BAGI8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CACpC,gDACA,kCAEA,gDAEA,2BAIW2L,GAA6B,CACxC1F,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvB+I,qBAAqB,EACrBxF,YAAa,CAAC,MACdC,YAAa,CACX,KACA,CAAEC,MAAO,QAASC,SAAU,CAAC,OAC7B,CAAED,MAAO,WAAYC,SAAU,CAAC,KAAMC,eAAe,GACrD,CAAEF,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAE1DC,WAAY,CAAC,CAAEH,MAAO,QAASC,SAAU,CAAC,QAC1CG,WAAY,CAAEvF,KAAM,KACpByF,WAAY,CAAE8C,SAAU,CAAC,MACzBvC,UAAW,CAET,IACA,IACA,KACA,MACA,IAEA,KAEA,IACA,IACA,IACA,IACA,KACA,KAEA,MACA,MACA,OACA,OAEA,MACA,KACA,KACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,KACA,KACA,KAEA,IACA,KACA,KACA,KACA,MACA,KACA,MACA,KAEA,KAEA,MACA,MAEA,KACA,MACA,MACA,OAEA,IACA,KACA,KACA,MAEA,MAEA,KAEA,MACA,KAEA,KACA,KACA,MACA,MACA,OACA,OACA,QACA,QAEA,KACA,MAGJa,cAAe,CACb0C,qBAAsB,CAAC,KAAM,KAC7B9E,eAAcA,KC1WL/C,GAAYX,EAAgB,CAEvCc,UAAW,CACT,YACA,8BACA,MACA,QACA,UACA,MACA,SACA,MACA,kBACA,cACA,aACA,MACA,WACA,WAGFE,MAAO,CACL,QACA,eACA,gBACA,mBACA,iBACA,YAGFC,QAAS,CAAC,UAAW,SAAU,WAAY,WAE3CqB,YAAa,CAAC,WAAY,SAAU,WAAY,QAAS,MAAO,OAAQ,UAExEqH,SAAU,CACR,aACA,eACA,mBACA,eACA,eACA,oBACA,WACA,qBACA,uBACA,iBACA,UACA,WACA,YACA,aACA,UACA,UACA,eACA,WACA,iBACA,WACA,UACA,YACA,gBACA,qBACA,4BACA,kBACA,uBACA,4BACA,WACA,eACA,SAGFC,QAAS,CACP,UACA,WACA,eACA,cACA,WACA,UACA,cACA,YACA,YACA,eACA,YACA,aACA,cACA,aACA,cACA,sBACA,gBACA,eACA,YACA,aACA,eACA,cACA,cACA,oBACA,aACA,cACA,cACA,YACA,kBACA,aACA,aACA,cACA,cACA,aACA,eACA,kBACA,kBACA,kBACA,kBACA,iBACA,mBACA,gBACA,kBACA,iBACA,cACA,kBACA,aACA,cACA,aACA,YACA,kBACA,cACA,wBACA,0BACA,OACA,kBACA,cACA,eACA,iBACA,aACA,UACA,UACA,WACA,WACA,aACA,YACA,mBACA,sBACA,eACA,eACA,iBACA,WACA,YACA,YACA,aACA,iBACA,aACA,cACA,aACA,cACA,UACA,gBACA,aACA,YACA,OACA,UACA,UACA,OACA,UACA,UACA,OACA,UACA,UACA,gBAGFpI,KAAM,CAAC,WAAY,YAAa,WAAY,MAAO,MAAO,OAAQ,QAElEqI,YAAa,CAAC,MAAO,oBAAqB,kBAAmB,eAE7DlI,KAAM,CACJ,gBACA,sBACA,oBACA,kCACA,yBACA,aACA,kBAGFC,KAAM,CACJ,MACA,OACA,OACA,OACA,QACA,OACA,UACA,OACA,MACA,MACA,UACA,OACA,QACA,SACA,MACA,QACA,KACA,MACA,MACA,KACA,QACA,UACA,SACA,QACA,MACA,OACA,OACA,MACA,SACA,SAGFkI,gBAAiB,CAAC,iBAElB5H,OAAQ,CACN,QACA,YACA,QACA,qBACA,cACA,mBACA,YACA,MACA,UACA,SACA,QACA,aACA,UACA,OACA,QACA,MACA,SACA,QACA,OACA,OACA,QACA,aACA,eACA,WACA,cACA,gBACA,eACA,eACA,iBACA,gBACA,SACA,UACA,YACA,UACA,QACA,UACA,aACA,SACA,SACA,YACA,UACA,YACA,OACA,SAGF6H,UAAW,CACT,oBACA,gBACA,WACA,YACA,aACA,UACA,aACA,WACA,aACA,YACA,YACA,cACA,aACA,eAGFnD,OAAQ,CACN,MACA,QACA,YACA,aACA,cACA,aACA,MACA,OACA,UACA,MACA,SACA,MACA,YACA,QACA,eACA,kBACA,kBACA,OACA,kBACA,aACA,cACA,aACA,MACA,WACA,WAGFoD,SAAU,CACR,OACA,UACA,UACA,UACA,YACA,kBACA,uBAGFX,SAAU,CACR,wBACA,0BACA,uBACA,kBACA,oBACA,uBACA,iBACA,cAGFD,QAAS,CACP,sBACA,mBACA,oBACA,iBACA,kBACA,eACA,kBACA,2BACA,yBACA,uBACA,sBACA,iBACA,cACA,6BACA,0BACA,gCACA,qBACA,kBACA,oBACA,mBACA,uBACA,eACA,YACA,OACA,WAEF7F,UAAW,CACT,UACA,UACA,OACA,YACA,UACA,oBACA,QACA,WACA,aCzWSjD,GAAWN,EAAgB,CAEtCsG,SAAU,CACR,SACA,SACA,MACA,iBACA,MACA,QACA,KACA,MACA,gBACA,SACA,UACA,SACA,OACA,QACA,SACA,aACA,SACA,QACA,UACA,aACA,UACA,SACA,OACA,UACA,WACA,KACA,SACA,SACA,UACA,aACA,WACA,QACA,MACA,UACA,SACA,OACA,OACA,gBACA,gBACA,QACA,WACA,SACA,QACA,KACA,YACA,QACA,OACA,KACA,SACA,WACA,UACA,OACA,QACA,YACA,iBACA,MACA,OACA,QACA,UACA,MACA,MACA,UACA,OACA,QACA,MACA,UACA,SACA,MACA,MACA,KACA,OACA,OACA,QACA,QACA,WACA,WACA,YACA,UACA,cACA,UACA,UACA,UACA,aACA,YACA,SACA,UACA,UACA,UACA,WACA,OACA,SACA,QACA,MACA,OACA,OACA,YACA,KACA,MACA,WACA,OACA,SACA,QACA,UACA,SACA,WAGF2D,qBAAsB,CACpB,gBACA,iBACA,eACA,aACA,cACA,WACA,SACA,eACA,aACA,mBACA,eACA,eACA,UACA,aACA,aACA,mBAGFC,eAAgB,CAAC,WAAY,aAAc,WAAY,SAAU,cAEjEC,iBAAkB,CAChB,SACA,MACA,YACA,aACA,YACA,OACA,OACA,UACA,OAGFC,eAAgB,CACd,gBACA,cACA,YACA,WACA,uBACA,oBACA,iBAGFC,sBAAuB,CAAC,QAAS,OAAQ,OAAQ,QAEjDC,eAAgB,CAAC,WAAY,YAAa,SAAU,OAEpDC,qBAAsB,CACpB,MACA,OACA,WACA,QACA,WACA,MACA,UACA,WACA,WACA,YACA,UACA,WAEF9J,KAAM,CAEJ,eACA,aACA,WAEA,OACA,OACA,MACA,YAEA,eAUF8C,UAAW,CAAC,SAAU,UC7LlBC,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,eACA,WACA,QACA,SAGA,cACA,SAEA,MAEA,0CACA,mFAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,gBAEA,yBAEA,cACA,qBACA,eACA,gBACA,YACA,gBACA,eACA,OACA,SAEA,mBAEA,QACA,iBACA,kBACA,2BACA,cACA,0BACA,kBACA,eACA,aACA,UACA,UACA,sBACA,sBACA,QACA,OACA,SACA,QACA,SACA,OACA,kBACA,mBACA,2BACA,yBACA,wBACA,kBACA,eACA,iBACA,eACA,mBACA,gBACA,cACA,aACA,UACA,iBACA,gBACA,iBACA,gBACA,aACA,eACA,aACA,yBACA,iBACA,cACA,YACA,YACA,OACA,UACA,UACA,QACA,QACA,OACA,UACA,4BACA,QACA,SACA,WACA,cACA,4BACA,8BACA,OACA,sBACA,aACA,kBACA,iBACA,aACA,YACA,oBACA,SACA,WAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,YAAa,UAE7E8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CAEpC,UAEA,eACA,iBAEA,2BAIW0M,GAA2B,CACtCzG,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CAAC,SACdI,WAAY,CAAC,SACbC,WAAY,CAAExF,MAAO,KACrB0F,WAAY,CAAE8C,SAAU,CAAC,MACzBvC,UAAW,CACT,IACA,IACA,IACA,KACA,MACA,IACA,IAEA,IACA,KACA,KACA,KACA,OAGJa,cAAe,CACb0C,qBAAsB,CAAC,MACvB9E,eAAcA,KC1KLpD,GAAWN,EAAgB,CAEtCkH,IAAK,CACH,MACA,QACA,MACA,QACA,UACA,MACA,OACA,MACA,UACA,QACA,KACA,MACA,KACA,gBACA,UACA,OACA,SACA,UACA,KACA,QACA,UACA,OACA,SACA,QACA,QACA,UACA,YACA,UACA,UACA,aACA,SACA,UACA,UACA,SACA,UACA,cACA,UACA,cACA,aACA,OACA,SACA,QACA,OACA,UACA,eACA,eACA,oBACA,eACA,OACA,WACA,YACA,MACA,eACA,UACA,SACA,YACA,OACA,WACA,MACA,cACA,YACA,WACA,aACA,MACA,OACA,SACA,UACA,SACA,WACA,SACA,SACA,WACA,WACA,UACA,QACA,QACA,SACA,SACA,aACA,QACA,cACA,YACA,MACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,QACA,QACA,WACA,OACA,KACA,SACA,SACA,KACA,QACA,UACA,QACA,SACA,cACA,YACA,WACA,OACA,KACA,QACA,OACA,OACA,aACA,UACA,OACA,UACA,OACA,OACA,QACA,OACA,QACA,WACA,OACA,QACA,UACA,QACA,MACA,UACA,QACA,SACA,QACA,OACA,YACA,aACA,UACA,KACA,MACA,OACA,QACA,KACA,OACA,SACA,UACA,KACA,QACA,MACA,QACA,eACA,OACA,WACA,UACA,YACA,QACA,YACA,cACA,aACA,UACA,UACA,WACA,YACA,UACA,aACA,aACA,QACA,QACA,QACA,eACA,eACA,UACA,SACA,aACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,OACA,QACA,WACA,SACA,MACA,OACA,SACA,SACA,SACA,OACA,YACA,QACA,kBACA,eACA,OACA,OACA,SACA,OACA,OACA,SACA,QACA,aACA,SACA,WACA,SACA,SACA,YACA,QACA,SACA,gBACA,YACA,aACA,OACA,KACA,QACA,WACA,cACA,eACA,OACA,OACA,WACA,YACA,YACA,UACA,SACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,SACA,OAEA,UACA,YACA,WACA,WACA,UACA,OACA,WACA,aACA,aACA,SACA,UACA,cACA,SACA,UACA,gBACA,QACA,WACA,eACA,QACA,cACA,cACA,SACA,QACA,QACA,gBACA,SACA,SACA,KACA,WACA,SACA,YACA,OACA,SACA,OACA,QACA,WACA,YACA,gBChRSvG,GAAYX,EAAgB,CAIvCc,UAAW,CAET,wBACA,oBACA,MACA,UACA,SACA,UACA,WACA,UACA,eACA,cACA,OACA,QACA,QACA,QACA,WACA,mBACA,YACA,aACA,QACA,QACA,cACA,WACA,cACA,WACA,OACA,aACA,MACA,SACA,OACA,MACA,SACA,aACA,aACA,oBACA,WAEA,MACA,SACA,aACA,cACA,MACA,UACA,WACA,YAGF8F,OAAQ,CACN,YACA,aACA,MACA,OACA,YACA,QACA,eACA,OACA,cAGF5F,MAAO,CACL,QACA,iBACA,iBACA,eACA,kBACA,aACA,YACA,YACA,iBACA,eACA,eACA,cACA,iBACA,aACA,UACA,WACA,UACA,QACA,cAGFlM,IAAK,CACH,aACA,aACA,MACA,aACA,cACA,kBACA,mBACA,WACA,aACA,cAGFsM,SAAU,CACR,aACA,eACA,eACA,oBACA,oBACA,mBACA,WACA,cACA,sBACA,YACA,WACA,aACA,WACA,MACA,aACA,YACA,YACA,UACA,gBACA,qBACA,OACA,WACA,YACA,mBACA,gBACA,iBACA,mBACA,SACA,QACA,iBACA,WACA,MACA,UACA,SACA,iBACA,mBACA,mBACA,oBACA,UACA,eACA,oBACA,mBACA,QACA,YACA,cACA,cACA,eACA,iBACA,UACA,aACA,SACA,QAGFO,KAAM,CACJ,YACA,kBACA,oBACA,mBACA,aACA,iBACA,WAGFlB,KAAM,CACJ,MACA,OACA,QACA,YACA,aACA,QACA,OACA,QACA,cACA,OACA,QACA,QACA,SACA,SACA,MACA,SACA,YACA,UACA,aACA,UACA,SACA,QACA,cACA,OACA,OACA,UACA,OACA,cACA,mBACA,MACA,SACA,YACA,OACA,MACA,OACA,MACA,QACA,kBACA,mBACA,eACA,OACA,UACA,UACA,SAEA,MACA,MACA,QACA,YACA,cACA,QACA,QACA,SACA,gBACA,gBACA,WACA,SACA,OACA,MACA,QACA,UACA,SACA,eACA,0BACA,yBACA,kBACA,QACA,MACA,QACA,YACA,SACA,cACA,QACA,OACA,SACA,cACA,KACA,SACA,MACA,QACA,QACA,OACA,QACA,OACA,QACA,aACA,eACA,MACA,MACA,8BACA,eACA,QACA,WACA,MACA,OACA,eACA,UACA,YACA,KACA,OACA,aACA,mBACA,WACA,WACA,MACA,QACA,SACA,UACA,cACA,OACA,QACA,SACA,UACA,iBACA,qBACA,cACA,iBACA,SACA,UACA,UACA,QACA,OACA,QACA,OACA,QACA,gBACA,YACA,MACA,OACA,OACA,YACA,aACA,qBACA,OACA,SACA,MACA,OACA,WACA,UACA,QACA,qBACA,QACA,OACA,QACA,SACA,YACA,kBACA,MACA,OACA,YACA,UACA,SACA,iBACA,mBACA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QACA,SACA,MACA,QACA,MACA,QACA,MACA,MACA,MACA,QACA,SACA,UACA,KACA,MACA,SACA,gBACA,SACA,QACA,UACA,KACA,UACA,OACA,OACA,QACA,UACA,SACA,SACA,WACA,aACA,SACA,QACA,UACA,eACA,eACA,oBACA,WACA,UACA,aACA,WACA,SACA,OACA,SACA,WACA,KACA,OACA,OACA,OACA,MACA,SACA,SACA,UACA,YACA,SACA,UACA,OACA,SACA,QACA,YACA,MACA,UACA,OACA,OACA,YACA,OACA,QACA,SACA,SACA,KACA,SACA,YACA,KACA,QACA,UACA,YACA,QACA,SACA,UACA,YACA,OACA,KACA,SACA,OACA,MACA,OACA,OACA,OACA,QACA,QACA,eACA,UACA,KACA,MACA,UACA,UACA,OACA,QACA,KACA,SACA,KACA,OACA,OACA,KACA,QACA,SACA,QACA,OACA,YACA,OACA,SACA,YACA,UACA,QACA,QACA,QACA,YACA,aACA,SACA,UACA,UACA,SACA,UACA,WACA,YACA,QACA,WACA,MACA,OACA,YACA,SACA,MACA,QACA,OACA,YACA,OACA,OACA,KACA,cACA,UACA,YACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,OACA,QACA,SACA,OACA,aCvJE1D,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,QACA,SAGA,0EACA,eACA,SAEA,MAEA,iDACA,oDAGI4F,GAAiB5F,EAAc,CAEnC,qEAEA,cAEA,cAEA,yBAEA,cACA,eACA,gBACA,kBACA,YAEA,eAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,cAGhE8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CACpC,gDACA,oCAGW8M,GAAyB,CACpC7G,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CACX,QACA,CAAEC,MAAO,SAAUC,SAAU,CAAC,KAAMC,eAAe,IAIrDC,WAAY,CAAC,QAAS,KAAM,MAE5BG,WAAY,CAAEC,YAAY,EAAM6C,SAAU,CAAC,KAAM5C,MAAO,CAAC,IAAK,IAAK,MACnEK,UAAW,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MAAO,OAEjEa,cAAe,CACbpC,eAAcA,KCrFL/C,GAAYX,EAAgB,CAEvCmJ,IAAK,CAAC,YAENvC,OAAQ,CAAC,OAAQ,aAAc,eAAgB,YAAa,cAE5Da,QAAS,CACP,WACA,oBACA,iBACA,UACA,cACA,mBACA,eACA,cACA,MACA,MACA,KACA,MACA,QACA,OACA,QACA,OACA,UACA,gBAGFvF,OAAQ,CACN,YACA,kBACA,QACA,QACA,UACA,YACA,kBACA,OACA,UACA,YACA,gBAGFd,SAAU,CAAC,eAAgB,eAAgB,YAAa,oBAAqB,kBAK7EN,UAAW,CACT,QACA,MACA,MACA,MACA,MAIA,aACA,cACA,WACA,UACA,UACA,SACA,eACA,YACA,aACA,OACA,aACA,iBACA,aACA,UACA,YACA,YACA,WACA,WACA,WACA,kBACA,mBAOFuF,KAAM,CAAC,QAEPoE,WAAY,CAAC,WAAY,UAEzBI,YAAa,CAAC,QAAS,MAAO,MAAO,MAAO,OAAQ,OAAQ,QAG5DtH,UAAW,CACT,YACA,OACA,oBACA,eACA,UACA,yBACA,oBACA,OACA,qBACA,gBACA,QACA,6BACA,wBACA,gBACA,kCACA,qBACA,QACA,SACA,iBACA,YACA,sBACA,OACA,UACA,UACA,MACA,OACA,eCpHSjD,GAAWN,EAAgB,CAEtCkH,IAAK,CACH,MACA,WACA,QACA,MACA,MACA,QACA,KACA,aACA,aACA,KACA,SACA,gBACA,QACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,WACA,OACA,OACA,YACA,QACA,OACA,QACA,WACA,UACA,SACA,SACA,YACA,UACA,aACA,gBACA,SACA,QACA,OACA,UACA,kBACA,kCACA,eACA,eACA,iBACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,UACA,UACA,SACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,WACA,SACA,QACA,SACA,OACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,MACA,UACA,OACA,OACA,OACA,WACA,MACA,SACA,QACA,QACA,SACA,OACA,OACA,WACA,KACA,YACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,WACA,OACA,KACA,WACA,QACA,UACA,UACA,OACA,OACA,aACA,QACA,QACA,SACA,QACA,SACA,SACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,MACA,OACA,SACA,UACA,KACA,MACA,KACA,OACA,OACA,QACA,MACA,QACA,OACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,QACA,QACA,OACA,YACA,MACA,aACA,cACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,OACA,YACA,QACA,SACA,SACA,SACA,SACA,YACA,eACA,MACA,UACA,WACA,OACA,WACA,MACA,eACA,WACA,aACA,QACA,SACA,cACA,YACA,SACA,cACA,QACA,cACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,cACA,QACA,UACA,OACA,UACA,QACA,SACA,UACA,SACA,SACA,OACA,QACA,QACA,SACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,UC5NE1D,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,4BACA,SACA,SACA,eACA,WACA,QACA,SACA,uBAGA,cACA,SAEA,MAEA,0BACA,sDAGI4F,GAAiB5F,EAAc,CAEnC,SACA,mBAEA,cAEA,aAEA,cACA,aACA,gBACA,gBACA,YACA,iBACA,uBACA,YACA,kCACA,eAEA,iBAEA,eAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,+BAGI8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CACpC,gDACA,2BAGWgN,GAAsB,CACjC/G,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvBwD,YAAa,CACX,CAAEC,MAAO,WAAYC,SAAU,CAAC,IAAK,OACrC,CAAED,MAAO,SAAUC,SAAU,CAAC,KAAMC,eAAe,IAErDC,WAAY,CAAC,QAAS,MACtBG,WAAY,CAAEC,YAAY,GAC1BM,UAAW,CAAC,OAEda,cAAe,CACbpC,eAAcA,KC3FL/C,GAAYX,EAAgB,CAOvCkH,IAAK,CACH,MACA,OACA,YACA,YACA,kBACA,uBACA,oBACA,aACA,YACA,iBACA,YACA,iBACA,eACA,kBACA,aACA,YACA,YACA,iBACA,eACA,aACA,cACA,OACA,OACA,QACA,cACA,MACA,MACA,WACA,YACA,oBACA,eACA,wBACA,oBACA,oBACA,uBACA,cACA,kBACA,qBACA,cACA,aACA,iBACA,sBACA,iCACA,cACA,YACA,WACA,UACA,cACA,OACA,OACA,OACA,UACA,cACA,WACA,MACA,WACA,WACA,YACA,QACA,eACA,SACA,YACA,WACA,oBACA,kBACA,OACA,MACA,OACA,oBACA,QACA,WACA,YACA,aACA,QACA,YACA,kBACA,eACA,iBACA,iBACA,eACA,oBACA,mBACA,eACA,OACA,WACA,YACA,cACA,aACA,aACA,MACA,eACA,cACA,cACA,UACA,aACA,MACA,MACA,IACA,aACA,mBACA,kCACA,QACA,MACA,UACA,WACA,SACA,cACA,UACA,QACA,SACA,kBACA,gBACA,YACA,cACA,cACA,iBACA,qBACA,qBACA,wBACA,wBACA,WACA,kBACA,kBACA,oBACA,yBACA,+BACA,gBACA,sBACA,YACA,iBACA,6BACA,0BACA,0BACA,yBACA,iBACA,qBACA,WACA,wBACA,mBACA,cACA,YACA,WACA,YACA,cACA,cACA,OACA,yBACA,KACA,QACA,WACA,2BACA,mBACA,qBACA,YACA,cACA,iBACA,SACA,gBACA,sBACA,iBACA,oBACA,cACA,eACA,sBACA,cACA,aACA,aACA,YACA,aACA,WACA,MACA,oBACA,aACA,OACA,mBACA,0BACA,yBACA,kBACA,QACA,SACA,uBACA,yBACA,0BACA,oBACA,UACA,KACA,YACA,iBACA,MACA,QACA,OACA,QACA,OACA,QACA,aACA,kBACA,MACA,UACA,aACA,cACA,aACA,mBACA,WACA,YACA,aACA,eACA,MACA,SACA,MACA,QACA,mBACA,cACA,MACA,SACA,SACA,MACA,QACA,eACA,wBACA,UACA,MACA,SACA,aACA,YACA,aACA,MACA,YACA,QACA,SACA,oBACA,WACA,qBACA,kBACA,iBACA,iBACA,eACA,KACA,WACA,MACA,QACA,cACA,UACA,UACA,OACA,SACA,OACA,SACA,aACA,eACA,iBACA,qBACA,cACA,kBACA,iBACA,eACA,UACA,iBACA,aACA,SACA,SACA,UACA,UACA,MACA,QACA,aACA,OACA,QACA,SACA,WACA,OACA,SACA,SACA,UACA,OACA,oBACA,MACA,WACA,QACA,UACA,uBACA,qBACA,QACA,aACA,eACA,oBACA,oBACA,oBACA,OACA,cACA,SACA,aACA,cACA,SACA,UACA,cACA,YACA,cACA,YACA,cACA,cACA,gBACA,cACA,aACA,gBACA,eACA,cACA,cACA,cACA,cACA,mBACA,YACA,kBACA,gBACA,sBACA,eACA,kBACA,oBACA,mBACA,mBACA,kBACA,gBACA,cACA,aACA,YACA,cACA,aACA,YACA,kBACA,gBACA,gBACA,mBACA,qBACA,eACA,cACA,WACA,YACA,YACA,aACA,YACA,gBACA,mBACA,aACA,WACA,YACA,OACA,UACA,UACA,OACA,UACA,UACA,SACA,YACA,MACA,MACA,OACA,cACA,qBACA,gBACA,kBACA,UACA,YACA,YACA,eACA,mBACA,mBACA,UACA,UACA,sBACA,sBACA,cACA,SACA,gBACA,gBACA,aACA,kBACA,yBACA,eACA,cACA,UACA,YACA,iBACA,mBACA,YACA,OACA,aACA,WACA,MACA,WACA,SACA,QACA,aACA,aACA,uBACA,mBACA,wBACA,mBACA,mBACA,uBACA,oBACA,OACA,sBACA,oBACA,WACA,UACA,WACA,UACA,OACA,eACA,eACA,wBACA,wBACA,gBACA,YACA,WACA,OACA,eACA,MACA,MACA,YAGF6D,WAAY,CAAC,aAAc,QAAS,OAAQ,eAAgB,OAAQ,UAAW,UC7apEzK,GAAWN,EAAgB,CAEtCkH,IAAK,CACH,SACA,MACA,QACA,QACA,MACA,QACA,UACA,MACA,MACA,QACA,KACA,MACA,KACA,gBACA,YACA,UACA,OACA,KACA,OACA,UACA,OACA,WACA,SACA,UACA,UACA,SACA,YACA,cACA,aACA,cACA,SACA,QACA,OACA,UACA,eACA,eACA,OACA,aACA,UACA,SACA,UACA,SACA,OACA,OACA,WACA,aACA,WACA,cACA,SACA,OACA,OACA,QACA,WACA,MACA,QACA,SACA,SACA,YACA,UACA,SACA,UACA,QACA,QACA,QACA,QACA,YACA,MACA,OACA,OACA,YACA,QACA,UACA,SACA,WACA,QACA,WACA,SACA,SACA,SACA,KACA,YACA,UACA,QACA,QACA,SACA,YACA,WACA,OACA,UACA,KACA,KACA,YACA,OACA,OACA,aACA,cACA,OACA,MACA,OACA,OACA,UACA,UACA,OACA,QACA,OACA,QACA,QACA,UACA,QACA,UACA,UACA,kBACA,eACA,WACA,UACA,OACA,MACA,MACA,OACA,OACA,KACA,OACA,MACA,OACA,QACA,SACA,KACA,SACA,OACA,KACA,MACA,OACA,SACA,KACA,QACA,aACA,QACA,SACA,OACA,WACA,YACA,aACA,UACA,OACA,OACA,UACA,MACA,UACA,YACA,YACA,UACA,aACA,aACA,QACA,SACA,QACA,OACA,YACA,UACA,SACA,aACA,QACA,UACA,WACA,YACA,SACA,QACA,OACA,QACA,WACA,SACA,MACA,OACA,UACA,SACA,SACA,UACA,WACA,OACA,SACA,eACA,UACA,MACA,OACA,OACA,OACA,OACA,QACA,QACA,SACA,SACA,SACA,QACA,SACA,cACA,OACA,OACA,OACA,OACA,YACA,KACA,WACA,cACA,OACA,OACA,UACA,YACA,cACA,gBACA,QACA,SACA,UACA,YACA,SACA,SACA,MACA,OACA,QACA,QACA,QACA,OACA,WACA,QACA,SACA,UACA,OACA,OACA,QACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QAIF8D,MAAO,CACL,SACA,MACA,UACA,WACA,UACA,UACA,OACA,UACA,OACA,SACA,cACA,UACA,UACA,gBACA,WACA,YACA,OACA,YACA,UACA,OACA,MACA,QACA,MACA,OACA,WACA,YACA,WACA,OACA,YACA,aACA,aACA,cACA,QACA,aACA,WACA,cCnRExH,GAAiB1F,EAAc,CAAC,4BAGhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,4BACA,SACA,SACA,eACA,WACA,QACA,SACA,uBAGA,cACA,SAEA,MAEA,0CACA,+BAEA,kBACA,WACA,oBACA,qBACA,cACA,UACA,SACA,WAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,cAEA,yBAEA,0BACA,6BACA,0BACA,4BACA,YACA,kCACA,iBACA,UAEA,iBAGA,eACA,0BACA,aACA,gBACA,cACA,cACA,yBACA,YACA,YAEA,UACA,UACA,kBACA,0BACA,MAEA,iBACA,kBAEA,4BACA,gBACA,cACA,WACA,gBAEA,cACA,oBACA,qBACA,mBACA,gCACA,cACA,eACA,gBACA,eACA,iBACA,aACA,qBACA,mBACA,iBACA,iBAKI6F,GAAwB7F,EAAc,CAC1C,yBACA,0BACA,+BAII8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,uBACA,+CAGI+F,GAAkB/F,EAAc,CACpC,kCAEA,2BAGWmN,GAAwB,CACnClH,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,GAClB2D,sBAAuBtD,GAKvBuD,YAAa,CAAC,KAAM,MAGpBC,YAAa,CACX,CAAEC,MAAO,QAASC,SAAU,CAAC,OAC7B,CAAED,MAAO,SAAUC,SAAU,CAAC,KAAMC,eAAe,IAGrDC,WAAY,CAAC,SACbG,WAAY,CAAEC,YAAY,GAC1BM,UAAW,CACT,IACA,KACA,KACA,IACA,KAEA,IACA,IACA,MAIJa,cAAe,CACbpC,eAAcA,KCjKL/C,GAAYX,EAAgB,CAEvCc,UAAW,CACT,wBACA,MACA,eACA,QACA,YACA,WACA,cACA,MACA,MACA,QACA,SACA,MACA,MACA,QAEFoK,SAAU,CACR,YACA,cACA,MACA,aACA,OACA,kBACA,kBACA,eACA,gCACA,gCAEFC,cAAe,CACb,SACA,WACA,aACA,iBACA,oBACA,kBACA,cACA,YACA,cACA,eACA,gBACA,SACA,aACA,aAEFjK,WAAY,CAAC,OAAQ,UAAW,QAAS,WAAY,cAAe,aACpEkK,cAAe,CACb,aACA,kBACA,eACA,UACA,mBACA,mBACA,gBACA,eACA,0BACA,uBACA,sBACA,mBACA,gBACA,eACA,sBACA,YACA,kBACA,WACA,SACA,WACA,gBACA,aACA,iBACA,qBACA,yBAEFC,OAAQ,CAAC,gBAAiB,iBAAkB,iBAC5CrB,SAAU,CACR,aACA,gBACA,aACA,aACA,WACA,wBAEF5I,SAAU,CACR,cACA,oBACA,mBACA,sBACA,UACA,WACA,eACA,gBACA,WACA,WACA,qBACA,oBACA,0BACA,MACA,UACA,UACA,aACA,SACA,QACA,yBACA,eACA,cACA,oBACA,iBACA,gBACA,mBACA,OACA,OACA,SACA,aACA,aACA,eAEFkK,aAAc,CACZ,MACA,OACA,OACA,OACA,OACA,UACA,MACA,MACA,UACA,MACA,QACA,MACA,QACA,KACA,QACA,UACA,OACA,QACA,OACA,MACA,OACA,SACA,MACA,SACA,WACA,MACA,SAEFC,SAAU,CACR,WACA,WACA,eACA,eACA,mBACA,aACA,WACA,iBACA,qBACA,QACA,UACA,UACA,YACA,YACA,eACA,iBACA,oBACA,eACA,iBACA,0BACA,0BACA,YACA,oBACA,gBACA,iBACA,oBACA,YACA,cACA,qBACA,iBACA,mBACA,mBACA,YACA,YACA,cACA,iBACA,iBACA,aACA,UACA,YACA,gBAEFC,QAAS,CAAC,aAAc,QAAS,OAAQ,aAAc,wBACvDxJ,SAAU,CACR,cACA,iBACA,eACA,wBACA,eACA,oBACA,YACA,gBACA,mBACA,gBACA,iBACA,cACA,aACA,aACA,eACA,kBACA,WACA,aACA,YACA,cACA,cACA,OACA,UACA,aAEFE,OAAQ,CACN,QACA,OACA,YACA,SACA,YACA,aACA,SACA,OACA,MACA,QACA,QACA,QACA,WACA,YACA,UACA,YACA,UACA,QACA,QACA,UACA,QACA,MACA,aACA,gBACA,QACA,YACA,YACA,OACA,UACA,SAEFuJ,OAAQ,CACN,aACA,UACA,aACA,kBACA,aACA,cACA,kBACA,WACA,WACA,qBACA,eACA,qBACA,yBACA,aACA,aACA,gBACA,eACA,kBACA,iBACA,cACA,gBACA,qCACA,cACA,UACA,YACA,SACA,YACA,wBACA,QACA,kBACA,eACA,kBACA,cAEFC,YAAa,CACX,gBACA,aACA,SACA,YACA,cACA,kBACA,cACA,iBACA,eACA,gBACA,UACA,aAEFpC,QAAS,CAAC,kBAAmB,YAAa,oBAAqB,UAE/DmB,WAAY,CAAC,WAAY,UAGzBlH,UAAW,CACT,UACA,UACA,QACA,OACA,YACA,iBACA,OACA,OACA,UACA,QACA,WACA,SACA,eC3TSjD,GAAWN,EAAgB,CAEtCsG,SAAU,CACR,MACA,MACA,QACA,MACA,MACA,KACA,MACA,gBACA,SACA,QACA,UACA,QACA,SACA,OACA,KACA,UACA,QACA,aACA,QACA,YACA,WACA,UACA,SACA,SACA,UACA,aACA,WACA,gBACA,WACA,UACA,SACA,QACA,UACA,eACA,eACA,oBACA,eACA,SACA,WACA,OACA,aACA,UACA,UACA,SACA,OACA,OACA,OACA,WACA,cACA,SACA,OACA,OACA,SACA,SACA,OACA,UACA,SACA,OACA,WACA,QACA,OACA,aACA,MACA,UACA,WACA,gBACA,OACA,OACA,WACA,OACA,QACA,QACA,SACA,WACA,WACA,cACA,kBACA,KACA,KACA,QACA,QACA,SACA,YACA,OACA,KACA,OACA,MACA,OACA,OACA,OACA,SACA,OACA,QACA,WACA,UACA,eACA,MACA,OACA,SACA,KACA,MACA,UACA,KACA,OACA,iBACA,YACA,aACA,UACA,SACA,KACA,QACA,QACA,OACA,UACA,QACA,OACA,YACA,UACA,QACA,OACA,YACA,SACA,YACA,OACA,WACA,cACA,aACA,cACA,UACA,WACA,SACA,SACA,SACA,QACA,WACA,WACA,aACA,OACA,OACA,SACA,gBACA,SACA,yBACA,iCACA,0BACA,eACA,MACA,UACA,WACA,OACA,aACA,cACA,QACA,cACA,WACA,OACA,KACA,MACA,OACA,cACA,UACA,WACA,cACA,UACA,QACA,SACA,UACA,SACA,aACA,MACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,OACA,eACA,aAEFqF,KAAM,CACJ,WACA,SACA,MACA,MACA,MACA,WACA,QACA,MACA,MACA,MACA,KACA,MACA,YACA,KACA,gBACA,MACA,QACA,UACA,MACA,aACA,OACA,KACA,UACA,WACA,OACA,UACA,OACA,YACA,mBACA,cACA,QACA,QACA,WACA,UACA,YACA,SACA,SACA,UACA,aACA,aACA,cACA,WACA,UACA,gBACA,QACA,SACA,QACA,UACA,eACA,eACA,oBACA,eACA,SACA,OACA,MACA,aACA,MACA,UACA,UACA,UACA,aACA,WACA,SACA,OACA,WACA,aACA,cACA,aACA,WACA,SACA,SACA,OACA,WACA,SACA,YACA,OACA,UACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,MACA,UACA,UACA,QACA,OACA,OACA,MACA,SACA,KACA,OACA,QACA,QACA,SACA,OACA,WACA,YACA,KACA,UACA,QACA,YACA,YACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,WACA,OACA,KACA,YACA,OACA,MACA,WACA,OACA,UACA,OACA,QACA,OACA,QACA,QACA,QACA,MACA,MACA,SACA,SACA,QACA,QACA,WACA,UACA,QACA,OACA,KACA,OACA,MACA,OACA,SACA,UACA,eACA,KACA,OACA,OACA,SACA,KACA,QACA,QACA,SACA,WACA,MACA,UACA,SACA,WACA,YACA,UACA,WACA,UACA,QACA,aACA,YACA,SACA,OACA,OACA,aACA,WACA,WACA,SACA,QACA,WACA,OACA,SACA,SACA,SACA,UACA,SACA,UACA,eACA,MACA,OACA,WACA,OACA,QACA,MACA,QACA,UACA,WACA,WACA,aACA,YACA,MACA,cACA,QACA,YACA,OACA,YACA,gBACA,kBACA,KACA,WACA,cACA,YACA,cACA,OACA,OACA,QACA,SACA,UACA,SACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,OACA,WACA,QACA,OACA,OACA,QACA,OACA,UCxZEnI,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,OACA,QACA,WACA,SACA,SACA,eACA,WACA,SACA,uBAGA,gBACA,SAEA,MAEA,eACA,oDACA,aAEA,wCACA,eACA,yCAGI4F,GAAiB5F,EAAc,CAEnC,SACA,mBAEA,gBAEA,yBAEA,cACA,MACA,0BACA,eAEA,iBAEA,iCACA,gBACA,YACA,gBACA,aACA,qBACA,oBACA,eACA,gBACA,mBACA,aACA,cACA,WACA,iBACA,gBACA,qBACA,SACA,qBACA,oBACA,4BACA,2BACA,4BACA,kBACA,cACA,cACA,mBACA,sBACA,UACA,wBACA,oBACA,oBACA,0BACA,eACA,WACA,aACA,yBACA,yBACA,WACA,+BACA,0BACA,gBACA,gCACA,6BACA,eACA,YACA,aACA,oBACA,OACA,WACA,kBACA,iBACA,mBACA,WACA,qBACA,gBACA,aACA,uBACA,uBACA,oBACA,mBACA,yBACA,iBACA,eACA,UACA,YACA,mBACA,iBACA,oBACA,WACA,yBACA,0BACA,QACA,YACA,kBACA,wBACA,QACA,WACA,eACA,QACA,aACA,eACA,oBACA,UACA,SACA,qBACA,UACA,kBACA,qBACA,YACA,qBACA,mBACA,YACA,4BACA,QACA,oBACA,UACA,yBACA,2BACA,oBACA,gBACA,UACA,uBACA,qBACA,oBACA,qBACA,qBACA,6BACA,qBACA,SACA,SACA,aACA,OACA,QACA,WACA,OACA,SACA,uBACA,kBACA,sBACA,OACA,6BACA,WACA,eACA,6BACA,uBACA,cACA,UACA,qBACA,UACA,eACA,gBACA,eACA,YACA,gBACA,aACA,gBACA,qBACA,kBACA,iBACA,gBACA,UACA,QACA,iBACA,WACA,8BACA,UACA,OACA,oBACA,OACA,iBACA,aACA,YACA,0BAGI6F,GAAwB7F,EAAc,CAAC,cAAe,SAAU,cAEhE8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBAEA,0BAGI+F,GAAkB/F,EAAc,CACpC,gDACA,2BAIW8N,GAA8B,CACzC7H,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,GAClB2D,sBAAuBtD,GACvB+I,qBAAqB,EACrBvF,YAAa,CAAC,CAAEC,MAAO,QAASC,SAAU,CAAC,OAC3CE,WAAY,CAAC,QAAS,MACtBC,WAAY,CAAExF,MAAO,KAAMC,KAAM,OACjCyF,WAAY,CAAEE,MAAO,CAAC,KAAMC,OAAQ,CAAC,MACrCI,UAAW,CACT,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAIJa,cAAe,CACb0C,qBAAsB,CAAC,MACvB9E,eAAcA,KClQLpD,GAAWN,EAAgB,CAMtC8G,SAAU,CACR,MACA,MACA,QACA,UACA,MACA,KACA,MACA,aACA,SACA,UACA,SACA,SACA,UACA,OACA,OACA,KACA,OACA,UACA,OACA,SACA,OACA,YACA,QACA,UACA,SACA,YACA,aACA,WACA,UACA,SACA,QACA,eACA,eACA,oBACA,eACA,SACA,WACA,YACA,WACA,kBACA,aACA,aACA,MACA,UACA,UACA,UACA,UACA,SACA,OACA,WACA,gBACA,WACA,cACA,MACA,SACA,OACA,OACA,OACA,OACA,SACA,WACA,UACA,SACA,SACA,OACA,UACA,aACA,QACA,QACA,QACA,SACA,SACA,MACA,QACA,sBACA,yBACA,UACA,OACA,OACA,WACA,QACA,QACA,SACA,uBACA,gBACA,mBACA,cACA,cACA,KACA,SACA,KACA,QACA,SACA,QACA,QACA,cACA,SACA,KACA,MACA,OACA,OACA,OACA,OACA,OACA,UACA,6BACA,YACA,WACA,OACA,UACA,OACA,MACA,OACA,OACA,UACA,QACA,OACA,OACA,QACA,QACA,OACA,YACA,iBACA,OACA,OACA,WACA,WACA,OACA,eACA,QACA,WACA,aACA,YACA,aACA,YACA,QACA,qBACA,gBACA,MACA,WACA,UACA,mBACA,MACA,qBACA,mBACA,OACA,UACA,KACA,WACA,SACA,aACA,KACA,QACA,MACA,QACA,UACA,OACA,YACA,UACA,YACA,QACA,QACA,OACA,QACA,OACA,aACA,SACA,UACA,SACA,SACA,UACA,UACA,WACA,SACA,SACA,QACA,kBACA,kBACA,sBACA,QACA,SACA,UACA,qBACA,SACA,YACA,YACA,YACA,MACA,OACA,SACA,WACA,UACA,WACA,MACA,iBACA,oBACA,YACA,sBACA,eACA,eACA,iBACA,mBACA,WACA,aACA,gBACA,QACA,aACA,OACA,WACA,UACA,WACA,KACA,WACA,UACA,OACA,YACA,OACA,QACA,SACA,SACA,WACA,SACA,QACA,MACA,QACA,WACA,WACA,gBACA,QACA,SACA,YACA,UACA,eACA,UACA,OACA,QACA,QACA,SACA,OACA,SACA,QACA,MACA,aACA,cC1PSnG,GAAYX,EAAgB,CAgBvCkH,IAAK,CACH,MACA,OACA,UACA,UACA,cACA,cACA,YACA,wBACA,mCACA,gCACA,iCACA,8BACA,oBACA,QACA,OACA,OACA,QACA,MACA,MACA,SACA,UACA,YACA,SACA,UACA,OACA,OACA,UACA,OACA,mBACA,cACA,UACA,WACA,eACA,YACA,UACA,SACA,YACA,gBACA,OACA,UACA,aACA,MACA,MACA,QACA,YACA,UACA,eACA,eACA,eACA,oBACA,eACA,UACA,WACA,OACA,WACA,WACA,cACA,WACA,aACA,MACA,UACA,aACA,YACA,YACA,SACA,UACA,UACA,aACA,MACA,cACA,MACA,qBACA,MACA,UACA,QACA,QACA,cACA,QACA,SACA,aACA,cACA,YACA,gBACA,iBACA,qBACA,qBACA,uBACA,qBACA,mBACA,sBACA,kBACA,4BACA,gBACA,oBACA,oBACA,kBACA,sBACA,kBACA,iBACA,2BACA,aACA,aACA,WACA,WACA,eACA,MACA,YACA,OACA,cACA,KACA,SACA,YACA,YACA,aACA,aACA,UACA,SACA,QACA,WACA,KACA,UACA,WACA,6BACA,2BACA,6BACA,yBACA,uBACA,yBACA,kBACA,sBACA,oBACA,sBACA,sBACA,gBACA,cACA,kBACA,gBACA,kBACA,qBACA,mBACA,qBACA,MACA,WACA,aACA,QACA,OACA,QACA,OACA,SACA,OACA,KACA,YACA,iBACA,SACA,MACA,QACA,OACA,OACA,QACA,QACA,MACA,MACA,SACA,cACA,MACA,SACA,MACA,QACA,YACA,iBACA,MACA,MACA,YACA,QACA,SACA,eACA,eACA,kBACA,kBACA,KACA,QACA,WACA,MACA,QACA,UACA,QACA,UACA,OACA,OACA,SACA,SACA,UACA,UACA,QACA,QACA,QACA,YACA,aACA,OACA,QACA,SACA,SACA,cACA,OACA,OACA,UACA,OACA,MACA,QACA,QACA,UACA,cACA,kBACA,QACA,OACA,SACA,aACA,cACA,cACA,UACA,SACA,YACA,kBACA,MACA,WACA,MACA,OACA,WACA,cACA,cACA,YACA,eACA,gBACA,cACA,YACA,UACA,UACA,UACA,YACA,aACA,eACA,OACA,QACA,WACA,QACA,QACA,iBACA,YACA,QAEA,WACA,WACA,gBACA,OACA,SACA,WACA,UACA,WACA,aACA,UACA,OACA,UACA,aACA,OAGA,MACA,UACA,WACA,YACA,MACA,UACA,SACA,UACA,MACA,UACA,QACA,QACA,SACA,mBACA,OACA,WACA,YACA,OACA,OACA,OACA,gBACA,UACA,mBACA,SACA,YACA,OACA,OACA,UClTE1D,GAAiB1F,EAAc,CAAC,0CAEhC2F,GAAkB3F,EAAc,CAEpC,OACA,OACA,QACA,WACA,SACA,eACA,WACA,QACA,SAGA,yBACA,SACA,iBACA,0BAEA,MAEA,cACA,qFACA,4DACA,4CAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,gBAEA,qCAEA,uBACA,eACA,6BACA,gBACA,kBACA,SACA,mBAEA,mBAEA,iBACA,WACA,2BACA,iBACA,iBACA,sBACA,aACA,aACA,gBACA,kBACA,cACA,kBACA,kBACA,SACA,uBACA,cACA,OACA,SACA,mBACA,4BACA,+BACA,sBACA,cACA,iBACA,yBACA,QACA,SACA,kBACA,eACA,eACA,cACA,mBACA,kBACA,uBACA,cACA,cACA,qBACA,WACA,kBACA,kBACA,gBACA,gBACA,aACA,YACA,gBACA,iBACA,qBACA,YACA,YACA,YACA,UACA,UACA,QACA,QACA,QACA,UACA,OACA,kBACA,kBACA,YACA,wBACA,WACA,2BACA,cACA,kBACA,iBACA,UACA,oBACA,uBACA,oBACA,oBACA,cACA,eACA,UACA,qBACA,QACA,eACA,gBACA,gBACA,cACA,UACA,mBACA,qBACA,SACA,WACA,wBACA,YACA,oBACA,mBACA,YACA,eACA,qBACA,WACA,kBACA,OACA,qBACA,iBACA,eACA,uBACA,uBACA,uBACA,wBACA,oBACA,mBACA,mBACA,iBACA,cACA,eACA,cACA,qBACA,uBACA,cACA,aACA,qBACA,mBACA,eACA,kBACA,sBACA,wBACA,mBACA,eACA,gBACA,uBACA,sBACA,gBACA,aACA,mBACA,cACA,oBACA,cACA,iBACA,gBACA,WACA,oBACA,kBACA,0BACA,iBACA,gBACA,cACA,oBACA,yBACA,gBACA,eACA,mBACA,aACA,gBACA,kBACA,gBACA,MACA,KAEA,UACA,QACA,OACA,SACA,SACA,UAGI6F,GAAwB7F,EAAc,CAC1C,yBACA,SACA,YACA,UAGI8F,GAAgB9F,EAAc,CAClC,OACA,qCACA,uBACA,sCAEA,kBAGI+F,GAAkB/F,EAAc,CACpC,YACA,YACA,gBACA,2BAGW+N,GAAgC,CAC3C9H,iBAAkB,CAChBP,eADgB,GAEhBC,gBAAiB,IAAIA,MAAoBC,IACzCC,sBAHgB,GAIhBC,cAJgB,GAKhBC,gBALgB,GAMhBG,iBAAkB1D,GAClB2D,sBAAuBtD,GAEvBwD,YAAa,CACX,WACA,WACA,CAAEC,MAAO,SAAUC,SAAU,CAAC,IAAK,KAAMC,eAAe,IAE1DC,WAAY,CAAC,MACbC,WAAY,CAAExF,MAAO,IAAKC,KAAM,IAAKoI,sBAAsB,GAC3DvC,cAAe,CACb,CAAEC,MAAO,qBACT,CAAEX,MAAO,KAAMC,SAAU,CAAC,KAAMC,eAAe,IAEjDU,iBAAkB,CAAC,KAAM,KACzBC,UAAW,CACT,KACA,IACA,IACA,IACA,IACA,KACA,KACA,MACA,KACA,KACA,KACA,MACA,MACA,KACA,OAEFC,YAAWA,IAEbY,cAAe,CACb0C,qBAAsB,CAAC,KAAM,MAAO,OACpC9E,eAAcA,KCnRL/C,GAAYX,EAAgB,CAkBvCkH,IAAK,CACH,MACA,OACA,QACA,aACA,iBACA,YACA,wBACA,oBACA,+BACA,4BACA,6BACA,eACA,0BACA,uBACA,wBACA,4BACA,yBACA,YACA,eACA,YACA,gBACA,kBACA,0BACA,iBACA,eACA,qBACA,iBACA,gBACA,aACA,cACA,kBACA,kBACA,mBACA,iBACA,WACA,YACA,aACA,UACA,aACA,UACA,aACA,YACA,YACA,UACA,aACA,YACA,UACA,mBACA,mBACA,kBACA,QACA,OACA,QACA,OACA,QACA,QACA,oCACA,+BACA,MACA,uBACA,uBACA,gBACA,aACA,SACA,aACA,sBACA,uBACA,uBACA,eACA,gBACA,SACA,QACA,YACA,eACA,gBACA,SACA,aACA,UACA,cACA,UACA,SACA,aACA,UACA,cACA,wBACA,uBACA,OACA,OACA,OACA,OACA,YACA,aACA,YACA,MACA,OACA,WACA,UACA,YACA,uBACA,WACA,SACA,YACA,2BACA,yBACA,WACA,mBACA,eACA,OACA,MACA,OACA,MACA,QACA,WACA,YACA,aACA,YACA,kBACA,0BACA,iBACA,mBACA,eACA,qBACA,iBACA,eACA,iBACA,kBACA,0BACA,kBACA,oBACA,sBACA,eACA,oBACA,sBACA,eACA,kBACA,oBACA,wBACA,2BACA,4BACA,mCACA,iCACA,kBACA,YACA,aACA,UACA,WACA,UACA,SACA,oBACA,oBACA,UACA,cACA,UACA,aACA,OACA,eACA,UACA,cACA,WACA,aACA,MACA,eACA,6BACA,uBACA,2CACA,UACA,8BACA,YACA,cACA,UACA,QACA,8BACA,YACA,MACA,oBACA,UACA,kBACA,wBACA,WACA,oBACA,oBACA,qBACA,SACA,WACA,WACA,cACA,OACA,WACA,YACA,oBACA,oBACA,aACA,MACA,iBACA,cACA,eACA,aACA,aACA,OACA,SACA,SACA,MACA,SACA,QACA,YACA,eACA,UACA,SACA,eACA,gBACA,WACA,YACA,aACA,UACA,aACA,UACA,gBACA,aACA,YACA,UACA,6BACA,aACA,gBACA,YACA,qBACA,UACA,mBACA,mBACA,kBACA,yBACA,yBACA,WACA,MACA,WACA,gBACA,mBACA,aACA,OACA,QACA,OACA,SACA,MACA,OACA,WACA,WACA,UACA,KACA,YACA,iBACA,MACA,gBACA,wBACA,QACA,OACA,QACA,oCACA,MACA,UACA,aACA,yBACA,qBACA,qBACA,SACA,MACA,MACA,UACA,kBACA,MACA,OACA,YACA,iBACA,WACA,SACA,YACA,QACA,SACA,aACA,MACA,OACA,aACA,mBACA,6BACA,gBACA,gBACA,cACA,cACA,eACA,WACA,aACA,YACA,YACA,eACA,kBACA,kBACA,KACA,qBACA,iBACA,oBACA,WACA,MACA,QACA,eACA,6BACA,gBACA,2BACA,wBACA,6BACA,UACA,SACA,UACA,OACA,kBACA,SACA,eACA,eACA,cACA,iBACA,gBACA,oBACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,YACA,YACA,SACA,UACA,oCACA,qCACA,4CACA,kCACA,4BACA,qBACA,cACA,UACA,QACA,QACA,QACA,aACA,OACA,QACA,kBACA,8BACA,OACA,OACA,OACA,OACA,0BACA,OACA,WACA,cACA,OACA,WACA,cACA,OACA,MACA,OACA,OACA,UACA,QACA,QACA,aACA,iBACA,OACA,SACA,UACA,YACA,YACA,eACA,WACA,cACA,WACA,YACA,aACA,cACA,aACA,cACA,eACA,YACA,gBACA,eACA,cACA,cACA,aACA,cACA,cACA,qBACA,0BACA,sBACA,sBACA,aACA,qBACA,qBACA,uBACA,kBACA,gBACA,YACA,mBACA,gBACA,cACA,eACA,WACA,iBACA,aACA,aACA,eACA,eACA,YACA,aACA,cACA,UACA,gBACA,mBACA,WACA,YACA,OACA,UACA,UACA,OACA,UACA,UACA,4CACA,8BACA,aACA,SACA,aACA,cACA,mBACA,SACA,wBACA,kBACA,SACA,YACA,MACA,UACA,uBACA,2BACA,+BACA,4CACA,uCACA,4BACA,sBACA,0BACA,gCACA,2BACA,gCACA,mCACA,mCACA,2CACA,wCACA,sCACA,uCACA,qCACA,4CACA,8BACA,2BACA,oCACA,2BACA,oCACA,gCACA,sCACA,yBACA,8CACA,gCACA,qCACA,iBACA,gCACA,mCACA,kCACA,sCACA,iCACA,sCACA,uCACA,2BACA,qBACA,4BACA,yCACA,0BACA,mCACA,oCACA,yBACA,gCACA,gBACA,6CACA,qCACA,cACA,mBACA,+BACA,iBACA,6BACA,8BACA,MACA,OACA,kBACA,eACA,kBACA,aACA,UACA,WACA,uBACA,eACA,gBACA,WACA,YACA,aACA,UACA,aACA,UACA,OACA,aACA,YACA,aACA,YACA,eACA,cACA,UACA,YACA,UACA,OACA,eACA,mBACA,mBACA,kBACA,aACA,SACA,YACA,OACA,WACA,QACA,QACA,2BACA,2BACA,WACA,wBACA,wBACA,iBACA,gBACA,iBACA,cACA,iBACA,gBACA,iBACA,gBACA,mBACA,kBACA,cACA,mBACA,uBACA,uBACA,sBACA,SACA,UACA,UACA,QACA,cACA,WACA,qBACA,UACA,WACA,WACA,gBACA,eACA,yBACA,6BACA,eACA,SACA,OACA,aACA,gBACA,MACA,aACA,YACA,eACA,YACA,OACA,OACA,aACA,UACA,QACA,UACA,aACA,UC7lBS5G,GAAWN,EAAgB,CAItCkH,IAAK,CACH,UACA,MACA,QACA,MACA,MACA,KACA,UACA,KACA,OACA,OACA,QACA,SACA,UACA,aACA,aACA,SACA,QACA,UACA,eACA,eACA,oBACA,eACA,WACA,SACA,WACA,OACA,OACA,SACA,QACA,YACA,MACA,OACA,OACA,QACA,QACA,YACA,SACA,QACA,KACA,YACA,QACA,SACA,YACA,OACA,KACA,QACA,OACA,UACA,OACA,OACA,YACA,iBACA,QACA,UACA,MACA,OACA,KACA,KACA,KACA,QACA,eACA,UACA,SACA,SACA,QACA,QACA,MACA,OACA,SACA,SACA,SACA,MACA,OACA,QACA,QACA,cACA,OACA,KACA,UACA,OACA,WACA,QACA,SACA,SACA,QACA,SACA,OACA,OACA,WACA,QACA,QAGFX,WAAY,CAAC,aC/FT/C,GAAiB1F,EAAc,CAAC,4BAEhC2F,GAAkB3F,EAAc,CAEpC,mBACA,OACA,QACA,WACA,SACA,eACA,WACA,UACA,QACA,SACA,uBAGA,qDACA,qBACA,SAEA,MAGA,gEAEA,uDACA,8EACA,aACA,oDACA,cACA,iBACA,aACA,qBACA,6BACA,iCAGI4F,GAAiB5F,EAAc,CAEnC,SAEA,cAEA,yBAEA,0BACA,YACA,YACA,+BACA,sBACA,eACA,gBACA,4BACA,gBACA,6CACA,oBACA,mCACA,oBACA,iCACA,+BACA,uBACA,wBACA,kBACA,gBACA,+BAEA,+BAcA,gBACA,wBACA,mBACA,iBACA,uBACA,uBACA,oBACA,iBACA,oBACA,uBACA,0BACA,uBACA,iCACA,aACA,kBACA,0BACA,yBACA,aACA,0BACA,eACA,6BACA,iBACA,gBACA,uBACA,cACA,cACA,4BACA,eACA,YACA,aACA,aACA,aACA,kBACA,QACA,OACA,SACA,YACA,iBACA,yBACA,oBACA,kBACA,2BACA,wBACA,wBACA,qBACA,kBACA,qBACA,yBACA,wBACA,2BACA,wBACA,kCACA,cACA,mBACA,2BACA,0BACA,cACA,2BACA,gBACA,8BACA,kBACA,wBACA,eACA,eACA,6BACA,gBACA,aACA,cACA,cACA,mBACA,SACA,oBACA,0BACA,uBACA,oBACA,uBACA,0BACA,6BACA,0BACA,gBACA,qBACA,kBACA,6BACA,kBACA,oBACA,0BACA,iBACA,iBACA,kBACA,iBACA,gBACA,uBACA,gBACA,gBACA,qBACA,kBACA,gBACA,sBACA,sBACA,mBACA,gBACA,mBACA,uBACA,sBACA,yBACA,sBACA,YACA,iBACA,yBACA,wBACA,YACA,yBACA,cACA,gBACA,sBACA,aACA,aACA,cACA,WACA,YACA,YACA,YACA,iBACA,oBACA,eACA,UACA,MACA,kBACA,aACA,SACA,OACA,QACA,MACA,SACA,cACA,WACA,eACA,mBACA,iBACA,mCACA,sCACA,gCACA,0BACA,uBACA,uBACA,oBACA,iBACA,uBACA,cACA,oBACA,aACA,wBACA,wBACA,0BACA,wBACA,eACA,6BACA,kBACA,aACA,oBACA,kBACA,eACA,4BACA,6BACA,0BACA,yBACA,aACA,2BACA,eACA,iBACA,wBACA,cACA,gCACA,mCACA,cACA,eACA,cACA,YACA,aACA,oBACA,sBACA,aACA,iBACA,aACA,kBACA,6BACA,kBACA,gBACA,eACA,aACA,QACA,eACA,WACA,aACA,sBACA,kBAGI6F,GAAwB7F,EAAc,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","sources":["webpack://sqlFormatter/webpack/universalModuleDefinition","webpack://sqlFormatter/./node_modules/nearley/lib/nearley.js","webpack://sqlFormatter/webpack/bootstrap","webpack://sqlFormatter/webpack/runtime/compat get default export","webpack://sqlFormatter/webpack/runtime/define property getters","webpack://sqlFormatter/webpack/runtime/hasOwnProperty shorthand","webpack://sqlFormatter/webpack/runtime/make namespace object","webpack://sqlFormatter/./src/lexer/token.ts","webpack://sqlFormatter/./src/expandPhrases.ts","webpack://sqlFormatter/./src/utils.ts","webpack://sqlFormatter/./src/languages/bigquery/bigquery.keywords.ts","webpack://sqlFormatter/./src/languages/bigquery/bigquery.functions.ts","webpack://sqlFormatter/./src/languages/bigquery/bigquery.formatter.ts","webpack://sqlFormatter/./src/languages/db2/db2.functions.ts","webpack://sqlFormatter/./src/languages/db2/db2.keywords.ts","webpack://sqlFormatter/./src/languages/db2/db2.formatter.ts","webpack://sqlFormatter/./src/languages/db2i/db2i.functions.ts","webpack://sqlFormatter/./src/languages/db2i/db2i.keywords.ts","webpack://sqlFormatter/./src/languages/db2i/db2i.formatter.ts","webpack://sqlFormatter/./src/languages/hive/hive.functions.ts","webpack://sqlFormatter/./src/languages/hive/hive.keywords.ts","webpack://sqlFormatter/./src/languages/hive/hive.formatter.ts","webpack://sqlFormatter/./src/languages/mariadb/likeMariaDb.ts","webpack://sqlFormatter/./src/languages/mariadb/mariadb.keywords.ts","webpack://sqlFormatter/./src/languages/mariadb/mariadb.functions.ts","webpack://sqlFormatter/./src/languages/mariadb/mariadb.formatter.ts","webpack://sqlFormatter/./src/languages/mysql/mysql.keywords.ts","webpack://sqlFormatter/./src/languages/mysql/mysql.functions.ts","webpack://sqlFormatter/./src/languages/mysql/mysql.formatter.ts","webpack://sqlFormatter/./src/languages/n1ql/n1ql.functions.ts","webpack://sqlFormatter/./src/languages/n1ql/n1ql.keywords.ts","webpack://sqlFormatter/./src/languages/n1ql/n1ql.formatter.ts","webpack://sqlFormatter/./src/languages/plsql/plsql.keywords.ts","webpack://sqlFormatter/./src/languages/plsql/plsql.functions.ts","webpack://sqlFormatter/./src/languages/plsql/plsql.formatter.ts","webpack://sqlFormatter/./src/languages/postgresql/postgresql.functions.ts","webpack://sqlFormatter/./src/languages/postgresql/postgresql.keywords.ts","webpack://sqlFormatter/./src/languages/postgresql/postgresql.formatter.ts","webpack://sqlFormatter/./src/languages/redshift/redshift.functions.ts","webpack://sqlFormatter/./src/languages/redshift/redshift.keywords.ts","webpack://sqlFormatter/./src/languages/redshift/redshift.formatter.ts","webpack://sqlFormatter/./src/languages/spark/spark.keywords.ts","webpack://sqlFormatter/./src/languages/spark/spark.functions.ts","webpack://sqlFormatter/./src/languages/spark/spark.formatter.ts","webpack://sqlFormatter/./src/languages/sqlite/sqlite.functions.ts","webpack://sqlFormatter/./src/languages/sqlite/sqlite.keywords.ts","webpack://sqlFormatter/./src/languages/sqlite/sqlite.formatter.ts","webpack://sqlFormatter/./src/languages/sql/sql.functions.ts","webpack://sqlFormatter/./src/languages/sql/sql.keywords.ts","webpack://sqlFormatter/./src/languages/sql/sql.formatter.ts","webpack://sqlFormatter/./src/languages/trino/trino.functions.ts","webpack://sqlFormatter/./src/languages/trino/trino.keywords.ts","webpack://sqlFormatter/./src/languages/trino/trino.formatter.ts","webpack://sqlFormatter/./src/languages/transactsql/transactsql.functions.ts","webpack://sqlFormatter/./src/languages/transactsql/transactsql.keywords.ts","webpack://sqlFormatter/./src/languages/transactsql/transactsql.formatter.ts","webpack://sqlFormatter/./src/languages/singlestoredb/singlestoredb.keywords.ts","webpack://sqlFormatter/./src/languages/singlestoredb/singlestoredb.functions.ts","webpack://sqlFormatter/./src/languages/singlestoredb/singlestoredb.formatter.ts","webpack://sqlFormatter/./src/languages/snowflake/snowflake.functions.ts","webpack://sqlFormatter/./src/languages/snowflake/snowflake.keywords.ts","webpack://sqlFormatter/./src/languages/snowflake/snowflake.formatter.ts","webpack://sqlFormatter/./src/lexer/regexUtil.ts","webpack://sqlFormatter/./src/lexer/regexFactory.ts","webpack://sqlFormatter/./src/lexer/lineColFromIndex.ts","webpack://sqlFormatter/./src/lexer/TokenizerEngine.ts","webpack://sqlFormatter/./src/lexer/NestedComment.ts","webpack://sqlFormatter/./src/lexer/Tokenizer.ts","webpack://sqlFormatter/./src/dialect.ts","webpack://sqlFormatter/./src/formatter/config.ts","webpack://sqlFormatter/./src/formatter/Params.ts","webpack://sqlFormatter/./src/lexer/disambiguateTokens.ts","webpack://sqlFormatter/./src/parser/LexerAdapter.ts","webpack://sqlFormatter/./src/parser/ast.ts","webpack://sqlFormatter/./src/parser/grammar.ts","webpack://sqlFormatter/./src/parser/createParser.ts","webpack://sqlFormatter/./src/formatter/formatCommaPositions.ts","webpack://sqlFormatter/./src/formatter/Layout.ts","webpack://sqlFormatter/./src/formatter/Indentation.ts","webpack://sqlFormatter/./src/formatter/InlineLayout.ts","webpack://sqlFormatter/./src/formatter/ExpressionFormatter.ts","webpack://sqlFormatter/./src/formatter/tabularStyle.ts","webpack://sqlFormatter/./src/formatter/Formatter.ts","webpack://sqlFormatter/./src/formatter/formatAliasPositions.ts","webpack://sqlFormatter/./src/validateConfig.ts","webpack://sqlFormatter/./src/sqlFormatter.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sqlFormatter\"] = factory();\n\telse\n\t\troot[\"sqlFormatter\"] = factory();\n})(this, () => {\nreturn ","(function(root, factory) {\n if (typeof module === 'object' && module.exports) {\n module.exports = factory();\n } else {\n root.nearley = factory();\n }\n}(this, function() {\n\n function Rule(name, symbols, postprocess) {\n this.id = ++Rule.highestId;\n this.name = name;\n this.symbols = symbols; // a list of literal | regex class | nonterminal\n this.postprocess = postprocess;\n return this;\n }\n Rule.highestId = 0;\n\n Rule.prototype.toString = function(withCursorAt) {\n var symbolSequence = (typeof withCursorAt === \"undefined\")\n ? this.symbols.map(getSymbolShortDisplay).join(' ')\n : ( this.symbols.slice(0, withCursorAt).map(getSymbolShortDisplay).join(' ')\n + \" ● \"\n + this.symbols.slice(withCursorAt).map(getSymbolShortDisplay).join(' ') );\n return this.name + \" → \" + symbolSequence;\n }\n\n\n // a State is a rule at a position from a given starting point in the input stream (reference)\n function State(rule, dot, reference, wantedBy) {\n this.rule = rule;\n this.dot = dot;\n this.reference = reference;\n this.data = [];\n this.wantedBy = wantedBy;\n this.isComplete = this.dot === rule.symbols.length;\n }\n\n State.prototype.toString = function() {\n return \"{\" + this.rule.toString(this.dot) + \"}, from: \" + (this.reference || 0);\n };\n\n State.prototype.nextState = function(child) {\n var state = new State(this.rule, this.dot + 1, this.reference, this.wantedBy);\n state.left = this;\n state.right = child;\n if (state.isComplete) {\n state.data = state.build();\n // Having right set here will prevent the right state and its children\n // form being garbage collected\n state.right = undefined;\n }\n return state;\n };\n\n State.prototype.build = function() {\n var children = [];\n var node = this;\n do {\n children.push(node.right.data);\n node = node.left;\n } while (node.left);\n children.reverse();\n return children;\n };\n\n State.prototype.finish = function() {\n if (this.rule.postprocess) {\n this.data = this.rule.postprocess(this.data, this.reference, Parser.fail);\n }\n };\n\n\n function Column(grammar, index) {\n this.grammar = grammar;\n this.index = index;\n this.states = [];\n this.wants = {}; // states indexed by the non-terminal they expect\n this.scannable = []; // list of states that expect a token\n this.completed = {}; // states that are nullable\n }\n\n\n Column.prototype.process = function(nextColumn) {\n var states = this.states;\n var wants = this.wants;\n var completed = this.completed;\n\n for (var w = 0; w < states.length; w++) { // nb. we push() during iteration\n var state = states[w];\n\n if (state.isComplete) {\n state.finish();\n if (state.data !== Parser.fail) {\n // complete\n var wantedBy = state.wantedBy;\n for (var i = wantedBy.length; i--; ) { // this line is hot\n var left = wantedBy[i];\n this.complete(left, state);\n }\n\n // special-case nullables\n if (state.reference === this.index) {\n // make sure future predictors of this rule get completed.\n var exp = state.rule.name;\n (this.completed[exp] = this.completed[exp] || []).push(state);\n }\n }\n\n } else {\n // queue scannable states\n var exp = state.rule.symbols[state.dot];\n if (typeof exp !== 'string') {\n this.scannable.push(state);\n continue;\n }\n\n // predict\n if (wants[exp]) {\n wants[exp].push(state);\n\n if (completed.hasOwnProperty(exp)) {\n var nulls = completed[exp];\n for (var i = 0; i < nulls.length; i++) {\n var right = nulls[i];\n this.complete(state, right);\n }\n }\n } else {\n wants[exp] = [state];\n this.predict(exp);\n }\n }\n }\n }\n\n Column.prototype.predict = function(exp) {\n var rules = this.grammar.byName[exp] || [];\n\n for (var i = 0; i < rules.length; i++) {\n var r = rules[i];\n var wantedBy = this.wants[exp];\n var s = new State(r, 0, this.index, wantedBy);\n this.states.push(s);\n }\n }\n\n Column.prototype.complete = function(left, right) {\n var copy = left.nextState(right);\n this.states.push(copy);\n }\n\n\n function Grammar(rules, start) {\n this.rules = rules;\n this.start = start || this.rules[0].name;\n var byName = this.byName = {};\n this.rules.forEach(function(rule) {\n if (!byName.hasOwnProperty(rule.name)) {\n byName[rule.name] = [];\n }\n byName[rule.name].push(rule);\n });\n }\n\n // So we can allow passing (rules, start) directly to Parser for backwards compatibility\n Grammar.fromCompiled = function(rules, start) {\n var lexer = rules.Lexer;\n if (rules.ParserStart) {\n start = rules.ParserStart;\n rules = rules.ParserRules;\n }\n var rules = rules.map(function (r) { return (new Rule(r.name, r.symbols, r.postprocess)); });\n var g = new Grammar(rules, start);\n g.lexer = lexer; // nb. storing lexer on Grammar is iffy, but unavoidable\n return g;\n }\n\n\n function StreamLexer() {\n this.reset(\"\");\n }\n\n StreamLexer.prototype.reset = function(data, state) {\n this.buffer = data;\n this.index = 0;\n this.line = state ? state.line : 1;\n this.lastLineBreak = state ? -state.col : 0;\n }\n\n StreamLexer.prototype.next = function() {\n if (this.index < this.buffer.length) {\n var ch = this.buffer[this.index++];\n if (ch === '\\n') {\n this.line += 1;\n this.lastLineBreak = this.index;\n }\n return {value: ch};\n }\n }\n\n StreamLexer.prototype.save = function() {\n return {\n line: this.line,\n col: this.index - this.lastLineBreak,\n }\n }\n\n StreamLexer.prototype.formatError = function(token, message) {\n // nb. this gets called after consuming the offending token,\n // so the culprit is index-1\n var buffer = this.buffer;\n if (typeof buffer === 'string') {\n var lines = buffer\n .split(\"\\n\")\n .slice(\n Math.max(0, this.line - 5), \n this.line\n );\n\n var nextLineBreak = buffer.indexOf('\\n', this.index);\n if (nextLineBreak === -1) nextLineBreak = buffer.length;\n var col = this.index - this.lastLineBreak;\n var lastLineDigits = String(this.line).length;\n message += \" at line \" + this.line + \" col \" + col + \":\\n\\n\";\n message += lines\n .map(function(line, i) {\n return pad(this.line - lines.length + i + 1, lastLineDigits) + \" \" + line;\n }, this)\n .join(\"\\n\");\n message += \"\\n\" + pad(\"\", lastLineDigits + col) + \"^\\n\";\n return message;\n } else {\n return message + \" at index \" + (this.index - 1);\n }\n\n function pad(n, length) {\n var s = String(n);\n return Array(length - s.length + 1).join(\" \") + s;\n }\n }\n\n function Parser(rules, start, options) {\n if (rules instanceof Grammar) {\n var grammar = rules;\n var options = start;\n } else {\n var grammar = Grammar.fromCompiled(rules, start);\n }\n this.grammar = grammar;\n\n // Read options\n this.options = {\n keepHistory: false,\n lexer: grammar.lexer || new StreamLexer,\n };\n for (var key in (options || {})) {\n this.options[key] = options[key];\n }\n\n // Setup lexer\n this.lexer = this.options.lexer;\n this.lexerState = undefined;\n\n // Setup a table\n var column = new Column(grammar, 0);\n var table = this.table = [column];\n\n // I could be expecting anything.\n column.wants[grammar.start] = [];\n column.predict(grammar.start);\n // TODO what if start rule is nullable?\n column.process();\n this.current = 0; // token index\n }\n\n // create a reserved token for indicating a parse fail\n Parser.fail = {};\n\n Parser.prototype.feed = function(chunk) {\n var lexer = this.lexer;\n lexer.reset(chunk, this.lexerState);\n\n var token;\n while (true) {\n try {\n token = lexer.next();\n if (!token) {\n break;\n }\n } catch (e) {\n // Create the next column so that the error reporter\n // can display the correctly predicted states.\n var nextColumn = new Column(this.grammar, this.current + 1);\n this.table.push(nextColumn);\n var err = new Error(this.reportLexerError(e));\n err.offset = this.current;\n err.token = e.token;\n throw err;\n }\n // We add new states to table[current+1]\n var column = this.table[this.current];\n\n // GC unused states\n if (!this.options.keepHistory) {\n delete this.table[this.current - 1];\n }\n\n var n = this.current + 1;\n var nextColumn = new Column(this.grammar, n);\n this.table.push(nextColumn);\n\n // Advance all tokens that expect the symbol\n var literal = token.text !== undefined ? token.text : token.value;\n var value = lexer.constructor === StreamLexer ? token.value : token;\n var scannable = column.scannable;\n for (var w = scannable.length; w--; ) {\n var state = scannable[w];\n var expect = state.rule.symbols[state.dot];\n // Try to consume the token\n // either regex or literal\n if (expect.test ? expect.test(value) :\n expect.type ? expect.type === token.type\n : expect.literal === literal) {\n // Add it\n var next = state.nextState({data: value, token: token, isToken: true, reference: n - 1});\n nextColumn.states.push(next);\n }\n }\n\n // Next, for each of the rules, we either\n // (a) complete it, and try to see if the reference row expected that\n // rule\n // (b) predict the next nonterminal it expects by adding that\n // nonterminal's start state\n // To prevent duplication, we also keep track of rules we have already\n // added\n\n nextColumn.process();\n\n // If needed, throw an error:\n if (nextColumn.states.length === 0) {\n // No states at all! This is not good.\n var err = new Error(this.reportError(token));\n err.offset = this.current;\n err.token = token;\n throw err;\n }\n\n // maybe save lexer state\n if (this.options.keepHistory) {\n column.lexerState = lexer.save()\n }\n\n this.current++;\n }\n if (column) {\n this.lexerState = lexer.save()\n }\n\n // Incrementally keep track of results\n this.results = this.finish();\n\n // Allow chaining, for whatever it's worth\n return this;\n };\n\n Parser.prototype.reportLexerError = function(lexerError) {\n var tokenDisplay, lexerMessage;\n // Planning to add a token property to moo's thrown error\n // even on erroring tokens to be used in error display below\n var token = lexerError.token;\n if (token) {\n tokenDisplay = \"input \" + JSON.stringify(token.text[0]) + \" (lexer error)\";\n lexerMessage = this.lexer.formatError(token, \"Syntax error\");\n } else {\n tokenDisplay = \"input (lexer error)\";\n lexerMessage = lexerError.message;\n }\n return this.reportErrorCommon(lexerMessage, tokenDisplay);\n };\n\n Parser.prototype.reportError = function(token) {\n var tokenDisplay = (token.type ? token.type + \" token: \" : \"\") + JSON.stringify(token.value !== undefined ? token.value : token);\n var lexerMessage = this.lexer.formatError(token, \"Syntax error\");\n return this.reportErrorCommon(lexerMessage, tokenDisplay);\n };\n\n Parser.prototype.reportErrorCommon = function(lexerMessage, tokenDisplay) {\n var lines = [];\n lines.push(lexerMessage);\n var lastColumnIndex = this.table.length - 2;\n var lastColumn = this.table[lastColumnIndex];\n var expectantStates = lastColumn.states\n .filter(function(state) {\n var nextSymbol = state.rule.symbols[state.dot];\n return nextSymbol && typeof nextSymbol !== \"string\";\n });\n\n if (expectantStates.length === 0) {\n lines.push('Unexpected ' + tokenDisplay + '. I did not expect any more input. Here is the state of my parse table:\\n');\n this.displayStateStack(lastColumn.states, lines);\n } else {\n lines.push('Unexpected ' + tokenDisplay + '. Instead, I was expecting to see one of the following:\\n');\n // Display a \"state stack\" for each expectant state\n // - which shows you how this state came to be, step by step.\n // If there is more than one derivation, we only display the first one.\n var stateStacks = expectantStates\n .map(function(state) {\n return this.buildFirstStateStack(state, []) || [state];\n }, this);\n // Display each state that is expecting a terminal symbol next.\n stateStacks.forEach(function(stateStack) {\n var state = stateStack[0];\n var nextSymbol = state.rule.symbols[state.dot];\n var symbolDisplay = this.getSymbolDisplay(nextSymbol);\n lines.push('A ' + symbolDisplay + ' based on:');\n this.displayStateStack(stateStack, lines);\n }, this);\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n }\n \n Parser.prototype.displayStateStack = function(stateStack, lines) {\n var lastDisplay;\n var sameDisplayCount = 0;\n for (var j = 0; j < stateStack.length; j++) {\n var state = stateStack[j];\n var display = state.rule.toString(state.dot);\n if (display === lastDisplay) {\n sameDisplayCount++;\n } else {\n if (sameDisplayCount > 0) {\n lines.push(' ^ ' + sameDisplayCount + ' more lines identical to this');\n }\n sameDisplayCount = 0;\n lines.push(' ' + display);\n }\n lastDisplay = display;\n }\n };\n\n Parser.prototype.getSymbolDisplay = function(symbol) {\n return getSymbolLongDisplay(symbol);\n };\n\n /*\n Builds a the first state stack. You can think of a state stack as the call stack\n of the recursive-descent parser which the Nearley parse algorithm simulates.\n A state stack is represented as an array of state objects. Within a\n state stack, the first item of the array will be the starting\n state, with each successive item in the array going further back into history.\n\n This function needs to be given a starting state and an empty array representing\n the visited states, and it returns an single state stack.\n\n */\n Parser.prototype.buildFirstStateStack = function(state, visited) {\n if (visited.indexOf(state) !== -1) {\n // Found cycle, return null\n // to eliminate this path from the results, because\n // we don't know how to display it meaningfully\n return null;\n }\n if (state.wantedBy.length === 0) {\n return [state];\n }\n var prevState = state.wantedBy[0];\n var childVisited = [state].concat(visited);\n var childResult = this.buildFirstStateStack(prevState, childVisited);\n if (childResult === null) {\n return null;\n }\n return [state].concat(childResult);\n };\n\n Parser.prototype.save = function() {\n var column = this.table[this.current];\n column.lexerState = this.lexerState;\n return column;\n };\n\n Parser.prototype.restore = function(column) {\n var index = column.index;\n this.current = index;\n this.table[index] = column;\n this.table.splice(index + 1);\n this.lexerState = column.lexerState;\n\n // Incrementally keep track of results\n this.results = this.finish();\n };\n\n // nb. deprecated: use save/restore instead!\n Parser.prototype.rewind = function(index) {\n if (!this.options.keepHistory) {\n throw new Error('set option `keepHistory` to enable rewinding')\n }\n // nb. recall column (table) indicies fall between token indicies.\n // col 0 -- token 0 -- col 1\n this.restore(this.table[index]);\n };\n\n Parser.prototype.finish = function() {\n // Return the possible parsings\n var considerations = [];\n var start = this.grammar.start;\n var column = this.table[this.table.length - 1]\n column.states.forEach(function (t) {\n if (t.rule.name === start\n && t.dot === t.rule.symbols.length\n && t.reference === 0\n && t.data !== Parser.fail) {\n considerations.push(t);\n }\n });\n return considerations.map(function(c) {return c.data; });\n };\n\n function getSymbolLongDisplay(symbol) {\n var type = typeof symbol;\n if (type === \"string\") {\n return symbol;\n } else if (type === \"object\") {\n if (symbol.literal) {\n return JSON.stringify(symbol.literal);\n } else if (symbol instanceof RegExp) {\n return 'character matching ' + symbol;\n } else if (symbol.type) {\n return symbol.type + ' token';\n } else if (symbol.test) {\n return 'token matching ' + String(symbol.test);\n } else {\n throw new Error('Unknown symbol type: ' + symbol);\n }\n }\n }\n\n function getSymbolShortDisplay(symbol) {\n var type = typeof symbol;\n if (type === \"string\") {\n return symbol;\n } else if (type === \"object\") {\n if (symbol.literal) {\n return JSON.stringify(symbol.literal);\n } else if (symbol instanceof RegExp) {\n return symbol.toString();\n } else if (symbol.type) {\n return '%' + symbol.type;\n } else if (symbol.test) {\n return '<' + String(symbol.test) + '>';\n } else {\n throw new Error('Unknown symbol type: ' + symbol);\n }\n }\n }\n\n return {\n Parser: Parser,\n Grammar: Grammar,\n Rule: Rule,\n };\n\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/** Token type enum for all possible Token categories */\nexport enum TokenType {\n QUOTED_IDENTIFIER = 'QUOTED_IDENTIFIER',\n IDENTIFIER = 'IDENTIFIER',\n STRING = 'STRING',\n VARIABLE = 'VARIABLE',\n RESERVED_KEYWORD = 'RESERVED_KEYWORD',\n RESERVED_FUNCTION_NAME = 'RESERVED_FUNCTION_NAME',\n RESERVED_PHRASE = 'RESERVED_PHRASE',\n RESERVED_SET_OPERATION = 'RESERVED_SET_OPERATION',\n RESERVED_CLAUSE = 'RESERVED_CLAUSE',\n RESERVED_SELECT = 'RESERVED_SELECT',\n RESERVED_JOIN = 'RESERVED_JOIN',\n ARRAY_IDENTIFIER = 'ARRAY_IDENTIFIER', // IDENTIFIER token in front of [\n ARRAY_KEYWORD = 'ARRAY_KEYWORD', // RESERVED_KEYWORD token in front of [\n CASE = 'CASE',\n END = 'END',\n WHEN = 'WHEN',\n ELSE = 'ELSE',\n THEN = 'THEN',\n LIMIT = 'LIMIT',\n BETWEEN = 'BETWEEN',\n AND = 'AND',\n OR = 'OR',\n XOR = 'XOR',\n OPERATOR = 'OPERATOR',\n COMMA = 'COMMA',\n ASTERISK = 'ASTERISK', // *\n DOT = 'DOT', // .\n OPEN_PAREN = 'OPEN_PAREN',\n CLOSE_PAREN = 'CLOSE_PAREN',\n LINE_COMMENT = 'LINE_COMMENT',\n BLOCK_COMMENT = 'BLOCK_COMMENT',\n NUMBER = 'NUMBER',\n NAMED_PARAMETER = 'NAMED_PARAMETER',\n QUOTED_PARAMETER = 'QUOTED_PARAMETER',\n NUMBERED_PARAMETER = 'NUMBERED_PARAMETER',\n POSITIONAL_PARAMETER = 'POSITIONAL_PARAMETER',\n CUSTOM_PARAMETER = 'CUSTOM_PARAMETER',\n DELIMITER = 'DELIMITER',\n EOF = 'EOF',\n}\n\n/** Struct to store the most basic cohesive unit of language grammar */\nexport interface Token {\n type: TokenType;\n raw: string; // The raw original text that was matched\n text: string; // Cleaned up text e.g. keyword converted to uppercase and extra spaces removed\n key?: string;\n start: number;\n precedingWhitespace?: string; // Whitespace before this token, if any\n}\n\n/** Creates EOF token positioned at given location */\nexport const createEofToken = (index: number) => ({\n type: TokenType.EOF,\n raw: '«EOF»',\n text: '«EOF»',\n start: index,\n});\n\n/**\n * For use as a \"missing token\"\n * e.g. in lookAhead and lookBehind to avoid dealing with null values\n */\nexport const EOF_TOKEN = createEofToken(Infinity);\n\n/** Checks if two tokens are equivalent */\nexport const testToken =\n (compareToken: { type: TokenType; text: string }) =>\n (token: Token): boolean =>\n token.type === compareToken.type && token.text === compareToken.text;\n\n/** Util object that allows for easy checking of Reserved Keywords */\nexport const isToken = {\n ARRAY: testToken({ text: 'ARRAY', type: TokenType.RESERVED_KEYWORD }),\n BY: testToken({ text: 'BY', type: TokenType.RESERVED_KEYWORD }),\n SET: testToken({ text: 'SET', type: TokenType.RESERVED_CLAUSE }),\n STRUCT: testToken({ text: 'STRUCT', type: TokenType.RESERVED_KEYWORD }),\n WINDOW: testToken({ text: 'WINDOW', type: TokenType.RESERVED_CLAUSE }),\n VALUES: testToken({ text: 'VALUES', type: TokenType.RESERVED_CLAUSE }),\n};\n\n/** Checks if token is any Reserved Keyword or Clause */\nexport const isReserved = (type: TokenType): boolean =>\n type === TokenType.RESERVED_KEYWORD ||\n type === TokenType.RESERVED_FUNCTION_NAME ||\n type === TokenType.RESERVED_PHRASE ||\n type === TokenType.RESERVED_CLAUSE ||\n type === TokenType.RESERVED_SELECT ||\n type === TokenType.RESERVED_SET_OPERATION ||\n type === TokenType.RESERVED_JOIN ||\n type === TokenType.ARRAY_KEYWORD ||\n type === TokenType.CASE ||\n type === TokenType.END ||\n type === TokenType.WHEN ||\n type === TokenType.ELSE ||\n type === TokenType.THEN ||\n type === TokenType.LIMIT ||\n type === TokenType.BETWEEN ||\n type === TokenType.AND ||\n type === TokenType.OR ||\n type === TokenType.XOR;\n\nexport const isLogicalOperator = (type: TokenType): boolean =>\n type === TokenType.AND || type === TokenType.OR || type === TokenType.XOR;\n","/**\n * Performs expandSinglePhrase() on array\n */\nexport const expandPhrases = (phrases: string[]): string[] => phrases.flatMap(expandSinglePhrase);\n\n/**\n * Expands a syntax description like\n *\n * \"CREATE [OR REPLACE] [TEMP|TEMPORARY] TABLE\"\n *\n * into an array of all possible combinations like:\n *\n * [ \"CREATE TABLE\",\n * \"CREATE TEMP TABLE\",\n * \"CREATE TEMPORARY TABLE\",\n * \"CREATE OR REPLACE TABLE\",\n * \"CREATE OR REPLACE TEMP TABLE\",\n * \"CREATE OR REPLACE TEMPORARY TABLE\" ]\n */\nexport const expandSinglePhrase = (phrase: string): string[] =>\n buildCombinations(parsePhrase(phrase)).map(text => text.trim());\n\n// This data type holds variants of a single part in whole phrase.\n// Corresponding to syntax as follows:\n//\n// \"TABLE\" --> [\"TABLE\"]\n// \"[TABLE]\" --> [\"\", \"TABLE\"]\n// \"[TEMP|TEMPORARY]\" --> [\"\", \"TEMP\", \"TEMPORARY\"]\n// \"{TEMP|TEMPORARY}\" --> [\"TEMP\", \"TEMPORARY\"]\n//\ntype PhrasePart = string[];\n\nconst REQUIRED_PART = /[^[\\]{}]+/y;\nconst REQUIRED_BLOCK = /\\{.*?\\}/y;\nconst OPTIONAL_BLOCK = /\\[.*?\\]/y;\n\nconst parsePhrase = (text: string): PhrasePart[] => {\n let index = 0;\n const result: PhrasePart[] = [];\n while (index < text.length) {\n // Match everything else outside of \"[...]\" or \"{...}\" blocks\n REQUIRED_PART.lastIndex = index;\n const requiredMatch = REQUIRED_PART.exec(text);\n if (requiredMatch) {\n result.push([requiredMatch[0].trim()]);\n index += requiredMatch[0].length;\n }\n\n // Match \"[...]\" block\n OPTIONAL_BLOCK.lastIndex = index;\n const optionalBlockMatch = OPTIONAL_BLOCK.exec(text);\n if (optionalBlockMatch) {\n const choices = optionalBlockMatch[0]\n .slice(1, -1)\n .split('|')\n .map(s => s.trim());\n result.push(['', ...choices]);\n index += optionalBlockMatch[0].length;\n }\n\n // Match \"{...}\" block\n REQUIRED_BLOCK.lastIndex = index;\n const requiredBlockMatch = REQUIRED_BLOCK.exec(text);\n if (requiredBlockMatch) {\n const choices = requiredBlockMatch[0]\n .slice(1, -1)\n .split('|')\n .map(s => s.trim());\n result.push(choices);\n index += requiredBlockMatch[0].length;\n }\n\n if (!requiredMatch && !optionalBlockMatch && !requiredBlockMatch) {\n throw new Error(`Unbalanced parenthesis in: ${text}`);\n }\n }\n return result;\n};\n\nconst buildCombinations = ([first, ...rest]: PhrasePart[]): string[] => {\n if (first === undefined) {\n return [''];\n }\n return buildCombinations(rest).flatMap(tail =>\n first.map(head => head.trim() + ' ' + tail.trim())\n );\n};\n","export const dedupe = (arr: string[]) => [...new Set(arr)];\n\n// Last element from array\nexport const last = (arr: T[]): T | undefined => arr[arr.length - 1];\n\n// Sorts strings by length, so that longer ones are first\n// Also sorts alphabetically after sorting by length.\nexport const sortByLengthDesc = (strings: string[]) =>\n strings.sort((a, b) => b.length - a.length || a.localeCompare(b));\n\n/** Get length of longest string in list of strings */\nexport const maxLength = (strings: string[]) =>\n strings.reduce((max, cur) => Math.max(max, cur.length), 0);\n\n// replaces long whitespace sequences with just one space\nexport const equalizeWhitespace = (s: string) => s.replace(/\\s+/gu, ' ');\n\n// Used for flattening keyword lists\nexport const flatKeywordList = (obj: Record): string[] =>\n dedupe(Object.values(obj).flat());\n\n// True when string contains multiple lines\nexport const isMultiline = (text: string): boolean => /\\n/.test(text);\n\n// Given a type and a field name, returns a type where this field is optional\n//\n// For example, these two type definitions are equivalent:\n//\n// type Foo = Optional<{ foo: string, bar: number }, 'foo'>;\n// type Foo = { foo?: string, bar: number };\n//\nexport type Optional = Pick, K> & Omit;\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#reserved_keywords\n keywords: [\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 'RANGE',\n 'RECURSIVE',\n 'RESPECT',\n 'RIGHT',\n 'ROLLUP',\n 'ROWS',\n 'SELECT',\n 'SET',\n 'SOME',\n 'STRUCT',\n 'TABLE',\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 datatypes: [\n 'ARRAY', // parametric, ARRAY\n 'BOOL',\n 'BYTES', // parameterised, BYTES(Length)\n 'DATE',\n 'DATETIME',\n 'GEOGRAPHY',\n 'INTERVAL',\n 'INT64',\n 'INT',\n 'SMALLINT',\n 'INTEGER',\n 'BIGINT',\n 'TINYINT',\n 'BYTEINT',\n 'NUMERIC', // parameterised, NUMERIC(Precision[, Scale])\n 'DECIMAL', // parameterised, DECIMAL(Precision[, Scale])\n 'BIGNUMERIC', // parameterised, BIGNUMERIC(Precision[, Scale])\n 'BIGDECIMAL', // parameterised, BIGDECIMAL(Precision[, Scale])\n 'FLOAT64',\n 'STRING', // parameterised, STRING(Length)\n 'STRUCT', // parametric, STRUCT\n 'TIME',\n 'TIMEZONE',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions#formatting_syntax\n stringFormat: ['HEX', 'BASEX', 'BASE64M', 'ASCII', 'UTF-8', 'UTF8'],\n misc: ['SAFE'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n ddl: [\n 'LIKE', // CREATE TABLE LIKE\n 'COPY', // CREATE TABLE COPY\n 'CLONE', // CREATE TABLE CLONE\n 'IN',\n 'OUT',\n 'INOUT',\n 'RETURNS',\n 'LANGUAGE',\n 'CASCADE',\n 'RESTRICT',\n 'DETERMINISTIC',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions\n aead: [\n 'KEYS.NEW_KEYSET',\n 'KEYS.ADD_KEY_FROM_RAW_BYTES',\n 'AEAD.DECRYPT_BYTES',\n 'AEAD.DECRYPT_STRING',\n 'AEAD.ENCRYPT',\n 'KEYS.KEYSET_CHAIN',\n 'KEYS.KEYSET_FROM_JSON',\n 'KEYS.KEYSET_TO_JSON',\n 'KEYS.ROTATE_KEYSET',\n 'KEYS.KEYSET_LENGTH',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_analytic_functions\n aggregateAnalytic: [\n 'ANY_VALUE',\n 'ARRAY_AGG',\n 'AVG',\n 'CORR',\n 'COUNT',\n 'COUNTIF',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'MAX',\n 'MIN',\n 'ST_CLUSTERDBSCAN',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRING_AGG',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions\n aggregate: [\n 'ANY_VALUE',\n 'ARRAY_AGG',\n 'ARRAY_CONCAT_AGG',\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'COUNT',\n 'COUNTIF',\n 'LOGICAL_AND',\n 'LOGICAL_OR',\n 'MAX',\n 'MIN',\n 'STRING_AGG',\n 'SUM',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/approximate_aggregate_functions\n approximateAggregate: [\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_QUANTILES',\n 'APPROX_TOP_COUNT',\n 'APPROX_TOP_SUM',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions\n array: [\n // 'ARRAY',\n 'ARRAY_CONCAT',\n 'ARRAY_LENGTH',\n 'ARRAY_TO_STRING',\n 'GENERATE_ARRAY',\n 'GENERATE_DATE_ARRAY',\n 'GENERATE_TIMESTAMP_ARRAY',\n 'ARRAY_REVERSE',\n 'OFFSET',\n 'SAFE_OFFSET',\n 'ORDINAL',\n 'SAFE_ORDINAL',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/bit_functions\n bitwise: ['BIT_COUNT'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions\n conversion: [\n // 'CASE',\n 'PARSE_BIGNUMERIC',\n 'PARSE_NUMERIC',\n 'SAFE_CAST',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions\n date: [\n 'CURRENT_DATE',\n 'EXTRACT',\n 'DATE',\n 'DATE_ADD',\n 'DATE_SUB',\n 'DATE_DIFF',\n 'DATE_TRUNC',\n 'DATE_FROM_UNIX_DATE',\n 'FORMAT_DATE',\n 'LAST_DAY',\n 'PARSE_DATE',\n 'UNIX_DATE',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/datetime_functions\n datetime: [\n 'CURRENT_DATETIME',\n 'DATETIME',\n 'EXTRACT',\n 'DATETIME_ADD',\n 'DATETIME_SUB',\n 'DATETIME_DIFF',\n 'DATETIME_TRUNC',\n 'FORMAT_DATETIME',\n 'LAST_DAY',\n 'PARSE_DATETIME',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging_functions\n debugging: ['ERROR'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/federated_query_functions\n federatedQuery: ['EXTERNAL_QUERY'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions\n geography: [\n 'S2_CELLIDFROMPOINT',\n 'S2_COVERINGCELLIDS',\n 'ST_ANGLE',\n 'ST_AREA',\n 'ST_ASBINARY',\n 'ST_ASGEOJSON',\n 'ST_ASTEXT',\n 'ST_AZIMUTH',\n 'ST_BOUNDARY',\n 'ST_BOUNDINGBOX',\n 'ST_BUFFER',\n 'ST_BUFFERWITHTOLERANCE',\n 'ST_CENTROID',\n 'ST_CENTROID_AGG',\n 'ST_CLOSESTPOINT',\n 'ST_CLUSTERDBSCAN',\n 'ST_CONTAINS',\n 'ST_CONVEXHULL',\n 'ST_COVEREDBY',\n 'ST_COVERS',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_DUMP',\n 'ST_DWITHIN',\n 'ST_ENDPOINT',\n 'ST_EQUALS',\n 'ST_EXTENT',\n 'ST_EXTERIORRING',\n 'ST_GEOGFROM',\n 'ST_GEOGFROMGEOJSON',\n 'ST_GEOGFROMTEXT',\n 'ST_GEOGFROMWKB',\n 'ST_GEOGPOINT',\n 'ST_GEOGPOINTFROMGEOHASH',\n 'ST_GEOHASH',\n 'ST_GEOMETRYTYPE',\n 'ST_INTERIORRINGS',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_INTERSECTSBOX',\n 'ST_ISCOLLECTION',\n 'ST_ISEMPTY',\n 'ST_LENGTH',\n 'ST_MAKELINE',\n 'ST_MAKEPOLYGON',\n 'ST_MAKEPOLYGONORIENTED',\n 'ST_MAXDISTANCE',\n 'ST_NPOINTS',\n 'ST_NUMGEOMETRIES',\n 'ST_NUMPOINTS',\n 'ST_PERIMETER',\n 'ST_POINTN',\n 'ST_SIMPLIFY',\n 'ST_SNAPTOGRID',\n 'ST_STARTPOINT',\n 'ST_TOUCHES',\n 'ST_UNION',\n 'ST_UNION_AGG',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_Y',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/hash_functions\n hash: ['FARM_FINGERPRINT', 'MD5', 'SHA1', 'SHA256', 'SHA512'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/hll_functions\n hll: ['HLL_COUNT.INIT', 'HLL_COUNT.MERGE', 'HLL_COUNT.MERGE_PARTIAL', 'HLL_COUNT.EXTRACT'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/interval_functions\n interval: ['MAKE_INTERVAL', 'EXTRACT', 'JUSTIFY_DAYS', 'JUSTIFY_HOURS', 'JUSTIFY_INTERVAL'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions\n json: [\n 'JSON_EXTRACT',\n 'JSON_QUERY',\n 'JSON_EXTRACT_SCALAR',\n 'JSON_VALUE',\n 'JSON_EXTRACT_ARRAY',\n 'JSON_QUERY_ARRAY',\n 'JSON_EXTRACT_STRING_ARRAY',\n 'JSON_VALUE_ARRAY',\n 'TO_JSON_STRING',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/mathematical_functions\n math: [\n 'ABS',\n 'SIGN',\n 'IS_INF',\n 'IS_NAN',\n 'IEEE_DIVIDE',\n 'RAND',\n 'SQRT',\n 'POW',\n 'POWER',\n 'EXP',\n 'LN',\n 'LOG',\n 'LOG10',\n 'GREATEST',\n 'LEAST',\n 'DIV',\n 'SAFE_DIVIDE',\n 'SAFE_MULTIPLY',\n 'SAFE_NEGATE',\n 'SAFE_ADD',\n 'SAFE_SUBTRACT',\n 'MOD',\n 'ROUND',\n 'TRUNC',\n 'CEIL',\n 'CEILING',\n 'FLOOR',\n 'COS',\n 'COSH',\n 'ACOS',\n 'ACOSH',\n 'SIN',\n 'SINH',\n 'ASIN',\n 'ASINH',\n 'TAN',\n 'TANH',\n 'ATAN',\n 'ATANH',\n 'ATAN2',\n 'RANGE_BUCKET',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions\n navigation: [\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'NTH_VALUE',\n 'LEAD',\n 'LAG',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/net_functions\n net: [\n 'NET.IP_FROM_STRING',\n 'NET.SAFE_IP_FROM_STRING',\n 'NET.IP_TO_STRING',\n 'NET.IP_NET_MASK',\n 'NET.IP_TRUNC',\n 'NET.IPV4_FROM_INT64',\n 'NET.IPV4_TO_INT64',\n 'NET.HOST',\n 'NET.PUBLIC_SUFFIX',\n 'NET.REG_DOMAIN',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/numbering_functions\n numbering: ['RANK', 'DENSE_RANK', 'PERCENT_RANK', 'CUME_DIST', 'NTILE', 'ROW_NUMBER'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/security_functions\n security: ['SESSION_USER'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/statistical_aggregate_functions\n statisticalAggregate: [\n 'CORR',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STDDEV',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions\n string: [\n 'ASCII',\n 'BYTE_LENGTH',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'CODE_POINTS_TO_BYTES',\n 'CODE_POINTS_TO_STRING',\n 'CONCAT',\n 'CONTAINS_SUBSTR',\n 'ENDS_WITH',\n 'FORMAT',\n 'FROM_BASE32',\n 'FROM_BASE64',\n 'FROM_HEX',\n 'INITCAP',\n 'INSTR',\n 'LEFT',\n 'LENGTH',\n 'LPAD',\n 'LOWER',\n 'LTRIM',\n 'NORMALIZE',\n 'NORMALIZE_AND_CASEFOLD',\n 'OCTET_LENGTH',\n 'REGEXP_CONTAINS',\n 'REGEXP_EXTRACT',\n 'REGEXP_EXTRACT_ALL',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPLACE',\n 'REPEAT',\n 'REVERSE',\n 'RIGHT',\n 'RPAD',\n 'RTRIM',\n 'SAFE_CONVERT_BYTES_TO_STRING',\n 'SOUNDEX',\n 'SPLIT',\n 'STARTS_WITH',\n 'STRPOS',\n 'SUBSTR',\n 'SUBSTRING',\n 'TO_BASE32',\n 'TO_BASE64',\n 'TO_CODE_POINTS',\n 'TO_HEX',\n 'TRANSLATE',\n 'TRIM',\n 'UNICODE',\n 'UPPER',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions\n time: [\n 'CURRENT_TIME',\n 'TIME',\n 'EXTRACT',\n 'TIME_ADD',\n 'TIME_SUB',\n 'TIME_DIFF',\n 'TIME_TRUNC',\n 'FORMAT_TIME',\n 'PARSE_TIME',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions\n timestamp: [\n 'CURRENT_TIMESTAMP',\n 'EXTRACT',\n 'STRING',\n 'TIMESTAMP',\n 'TIMESTAMP_ADD',\n 'TIMESTAMP_SUB',\n 'TIMESTAMP_DIFF',\n 'TIMESTAMP_TRUNC',\n 'FORMAT_TIMESTAMP',\n 'PARSE_TIMESTAMP',\n 'TIMESTAMP_SECONDS',\n 'TIMESTAMP_MILLIS',\n 'TIMESTAMP_MICROS',\n 'UNIX_SECONDS',\n 'UNIX_MILLIS',\n 'UNIX_MICROS',\n ],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/uuid_functions\n uuid: ['GENERATE_UUID'],\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions\n conditional: ['COALESCE', 'IF', 'IFNULL', 'NULLIF'],\n // https://cloud.google.com/bigquery/docs/reference/legacy-sql\n legacyAggregate: [\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'CORR',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'EXACT_COUNT_DISTINCT',\n 'FIRST',\n 'GROUP_CONCAT',\n 'GROUP_CONCAT_UNQUOTED',\n 'LAST',\n 'MAX',\n 'MIN',\n 'NEST',\n 'NTH',\n 'QUANTILES',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'TOP',\n 'UNIQUE',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n ],\n legacyBitwise: ['BIT_COUNT'],\n legacyCasting: ['BOOLEAN', 'BYTES', 'CAST', 'FLOAT', 'HEX_STRING', 'INTEGER', 'STRING'],\n legacyComparison: [\n // expr 'IN',\n 'COALESCE',\n 'GREATEST',\n 'IFNULL',\n 'IS_INF',\n 'IS_NAN',\n 'IS_EXPLICITLY_DEFINED',\n 'LEAST',\n 'NVL',\n ],\n legacyDatetime: [\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATE',\n 'DATE_ADD',\n 'DATEDIFF',\n 'DAY',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'FORMAT_UTC_USEC',\n 'HOUR',\n 'MINUTE',\n 'MONTH',\n 'MSEC_TO_TIMESTAMP',\n 'NOW',\n 'PARSE_UTC_USEC',\n 'QUARTER',\n 'SEC_TO_TIMESTAMP',\n 'SECOND',\n 'STRFTIME_UTC_USEC',\n 'TIME',\n 'TIMESTAMP',\n 'TIMESTAMP_TO_MSEC',\n 'TIMESTAMP_TO_SEC',\n 'TIMESTAMP_TO_USEC',\n 'USEC_TO_TIMESTAMP',\n 'UTC_USEC_TO_DAY',\n 'UTC_USEC_TO_HOUR',\n 'UTC_USEC_TO_MONTH',\n 'UTC_USEC_TO_WEEK',\n 'UTC_USEC_TO_YEAR',\n 'WEEK',\n 'YEAR',\n ],\n legacyIp: ['FORMAT_IP', 'PARSE_IP', 'FORMAT_PACKED_IP', 'PARSE_PACKED_IP'],\n legacyJson: ['JSON_EXTRACT', 'JSON_EXTRACT_SCALAR'],\n legacyMath: [\n 'ABS',\n 'ACOS',\n 'ACOSH',\n 'ASIN',\n 'ASINH',\n 'ATAN',\n 'ATANH',\n 'ATAN2',\n 'CEIL',\n 'COS',\n 'COSH',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'LOG2',\n 'LOG10',\n 'PI',\n 'POW',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SIN',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TANH',\n ],\n legacyRegex: ['REGEXP_MATCH', 'REGEXP_EXTRACT', 'REGEXP_REPLACE'],\n legacyString: [\n 'CONCAT',\n // expr CONTAINS 'str'\n 'INSTR',\n 'LEFT',\n 'LENGTH',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'REPLACE',\n 'RIGHT',\n 'RPAD',\n 'RTRIM',\n 'SPLIT',\n 'SUBSTR',\n 'UPPER',\n ],\n legacyTableWildcard: ['TABLE_DATE_RANGE', 'TABLE_DATE_RANGE_STRICT', 'TABLE_QUERY'],\n legacyUrl: ['HOST', 'DOMAIN', 'TLD'],\n legacyWindow: [\n 'AVG',\n 'COUNT',\n 'MAX',\n 'MIN',\n 'STDDEV',\n 'SUM',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'ROW_NUMBER',\n ],\n legacyMisc: [\n 'CURRENT_USER',\n 'EVERY',\n 'FROM_BASE64',\n 'HASH',\n 'FARM_FINGERPRINT',\n 'IF',\n 'POSITION',\n 'SHA1',\n 'SOME',\n 'TO_BASE64',\n ],\n other: ['BQ.JOBS.CANCEL', 'BQ.REFRESH_MATERIALIZED_VIEW'],\n ddl: ['OPTIONS'],\n pivot: ['PIVOT', 'UNPIVOT'],\n // Data types with parameters like VARCHAR(100)\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#parameterized_data_types\n dataTypes: ['BYTES', 'NUMERIC', 'DECIMAL', 'BIGNUMERIC', 'BIGDECIMAL', 'STRING'],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { EOF_TOKEN, isToken, TokenType, Token } from '../../lexer/token.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { keywords } from './bigquery.keywords.js';\nimport { functions } from './bigquery.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT] [AS STRUCT | AS VALUE]']);\n\nconst reservedClauses = expandPhrases([\n // Queries: https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'QUALIFY',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'OMIT RECORD IF', // legacy\n // Data modification: https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax\n // - insert:\n 'INSERT [INTO]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE [INTO]',\n 'WHEN [NOT] MATCHED [BY SOURCE | BY TARGET] [THEN]',\n 'UPDATE SET',\n // Data definition, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n 'CREATE [OR REPLACE] [MATERIALIZED] VIEW [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] [TEMP|TEMPORARY|SNAPSHOT|EXTERNAL] TABLE [IF NOT EXISTS]',\n\n 'CLUSTER BY',\n 'FOR SYSTEM_TIME AS OF', // CREATE SNAPSHOT TABLE\n 'WITH CONNECTION',\n 'WITH PARTITION COLUMNS',\n 'REMOTE WITH CONNECTION',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP [SNAPSHOT | EXTERNAL] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS]',\n 'ADD COLUMN [IF NOT EXISTS]',\n 'DROP COLUMN [IF EXISTS]',\n 'RENAME TO',\n 'ALTER COLUMN [IF EXISTS]',\n 'SET DEFAULT COLLATE', // for alter column\n 'SET OPTIONS', // for alter column\n 'DROP NOT NULL', // for alter column\n 'SET DATA TYPE', // for alter column\n // - alter schema\n 'ALTER SCHEMA [IF EXISTS]',\n // - alter view\n 'ALTER [MATERIALIZED] VIEW [IF EXISTS]',\n // - alter bi_capacity\n 'ALTER BI_CAPACITY',\n // - truncate:\n 'TRUNCATE TABLE',\n // - create schema\n 'CREATE SCHEMA [IF NOT EXISTS]',\n 'DEFAULT COLLATE',\n\n // stored procedures\n 'CREATE [OR REPLACE] [TEMP|TEMPORARY|TABLE] FUNCTION [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]',\n // row access policy\n 'CREATE [OR REPLACE] ROW ACCESS POLICY [IF NOT EXISTS]',\n 'GRANT TO',\n 'FILTER USING',\n // capacity\n 'CREATE CAPACITY',\n 'AS JSON',\n // reservation\n 'CREATE RESERVATION',\n // assignment\n 'CREATE ASSIGNMENT',\n // search index\n 'CREATE SEARCH INDEX [IF NOT EXISTS]',\n // drop\n 'DROP SCHEMA [IF EXISTS]',\n 'DROP [MATERIALIZED] VIEW [IF EXISTS]',\n 'DROP [TABLE] FUNCTION [IF EXISTS]',\n 'DROP PROCEDURE [IF EXISTS]',\n 'DROP ROW ACCESS POLICY',\n 'DROP ALL ROW ACCESS POLICIES',\n 'DROP CAPACITY [IF EXISTS]',\n 'DROP RESERVATION [IF EXISTS]',\n 'DROP ASSIGNMENT [IF EXISTS]',\n 'DROP SEARCH INDEX [IF EXISTS]',\n 'DROP [IF EXISTS]',\n // DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language\n 'GRANT',\n 'REVOKE',\n // Script, https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting\n 'DECLARE',\n 'EXECUTE IMMEDIATE',\n 'LOOP',\n 'END LOOP',\n 'REPEAT',\n 'END REPEAT',\n 'WHILE',\n 'END WHILE',\n 'BREAK',\n 'LEAVE',\n 'CONTINUE',\n 'ITERATE',\n 'FOR',\n 'END FOR',\n 'BEGIN',\n 'BEGIN TRANSACTION',\n 'COMMIT TRANSACTION',\n 'ROLLBACK TRANSACTION',\n 'RAISE',\n 'RETURN',\n 'CALL',\n // Debug, https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging-statements\n 'ASSERT',\n // Other, https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements\n 'EXPORT DATA',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION {ALL | DISTINCT}',\n 'EXCEPT DISTINCT',\n 'INTERSECT DISTINCT',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n // https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#tablesample_operator\n 'TABLESAMPLE SYSTEM',\n // From DDL: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language\n 'ANY TYPE',\n 'ALL COLUMNS',\n 'NOT DETERMINISTIC',\n // inside window definitions\n '{ROWS | RANGE} BETWEEN',\n // comparison operator\n 'IS [NOT] DISTINCT FROM',\n]);\n\n// https://cloud.google.com/bigquery/docs/reference/#standard-sql-reference\nexport const bigquery: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n extraParens: ['[]'],\n stringTypes: [\n // The triple-quoted strings are listed first, so they get matched first.\n // Otherwise the first two quotes of \"\"\" will get matched as an empty \"\" string.\n { quote: '\"\"\"..\"\"\"', prefixes: ['R', 'B', 'RB', 'BR'] },\n { quote: \"'''..'''\", prefixes: ['R', 'B', 'RB', 'BR'] },\n '\"\"-bs',\n \"''-bs\",\n { quote: '\"\"-raw', prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true },\n { quote: \"''-raw\", prefixes: ['R', 'B', 'RB', 'BR'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { dashes: true },\n paramTypes: { positional: true, named: ['@'], quoted: ['@'] },\n variableTypes: [{ regex: String.raw`@@\\w+` }],\n lineCommentTypes: ['--', '#'],\n operators: ['&', '|', '^', '~', '>>', '<<', '||', '=>'],\n postProcess,\n },\n formatOptions: {\n onelineClauses,\n },\n};\n\nfunction postProcess(tokens: Token[]): Token[] {\n return detectArraySubscripts(combineParameterizedTypes(tokens));\n}\n\n// Converts OFFSET token inside array from RESERVED_CLAUSE to RESERVED_FUNCTION_NAME\n// See: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#array_subscript_operator\nfunction detectArraySubscripts(tokens: Token[]) {\n let prevToken = EOF_TOKEN;\n return tokens.map(token => {\n if (token.text === 'OFFSET' && prevToken.text === '[') {\n prevToken = token;\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n } else {\n prevToken = token;\n return token;\n }\n });\n}\n\n// Combines multiple tokens forming a parameterized type like STRUCT> into a single token\nfunction combineParameterizedTypes(tokens: Token[]) {\n const processed: Token[] = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if ((isToken.ARRAY(token) || isToken.STRUCT(token)) && tokens[i + 1]?.text === '<') {\n const endIndex = findClosingAngleBracketIndex(tokens, i + 1);\n const typeDefTokens = tokens.slice(i, endIndex + 1);\n processed.push({\n type: TokenType.IDENTIFIER,\n raw: typeDefTokens.map(formatTypeDefToken('raw')).join(''),\n text: typeDefTokens.map(formatTypeDefToken('text')).join(''),\n start: token.start,\n });\n i = endIndex;\n } else {\n processed.push(token);\n }\n }\n return processed;\n}\n\nconst formatTypeDefToken =\n (key: Extract) =>\n (token: Token): string => {\n if (token.type === TokenType.IDENTIFIER || token.type === TokenType.COMMA) {\n return token[key] + ' ';\n } else {\n return token[key];\n }\n };\n\nfunction findClosingAngleBracketIndex(tokens: Token[], startIndex: number): number {\n let level = 0;\n for (let i = startIndex; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.text === '<') {\n level++;\n } else if (token.text === '>') {\n level--;\n } else if (token.text === '>>') {\n level -= 2;\n }\n if (level === 0) {\n return i;\n }\n }\n return tokens.length - 1;\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-aggregate\n aggregate: [\n 'ARRAY_AGG',\n 'AVG',\n 'CORR',\n 'CORRELATION',\n 'COUNT',\n 'COUNT_BIG',\n 'COVAR_POP',\n 'COVARIANCE',\n 'COVAR',\n 'COVAR_SAMP',\n 'COVARIANCE_SAMP',\n 'CUME_DIST',\n 'GROUPING',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_ICPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'STDDEV_POP',\n 'STDDEV',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VARIANCE',\n 'VAR',\n 'VAR_SAMP',\n 'VARIANCE_SAMP',\n 'XMLAGG',\n ],\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-scalar\n scalar: [\n 'ABS',\n 'ABSVAL',\n 'ACOS',\n 'ADD_DAYS',\n 'ADD_MONTHS',\n 'ARRAY_DELETE',\n 'ARRAY_FIRST',\n 'ARRAY_LAST',\n 'ARRAY_NEXT',\n 'ARRAY_PRIOR',\n 'ARRAY_TRIM',\n 'ASCII',\n 'ASCII_CHR',\n 'ASCII_STR',\n 'ASCIISTR',\n 'ASIN',\n 'ATAN',\n 'ATANH',\n 'ATAN2',\n 'BIGINT',\n 'BINARY',\n 'BITAND',\n 'BITANDNOT',\n 'BITOR',\n 'BITXOR',\n 'BITNOT',\n 'BLOB',\n 'BTRIM',\n 'CARDINALITY',\n 'CCSID_ENCODING',\n 'CEILING',\n 'CEIL',\n 'CHAR',\n 'CHAR9',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHR',\n 'CLOB',\n 'COALESCE',\n 'COLLATION_KEY',\n 'COMPARE_DECFLOAT',\n 'CONCAT',\n 'CONTAINS',\n 'COS',\n 'COSH',\n 'DATE',\n 'DAY',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFWEEK_ISO',\n 'DAYOFYEAR',\n 'DAYS',\n 'DAYS_BETWEEN',\n 'DBCLOB',\n 'DECFLOAT',\n 'DECFLOAT_FORMAT',\n 'DECFLOAT_SORTKEY',\n 'DECIMAL',\n 'DEC',\n 'DECODE',\n 'DECRYPT_BINARY',\n 'DECRYPT_BIT',\n 'DECRYPT_CHAR',\n 'DECRYPT_DB',\n 'DECRYPT_DATAKEY_BIGINT',\n 'DECRYPT_DATAKEY_BIT',\n 'DECRYPT_DATAKEY_CLOB',\n 'DECRYPT_DATAKEY_DBCLOB',\n 'DECRYPT_DATAKEY_DECIMAL',\n 'DECRYPT_DATAKEY_INTEGER',\n 'DECRYPT_DATAKEY_VARCHAR',\n 'DECRYPT_DATAKEY_VARGRAPHIC',\n 'DEGREES',\n 'DIFFERENCE',\n 'DIGITS',\n 'DOUBLE_PRECISION',\n 'DOUBLE',\n 'DSN_XMLVALIDATE',\n 'EBCDIC_CHR',\n 'EBCDIC_STR',\n 'ENCRYPT_DATAKEY',\n 'ENCRYPT_TDES',\n 'EXP',\n 'EXTRACT',\n 'FLOAT',\n 'FLOOR',\n 'GENERATE_UNIQUE',\n 'GENERATE_UNIQUE_BINARY',\n 'GETHINT',\n 'GETVARIABLE',\n 'GRAPHIC',\n 'GREATEST',\n 'HASH',\n 'HASH_CRC32',\n 'HASH_MD5',\n 'HASH_SHA1',\n 'HASH_SHA256',\n 'HEX',\n 'HOUR',\n 'IDENTITY_VAL_LOCAL',\n 'IFNULL',\n 'INSERT',\n 'INSTR',\n 'INTEGER',\n 'INT',\n 'JULIAN_DAY',\n 'LAST_DAY',\n 'LCASE',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LN',\n 'LOCATE',\n 'LOCATE_IN_STRING',\n 'LOG10',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAX',\n 'MAX_CARDINALITY',\n 'MICROSECOND',\n 'MIDNIGHT_SECONDS',\n 'MIN',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHS_BETWEEN',\n 'MQREAD',\n 'MQREADCLOB',\n 'MQRECEIVE',\n 'MQRECEIVECLOB',\n 'MQSEND',\n 'MULTIPLY_ALT',\n 'NEXT_DAY',\n 'NEXT_MONTH',\n 'NORMALIZE_DECFLOAT',\n 'NORMALIZE_STRING',\n 'NULLIF',\n 'NVL',\n 'OVERLAY',\n 'PACK',\n 'POSITION',\n 'POSSTR',\n 'POWER',\n 'POW',\n 'QUANTIZE',\n 'QUARTER',\n 'RADIANS',\n 'RAISE_ERROR',\n 'RANDOM',\n 'RAND',\n 'REAL',\n 'REGEXP_COUNT',\n 'REGEXP_INSTR',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPEAT',\n 'REPLACE',\n 'RID',\n 'RIGHT',\n 'ROUND',\n 'ROUND_TIMESTAMP',\n 'ROWID',\n 'RPAD',\n 'RTRIM',\n 'SCORE',\n 'SECOND',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SMALLINT',\n 'SOUNDEX',\n 'SOAPHTTPC',\n 'SOAPHTTPV',\n 'SOAPHTTPNC',\n 'SOAPHTTPNV',\n 'SPACE',\n 'SQRT',\n 'STRIP',\n 'STRLEFT',\n 'STRPOS',\n 'STRRIGHT',\n 'SUBSTR',\n 'SUBSTRING',\n 'TAN',\n 'TANH',\n 'TIME',\n 'TIMESTAMP',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TIMESTAMP_FORMAT',\n 'TIMESTAMP_ISO',\n 'TIMESTAMP_TZ',\n 'TO_CHAR',\n 'TO_CLOB',\n 'TO_DATE',\n 'TO_NUMBER',\n 'TOTALORDER',\n 'TO_TIMESTAMP',\n 'TRANSLATE',\n 'TRIM',\n 'TRIM_ARRAY',\n 'TRUNCATE',\n 'TRUNC',\n 'TRUNC_TIMESTAMP',\n 'UCASE',\n 'UNICODE',\n 'UNICODE_STR',\n 'UNISTR',\n 'UPPER',\n 'VALUE',\n 'VARBINARY',\n 'VARCHAR',\n 'VARCHAR9',\n 'VARCHAR_BIT_FORMAT',\n 'VARCHAR_FORMAT',\n 'VARGRAPHIC',\n 'VERIFY_GROUP_FOR_USER',\n 'VERIFY_ROLE_FOR_USER',\n 'VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER',\n 'WEEK',\n 'WEEK_ISO',\n 'WRAP',\n 'XMLATTRIBUTES',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLDOCUMENT',\n 'XMLELEMENT',\n 'XMLFOREST',\n 'XMLMODIFY',\n 'XMLNAMESPACES',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLQUERY',\n 'XMLSERIALIZE',\n 'XMLTEXT',\n 'XMLXSROBJECTID',\n 'XSLTRANSFORM',\n 'YEAR',\n ],\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-table\n table: [\n 'ADMIN_TASK_LIST',\n 'ADMIN_TASK_OUTPUT',\n 'ADMIN_TASK_STATUS',\n 'BLOCKING_THREADS',\n 'MQREADALL',\n 'MQREADALLCLOB',\n 'MQRECEIVEALL',\n 'MQRECEIVEALLCLOB',\n 'XMLTABLE',\n ],\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-row\n row: ['UNPACK'],\n // https://www.ibm.com/docs/en/db2-for-zos/12?topic=expressions-olap-specification\n olap: [\n 'CUME_DIST',\n 'PERCENT_RANK',\n 'RANK',\n 'DENSE_RANK',\n 'NTILE',\n 'LAG',\n 'LEAD',\n 'ROW_NUMBER',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'NTH_VALUE',\n 'RATIO_TO_REPORT',\n ],\n // Type casting\n cast: ['CAST'],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=words-reserved#db2z_reservedwords__newresword\n standard: [\n 'ALL',\n 'ALLOCATE',\n 'ALLOW',\n 'ALTERAND',\n 'ANY',\n 'AS',\n 'ARRAY',\n 'ARRAY_EXISTS',\n 'ASENSITIVE',\n 'ASSOCIATE',\n 'ASUTIME',\n 'AT',\n 'AUDIT',\n 'AUX',\n 'AUXILIARY',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BUFFERPOOL',\n 'BY',\n 'CAPTURE',\n 'CASCADED',\n 'CAST',\n 'CCSID',\n 'CHARACTER',\n 'CHECK',\n 'CLONE',\n 'CLUSTER',\n 'COLLECTION',\n 'COLLID',\n 'COLUMN',\n 'CONDITION',\n 'CONNECTION',\n 'CONSTRAINT',\n 'CONTENT',\n 'CONTINUE',\n 'CREATE',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_LC_CTYPE',\n 'CURRENT_PATH',\n 'CURRENT_SCHEMA',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRVAL',\n 'CURSOR',\n 'DATA',\n 'DATABASE',\n 'DBINFO',\n 'DECLARE',\n 'DEFAULT',\n 'DESCRIPTOR',\n 'DETERMINISTIC',\n 'DISABLE',\n 'DISALLOW',\n 'DISTINCT',\n 'DO',\n 'DOCUMENT',\n 'DSSIZE',\n 'DYNAMIC',\n 'EDITPROC',\n 'ELSE',\n 'ELSEIF',\n 'ENCODING',\n 'ENCRYPTION',\n 'ENDING',\n 'END-EXEC',\n 'ERASE',\n 'ESCAPE',\n 'EXCEPTION',\n 'EXISTS',\n 'EXIT',\n 'EXTERNAL',\n 'FENCED',\n 'FIELDPROC',\n 'FINAL',\n 'FIRST',\n 'FOR',\n 'FREE',\n 'FULL',\n 'FUNCTION',\n 'GENERATED',\n 'GET',\n 'GLOBAL',\n 'GOTO',\n 'GROUP',\n 'HANDLER',\n 'HOLD',\n 'HOURS',\n 'IF',\n 'IMMEDIATE',\n 'IN',\n 'INCLUSIVE',\n 'INDEX',\n 'INHERIT',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INTO',\n 'IS',\n 'ISOBID',\n 'ITERATE',\n 'JAR',\n 'KEEP',\n 'KEY',\n 'LANGUAGE',\n 'LAST',\n 'LC_CTYPE',\n 'LEAVE',\n 'LIKE',\n 'LOCAL',\n 'LOCALE',\n 'LOCATOR',\n 'LOCATORS',\n 'LOCK',\n 'LOCKMAX',\n 'LOCKSIZE',\n 'LONG',\n 'LOOP',\n 'MAINTAINED',\n 'MATERIALIZED',\n 'MICROSECONDS',\n 'MINUTEMINUTES',\n 'MODIFIES',\n 'MONTHS',\n 'NEXT',\n 'NEXTVAL',\n 'NO',\n 'NONE',\n 'NOT',\n 'NULL',\n 'NULLS',\n 'NUMPARTS',\n 'OBID',\n 'OF',\n 'OLD',\n 'ON',\n 'OPTIMIZATION',\n 'OPTIMIZE',\n 'ORDER',\n 'ORGANIZATION',\n 'OUT',\n 'OUTER',\n 'PACKAGE',\n 'PARAMETER',\n 'PART',\n 'PADDED',\n 'PARTITION',\n 'PARTITIONED',\n 'PARTITIONING',\n 'PATH',\n 'PIECESIZE',\n 'PERIOD',\n 'PLAN',\n 'PRECISION',\n 'PREVVAL',\n 'PRIOR',\n 'PRIQTY',\n 'PRIVILEGES',\n 'PROCEDURE',\n 'PROGRAM',\n 'PSID',\n 'PUBLIC',\n 'QUERY',\n 'QUERYNO',\n 'READS',\n 'REFERENCES',\n 'RESIGNAL',\n 'RESTRICT',\n 'RESULT',\n 'RESULT_SET_LOCATOR',\n 'RETURN',\n 'RETURNS',\n 'ROLE',\n 'ROLLUP',\n 'ROUND_CEILING',\n 'ROUND_DOWN',\n 'ROUND_FLOOR',\n 'ROUND_HALF_DOWN',\n 'ROUND_HALF_EVEN',\n 'ROUND_HALF_UP',\n 'ROUND_UP',\n 'ROW',\n 'ROWSET',\n 'SCHEMA',\n 'SCRATCHPAD',\n 'SECONDS',\n 'SECQTY',\n 'SECURITY',\n 'SEQUENCE',\n 'SENSITIVE',\n 'SESSION_USER',\n 'SIMPLE',\n 'SOME',\n 'SOURCE',\n 'SPECIFIC',\n 'STANDARD',\n 'STATIC',\n 'STATEMENT',\n 'STAY',\n 'STOGROUP',\n 'STORES',\n 'STYLE',\n 'SUMMARY',\n 'SYNONYM',\n 'SYSDATE',\n 'SYSTEM',\n 'SYSTIMESTAMP',\n 'TABLE',\n 'TABLESPACE',\n 'THEN',\n 'TO',\n 'TRIGGER',\n 'TYPE',\n 'UNDO',\n 'UNIQUE',\n 'UNTIL',\n 'USER',\n 'USING',\n 'VALIDPROC',\n 'VARIABLE',\n 'VARIANT',\n 'VCAT',\n 'VERSIONING',\n 'VIEW',\n 'VOLATILE',\n 'VOLUMES',\n 'WHILE',\n 'WLM',\n 'XMLEXISTS',\n 'XMLCAST',\n 'YEARS',\n 'ZONE',\n ],\n // These are definitely keywords, but haven't found a definite list in the docs\n additional: ['COMMENT'],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './db2.functions.js';\nimport { keywords } from './db2.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY [INPUT SEQUENCE]',\n 'FETCH FIRST',\n // Data modification\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n 'INSERT',\n // Data definition\n 'CREATE [OR REPLACE] VIEW',\n 'CREATE [GLOBAL TEMPORARY] TABLE',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n 'WITH {RR | RS | CS | UR}',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [HIERARCHY]',\n // alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME [COLUMN]',\n 'ALTER [COLUMN]',\n 'SET DATA TYPE', // for alter column\n 'SET NOT NULL', // for alter column\n 'DROP {IDENTITY | EXPRESSION | DEFAULT | NOT NULL}', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // other\n 'SET [CURRENT] SCHEMA',\n 'AFTER',\n 'GO',\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=statements-list-supported\n 'ALLOCATE CURSOR',\n 'ALTER DATABASE',\n 'ALTER FUNCTION',\n 'ALTER INDEX',\n 'ALTER MASK',\n 'ALTER PERMISSION',\n 'ALTER PROCEDURE',\n 'ALTER SEQUENCE',\n 'ALTER STOGROUP',\n 'ALTER TABLESPACE',\n 'ALTER TRIGGER',\n 'ALTER TRUSTED CONTEXT',\n 'ALTER VIEW',\n 'ASSOCIATE LOCATORS',\n 'BEGIN DECLARE SECTION',\n 'CALL',\n 'CLOSE',\n 'COMMIT',\n 'CONNECT',\n 'CREATE ALIAS',\n 'CREATE AUXILIARY TABLE',\n 'CREATE DATABASE',\n 'CREATE FUNCTION',\n 'CREATE GLOBAL TEMPORARY TABLE',\n 'CREATE INDEX',\n 'CREATE LOB TABLESPACE',\n 'CREATE MASK',\n 'CREATE PERMISSION',\n 'CREATE PROCEDURE',\n 'CREATE ROLE',\n 'CREATE SEQUENCE',\n 'CREATE STOGROUP',\n 'CREATE SYNONYM',\n 'CREATE TABLESPACE',\n 'CREATE TRIGGER',\n 'CREATE TRUSTED CONTEXT',\n 'CREATE TYPE',\n 'CREATE VARIABLE',\n 'DECLARE CURSOR',\n 'DECLARE GLOBAL TEMPORARY TABLE',\n 'DECLARE STATEMENT',\n 'DECLARE TABLE',\n 'DECLARE VARIABLE',\n 'DESCRIBE CURSOR',\n 'DESCRIBE INPUT',\n 'DESCRIBE OUTPUT',\n 'DESCRIBE PROCEDURE',\n 'DESCRIBE TABLE',\n 'DROP',\n 'END DECLARE SECTION',\n 'EXCHANGE',\n 'EXECUTE',\n 'EXECUTE IMMEDIATE',\n 'EXPLAIN',\n 'FETCH',\n 'FREE LOCATOR',\n 'GET DIAGNOSTICS',\n 'GRANT',\n 'HOLD LOCATOR',\n 'INCLUDE',\n 'LABEL',\n 'LOCK TABLE',\n 'OPEN',\n 'PREPARE',\n 'REFRESH',\n 'RELEASE',\n 'RELEASE SAVEPOINT',\n 'RENAME',\n 'REVOKE',\n 'ROLLBACK',\n 'SAVEPOINT',\n 'SELECT INTO',\n 'SET CONNECTION',\n 'SET CURRENT ACCELERATOR',\n 'SET CURRENT APPLICATION COMPATIBILITY',\n 'SET CURRENT APPLICATION ENCODING SCHEME',\n 'SET CURRENT DEBUG MODE',\n 'SET CURRENT DECFLOAT ROUNDING MODE',\n 'SET CURRENT DEGREE',\n 'SET CURRENT EXPLAIN MODE',\n 'SET CURRENT GET_ACCEL_ARCHIVE',\n 'SET CURRENT LOCALE LC_CTYPE',\n 'SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION',\n 'SET CURRENT OPTIMIZATION HINT',\n 'SET CURRENT PACKAGE PATH',\n 'SET CURRENT PACKAGESET',\n 'SET CURRENT PRECISION',\n 'SET CURRENT QUERY ACCELERATION',\n 'SET CURRENT QUERY ACCELERATION WAITFORDATA',\n 'SET CURRENT REFRESH AGE',\n 'SET CURRENT ROUTINE VERSION',\n 'SET CURRENT RULES',\n 'SET CURRENT SQLID',\n 'SET CURRENT TEMPORAL BUSINESS_TIME',\n 'SET CURRENT TEMPORAL SYSTEM_TIME',\n 'SET ENCRYPTION PASSWORD',\n 'SET PATH',\n 'SET SESSION TIME ZONE',\n 'SIGNAL',\n 'VALUES INTO',\n 'WHENEVER',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'SET NULL',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/db2/rbafzintro.htm\nexport const db2: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['G', 'N', 'U&'] },\n { quote: \"''-raw\", prefixes: ['X', 'BX', 'GX', 'UX'], requirePrefix: true },\n ],\n identTypes: [`\"\"-qq`],\n identChars: { first: '@#$' },\n paramTypes: { positional: true, named: [':'] },\n paramChars: { first: '@#$', rest: '@#$' },\n operators: ['**', '¬=', '¬>', '¬<', '!>', '!<', '||'],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-aggregate\n aggregate: [\n // TODO: 'ANY', - conflicts with test for ANY predicate in 'operators.ys'!!\n 'ARRAY_AGG',\n 'AVG',\n 'CORR',\n 'CORRELATION',\n 'COUNT',\n 'COUNT_BIG',\n 'COVAR_POP',\n 'COVARIANCE',\n 'COVAR',\n 'COVAR_SAMP',\n 'COVARIANCE_SAMP',\n 'EVERY',\n 'GROUPING',\n 'JSON_ARRAYAGG',\n 'JSON_OBJECTAGG',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-regression'\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'SOME',\n 'STDDEV_POP',\n 'STDDEV',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VARIANCE',\n 'VAR',\n 'VAR_SAMP',\n 'VARIANCE_SAMP',\n 'XMLAGG',\n 'XMLGROUP',\n ],\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-scalar\n scalar: [\n 'ABS',\n 'ABSVAL',\n 'ACOS',\n 'ADD_DAYS',\n 'ADD_HOURS',\n 'ADD_MINUTES',\n 'ADD_MONTHS',\n 'ADD_SECONDS',\n 'ADD_YEARS',\n 'ANTILOG',\n 'ARRAY_MAX_CARDINALITY',\n 'ARRAY_TRIM',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'BASE64_DECODE',\n 'BASE64_ENCODE',\n 'BIGINT',\n 'BINARY',\n 'BIT_LENGTH',\n 'BITAND',\n 'BITANDNOT',\n 'BITNOT',\n 'BITOR',\n 'BITXOR',\n 'BLOB',\n 'BOOLEAN',\n 'BSON_TO_JSON',\n 'CARDINALITY',\n 'CEIL',\n 'CEILING',\n 'CHAR_LENGTH',\n 'CHAR',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'CLOB',\n 'COALESCE',\n 'COMPARE_DECFLOAT',\n 'CONCAT',\n 'CONTAINS',\n 'COS',\n 'COSH',\n 'COT',\n 'CURDATE',\n 'CURTIME',\n 'DATABASE',\n 'DATAPARTITIONNAME',\n 'DATAPARTITIONNUM',\n 'DATE',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK_ISO',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DAYS',\n 'DBCLOB',\n 'DBPARTITIONNAME',\n 'DBPARTITIONNUM',\n 'DEC',\n 'DECFLOAT_FORMAT',\n 'DECFLOAT_SORTKEY',\n 'DECFLOAT',\n 'DECIMAL',\n 'DECRYPT_BINARY',\n 'DECRYPT_BIT',\n 'DECRYPT_CHAR',\n 'DECRYPT_DB',\n 'DEGREES',\n 'DIFFERENCE',\n 'DIGITS',\n 'DLCOMMENT',\n 'DLLINKTYPE',\n 'DLURLCOMPLETE',\n 'DLURLPATH',\n 'DLURLPATHONLY',\n 'DLURLSCHEME',\n 'DLURLSERVER',\n 'DLVALUE',\n 'DOUBLE_PRECISION',\n 'DOUBLE',\n 'ENCRPYT',\n 'ENCRYPT_AES',\n 'ENCRYPT_AES256',\n 'ENCRYPT_RC2',\n 'ENCRYPT_TDES',\n 'EXP',\n 'EXTRACT',\n 'FIRST_DAY',\n 'FLOAT',\n 'FLOOR',\n 'GENERATE_UNIQUE',\n 'GET_BLOB_FROM_FILE',\n 'GET_CLOB_FROM_FILE',\n 'GET_DBCLOB_FROM_FILE',\n 'GET_XML_FILE',\n 'GETHINT',\n 'GRAPHIC',\n 'GREATEST',\n 'HASH_MD5',\n 'HASH_ROW',\n 'HASH_SHA1',\n 'HASH_SHA256',\n 'HASH_SHA512',\n 'HASH_VALUES',\n 'HASHED_VALUE',\n 'HEX',\n 'HEXTORAW',\n 'HOUR',\n 'HTML_ENTITY_DECODE',\n 'HTML_ENTITY_ENCODE',\n 'HTTP_DELETE_BLOB',\n 'HTTP_DELETE',\n 'HTTP_GET_BLOB',\n 'HTTP_GET',\n 'HTTP_PATCH_BLOB',\n 'HTTP_PATCH',\n 'HTTP_POST_BLOB',\n 'HTTP_POST',\n 'HTTP_PUT_BLOB',\n 'HTTP_PUT',\n 'IDENTITY_VAL_LOCAL',\n 'IFNULL',\n 'INSERT',\n 'INSTR',\n 'INT',\n 'INTEGER',\n 'INTERPRET',\n 'ISFALSE',\n 'ISNOTFALSE',\n 'ISNOTTRUE',\n 'ISTRUE',\n 'JSON_ARRAY',\n 'JSON_OBJECT',\n 'JSON_QUERY',\n 'JSON_TO_BSON',\n 'JSON_UPDATE',\n 'JSON_VALUE',\n 'JULIAN_DAY',\n 'LAND',\n 'LAST_DAY',\n 'LCASE',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LN',\n 'LNOT',\n 'LOCATE_IN_STRING',\n 'LOCATE',\n 'LOG10',\n 'LOR',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAX_CARDINALITY',\n 'MAX',\n 'MICROSECOND',\n 'MIDNIGHT_SECONDS',\n 'MIN',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MONTHS_BETWEEN',\n 'MQREAD',\n 'MQREADCLOB',\n 'MQRECEIVE',\n 'MQRECEIVECLOB',\n 'MQSEND',\n 'MULTIPLY_ALT',\n 'NEXT_DAY',\n 'NORMALIZE_DECFLOAT',\n 'NOW',\n 'NULLIF',\n 'NVL',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'PI',\n 'POSITION',\n 'POSSTR',\n 'POW',\n 'POWER',\n 'QUANTIZE',\n 'QUARTER',\n 'RADIANS',\n 'RAISE_ERROR',\n 'RANDOM or RAND',\n 'REAL',\n 'REGEXP_COUNT',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPEAT',\n 'REPLACE',\n 'RID',\n 'RIGHT',\n 'ROUND_TIMESTAMP',\n 'ROUND',\n 'ROWID',\n 'RPAD',\n 'RRN',\n 'RTRIM',\n 'SCORE',\n 'SECOND',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SMALLINT',\n 'SOUNDEX',\n 'SPACE',\n 'SQRT',\n 'STRIP',\n 'STRLEFT',\n 'STRPOS',\n 'STRRIGHT',\n 'SUBSTR',\n 'SUBSTRING',\n 'TABLE_NAME',\n 'TABLE_SCHEMA',\n 'TAN',\n 'TANH',\n 'TIME',\n 'TIMESTAMP_FORMAT',\n 'TIMESTAMP_ISO',\n 'TIMESTAMP',\n 'TIMESTAMPDIFF_BIG',\n 'TIMESTAMPDIFF',\n 'TO_CHAR',\n 'TO_CLOB',\n 'TO_DATE',\n 'TO_NUMBER',\n 'TO_TIMESTAMP',\n 'TOTALORDER',\n 'TRANSLATE',\n 'TRIM_ARRAY',\n 'TRIM',\n 'TRUNC_TIMESTAMP',\n 'TRUNC',\n 'TRUNCATE',\n 'UCASE',\n 'UPPER',\n 'URL_DECODE',\n 'URL_ENCODE',\n 'VALUE',\n 'VARBINARY_FORMAT',\n 'VARBINARY',\n 'VARCHAR_BIT_FORMAT',\n 'VARCHAR_FORMAT_BINARY',\n 'VARCHAR_FORMAT',\n 'VARCHAR',\n 'VARGRAPHIC',\n 'VERIFY_GROUP_FOR_USER',\n 'WEEK_ISO',\n 'WEEK',\n 'WRAP',\n 'XMLATTRIBUTES',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLDOCUMENT',\n 'XMLELEMENT',\n 'XMLFOREST',\n 'XMLNAMESPACES',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLROW',\n 'XMLSERIALIZE',\n 'XMLTEXT',\n 'XMLVALIDATE',\n 'XOR',\n 'XSLTRANSFORM',\n 'YEAR',\n 'ZONED',\n ],\n // https://www.ibm.com/docs/en/i/7.5?topic=functions-table\n table: [\n 'BASE_TABLE',\n 'HTTP_DELETE_BLOB_VERBOSE',\n 'HTTP_DELETE_VERBOSE',\n 'HTTP_GET_BLOB_VERBOSE',\n 'HTTP_GET_VERBOSE',\n 'HTTP_PATCH_BLOB_VERBOSE',\n 'HTTP_PATCH_VERBOSE',\n 'HTTP_POST_BLOB_VERBOSE',\n 'HTTP_POST_VERBOSE',\n 'HTTP_PUT_BLOB_VERBOSE',\n 'HTTP_PUT_VERBOSE',\n 'JSON_TABLE',\n 'MQREADALL',\n 'MQREADALLCLOB',\n 'MQRECEIVEALL',\n 'MQRECEIVEALLCLOB',\n 'XMLTABLE',\n ],\n // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-row\n row: ['UNPACK'],\n // https://www.ibm.com/docs/en/i/7.5?topic=expressions-olap-specifications\n olap: [\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'ROW_NUMBER',\n ],\n // Type casting\n cast: ['CAST'],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://www.ibm.com/docs/en/i/7.5?topic=words-reserved\n // TODO: This list likely contains all keywords, not only the reserved ones,\n // try to filter it down to just the reserved keywords.\n standard: [\n 'ABSENT',\n 'ACCORDING',\n 'ACCTNG',\n 'ACTION',\n 'ACTIVATE',\n 'ADD',\n 'ALIAS',\n 'ALL',\n 'ALLOCATE',\n 'ALLOW',\n 'ALTER',\n 'AND',\n 'ANY',\n 'APPEND',\n 'APPLNAME',\n 'ARRAY',\n 'ARRAY_AGG',\n 'ARRAY_TRIM',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'ASSOCIATE',\n 'ATOMIC',\n 'ATTACH',\n 'ATTRIBUTES',\n 'AUTHORIZATION',\n 'AUTONOMOUS',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BINARY',\n 'BIND',\n 'BIT',\n 'BOOLEAN',\n 'BSON',\n 'BUFFERPOOL',\n 'BY',\n 'CACHE',\n 'CALL',\n 'CALLED',\n 'CARDINALITY',\n 'CASE',\n 'CAST',\n 'CCSID',\n 'CHAR',\n 'CHARACTER',\n 'CHECK',\n 'CL',\n 'CLOSE',\n 'CLUSTER',\n 'COLLECT',\n 'COLLECTION',\n 'COLUMN',\n 'COMMENT',\n 'COMMIT',\n 'COMPACT',\n 'COMPARISONS',\n 'COMPRESS',\n 'CONCAT',\n 'CONCURRENT',\n 'CONDITION',\n 'CONNECT',\n 'CONNECT_BY_ROOT',\n 'CONNECTION',\n 'CONSTANT',\n 'CONSTRAINT',\n 'CONTAINS',\n 'CONTENT',\n 'CONTINUE',\n 'COPY',\n 'COUNT',\n 'COUNT_BIG',\n 'CREATE',\n 'CREATEIN',\n 'CROSS',\n 'CUBE',\n 'CUME_DIST',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_PATH',\n 'CURRENT_SCHEMA',\n 'CURRENT_SERVER',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'CURRENT_USER',\n 'CURSOR',\n 'CYCLE',\n 'DATA',\n 'DATABASE',\n 'DATAPARTITIONNAME',\n 'DATAPARTITIONNUM',\n 'DATE',\n 'DAY',\n 'DAYS',\n 'DB2GENERAL',\n 'DB2GENRL',\n 'DB2SQL',\n 'DBINFO',\n 'DBPARTITIONNAME',\n 'DBPARTITIONNUM',\n 'DEACTIVATE',\n 'DEALLOCATE',\n 'DECLARE',\n 'DEFAULT',\n 'DEFAULTS',\n 'DEFER',\n 'DEFINE',\n 'DEFINITION',\n 'DELETE',\n 'DELETING',\n 'DENSE_RANK',\n 'DENSERANK',\n 'DESC',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DETACH',\n 'DETERMINISTIC',\n 'DIAGNOSTICS',\n 'DISABLE',\n 'DISALLOW',\n 'DISCONNECT',\n 'DISTINCT',\n 'DO',\n 'DOCUMENT',\n 'DOUBLE',\n 'DROP',\n 'DYNAMIC',\n 'EACH',\n 'ELSE',\n 'ELSEIF',\n 'EMPTY',\n 'ENABLE',\n 'ENCODING',\n 'ENCRYPTION',\n 'END',\n 'END-EXEC',\n 'ENDING',\n 'ENFORCED',\n 'ERROR',\n 'ESCAPE',\n 'EVERY',\n 'EXCEPT',\n 'EXCEPTION',\n 'EXCLUDING',\n 'EXCLUSIVE',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXTEND',\n 'EXTERNAL',\n 'EXTRACT',\n 'FALSE',\n 'FENCED',\n 'FETCH',\n 'FIELDPROC',\n 'FILE',\n 'FINAL',\n 'FIRST_VALUE',\n 'FOR',\n 'FOREIGN',\n 'FORMAT',\n 'FREE',\n 'FREEPAGE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GBPCACHE',\n 'GENERAL',\n 'GENERATED',\n 'GET',\n 'GLOBAL',\n 'GO',\n 'GOTO',\n 'GRANT',\n 'GRAPHIC',\n 'GROUP',\n 'HANDLER',\n 'HASH',\n 'HASH_ROW',\n 'HASHED_VALUE',\n 'HAVING',\n 'HINT',\n 'HOLD',\n 'HOUR',\n 'HOURS',\n // 'ID', Not actually a reserved keyword\n 'IDENTITY',\n 'IF',\n 'IGNORE',\n 'IMMEDIATE',\n 'IMPLICITLY',\n 'IN',\n 'INCLUDE',\n 'INCLUDING',\n 'INCLUSIVE',\n 'INCREMENT',\n 'INDEX',\n 'INDEXBP',\n 'INDICATOR',\n 'INF',\n 'INFINITY',\n 'INHERIT',\n 'INLINE',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INSERTING',\n 'INTEGRITY',\n 'INTERPRET',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'ISOLATION',\n 'ITERATE',\n 'JAVA',\n 'JOIN',\n 'JSON',\n 'JSON_ARRAY',\n 'JSON_ARRAYAGG',\n 'JSON_EXISTS',\n 'JSON_OBJECT',\n 'JSON_OBJECTAGG',\n 'JSON_QUERY',\n 'JSON_TABLE',\n 'JSON_VALUE',\n 'KEEP',\n 'KEY',\n 'KEYS',\n 'LABEL',\n 'LAG',\n 'LANGUAGE',\n 'LAST_VALUE',\n 'LATERAL',\n 'LEAD',\n 'LEAVE',\n 'LEFT',\n 'LEVEL2',\n 'LIKE',\n 'LIMIT',\n 'LINKTYPE',\n 'LISTAGG',\n 'LOCAL',\n 'LOCALDATE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATION',\n 'LOCATOR',\n 'LOCK',\n 'LOCKSIZE',\n 'LOG',\n 'LOGGED',\n 'LONG',\n 'LOOP',\n 'MAINTAINED',\n 'MASK',\n 'MATCHED',\n 'MATERIALIZED',\n 'MAXVALUE',\n 'MERGE',\n 'MICROSECOND',\n 'MICROSECONDS',\n 'MINPCTUSED',\n 'MINUTE',\n 'MINUTES',\n 'MINVALUE',\n 'MIRROR',\n 'MIXED',\n 'MODE',\n 'MODIFIES',\n 'MONTH',\n 'MONTHS',\n 'NAMESPACE',\n 'NAN',\n 'NATIONAL',\n 'NCHAR',\n 'NCLOB',\n 'NESTED',\n 'NEW',\n 'NEW_TABLE',\n 'NEXTVAL',\n 'NO',\n 'NOCACHE',\n 'NOCYCLE',\n 'NODENAME',\n 'NODENUMBER',\n 'NOMAXVALUE',\n 'NOMINVALUE',\n 'NONE',\n 'NOORDER',\n 'NORMALIZED',\n 'NOT',\n 'NOTNULL',\n 'NTH_VALUE',\n 'NTILE',\n 'NULL',\n 'NULLS',\n 'NVARCHAR',\n 'OBID',\n 'OBJECT',\n 'OF',\n 'OFF',\n 'OFFSET',\n 'OLD',\n 'OLD_TABLE',\n 'OMIT',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OPTIMIZE',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'ORDINALITY',\n 'ORGANIZE',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'OVERLAY',\n 'OVERRIDING',\n 'PACKAGE',\n 'PADDED',\n 'PAGE',\n 'PAGESIZE',\n 'PARAMETER',\n 'PART',\n 'PARTITION',\n 'PARTITIONED',\n 'PARTITIONING',\n 'PARTITIONS',\n 'PASSING',\n 'PASSWORD',\n 'PATH',\n 'PCTFREE',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERIOD',\n 'PERMISSION',\n 'PIECESIZE',\n 'PIPE',\n 'PLAN',\n 'POSITION',\n 'PREPARE',\n 'PREVVAL',\n 'PRIMARY',\n 'PRIOR',\n 'PRIQTY',\n 'PRIVILEGES',\n 'PROCEDURE',\n 'PROGRAM',\n 'PROGRAMID',\n 'QUERY',\n 'RANGE',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'RCDFMT',\n 'READ',\n 'READS',\n 'RECOVERY',\n 'REFERENCES',\n 'REFERENCING',\n 'REFRESH',\n 'REGEXP_LIKE',\n 'RELEASE',\n 'RENAME',\n 'REPEAT',\n 'RESET',\n 'RESIGNAL',\n 'RESTART',\n 'RESULT',\n 'RESULT_SET_LOCATOR',\n 'RETURN',\n 'RETURNING',\n 'RETURNS',\n 'REVOKE',\n 'RID',\n 'RIGHT',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROUTINE',\n 'ROW',\n 'ROW_NUMBER',\n 'ROWNUMBER',\n 'ROWS',\n 'RRN',\n 'RUN',\n 'SAVEPOINT',\n 'SBCS',\n 'SCALAR',\n 'SCHEMA',\n 'SCRATCHPAD',\n 'SCROLL',\n 'SEARCH',\n 'SECOND',\n 'SECONDS',\n 'SECQTY',\n 'SECURED',\n 'SELECT',\n 'SENSITIVE',\n 'SEQUENCE',\n 'SESSION',\n 'SESSION_USER',\n 'SET',\n 'SIGNAL',\n 'SIMPLE',\n 'SKIP',\n 'SNAN',\n 'SOME',\n 'SOURCE',\n 'SPECIFIC',\n 'SQL',\n 'SQLID',\n 'SQLIND_DEFAULT',\n 'SQLIND_UNASSIGNED',\n 'STACKED',\n 'START',\n 'STARTING',\n 'STATEMENT',\n 'STATIC',\n 'STOGROUP',\n 'SUBSTRING',\n 'SUMMARY',\n 'SYNONYM',\n 'SYSTEM_TIME',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESPACE',\n 'TABLESPACES',\n 'TAG',\n 'THEN',\n 'THREADSAFE',\n 'TIME',\n 'TIMESTAMP',\n 'TO',\n 'TRANSACTION',\n 'TRANSFER',\n 'TRIGGER',\n 'TRIM',\n 'TRIM_ARRAY',\n 'TRUE',\n 'TRUNCATE',\n 'TRY_CAST',\n 'TYPE',\n 'UNDO',\n 'UNION',\n 'UNIQUE',\n 'UNIT',\n 'UNKNOWN',\n 'UNNEST',\n 'UNTIL',\n 'UPDATE',\n 'UPDATING',\n 'URI',\n 'USAGE',\n 'USE',\n 'USER',\n 'USERID',\n 'USING',\n 'VALUE',\n 'VALUES',\n 'VARIABLE',\n 'VARIANT',\n 'VCAT',\n 'VERSION',\n 'VERSIONING',\n 'VIEW',\n 'VOLATILE',\n 'WAIT',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WHILE',\n 'WITH',\n 'WITHIN',\n 'WITHOUT',\n 'WRAPPED',\n 'WRAPPER',\n 'WRITE',\n 'WRKSTNNAME',\n 'XMLAGG',\n 'XMLATTRIBUTES',\n 'XMLCAST',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLDOCUMENT',\n 'XMLELEMENT',\n 'XMLFOREST',\n 'XMLGROUP',\n 'XMLNAMESPACES',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLROW',\n 'XMLSERIALIZE',\n 'XMLTABLE',\n 'XMLTEXT',\n 'XMLVALIDATE',\n 'XSLTRANSFORM',\n 'XSROBJECT',\n 'YEAR',\n 'YEARS',\n 'YES',\n 'ZONE',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './db2i.functions.js';\nimport { keywords } from './db2i.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'INTO',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER [SIBLINGS] BY [INPUT SEQUENCE]',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n 'LIMIT',\n 'FOR UPDATE [OF]',\n 'FOR READ ONLY',\n 'OPTIMIZE FOR',\n // Data modification\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n 'DELETE',\n 'INSERT',\n // Data definition - table\n 'CREATE [OR REPLACE] TABLE',\n 'FOR SYSTEM NAME',\n // Data definition - view\n 'CREATE [OR REPLACE] [RECURSIVE] VIEW',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n 'WITH {NC | RR | RS | CS | UR}',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE',\n // alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n 'ALTER [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME [COLUMN]',\n 'SET DATA TYPE', // for alter column\n 'SET {GENERATED ALWAYS | GENERATED BY DEFAULT}', // for alter column\n 'SET NOT NULL', // for alter column\n 'SET {NOT HIDDEN | IMPLICITLY HIDDEN}', // for alter column\n 'SET FIELDPROC', // for alter column\n 'DROP {DEFAULT | NOT NULL | GENERATED | IDENTITY | ROW CHANGE TIMESTAMP | FIELDPROC}', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // other\n 'SET [CURRENT] SCHEMA',\n 'SET CURRENT_SCHEMA',\n // https://www.ibm.com/docs/en/i/7.5?topic=reference-statements\n 'ALLOCATE CURSOR',\n 'ALLOCATE [SQL] DESCRIPTOR [LOCAL | GLOBAL] SQL',\n 'ALTER [SPECIFIC] {FUNCTION | PROCEDURE}',\n 'ALTER {MASK | PERMISSION | SEQUENCE | TRIGGER}',\n 'ASSOCIATE [RESULT SET] {LOCATOR | LOCATORS}',\n 'BEGIN DECLARE SECTION',\n 'CALL',\n 'CLOSE',\n 'COMMENT ON {ALIAS | COLUMN | CONSTRAINT | INDEX | MASK | PACKAGE | PARAMETER | PERMISSION | SEQUENCE | TABLE | TRIGGER | VARIABLE | XSROBJECT}',\n 'COMMENT ON [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE}',\n 'COMMENT ON PARAMETER SPECIFIC {FUNCTION | PROCEDURE | ROUTINE}',\n 'COMMENT ON [TABLE FUNCTION] RETURN COLUMN',\n 'COMMENT ON [TABLE FUNCTION] RETURN COLUMN SPECIFIC [PROCEDURE | ROUTINE]',\n 'COMMIT [WORK] [HOLD]',\n 'CONNECT [TO | RESET] USER',\n 'CREATE [OR REPLACE] {ALIAS | FUNCTION | MASK | PERMISSION | PROCEDURE | SEQUENCE | TRIGGER | VARIABLE}',\n 'CREATE [ENCODED VECTOR] INDEX',\n 'CREATE UNIQUE [WHERE NOT NULL] INDEX',\n 'CREATE SCHEMA',\n 'CREATE TYPE',\n 'DEALLOCATE [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n 'DECLARE CURSOR',\n 'DECLARE GLOBAL TEMPORARY TABLE',\n 'DECLARE',\n 'DESCRIBE CURSOR',\n 'DESCRIBE INPUT',\n 'DESCRIBE [OUTPUT]',\n 'DESCRIBE {PROCEDURE | ROUTINE}',\n 'DESCRIBE TABLE',\n 'DISCONNECT ALL [SQL]',\n 'DISCONNECT [CURRENT]',\n 'DROP {ALIAS | INDEX | MASK | PACKAGE | PERMISSION | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT} [IF EXISTS]',\n 'DROP [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE} [IF EXISTS]',\n 'END DECLARE SECTION',\n 'EXECUTE [IMMEDIATE]',\n // 'FETCH {NEXT | PRIOR | FIRST | LAST | BEFORE | AFTER | CURRENT} [FROM]',\n 'FREE LOCATOR',\n 'GET [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n 'GET [CURRENT | STACKED] DIAGNOSTICS',\n 'GRANT {ALL [PRIVILEGES] | ALTER | EXECUTE} ON {FUNCTION | PROCEDURE | ROUTINE | PACKAGE | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT}',\n 'HOLD LOCATOR',\n 'INCLUDE',\n 'LABEL ON {ALIAS | COLUMN | CONSTRAINT | INDEX | MASK | PACKAGE | PERMISSION | SEQUENCE | TABLE | TRIGGER | VARIABLE | XSROBJECT}',\n 'LABEL ON [SPECIFIC] {FUNCTION | PROCEDURE | ROUTINE}',\n 'LOCK TABLE',\n 'OPEN',\n 'PREPARE',\n 'REFRESH TABLE',\n 'RELEASE',\n 'RELEASE [TO] SAVEPOINT',\n 'RENAME [TABLE | INDEX] TO',\n 'REVOKE {ALL [PRIVILEGES] | ALTER | EXECUTE} ON {FUNCTION | PROCEDURE | ROUTINE | PACKAGE | SCHEMA | SEQUENCE | TABLE | TYPE | VARIABLE | XSROBJECT}',\n 'ROLLBACK [WORK] [HOLD | TO SAVEPOINT]',\n 'SAVEPOINT',\n 'SET CONNECTION',\n 'SET CURRENT {DEBUG MODE | DECFLOAT ROUNDING MODE | DEGREE | IMPLICIT XMLPARSE OPTION | TEMPORAL SYSTEM_TIME}',\n 'SET [SQL] DESCRIPTOR [LOCAL | GLOBAL]',\n 'SET ENCRYPTION PASSWORD',\n 'SET OPTION',\n 'SET {[CURRENT [FUNCTION]] PATH | CURRENT_PATH}',\n 'SET RESULT SETS [WITH RETURN [TO CALLER | TO CLIENT]',\n 'SET SESSION AUTHORIZATION',\n 'SET SESSION_USER',\n 'SET TRANSACTION',\n 'SIGNAL SQLSTATE [VALUE]',\n 'TAG',\n 'TRANSFER OWNERSHIP OF',\n 'WHENEVER {NOT FOUND | SQLERROR | SQLWARNING}',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{LEFT | RIGHT } EXCEPTION JOIN',\n '{INNER | CROSS} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'SET NULL',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://www.ibm.com/docs/en/i/7.5?topic=reference-sql\nexport const db2i: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['G', 'N', 'U&'] },\n { quote: \"''-raw\", prefixes: ['X', 'BX', 'GX', 'UX'], requirePrefix: true },\n ],\n identTypes: [`\"\"-qq`],\n identChars: { first: '@#$' },\n paramTypes: { positional: true, named: [':'] },\n paramChars: { first: '@#$', rest: '@#$' },\n operators: ['**', '¬=', '¬>', '¬<', '!>', '!<', '||'],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF\n math: [\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'BIN',\n 'BROUND',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'CONV',\n 'COS',\n 'DEGREES',\n // 'E',\n 'EXP',\n 'FACTORIAL',\n 'FLOOR',\n 'GREATEST',\n 'HEX',\n 'LEAST',\n 'LN',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'NEGATIVE',\n 'PI',\n 'PMOD',\n 'POSITIVE',\n 'POW',\n 'POWER',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SHIFTLEFT',\n 'SHIFTRIGHT',\n 'SHIFTRIGHTUNSIGNED',\n 'SIGN',\n 'SIN',\n 'SQRT',\n 'TAN',\n 'UNHEX',\n 'WIDTH_BUCKET',\n ],\n array: ['ARRAY_CONTAINS', 'MAP_KEYS', 'MAP_VALUES', 'SIZE', 'SORT_ARRAY'],\n conversion: ['BINARY', 'CAST'],\n date: [\n 'ADD_MONTHS',\n 'DATE',\n 'DATE_ADD',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATEDIFF',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFYEAR',\n 'EXTRACT',\n 'FROM_UNIXTIME',\n 'FROM_UTC_TIMESTAMP',\n 'HOUR',\n 'LAST_DAY',\n 'MINUTE',\n 'MONTH',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'QUARTER',\n 'SECOND',\n 'TIMESTAMP',\n 'TO_DATE',\n 'TO_UTC_TIMESTAMP',\n 'TRUNC',\n 'UNIX_TIMESTAMP',\n 'WEEKOFYEAR',\n 'YEAR',\n ],\n conditional: ['ASSERT_TRUE', 'COALESCE', 'IF', 'ISNOTNULL', 'ISNULL', 'NULLIF', 'NVL'],\n string: [\n 'ASCII',\n 'BASE64',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONTEXT_NGRAMS',\n 'DECODE',\n 'ELT',\n 'ENCODE',\n 'FIELD',\n 'FIND_IN_SET',\n 'FORMAT_NUMBER',\n 'GET_JSON_OBJECT',\n 'IN_FILE',\n 'INITCAP',\n 'INSTR',\n 'LCASE',\n 'LENGTH',\n 'LEVENSHTEIN',\n 'LOCATE',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'NGRAMS',\n 'OCTET_LENGTH',\n 'PARSE_URL',\n 'PRINTF',\n 'QUOTE',\n 'REGEXP_EXTRACT',\n 'REGEXP_REPLACE',\n 'REPEAT',\n 'REVERSE',\n 'RPAD',\n 'RTRIM',\n 'SENTENCES',\n 'SOUNDEX',\n 'SPACE',\n 'SPLIT',\n 'STR_TO_MAP',\n 'SUBSTR',\n 'SUBSTRING',\n 'TRANSLATE',\n 'TRIM',\n 'UCASE',\n 'UNBASE64',\n 'UPPER',\n ],\n masking: [\n 'MASK',\n 'MASK_FIRST_N',\n 'MASK_HASH',\n 'MASK_LAST_N',\n 'MASK_SHOW_FIRST_N',\n 'MASK_SHOW_LAST_N',\n ],\n misc: [\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n 'CRC32',\n 'CURRENT_DATABASE',\n 'CURRENT_USER',\n 'HASH',\n 'JAVA_METHOD',\n 'LOGGED_IN_USER',\n 'MD5',\n 'REFLECT',\n 'SHA',\n 'SHA1',\n 'SHA2',\n 'SURROGATE_KEY',\n 'VERSION',\n ],\n aggregate: [\n 'AVG',\n 'COLLECT_LIST',\n 'COLLECT_SET',\n 'CORR',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'HISTOGRAM_NUMERIC',\n 'MAX',\n 'MIN',\n 'NTILE',\n 'PERCENTILE',\n 'PERCENTILE_APPROX',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n ],\n table: ['EXPLODE', 'INLINE', 'JSON_TUPLE', 'PARSE_URL_TUPLE', 'POSEXPLODE', 'STACK'],\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics\n window: [\n 'LEAD',\n 'LAG',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'RANK',\n 'ROW_NUMBER',\n 'DENSE_RANK',\n 'CUME_DIST',\n 'PERCENT_RANK',\n 'NTILE',\n ],\n // Parameterized data types\n // https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=82706456\n // Though in reality Hive only supports parameters for DECIMAL(),\n // it doesn't hurt to allow others in here as well.\n dataTypes: ['DECIMAL', 'NUMERIC', 'VARCHAR', 'CHAR'],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl\n // Non-reserved keywords have proscribed meanings in. HiveQL, but can still be used as table or column names\n nonReserved: [\n 'ADD',\n 'ADMIN',\n 'AFTER',\n 'ANALYZE',\n 'ARCHIVE',\n 'ASC',\n 'BEFORE',\n 'BUCKET',\n 'BUCKETS',\n 'CASCADE',\n 'CHANGE',\n 'CLUSTER',\n 'CLUSTERED',\n 'CLUSTERSTATUS',\n 'COLLECTION',\n 'COLUMNS',\n 'COMMENT',\n 'COMPACT',\n 'COMPACTIONS',\n 'COMPUTE',\n 'CONCATENATE',\n 'CONTINUE',\n 'DATA',\n 'DATABASES',\n 'DATETIME',\n 'DAY',\n 'DBPROPERTIES',\n 'DEFERRED',\n 'DEFINED',\n 'DELIMITED',\n 'DEPENDENCY',\n 'DESC',\n 'DIRECTORIES',\n 'DIRECTORY',\n 'DISABLE',\n 'DISTRIBUTE',\n 'ELEM_TYPE',\n 'ENABLE',\n 'ESCAPED',\n 'EXCLUSIVE',\n 'EXPLAIN',\n 'EXPORT',\n 'FIELDS',\n 'FILE',\n 'FILEFORMAT',\n 'FIRST',\n 'FORMAT',\n 'FORMATTED',\n 'FUNCTIONS',\n 'HOLD_DDLTIME',\n 'HOUR',\n 'IDXPROPERTIES',\n 'IGNORE',\n 'INDEX',\n 'INDEXES',\n 'INPATH',\n 'INPUTDRIVER',\n 'INPUTFORMAT',\n 'ITEMS',\n 'JAR',\n 'KEYS',\n 'KEY_TYPE',\n 'LIMIT',\n 'LINES',\n 'LOAD',\n 'LOCATION',\n 'LOCK',\n 'LOCKS',\n 'LOGICAL',\n 'LONG',\n 'MAPJOIN',\n 'MATERIALIZED',\n 'METADATA',\n 'MINUS',\n 'MINUTE',\n 'MONTH',\n 'MSCK',\n 'NOSCAN',\n 'NO_DROP',\n 'OFFLINE',\n 'OPTION',\n 'OUTPUTDRIVER',\n 'OUTPUTFORMAT',\n 'OVERWRITE',\n 'OWNER',\n 'PARTITIONED',\n 'PARTITIONS',\n 'PLUS',\n 'PRETTY',\n 'PRINCIPALS',\n 'PROTECTION',\n 'PURGE',\n 'READ',\n 'READONLY',\n 'REBUILD',\n 'RECORDREADER',\n 'RECORDWRITER',\n 'RELOAD',\n 'RENAME',\n 'REPAIR',\n 'REPLACE',\n 'REPLICATION',\n 'RESTRICT',\n 'REWRITE',\n 'ROLE',\n 'ROLES',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECOND',\n 'SEMI',\n 'SERDE',\n 'SERDEPROPERTIES',\n 'SERVER',\n 'SETS',\n 'SHARED',\n 'SHOW',\n 'SHOW_DATABASE',\n 'SKEWED',\n 'SORT',\n 'SORTED',\n 'SSL',\n 'STATISTICS',\n 'STORED',\n 'STREAMTABLE',\n 'STRING',\n 'STRUCT',\n 'TABLES',\n 'TBLPROPERTIES',\n 'TEMPORARY',\n 'TERMINATED',\n 'TINYINT',\n 'TOUCH',\n 'TRANSACTIONS',\n 'UNARCHIVE',\n 'UNDO',\n 'UNIONTYPE',\n 'UNLOCK',\n 'UNSET',\n 'UNSIGNED',\n 'URI',\n 'USE',\n 'UTC',\n 'UTCTIMESTAMP',\n 'VALUE_TYPE',\n 'VIEW',\n 'WHILE',\n 'YEAR',\n 'AUTOCOMMIT',\n 'ISOLATION',\n 'LEVEL',\n 'OFFSET',\n 'SNAPSHOT',\n 'TRANSACTION',\n 'WORK',\n 'WRITE',\n 'ABORT',\n 'KEY',\n 'LAST',\n 'NORELY',\n 'NOVALIDATE',\n 'NULLS',\n 'RELY',\n 'VALIDATE',\n 'DETAIL',\n 'DOW',\n 'EXPRESSION',\n 'OPERATOR',\n 'QUARTER',\n 'SUMMARY',\n 'VECTORIZATION',\n 'WEEK',\n 'YEARS',\n 'MONTHS',\n 'WEEKS',\n 'DAYS',\n 'HOURS',\n 'MINUTES',\n 'SECONDS',\n 'TIMESTAMPTZ',\n 'ZONE',\n ],\n reserved: [\n 'ALL',\n 'ALTER',\n 'AND',\n 'ARRAY',\n 'AS',\n 'AUTHORIZATION',\n 'BETWEEN',\n 'BIGINT',\n 'BINARY',\n 'BOOLEAN',\n 'BOTH',\n 'BY',\n 'CASE',\n 'CAST',\n 'CHAR',\n 'COLUMN',\n 'CONF',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIMESTAMP',\n 'CURSOR',\n 'DATABASE',\n 'DATE',\n 'DECIMAL',\n 'DELETE',\n 'DESCRIBE',\n 'DISTINCT',\n 'DOUBLE',\n 'DROP',\n 'ELSE',\n 'END',\n 'EXCHANGE',\n 'EXISTS',\n 'EXTENDED',\n 'EXTERNAL',\n 'FALSE',\n 'FETCH',\n 'FLOAT',\n 'FOLLOWING',\n 'FOR',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GRANT',\n 'GROUP',\n 'GROUPING',\n 'HAVING',\n 'IF',\n 'IMPORT',\n 'IN',\n 'INNER',\n 'INSERT',\n 'INT',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'JOIN',\n 'LATERAL',\n 'LEFT',\n 'LESS',\n 'LIKE',\n 'LOCAL',\n 'MACRO',\n 'MAP',\n 'MORE',\n 'NONE',\n 'NOT',\n 'NULL',\n 'OF',\n 'ON',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'PARTIALSCAN',\n 'PARTITION',\n 'PERCENT',\n 'PRECEDING',\n 'PRESERVE',\n 'PROCEDURE',\n 'RANGE',\n 'READS',\n 'REDUCE',\n 'REVOKE',\n 'RIGHT',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SELECT',\n 'SET',\n 'SMALLINT',\n 'TABLE',\n 'TABLESAMPLE',\n 'THEN',\n 'TIMESTAMP',\n 'TO',\n 'TRANSFORM',\n 'TRIGGER',\n 'TRUE',\n 'TRUNCATE',\n 'UNBOUNDED',\n 'UNION',\n 'UNIQUEJOIN',\n 'UPDATE',\n 'USER',\n 'USING',\n 'UTC_TMESTAMP',\n 'VALUES',\n 'VARCHAR',\n 'WHEN',\n 'WHERE',\n 'WINDOW',\n 'WITH',\n 'COMMIT',\n 'ONLY',\n 'REGEXP',\n 'RLIKE',\n 'ROLLBACK',\n 'START',\n 'CACHE',\n 'CONSTRAINT',\n 'FOREIGN',\n 'PRIMARY',\n 'REFERENCES',\n 'DAYOFWEEK',\n 'EXTRACT',\n 'FLOOR',\n 'INTEGER',\n 'PRECISION',\n 'VIEWS',\n 'TIME',\n 'NUMERIC',\n 'SYNC',\n ],\n fileTypes: [\n 'TEXTFILE',\n 'SEQUENCEFILE',\n 'ORC',\n 'CSV',\n 'TSV',\n 'PARQUET',\n 'AVRO',\n 'RCFILE',\n 'JSONFILE',\n 'INPUTFORMAT',\n 'OUTPUTFORMAT',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './hive.functions.js';\nimport { keywords } from './hive.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'SORT BY',\n 'CLUSTER BY',\n 'DISTRIBUTE BY',\n 'LIMIT',\n // Data manipulation\n // - insert:\n // Hive does not actually support plain INSERT INTO, only INSERT INTO TABLE\n // but it's a nuisance to not support it, as all other dialects do.\n 'INSERT INTO [TABLE]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n 'INSERT [VALUES]',\n // - insert overwrite directory:\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries\n 'INSERT OVERWRITE [LOCAL] DIRECTORY',\n // - load:\n // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Loadingfilesintotables\n 'LOAD DATA [LOCAL] INPATH',\n '[OVERWRITE] INTO TABLE',\n // Data definition\n 'CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]',\n 'CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'RENAME TO',\n // - truncate:\n 'TRUNCATE [TABLE]',\n // other\n 'ALTER',\n 'CREATE',\n 'USE',\n 'DESCRIBE',\n 'DROP',\n 'FETCH',\n 'SHOW',\n 'STORED AS',\n 'STORED BY',\n 'ROW FORMAT',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n // non-standard joins\n 'LEFT SEMI JOIN',\n]);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE} BETWEEN']);\n\n// https://cwiki.apache.org/confluence/display/Hive/LanguageManual\nexport const hive: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n extraParens: ['[]'],\n stringTypes: ['\"\"-bs', \"''-bs\"],\n identTypes: ['``'],\n variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||'],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\n\n// Shared functionality used by all MariaDB-like SQL dialects.\n\nexport function postProcess(tokens: Token[]) {\n return tokens.map((token, i) => {\n const nextToken = tokens[i + 1] || EOF_TOKEN;\n if (isToken.SET(token) && nextToken.text === '(') {\n // This is SET datatype, not SET statement\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n }\n const prevToken = tokens[i - 1] || EOF_TOKEN;\n if (isToken.VALUES(token) && prevToken.text === '=') {\n // This is VALUES() function, not VALUES clause\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n }\n return token;\n });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://mariadb.com/kb/en/reserved-words/\n reserved: [\n 'ACCESSIBLE',\n 'ADD',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'BEFORE',\n 'BETWEEN',\n 'BIGINT',\n 'BINARY',\n 'BLOB',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CASCADE',\n 'CASE',\n 'CHANGE',\n 'CHAR',\n 'CHARACTER',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONDITION',\n 'CONSTRAINT',\n 'CONTINUE',\n 'CONVERT',\n 'CREATE',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DATABASES',\n 'DAY_HOUR',\n 'DAY_MICROSECOND',\n 'DAY_MINUTE',\n 'DAY_SECOND',\n 'DEC',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DELAYED',\n 'DELETE',\n 'DELETE_DOMAIN_ID',\n 'DESC',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISTINCT',\n 'DISTINCTROW',\n 'DIV',\n 'DO_DOMAIN_IDS',\n 'DOUBLE',\n 'DROP',\n 'DUAL',\n 'EACH',\n 'ELSE',\n 'ELSEIF',\n 'ENCLOSED',\n 'ESCAPED',\n 'EXCEPT',\n 'EXISTS',\n 'EXIT',\n 'EXPLAIN',\n 'FALSE',\n 'FETCH',\n 'FLOAT',\n 'FLOAT4',\n 'FLOAT8',\n 'FOR',\n 'FORCE',\n 'FOREIGN',\n 'FROM',\n 'FULLTEXT',\n 'GENERAL',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HIGH_PRIORITY',\n 'HOUR_MICROSECOND',\n 'HOUR_MINUTE',\n 'HOUR_SECOND',\n 'IF',\n 'IGNORE',\n 'IGNORE_DOMAIN_IDS',\n 'IGNORE_SERVER_IDS',\n 'IN',\n 'INDEX',\n 'INFILE',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INT',\n 'INT1',\n 'INT2',\n 'INT3',\n 'INT4',\n 'INT8',\n 'INTEGER',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'ITERATE',\n 'JOIN',\n 'KEY',\n 'KEYS',\n 'KILL',\n 'LEADING',\n 'LEAVE',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LINEAR',\n 'LINES',\n 'LOAD',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCK',\n 'LONG',\n 'LONGBLOB',\n 'LONGTEXT',\n 'LOOP',\n 'LOW_PRIORITY',\n 'MASTER_HEARTBEAT_PERIOD',\n 'MASTER_SSL_VERIFY_SERVER_CERT',\n 'MATCH',\n 'MAXVALUE',\n 'MEDIUMBLOB',\n 'MEDIUMINT',\n 'MEDIUMTEXT',\n 'MIDDLEINT',\n 'MINUTE_MICROSECOND',\n 'MINUTE_SECOND',\n 'MOD',\n 'MODIFIES',\n 'NATURAL',\n 'NOT',\n 'NO_WRITE_TO_BINLOG',\n 'NULL',\n 'NUMERIC',\n 'OFFSET',\n 'ON',\n 'OPTIMIZE',\n 'OPTION',\n 'OPTIONALLY',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OUTFILE',\n 'OVER',\n 'PAGE_CHECKSUM',\n 'PARSE_VCOL_EXPR',\n 'PARTITION',\n 'POSITION',\n 'PRECISION',\n 'PRIMARY',\n 'PROCEDURE',\n 'PURGE',\n 'RANGE',\n 'READ',\n 'READS',\n 'READ_WRITE',\n 'REAL',\n 'RECURSIVE',\n 'REF_SYSTEM_ID',\n 'REFERENCES',\n 'REGEXP',\n 'RELEASE',\n 'RENAME',\n 'REPEAT',\n 'REPLACE',\n 'REQUIRE',\n 'RESIGNAL',\n 'RESTRICT',\n 'RETURN',\n 'RETURNING',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROW_NUMBER',\n 'ROWS',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECOND_MICROSECOND',\n 'SELECT',\n 'SENSITIVE',\n 'SEPARATOR',\n 'SET',\n 'SHOW',\n 'SIGNAL',\n 'SLOW',\n 'SMALLINT',\n 'SPATIAL',\n 'SPECIFIC',\n 'SQL',\n 'SQLEXCEPTION',\n 'SQLSTATE',\n 'SQLWARNING',\n 'SQL_BIG_RESULT',\n 'SQL_CALC_FOUND_ROWS',\n 'SQL_SMALL_RESULT',\n 'SSL',\n 'STARTING',\n 'STATS_AUTO_RECALC',\n 'STATS_PERSISTENT',\n 'STATS_SAMPLE_PAGES',\n 'STRAIGHT_JOIN',\n 'TABLE',\n 'TERMINATED',\n 'THEN',\n 'TINYBLOB',\n 'TINYINT',\n 'TINYTEXT',\n 'TO',\n 'TRAILING',\n 'TRIGGER',\n 'TRUE',\n 'UNDO',\n 'UNION',\n 'UNIQUE',\n 'UNLOCK',\n 'UNSIGNED',\n 'UPDATE',\n 'USAGE',\n 'USE',\n 'USING',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n 'VALUES',\n 'VARBINARY',\n 'VARCHAR',\n 'VARCHARACTER',\n 'VARYING',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WRITE',\n 'XOR',\n 'YEAR_MONTH',\n 'ZEROFILL',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://mariadb.com/kb/en/information-schema-sql_functions-table/\n all: [\n 'ADDDATE',\n 'ADD_MONTHS',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'CAST',\n 'COUNT',\n 'CUME_DIST',\n 'CURDATE',\n 'CURTIME',\n 'DATE_ADD',\n 'DATE_SUB',\n 'DATE_FORMAT',\n 'DECODE',\n 'DENSE_RANK',\n 'EXTRACT',\n 'FIRST_VALUE',\n 'GROUP_CONCAT',\n 'JSON_ARRAYAGG',\n 'JSON_OBJECTAGG',\n 'LAG',\n 'LEAD',\n 'MAX',\n 'MEDIAN',\n 'MID',\n 'MIN',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'POSITION',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'RANK',\n 'ROW_NUMBER',\n 'SESSION_USER',\n 'STD',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'SYSTEM_USER',\n 'TRIM',\n 'TRIM_ORACLE',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'ABS',\n 'ACOS',\n 'ADDTIME',\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'BENCHMARK',\n 'BIN',\n 'BINLOG_GTID_POS',\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'CEIL',\n 'CEILING',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHR',\n 'COERCIBILITY',\n 'COLUMN_CHECK',\n 'COLUMN_EXISTS',\n 'COLUMN_LIST',\n 'COLUMN_JSON',\n 'COMPRESS',\n 'CONCAT',\n 'CONCAT_OPERATOR_ORACLE',\n 'CONCAT_WS',\n 'CONNECTION_ID',\n 'CONV',\n 'CONVERT_TZ',\n 'COS',\n 'COT',\n 'CRC32',\n 'DATEDIFF',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DEGREES',\n 'DECODE_HISTOGRAM',\n 'DECODE_ORACLE',\n 'DES_DECRYPT',\n 'DES_ENCRYPT',\n 'ELT',\n 'ENCODE',\n 'ENCRYPT',\n 'EXP',\n 'EXPORT_SET',\n 'EXTRACTVALUE',\n 'FIELD',\n 'FIND_IN_SET',\n 'FLOOR',\n 'FORMAT',\n 'FOUND_ROWS',\n 'FROM_BASE64',\n 'FROM_DAYS',\n 'FROM_UNIXTIME',\n 'GET_LOCK',\n 'GREATEST',\n 'HEX',\n 'IFNULL',\n 'INSTR',\n 'ISNULL',\n 'IS_FREE_LOCK',\n 'IS_USED_LOCK',\n 'JSON_ARRAY',\n 'JSON_ARRAY_APPEND',\n 'JSON_ARRAY_INSERT',\n 'JSON_COMPACT',\n 'JSON_CONTAINS',\n 'JSON_CONTAINS_PATH',\n 'JSON_DEPTH',\n 'JSON_DETAILED',\n 'JSON_EXISTS',\n 'JSON_EXTRACT',\n 'JSON_INSERT',\n 'JSON_KEYS',\n 'JSON_LENGTH',\n 'JSON_LOOSE',\n 'JSON_MERGE',\n 'JSON_MERGE_PATCH',\n 'JSON_MERGE_PRESERVE',\n 'JSON_QUERY',\n 'JSON_QUOTE',\n 'JSON_OBJECT',\n 'JSON_REMOVE',\n 'JSON_REPLACE',\n 'JSON_SET',\n 'JSON_SEARCH',\n 'JSON_TYPE',\n 'JSON_UNQUOTE',\n 'JSON_VALID',\n 'JSON_VALUE',\n 'LAST_DAY',\n 'LAST_INSERT_ID',\n 'LCASE',\n 'LEAST',\n 'LENGTH',\n 'LENGTHB',\n 'LN',\n 'LOAD_FILE',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LPAD_ORACLE',\n 'LTRIM',\n 'LTRIM_ORACLE',\n 'MAKEDATE',\n 'MAKETIME',\n 'MAKE_SET',\n 'MASTER_GTID_WAIT',\n 'MASTER_POS_WAIT',\n 'MD5',\n 'MONTHNAME',\n 'NAME_CONST',\n 'NVL',\n 'NVL2',\n 'OCT',\n 'OCTET_LENGTH',\n 'ORD',\n 'PERIOD_ADD',\n 'PERIOD_DIFF',\n 'PI',\n 'POW',\n 'POWER',\n 'QUOTE',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'RADIANS',\n 'RAND',\n 'RELEASE_ALL_LOCKS',\n 'RELEASE_LOCK',\n 'REPLACE_ORACLE',\n 'REVERSE',\n 'ROUND',\n 'RPAD',\n 'RPAD_ORACLE',\n 'RTRIM',\n 'RTRIM_ORACLE',\n 'SEC_TO_TIME',\n 'SHA',\n 'SHA1',\n 'SHA2',\n 'SIGN',\n 'SIN',\n 'SLEEP',\n 'SOUNDEX',\n 'SPACE',\n 'SQRT',\n 'STRCMP',\n 'STR_TO_DATE',\n 'SUBSTR_ORACLE',\n 'SUBSTRING_INDEX',\n 'SUBTIME',\n 'SYS_GUID',\n 'TAN',\n 'TIMEDIFF',\n 'TIME_FORMAT',\n 'TIME_TO_SEC',\n 'TO_BASE64',\n 'TO_CHAR',\n 'TO_DAYS',\n 'TO_SECONDS',\n 'UCASE',\n 'UNCOMPRESS',\n 'UNCOMPRESSED_LENGTH',\n 'UNHEX',\n 'UNIX_TIMESTAMP',\n 'UPDATEXML',\n 'UPPER',\n 'UUID',\n 'UUID_SHORT',\n 'VERSION',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'WSREP_LAST_WRITTEN_GTID',\n 'WSREP_LAST_SEEN_GTID',\n 'WSREP_SYNC_WAIT_UPTO_GTID',\n 'YEARWEEK',\n // CASE expression shorthands\n 'COALESCE',\n 'NULLIF',\n // Data types with parameters\n // https://mariadb.com/kb/en/data-types/\n 'TINYINT',\n 'SMALLINT',\n 'MEDIUMINT',\n 'INT',\n 'INTEGER',\n 'BIGINT',\n 'DECIMAL',\n 'DEC',\n 'NUMERIC',\n 'FIXED',\n // 'NUMBER', // ?? In oracle mode only\n 'FLOAT',\n 'DOUBLE',\n 'DOUBLE PRECISION',\n 'REAL',\n 'BIT',\n 'BINARY',\n 'BLOB',\n 'CHAR',\n 'NATIONAL CHAR',\n 'CHAR BYTE',\n 'ENUM',\n 'VARBINARY',\n 'VARCHAR',\n 'NATIONAL VARCHAR',\n // 'SET' // handled as special-case in postProcess\n 'TIME',\n 'DATETIME',\n 'TIMESTAMP',\n 'YEAR',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from './likeMariaDb.js';\nimport { keywords } from './mariadb.keywords.js';\nimport { functions } from './mariadb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n // Data manipulation\n // - insert:\n 'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n 'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n 'VALUES',\n 'ON DUPLICATE KEY UPDATE',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS]',\n // other\n 'RETURNING',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE [LOW_PRIORITY] [IGNORE]',\n // - delete:\n 'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n // - drop table:\n 'DROP [TEMPORARY] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS]',\n 'ADD [COLUMN] [IF NOT EXISTS]',\n '{CHANGE | MODIFY} [COLUMN] [IF EXISTS]',\n 'DROP [COLUMN] [IF EXISTS]',\n 'RENAME [TO]',\n 'RENAME COLUMN',\n 'ALTER [COLUMN]',\n '{SET | DROP} DEFAULT', // for alter column\n 'SET {VISIBLE | INVISIBLE}', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://mariadb.com/docs/reference/mdb/sql-statements/\n 'ALTER DATABASE',\n 'ALTER DATABASE COMMENT',\n 'ALTER EVENT',\n 'ALTER FUNCTION',\n 'ALTER PROCEDURE',\n 'ALTER SCHEMA',\n 'ALTER SCHEMA COMMENT',\n 'ALTER SEQUENCE',\n 'ALTER SERVER',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ANALYZE',\n 'ANALYZE TABLE',\n 'BACKUP LOCK',\n 'BACKUP STAGE',\n 'BACKUP UNLOCK',\n 'BEGIN',\n 'BINLOG',\n 'CACHE INDEX',\n 'CALL',\n 'CHANGE MASTER TO',\n 'CHECK TABLE',\n 'CHECK VIEW',\n 'CHECKSUM TABLE',\n 'COMMIT',\n 'CREATE AGGREGATE FUNCTION',\n 'CREATE DATABASE',\n 'CREATE EVENT',\n 'CREATE FUNCTION',\n 'CREATE INDEX',\n 'CREATE PROCEDURE',\n 'CREATE ROLE',\n 'CREATE SEQUENCE',\n 'CREATE SERVER',\n 'CREATE SPATIAL INDEX',\n 'CREATE TRIGGER',\n 'CREATE UNIQUE INDEX',\n 'CREATE USER',\n 'DEALLOCATE PREPARE',\n 'DESCRIBE',\n 'DROP DATABASE',\n 'DROP EVENT',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP PREPARE',\n 'DROP PROCEDURE',\n 'DROP ROLE',\n 'DROP SEQUENCE',\n 'DROP SERVER',\n 'DROP TRIGGER',\n 'DROP USER',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FLUSH',\n 'GET DIAGNOSTICS',\n 'GET DIAGNOSTICS CONDITION',\n 'GRANT',\n 'HANDLER',\n 'HELP',\n 'INSTALL PLUGIN',\n 'INSTALL SONAME',\n 'KILL',\n 'LOAD DATA INFILE',\n 'LOAD INDEX INTO CACHE',\n 'LOAD XML INFILE',\n 'LOCK TABLE',\n 'OPTIMIZE TABLE',\n 'PREPARE',\n 'PURGE BINARY LOGS',\n 'PURGE MASTER LOGS',\n 'RELEASE SAVEPOINT',\n 'RENAME TABLE',\n 'RENAME USER',\n 'REPAIR TABLE',\n 'REPAIR VIEW',\n 'RESET MASTER',\n 'RESET QUERY CACHE',\n 'RESET REPLICA',\n 'RESET SLAVE',\n 'RESIGNAL',\n 'REVOKE',\n 'ROLLBACK',\n 'SAVEPOINT',\n 'SET CHARACTER SET',\n 'SET DEFAULT ROLE',\n 'SET GLOBAL TRANSACTION',\n 'SET NAMES',\n 'SET PASSWORD',\n 'SET ROLE',\n 'SET STATEMENT',\n 'SET TRANSACTION',\n 'SHOW',\n 'SHOW ALL REPLICAS STATUS',\n 'SHOW ALL SLAVES STATUS',\n 'SHOW AUTHORS',\n 'SHOW BINARY LOGS',\n 'SHOW BINLOG EVENTS',\n 'SHOW BINLOG STATUS',\n 'SHOW CHARACTER SET',\n 'SHOW CLIENT_STATISTICS',\n 'SHOW COLLATION',\n 'SHOW COLUMNS',\n 'SHOW CONTRIBUTORS',\n 'SHOW CREATE DATABASE',\n 'SHOW CREATE EVENT',\n 'SHOW CREATE FUNCTION',\n 'SHOW CREATE PACKAGE',\n 'SHOW CREATE PACKAGE BODY',\n 'SHOW CREATE PROCEDURE',\n 'SHOW CREATE SEQUENCE',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE TRIGGER',\n 'SHOW CREATE USER',\n 'SHOW CREATE VIEW',\n 'SHOW DATABASES',\n 'SHOW ENGINE',\n 'SHOW ENGINE INNODB STATUS',\n 'SHOW ENGINES',\n 'SHOW ERRORS',\n 'SHOW EVENTS',\n 'SHOW EXPLAIN',\n 'SHOW FUNCTION CODE',\n 'SHOW FUNCTION STATUS',\n 'SHOW GRANTS',\n 'SHOW INDEX',\n 'SHOW INDEXES',\n 'SHOW INDEX_STATISTICS',\n 'SHOW KEYS',\n 'SHOW LOCALES',\n 'SHOW MASTER LOGS',\n 'SHOW MASTER STATUS',\n 'SHOW OPEN TABLES',\n 'SHOW PACKAGE BODY CODE',\n 'SHOW PACKAGE BODY STATUS',\n 'SHOW PACKAGE STATUS',\n 'SHOW PLUGINS',\n 'SHOW PLUGINS SONAME',\n 'SHOW PRIVILEGES',\n 'SHOW PROCEDURE CODE',\n 'SHOW PROCEDURE STATUS',\n 'SHOW PROCESSLIST',\n 'SHOW PROFILE',\n 'SHOW PROFILES',\n 'SHOW QUERY_RESPONSE_TIME',\n 'SHOW RELAYLOG EVENTS',\n 'SHOW REPLICA',\n 'SHOW REPLICA HOSTS',\n 'SHOW REPLICA STATUS',\n 'SHOW SCHEMAS',\n 'SHOW SLAVE',\n 'SHOW SLAVE HOSTS',\n 'SHOW SLAVE STATUS',\n 'SHOW STATUS',\n 'SHOW STORAGE ENGINES',\n 'SHOW TABLE STATUS',\n 'SHOW TABLES',\n 'SHOW TRIGGERS',\n 'SHOW USER_STATISTICS',\n 'SHOW VARIABLES',\n 'SHOW WARNINGS',\n 'SHOW WSREP_MEMBERSHIP',\n 'SHOW WSREP_STATUS',\n 'SHUTDOWN',\n 'SIGNAL',\n 'START ALL REPLICAS',\n 'START ALL SLAVES',\n 'START REPLICA',\n 'START SLAVE',\n 'START TRANSACTION',\n 'STOP ALL REPLICAS',\n 'STOP ALL SLAVES',\n 'STOP REPLICA',\n 'STOP SLAVE',\n 'UNINSTALL PLUGIN',\n 'UNINSTALL SONAME',\n 'UNLOCK TABLE',\n 'USE',\n 'XA BEGIN',\n 'XA COMMIT',\n 'XA END',\n 'XA PREPARE',\n 'XA RECOVER',\n 'XA ROLLBACK',\n 'XA START',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n 'MINUS [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL JOIN',\n 'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n // non-standard joins\n 'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n 'CHARACTER SET',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// For reference: https://mariadb.com/kb/en/sql-statements-structure/\nexport const mariadb: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n stringTypes: [\n '\"\"-qq-bs',\n \"''-qq-bs\",\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n variableTypes: [\n { regex: '@@?[A-Za-z0-9_.$]+' },\n { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n { quote: '``', prefixes: ['@'], requirePrefix: true },\n ],\n paramTypes: { positional: true },\n lineCommentTypes: ['--', '#'],\n operators: ['%', ':=', '&', '|', '^', '~', '<<', '>>', '<=>', '&&', '||', '!'],\n postProcess,\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://dev.mysql.com/doc/refman/8.0/en/keywords.html\n reserved: [\n 'ACCESSIBLE', // (R)\n 'ADD', // (R)\n 'ALL', // (R)\n 'ALTER', // (R)\n 'ANALYZE', // (R)\n 'AND', // (R)\n 'AS', // (R)\n 'ASC', // (R)\n 'ASENSITIVE', // (R)\n 'BEFORE', // (R)\n 'BETWEEN', // (R)\n 'BIGINT', // (R)\n 'BINARY', // (R)\n 'BLOB', // (R)\n 'BOTH', // (R)\n 'BY', // (R)\n 'CALL', // (R)\n 'CASCADE', // (R)\n 'CASE', // (R)\n 'CHANGE', // (R)\n 'CHAR', // (R)\n 'CHARACTER', // (R)\n 'CHECK', // (R)\n 'COLLATE', // (R)\n 'COLUMN', // (R)\n 'CONDITION', // (R)\n 'CONSTRAINT', // (R)\n 'CONTINUE', // (R)\n 'CONVERT', // (R)\n 'CREATE', // (R)\n 'CROSS', // (R)\n 'CUBE', // (R)\n 'CUME_DIST', // (R)\n 'CURRENT_DATE', // (R)\n 'CURRENT_TIME', // (R)\n 'CURRENT_TIMESTAMP', // (R)\n 'CURRENT_USER', // (R)\n 'CURSOR', // (R)\n 'DATABASE', // (R)\n 'DATABASES', // (R)\n 'DAY_HOUR', // (R)\n 'DAY_MICROSECOND', // (R)\n 'DAY_MINUTE', // (R)\n 'DAY_SECOND', // (R)\n 'DEC', // (R)\n 'DECIMAL', // (R)\n 'DECLARE', // (R)\n 'DEFAULT', // (R)\n 'DELAYED', // (R)\n 'DELETE', // (R)\n 'DENSE_RANK', // (R)\n 'DESC', // (R)\n 'DESCRIBE', // (R)\n 'DETERMINISTIC', // (R)\n 'DISTINCT', // (R)\n 'DISTINCTROW', // (R)\n 'DIV', // (R)\n 'DOUBLE', // (R)\n 'DROP', // (R)\n 'DUAL', // (R)\n 'EACH', // (R)\n 'ELSE', // (R)\n 'ELSEIF', // (R)\n 'EMPTY', // (R)\n 'ENCLOSED', // (R)\n 'ESCAPED', // (R)\n 'EXCEPT', // (R)\n 'EXISTS', // (R)\n 'EXIT', // (R)\n 'EXPLAIN', // (R)\n 'FALSE', // (R)\n 'FETCH', // (R)\n 'FIRST_VALUE', // (R)\n 'FLOAT', // (R)\n 'FLOAT4', // (R)\n 'FLOAT8', // (R)\n 'FOR', // (R)\n 'FORCE', // (R)\n 'FOREIGN', // (R)\n 'FROM', // (R)\n 'FULLTEXT', // (R)\n 'FUNCTION', // (R)\n 'GENERATED', // (R)\n 'GET', // (R)\n 'GRANT', // (R)\n 'GROUP', // (R)\n 'GROUPING', // (R)\n 'GROUPS', // (R)\n 'HAVING', // (R)\n 'HIGH_PRIORITY', // (R)\n 'HOUR_MICROSECOND', // (R)\n 'HOUR_MINUTE', // (R)\n 'HOUR_SECOND', // (R)\n 'IF', // (R)\n 'IGNORE', // (R)\n 'IN', // (R)\n 'INDEX', // (R)\n 'INFILE', // (R)\n 'INNER', // (R)\n 'INOUT', // (R)\n 'INSENSITIVE', // (R)\n 'INSERT', // (R)\n 'IN', // <-- moved over from functions\n 'INT', // (R)\n 'INT1', // (R)\n 'INT2', // (R)\n 'INT3', // (R)\n 'INT4', // (R)\n 'INT8', // (R)\n 'INTEGER', // (R)\n 'INTERSECT', // (R)\n 'INTERVAL', // (R)\n 'INTO', // (R)\n 'IO_AFTER_GTIDS', // (R)\n 'IO_BEFORE_GTIDS', // (R)\n 'IS', // (R)\n 'ITERATE', // (R)\n 'JOIN', // (R)\n 'JSON_TABLE', // (R)\n 'KEY', // (R)\n 'KEYS', // (R)\n 'KILL', // (R)\n 'LAG', // (R)\n 'LAST_VALUE', // (R)\n 'LATERAL', // (R)\n 'LEAD', // (R)\n 'LEADING', // (R)\n 'LEAVE', // (R)\n 'LEFT', // (R)\n 'LIKE', // (R)\n 'LIMIT', // (R)\n 'LINEAR', // (R)\n 'LINES', // (R)\n 'LOAD', // (R)\n 'LOCALTIME', // (R)\n 'LOCALTIMESTAMP', // (R)\n 'LOCK', // (R)\n 'LONG', // (R)\n 'LONGBLOB', // (R)\n 'LONGTEXT', // (R)\n 'LOOP', // (R)\n 'LOW_PRIORITY', // (R)\n 'MASTER_BIND', // (R)\n 'MASTER_SSL_VERIFY_SERVER_CERT', // (R)\n 'MATCH', // (R)\n 'MAXVALUE', // (R)\n 'MEDIUMBLOB', // (R)\n 'MEDIUMINT', // (R)\n 'MEDIUMTEXT', // (R)\n 'MIDDLEINT', // (R)\n 'MINUTE_MICROSECOND', // (R)\n 'MINUTE_SECOND', // (R)\n 'MOD', // (R)\n 'MODIFIES', // (R)\n 'NATURAL', // (R)\n 'NOT', // (R)\n 'NO_WRITE_TO_BINLOG', // (R)\n 'NTH_VALUE', // (R)\n 'NTILE', // (R)\n 'NULL', // (R)\n 'NUMERIC', // (R)\n 'OF', // (R)\n 'ON', // (R)\n 'OPTIMIZE', // (R)\n 'OPTIMIZER_COSTS', // (R)\n 'OPTION', // (R)\n 'OPTIONALLY', // (R)\n 'OR', // (R)\n 'ORDER', // (R)\n 'OUT', // (R)\n 'OUTER', // (R)\n 'OUTFILE', // (R)\n 'OVER', // (R)\n 'PARTITION', // (R)\n 'PERCENT_RANK', // (R)\n 'PRECISION', // (R)\n 'PRIMARY', // (R)\n 'PROCEDURE', // (R)\n 'PURGE', // (R)\n 'RANGE', // (R)\n 'RANK', // (R)\n 'READ', // (R)\n 'READS', // (R)\n 'READ_WRITE', // (R)\n 'REAL', // (R)\n 'RECURSIVE', // (R)\n 'REFERENCES', // (R)\n 'REGEXP', // (R)\n 'RELEASE', // (R)\n 'RENAME', // (R)\n 'REPEAT', // (R)\n 'REPLACE', // (R)\n 'REQUIRE', // (R)\n 'RESIGNAL', // (R)\n 'RESTRICT', // (R)\n 'RETURN', // (R)\n 'REVOKE', // (R)\n 'RIGHT', // (R)\n 'RLIKE', // (R)\n 'ROW', // (R)\n 'ROWS', // (R)\n 'ROW_NUMBER', // (R)\n 'SCHEMA', // (R)\n 'SCHEMAS', // (R)\n 'SECOND_MICROSECOND', // (R)\n 'SELECT', // (R)\n 'SENSITIVE', // (R)\n 'SEPARATOR', // (R)\n 'SET', // (R)\n 'SHOW', // (R)\n 'SIGNAL', // (R)\n 'SMALLINT', // (R)\n 'SPATIAL', // (R)\n 'SPECIFIC', // (R)\n 'SQL', // (R)\n 'SQLEXCEPTION', // (R)\n 'SQLSTATE', // (R)\n 'SQLWARNING', // (R)\n 'SQL_BIG_RESULT', // (R)\n 'SQL_CALC_FOUND_ROWS', // (R)\n 'SQL_SMALL_RESULT', // (R)\n 'SSL', // (R)\n 'STARTING', // (R)\n 'STORED', // (R)\n 'STRAIGHT_JOIN', // (R)\n 'SYSTEM', // (R)\n 'TABLE', // (R)\n 'TERMINATED', // (R)\n 'THEN', // (R)\n 'TINYBLOB', // (R)\n 'TINYINT', // (R)\n 'TINYTEXT', // (R)\n 'TO', // (R)\n 'TRAILING', // (R)\n 'TRIGGER', // (R)\n 'TRUE', // (R)\n 'UNDO', // (R)\n 'UNION', // (R)\n 'UNIQUE', // (R)\n 'UNLOCK', // (R)\n 'UNSIGNED', // (R)\n 'UPDATE', // (R)\n 'USAGE', // (R)\n 'USE', // (R)\n 'USING', // (R)\n 'UTC_DATE', // (R)\n 'UTC_TIME', // (R)\n 'UTC_TIMESTAMP', // (R)\n 'VALUES', // (R)\n 'VARBINARY', // (R)\n 'VARCHAR', // (R)\n 'VARCHARACTER', // (R)\n 'VARYING', // (R)\n 'VIRTUAL', // (R)\n 'WHEN', // (R)\n 'WHERE', // (R)\n 'WHILE', // (R)\n 'WINDOW', // (R)\n 'WITH', // (R)\n 'WRITE', // (R)\n 'XOR', // (R)\n 'YEAR_MONTH', // (R)\n 'ZEROFILL', // (R)\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html\n all: [\n 'ABS',\n 'ACOS',\n 'ADDDATE',\n 'ADDTIME',\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n // 'AND',\n 'ANY_VALUE',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BENCHMARK',\n 'BIN',\n 'BIN_TO_UUID',\n 'BINARY',\n 'BIT_AND',\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'BIT_OR',\n 'BIT_XOR',\n 'CAN_ACCESS_COLUMN',\n 'CAN_ACCESS_DATABASE',\n 'CAN_ACCESS_TABLE',\n 'CAN_ACCESS_USER',\n 'CAN_ACCESS_VIEW',\n 'CAST',\n 'CEIL',\n 'CEILING',\n 'CHAR',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHARSET',\n 'COALESCE',\n 'COERCIBILITY',\n 'COLLATION',\n 'COMPRESS',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONNECTION_ID',\n 'CONV',\n 'CONVERT',\n 'CONVERT_TZ',\n 'COS',\n 'COT',\n 'COUNT',\n 'CRC32',\n 'CUME_DIST',\n 'CURDATE',\n 'CURRENT_DATE',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURTIME',\n 'DATABASE',\n 'DATE',\n 'DATE_ADD',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATEDIFF',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DEFAULT',\n 'DEGREES',\n 'DENSE_RANK',\n 'DIV',\n 'ELT',\n 'EXP',\n 'EXPORT_SET',\n 'EXTRACT',\n 'EXTRACTVALUE',\n 'FIELD',\n 'FIND_IN_SET',\n 'FIRST_VALUE',\n 'FLOOR',\n 'FORMAT',\n 'FORMAT_BYTES',\n 'FORMAT_PICO_TIME',\n 'FOUND_ROWS',\n 'FROM_BASE64',\n 'FROM_DAYS',\n 'FROM_UNIXTIME',\n 'GEOMCOLLECTION',\n 'GEOMETRYCOLLECTION',\n 'GET_DD_COLUMN_PRIVILEGES',\n 'GET_DD_CREATE_OPTIONS',\n 'GET_DD_INDEX_SUB_PART_LENGTH',\n 'GET_FORMAT',\n 'GET_LOCK',\n 'GREATEST',\n 'GROUP_CONCAT',\n 'GROUPING',\n 'GTID_SUBSET',\n 'GTID_SUBTRACT',\n 'HEX',\n 'HOUR',\n 'ICU_VERSION',\n 'IF',\n 'IFNULL',\n // 'IN',\n 'INET_ATON',\n 'INET_NTOA',\n 'INET6_ATON',\n 'INET6_NTOA',\n 'INSERT',\n 'INSTR',\n 'INTERNAL_AUTO_INCREMENT',\n 'INTERNAL_AVG_ROW_LENGTH',\n 'INTERNAL_CHECK_TIME',\n 'INTERNAL_CHECKSUM',\n 'INTERNAL_DATA_FREE',\n 'INTERNAL_DATA_LENGTH',\n 'INTERNAL_DD_CHAR_LENGTH',\n 'INTERNAL_GET_COMMENT_OR_ERROR',\n 'INTERNAL_GET_ENABLED_ROLE_JSON',\n 'INTERNAL_GET_HOSTNAME',\n 'INTERNAL_GET_USERNAME',\n 'INTERNAL_GET_VIEW_WARNING_OR_ERROR',\n 'INTERNAL_INDEX_COLUMN_CARDINALITY',\n 'INTERNAL_INDEX_LENGTH',\n 'INTERNAL_IS_ENABLED_ROLE',\n 'INTERNAL_IS_MANDATORY_ROLE',\n 'INTERNAL_KEYS_DISABLED',\n 'INTERNAL_MAX_DATA_LENGTH',\n 'INTERNAL_TABLE_ROWS',\n 'INTERNAL_UPDATE_TIME',\n 'INTERVAL',\n 'IS',\n 'IS_FREE_LOCK',\n 'IS_IPV4',\n 'IS_IPV4_COMPAT',\n 'IS_IPV4_MAPPED',\n 'IS_IPV6',\n 'IS NOT',\n 'IS NOT NULL',\n 'IS NULL',\n 'IS_USED_LOCK',\n 'IS_UUID',\n 'ISNULL',\n 'JSON_ARRAY',\n 'JSON_ARRAY_APPEND',\n 'JSON_ARRAY_INSERT',\n 'JSON_ARRAYAGG',\n 'JSON_CONTAINS',\n 'JSON_CONTAINS_PATH',\n 'JSON_DEPTH',\n 'JSON_EXTRACT',\n 'JSON_INSERT',\n 'JSON_KEYS',\n 'JSON_LENGTH',\n 'JSON_MERGE',\n 'JSON_MERGE_PATCH',\n 'JSON_MERGE_PRESERVE',\n 'JSON_OBJECT',\n 'JSON_OBJECTAGG',\n 'JSON_OVERLAPS',\n 'JSON_PRETTY',\n 'JSON_QUOTE',\n 'JSON_REMOVE',\n 'JSON_REPLACE',\n 'JSON_SCHEMA_VALID',\n 'JSON_SCHEMA_VALIDATION_REPORT',\n 'JSON_SEARCH',\n 'JSON_SET',\n 'JSON_STORAGE_FREE',\n 'JSON_STORAGE_SIZE',\n 'JSON_TABLE',\n 'JSON_TYPE',\n 'JSON_UNQUOTE',\n 'JSON_VALID',\n 'JSON_VALUE',\n 'LAG',\n 'LAST_DAY',\n 'LAST_INSERT_ID',\n 'LAST_VALUE',\n 'LCASE',\n 'LEAD',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LIKE',\n 'LINESTRING',\n 'LN',\n 'LOAD_FILE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAKE_SET',\n 'MAKEDATE',\n 'MAKETIME',\n 'MASTER_POS_WAIT',\n 'MATCH',\n 'MAX',\n 'MBRCONTAINS',\n 'MBRCOVEREDBY',\n 'MBRCOVERS',\n 'MBRDISJOINT',\n 'MBREQUALS',\n 'MBRINTERSECTS',\n 'MBROVERLAPS',\n 'MBRTOUCHES',\n 'MBRWITHIN',\n 'MD5',\n 'MEMBER OF',\n 'MICROSECOND',\n 'MID',\n 'MIN',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MULTILINESTRING',\n 'MULTIPOINT',\n 'MULTIPOLYGON',\n 'NAME_CONST',\n 'NOT',\n 'NOT IN',\n 'NOT LIKE',\n 'NOT REGEXP',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'OCT',\n 'OCTET_LENGTH',\n // 'OR',\n 'ORD',\n 'PERCENT_RANK',\n 'PERIOD_ADD',\n 'PERIOD_DIFF',\n 'PI',\n 'POINT',\n 'POLYGON',\n 'POSITION',\n 'POW',\n 'POWER',\n 'PS_CURRENT_THREAD_ID',\n 'PS_THREAD_ID',\n 'QUARTER',\n 'QUOTE',\n 'RADIANS',\n 'RAND',\n 'RANDOM_BYTES',\n 'RANK',\n 'REGEXP',\n 'REGEXP_INSTR',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'RELEASE_ALL_LOCKS',\n 'RELEASE_LOCK',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RLIKE',\n 'ROLES_GRAPHML',\n 'ROUND',\n 'ROW_COUNT',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'SCHEMA',\n 'SEC_TO_TIME',\n 'SECOND',\n 'SESSION_USER',\n 'SHA1',\n 'SHA2',\n 'SIGN',\n 'SIN',\n 'SLEEP',\n 'SOUNDEX',\n 'SOUNDS LIKE',\n 'SOURCE_POS_WAIT',\n 'SPACE',\n 'SQRT',\n 'ST_AREA',\n 'ST_ASBINARY',\n 'ST_ASGEOJSON',\n 'ST_ASTEXT',\n 'ST_BUFFER',\n 'ST_BUFFER_STRATEGY',\n 'ST_CENTROID',\n 'ST_COLLECT',\n 'ST_CONTAINS',\n 'ST_CONVEXHULL',\n 'ST_CROSSES',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_DISTANCE_SPHERE',\n 'ST_ENDPOINT',\n 'ST_ENVELOPE',\n 'ST_EQUALS',\n 'ST_EXTERIORRING',\n 'ST_FRECHETDISTANCE',\n 'ST_GEOHASH',\n 'ST_GEOMCOLLFROMTEXT',\n 'ST_GEOMCOLLFROMWKB',\n 'ST_GEOMETRYN',\n 'ST_GEOMETRYTYPE',\n 'ST_GEOMFROMGEOJSON',\n 'ST_GEOMFROMTEXT',\n 'ST_GEOMFROMWKB',\n 'ST_HAUSDORFFDISTANCE',\n 'ST_INTERIORRINGN',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_ISCLOSED',\n 'ST_ISEMPTY',\n 'ST_ISSIMPLE',\n 'ST_ISVALID',\n 'ST_LATFROMGEOHASH',\n 'ST_LATITUDE',\n 'ST_LENGTH',\n 'ST_LINEFROMTEXT',\n 'ST_LINEFROMWKB',\n 'ST_LINEINTERPOLATEPOINT',\n 'ST_LINEINTERPOLATEPOINTS',\n 'ST_LONGFROMGEOHASH',\n 'ST_LONGITUDE',\n 'ST_MAKEENVELOPE',\n 'ST_MLINEFROMTEXT',\n 'ST_MLINEFROMWKB',\n 'ST_MPOINTFROMTEXT',\n 'ST_MPOINTFROMWKB',\n 'ST_MPOLYFROMTEXT',\n 'ST_MPOLYFROMWKB',\n 'ST_NUMGEOMETRIES',\n 'ST_NUMINTERIORRING',\n 'ST_NUMPOINTS',\n 'ST_OVERLAPS',\n 'ST_POINTATDISTANCE',\n 'ST_POINTFROMGEOHASH',\n 'ST_POINTFROMTEXT',\n 'ST_POINTFROMWKB',\n 'ST_POINTN',\n 'ST_POLYFROMTEXT',\n 'ST_POLYFROMWKB',\n 'ST_SIMPLIFY',\n 'ST_SRID',\n 'ST_STARTPOINT',\n 'ST_SWAPXY',\n 'ST_SYMDIFFERENCE',\n 'ST_TOUCHES',\n 'ST_TRANSFORM',\n 'ST_UNION',\n 'ST_VALIDATE',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_Y',\n 'STATEMENT_DIGEST',\n 'STATEMENT_DIGEST_TEXT',\n 'STD',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DATE',\n 'STRCMP',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUBSTRING_INDEX',\n 'SUBTIME',\n 'SUM',\n 'SYSDATE',\n 'SYSTEM_USER',\n 'TAN',\n 'TIME',\n 'TIME_FORMAT',\n 'TIME_TO_SEC',\n 'TIMEDIFF',\n 'TIMESTAMP',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TO_BASE64',\n 'TO_DAYS',\n 'TO_SECONDS',\n 'TRIM',\n 'TRUNCATE',\n 'UCASE',\n 'UNCOMPRESS',\n 'UNCOMPRESSED_LENGTH',\n 'UNHEX',\n 'UNIX_TIMESTAMP',\n 'UPDATEXML',\n 'UPPER',\n // 'USER',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n 'UUID',\n 'UUID_SHORT',\n 'UUID_TO_BIN',\n 'VALIDATE_PASSWORD_STRENGTH',\n 'VALUES',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n 'VERSION',\n 'WAIT_FOR_EXECUTED_GTID_SET',\n 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS',\n 'WEEK',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'WEIGHT_STRING',\n // 'XOR',\n 'YEAR',\n 'YEARWEEK',\n // Data types with parameters\n // https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n 'BIT',\n 'TINYINT',\n 'SMALLINT',\n 'MEDIUMINT',\n 'INT',\n 'INTEGER',\n 'BIGINT',\n 'DECIMAL',\n 'DEC',\n 'NUMERIC',\n 'FIXED',\n 'FLOAT',\n 'DOUBLE',\n 'DOUBLE PRECISION',\n 'REAL',\n 'DATETIME',\n 'TIMESTAMP',\n 'TIME',\n 'YEAR',\n 'CHAR',\n 'NATIONAL CHAR',\n 'VARCHAR',\n 'NATIONAL VARCHAR',\n 'BINARY',\n 'VARBINARY',\n 'BLOB',\n 'TEXT',\n 'ENUM',\n // 'SET' // handled as special-case in postProcess\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { keywords } from './mysql.keywords.js';\nimport { functions } from './mysql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO]',\n 'REPLACE [LOW_PRIORITY | DELAYED] [INTO]',\n 'VALUES',\n 'ON DUPLICATE KEY UPDATE',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]',\n 'CREATE [TEMPORARY] TABLE [IF NOT EXISTS]',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE [LOW_PRIORITY] [IGNORE]',\n // - delete:\n 'DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM',\n // - drop table:\n 'DROP [TEMPORARY] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n '{CHANGE | MODIFY} [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME [TO | AS]',\n 'RENAME COLUMN',\n 'ALTER [COLUMN]',\n '{SET | DROP} DEFAULT', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html\n 'ALTER DATABASE',\n 'ALTER EVENT',\n 'ALTER FUNCTION',\n 'ALTER INSTANCE',\n 'ALTER LOGFILE GROUP',\n 'ALTER PROCEDURE',\n 'ALTER RESOURCE GROUP',\n 'ALTER SERVER',\n 'ALTER TABLESPACE',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ANALYZE TABLE',\n 'BINLOG',\n 'CACHE INDEX',\n 'CALL',\n 'CHANGE MASTER TO',\n 'CHANGE REPLICATION FILTER',\n 'CHANGE REPLICATION SOURCE TO',\n 'CHECK TABLE',\n 'CHECKSUM TABLE',\n 'CLONE',\n 'COMMIT',\n 'CREATE DATABASE',\n 'CREATE EVENT',\n 'CREATE FUNCTION',\n 'CREATE FUNCTION',\n 'CREATE INDEX',\n 'CREATE LOGFILE GROUP',\n 'CREATE PROCEDURE',\n 'CREATE RESOURCE GROUP',\n 'CREATE ROLE',\n 'CREATE SERVER',\n 'CREATE SPATIAL REFERENCE SYSTEM',\n 'CREATE TABLESPACE',\n 'CREATE TRIGGER',\n 'CREATE USER',\n 'DEALLOCATE PREPARE',\n 'DESCRIBE',\n 'DROP DATABASE',\n 'DROP EVENT',\n 'DROP FUNCTION',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP LOGFILE GROUP',\n 'DROP PROCEDURE',\n 'DROP RESOURCE GROUP',\n 'DROP ROLE',\n 'DROP SERVER',\n 'DROP SPATIAL REFERENCE SYSTEM',\n 'DROP TABLESPACE',\n 'DROP TRIGGER',\n 'DROP USER',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FLUSH',\n 'GRANT',\n 'HANDLER',\n 'HELP',\n 'IMPORT TABLE',\n 'INSTALL COMPONENT',\n 'INSTALL PLUGIN',\n 'KILL',\n 'LOAD DATA',\n 'LOAD INDEX INTO CACHE',\n 'LOAD XML',\n 'LOCK INSTANCE FOR BACKUP',\n 'LOCK TABLES',\n 'MASTER_POS_WAIT',\n 'OPTIMIZE TABLE',\n 'PREPARE',\n 'PURGE BINARY LOGS',\n 'RELEASE SAVEPOINT',\n 'RENAME TABLE',\n 'RENAME USER',\n 'REPAIR TABLE',\n 'RESET',\n 'RESET MASTER',\n 'RESET PERSIST',\n 'RESET REPLICA',\n 'RESET SLAVE',\n 'RESTART',\n 'REVOKE',\n 'ROLLBACK',\n 'ROLLBACK TO SAVEPOINT',\n 'SAVEPOINT',\n 'SET CHARACTER SET',\n 'SET DEFAULT ROLE',\n 'SET NAMES',\n 'SET PASSWORD',\n 'SET RESOURCE GROUP',\n 'SET ROLE',\n 'SET TRANSACTION',\n 'SHOW',\n 'SHOW BINARY LOGS',\n 'SHOW BINLOG EVENTS',\n 'SHOW CHARACTER SET',\n 'SHOW COLLATION',\n 'SHOW COLUMNS',\n 'SHOW CREATE DATABASE',\n 'SHOW CREATE EVENT',\n 'SHOW CREATE FUNCTION',\n 'SHOW CREATE PROCEDURE',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE TRIGGER',\n 'SHOW CREATE USER',\n 'SHOW CREATE VIEW',\n 'SHOW DATABASES',\n 'SHOW ENGINE',\n 'SHOW ENGINES',\n 'SHOW ERRORS',\n 'SHOW EVENTS',\n 'SHOW FUNCTION CODE',\n 'SHOW FUNCTION STATUS',\n 'SHOW GRANTS',\n 'SHOW INDEX',\n 'SHOW MASTER STATUS',\n 'SHOW OPEN TABLES',\n 'SHOW PLUGINS',\n 'SHOW PRIVILEGES',\n 'SHOW PROCEDURE CODE',\n 'SHOW PROCEDURE STATUS',\n 'SHOW PROCESSLIST',\n 'SHOW PROFILE',\n 'SHOW PROFILES',\n 'SHOW RELAYLOG EVENTS',\n 'SHOW REPLICA STATUS',\n 'SHOW REPLICAS',\n 'SHOW SLAVE',\n 'SHOW SLAVE HOSTS',\n 'SHOW STATUS',\n 'SHOW TABLE STATUS',\n 'SHOW TABLES',\n 'SHOW TRIGGERS',\n 'SHOW VARIABLES',\n 'SHOW WARNINGS',\n 'SHUTDOWN',\n 'SOURCE_POS_WAIT',\n 'START GROUP_REPLICATION',\n 'START REPLICA',\n 'START SLAVE',\n 'START TRANSACTION',\n 'STOP GROUP_REPLICATION',\n 'STOP REPLICA',\n 'STOP SLAVE',\n 'TABLE',\n 'UNINSTALL COMPONENT',\n 'UNINSTALL PLUGIN',\n 'UNLOCK INSTANCE',\n 'UNLOCK TABLES',\n 'USE',\n 'XA',\n // flow control\n // 'IF',\n 'ITERATE',\n 'LEAVE',\n 'LOOP',\n 'REPEAT',\n 'RETURN',\n 'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL | DISTINCT]']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n // non-standard joins\n 'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL]',\n 'CHARACTER SET',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://dev.mysql.com/doc/refman/8.0/en/\nexport const mysql: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n // TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.\n stringTypes: [\n '\"\"-qq-bs',\n { quote: \"''-qq-bs\", prefixes: ['N'] },\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n variableTypes: [\n { regex: '@@?[A-Za-z0-9_.$]+' },\n { quote: '\"\"-qq-bs', prefixes: ['@'], requirePrefix: true },\n { quote: \"''-qq-bs\", prefixes: ['@'], requirePrefix: true },\n { quote: '``', prefixes: ['@'], requirePrefix: true },\n ],\n paramTypes: { positional: true },\n lineCommentTypes: ['--', '#'],\n operators: ['%', ':=', '&', '|', '^', '~', '<<', '>>', '<=>', '->', '->>', '&&', '||', '!'],\n postProcess,\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/functions.html\n all: [\n 'ABORT',\n 'ABS',\n 'ACOS',\n 'ADVISOR',\n 'ARRAY_AGG',\n 'ARRAY_AGG',\n 'ARRAY_APPEND',\n 'ARRAY_AVG',\n 'ARRAY_BINARY_SEARCH',\n 'ARRAY_CONCAT',\n 'ARRAY_CONTAINS',\n 'ARRAY_COUNT',\n 'ARRAY_DISTINCT',\n 'ARRAY_EXCEPT',\n 'ARRAY_FLATTEN',\n 'ARRAY_IFNULL',\n 'ARRAY_INSERT',\n 'ARRAY_INTERSECT',\n 'ARRAY_LENGTH',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_MOVE',\n 'ARRAY_POSITION',\n 'ARRAY_PREPEND',\n 'ARRAY_PUT',\n 'ARRAY_RANGE',\n 'ARRAY_REMOVE',\n 'ARRAY_REPEAT',\n 'ARRAY_REPLACE',\n 'ARRAY_REVERSE',\n 'ARRAY_SORT',\n 'ARRAY_STAR',\n 'ARRAY_SUM',\n 'ARRAY_SYMDIFF',\n 'ARRAY_SYMDIFF1',\n 'ARRAY_SYMDIFFN',\n 'ARRAY_UNION',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BASE64',\n 'BASE64_DECODE',\n 'BASE64_ENCODE',\n 'BITAND ',\n 'BITCLEAR ',\n 'BITNOT ',\n 'BITOR ',\n 'BITSET ',\n 'BITSHIFT ',\n 'BITTEST ',\n 'BITXOR ',\n 'CEIL',\n 'CLOCK_LOCAL',\n 'CLOCK_MILLIS',\n 'CLOCK_STR',\n 'CLOCK_TZ',\n 'CLOCK_UTC',\n 'COALESCE',\n 'CONCAT',\n 'CONCAT2',\n 'CONTAINS',\n 'CONTAINS_TOKEN',\n 'CONTAINS_TOKEN_LIKE',\n 'CONTAINS_TOKEN_REGEXP',\n 'COS',\n 'COUNT',\n 'COUNT',\n 'COUNTN',\n 'CUME_DIST',\n 'CURL',\n 'DATE_ADD_MILLIS',\n 'DATE_ADD_STR',\n 'DATE_DIFF_MILLIS',\n 'DATE_DIFF_STR',\n 'DATE_FORMAT_STR',\n 'DATE_PART_MILLIS',\n 'DATE_PART_STR',\n 'DATE_RANGE_MILLIS',\n 'DATE_RANGE_STR',\n 'DATE_TRUNC_MILLIS',\n 'DATE_TRUNC_STR',\n 'DECODE',\n 'DECODE_JSON',\n 'DEGREES',\n 'DENSE_RANK',\n 'DURATION_TO_STR',\n // 'E',\n 'ENCODED_SIZE',\n 'ENCODE_JSON',\n 'EXP',\n 'FIRST_VALUE',\n 'FLOOR',\n 'GREATEST',\n 'HAS_TOKEN',\n 'IFINF',\n 'IFMISSING',\n 'IFMISSINGORNULL',\n 'IFNAN',\n 'IFNANORINF',\n 'IFNULL',\n 'INITCAP',\n 'ISARRAY',\n 'ISATOM',\n 'ISBITSET',\n 'ISBOOLEAN',\n 'ISNUMBER',\n 'ISOBJECT',\n 'ISSTRING',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'LEAST',\n 'LENGTH',\n 'LN',\n 'LOG',\n 'LOWER',\n 'LTRIM',\n 'MAX',\n 'MEAN',\n 'MEDIAN',\n 'META',\n 'MILLIS',\n 'MILLIS_TO_LOCAL',\n 'MILLIS_TO_STR',\n 'MILLIS_TO_TZ',\n 'MILLIS_TO_UTC',\n 'MILLIS_TO_ZONE_NAME',\n 'MIN',\n 'MISSINGIF',\n 'NANIF',\n 'NEGINFIF',\n 'NOW_LOCAL',\n 'NOW_MILLIS',\n 'NOW_STR',\n 'NOW_TZ',\n 'NOW_UTC',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'NVL',\n 'NVL2',\n 'OBJECT_ADD',\n 'OBJECT_CONCAT',\n 'OBJECT_INNER_PAIRS',\n 'OBJECT_INNER_VALUES',\n 'OBJECT_LENGTH',\n 'OBJECT_NAMES',\n 'OBJECT_PAIRS',\n 'OBJECT_PUT',\n 'OBJECT_REMOVE',\n 'OBJECT_RENAME',\n 'OBJECT_REPLACE',\n 'OBJECT_UNWRAP',\n 'OBJECT_VALUES',\n 'PAIRS',\n 'PERCENT_RANK',\n 'PI',\n 'POLY_LENGTH',\n 'POSINFIF',\n 'POSITION',\n 'POWER',\n 'RADIANS',\n 'RANDOM',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'REGEXP_CONTAINS',\n 'REGEXP_LIKE',\n 'REGEXP_MATCHES',\n 'REGEXP_POSITION',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT',\n 'REGEX_CONTAINS',\n 'REGEX_LIKE',\n 'REGEX_MATCHES',\n 'REGEX_POSITION',\n 'REGEX_REPLACE',\n 'REGEX_SPLIT',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'ROUND',\n 'ROW_NUMBER',\n 'RTRIM',\n 'SEARCH',\n 'SEARCH_META',\n 'SEARCH_SCORE',\n 'SIGN',\n 'SIN',\n 'SPLIT',\n 'SQRT',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DURATION',\n 'STR_TO_MILLIS',\n 'STR_TO_TZ',\n 'STR_TO_UTC',\n 'STR_TO_ZONE_NAME',\n 'SUBSTR',\n 'SUFFIXES',\n 'SUM',\n 'TAN',\n 'TITLE',\n 'TOARRAY',\n 'TOATOM',\n 'TOBOOLEAN',\n 'TOKENS',\n 'TOKENS',\n 'TONUMBER',\n 'TOOBJECT',\n 'TOSTRING',\n 'TRIM',\n 'TRUNC',\n // 'TYPE', // disabled\n 'UPPER',\n 'UUID',\n 'VARIANCE',\n 'VARIANCE_POP',\n 'VARIANCE_SAMP',\n 'VAR_POP',\n 'VAR_SAMP',\n 'WEEKDAY_MILLIS',\n 'WEEKDAY_STR',\n // type casting\n // not implemented in N1QL, but added here now for the sake of tests\n // https://docs.couchbase.com/server/current/analytics/3_query.html#Vs_SQL-92\n 'CAST',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n all: [\n 'ADVISE',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AT',\n 'BEGIN',\n 'BETWEEN',\n 'BINARY',\n 'BOOLEAN',\n 'BREAK',\n 'BUCKET',\n 'BUILD',\n 'BY',\n 'CALL',\n 'CASE',\n 'CAST',\n 'CLUSTER',\n 'COLLATE',\n 'COLLECTION',\n 'COMMIT',\n 'COMMITTED',\n 'CONNECT',\n 'CONTINUE',\n 'CORRELATED',\n 'COVER',\n 'CREATE',\n 'CURRENT',\n 'DATABASE',\n 'DATASET',\n 'DATASTORE',\n 'DECLARE',\n 'DECREMENT',\n 'DELETE',\n 'DERIVED',\n 'DESC',\n 'DESCRIBE',\n 'DISTINCT',\n 'DO',\n 'DROP',\n 'EACH',\n 'ELEMENT',\n 'ELSE',\n 'END',\n 'EVERY',\n 'EXCEPT',\n 'EXCLUDE',\n 'EXECUTE',\n 'EXISTS',\n 'EXPLAIN',\n 'FALSE',\n 'FETCH',\n 'FILTER',\n 'FIRST',\n 'FLATTEN',\n 'FLUSH',\n 'FOLLOWING',\n 'FOR',\n 'FORCE',\n 'FROM',\n 'FTS',\n 'FUNCTION',\n 'GOLANG',\n 'GRANT',\n 'GROUP',\n 'GROUPS',\n 'GSI',\n 'HASH',\n 'HAVING',\n 'IF',\n 'ISOLATION',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INCLUDE',\n 'INCREMENT',\n 'INDEX',\n 'INFER',\n 'INLINE',\n 'INNER',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'JAVASCRIPT',\n 'JOIN',\n 'KEY',\n 'KEYS',\n 'KEYSPACE',\n 'KNOWN',\n 'LANGUAGE',\n 'LAST',\n 'LEFT',\n 'LET',\n 'LETTING',\n 'LEVEL',\n 'LIKE',\n 'LIMIT',\n 'LSM',\n 'MAP',\n 'MAPPING',\n 'MATCHED',\n 'MATERIALIZED',\n 'MERGE',\n 'MINUS',\n 'MISSING',\n 'NAMESPACE',\n 'NEST',\n 'NL',\n 'NO',\n 'NOT',\n 'NTH_VALUE',\n 'NULL',\n 'NULLS',\n 'NUMBER',\n 'OBJECT',\n 'OFFSET',\n 'ON',\n 'OPTION',\n 'OPTIONS',\n 'OR',\n 'ORDER',\n 'OTHERS',\n 'OUTER',\n 'OVER',\n 'PARSE',\n 'PARTITION',\n 'PASSWORD',\n 'PATH',\n 'POOL',\n 'PRECEDING',\n 'PREPARE',\n 'PRIMARY',\n 'PRIVATE',\n 'PRIVILEGE',\n 'PROBE',\n 'PROCEDURE',\n 'PUBLIC',\n 'RANGE',\n 'RAW',\n 'REALM',\n 'REDUCE',\n 'RENAME',\n 'RESPECT',\n 'RETURN',\n 'RETURNING',\n 'REVOKE',\n 'RIGHT',\n 'ROLE',\n 'ROLLBACK',\n 'ROW',\n 'ROWS',\n 'SATISFIES',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCOPE',\n 'SELECT',\n 'SELF',\n 'SEMI',\n 'SET',\n 'SHOW',\n 'SOME',\n 'START',\n 'STATISTICS',\n 'STRING',\n 'SYSTEM',\n 'THEN',\n 'TIES',\n 'TO',\n 'TRAN',\n 'TRANSACTION',\n 'TRIGGER',\n 'TRUE',\n 'TRUNCATE',\n 'UNBOUNDED',\n 'UNDER',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNNEST',\n 'UNSET',\n 'UPDATE',\n 'UPSERT',\n 'USE',\n 'USER',\n 'USING',\n 'VALIDATE',\n 'VALUE',\n 'VALUED',\n 'VALUES',\n 'VIA',\n 'VIEW',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WITHIN',\n 'WORK',\n 'XOR',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './n1ql.functions.js';\nimport { keywords } from './n1ql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE INTO',\n 'WHEN [NOT] MATCHED THEN',\n 'UPDATE SET',\n 'INSERT',\n // other\n 'NEST',\n 'UNNEST',\n 'RETURNING',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - set schema:\n 'SET SCHEMA',\n // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html\n 'ADVISE',\n 'ALTER INDEX',\n 'BEGIN TRANSACTION',\n 'BUILD INDEX',\n 'COMMIT TRANSACTION',\n 'CREATE COLLECTION',\n 'CREATE FUNCTION',\n 'CREATE INDEX',\n 'CREATE PRIMARY INDEX',\n 'CREATE SCOPE',\n 'DROP COLLECTION',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP PRIMARY INDEX',\n 'DROP SCOPE',\n 'EXECUTE',\n 'EXECUTE FUNCTION',\n 'EXPLAIN',\n 'GRANT',\n 'INFER',\n 'PREPARE',\n 'REVOKE',\n 'ROLLBACK TRANSACTION',\n 'SAVEPOINT',\n 'SET TRANSACTION',\n 'UPDATE STATISTICS',\n 'UPSERT',\n // other\n 'LET',\n 'SET CURRENT SCHEMA',\n 'SHOW',\n 'USE [PRIMARY] KEYS',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT [ALL]', 'INTERSECT [ALL]']);\n\nconst reservedJoins = expandPhrases(['JOIN', '{LEFT | RIGHT} [OUTER] JOIN', 'INNER JOIN']);\n\nconst reservedPhrases = expandPhrases(['{ROWS | RANGE | GROUPS} BETWEEN']);\n\n// For reference: http://docs.couchbase.com.s3-website-us-west-1.amazonaws.com/server/6.0/n1ql/n1ql-language-reference/index.html\nexport const n1ql: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n // NOTE: single quotes are actually not supported in N1QL,\n // but we support them anyway as all other SQL dialects do,\n // which simplifies writing tests that are shared between all dialects.\n stringTypes: ['\"\"-bs', \"''-bs\"],\n identTypes: ['``'],\n extraParens: ['[]', '{}'],\n paramTypes: { positional: true, numbered: ['$'], named: ['$'] },\n lineCommentTypes: ['#', '--'],\n operators: ['%', '==', ':', '||'],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/reservewords.htm\n all: [\n // 'A',\n 'ADD',\n 'AGENT',\n 'AGGREGATE',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'ARROW',\n 'AS',\n 'ASC',\n 'AT',\n 'ATTRIBUTE',\n 'AUTHID',\n 'AVG',\n 'BEGIN',\n 'BETWEEN',\n 'BFILE_BASE',\n 'BINARY',\n 'BLOB_BASE',\n 'BLOCK',\n 'BODY',\n 'BOTH',\n 'BOUND',\n 'BULK',\n 'BY',\n 'BYTE',\n // 'C',\n 'CALL',\n 'CALLING',\n 'CASCADE',\n 'CASE',\n 'CHAR',\n 'CHAR_BASE',\n 'CHARACTER',\n 'CHARSET',\n 'CHARSETFORM',\n 'CHARSETID',\n 'CHECK',\n 'CLOB_BASE',\n 'CLOSE',\n 'CLUSTER',\n 'CLUSTERS',\n 'COLAUTH',\n 'COLLECT',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'COMMITTED',\n 'COMPILED',\n 'COMPRESS',\n 'CONNECT',\n 'CONSTANT',\n 'CONSTRUCTOR',\n 'CONTEXT',\n 'CONVERT',\n 'COUNT',\n 'CRASH',\n 'CREATE',\n 'CURRENT',\n 'CURSOR',\n 'CUSTOMDATUM',\n 'DANGLING',\n 'DATA',\n 'DATE',\n 'DATE_BASE',\n 'DAY',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DEFINE',\n 'DELETE',\n 'DESC',\n 'DETERMINISTIC',\n 'DISTINCT',\n 'DOUBLE',\n 'DROP',\n 'DURATION',\n 'ELEMENT',\n 'ELSE',\n 'ELSIF',\n 'EMPTY',\n 'END',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCEPTION',\n 'EXCEPTIONS',\n 'EXCLUSIVE',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXTERNAL',\n 'FETCH',\n 'FINAL',\n 'FIXED',\n 'FLOAT',\n 'FOR',\n 'FORALL',\n 'FORCE',\n 'FORM',\n 'FROM',\n 'FUNCTION',\n 'GENERAL',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'HASH',\n 'HAVING',\n 'HEAP',\n 'HIDDEN',\n 'HOUR',\n 'IDENTIFIED',\n 'IF',\n 'IMMEDIATE',\n 'IN',\n 'INCLUDING',\n 'INDEX',\n 'INDEXES',\n 'INDICATOR',\n 'INDICES',\n 'INFINITE',\n 'INSERT',\n 'INSTANTIABLE',\n 'INT',\n 'INTERFACE',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'INVALIDATE',\n 'IS',\n 'ISOLATION',\n 'JAVA',\n 'LANGUAGE',\n 'LARGE',\n 'LEADING',\n 'LENGTH',\n 'LEVEL',\n 'LIBRARY',\n 'LIKE',\n 'LIKE2',\n 'LIKE4',\n 'LIKEC',\n 'LIMIT',\n 'LIMITED',\n 'LOCAL',\n 'LOCK',\n 'LONG',\n 'LOOP',\n 'MAP',\n 'MAX',\n 'MAXLEN',\n 'MEMBER',\n 'MERGE',\n 'MIN',\n 'MINUS',\n 'MINUTE',\n 'MOD',\n 'MODE',\n 'MODIFY',\n 'MONTH',\n 'MULTISET',\n 'NAME',\n 'NAN',\n 'NATIONAL',\n 'NATIVE',\n 'NCHAR',\n 'NEW',\n 'NOCOMPRESS',\n 'NOCOPY',\n 'NOT',\n 'NOWAIT',\n 'NULL',\n 'NUMBER_BASE',\n 'OBJECT',\n 'OCICOLL',\n 'OCIDATE',\n 'OCIDATETIME',\n 'OCIDURATION',\n 'OCIINTERVAL',\n 'OCILOBLOCATOR',\n 'OCINUMBER',\n 'OCIRAW',\n 'OCIREF',\n 'OCIREFCURSOR',\n 'OCIROWID',\n 'OCISTRING',\n 'OCITYPE',\n 'OF',\n 'ON',\n 'ONLY',\n 'OPAQUE',\n 'OPEN',\n 'OPERATOR',\n 'OPTION',\n 'OR',\n 'ORACLE',\n 'ORADATA',\n 'ORDER',\n 'OVERLAPS',\n 'ORGANIZATION',\n 'ORLANY',\n 'ORLVARY',\n 'OTHERS',\n 'OUT',\n 'OVERRIDING',\n 'PACKAGE',\n 'PARALLEL_ENABLE',\n 'PARAMETER',\n 'PARAMETERS',\n 'PARTITION',\n 'PASCAL',\n 'PIPE',\n 'PIPELINED',\n 'PRAGMA',\n 'PRECISION',\n 'PRIOR',\n 'PRIVATE',\n 'PROCEDURE',\n 'PUBLIC',\n 'RAISE',\n 'RANGE',\n 'RAW',\n 'READ',\n 'RECORD',\n 'REF',\n 'REFERENCE',\n 'REM',\n 'REMAINDER',\n 'RENAME',\n 'RESOURCE',\n 'RESULT',\n 'RETURN',\n 'RETURNING',\n 'REVERSE',\n 'REVOKE',\n 'ROLLBACK',\n 'ROW',\n 'SAMPLE',\n 'SAVE',\n 'SAVEPOINT',\n 'SB1',\n 'SB2',\n 'SB4',\n 'SECOND',\n 'SEGMENT',\n 'SELECT',\n 'SELF',\n 'SEPARATE',\n 'SEQUENCE',\n 'SERIALIZABLE',\n 'SET',\n 'SHARE',\n 'SHORT',\n 'SIZE',\n 'SIZE_T',\n 'SOME',\n 'SPARSE',\n 'SQL',\n 'SQLCODE',\n 'SQLDATA',\n 'SQLNAME',\n 'SQLSTATE',\n 'STANDARD',\n 'START',\n 'STATIC',\n 'STDDEV',\n 'STORED',\n 'STRING',\n 'STRUCT',\n 'STYLE',\n 'SUBMULTISET',\n 'SUBPARTITION',\n 'SUBSTITUTABLE',\n 'SUBTYPE',\n 'SUM',\n 'SYNONYM',\n 'TABAUTH',\n 'TABLE',\n 'TDO',\n 'THE',\n 'THEN',\n 'TIME',\n 'TIMESTAMP',\n 'TIMEZONE_ABBR',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TIMEZONE_REGION',\n 'TO',\n 'TRAILING',\n 'TRANSAC',\n 'TRANSACTIONAL',\n 'TRUSTED',\n 'TYPE',\n 'UB1',\n 'UB2',\n 'UB4',\n 'UNDER',\n 'UNION',\n 'UNIQUE',\n 'UNSIGNED',\n 'UNTRUSTED',\n 'UPDATE',\n 'USE',\n 'USING',\n 'VALIST',\n 'VALUE',\n 'VALUES',\n 'VARIABLE',\n 'VARIANCE',\n 'VARRAY',\n 'VARYING',\n 'VIEW',\n 'VIEWS',\n 'VOID',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WITH',\n 'WORK',\n 'WRAPPED',\n 'WRITE',\n 'YEAR',\n 'ZONE',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm\n numeric: [\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'BITAND',\n 'CEIL',\n 'COS',\n 'COSH',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'MOD',\n 'NANVL',\n 'POWER',\n 'REMAINDER',\n 'ROUND',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TANH',\n 'TRUNC',\n 'WIDTH_BUCKET',\n ],\n character: [\n 'CHR',\n 'CONCAT',\n 'INITCAP',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'NLS_INITCAP',\n 'NLS_LOWER',\n 'NLSSORT',\n 'NLS_UPPER',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPLACE',\n 'RPAD',\n 'RTRIM',\n 'SOUNDEX',\n 'SUBSTR',\n 'TRANSLATE',\n 'TREAT',\n 'TRIM',\n 'UPPER',\n\n 'NLS_CHARSET_DECL_LEN',\n 'NLS_CHARSET_ID',\n 'NLS_CHARSET_NAME',\n\n 'ASCII',\n 'INSTR',\n 'LENGTH',\n 'REGEXP_INSTR',\n ],\n datetime: [\n 'ADD_MONTHS',\n 'CURRENT_DATE',\n 'CURRENT_TIMESTAMP',\n 'DBTIMEZONE',\n 'EXTRACT',\n 'FROM_TZ',\n 'LAST_DAY',\n 'LOCALTIMESTAMP',\n 'MONTHS_BETWEEN',\n 'NEW_TIME',\n 'NEXT_DAY',\n 'NUMTODSINTERVAL',\n 'NUMTOYMINTERVAL',\n 'ROUND',\n 'SESSIONTIMEZONE',\n 'SYS_EXTRACT_UTC',\n 'SYSDATE',\n 'SYSTIMESTAMP',\n 'TO_CHAR',\n 'TO_TIMESTAMP',\n 'TO_TIMESTAMP_TZ',\n 'TO_DSINTERVAL',\n 'TO_YMINTERVAL',\n 'TRUNC',\n 'TZ_OFFSET',\n ],\n comparison: ['GREATEST', 'LEAST'],\n conversion: [\n 'ASCIISTR',\n 'BIN_TO_NUM',\n 'CAST',\n 'CHARTOROWID',\n 'COMPOSE',\n 'CONVERT',\n 'DECOMPOSE',\n 'HEXTORAW',\n 'NUMTODSINTERVAL',\n 'NUMTOYMINTERVAL',\n 'RAWTOHEX',\n 'RAWTONHEX',\n 'ROWIDTOCHAR',\n 'ROWIDTONCHAR',\n 'SCN_TO_TIMESTAMP',\n 'TIMESTAMP_TO_SCN',\n 'TO_BINARY_DOUBLE',\n 'TO_BINARY_FLOAT',\n 'TO_CHAR',\n 'TO_CLOB',\n 'TO_DATE',\n 'TO_DSINTERVAL',\n 'TO_LOB',\n 'TO_MULTI_BYTE',\n 'TO_NCHAR',\n 'TO_NCLOB',\n 'TO_NUMBER',\n 'TO_DSINTERVAL',\n 'TO_SINGLE_BYTE',\n 'TO_TIMESTAMP',\n 'TO_TIMESTAMP_TZ',\n 'TO_YMINTERVAL',\n 'TO_YMINTERVAL',\n 'TRANSLATE',\n 'UNISTR',\n ],\n largeObject: ['BFILENAME', 'EMPTY_BLOB,', 'EMPTY_CLOB'],\n collection: ['CARDINALITY', 'COLLECT', 'POWERMULTISET', 'POWERMULTISET_BY_CARDINALITY', 'SET'],\n hierarchical: ['SYS_CONNECT_BY_PATH'],\n dataMining: [\n 'CLUSTER_ID',\n 'CLUSTER_PROBABILITY',\n 'CLUSTER_SET',\n 'FEATURE_ID',\n 'FEATURE_SET',\n 'FEATURE_VALUE',\n 'PREDICTION',\n 'PREDICTION_COST',\n 'PREDICTION_DETAILS',\n 'PREDICTION_PROBABILITY',\n 'PREDICTION_SET',\n ],\n xml: [\n 'APPENDCHILDXML',\n 'DELETEXML',\n 'DEPTH',\n 'EXTRACT',\n 'EXISTSNODE',\n 'EXTRACTVALUE',\n 'INSERTCHILDXML',\n 'INSERTXMLBEFORE',\n 'PATH',\n 'SYS_DBURIGEN',\n 'SYS_XMLAGG',\n 'SYS_XMLGEN',\n 'UPDATEXML',\n 'XMLAGG',\n 'XMLCDATA',\n 'XMLCOLATTVAL',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLFOREST',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLQUERY',\n 'XMLROOT',\n 'XMLSEQUENCE',\n 'XMLSERIALIZE',\n 'XMLTABLE',\n 'XMLTRANSFORM',\n ],\n encoding: ['DECODE', 'DUMP', 'ORA_HASH', 'VSIZE'],\n nullRelated: ['COALESCE', 'LNNVL', 'NULLIF', 'NVL', 'NVL2'],\n env: ['SYS_CONTEXT', 'SYS_GUID', 'SYS_TYPEID', 'UID', 'USER', 'USERENV'],\n aggregate: [\n 'AVG',\n 'COLLECT',\n 'CORR',\n 'CORR_S',\n 'CORR_K',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST',\n 'GROUP_ID',\n 'GROUPING',\n 'GROUPING_ID',\n 'LAST',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'RANK',\n 'REGR_SLOPE',\n 'REGR_INTERCEPT',\n 'REGR_COUNT',\n 'REGR_R2',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_SXX',\n 'REGR_SYY',\n 'REGR_SXY',\n 'STATS_BINOMIAL_TEST',\n 'STATS_CROSSTAB',\n 'STATS_F_TEST',\n 'STATS_KS_TEST',\n 'STATS_MODE',\n 'STATS_MW_TEST',\n 'STATS_ONE_WAY_ANOVA',\n 'STATS_T_TEST_ONE',\n 'STATS_T_TEST_PAIRED',\n 'STATS_T_TEST_INDEP',\n 'STATS_T_TEST_INDEPU',\n 'STATS_WSR_TEST',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n ],\n // Windowing functions (minus the ones already listed in aggregates)\n window: ['FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTILE', 'RATIO_TO_REPORT', 'ROW_NUMBER'],\n objectReference: ['DEREF', 'MAKE_REF', 'REF', 'REFTOHEX', 'VALUE'],\n model: ['CV', 'ITERATION_NUMBER', 'PRESENTNNV', 'PRESENTV', 'PREVIOUS'],\n // Parameterized data types\n // https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Data-Types.html\n dataTypes: [\n // Oracle builtin data types\n 'VARCHAR2',\n 'NVARCHAR2',\n 'NUMBER',\n 'FLOAT',\n 'TIMESTAMP',\n 'INTERVAL YEAR',\n 'INTERVAL DAY',\n 'RAW',\n 'UROWID',\n 'NCHAR',\n // ANSI Data Types\n 'CHARACTER',\n 'CHAR',\n 'CHARACTER VARYING',\n 'CHAR VARYING',\n 'NATIONAL CHARACTER',\n 'NATIONAL CHAR',\n 'NATIONAL CHARACTER VARYING',\n 'NATIONAL CHAR VARYING',\n 'NCHAR VARYING',\n 'NUMERIC',\n 'DECIMAL',\n 'FLOAT',\n // SQL/DS and DB2 Data Types\n 'VARCHAR',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isReserved, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { keywords } from './plsql.keywords.js';\nimport { functions } from './plsql.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | UNIQUE]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER [SIBLINGS] BY',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n 'FOR UPDATE [OF]',\n // Data manipulation\n // - insert:\n 'INSERT [INTO | ALL INTO]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE [INTO]',\n 'WHEN [NOT] MATCHED [THEN]',\n 'UPDATE SET',\n // Data definition\n 'CREATE [OR REPLACE] [NO FORCE | FORCE] [EDITIONING | EDITIONABLE | EDITIONABLE EDITIONING | NONEDITIONABLE] VIEW',\n 'CREATE MATERIALIZED VIEW',\n 'CREATE [GLOBAL TEMPORARY | PRIVATE TEMPORARY | SHARDED | DUPLICATED | IMMUTABLE BLOCKCHAIN | BLOCKCHAIN | IMMUTABLE] TABLE',\n // other\n 'RETURNING',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE [ONLY]',\n // - delete:\n 'DELETE FROM [ONLY]',\n // - drop table:\n 'DROP TABLE',\n // - alter table:\n 'ALTER TABLE',\n 'ADD',\n 'DROP {COLUMN | UNUSED COLUMNS | COLUMNS CONTINUE}',\n 'MODIFY',\n 'RENAME TO',\n 'RENAME COLUMN',\n // - truncate:\n 'TRUNCATE TABLE',\n // other\n 'SET SCHEMA',\n 'BEGIN',\n 'CONNECT BY',\n 'DECLARE',\n 'EXCEPT',\n 'EXCEPTION',\n 'LOOP',\n 'START WITH',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n // non-standard joins\n '{CROSS | OUTER} APPLY',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL]',\n 'ON COMMIT',\n '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const plsql: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['N'] },\n { quote: \"q''\", prefixes: ['N'] },\n ],\n // PL/SQL doesn't actually support escaping of quotes in identifiers,\n // but for the sake of simpler testing we'll support this anyway\n // as all other SQL dialects with \"identifiers\" do.\n identTypes: [`\"\"-qq`],\n identChars: { rest: '$#' },\n variableTypes: [{ regex: '&{1,2}[A-Za-z][A-Za-z0-9_$#]*' }],\n paramTypes: { numbered: [':'], named: [':'] },\n paramChars: {}, // Empty object used on purpose to not allow $ and # chars as specified in identChars\n operators: [\n '**',\n ':=',\n '%',\n '~=',\n '^=',\n // '..', // Conflicts with float followed by dot (so \"2..3\" gets parsed as [\"2.\", \".\", \"3\"])\n '>>',\n '<<',\n '=>',\n '@',\n '||',\n ],\n postProcess,\n },\n formatOptions: {\n alwaysDenseOperators: ['@'],\n onelineClauses,\n },\n};\n\nfunction postProcess(tokens: Token[]) {\n let previousReservedToken: Token = EOF_TOKEN;\n\n return tokens.map(token => {\n // BY [SET]\n if (isToken.SET(token) && isToken.BY(previousReservedToken)) {\n return { ...token, type: TokenType.RESERVED_KEYWORD };\n }\n\n if (isReserved(token.type)) {\n previousReservedToken = token;\n }\n\n return token;\n });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://www.postgresql.org/docs/14/functions.html\n //\n // https://www.postgresql.org/docs/14/functions-math.html\n math: [\n 'ABS',\n 'ACOS',\n 'ACOSD',\n 'ACOSH',\n 'ASIN',\n 'ASIND',\n 'ASINH',\n 'ATAN',\n 'ATAN2',\n 'ATAN2D',\n 'ATAND',\n 'ATANH',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'COS',\n 'COSD',\n 'COSH',\n 'COT',\n 'COTD',\n 'DEGREES',\n 'DIV',\n 'EXP',\n 'FACTORIAL',\n 'FLOOR',\n 'GCD',\n 'LCM',\n 'LN',\n 'LOG',\n 'LOG10',\n 'MIN_SCALE',\n 'MOD',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RANDOM',\n 'ROUND',\n 'SCALE',\n 'SETSEED',\n 'SIGN',\n 'SIN',\n 'SIND',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TAND',\n 'TANH',\n 'TRIM_SCALE',\n 'TRUNC',\n 'WIDTH_BUCKET',\n ],\n // https://www.postgresql.org/docs/14/functions-string.html\n string: [\n 'ABS',\n 'ASCII',\n 'BIT_LENGTH',\n 'BTRIM',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHR',\n 'CONCAT',\n 'CONCAT_WS',\n 'FORMAT',\n 'INITCAP',\n 'LEFT',\n 'LENGTH',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MD5',\n 'NORMALIZE',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'PARSE_IDENT',\n 'PG_CLIENT_ENCODING',\n 'POSITION',\n 'QUOTE_IDENT',\n 'QUOTE_LITERAL',\n 'QUOTE_NULLABLE',\n 'REGEXP_MATCH',\n 'REGEXP_MATCHES',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT_TO_ARRAY',\n 'REGEXP_SPLIT_TO_TABLE',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RPAD',\n 'RTRIM',\n 'SPLIT_PART',\n 'SPRINTF',\n 'STARTS_WITH',\n 'STRING_AGG',\n 'STRING_TO_ARRAY',\n 'STRING_TO_TABLE',\n 'STRPOS',\n 'SUBSTR',\n 'SUBSTRING',\n 'TO_ASCII',\n 'TO_HEX',\n 'TRANSLATE',\n 'TRIM',\n 'UNISTR',\n 'UPPER',\n ],\n // https://www.postgresql.org/docs/14/functions-binarystring.html\n binary: [\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'BTRIM',\n 'CONVERT',\n 'CONVERT_FROM',\n 'CONVERT_TO',\n 'DECODE',\n 'ENCODE',\n 'GET_BIT',\n 'GET_BYTE',\n 'LENGTH',\n 'LTRIM',\n 'MD5',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'POSITION',\n 'RTRIM',\n 'SET_BIT',\n 'SET_BYTE',\n 'SHA224',\n 'SHA256',\n 'SHA384',\n 'SHA512',\n 'STRING_AGG',\n 'SUBSTR',\n 'SUBSTRING',\n 'TRIM',\n ],\n // https://www.postgresql.org/docs/14/functions-bitstring.html\n bitstring: [\n 'BIT_COUNT',\n 'BIT_LENGTH',\n 'GET_BIT',\n 'LENGTH',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'POSITION',\n 'SET_BIT',\n 'SUBSTRING',\n ],\n // https://www.postgresql.org/docs/14/functions-matching.html\n pattern: [\n 'REGEXP_MATCH',\n 'REGEXP_MATCHES',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT_TO_ARRAY',\n 'REGEXP_SPLIT_TO_TABLE',\n ],\n // https://www.postgresql.org/docs/14/functions-formatting.html\n datatype: ['TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TO_TIMESTAMP'],\n // https://www.postgresql.org/docs/14/functions-datetime.html\n datetime: [\n // 'AGE',\n 'CLOCK_TIMESTAMP',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATE_BIN',\n 'DATE_PART',\n 'DATE_TRUNC',\n 'EXTRACT',\n 'ISFINITE',\n 'JUSTIFY_DAYS',\n 'JUSTIFY_HOURS',\n 'JUSTIFY_INTERVAL',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'MAKE_DATE',\n 'MAKE_INTERVAL',\n 'MAKE_TIME',\n 'MAKE_TIMESTAMP',\n 'MAKE_TIMESTAMPTZ',\n 'NOW',\n 'PG_SLEEP',\n 'PG_SLEEP_FOR',\n 'PG_SLEEP_UNTIL',\n 'STATEMENT_TIMESTAMP',\n 'TIMEOFDAY',\n 'TO_TIMESTAMP',\n 'TRANSACTION_TIMESTAMP',\n ],\n // https://www.postgresql.org/docs/14/functions-enum.html\n enum: ['ENUM_FIRST', 'ENUM_LAST', 'ENUM_RANGE'],\n // https://www.postgresql.org/docs/14/functions-geometry.html\n geometry: [\n 'AREA',\n 'BOUND_BOX',\n 'BOX',\n 'CENTER',\n 'CIRCLE',\n 'DIAGONAL',\n 'DIAMETER',\n 'HEIGHT',\n 'ISCLOSED',\n 'ISOPEN',\n 'LENGTH',\n 'LINE',\n 'LSEG',\n 'NPOINTS',\n 'PATH',\n 'PCLOSE',\n 'POINT',\n 'POLYGON',\n 'POPEN',\n 'RADIUS',\n 'SLOPE',\n 'WIDTH',\n ],\n // https://www.postgresql.org/docs/14/functions-net.html\n network: [\n 'ABBREV',\n 'BROADCAST',\n 'FAMILY',\n 'HOST',\n 'HOSTMASK',\n 'INET_MERGE',\n 'INET_SAME_FAMILY',\n 'MACADDR8_SET7BIT',\n 'MASKLEN',\n 'NETMASK',\n 'NETWORK',\n 'SET_MASKLEN',\n 'TEXT',\n 'TRUNC',\n ],\n // https://www.postgresql.org/docs/14/functions-textsearch.html\n textsearch: [\n 'ARRAY_TO_TSVECTOR',\n 'GET_CURRENT_TS_CONFIG',\n 'JSONB_TO_TSVECTOR',\n 'JSON_TO_TSVECTOR',\n 'LENGTH',\n 'NUMNODE',\n 'PHRASETO_TSQUERY',\n 'PLAINTO_TSQUERY',\n 'QUERYTREE',\n 'SETWEIGHT',\n 'STRIP',\n 'TO_TSQUERY',\n 'TO_TSVECTOR',\n 'TSQUERY_PHRASE',\n 'TSVECTOR_TO_ARRAY',\n 'TS_DEBUG',\n 'TS_DELETE',\n 'TS_FILTER',\n 'TS_HEADLINE',\n 'TS_LEXIZE',\n 'TS_PARSE',\n 'TS_RANK',\n 'TS_RANK_CD',\n 'TS_REWRITE',\n 'TS_STAT',\n 'TS_TOKEN_TYPE',\n 'WEBSEARCH_TO_TSQUERY',\n ],\n // https://www.postgresql.org/docs/14/functions-uuid.html\n uuid: ['UUID'],\n // https://www.postgresql.org/docs/14/functions-xml.html\n xml: [\n 'CURSOR_TO_XML',\n 'CURSOR_TO_XMLSCHEMA',\n 'DATABASE_TO_XML',\n 'DATABASE_TO_XMLSCHEMA',\n 'DATABASE_TO_XML_AND_XMLSCHEMA',\n 'NEXTVAL',\n 'QUERY_TO_XML',\n 'QUERY_TO_XMLSCHEMA',\n 'QUERY_TO_XML_AND_XMLSCHEMA',\n 'SCHEMA_TO_XML',\n 'SCHEMA_TO_XMLSCHEMA',\n 'SCHEMA_TO_XML_AND_XMLSCHEMA',\n 'STRING',\n 'TABLE_TO_XML',\n 'TABLE_TO_XMLSCHEMA',\n 'TABLE_TO_XML_AND_XMLSCHEMA',\n 'XMLAGG',\n 'XMLCOMMENT',\n 'XMLCONCAT',\n 'XMLELEMENT',\n 'XMLEXISTS',\n 'XMLFOREST',\n 'XMLPARSE',\n 'XMLPI',\n 'XMLROOT',\n 'XMLSERIALIZE',\n 'XMLTABLE',\n 'XML_IS_WELL_FORMED',\n 'XML_IS_WELL_FORMED_CONTENT',\n 'XML_IS_WELL_FORMED_DOCUMENT',\n 'XPATH',\n 'XPATH_EXISTS',\n ],\n // https://www.postgresql.org/docs/14/functions-json.html\n json: [\n 'ARRAY_TO_JSON',\n 'JSONB_AGG',\n 'JSONB_ARRAY_ELEMENTS',\n 'JSONB_ARRAY_ELEMENTS_TEXT',\n 'JSONB_ARRAY_LENGTH',\n 'JSONB_BUILD_ARRAY',\n 'JSONB_BUILD_OBJECT',\n 'JSONB_EACH',\n 'JSONB_EACH_TEXT',\n 'JSONB_EXTRACT_PATH',\n 'JSONB_EXTRACT_PATH_TEXT',\n 'JSONB_INSERT',\n 'JSONB_OBJECT',\n 'JSONB_OBJECT_AGG',\n 'JSONB_OBJECT_KEYS',\n 'JSONB_PATH_EXISTS',\n 'JSONB_PATH_EXISTS_TZ',\n 'JSONB_PATH_MATCH',\n 'JSONB_PATH_MATCH_TZ',\n 'JSONB_PATH_QUERY',\n 'JSONB_PATH_QUERY_ARRAY',\n 'JSONB_PATH_QUERY_ARRAY_TZ',\n 'JSONB_PATH_QUERY_FIRST',\n 'JSONB_PATH_QUERY_FIRST_TZ',\n 'JSONB_PATH_QUERY_TZ',\n 'JSONB_POPULATE_RECORD',\n 'JSONB_POPULATE_RECORDSET',\n 'JSONB_PRETTY',\n 'JSONB_SET',\n 'JSONB_SET_LAX',\n 'JSONB_STRIP_NULLS',\n 'JSONB_TO_RECORD',\n 'JSONB_TO_RECORDSET',\n 'JSONB_TYPEOF',\n 'JSON_AGG',\n 'JSON_ARRAY_ELEMENTS',\n 'JSON_ARRAY_ELEMENTS_TEXT',\n 'JSON_ARRAY_LENGTH',\n 'JSON_BUILD_ARRAY',\n 'JSON_BUILD_OBJECT',\n 'JSON_EACH',\n 'JSON_EACH_TEXT',\n 'JSON_EXTRACT_PATH',\n 'JSON_EXTRACT_PATH_TEXT',\n 'JSON_OBJECT',\n 'JSON_OBJECT_AGG',\n 'JSON_OBJECT_KEYS',\n 'JSON_POPULATE_RECORD',\n 'JSON_POPULATE_RECORDSET',\n 'JSON_STRIP_NULLS',\n 'JSON_TO_RECORD',\n 'JSON_TO_RECORDSET',\n 'JSON_TYPEOF',\n 'ROW_TO_JSON',\n 'TO_JSON',\n 'TO_JSONB',\n 'TO_TIMESTAMP',\n ],\n // https://www.postgresql.org/docs/14/functions-sequence.html\n sequence: ['CURRVAL', 'LASTVAL', 'NEXTVAL', 'SETVAL'],\n // https://www.postgresql.org/docs/14/functions-conditional.html\n conditional: [\n // 'CASE',\n 'COALESCE',\n 'GREATEST',\n 'LEAST',\n 'NULLIF',\n ],\n // https://www.postgresql.org/docs/14/functions-array.html\n array: [\n 'ARRAY_AGG',\n 'ARRAY_APPEND',\n 'ARRAY_CAT',\n 'ARRAY_DIMS',\n 'ARRAY_FILL',\n 'ARRAY_LENGTH',\n 'ARRAY_LOWER',\n 'ARRAY_NDIMS',\n 'ARRAY_POSITION',\n 'ARRAY_POSITIONS',\n 'ARRAY_PREPEND',\n 'ARRAY_REMOVE',\n 'ARRAY_REPLACE',\n 'ARRAY_TO_STRING',\n 'ARRAY_UPPER',\n 'CARDINALITY',\n 'STRING_TO_ARRAY',\n 'TRIM_ARRAY',\n 'UNNEST',\n ],\n // https://www.postgresql.org/docs/14/functions-range.html\n range: [\n 'ISEMPTY',\n 'LOWER',\n 'LOWER_INC',\n 'LOWER_INF',\n 'MULTIRANGE',\n 'RANGE_MERGE',\n 'UPPER',\n 'UPPER_INC',\n 'UPPER_INF',\n ],\n // https://www.postgresql.org/docs/14/functions-aggregate.html\n aggregate: [\n // 'ANY',\n 'ARRAY_AGG',\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'BOOL_AND',\n 'BOOL_OR',\n 'COALESCE',\n 'CORR',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'EVERY',\n 'GROUPING',\n 'JSONB_AGG',\n 'JSONB_OBJECT_AGG',\n 'JSON_AGG',\n 'JSON_OBJECT_AGG',\n 'MAX',\n 'MIN',\n 'MODE',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'RANGE_AGG',\n 'RANGE_INTERSECT_AGG',\n 'RANK',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n // 'SOME',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRING_AGG',\n 'SUM',\n 'TO_JSON',\n 'TO_JSONB',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'XMLAGG',\n ],\n // https://www.postgresql.org/docs/14/functions-window.html\n window: [\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'RANK',\n 'ROW_NUMBER',\n ],\n // https://www.postgresql.org/docs/14/functions-srf.html\n set: ['GENERATE_SERIES', 'GENERATE_SUBSCRIPTS'],\n // https://www.postgresql.org/docs/14/functions-info.html\n sysInfo: [\n 'ACLDEFAULT',\n 'ACLEXPLODE',\n 'COL_DESCRIPTION',\n 'CURRENT_CATALOG',\n 'CURRENT_DATABASE',\n 'CURRENT_QUERY',\n 'CURRENT_ROLE',\n 'CURRENT_SCHEMA',\n 'CURRENT_SCHEMAS',\n 'CURRENT_USER',\n 'FORMAT_TYPE',\n 'HAS_ANY_COLUMN_PRIVILEGE',\n 'HAS_COLUMN_PRIVILEGE',\n 'HAS_DATABASE_PRIVILEGE',\n 'HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE',\n 'HAS_FUNCTION_PRIVILEGE',\n 'HAS_LANGUAGE_PRIVILEGE',\n 'HAS_SCHEMA_PRIVILEGE',\n 'HAS_SEQUENCE_PRIVILEGE',\n 'HAS_SERVER_PRIVILEGE',\n 'HAS_TABLESPACE_PRIVILEGE',\n 'HAS_TABLE_PRIVILEGE',\n 'HAS_TYPE_PRIVILEGE',\n 'INET_CLIENT_ADDR',\n 'INET_CLIENT_PORT',\n 'INET_SERVER_ADDR',\n 'INET_SERVER_PORT',\n 'MAKEACLITEM',\n 'OBJ_DESCRIPTION',\n 'PG_BACKEND_PID',\n 'PG_BLOCKING_PIDS',\n 'PG_COLLATION_IS_VISIBLE',\n 'PG_CONF_LOAD_TIME',\n 'PG_CONTROL_CHECKPOINT',\n 'PG_CONTROL_INIT',\n 'PG_CONTROL_SYSTEM',\n 'PG_CONVERSION_IS_VISIBLE',\n 'PG_CURRENT_LOGFILE',\n 'PG_CURRENT_SNAPSHOT',\n 'PG_CURRENT_XACT_ID',\n 'PG_CURRENT_XACT_ID_IF_ASSIGNED',\n 'PG_DESCRIBE_OBJECT',\n 'PG_FUNCTION_IS_VISIBLE',\n 'PG_GET_CATALOG_FOREIGN_KEYS',\n 'PG_GET_CONSTRAINTDEF',\n 'PG_GET_EXPR',\n 'PG_GET_FUNCTIONDEF',\n 'PG_GET_FUNCTION_ARGUMENTS',\n 'PG_GET_FUNCTION_IDENTITY_ARGUMENTS',\n 'PG_GET_FUNCTION_RESULT',\n 'PG_GET_INDEXDEF',\n 'PG_GET_KEYWORDS',\n 'PG_GET_OBJECT_ADDRESS',\n 'PG_GET_OWNED_SEQUENCE',\n 'PG_GET_RULEDEF',\n 'PG_GET_SERIAL_SEQUENCE',\n 'PG_GET_STATISTICSOBJDEF',\n 'PG_GET_TRIGGERDEF',\n 'PG_GET_USERBYID',\n 'PG_GET_VIEWDEF',\n 'PG_HAS_ROLE',\n 'PG_IDENTIFY_OBJECT',\n 'PG_IDENTIFY_OBJECT_AS_ADDRESS',\n 'PG_INDEXAM_HAS_PROPERTY',\n 'PG_INDEX_COLUMN_HAS_PROPERTY',\n 'PG_INDEX_HAS_PROPERTY',\n 'PG_IS_OTHER_TEMP_SCHEMA',\n 'PG_JIT_AVAILABLE',\n 'PG_LAST_COMMITTED_XACT',\n 'PG_LISTENING_CHANNELS',\n 'PG_MY_TEMP_SCHEMA',\n 'PG_NOTIFICATION_QUEUE_USAGE',\n 'PG_OPCLASS_IS_VISIBLE',\n 'PG_OPERATOR_IS_VISIBLE',\n 'PG_OPFAMILY_IS_VISIBLE',\n 'PG_OPTIONS_TO_TABLE',\n 'PG_POSTMASTER_START_TIME',\n 'PG_SAFE_SNAPSHOT_BLOCKING_PIDS',\n 'PG_SNAPSHOT_XIP',\n 'PG_SNAPSHOT_XMAX',\n 'PG_SNAPSHOT_XMIN',\n 'PG_STATISTICS_OBJ_IS_VISIBLE',\n 'PG_TABLESPACE_DATABASES',\n 'PG_TABLESPACE_LOCATION',\n 'PG_TABLE_IS_VISIBLE',\n 'PG_TRIGGER_DEPTH',\n 'PG_TS_CONFIG_IS_VISIBLE',\n 'PG_TS_DICT_IS_VISIBLE',\n 'PG_TS_PARSER_IS_VISIBLE',\n 'PG_TS_TEMPLATE_IS_VISIBLE',\n 'PG_TYPEOF',\n 'PG_TYPE_IS_VISIBLE',\n 'PG_VISIBLE_IN_SNAPSHOT',\n 'PG_XACT_COMMIT_TIMESTAMP',\n 'PG_XACT_COMMIT_TIMESTAMP_ORIGIN',\n 'PG_XACT_STATUS',\n 'PQSERVERVERSION',\n 'ROW_SECURITY_ACTIVE',\n 'SESSION_USER',\n 'SHOBJ_DESCRIPTION',\n 'TO_REGCLASS',\n 'TO_REGCOLLATION',\n 'TO_REGNAMESPACE',\n 'TO_REGOPER',\n 'TO_REGOPERATOR',\n 'TO_REGPROC',\n 'TO_REGPROCEDURE',\n 'TO_REGROLE',\n 'TO_REGTYPE',\n 'TXID_CURRENT',\n 'TXID_CURRENT_IF_ASSIGNED',\n 'TXID_CURRENT_SNAPSHOT',\n 'TXID_SNAPSHOT_XIP',\n 'TXID_SNAPSHOT_XMAX',\n 'TXID_SNAPSHOT_XMIN',\n 'TXID_STATUS',\n 'TXID_VISIBLE_IN_SNAPSHOT',\n 'USER',\n 'VERSION',\n ],\n // https://www.postgresql.org/docs/14/functions-admin.html\n sysAdmin: [\n 'BRIN_DESUMMARIZE_RANGE',\n 'BRIN_SUMMARIZE_NEW_VALUES',\n 'BRIN_SUMMARIZE_RANGE',\n 'CONVERT_FROM',\n 'CURRENT_SETTING',\n 'GIN_CLEAN_PENDING_LIST',\n 'PG_ADVISORY_LOCK',\n 'PG_ADVISORY_LOCK_SHARED',\n 'PG_ADVISORY_UNLOCK',\n 'PG_ADVISORY_UNLOCK_ALL',\n 'PG_ADVISORY_UNLOCK_SHARED',\n 'PG_ADVISORY_XACT_LOCK',\n 'PG_ADVISORY_XACT_LOCK_SHARED',\n 'PG_BACKUP_START_TIME',\n 'PG_CANCEL_BACKEND',\n 'PG_COLLATION_ACTUAL_VERSION',\n 'PG_COLUMN_COMPRESSION',\n 'PG_COLUMN_SIZE',\n 'PG_COPY_LOGICAL_REPLICATION_SLOT',\n 'PG_COPY_PHYSICAL_REPLICATION_SLOT',\n 'PG_CREATE_LOGICAL_REPLICATION_SLOT',\n 'PG_CREATE_PHYSICAL_REPLICATION_SLOT',\n 'PG_CREATE_RESTORE_POINT',\n 'PG_CURRENT_WAL_FLUSH_LSN',\n 'PG_CURRENT_WAL_INSERT_LSN',\n 'PG_CURRENT_WAL_LSN',\n 'PG_DATABASE_SIZE',\n 'PG_DROP_REPLICATION_SLOT',\n 'PG_EXPORT_SNAPSHOT',\n 'PG_FILENODE_RELATION',\n 'PG_GET_WAL_REPLAY_PAUSE_STATE',\n 'PG_IMPORT_SYSTEM_COLLATIONS',\n 'PG_INDEXES_SIZE',\n 'PG_IS_IN_BACKUP',\n 'PG_IS_IN_RECOVERY',\n 'PG_IS_WAL_REPLAY_PAUSED',\n 'PG_LAST_WAL_RECEIVE_LSN',\n 'PG_LAST_WAL_REPLAY_LSN',\n 'PG_LAST_XACT_REPLAY_TIMESTAMP',\n 'PG_LOGICAL_EMIT_MESSAGE',\n 'PG_LOGICAL_SLOT_GET_BINARY_CHANGES',\n 'PG_LOGICAL_SLOT_GET_CHANGES',\n 'PG_LOGICAL_SLOT_PEEK_BINARY_CHANGES',\n 'PG_LOGICAL_SLOT_PEEK_CHANGES',\n 'PG_LOG_BACKEND_MEMORY_CONTEXTS',\n 'PG_LS_ARCHIVE_STATUSDIR',\n 'PG_LS_DIR',\n 'PG_LS_LOGDIR',\n 'PG_LS_TMPDIR',\n 'PG_LS_WALDIR',\n 'PG_PARTITION_ANCESTORS',\n 'PG_PARTITION_ROOT',\n 'PG_PARTITION_TREE',\n 'PG_PROMOTE',\n 'PG_READ_BINARY_FILE',\n 'PG_READ_FILE',\n 'PG_RELATION_FILENODE',\n 'PG_RELATION_FILEPATH',\n 'PG_RELATION_SIZE',\n 'PG_RELOAD_CONF',\n 'PG_REPLICATION_ORIGIN_ADVANCE',\n 'PG_REPLICATION_ORIGIN_CREATE',\n 'PG_REPLICATION_ORIGIN_DROP',\n 'PG_REPLICATION_ORIGIN_OID',\n 'PG_REPLICATION_ORIGIN_PROGRESS',\n 'PG_REPLICATION_ORIGIN_SESSION_IS_SETUP',\n 'PG_REPLICATION_ORIGIN_SESSION_PROGRESS',\n 'PG_REPLICATION_ORIGIN_SESSION_RESET',\n 'PG_REPLICATION_ORIGIN_SESSION_SETUP',\n 'PG_REPLICATION_ORIGIN_XACT_RESET',\n 'PG_REPLICATION_ORIGIN_XACT_SETUP',\n 'PG_REPLICATION_SLOT_ADVANCE',\n 'PG_ROTATE_LOGFILE',\n 'PG_SIZE_BYTES',\n 'PG_SIZE_PRETTY',\n 'PG_START_BACKUP',\n 'PG_STAT_FILE',\n 'PG_STOP_BACKUP',\n 'PG_SWITCH_WAL',\n 'PG_TABLESPACE_SIZE',\n 'PG_TABLE_SIZE',\n 'PG_TERMINATE_BACKEND',\n 'PG_TOTAL_RELATION_SIZE',\n 'PG_TRY_ADVISORY_LOCK',\n 'PG_TRY_ADVISORY_LOCK_SHARED',\n 'PG_TRY_ADVISORY_XACT_LOCK',\n 'PG_TRY_ADVISORY_XACT_LOCK_SHARED',\n 'PG_WALFILE_NAME',\n 'PG_WALFILE_NAME_OFFSET',\n 'PG_WAL_LSN_DIFF',\n 'PG_WAL_REPLAY_PAUSE',\n 'PG_WAL_REPLAY_RESUME',\n 'SET_CONFIG',\n ],\n // https://www.postgresql.org/docs/14/functions-trigger.html\n trigger: [\n 'SUPPRESS_REDUNDANT_UPDATES_TRIGGER',\n 'TSVECTOR_UPDATE_TRIGGER',\n 'TSVECTOR_UPDATE_TRIGGER_COLUMN',\n ],\n // https://www.postgresql.org/docs/14/functions-event-triggers.html\n eventTrigger: [\n 'PG_EVENT_TRIGGER_DDL_COMMANDS',\n 'PG_EVENT_TRIGGER_DROPPED_OBJECTS',\n 'PG_EVENT_TRIGGER_TABLE_REWRITE_OID',\n 'PG_EVENT_TRIGGER_TABLE_REWRITE_REASON',\n 'PG_GET_OBJECT_ADDRESS',\n ],\n // https://www.postgresql.org/docs/14/functions-statistics.html\n stats: ['PG_MCV_LIST_ITEMS'],\n cast: ['CAST'],\n // Parameterized data types\n // https://www.postgresql.org/docs/current/datatype.html\n dataTypes: [\n 'BIT',\n 'BIT VARYING',\n 'CHARACTER',\n 'CHARACTER VARYING',\n 'VARCHAR',\n 'CHAR',\n 'DECIMAL',\n 'NUMERIC',\n 'TIME',\n 'TIMESTAMP',\n 'ENUM',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://www.postgresql.org/docs/14/sql-keywords-appendix.html\n all: [\n 'ABORT',\n 'ABSOLUTE',\n 'ACCESS',\n 'ACTION',\n 'ADD',\n 'ADMIN',\n 'AFTER',\n 'AGGREGATE',\n 'ALL', // reserved\n 'ALSO',\n 'ALTER',\n 'ALWAYS',\n 'ANALYSE', // reserved\n 'ANALYZE', // reserved\n 'AND', // reserved\n 'ANY', // reserved\n 'ARRAY', // reserved, requires AS\n 'AS', // reserved, requires AS\n 'ASC', // reserved\n 'ASENSITIVE',\n 'ASSERTION',\n 'ASSIGNMENT',\n 'ASYMMETRIC', // reserved\n 'AT',\n 'ATOMIC',\n 'ATTACH',\n 'ATTRIBUTE',\n 'AUTHORIZATION', // reserved (can be function or type)\n 'BACKWARD',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN', // (cannot be function or type)\n 'BIGINT', // (cannot be function or type)\n 'BINARY', // reserved (can be function or type)\n 'BIT', // (cannot be function or type)\n 'BOOLEAN', // (cannot be function or type)\n 'BOTH', // reserved\n 'BREADTH',\n 'BY',\n 'CACHE',\n 'CALL',\n 'CALLED',\n 'CASCADE',\n 'CASCADED',\n 'CASE', // reserved\n 'CAST', // reserved\n 'CATALOG',\n 'CHAIN',\n 'CHAR', // (cannot be function or type), requires AS\n 'CHARACTER', // (cannot be function or type), requires AS\n 'CHARACTERISTICS',\n 'CHECK', // reserved\n 'CHECKPOINT',\n 'CLASS',\n 'CLOSE',\n 'CLUSTER',\n 'COALESCE', // (cannot be function or type)\n 'COLLATE', // reserved\n 'COLLATION', // reserved (can be function or type)\n 'COLUMN', // reserved\n 'COLUMNS',\n 'COMMENT',\n 'COMMENTS',\n 'COMMIT',\n 'COMMITTED',\n 'COMPRESSION',\n 'CONCURRENTLY', // reserved (can be function or type)\n 'CONFIGURATION',\n 'CONFLICT',\n 'CONNECTION',\n 'CONSTRAINT', // reserved\n 'CONSTRAINTS',\n 'CONTENT',\n 'CONTINUE',\n 'CONVERSION',\n 'COPY',\n 'COST',\n 'CREATE', // reserved, requires AS\n 'CROSS', // reserved (can be function or type)\n 'CSV',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_CATALOG', // reserved\n 'CURRENT_DATE', // reserved\n 'CURRENT_ROLE', // reserved\n 'CURRENT_SCHEMA', // reserved (can be function or type)\n 'CURRENT_TIME', // reserved\n 'CURRENT_TIMESTAMP', // reserved\n 'CURRENT_USER', // reserved\n 'CURSOR',\n 'CYCLE',\n 'DATA',\n 'DATABASE',\n 'DAY', // requires AS\n 'DEALLOCATE',\n 'DEC', // (cannot be function or type)\n 'DECIMAL', // (cannot be function or type)\n 'DECLARE',\n 'DEFAULT', // reserved\n 'DEFAULTS',\n 'DEFERRABLE', // reserved\n 'DEFERRED',\n 'DEFINER',\n 'DELETE',\n 'DELIMITER',\n 'DELIMITERS',\n 'DEPENDS',\n 'DEPTH',\n 'DESC', // reserved\n 'DETACH',\n 'DICTIONARY',\n 'DISABLE',\n 'DISCARD',\n 'DISTINCT', // reserved\n 'DO', // reserved\n 'DOCUMENT',\n 'DOMAIN',\n 'DOUBLE',\n 'DROP',\n 'EACH',\n 'ELSE', // reserved\n 'ENABLE',\n 'ENCODING',\n 'ENCRYPTED',\n 'END', // reserved\n 'ENUM',\n 'ESCAPE',\n 'EVENT',\n 'EXCEPT', // reserved, requires AS\n 'EXCLUDE',\n 'EXCLUDING',\n 'EXCLUSIVE',\n 'EXECUTE',\n 'EXISTS', // (cannot be function or type)\n 'EXPLAIN',\n 'EXPRESSION',\n 'EXTENSION',\n 'EXTERNAL',\n 'EXTRACT', // (cannot be function or type)\n 'FALSE', // reserved\n 'FAMILY',\n 'FETCH', // reserved, requires AS\n 'FILTER', // requires AS\n 'FINALIZE',\n 'FIRST',\n 'FLOAT', // (cannot be function or type)\n 'FOLLOWING',\n 'FOR', // reserved, requires AS\n 'FORCE',\n 'FOREIGN', // reserved\n 'FORWARD',\n 'FREEZE', // reserved (can be function or type)\n 'FROM', // reserved, requires AS\n 'FULL', // reserved (can be function or type)\n 'FUNCTION',\n 'FUNCTIONS',\n 'GENERATED',\n 'GLOBAL',\n 'GRANT', // reserved, requires AS\n 'GRANTED',\n 'GREATEST', // (cannot be function or type)\n 'GROUP', // reserved, requires AS\n 'GROUPING', // (cannot be function or type)\n 'GROUPS',\n 'HANDLER',\n 'HAVING', // reserved, requires AS\n 'HEADER',\n 'HOLD',\n 'HOUR', // requires AS\n 'IDENTITY',\n 'IF',\n 'ILIKE', // reserved (can be function or type)\n 'IMMEDIATE',\n 'IMMUTABLE',\n 'IMPLICIT',\n 'IMPORT',\n 'IN', // reserved\n 'INCLUDE',\n 'INCLUDING',\n 'INCREMENT',\n 'INDEX',\n 'INDEXES',\n 'INHERIT',\n 'INHERITS',\n 'INITIALLY', // reserved\n 'INLINE',\n 'INNER', // reserved (can be function or type)\n 'INOUT', // (cannot be function or type)\n 'INPUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INSTEAD',\n 'INT', // (cannot be function or type)\n 'INTEGER', // (cannot be function or type)\n 'INTERSECT', // reserved, requires AS\n 'INTERVAL', // (cannot be function or type)\n 'INTO', // reserved, requires AS\n 'INVOKER',\n 'IS', // reserved (can be function or type)\n 'ISNULL', // reserved (can be function or type), requires AS\n 'ISOLATION',\n 'JOIN', // reserved (can be function or type)\n 'KEY',\n 'LABEL',\n 'LANGUAGE',\n 'LARGE',\n 'LAST',\n 'LATERAL', // reserved\n 'LEADING', // reserved\n 'LEAKPROOF',\n 'LEAST', // (cannot be function or type)\n 'LEFT', // reserved (can be function or type)\n 'LEVEL',\n 'LIKE', // reserved (can be function or type)\n 'LIMIT', // reserved, requires AS\n 'LISTEN',\n 'LOAD',\n 'LOCAL',\n 'LOCALTIME', // reserved\n 'LOCALTIMESTAMP', // reserved\n 'LOCATION',\n 'LOCK',\n 'LOCKED',\n 'LOGGED',\n 'MAPPING',\n 'MATCH',\n 'MATERIALIZED',\n 'MAXVALUE',\n 'METHOD',\n 'MINUTE', // requires AS\n 'MINVALUE',\n 'MODE',\n 'MONTH', // requires AS\n 'MOVE',\n 'NAME',\n 'NAMES',\n 'NATIONAL', // (cannot be function or type)\n 'NATURAL', // reserved (can be function or type)\n 'NCHAR', // (cannot be function or type)\n 'NEW',\n 'NEXT',\n 'NFC',\n 'NFD',\n 'NFKC',\n 'NFKD',\n 'NO',\n 'NONE', // (cannot be function or type)\n 'NORMALIZE', // (cannot be function or type)\n 'NORMALIZED',\n 'NOT', // reserved\n 'NOTHING',\n 'NOTIFY',\n 'NOTNULL', // reserved (can be function or type), requires AS\n 'NOWAIT',\n 'NULL', // reserved\n 'NULLIF', // (cannot be function or type)\n 'NULLS',\n 'NUMERIC', // (cannot be function or type)\n 'OBJECT',\n 'OF',\n 'OFF',\n 'OFFSET', // reserved, requires AS\n 'OIDS',\n 'OLD',\n 'ON', // reserved, requires AS\n 'ONLY', // reserved\n 'OPERATOR',\n 'OPTION',\n 'OPTIONS',\n 'OR', // reserved\n 'ORDER', // reserved, requires AS\n 'ORDINALITY',\n 'OTHERS',\n 'OUT', // (cannot be function or type)\n 'OUTER', // reserved (can be function or type)\n 'OVER', // requires AS\n 'OVERLAPS', // reserved (can be function or type), requires AS\n 'OVERLAY', // (cannot be function or type)\n 'OVERRIDING',\n 'OWNED',\n 'OWNER',\n 'PARALLEL',\n 'PARSER',\n 'PARTIAL',\n 'PARTITION',\n 'PASSING',\n 'PASSWORD',\n 'PLACING', // reserved\n 'PLANS',\n 'POLICY',\n 'POSITION', // (cannot be function or type)\n 'PRECEDING',\n 'PRECISION', // (cannot be function or type), requires AS\n 'PREPARE',\n 'PREPARED',\n 'PRESERVE',\n 'PRIMARY', // reserved\n 'PRIOR',\n 'PRIVILEGES',\n 'PROCEDURAL',\n 'PROCEDURE',\n 'PROCEDURES',\n 'PROGRAM',\n 'PUBLICATION',\n 'QUOTE',\n 'RANGE',\n 'READ',\n 'REAL', // (cannot be function or type)\n 'REASSIGN',\n 'RECHECK',\n 'RECURSIVE',\n 'REF',\n 'REFERENCES', // reserved\n 'REFERENCING',\n 'REFRESH',\n 'REINDEX',\n 'RELATIVE',\n 'RELEASE',\n 'RENAME',\n 'REPEATABLE',\n 'REPLACE',\n 'REPLICA',\n 'RESET',\n 'RESTART',\n 'RESTRICT',\n 'RETURN',\n 'RETURNING', // reserved, requires AS\n 'RETURNS',\n 'REVOKE',\n 'RIGHT', // reserved (can be function or type)\n 'ROLE',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROUTINE',\n 'ROUTINES',\n 'ROW', // (cannot be function or type)\n 'ROWS',\n 'RULE',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCHEMAS',\n 'SCROLL',\n 'SEARCH',\n 'SECOND', // requires AS\n 'SECURITY',\n 'SELECT', // reserved\n 'SEQUENCE',\n 'SEQUENCES',\n 'SERIALIZABLE',\n 'SERVER',\n 'SESSION',\n 'SESSION_USER', // reserved\n 'SET',\n 'SETOF', // (cannot be function or type)\n 'SETS',\n 'SHARE',\n 'SHOW',\n 'SIMILAR', // reserved (can be function or type)\n 'SIMPLE',\n 'SKIP',\n 'SMALLINT', // (cannot be function or type)\n 'SNAPSHOT',\n 'SOME', // reserved\n 'SQL',\n 'STABLE',\n 'STANDALONE',\n 'START',\n 'STATEMENT',\n 'STATISTICS',\n 'STDIN',\n 'STDOUT',\n 'STORAGE',\n 'STORED',\n 'STRICT',\n 'STRIP',\n 'SUBSCRIPTION',\n 'SUBSTRING', // (cannot be function or type)\n 'SUPPORT',\n 'SYMMETRIC', // reserved\n 'SYSID',\n 'SYSTEM',\n 'TABLE', // reserved\n 'TABLES',\n 'TABLESAMPLE', // reserved (can be function or type)\n 'TABLESPACE',\n 'TEMP',\n 'TEMPLATE',\n 'TEMPORARY',\n 'TEXT',\n 'THEN', // reserved\n 'TIES',\n 'TIME', // (cannot be function or type)\n 'TIMESTAMP', // (cannot be function or type)\n 'TO', // reserved, requires AS\n 'TRAILING', // reserved\n 'TRANSACTION',\n 'TRANSFORM',\n 'TREAT', // (cannot be function or type)\n 'TRIGGER',\n 'TRIM', // (cannot be function or type)\n 'TRUE', // reserved\n 'TRUNCATE',\n 'TRUSTED',\n 'TYPE',\n 'TYPES',\n 'UESCAPE',\n 'UNBOUNDED',\n 'UNCOMMITTED',\n 'UNENCRYPTED',\n 'UNION', // reserved, requires AS\n 'UNIQUE', // reserved\n 'UNKNOWN',\n 'UNLISTEN',\n 'UNLOGGED',\n 'UNTIL',\n 'UPDATE',\n 'USER', // reserved\n 'USING', // reserved\n 'VACUUM',\n 'VALID',\n 'VALIDATE',\n 'VALIDATOR',\n 'VALUE',\n 'VALUES', // (cannot be function or type)\n 'VARCHAR', // (cannot be function or type)\n 'VARIADIC', // reserved\n 'VARYING', // requires AS\n 'VERBOSE', // reserved (can be function or type)\n 'VERSION',\n 'VIEW',\n 'VIEWS',\n 'VOLATILE',\n 'WHEN', // reserved\n 'WHERE', // reserved, requires AS\n 'WHITESPACE',\n 'WINDOW', // reserved, requires AS\n 'WITH', // reserved, requires AS\n 'WITHIN', // requires AS\n 'WITHOUT', // requires AS\n 'WORK',\n 'WRAPPER',\n 'WRITE',\n 'XML',\n 'XMLATTRIBUTES', // (cannot be function or type)\n 'XMLCONCAT', // (cannot be function or type)\n 'XMLELEMENT', // (cannot be function or type)\n 'XMLEXISTS', // (cannot be function or type)\n 'XMLFOREST', // (cannot be function or type)\n 'XMLNAMESPACES', // (cannot be function or type)\n 'XMLPARSE', // (cannot be function or type)\n 'XMLPI', // (cannot be function or type)\n 'XMLROOT', // (cannot be function or type)\n 'XMLSERIALIZE', // (cannot be function or type)\n 'XMLTABLE', // (cannot be function or type)\n 'YEAR', // requires AS\n 'YES',\n 'ZONE',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './postgresql.functions.js';\nimport { keywords } from './postgresql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY [ALL | DISTINCT]',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n 'FOR {UPDATE | NO KEY UPDATE | SHARE | KEY SHARE} [OF]',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW',\n 'CREATE MATERIALIZED VIEW [IF NOT EXISTS]',\n 'CREATE [GLOBAL | LOCAL] [TEMPORARY | TEMP | UNLOGGED] TABLE [IF NOT EXISTS]',\n // other\n 'RETURNING',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE [ONLY]',\n 'WHERE CURRENT OF',\n // - insert:\n 'ON CONFLICT',\n // - delete:\n 'DELETE FROM [ONLY]',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS] [ONLY]',\n 'ALTER TABLE ALL IN TABLESPACE',\n 'RENAME [COLUMN]',\n 'RENAME TO',\n 'ADD [COLUMN] [IF NOT EXISTS]',\n 'DROP [COLUMN] [IF EXISTS]',\n 'ALTER [COLUMN]',\n '[SET DATA] TYPE', // for alter column\n '{SET | DROP} DEFAULT', // for alter column\n '{SET | DROP} NOT NULL', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE] [ONLY]',\n // other\n 'SET SCHEMA',\n 'AFTER',\n // https://www.postgresql.org/docs/14/sql-commands.html\n 'ABORT',\n 'ALTER AGGREGATE',\n 'ALTER COLLATION',\n 'ALTER CONVERSION',\n 'ALTER DATABASE',\n 'ALTER DEFAULT PRIVILEGES',\n 'ALTER DOMAIN',\n 'ALTER EVENT TRIGGER',\n 'ALTER EXTENSION',\n 'ALTER FOREIGN DATA WRAPPER',\n 'ALTER FOREIGN TABLE',\n 'ALTER FUNCTION',\n 'ALTER GROUP',\n 'ALTER INDEX',\n 'ALTER LANGUAGE',\n 'ALTER LARGE OBJECT',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER OPERATOR',\n 'ALTER OPERATOR CLASS',\n 'ALTER OPERATOR FAMILY',\n 'ALTER POLICY',\n 'ALTER PROCEDURE',\n 'ALTER PUBLICATION',\n 'ALTER ROLE',\n 'ALTER ROUTINE',\n 'ALTER RULE',\n 'ALTER SCHEMA',\n 'ALTER SEQUENCE',\n 'ALTER SERVER',\n 'ALTER STATISTICS',\n 'ALTER SUBSCRIPTION',\n 'ALTER SYSTEM',\n 'ALTER TABLESPACE',\n 'ALTER TEXT SEARCH CONFIGURATION',\n 'ALTER TEXT SEARCH DICTIONARY',\n 'ALTER TEXT SEARCH PARSER',\n 'ALTER TEXT SEARCH TEMPLATE',\n 'ALTER TRIGGER',\n 'ALTER TYPE',\n 'ALTER USER',\n 'ALTER USER MAPPING',\n 'ALTER VIEW',\n 'ANALYZE',\n 'BEGIN',\n 'CALL',\n 'CHECKPOINT',\n 'CLOSE',\n 'CLUSTER',\n 'COMMIT',\n 'COMMIT PREPARED',\n 'COPY',\n 'CREATE ACCESS METHOD',\n 'CREATE AGGREGATE',\n 'CREATE CAST',\n 'CREATE COLLATION',\n 'CREATE CONVERSION',\n 'CREATE DATABASE',\n 'CREATE DOMAIN',\n 'CREATE EVENT TRIGGER',\n 'CREATE EXTENSION',\n 'CREATE FOREIGN DATA WRAPPER',\n 'CREATE FOREIGN TABLE',\n 'CREATE FUNCTION',\n 'CREATE GROUP',\n 'CREATE INDEX',\n 'CREATE LANGUAGE',\n 'CREATE OPERATOR',\n 'CREATE OPERATOR CLASS',\n 'CREATE OPERATOR FAMILY',\n 'CREATE POLICY',\n 'CREATE PROCEDURE',\n 'CREATE PUBLICATION',\n 'CREATE ROLE',\n 'CREATE RULE',\n 'CREATE SCHEMA',\n 'CREATE SEQUENCE',\n 'CREATE SERVER',\n 'CREATE STATISTICS',\n 'CREATE SUBSCRIPTION',\n 'CREATE TABLESPACE',\n 'CREATE TEXT SEARCH CONFIGURATION',\n 'CREATE TEXT SEARCH DICTIONARY',\n 'CREATE TEXT SEARCH PARSER',\n 'CREATE TEXT SEARCH TEMPLATE',\n 'CREATE TRANSFORM',\n 'CREATE TRIGGER',\n 'CREATE TYPE',\n 'CREATE USER',\n 'CREATE USER MAPPING',\n 'DEALLOCATE',\n 'DECLARE',\n 'DISCARD',\n 'DROP ACCESS METHOD',\n 'DROP AGGREGATE',\n 'DROP CAST',\n 'DROP COLLATION',\n 'DROP CONVERSION',\n 'DROP DATABASE',\n 'DROP DOMAIN',\n 'DROP EVENT TRIGGER',\n 'DROP EXTENSION',\n 'DROP FOREIGN DATA WRAPPER',\n 'DROP FOREIGN TABLE',\n 'DROP FUNCTION',\n 'DROP GROUP',\n 'DROP INDEX',\n 'DROP LANGUAGE',\n 'DROP MATERIALIZED VIEW',\n 'DROP OPERATOR',\n 'DROP OPERATOR CLASS',\n 'DROP OPERATOR FAMILY',\n 'DROP OWNED',\n 'DROP POLICY',\n 'DROP PROCEDURE',\n 'DROP PUBLICATION',\n 'DROP ROLE',\n 'DROP ROUTINE',\n 'DROP RULE',\n 'DROP SCHEMA',\n 'DROP SEQUENCE',\n 'DROP SERVER',\n 'DROP STATISTICS',\n 'DROP SUBSCRIPTION',\n 'DROP TABLESPACE',\n 'DROP TEXT SEARCH CONFIGURATION',\n 'DROP TEXT SEARCH DICTIONARY',\n 'DROP TEXT SEARCH PARSER',\n 'DROP TEXT SEARCH TEMPLATE',\n 'DROP TRANSFORM',\n 'DROP TRIGGER',\n 'DROP TYPE',\n 'DROP USER',\n 'DROP USER MAPPING',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FETCH',\n 'GRANT',\n 'IMPORT FOREIGN SCHEMA',\n 'LISTEN',\n 'LOAD',\n 'LOCK',\n 'MOVE',\n 'NOTIFY',\n 'PREPARE',\n 'PREPARE TRANSACTION',\n 'REASSIGN OWNED',\n 'REFRESH MATERIALIZED VIEW',\n 'REINDEX',\n 'RELEASE SAVEPOINT',\n 'RESET',\n 'REVOKE',\n 'ROLLBACK',\n 'ROLLBACK PREPARED',\n 'ROLLBACK TO SAVEPOINT',\n 'SAVEPOINT',\n 'SECURITY LABEL',\n 'SELECT INTO',\n 'SET CONSTRAINTS',\n 'SET ROLE',\n 'SET SESSION AUTHORIZATION',\n 'SET TRANSACTION',\n 'SHOW',\n 'START TRANSACTION',\n 'UNLISTEN',\n 'VACUUM',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n '{ROWS | RANGE | GROUPS} BETWEEN',\n // https://www.postgresql.org/docs/current/datatype-datetime.html\n '{TIMESTAMP | TIME} {WITH | WITHOUT} TIME ZONE',\n // comparison operator\n 'IS [NOT] DISTINCT FROM',\n]);\n\n// https://www.postgresql.org/docs/14/index.html\nexport const postgresql: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n nestedBlockComments: true,\n extraParens: ['[]'],\n stringTypes: [\n '$$',\n { quote: \"''-qq\", prefixes: ['U&'] },\n { quote: \"''-qq-bs\", prefixes: ['E'], requirePrefix: true },\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: [{ quote: '\"\"-qq', prefixes: ['U&'] }],\n identChars: { rest: '$' },\n paramTypes: { numbered: ['$'] },\n operators: [\n // Arithmetic\n '%',\n '^',\n '|/',\n '||/',\n '@',\n // Assignment\n ':=',\n // Bitwise\n '&',\n '|',\n '#',\n '~',\n '<<',\n '>>',\n // Byte comparison\n '~>~',\n '~<~',\n '~>=~',\n '~<=~',\n // Geometric\n '@-@',\n '@@',\n '##',\n '<->',\n '&&',\n '&<',\n '&>',\n '<<|',\n '&<|',\n '|>>',\n '|&>',\n '<^',\n '^>',\n '?#',\n '?-',\n '?|',\n '?-|',\n '?||',\n '@>',\n '<@',\n '~=',\n // JSON\n '?',\n '@?',\n '?&',\n '->',\n '->>',\n '#>',\n '#>>',\n '#-',\n // Named function params\n '=>',\n // Network address\n '>>=',\n '<<=',\n // Pattern matching\n '~~',\n '~~*',\n '!~~',\n '!~~*',\n // POSIX RegExp\n '~',\n '~*',\n '!~',\n '!~*',\n // Range/multirange\n '-|-',\n // String concatenation\n '||',\n // Text search\n '@@@',\n '!!',\n // Trigram/trigraph\n '<%',\n '%>',\n '<<%',\n '%>>',\n '<<->',\n '<->>',\n '<<<->',\n '<->>>',\n // Type cast\n '::',\n ':',\n ],\n },\n formatOptions: {\n alwaysDenseOperators: ['::', ':'],\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.html\n aggregate: [\n 'ANY_VALUE',\n 'APPROXIMATE PERCENTILE_DISC',\n 'AVG',\n 'COUNT',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'PERCENTILE_CONT',\n 'STDDEV_SAMP',\n 'STDDEV_POP',\n 'SUM',\n 'VAR_SAMP',\n 'VAR_POP',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Array_Functions.html\n array: [\n 'array',\n 'array_concat',\n 'array_flatten',\n 'get_array_length',\n 'split_to_array',\n 'subarray',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/c_bitwise_aggregate_functions.html\n bitwise: ['BIT_AND', 'BIT_OR', 'BOOL_AND', 'BOOL_OR'],\n // https://docs.aws.amazon.com/redshift/latest/dg/c_conditional_expressions.html\n conditional: ['COALESCE', 'DECODE', 'GREATEST', 'LEAST', 'NVL', 'NVL2', 'NULLIF'],\n // https://docs.aws.amazon.com/redshift/latest/dg/Date_functions_header.html\n dateTime: [\n 'ADD_MONTHS',\n 'AT TIME ZONE',\n 'CONVERT_TIMEZONE',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATE_CMP',\n 'DATE_CMP_TIMESTAMP',\n 'DATE_CMP_TIMESTAMPTZ',\n 'DATE_PART_YEAR',\n 'DATEADD',\n 'DATEDIFF',\n 'DATE_PART',\n 'DATE_TRUNC',\n 'EXTRACT',\n 'GETDATE',\n 'INTERVAL_CMP',\n 'LAST_DAY',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'SYSDATE',\n 'TIMEOFDAY',\n 'TIMESTAMP_CMP',\n 'TIMESTAMP_CMP_DATE',\n 'TIMESTAMP_CMP_TIMESTAMPTZ',\n 'TIMESTAMPTZ_CMP',\n 'TIMESTAMPTZ_CMP_DATE',\n 'TIMESTAMPTZ_CMP_TIMESTAMP',\n 'TIMEZONE',\n 'TO_TIMESTAMP',\n 'TRUNC',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/geospatial-functions.html\n spatial: [\n 'AddBBox',\n 'DropBBox',\n 'GeometryType',\n 'ST_AddPoint',\n 'ST_Angle',\n 'ST_Area',\n 'ST_AsBinary',\n 'ST_AsEWKB',\n 'ST_AsEWKT',\n 'ST_AsGeoJSON',\n 'ST_AsText',\n 'ST_Azimuth',\n 'ST_Boundary',\n 'ST_Collect',\n 'ST_Contains',\n 'ST_ContainsProperly',\n 'ST_ConvexHull',\n 'ST_CoveredBy',\n 'ST_Covers',\n 'ST_Crosses',\n 'ST_Dimension',\n 'ST_Disjoint',\n 'ST_Distance',\n 'ST_DistanceSphere',\n 'ST_DWithin',\n 'ST_EndPoint',\n 'ST_Envelope',\n 'ST_Equals',\n 'ST_ExteriorRing',\n 'ST_Force2D',\n 'ST_Force3D',\n 'ST_Force3DM',\n 'ST_Force3DZ',\n 'ST_Force4D',\n 'ST_GeometryN',\n 'ST_GeometryType',\n 'ST_GeomFromEWKB',\n 'ST_GeomFromEWKT',\n 'ST_GeomFromText',\n 'ST_GeomFromWKB',\n 'ST_InteriorRingN',\n 'ST_Intersects',\n 'ST_IsPolygonCCW',\n 'ST_IsPolygonCW',\n 'ST_IsClosed',\n 'ST_IsCollection',\n 'ST_IsEmpty',\n 'ST_IsSimple',\n 'ST_IsValid',\n 'ST_Length',\n 'ST_LengthSphere',\n 'ST_Length2D',\n 'ST_LineFromMultiPoint',\n 'ST_LineInterpolatePoint',\n 'ST_M',\n 'ST_MakeEnvelope',\n 'ST_MakeLine',\n 'ST_MakePoint',\n 'ST_MakePolygon',\n 'ST_MemSize',\n 'ST_MMax',\n 'ST_MMin',\n 'ST_Multi',\n 'ST_NDims',\n 'ST_NPoints',\n 'ST_NRings',\n 'ST_NumGeometries',\n 'ST_NumInteriorRings',\n 'ST_NumPoints',\n 'ST_Perimeter',\n 'ST_Perimeter2D',\n 'ST_Point',\n 'ST_PointN',\n 'ST_Points',\n 'ST_Polygon',\n 'ST_RemovePoint',\n 'ST_Reverse',\n 'ST_SetPoint',\n 'ST_SetSRID',\n 'ST_Simplify',\n 'ST_SRID',\n 'ST_StartPoint',\n 'ST_Touches',\n 'ST_Within',\n 'ST_X',\n 'ST_XMax',\n 'ST_XMin',\n 'ST_Y',\n 'ST_YMax',\n 'ST_YMin',\n 'ST_Z',\n 'ST_ZMax',\n 'ST_ZMin',\n 'SupportsBBox',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/hash-functions.html\n hash: ['CHECKSUM', 'FUNC_SHA1', 'FNV_HASH', 'MD5', 'SHA', 'SHA1', 'SHA2'],\n // https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-functions.html\n hyperLogLog: ['HLL', 'HLL_CREATE_SKETCH', 'HLL_CARDINALITY', 'HLL_COMBINE'],\n // https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html\n json: [\n 'IS_VALID_JSON',\n 'IS_VALID_JSON_ARRAY',\n 'JSON_ARRAY_LENGTH',\n 'JSON_EXTRACT_ARRAY_ELEMENT_TEXT',\n 'JSON_EXTRACT_PATH_TEXT',\n 'JSON_PARSE',\n 'JSON_SERIALIZE',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/Math_functions.html\n math: [\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'CBRT',\n 'CEILING',\n 'CEIL',\n 'COS',\n 'COT',\n 'DEGREES',\n 'DEXP',\n 'DLOG1',\n 'DLOG10',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'MOD',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RANDOM',\n 'ROUND',\n 'SIN',\n 'SIGN',\n 'SQRT',\n 'TAN',\n 'TO_HEX',\n 'TRUNC',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/ml-function.html\n machineLearning: ['EXPLAIN_MODEL'],\n // https://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html\n string: [\n 'ASCII',\n 'BPCHARCMP',\n 'BTRIM',\n 'BTTEXT_PATTERN_CMP',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHARINDEX',\n 'CHR',\n 'COLLATE',\n 'CONCAT',\n 'CRC32',\n 'DIFFERENCE',\n 'INITCAP',\n 'LEFT',\n 'RIGHT',\n 'LEN',\n 'LENGTH',\n 'LOWER',\n 'LPAD',\n 'RPAD',\n 'LTRIM',\n 'OCTETINDEX',\n 'OCTET_LENGTH',\n 'POSITION',\n 'QUOTE_IDENT',\n 'QUOTE_LITERAL',\n 'REGEXP_COUNT',\n 'REGEXP_INSTR',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REPEAT',\n 'REPLACE',\n 'REPLICATE',\n 'REVERSE',\n 'RTRIM',\n 'SOUNDEX',\n 'SPLIT_PART',\n 'STRPOS',\n 'STRTOL',\n 'SUBSTRING',\n 'TEXTLEN',\n 'TRANSLATE',\n 'TRIM',\n 'UPPER',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Type_Info_Functions.html\n superType: [\n 'decimal_precision',\n 'decimal_scale',\n 'is_array',\n 'is_bigint',\n 'is_boolean',\n 'is_char',\n 'is_decimal',\n 'is_float',\n 'is_integer',\n 'is_object',\n 'is_scalar',\n 'is_smallint',\n 'is_varchar',\n 'json_typeof',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html\n window: [\n 'AVG',\n 'COUNT',\n 'CUME_DIST',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'LAG',\n 'LEAD',\n 'LISTAGG',\n 'MAX',\n 'MEDIAN',\n 'MIN',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'ROW_NUMBER',\n 'STDDEV_SAMP',\n 'STDDEV_POP',\n 'SUM',\n 'VAR_SAMP',\n 'VAR_POP',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/r_Data_type_formatting.html\n dataType: [\n 'CAST',\n 'CONVERT',\n 'TO_CHAR',\n 'TO_DATE',\n 'TO_NUMBER',\n 'TEXT_TO_INT_ALT',\n 'TEXT_TO_NUMERIC_ALT',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/r_System_administration_functions.html\n sysAdmin: [\n 'CHANGE_QUERY_PRIORITY',\n 'CHANGE_SESSION_PRIORITY',\n 'CHANGE_USER_PRIORITY',\n 'CURRENT_SETTING',\n 'PG_CANCEL_BACKEND',\n 'PG_TERMINATE_BACKEND',\n 'REBOOT_CLUSTER',\n 'SET_CONFIG',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/r_System_information_functions.html\n sysInfo: [\n 'CURRENT_AWS_ACCOUNT',\n 'CURRENT_DATABASE',\n 'CURRENT_NAMESPACE',\n 'CURRENT_SCHEMA',\n 'CURRENT_SCHEMAS',\n 'CURRENT_USER',\n 'CURRENT_USER_ID',\n 'HAS_ASSUMEROLE_PRIVILEGE',\n 'HAS_DATABASE_PRIVILEGE',\n 'HAS_SCHEMA_PRIVILEGE',\n 'HAS_TABLE_PRIVILEGE',\n 'PG_BACKEND_PID',\n 'PG_GET_COLS',\n 'PG_GET_GRANTEE_BY_IAM_ROLE',\n 'PG_GET_IAM_ROLE_BY_USER',\n 'PG_GET_LATE_BINDING_VIEW_COLS',\n 'PG_LAST_COPY_COUNT',\n 'PG_LAST_COPY_ID',\n 'PG_LAST_UNLOAD_ID',\n 'PG_LAST_QUERY_ID',\n 'PG_LAST_UNLOAD_COUNT',\n 'SESSION_USER',\n 'SLICE_NUM',\n 'USER',\n 'VERSION',\n ],\n dataTypes: [\n 'DECIMAL',\n 'NUMERIC',\n 'CHAR',\n 'CHARACTER',\n 'VARCHAR',\n 'CHARACTER VARYING',\n 'NCHAR',\n 'NVARCHAR',\n 'VARBYTE',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html\n standard: [\n 'AES128',\n 'AES256',\n 'ALL',\n 'ALLOWOVERWRITE',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BETWEEN',\n 'BINARY',\n 'BOTH',\n 'CHECK',\n 'COLUMN',\n 'CONSTRAINT',\n 'CREATE',\n 'CROSS',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFLATE',\n 'DEFRAG',\n 'DESC',\n 'DISABLE',\n 'DISTINCT',\n 'DO',\n 'ENABLE',\n 'ENCODE',\n 'ENCRYPT',\n 'ENCRYPTION',\n 'EXPLICIT',\n 'FALSE',\n 'FOR',\n 'FOREIGN',\n 'FREEZE',\n 'FROM',\n 'FULL',\n 'GLOBALDICT256',\n 'GLOBALDICT64K',\n 'GROUP',\n 'IDENTITY',\n 'IGNORE',\n 'ILIKE',\n 'IN',\n 'INITIALLY',\n 'INNER',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'LANGUAGE',\n 'LEADING',\n 'LIKE',\n 'LIMIT',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LUN',\n 'LUNS',\n 'MINUS',\n 'NATURAL',\n 'NEW',\n 'NOT',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OFF',\n 'OFFLINE',\n 'OFFSET',\n 'OID',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'ORDER',\n 'OUTER',\n 'OVERLAPS',\n 'PARALLEL',\n 'PARTITION',\n 'PERCENT',\n 'PERMISSIONS',\n 'PLACING',\n 'PRIMARY',\n 'RECOVER',\n 'REFERENCES',\n 'REJECTLOG',\n 'RESORT',\n 'RESPECT',\n 'RESTORE',\n 'SIMILAR',\n 'SNAPSHOT',\n 'SOME',\n 'SYSTEM',\n 'TABLE',\n 'TAG',\n 'TDES',\n 'THEN',\n 'TIMESTAMP',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRUE',\n 'UNIQUE',\n 'USING',\n 'VERBOSE',\n 'WALLET',\n 'WITHOUT',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n dataConversionParams: [\n 'ACCEPTANYDATE',\n 'ACCEPTINVCHARS',\n 'BLANKSASNULL',\n 'DATEFORMAT',\n 'EMPTYASNULL',\n 'ENCODING',\n 'ESCAPE',\n 'EXPLICIT_IDS',\n 'FILLRECORD',\n 'IGNOREBLANKLINES',\n 'IGNOREHEADER',\n 'REMOVEQUOTES',\n 'ROUNDEC',\n 'TIMEFORMAT',\n 'TRIMBLANKS',\n 'TRUNCATECOLUMNS',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-load.html\n dataLoadParams: ['COMPROWS', 'COMPUPDATE', 'MAXERROR', 'NOLOAD', 'STATUPDATE'],\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html\n dataFormatParams: [\n 'FORMAT',\n 'CSV',\n 'DELIMITER',\n 'FIXEDWIDTH',\n 'SHAPEFILE',\n 'AVRO',\n 'JSON',\n 'PARQUET',\n 'ORC',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html\n copyAuthParams: [\n 'ACCESS_KEY_ID',\n 'CREDENTIALS',\n 'ENCRYPTED',\n 'IAM_ROLE',\n 'MASTER_SYMMETRIC_KEY',\n 'SECRET_ACCESS_KEY',\n 'SESSION_TOKEN',\n ],\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-file-compression.html\n copyCompressionParams: ['BZIP2', 'GZIP', 'LZOP', 'ZSTD'],\n // https://docs.aws.amazon.com/redshift/latest/dg/r_COPY-alphabetical-parm-list.html\n copyMiscParams: ['MANIFEST', 'READRATIO', 'REGION', 'SSH'],\n // https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html\n compressionEncodings: [\n 'RAW',\n 'AZ64',\n 'BYTEDICT',\n 'DELTA',\n 'DELTA32K',\n 'LZO',\n 'MOSTLY8',\n 'MOSTLY16',\n 'MOSTLY32',\n 'RUNLENGTH',\n 'TEXT255',\n 'TEXT32K',\n ],\n misc: [\n // CREATE EXTERNAL SCHEMA (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)\n 'CATALOG_ROLE',\n 'SECRET_ARN',\n 'EXTERNAL',\n // https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html\n 'AUTO',\n 'EVEN',\n 'KEY',\n 'PREDICATE', // ANALYZE | ANALYSE (https://docs.aws.amazon.com/redshift/latest/dg/r_ANALYZE.html)\n // unknown\n 'COMPRESSION',\n ],\n /**\n * Other keywords not included:\n * STL: https://docs.aws.amazon.com/redshift/latest/dg/c_intro_STL_tables.html\n * SVCS: https://docs.aws.amazon.com/redshift/latest/dg/svcs_views.html\n * SVL: https://docs.aws.amazon.com/redshift/latest/dg/svl_views.html\n * SVV: https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html\n */\n // https://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html#r_Character_types-text-and-bpchar-types\n dataTypes: ['BPCHAR', 'TEXT'],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './redshift.functions.js';\nimport { keywords } from './redshift.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [OR REPLACE | MATERIALIZED] VIEW',\n 'CREATE [TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP] TABLE [IF NOT EXISTS]',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ALTER TABLE APPEND',\n 'ADD [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME TO',\n 'RENAME COLUMN',\n 'ALTER COLUMN',\n 'TYPE', // for alter column\n 'ENCODE', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_commands.html\n 'ABORT',\n 'ALTER DATABASE',\n 'ALTER DATASHARE',\n 'ALTER DEFAULT PRIVILEGES',\n 'ALTER GROUP',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER PROCEDURE',\n 'ALTER SCHEMA',\n 'ALTER USER',\n 'ANALYSE',\n 'ANALYZE',\n 'ANALYSE COMPRESSION',\n 'ANALYZE COMPRESSION',\n 'BEGIN',\n 'CALL',\n 'CANCEL',\n 'CLOSE',\n 'COMMIT',\n 'COPY',\n 'CREATE DATABASE',\n 'CREATE DATASHARE',\n 'CREATE EXTERNAL FUNCTION',\n 'CREATE EXTERNAL SCHEMA',\n 'CREATE EXTERNAL TABLE',\n 'CREATE FUNCTION',\n 'CREATE GROUP',\n 'CREATE LIBRARY',\n 'CREATE MODEL',\n 'CREATE PROCEDURE',\n 'CREATE SCHEMA',\n 'CREATE USER',\n 'DEALLOCATE',\n 'DECLARE',\n 'DESC DATASHARE',\n 'DROP DATABASE',\n 'DROP DATASHARE',\n 'DROP FUNCTION',\n 'DROP GROUP',\n 'DROP LIBRARY',\n 'DROP MODEL',\n 'DROP MATERIALIZED VIEW',\n 'DROP PROCEDURE',\n 'DROP SCHEMA',\n 'DROP USER',\n 'DROP VIEW',\n 'DROP',\n 'EXECUTE',\n 'EXPLAIN',\n 'FETCH',\n 'GRANT',\n 'LOCK',\n 'PREPARE',\n 'REFRESH MATERIALIZED VIEW',\n 'RESET',\n 'REVOKE',\n 'ROLLBACK',\n 'SELECT INTO',\n 'SET SESSION AUTHORIZATION',\n 'SET SESSION CHARACTERISTICS',\n 'SHOW',\n 'SHOW EXTERNAL TABLE',\n 'SHOW MODEL',\n 'SHOW DATASHARES',\n 'SHOW PROCEDURE',\n 'SHOW TABLE',\n 'SHOW VIEW',\n 'START TRANSACTION',\n 'UNLOAD',\n 'VACUUM',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT', 'MINUS']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html\n 'NULL AS',\n // https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html\n 'DATA CATALOG',\n 'HIVE METASTORE',\n // in window specifications\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html\nexport const redshift: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n stringTypes: [\"''-qq\"],\n identTypes: [`\"\"-qq`],\n identChars: { first: '#' },\n paramTypes: { numbered: ['$'] },\n operators: [\n '^',\n '%',\n '@',\n '|/',\n '||/',\n '&',\n '|',\n // '#', conflicts with first char of identifier\n '~',\n '<<',\n '>>',\n '||',\n '::',\n ],\n },\n formatOptions: {\n alwaysDenseOperators: ['::'],\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://deepkb.com/CO_000013/en/kb/IMPORT-fbfa59f0-2bf1-31fe-bb7b-0f9efe9932c6/spark-sql-keywords\n all: [\n 'ADD',\n 'AFTER',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANTI',\n 'ANY',\n 'ARCHIVE',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AT',\n 'AUTHORIZATION',\n 'BETWEEN',\n 'BOTH',\n 'BUCKET',\n 'BUCKETS',\n 'BY',\n 'CACHE',\n 'CASCADE',\n 'CAST',\n 'CHANGE',\n 'CHECK',\n 'CLEAR',\n 'CLUSTER',\n 'CLUSTERED',\n 'CODEGEN',\n 'COLLATE',\n 'COLLECTION',\n 'COLUMN',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'COMPACT',\n 'COMPACTIONS',\n 'COMPUTE',\n 'CONCATENATE',\n 'CONSTRAINT',\n 'COST',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'DATA',\n 'DATABASE',\n 'DATABASES',\n 'DAY',\n 'DBPROPERTIES',\n 'DEFINED',\n 'DELETE',\n 'DELIMITED',\n 'DESC',\n 'DESCRIBE',\n 'DFS',\n 'DIRECTORIES',\n 'DIRECTORY',\n 'DISTINCT',\n 'DISTRIBUTE',\n 'DIV',\n 'DROP',\n 'ESCAPE',\n 'ESCAPED',\n 'EXCEPT',\n 'EXCHANGE',\n 'EXISTS',\n 'EXPORT',\n 'EXTENDED',\n 'EXTERNAL',\n 'EXTRACT',\n 'FALSE',\n 'FETCH',\n 'FIELDS',\n 'FILTER',\n 'FILEFORMAT',\n 'FIRST',\n 'FIRST_VALUE',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FORMAT',\n 'FORMATTED',\n 'FULL',\n 'FUNCTION',\n 'FUNCTIONS',\n 'GLOBAL',\n 'GRANT',\n 'GROUP',\n 'GROUPING',\n 'HOUR',\n 'IF',\n 'IGNORE',\n 'IMPORT',\n 'IN',\n 'INDEX',\n 'INDEXES',\n 'INNER',\n 'INPATH',\n 'INPUTFORMAT',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'ITEMS',\n 'KEYS',\n 'LAST',\n 'LAST_VALUE',\n 'LATERAL',\n 'LAZY',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LINES',\n 'LIST',\n 'LOCAL',\n 'LOCATION',\n 'LOCK',\n 'LOCKS',\n 'LOGICAL',\n 'MACRO',\n 'MAP',\n 'MATCHED',\n 'MERGE',\n 'MINUTE',\n 'MONTH',\n 'MSCK',\n 'NAMESPACE',\n 'NAMESPACES',\n 'NATURAL',\n 'NO',\n 'NOT',\n 'NULL',\n 'NULLS',\n 'OF',\n 'ONLY',\n 'OPTION',\n 'OPTIONS',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OUTPUTFORMAT',\n 'OVER',\n 'OVERLAPS',\n 'OVERLAY',\n 'OVERWRITE',\n 'OWNER',\n 'PARTITION',\n 'PARTITIONED',\n 'PARTITIONS',\n 'PERCENT',\n 'PLACING',\n 'POSITION',\n 'PRECEDING',\n 'PRIMARY',\n 'PRINCIPALS',\n 'PROPERTIES',\n 'PURGE',\n 'QUERY',\n 'RANGE',\n 'RECORDREADER',\n 'RECORDWRITER',\n 'RECOVER',\n 'REDUCE',\n 'REFERENCES',\n 'RENAME',\n 'REPAIR',\n 'REPLACE',\n 'RESPECT',\n 'RESTRICT',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROLE',\n 'ROLES',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SCHEMA',\n 'SECOND',\n 'SELECT',\n 'SEMI',\n 'SEPARATED',\n 'SERDE',\n 'SERDEPROPERTIES',\n 'SESSION_USER',\n 'SETS',\n 'SHOW',\n 'SKEWED',\n 'SOME',\n 'SORT',\n 'SORTED',\n 'START',\n 'STATISTICS',\n 'STORED',\n 'STRATIFY',\n 'STRUCT',\n 'SUBSTR',\n 'SUBSTRING',\n 'TABLE',\n 'TABLES',\n 'TBLPROPERTIES',\n 'TEMPORARY',\n 'TERMINATED',\n 'THEN',\n 'TO',\n 'TOUCH',\n 'TRAILING',\n 'TRANSACTION',\n 'TRANSACTIONS',\n 'TRIM',\n 'TRUE',\n 'TRUNCATE',\n 'UNARCHIVE',\n 'UNBOUNDED',\n 'UNCACHE',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNLOCK',\n 'UNSET',\n 'USE',\n 'USER',\n 'USING',\n 'VIEW',\n 'WINDOW',\n 'YEAR',\n // other\n 'ANALYSE',\n 'ARRAY_ZIP',\n 'COALESCE',\n 'CONTAINS',\n 'CONVERT',\n 'DAYS',\n 'DAY_HOUR',\n 'DAY_MINUTE',\n 'DAY_SECOND',\n 'DECODE',\n 'DEFAULT',\n 'DISTINCTROW',\n 'ENCODE',\n 'EXPLODE',\n 'EXPLODE_OUTER',\n 'FIXED',\n 'GREATEST',\n 'GROUP_CONCAT',\n 'HOURS',\n 'HOUR_MINUTE',\n 'HOUR_SECOND',\n 'IFNULL',\n 'LEAST',\n 'LEVEL',\n 'MINUTE_SECOND',\n 'NULLIF',\n 'OFFSET',\n 'ON',\n 'OPTIMIZE',\n 'REGEXP',\n 'SEPARATOR',\n 'SIZE',\n 'STRING',\n 'TYPE',\n 'TYPES',\n 'UNSIGNED',\n 'VARIABLES',\n 'YEAR_MONTH',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // http://spark.apache.org/docs/latest/sql-ref-functions.html\n //\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#aggregate-functions\n aggregate: [\n // 'ANY',\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_PERCENTILE',\n 'AVG',\n 'BIT_AND',\n 'BIT_OR',\n 'BIT_XOR',\n 'BOOL_AND',\n 'BOOL_OR',\n 'COLLECT_LIST',\n 'COLLECT_SET',\n 'CORR',\n 'COUNT',\n 'COUNT',\n 'COUNT',\n 'COUNT_IF',\n 'COUNT_MIN_SKETCH',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'EVERY',\n 'FIRST',\n 'FIRST_VALUE',\n 'GROUPING',\n 'GROUPING_ID',\n 'KURTOSIS',\n 'LAST',\n 'LAST_VALUE',\n 'MAX',\n 'MAX_BY',\n 'MEAN',\n 'MIN',\n 'MIN_BY',\n 'PERCENTILE',\n 'PERCENTILE',\n 'PERCENTILE_APPROX',\n 'SKEWNESS',\n // 'SOME',\n 'STD',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n ],\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#window-functions\n window: [\n 'CUME_DIST',\n 'DENSE_RANK',\n 'LAG',\n 'LEAD',\n 'NTH_VALUE',\n 'NTILE',\n 'PERCENT_RANK',\n 'RANK',\n 'ROW_NUMBER',\n ],\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#array-functions\n array: [\n 'ARRAY',\n 'ARRAY_CONTAINS',\n 'ARRAY_DISTINCT',\n 'ARRAY_EXCEPT',\n 'ARRAY_INTERSECT',\n 'ARRAY_JOIN',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_POSITION',\n 'ARRAY_REMOVE',\n 'ARRAY_REPEAT',\n 'ARRAY_UNION',\n 'ARRAYS_OVERLAP',\n 'ARRAYS_ZIP',\n 'FLATTEN',\n 'SEQUENCE',\n 'SHUFFLE',\n 'SLICE',\n 'SORT_ARRAY',\n ],\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#map-functions\n map: [\n 'ELEMENT_AT',\n 'ELEMENT_AT',\n 'MAP',\n 'MAP_CONCAT',\n 'MAP_ENTRIES',\n 'MAP_FROM_ARRAYS',\n 'MAP_FROM_ENTRIES',\n 'MAP_KEYS',\n 'MAP_VALUES',\n 'STR_TO_MAP',\n ],\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#date-and-timestamp-functions\n datetime: [\n 'ADD_MONTHS',\n 'CURRENT_DATE',\n 'CURRENT_DATE',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'DATE_ADD',\n 'DATE_FORMAT',\n 'DATE_FROM_UNIX_DATE',\n 'DATE_PART',\n 'DATE_SUB',\n 'DATE_TRUNC',\n 'DATEDIFF',\n 'DAY',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'EXTRACT',\n 'FROM_UNIXTIME',\n 'FROM_UTC_TIMESTAMP',\n 'HOUR',\n 'LAST_DAY',\n 'MAKE_DATE',\n 'MAKE_DT_INTERVAL',\n 'MAKE_INTERVAL',\n 'MAKE_TIMESTAMP',\n 'MAKE_YM_INTERVAL',\n 'MINUTE',\n 'MONTH',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'NOW',\n 'QUARTER',\n 'SECOND',\n 'SESSION_WINDOW',\n 'TIMESTAMP_MICROS',\n 'TIMESTAMP_MILLIS',\n 'TIMESTAMP_SECONDS',\n 'TO_DATE',\n 'TO_TIMESTAMP',\n 'TO_UNIX_TIMESTAMP',\n 'TO_UTC_TIMESTAMP',\n 'TRUNC',\n 'UNIX_DATE',\n 'UNIX_MICROS',\n 'UNIX_MILLIS',\n 'UNIX_SECONDS',\n 'UNIX_TIMESTAMP',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'WINDOW',\n 'YEAR',\n ],\n // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#json-functions\n json: [\n 'FROM_JSON',\n 'GET_JSON_OBJECT',\n 'JSON_ARRAY_LENGTH',\n 'JSON_OBJECT_KEYS',\n 'JSON_TUPLE',\n 'SCHEMA_OF_JSON',\n 'TO_JSON',\n ],\n // http://spark.apache.org/docs/latest/api/sql/index.html\n misc: [\n 'ABS',\n 'ACOS',\n 'ACOSH',\n 'AGGREGATE',\n 'ARRAY_SORT',\n 'ASCII',\n 'ASIN',\n 'ASINH',\n 'ASSERT_TRUE',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'BASE64',\n 'BIGINT',\n 'BIN',\n 'BINARY',\n 'BIT_COUNT',\n 'BIT_GET',\n 'BIT_LENGTH',\n 'BOOLEAN',\n 'BROUND',\n 'BTRIM',\n 'CARDINALITY',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'CHAR',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CHR',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONV',\n 'COS',\n 'COSH',\n 'COT',\n 'CRC32',\n 'CURRENT_CATALOG',\n 'CURRENT_DATABASE',\n 'CURRENT_USER',\n 'DATE',\n 'DECIMAL',\n 'DEGREES',\n 'DOUBLE',\n // 'E',\n 'ELT',\n 'EXP',\n 'EXPM1',\n 'FACTORIAL',\n 'FIND_IN_SET',\n 'FLOAT',\n 'FLOOR',\n 'FORALL',\n 'FORMAT_NUMBER',\n 'FORMAT_STRING',\n 'FROM_CSV',\n 'GETBIT',\n 'HASH',\n 'HEX',\n 'HYPOT',\n 'INITCAP',\n 'INLINE',\n 'INLINE_OUTER',\n 'INPUT_FILE_BLOCK_LENGTH',\n 'INPUT_FILE_BLOCK_START',\n 'INPUT_FILE_NAME',\n 'INSTR',\n 'INT',\n 'ISNAN',\n 'ISNOTNULL',\n 'ISNULL',\n 'JAVA_METHOD',\n 'LCASE',\n 'LEFT',\n 'LENGTH',\n 'LEVENSHTEIN',\n 'LN',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG1P',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAP_FILTER',\n 'MAP_ZIP_WITH',\n 'MD5',\n 'MOD',\n 'MONOTONICALLY_INCREASING_ID',\n 'NAMED_STRUCT',\n 'NANVL',\n 'NEGATIVE',\n 'NVL',\n 'NVL2',\n 'OCTET_LENGTH',\n 'OVERLAY',\n 'PARSE_URL',\n 'PI',\n 'PMOD',\n 'POSEXPLODE',\n 'POSEXPLODE_OUTER',\n 'POSITION',\n 'POSITIVE',\n 'POW',\n 'POWER',\n 'PRINTF',\n 'RADIANS',\n 'RAISE_ERROR',\n 'RAND',\n 'RANDN',\n 'RANDOM',\n 'REFLECT',\n 'REGEXP_EXTRACT',\n 'REGEXP_EXTRACT_ALL',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RINT',\n 'ROUND',\n 'RPAD',\n 'RTRIM',\n 'SCHEMA_OF_CSV',\n 'SENTENCES',\n 'SHA',\n 'SHA1',\n 'SHA2',\n 'SHIFTLEFT',\n 'SHIFTRIGHT',\n 'SHIFTRIGHTUNSIGNED',\n 'SIGN',\n 'SIGNUM',\n 'SIN',\n 'SINH',\n 'SMALLINT',\n 'SOUNDEX',\n 'SPACE',\n 'SPARK_PARTITION_ID',\n 'SPLIT',\n 'SQRT',\n 'STACK',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUBSTRING_INDEX',\n 'TAN',\n 'TANH',\n 'TIMESTAMP',\n 'TINYINT',\n 'TO_CSV',\n 'TRANSFORM_KEYS',\n 'TRANSFORM_VALUES',\n 'TRANSLATE',\n 'TRIM',\n 'TRY_ADD',\n 'TRY_DIVIDE',\n 'TYPEOF',\n 'UCASE',\n 'UNBASE64',\n 'UNHEX',\n 'UPPER',\n 'UUID',\n 'VERSION',\n 'WIDTH_BUCKET',\n 'XPATH',\n 'XPATH_BOOLEAN',\n 'XPATH_DOUBLE',\n 'XPATH_FLOAT',\n 'XPATH_INT',\n 'XPATH_LONG',\n 'XPATH_NUMBER',\n 'XPATH_SHORT',\n 'XPATH_STRING',\n 'XXHASH64',\n 'ZIP_WITH',\n ],\n cast: ['CAST'],\n // Shorthand functions to use in place of CASE expression\n caseAbbrev: ['COALESCE', 'NULLIF'],\n // Parameterized data types\n // https://spark.apache.org/docs/latest/sql-ref-datatypes.html\n dataTypes: [\n 'DECIMAL',\n 'DEC',\n 'NUMERIC',\n // No varchar type in Spark, only STRING. Added for the sake of tests\n 'VARCHAR',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { EOF_TOKEN, isToken, Token, TokenType } from '../../lexer/token.js';\nimport { keywords } from './spark.keywords.js';\nimport { functions } from './spark.functions.js';\n\n// http://spark.apache.org/docs/latest/sql-ref-syntax.html\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'SORT BY',\n 'CLUSTER BY',\n 'DISTRIBUTE BY',\n 'LIMIT',\n // Data manipulation\n // - insert:\n 'INSERT [INTO | OVERWRITE] [TABLE]',\n 'VALUES',\n // - insert overwrite directory:\n // https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-overwrite-directory.html\n 'INSERT OVERWRITE [LOCAL] DIRECTORY',\n // - load:\n // https://spark.apache.org/docs/latest/sql-ref-syntax-dml-load.html\n 'LOAD DATA [LOCAL] INPATH',\n '[OVERWRITE] INTO TABLE',\n // Data definition\n 'CREATE [OR REPLACE] [GLOBAL TEMPORARY | TEMPORARY] VIEW [IF NOT EXISTS]',\n 'CREATE [EXTERNAL] TABLE [IF NOT EXISTS]',\n]);\n\nconst onelineClauses = expandPhrases([\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD COLUMNS',\n 'DROP {COLUMN | COLUMNS}',\n 'RENAME TO',\n 'RENAME COLUMN',\n 'ALTER COLUMN',\n // - truncate:\n 'TRUNCATE TABLE',\n // other\n 'LATERAL VIEW',\n 'ALTER DATABASE',\n 'ALTER VIEW',\n 'CREATE DATABASE',\n 'CREATE FUNCTION',\n 'DROP DATABASE',\n 'DROP FUNCTION',\n 'DROP VIEW',\n 'REPAIR TABLE',\n 'USE DATABASE',\n // Data Retrieval\n 'TABLESAMPLE',\n 'PIVOT',\n 'TRANSFORM',\n 'EXPLAIN',\n // Auxiliary\n 'ADD FILE',\n 'ADD JAR',\n 'ANALYZE TABLE',\n 'CACHE TABLE',\n 'CLEAR CACHE',\n 'DESCRIBE DATABASE',\n 'DESCRIBE FUNCTION',\n 'DESCRIBE QUERY',\n 'DESCRIBE TABLE',\n 'LIST FILE',\n 'LIST JAR',\n 'REFRESH',\n 'REFRESH TABLE',\n 'REFRESH FUNCTION',\n 'RESET',\n 'SHOW COLUMNS',\n 'SHOW CREATE TABLE',\n 'SHOW DATABASES',\n 'SHOW FUNCTIONS',\n 'SHOW PARTITIONS',\n 'SHOW TABLE EXTENDED',\n 'SHOW TABLES',\n 'SHOW TBLPROPERTIES',\n 'SHOW VIEWS',\n 'UNCACHE TABLE',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n // non-standard-joins\n '[LEFT] {ANTI | SEMI} JOIN',\n 'NATURAL [LEFT] {ANTI | SEMI} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'CURRENT ROW',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// http://spark.apache.org/docs/latest/sql-programming-guide.html\nexport const spark: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n supportsXor: true,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n extraParens: ['[]'],\n stringTypes: [\n \"''-bs\",\n '\"\"-bs',\n { quote: \"''-raw\", prefixes: ['R', 'X'], requirePrefix: true },\n { quote: '\"\"-raw', prefixes: ['R', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n variableTypes: [{ quote: '{}', prefixes: ['$'], requirePrefix: true }],\n operators: ['%', '~', '^', '|', '&', '<=>', '==', '!', '||', '->'],\n postProcess,\n },\n formatOptions: {\n onelineClauses,\n },\n};\n\nfunction postProcess(tokens: Token[]) {\n return tokens.map((token, i) => {\n const prevToken = tokens[i - 1] || EOF_TOKEN;\n const nextToken = tokens[i + 1] || EOF_TOKEN;\n\n // [WINDOW](...)\n if (isToken.WINDOW(token) && nextToken.type === TokenType.OPEN_PAREN) {\n // This is a function call, treat it as a reserved function name\n return { ...token, type: TokenType.RESERVED_FUNCTION_NAME };\n }\n\n // TODO: deprecate this once ITEMS is merged with COLLECTION\n if (token.text === 'ITEMS' && token.type === TokenType.RESERVED_KEYWORD) {\n if (!(prevToken.text === 'COLLECTION' && nextToken.text === 'TERMINATED')) {\n // this is a word and not COLLECTION ITEMS\n return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n }\n }\n\n return token;\n });\n}\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://www.sqlite.org/lang_corefunc.html\n scalar: [\n 'ABS',\n 'CHANGES',\n 'CHAR',\n 'COALESCE',\n 'FORMAT',\n 'GLOB',\n 'HEX',\n 'IFNULL',\n 'IIF',\n 'INSTR',\n 'LAST_INSERT_ROWID',\n 'LENGTH',\n 'LIKE',\n 'LIKELIHOOD',\n 'LIKELY',\n 'LOAD_EXTENSION',\n 'LOWER',\n 'LTRIM',\n 'NULLIF',\n 'PRINTF',\n 'QUOTE',\n 'RANDOM',\n 'RANDOMBLOB',\n 'REPLACE',\n 'ROUND',\n 'RTRIM',\n 'SIGN',\n 'SOUNDEX',\n 'SQLITE_COMPILEOPTION_GET',\n 'SQLITE_COMPILEOPTION_USED',\n 'SQLITE_OFFSET',\n 'SQLITE_SOURCE_ID',\n 'SQLITE_VERSION',\n 'SUBSTR',\n 'SUBSTRING',\n 'TOTAL_CHANGES',\n 'TRIM',\n 'TYPEOF',\n 'UNICODE',\n 'UNLIKELY',\n 'UPPER',\n 'ZEROBLOB',\n ],\n // https://www.sqlite.org/lang_aggfunc.html\n aggregate: ['AVG', 'COUNT', 'GROUP_CONCAT', 'MAX', 'MIN', 'SUM', 'TOTAL'],\n // https://www.sqlite.org/lang_datefunc.html\n datetime: ['DATE', 'TIME', 'DATETIME', 'JULIANDAY', 'UNIXEPOCH', 'STRFTIME'],\n // https://www.sqlite.org/windowfunctions.html#biwinfunc\n window: [\n 'row_number',\n 'rank',\n 'dense_rank',\n 'percent_rank',\n 'cume_dist',\n 'ntile',\n 'lag',\n 'lead',\n 'first_value',\n 'last_value',\n 'nth_value',\n ],\n // https://www.sqlite.org/lang_mathfunc.html\n math: [\n 'ACOS',\n 'ACOSH',\n 'ASIN',\n 'ASINH',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'CEIL',\n 'CEILING',\n 'COS',\n 'COSH',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'MOD',\n 'PI',\n 'POW',\n 'POWER',\n 'RADIANS',\n 'SIN',\n 'SINH',\n 'SQRT',\n 'TAN',\n 'TANH',\n 'TRUNC',\n ],\n // https://www.sqlite.org/json1.html\n json: [\n 'JSON',\n 'JSON_ARRAY',\n 'JSON_ARRAY_LENGTH',\n 'JSON_ARRAY_LENGTH',\n 'JSON_EXTRACT',\n 'JSON_INSERT',\n 'JSON_OBJECT',\n 'JSON_PATCH',\n 'JSON_REMOVE',\n 'JSON_REPLACE',\n 'JSON_SET',\n 'JSON_TYPE',\n 'JSON_TYPE',\n 'JSON_VALID',\n 'JSON_QUOTE',\n 'JSON_GROUP_ARRAY',\n 'JSON_GROUP_OBJECT',\n 'JSON_EACH',\n 'JSON_TREE',\n ],\n cast: ['CAST'],\n // SQLite allows parameters for all data types\n // Well, in fact it allows any word as a data type, e.g. CREATE TABLE foo (col1 madeupname(123));\n // https://www.sqlite.org/datatype3.html\n dataTypes: [\n 'CHARACTER',\n 'VARCHAR',\n 'VARYING CHARACTER',\n 'NCHAR',\n 'NATIVE CHARACTER',\n 'NVARCHAR',\n 'NUMERIC',\n 'DECIMAL',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://www.sqlite.org/lang_keywords.html\n all: [\n 'ABORT',\n 'ACTION',\n 'ADD',\n 'AFTER',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ANY',\n 'ARE',\n 'ARRAY',\n 'ALWAYS',\n 'ANALYZE',\n 'AS',\n 'ASC',\n 'ATTACH',\n 'AUTOINCREMENT',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BY',\n 'CASCADE',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'COMMIT',\n 'CONFLICT',\n 'CONSTRAINT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'DATABASE',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFERRED',\n 'DELETE',\n 'DESC',\n 'DETACH',\n 'DISTINCT',\n 'DO',\n 'DROP',\n 'EACH',\n 'ELSE',\n 'END',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCLUDE',\n 'EXCLUSIVE',\n 'EXISTS',\n 'EXPLAIN',\n 'FAIL',\n 'FILTER',\n 'FIRST',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FROM',\n 'FULL',\n 'GENERATED',\n 'GLOB',\n 'GROUP',\n 'GROUPS',\n 'HAVING',\n 'IF',\n 'IGNORE',\n 'IMMEDIATE',\n 'IN',\n 'INDEX',\n 'INDEXED',\n 'INITIALLY',\n 'INNER',\n 'INSERT',\n 'INSTEAD',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'JOIN',\n 'KEY',\n 'LAST',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'MATCH',\n 'MATERIALIZED',\n 'NATURAL',\n 'NO',\n 'NOT',\n 'NOTHING',\n 'NOTNULL',\n 'NULL',\n 'NULLS',\n 'OF',\n 'OFFSET',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OR',\n 'ORDER',\n 'OTHERS',\n 'OUTER',\n 'OVER',\n 'PARTITION',\n 'PLAN',\n 'PRAGMA',\n 'PRECEDING',\n 'PRIMARY',\n 'QUERY',\n 'RAISE',\n 'RANGE',\n 'RECURSIVE',\n 'REFERENCES',\n 'REGEXP',\n 'REINDEX',\n 'RELEASE',\n 'RENAME',\n 'REPLACE',\n 'RESTRICT',\n 'RETURNING',\n 'RIGHT',\n 'ROLLBACK',\n 'ROW',\n 'ROWS',\n 'SAVEPOINT',\n 'SELECT',\n 'SET',\n 'TABLE',\n 'TEMP',\n 'TEMPORARY',\n 'THEN',\n 'TIES',\n 'TO',\n 'TRANSACTION',\n 'TRIGGER',\n 'UNBOUNDED',\n 'UNION',\n 'UNIQUE',\n 'UPDATE',\n 'USING',\n 'VACUUM',\n 'VALUES',\n 'VIEW',\n 'VIRTUAL',\n 'WHEN',\n 'WHERE',\n 'WINDOW',\n 'WITH',\n 'WITHOUT',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sqlite.functions.js';\nimport { keywords } from './sqlite.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK] INTO',\n 'REPLACE INTO',\n 'VALUES',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [TEMPORARY | TEMP] VIEW [IF NOT EXISTS]',\n 'CREATE [TEMPORARY | TEMP] TABLE [IF NOT EXISTS]',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE [OR ABORT | OR FAIL | OR IGNORE | OR REPLACE | OR ROLLBACK]',\n // - insert:\n 'ON CONFLICT',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD [COLUMN]',\n 'DROP [COLUMN]',\n 'RENAME [COLUMN]',\n 'RENAME TO',\n // - set schema\n 'SET SCHEMA',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\n// joins - https://www.sqlite.org/syntax/join-operator.html\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n '{ROWS | RANGE | GROUPS} BETWEEN',\n]);\n\nexport const sqlite: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n stringTypes: [\n \"''-qq\",\n { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n // Depending on context SQLite also supports double-quotes for strings,\n // and single-quotes for identifiers.\n ],\n identTypes: [`\"\"-qq`, '``', '[]'],\n // https://www.sqlite.org/lang_expr.html#parameters\n paramTypes: { positional: true, numbered: ['?'], named: [':', '@', '$'] },\n operators: ['%', '~', '&', '|', '<<', '>>', '==', '->', '->>', '||'],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_9_set_function_specification\n set: ['GROUPING'],\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_10_window_function\n window: ['RANK', 'DENSE_RANK', 'PERCENT_RANK', 'CUME_DIST', 'ROW_NUMBER'],\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_27_numeric_value_function\n numeric: [\n 'POSITION',\n 'OCCURRENCES_REGEX',\n 'POSITION_REGEX',\n 'EXTRACT',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'OCTET_LENGTH',\n 'CARDINALITY',\n 'ABS',\n 'MOD',\n 'LN',\n 'EXP',\n 'POWER',\n 'SQRT',\n 'FLOOR',\n 'CEIL',\n 'CEILING',\n 'WIDTH_BUCKET',\n ],\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_29_string_value_function\n string: [\n 'SUBSTRING',\n 'SUBSTRING_REGEX',\n 'UPPER',\n 'LOWER',\n 'CONVERT',\n 'TRANSLATE',\n 'TRANSLATE_REGEX',\n 'TRIM',\n 'OVERLAY',\n 'NORMALIZE',\n 'SPECIFICTYPE',\n ],\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_31_datetime_value_function\n datetime: ['CURRENT_DATE', 'CURRENT_TIME', 'LOCALTIME', 'CURRENT_TIMESTAMP', 'LOCALTIMESTAMP'],\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_38_multiset_value_function\n // SET serves multiple roles: a SET() function and a SET keyword e.g. in UPDATE table SET ...\n // multiset: ['SET'], (disabled for now)\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_10_9_aggregate_function\n aggregate: [\n 'COUNT',\n 'AVG',\n 'MAX',\n 'MIN',\n 'SUM',\n // 'EVERY',\n // 'ANY',\n // 'SOME',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'VAR_SAMP',\n 'VAR_POP',\n 'COLLECT',\n 'FUSION',\n 'INTERSECTION',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CORR',\n 'REGR_SLOPE',\n 'REGR_INTERCEPT',\n 'REGR_COUNT',\n 'REGR_R2',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_SXX',\n 'REGR_SYY',\n 'REGR_SXY',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n ],\n // CAST is a pretty complex case, involving multiple forms:\n // - CAST(col AS int)\n // - CAST(...) WITH ...\n // - CAST FROM int\n // - CREATE CAST(mycol AS int) WITH ...\n cast: ['CAST'],\n // Shorthand functions to use in place of CASE expression\n caseAbbrev: ['COALESCE', 'NULLIF'],\n // Non-standard functions that have widespread support\n nonStandard: ['ROUND', 'SIN', 'COS', 'TAN', 'ASIN', 'ACOS', 'ATAN'],\n // Data types with parameters like VARCHAR(100)\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#predefined-type\n dataTypes: [\n 'CHARACTER',\n 'CHAR',\n 'CHARACTER VARYING',\n 'CHAR VARYING',\n 'VARCHAR',\n 'CHARACTER LARGE OBJECT',\n 'CHAR LARGE OBJECT',\n 'CLOB',\n 'NATIONAL CHARACTER',\n 'NATIONAL CHAR',\n 'NCHAR',\n 'NATIONAL CHARACTER VARYING',\n 'NATIONAL CHAR VARYING',\n 'NCHAR VARYING',\n 'NATIONAL CHARACTER LARGE OBJECT',\n 'NCHAR LARGE OBJECT',\n 'NCLOB',\n 'BINARY',\n 'BINARY VARYING',\n 'VARBINARY',\n 'BINARY LARGE OBJECT',\n 'BLOB',\n 'NUMERIC',\n 'DECIMAL',\n 'DEC',\n 'TIME',\n 'TIMESTAMP',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#reserved-word\n all: [\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'ANY', // <- moved over from functions\n 'ARE',\n 'ARRAY',\n 'AS',\n 'ASENSITIVE',\n 'ASYMMETRIC',\n 'AT',\n 'ATOMIC',\n 'AUTHORIZATION',\n 'BEGIN',\n 'BETWEEN',\n 'BIGINT',\n 'BINARY',\n 'BLOB',\n 'BOOLEAN',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CALLED',\n 'CASCADED',\n 'CAST',\n 'CHAR',\n 'CHARACTER',\n 'CHECK',\n 'CLOB',\n 'CLOSE',\n 'COALESCE',\n 'COLLATE',\n 'COLUMN',\n 'COMMIT',\n 'CONDITION',\n 'CONNECT',\n 'CONSTRAINT',\n 'CORRESPONDING',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_CATALOG',\n 'CURRENT_DEFAULT_TRANSFORM_GROUP',\n 'CURRENT_PATH',\n 'CURRENT_ROLE',\n 'CURRENT_SCHEMA',\n 'CURRENT_TRANSFORM_GROUP_FOR_TYPE',\n 'CURRENT_USER',\n 'CURSOR',\n 'CYCLE',\n 'DATE',\n 'DAY',\n 'DEALLOCATE',\n 'DEC',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DELETE',\n 'DEREF',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISCONNECT',\n 'DISTINCT',\n 'DOUBLE',\n 'DROP',\n 'DYNAMIC',\n 'EACH',\n 'ELEMENT',\n 'END-EXEC',\n 'ESCAPE',\n 'EVERY', // <- moved over from functions\n 'EXCEPT',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXTERNAL',\n 'FALSE',\n 'FETCH',\n 'FILTER',\n 'FLOAT',\n 'FOR',\n 'FOREIGN',\n 'FREE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GET',\n 'GLOBAL',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HOLD',\n 'HOUR',\n 'IDENTITY',\n 'IN',\n 'INDICATOR',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INT',\n 'INTEGER',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'LANGUAGE',\n 'LARGE',\n 'LATERAL',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LIKE_REGEX',\n 'LOCAL',\n 'MATCH',\n 'MEMBER',\n 'MERGE',\n 'METHOD',\n 'MINUTE',\n 'MODIFIES',\n 'MODULE',\n 'MONTH',\n 'MULTISET',\n 'NATIONAL',\n 'NATURAL',\n 'NCHAR',\n 'NCLOB',\n 'NEW',\n 'NO',\n 'NONE',\n 'NOT',\n 'NULL',\n 'NULLIF',\n 'NUMERIC',\n 'OF',\n 'OLD',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'OVERLAPS',\n 'PARAMETER',\n 'PARTITION',\n 'PRECISION',\n 'PREPARE',\n 'PRIMARY',\n 'PROCEDURE',\n 'RANGE',\n 'READS',\n 'REAL',\n 'RECURSIVE',\n 'REF',\n 'REFERENCES',\n 'REFERENCING',\n 'RELEASE',\n 'RESULT',\n 'RETURN',\n 'RETURNS',\n 'REVOKE',\n 'RIGHT',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SAVEPOINT',\n 'SCOPE',\n 'SCROLL',\n 'SEARCH',\n 'SECOND',\n 'SELECT',\n 'SENSITIVE',\n 'SESSION_USER',\n 'SET',\n 'SIMILAR',\n 'SMALLINT',\n 'SOME', // <- moved over from functions\n 'SPECIFIC',\n 'SQL',\n 'SQLEXCEPTION',\n 'SQLSTATE',\n 'SQLWARNING',\n 'START',\n 'STATIC',\n 'SUBMULTISET',\n 'SYMMETRIC',\n 'SYSTEM',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESAMPLE',\n 'THEN',\n 'TIME',\n 'TIMESTAMP',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO',\n 'TRAILING',\n 'TRANSLATION',\n 'TREAT',\n 'TRIGGER',\n 'TRUE',\n 'UESCAPE',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNNEST',\n 'UPDATE',\n 'USER',\n 'USING',\n 'VALUE',\n 'VALUES',\n 'VARBINARY',\n 'VARCHAR',\n 'VARYING',\n 'WHENEVER',\n 'WINDOW',\n 'WITHIN',\n 'WITHOUT',\n 'YEAR',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './sql.functions.js';\nimport { keywords } from './sql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY [ALL | DISTINCT]',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [RECURSIVE] VIEW',\n 'CREATE [GLOBAL TEMPORARY | LOCAL TEMPORARY] TABLE',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE',\n // - alter table:\n 'ALTER TABLE',\n 'ADD COLUMN',\n 'DROP [COLUMN]',\n 'RENAME COLUMN',\n 'RENAME TO',\n 'ALTER [COLUMN]',\n '{SET | DROP} DEFAULT', // for alter column\n 'ADD SCOPE', // for alter column\n 'DROP SCOPE {CASCADE | RESTRICT}', // for alter column\n 'RESTART WITH', // for alter column\n // - truncate:\n 'TRUNCATE TABLE',\n // other\n 'SET SCHEMA',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const sql: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n stringTypes: [\n { quote: \"''-qq-bs\", prefixes: ['N', 'U&'] },\n { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n ],\n identTypes: [`\"\"-qq`, '``'],\n paramTypes: { positional: true },\n operators: ['||'],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://github.com/trinodb/trino/tree/432d2897bdef99388c1a47188743a061c4ac1f34/docs/src/main/sphinx/functions\n // rg '^\\.\\. function::' ./docs/src/main/sphinx/functions | cut -d' ' -f 3 | cut -d '(' -f 1 | sort | uniq\n // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep '\\* :func:' | cut -d'`' -f 2\n // rg '\\* ' ./docs/src/main/sphinx/functions/list-by-topic.rst | grep -v '\\* :func:'\n // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep -e '^- :func:' | cut -d'`' -f2\n // grep -e '^- ' ./docs/src/main/sphinx/functions/list.rst | grep -ve '^- :func:'\n all: [\n 'ABS',\n 'ACOS',\n 'ALL_MATCH',\n 'ANY_MATCH',\n 'APPROX_DISTINCT',\n 'APPROX_MOST_FREQUENT',\n 'APPROX_PERCENTILE',\n 'APPROX_SET',\n 'ARBITRARY',\n 'ARRAYS_OVERLAP',\n 'ARRAY_AGG',\n 'ARRAY_DISTINCT',\n 'ARRAY_EXCEPT',\n 'ARRAY_INTERSECT',\n 'ARRAY_JOIN',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_POSITION',\n 'ARRAY_REMOVE',\n 'ARRAY_SORT',\n 'ARRAY_UNION',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AT_TIMEZONE',\n 'AVG',\n 'BAR',\n 'BETA_CDF',\n 'BING_TILE',\n 'BING_TILES_AROUND',\n 'BING_TILE_AT',\n 'BING_TILE_COORDINATES',\n 'BING_TILE_POLYGON',\n 'BING_TILE_QUADKEY',\n 'BING_TILE_ZOOM_LEVEL',\n 'BITWISE_AND',\n 'BITWISE_AND_AGG',\n 'BITWISE_LEFT_SHIFT',\n 'BITWISE_NOT',\n 'BITWISE_OR',\n 'BITWISE_OR_AGG',\n 'BITWISE_RIGHT_SHIFT',\n 'BITWISE_RIGHT_SHIFT_ARITHMETIC',\n 'BITWISE_XOR',\n 'BIT_COUNT',\n 'BOOL_AND',\n 'BOOL_OR',\n 'CARDINALITY',\n 'CAST',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'CHAR2HEXINT',\n 'CHECKSUM',\n 'CHR',\n 'CLASSIFY',\n 'COALESCE',\n 'CODEPOINT',\n 'COLOR',\n 'COMBINATIONS',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONTAINS',\n 'CONTAINS_SEQUENCE',\n 'CONVEX_HULL_AGG',\n 'CORR',\n 'COS',\n 'COSH',\n 'COSINE_SIMILARITY',\n 'COUNT',\n 'COUNT_IF',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CRC32',\n 'CUME_DIST',\n 'CURRENT_CATALOG',\n 'CURRENT_DATE',\n 'CURRENT_GROUPS',\n 'CURRENT_SCHEMA',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'CURRENT_USER',\n 'DATE',\n 'DATE_ADD',\n 'DATE_DIFF',\n 'DATE_FORMAT',\n 'DATE_PARSE',\n 'DATE_TRUNC',\n 'DAY',\n 'DAY_OF_MONTH',\n 'DAY_OF_WEEK',\n 'DAY_OF_YEAR',\n 'DEGREES',\n 'DENSE_RANK',\n 'DOW',\n 'DOY',\n 'E',\n 'ELEMENT_AT',\n 'EMPTY_APPROX_SET',\n 'EVALUATE_CLASSIFIER_PREDICTIONS',\n 'EVERY',\n 'EXP',\n 'EXTRACT',\n 'FEATURES',\n 'FILTER',\n 'FIRST_VALUE',\n 'FLATTEN',\n 'FLOOR',\n 'FORMAT',\n 'FORMAT_DATETIME',\n 'FORMAT_NUMBER',\n 'FROM_BASE',\n 'FROM_BASE32',\n 'FROM_BASE64',\n 'FROM_BASE64URL',\n 'FROM_BIG_ENDIAN_32',\n 'FROM_BIG_ENDIAN_64',\n 'FROM_ENCODED_POLYLINE',\n 'FROM_GEOJSON_GEOMETRY',\n 'FROM_HEX',\n 'FROM_IEEE754_32',\n 'FROM_IEEE754_64',\n 'FROM_ISO8601_DATE',\n 'FROM_ISO8601_TIMESTAMP',\n 'FROM_ISO8601_TIMESTAMP_NANOS',\n 'FROM_UNIXTIME',\n 'FROM_UNIXTIME_NANOS',\n 'FROM_UTF8',\n 'GEOMETRIC_MEAN',\n 'GEOMETRY_FROM_HADOOP_SHAPE',\n 'GEOMETRY_INVALID_REASON',\n 'GEOMETRY_NEAREST_POINTS',\n 'GEOMETRY_TO_BING_TILES',\n 'GEOMETRY_UNION',\n 'GEOMETRY_UNION_AGG',\n 'GREATEST',\n 'GREAT_CIRCLE_DISTANCE',\n 'HAMMING_DISTANCE',\n 'HASH_COUNTS',\n 'HISTOGRAM',\n 'HMAC_MD5',\n 'HMAC_SHA1',\n 'HMAC_SHA256',\n 'HMAC_SHA512',\n 'HOUR',\n 'HUMAN_READABLE_SECONDS',\n 'IF',\n 'INDEX',\n 'INFINITY',\n 'INTERSECTION_CARDINALITY',\n 'INVERSE_BETA_CDF',\n 'INVERSE_NORMAL_CDF',\n 'IS_FINITE',\n 'IS_INFINITE',\n 'IS_JSON_SCALAR',\n 'IS_NAN',\n 'JACCARD_INDEX',\n 'JSON_ARRAY_CONTAINS',\n 'JSON_ARRAY_GET',\n 'JSON_ARRAY_LENGTH',\n 'JSON_EXISTS',\n 'JSON_EXTRACT',\n 'JSON_EXTRACT_SCALAR',\n 'JSON_FORMAT',\n 'JSON_PARSE',\n 'JSON_QUERY',\n 'JSON_SIZE',\n 'JSON_VALUE',\n 'KURTOSIS',\n 'LAG',\n 'LAST_DAY_OF_MONTH',\n 'LAST_VALUE',\n 'LEAD',\n 'LEARN_CLASSIFIER',\n 'LEARN_LIBSVM_CLASSIFIER',\n 'LEARN_LIBSVM_REGRESSOR',\n 'LEARN_REGRESSOR',\n 'LEAST',\n 'LENGTH',\n 'LEVENSHTEIN_DISTANCE',\n 'LINE_INTERPOLATE_POINT',\n 'LINE_INTERPOLATE_POINTS',\n 'LINE_LOCATE_POINT',\n 'LISTAGG',\n 'LN',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'LUHN_CHECK',\n 'MAKE_SET_DIGEST',\n 'MAP',\n 'MAP_AGG',\n 'MAP_CONCAT',\n 'MAP_ENTRIES',\n 'MAP_FILTER',\n 'MAP_FROM_ENTRIES',\n 'MAP_KEYS',\n 'MAP_UNION',\n 'MAP_VALUES',\n 'MAP_ZIP_WITH',\n 'MAX',\n 'MAX_BY',\n 'MD5',\n 'MERGE',\n 'MERGE_SET_DIGEST',\n 'MILLISECOND',\n 'MIN',\n 'MINUTE',\n 'MIN_BY',\n 'MOD',\n 'MONTH',\n 'MULTIMAP_AGG',\n 'MULTIMAP_FROM_ENTRIES',\n 'MURMUR3',\n 'NAN',\n 'NGRAMS',\n 'NONE_MATCH',\n 'NORMALIZE',\n 'NORMAL_CDF',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'NUMERIC_HISTOGRAM',\n 'OBJECTID',\n 'OBJECTID_TIMESTAMP',\n 'PARSE_DATA_SIZE',\n 'PARSE_DATETIME',\n 'PARSE_DURATION',\n 'PERCENT_RANK',\n 'PI',\n 'POSITION',\n 'POW',\n 'POWER',\n 'QDIGEST_AGG',\n 'QUARTER',\n 'RADIANS',\n 'RAND',\n 'RANDOM',\n 'RANK',\n 'REDUCE',\n 'REDUCE_AGG',\n 'REGEXP_COUNT',\n 'REGEXP_EXTRACT',\n 'REGEXP_EXTRACT_ALL',\n 'REGEXP_LIKE',\n 'REGEXP_POSITION',\n 'REGEXP_REPLACE',\n 'REGEXP_SPLIT',\n 'REGRESS',\n 'REGR_INTERCEPT',\n 'REGR_SLOPE',\n 'RENDER',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RGB',\n 'ROUND',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'SECOND',\n 'SEQUENCE',\n 'SHA1',\n 'SHA256',\n 'SHA512',\n 'SHUFFLE',\n 'SIGN',\n 'SIMPLIFY_GEOMETRY',\n 'SIN',\n 'SKEWNESS',\n 'SLICE',\n 'SOUNDEX',\n 'SPATIAL_PARTITIONING',\n 'SPATIAL_PARTITIONS',\n 'SPLIT',\n 'SPLIT_PART',\n 'SPLIT_TO_MAP',\n 'SPLIT_TO_MULTIMAP',\n 'SPOOKY_HASH_V2_32',\n 'SPOOKY_HASH_V2_64',\n 'SQRT',\n 'STARTS_WITH',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRPOS',\n 'ST_AREA',\n 'ST_ASBINARY',\n 'ST_ASTEXT',\n 'ST_BOUNDARY',\n 'ST_BUFFER',\n 'ST_CENTROID',\n 'ST_CONTAINS',\n 'ST_CONVEXHULL',\n 'ST_COORDDIM',\n 'ST_CROSSES',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_ENDPOINT',\n 'ST_ENVELOPE',\n 'ST_ENVELOPEASPTS',\n 'ST_EQUALS',\n 'ST_EXTERIORRING',\n 'ST_GEOMETRIES',\n 'ST_GEOMETRYFROMTEXT',\n 'ST_GEOMETRYN',\n 'ST_GEOMETRYTYPE',\n 'ST_GEOMFROMBINARY',\n 'ST_INTERIORRINGN',\n 'ST_INTERIORRINGS',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_ISCLOSED',\n 'ST_ISEMPTY',\n 'ST_ISRING',\n 'ST_ISSIMPLE',\n 'ST_ISVALID',\n 'ST_LENGTH',\n 'ST_LINEFROMTEXT',\n 'ST_LINESTRING',\n 'ST_MULTIPOINT',\n 'ST_NUMGEOMETRIES',\n 'ST_NUMINTERIORRING',\n 'ST_NUMPOINTS',\n 'ST_OVERLAPS',\n 'ST_POINT',\n 'ST_POINTN',\n 'ST_POINTS',\n 'ST_POLYGON',\n 'ST_RELATE',\n 'ST_STARTPOINT',\n 'ST_SYMDIFFERENCE',\n 'ST_TOUCHES',\n 'ST_UNION',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_XMAX',\n 'ST_XMIN',\n 'ST_Y',\n 'ST_YMAX',\n 'ST_YMIN',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'TAN',\n 'TANH',\n 'TDIGEST_AGG',\n 'TIMESTAMP_OBJECTID',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO_BASE',\n 'TO_BASE32',\n 'TO_BASE64',\n 'TO_BASE64URL',\n 'TO_BIG_ENDIAN_32',\n 'TO_BIG_ENDIAN_64',\n 'TO_CHAR',\n 'TO_DATE',\n 'TO_ENCODED_POLYLINE',\n 'TO_GEOJSON_GEOMETRY',\n 'TO_GEOMETRY',\n 'TO_HEX',\n 'TO_IEEE754_32',\n 'TO_IEEE754_64',\n 'TO_ISO8601',\n 'TO_MILLISECONDS',\n 'TO_SPHERICAL_GEOGRAPHY',\n 'TO_TIMESTAMP',\n 'TO_UNIXTIME',\n 'TO_UTF8',\n 'TRANSFORM',\n 'TRANSFORM_KEYS',\n 'TRANSFORM_VALUES',\n 'TRANSLATE',\n 'TRIM',\n 'TRIM_ARRAY',\n 'TRUNCATE',\n 'TRY',\n 'TRY_CAST',\n 'TYPEOF',\n 'UPPER',\n 'URL_DECODE',\n 'URL_ENCODE',\n 'URL_EXTRACT_FRAGMENT',\n 'URL_EXTRACT_HOST',\n 'URL_EXTRACT_PARAMETER',\n 'URL_EXTRACT_PATH',\n 'URL_EXTRACT_PORT',\n 'URL_EXTRACT_PROTOCOL',\n 'URL_EXTRACT_QUERY',\n 'UUID',\n 'VALUES_AT_QUANTILES',\n 'VALUE_AT_QUANTILE',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VERSION',\n 'WEEK',\n 'WEEK_OF_YEAR',\n 'WIDTH_BUCKET',\n 'WILSON_INTERVAL_LOWER',\n 'WILSON_INTERVAL_UPPER',\n 'WITH_TIMEZONE',\n 'WORD_STEM',\n 'XXHASH64',\n 'YEAR',\n 'YEAR_OF_WEEK',\n 'YOW',\n 'ZIP',\n 'ZIP_WITH',\n ],\n // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-recognition-expressions\n rowPattern: ['CLASSIFIER', 'FIRST', 'LAST', 'MATCH_NUMBER', 'NEXT', 'PERMUTE', 'PREV'],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L858-L1128\n all: [\n 'ABSENT',\n 'ADD',\n 'ADMIN',\n 'AFTER',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARRAY',\n 'AS',\n 'ASC',\n 'AT',\n 'AUTHORIZATION',\n 'BERNOULLI',\n 'BETWEEN',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CASCADE',\n 'CASE',\n 'CATALOGS',\n 'COLUMN',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'COMMITTED',\n 'CONDITIONAL',\n 'CONSTRAINT',\n 'COPARTITION',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_PATH',\n 'CURRENT_ROLE',\n 'DATA',\n 'DEALLOCATE',\n 'DEFAULT',\n 'DEFINE',\n 'DEFINER',\n 'DELETE',\n 'DENY',\n 'DESC',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DISTINCT',\n 'DISTRIBUTED',\n 'DOUBLE',\n 'DROP',\n 'ELSE',\n 'EMPTY',\n 'ENCODING',\n 'END',\n 'ERROR',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCLUDING',\n 'EXECUTE',\n 'EXISTS',\n 'EXPLAIN',\n 'FALSE',\n 'FETCH',\n 'FINAL',\n 'FIRST',\n 'FOLLOWING',\n 'FOR',\n 'FROM',\n 'FULL',\n 'FUNCTIONS',\n 'GRANT',\n 'GRANTED',\n 'GRANTS',\n 'GRAPHVIZ',\n 'GROUP',\n 'GROUPING',\n 'GROUPS',\n 'HAVING',\n 'IGNORE',\n 'IN',\n 'INCLUDING',\n 'INITIAL',\n 'INNER',\n 'INPUT',\n 'INSERT',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'INVOKER',\n 'IO',\n 'IS',\n 'ISOLATION',\n 'JOIN',\n 'JSON',\n 'JSON_ARRAY',\n 'JSON_OBJECT',\n 'KEEP',\n 'KEY',\n 'KEYS',\n 'LAST',\n 'LATERAL',\n 'LEADING',\n 'LEFT',\n 'LEVEL',\n 'LIKE',\n 'LIMIT',\n 'LOCAL',\n 'LOGICAL',\n 'MATCH',\n 'MATCHED',\n 'MATCHES',\n 'MATCH_RECOGNIZE',\n 'MATERIALIZED',\n 'MEASURES',\n 'NATURAL',\n 'NEXT',\n 'NFC',\n 'NFD',\n 'NFKC',\n 'NFKD',\n 'NO',\n 'NONE',\n 'NOT',\n 'NULL',\n 'NULLS',\n 'OBJECT',\n 'OF',\n 'OFFSET',\n 'OMIT',\n 'ON',\n 'ONE',\n 'ONLY',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'ORDINALITY',\n 'OUTER',\n 'OUTPUT',\n 'OVER',\n 'OVERFLOW',\n 'PARTITION',\n 'PARTITIONS',\n 'PASSING',\n 'PAST',\n 'PATH',\n 'PATTERN',\n 'PER',\n 'PERMUTE',\n 'PRECEDING',\n 'PRECISION',\n 'PREPARE',\n 'PRIVILEGES',\n 'PROPERTIES',\n 'PRUNE',\n 'QUOTES',\n 'RANGE',\n 'READ',\n 'RECURSIVE',\n 'REFRESH',\n 'RENAME',\n 'REPEATABLE',\n 'RESET',\n 'RESPECT',\n 'RESTRICT',\n 'RETURNING',\n 'REVOKE',\n 'RIGHT',\n 'ROLE',\n 'ROLES',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'RUNNING',\n 'SCALAR',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECURITY',\n 'SEEK',\n 'SELECT',\n 'SERIALIZABLE',\n 'SESSION',\n 'SET',\n 'SETS',\n 'SHOW',\n 'SKIP',\n 'SOME',\n 'START',\n 'STATS',\n 'STRING',\n 'SUBSET',\n 'SYSTEM',\n 'TABLE',\n 'TABLES',\n 'TABLESAMPLE',\n 'TEXT',\n 'THEN',\n 'TIES',\n 'TIME',\n 'TIMESTAMP',\n 'TO',\n 'TRAILING',\n 'TRANSACTION',\n 'TRUE',\n 'TYPE',\n 'UESCAPE',\n 'UNBOUNDED',\n 'UNCOMMITTED',\n 'UNCONDITIONAL',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNMATCHED',\n 'UNNEST',\n 'UPDATE',\n 'USE',\n 'USER',\n 'USING',\n 'UTF16',\n 'UTF32',\n 'UTF8',\n 'VALIDATE',\n 'VALUE',\n 'VALUES',\n 'VERBOSE',\n 'VIEW',\n 'WHEN',\n 'WHERE',\n 'WINDOW',\n 'WITH',\n 'WITHIN',\n 'WITHOUT',\n 'WORK',\n 'WRAPPER',\n 'WRITE',\n 'ZONE',\n ],\n // https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168\n // or https://trino.io/docs/current/language/types.html\n types: [\n 'BIGINT',\n 'INT',\n 'INTEGER',\n 'SMALLINT',\n 'TINYINT',\n 'BOOLEAN',\n 'DATE',\n 'DECIMAL',\n 'REAL',\n 'DOUBLE',\n 'HYPERLOGLOG',\n 'QDIGEST',\n 'TDIGEST',\n 'P4HYPERLOGLOG',\n 'INTERVAL',\n 'TIMESTAMP',\n 'TIME',\n 'VARBINARY',\n 'VARCHAR',\n 'CHAR',\n 'ROW',\n 'ARRAY',\n 'MAP',\n 'JSON',\n 'JSON2016',\n 'IPADDRESS',\n 'GEOMETRY',\n 'UUID',\n 'SETDIGEST',\n 'JONIREGEXP',\n 'RE2JREGEXP',\n 'LIKEPATTERN',\n 'COLOR',\n 'CODEPOINTS',\n 'FUNCTION',\n 'JSONPATH',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './trino.functions.js';\nimport { keywords } from './trino.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L41\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY [ALL | DISTINCT]',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n // Data manipulation\n // - insert:\n 'INSERT INTO',\n 'VALUES',\n // - update:\n 'SET',\n // Data definition\n 'CREATE [OR REPLACE] [MATERIALIZED] VIEW',\n 'CREATE TABLE [IF NOT EXISTS]',\n // MATCH_RECOGNIZE\n 'MATCH_RECOGNIZE',\n 'MEASURES',\n 'ONE ROW PER MATCH',\n 'ALL ROWS PER MATCH',\n 'AFTER MATCH',\n 'PATTERN',\n 'SUBSET',\n 'DEFINE',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS]',\n 'ADD COLUMN [IF NOT EXISTS]',\n 'DROP COLUMN [IF EXISTS]',\n 'RENAME COLUMN [IF EXISTS]',\n 'RENAME TO',\n 'SET AUTHORIZATION [USER | ROLE]',\n 'SET PROPERTIES',\n 'EXECUTE',\n // - truncate:\n 'TRUNCATE TABLE',\n\n // other\n 'ALTER SCHEMA',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER VIEW',\n 'CREATE SCHEMA',\n 'CREATE ROLE',\n 'DROP SCHEMA',\n 'DROP MATERIALIZED VIEW',\n 'DROP VIEW',\n 'DROP ROLE',\n // Auxiliary\n 'EXPLAIN',\n 'ANALYZE',\n 'EXPLAIN ANALYZE',\n 'EXPLAIN ANALYZE VERBOSE',\n 'USE',\n\n 'DESCRIBE INPUT',\n 'DESCRIBE OUTPUT',\n\n 'REFRESH MATERIALIZED VIEW',\n 'RESET SESSION',\n 'SET SESSION',\n 'SET PATH',\n 'SET TIME ZONE',\n\n 'SHOW GRANTS',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE SCHEMA',\n 'SHOW CREATE VIEW',\n 'SHOW CREATE MATERIALIZED VIEW',\n 'SHOW TABLES',\n 'SHOW SCHEMAS',\n 'SHOW CATALOGS',\n 'SHOW COLUMNS',\n 'SHOW STATS FOR',\n 'SHOW ROLES',\n 'SHOW CURRENT ROLES',\n 'SHOW ROLE GRANTS',\n 'SHOW FUNCTIONS',\n 'SHOW SESSION',\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L231-L235\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L288-L291\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT [ALL | DISTINCT]',\n 'INTERSECT [ALL | DISTINCT]',\n]);\n\n// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L299-L313\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL [INNER] JOIN',\n 'NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n '{ROWS | RANGE | GROUPS} BETWEEN',\n // comparison operator\n 'IS [NOT] DISTINCT FROM',\n]);\n\nexport const trino: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n // Trino also supports {- ... -} parenthesis.\n // The formatting of these currently works out as a result of { and -\n // not getting a space added in-between.\n // https://trino.io/docs/current/sql/match-recognize.html#row-pattern-syntax\n extraParens: ['[]', '{}'],\n // https://trino.io/docs/current/language/types.html#string\n // https://trino.io/docs/current/language/types.html#varbinary\n stringTypes: [\n { quote: \"''-qq\", prefixes: ['U&'] },\n { quote: \"''-raw\", prefixes: ['X'], requirePrefix: true },\n ],\n // https://trino.io/docs/current/language/reserved.html\n identTypes: ['\"\"-qq'],\n paramTypes: { positional: true },\n operators: [\n '%',\n '->',\n '=>',\n ':',\n '||',\n // Row pattern syntax\n '|',\n '^',\n '$',\n // '?', conflicts with positional placeholders\n ],\n },\n formatOptions: {\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://docs.microsoft.com/en-us/sql/t-sql/functions/functions?view=sql-server-ver15\n aggregate: [\n 'APPROX_COUNT_DISTINCT',\n 'AVG',\n 'CHECKSUM_AGG',\n 'COUNT',\n 'COUNT_BIG',\n 'GROUPING',\n 'GROUPING_ID',\n 'MAX',\n 'MIN',\n 'STDEV',\n 'STDEVP',\n 'SUM',\n 'VAR',\n 'VARP',\n ],\n analytic: [\n 'CUME_DIST',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n 'Collation - COLLATIONPROPERTY',\n 'Collation - TERTIARY_WEIGHTS',\n ],\n configuration: [\n '@@DBTS',\n '@@LANGID',\n '@@LANGUAGE',\n '@@LOCK_TIMEOUT',\n '@@MAX_CONNECTIONS',\n '@@MAX_PRECISION',\n '@@NESTLEVEL',\n '@@OPTIONS',\n '@@REMSERVER',\n '@@SERVERNAME',\n '@@SERVICENAME',\n '@@SPID',\n '@@TEXTSIZE',\n '@@VERSION',\n ],\n conversion: ['CAST', 'CONVERT', 'PARSE', 'TRY_CAST', 'TRY_CONVERT', 'TRY_PARSE'],\n cryptographic: [\n 'ASYMKEY_ID',\n 'ASYMKEYPROPERTY',\n 'CERTPROPERTY',\n 'CERT_ID',\n 'CRYPT_GEN_RANDOM',\n 'DECRYPTBYASYMKEY',\n 'DECRYPTBYCERT',\n 'DECRYPTBYKEY',\n 'DECRYPTBYKEYAUTOASYMKEY',\n 'DECRYPTBYKEYAUTOCERT',\n 'DECRYPTBYPASSPHRASE',\n 'ENCRYPTBYASYMKEY',\n 'ENCRYPTBYCERT',\n 'ENCRYPTBYKEY',\n 'ENCRYPTBYPASSPHRASE',\n 'HASHBYTES',\n 'IS_OBJECTSIGNED',\n 'KEY_GUID',\n 'KEY_ID',\n 'KEY_NAME',\n 'SIGNBYASYMKEY',\n 'SIGNBYCERT',\n 'SYMKEYPROPERTY',\n 'VERIFYSIGNEDBYCERT',\n 'VERIFYSIGNEDBYASYMKEY',\n ],\n cursor: ['@@CURSOR_ROWS', '@@FETCH_STATUS', 'CURSOR_STATUS'],\n dataType: [\n 'DATALENGTH',\n 'IDENT_CURRENT',\n 'IDENT_INCR',\n 'IDENT_SEED',\n 'IDENTITY',\n 'SQL_VARIANT_PROPERTY',\n ],\n datetime: [\n '@@DATEFIRST',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TIMEZONE',\n 'CURRENT_TIMEZONE_ID',\n 'DATEADD',\n 'DATEDIFF',\n 'DATEDIFF_BIG',\n 'DATEFROMPARTS',\n 'DATENAME',\n 'DATEPART',\n 'DATETIME2FROMPARTS',\n 'DATETIMEFROMPARTS',\n 'DATETIMEOFFSETFROMPARTS',\n 'DAY',\n 'EOMONTH',\n 'GETDATE',\n 'GETUTCDATE',\n 'ISDATE',\n 'MONTH',\n 'SMALLDATETIMEFROMPARTS',\n 'SWITCHOFFSET',\n 'SYSDATETIME',\n 'SYSDATETIMEOFFSET',\n 'SYSUTCDATETIME',\n 'TIMEFROMPARTS',\n 'TODATETIMEOFFSET',\n 'YEAR',\n 'JSON',\n 'ISJSON',\n 'JSON_VALUE',\n 'JSON_QUERY',\n 'JSON_MODIFY',\n ],\n mathematical: [\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATN2',\n 'CEILING',\n 'COS',\n 'COT',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LOG',\n 'LOG10',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SIGN',\n 'SIN',\n 'SQRT',\n 'SQUARE',\n 'TAN',\n 'CHOOSE',\n 'GREATEST',\n 'IIF',\n 'LEAST',\n ],\n metadata: [\n '@@PROCID',\n 'APP_NAME',\n 'APPLOCK_MODE',\n 'APPLOCK_TEST',\n 'ASSEMBLYPROPERTY',\n 'COL_LENGTH',\n 'COL_NAME',\n 'COLUMNPROPERTY',\n 'DATABASEPROPERTYEX',\n 'DB_ID',\n 'DB_NAME',\n 'FILE_ID',\n 'FILE_IDEX',\n 'FILE_NAME',\n 'FILEGROUP_ID',\n 'FILEGROUP_NAME',\n 'FILEGROUPPROPERTY',\n 'FILEPROPERTY',\n 'FILEPROPERTYEX',\n 'FULLTEXTCATALOGPROPERTY',\n 'FULLTEXTSERVICEPROPERTY',\n 'INDEX_COL',\n 'INDEXKEY_PROPERTY',\n 'INDEXPROPERTY',\n 'NEXT VALUE FOR',\n 'OBJECT_DEFINITION',\n 'OBJECT_ID',\n 'OBJECT_NAME',\n 'OBJECT_SCHEMA_NAME',\n 'OBJECTPROPERTY',\n 'OBJECTPROPERTYEX',\n 'ORIGINAL_DB_NAME',\n 'PARSENAME',\n 'SCHEMA_ID',\n 'SCHEMA_NAME',\n 'SCOPE_IDENTITY',\n 'SERVERPROPERTY',\n 'STATS_DATE',\n 'TYPE_ID',\n 'TYPE_NAME',\n 'TYPEPROPERTY',\n ],\n ranking: ['DENSE_RANK', 'NTILE', 'RANK', 'ROW_NUMBER', 'PUBLISHINGSERVERNAME'],\n security: [\n 'CERTENCODED',\n 'CERTPRIVATEKEY',\n 'CURRENT_USER',\n 'DATABASE_PRINCIPAL_ID',\n 'HAS_DBACCESS',\n 'HAS_PERMS_BY_NAME',\n 'IS_MEMBER',\n 'IS_ROLEMEMBER',\n 'IS_SRVROLEMEMBER',\n 'LOGINPROPERTY',\n 'ORIGINAL_LOGIN',\n 'PERMISSIONS',\n 'PWDENCRYPT',\n 'PWDCOMPARE',\n 'SESSION_USER',\n 'SESSIONPROPERTY',\n 'SUSER_ID',\n 'SUSER_NAME',\n 'SUSER_SID',\n 'SUSER_SNAME',\n 'SYSTEM_USER',\n 'USER',\n 'USER_ID',\n 'USER_NAME',\n ],\n string: [\n 'ASCII',\n 'CHAR',\n 'CHARINDEX',\n 'CONCAT',\n 'CONCAT_WS',\n 'DIFFERENCE',\n 'FORMAT',\n 'LEFT',\n 'LEN',\n 'LOWER',\n 'LTRIM',\n 'NCHAR',\n 'PATINDEX',\n 'QUOTENAME',\n 'REPLACE',\n 'REPLICATE',\n 'REVERSE',\n 'RIGHT',\n 'RTRIM',\n 'SOUNDEX',\n 'SPACE',\n 'STR',\n 'STRING_AGG',\n 'STRING_ESCAPE',\n 'STUFF',\n 'SUBSTRING',\n 'TRANSLATE',\n 'TRIM',\n 'UNICODE',\n 'UPPER',\n ],\n system: [\n '$PARTITION',\n '@@ERROR',\n '@@IDENTITY',\n '@@PACK_RECEIVED',\n '@@ROWCOUNT',\n '@@TRANCOUNT',\n 'BINARY_CHECKSUM',\n 'CHECKSUM',\n 'COMPRESS',\n 'CONNECTIONPROPERTY',\n 'CONTEXT_INFO',\n 'CURRENT_REQUEST_ID',\n 'CURRENT_TRANSACTION_ID',\n 'DECOMPRESS',\n 'ERROR_LINE',\n 'ERROR_MESSAGE',\n 'ERROR_NUMBER',\n 'ERROR_PROCEDURE',\n 'ERROR_SEVERITY',\n 'ERROR_STATE',\n 'FORMATMESSAGE',\n 'GET_FILESTREAM_TRANSACTION_CONTEXT',\n 'GETANSINULL',\n 'HOST_ID',\n 'HOST_NAME',\n 'ISNULL',\n 'ISNUMERIC',\n 'MIN_ACTIVE_ROWVERSION',\n 'NEWID',\n 'NEWSEQUENTIALID',\n 'ROWCOUNT_BIG',\n 'SESSION_CONTEXT',\n 'XACT_STATE',\n ],\n statistical: [\n '@@CONNECTIONS',\n '@@CPU_BUSY',\n '@@IDLE',\n '@@IO_BUSY',\n '@@PACK_SENT',\n '@@PACKET_ERRORS',\n '@@TIMETICKS',\n '@@TOTAL_ERRORS',\n '@@TOTAL_READ',\n '@@TOTAL_WRITE',\n 'TEXTPTR',\n 'TEXTVALID',\n ],\n trigger: ['COLUMNS_UPDATED', 'EVENTDATA', 'TRIGGER_NESTLEVEL', 'UPDATE'],\n // Shorthand functions to use in place of CASE expression\n caseAbbrev: ['COALESCE', 'NULLIF'],\n // Parameterized types\n // https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15\n dataTypes: [\n 'DECIMAL',\n 'NUMERIC',\n 'FLOAT',\n 'REAL',\n 'DATETIME2',\n 'DATETIMEOFFSET',\n 'TIME',\n 'CHAR',\n 'VARCHAR',\n 'NCHAR',\n 'NVARCHAR',\n 'BINARY',\n 'VARBINARY',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver15\n standard: [\n 'ADD',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ANY',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'BACKUP',\n 'BEGIN',\n 'BETWEEN',\n 'BREAK',\n 'BROWSE',\n 'BULK',\n 'BY',\n 'CASCADE',\n 'CHECK',\n 'CHECKPOINT',\n 'CLOSE',\n 'CLUSTERED',\n 'COALESCE',\n 'COLLATE',\n 'COLUMN',\n 'COMMIT',\n 'COMPUTE',\n 'CONSTRAINT',\n 'CONTAINS',\n 'CONTAINSTABLE',\n 'CONTINUE',\n 'CONVERT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DBCC',\n 'DEALLOCATE',\n 'DECLARE',\n 'DEFAULT',\n 'DELETE',\n 'DENY',\n 'DESC',\n 'DISK',\n 'DISTINCT',\n 'DISTRIBUTED',\n 'DOUBLE',\n 'DROP',\n 'DUMP',\n 'ERRLVL',\n 'ESCAPE',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXTERNAL',\n 'FETCH',\n 'FILE',\n 'FILLFACTOR',\n 'FOR',\n 'FOREIGN',\n 'FREETEXT',\n 'FREETEXTTABLE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HOLDLOCK',\n 'IDENTITY',\n 'IDENTITYCOL',\n 'IDENTITY_INSERT',\n 'IF',\n 'IN',\n 'INDEX',\n 'INNER',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'JOIN',\n 'KEY',\n 'KILL',\n 'LEFT',\n 'LIKE',\n 'LINENO',\n 'LOAD',\n 'MERGE',\n 'NATIONAL',\n 'NOCHECK',\n 'NONCLUSTERED',\n 'NOT',\n 'NULL',\n 'NULLIF',\n 'OF',\n 'OFF',\n 'OFFSETS',\n 'ON',\n 'OPEN',\n 'OPENDATASOURCE',\n 'OPENQUERY',\n 'OPENROWSET',\n 'OPENXML',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OVER',\n 'PERCENT',\n 'PIVOT',\n 'PLAN',\n 'PRECISION',\n 'PRIMARY',\n 'PRINT',\n 'PROC',\n 'PROCEDURE',\n 'PUBLIC',\n 'RAISERROR',\n 'READ',\n 'READTEXT',\n 'RECONFIGURE',\n 'REFERENCES',\n 'REPLICATION',\n 'RESTORE',\n 'RESTRICT',\n 'RETURN',\n 'REVERT',\n 'REVOKE',\n 'RIGHT',\n 'ROLLBACK',\n 'ROWCOUNT',\n 'ROWGUIDCOL',\n 'RULE',\n 'SAVE',\n 'SCHEMA',\n 'SECURITYAUDIT',\n 'SELECT',\n 'SEMANTICKEYPHRASETABLE',\n 'SEMANTICSIMILARITYDETAILSTABLE',\n 'SEMANTICSIMILARITYTABLE',\n 'SESSION_USER',\n 'SET',\n 'SETUSER',\n 'SHUTDOWN',\n 'SOME',\n 'STATISTICS',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESAMPLE',\n 'TEXTSIZE',\n 'THEN',\n 'TO',\n 'TOP',\n 'TRAN',\n 'TRANSACTION',\n 'TRIGGER',\n 'TRUNCATE',\n 'TRY_CONVERT',\n 'TSEQUAL',\n 'UNION',\n 'UNIQUE',\n 'UNPIVOT',\n 'UPDATE',\n 'UPDATETEXT',\n 'USE',\n 'USER',\n 'VALUES',\n 'VARYING',\n 'VIEW',\n 'WAITFOR',\n 'WHERE',\n 'WHILE',\n 'WITH',\n 'WITHIN GROUP',\n 'WRITETEXT',\n ],\n odbc: [\n 'ABSOLUTE',\n 'ACTION',\n 'ADA',\n 'ADD',\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'AND',\n 'ANY',\n 'ARE',\n 'AS',\n 'ASC',\n 'ASSERTION',\n 'AT',\n 'AUTHORIZATION',\n 'AVG',\n 'BEGIN',\n 'BETWEEN',\n 'BIT',\n 'BIT_LENGTH',\n 'BOTH',\n 'BY',\n 'CASCADE',\n 'CASCADED',\n 'CAST',\n 'CATALOG',\n 'CHAR',\n 'CHARACTER',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHECK',\n 'CLOSE',\n 'COALESCE',\n 'COLLATE',\n 'COLLATION',\n 'COLUMN',\n 'COMMIT',\n 'CONNECT',\n 'CONNECTION',\n 'CONSTRAINT',\n 'CONSTRAINTS',\n 'CONTINUE',\n 'CONVERT',\n 'CORRESPONDING',\n 'COUNT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATE',\n 'DAY',\n 'DEALLOCATE',\n 'DEC',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFERRED',\n 'DELETE',\n 'DESC',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DIAGNOSTICS',\n 'DISCONNECT',\n 'DISTINCT',\n 'DOMAIN',\n 'DOUBLE',\n 'DROP',\n 'END-EXEC',\n 'ESCAPE',\n 'EXCEPTION',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXTERNAL',\n 'EXTRACT',\n 'FALSE',\n 'FETCH',\n 'FIRST',\n 'FLOAT',\n 'FOR',\n 'FOREIGN',\n 'FORTRAN',\n 'FOUND',\n 'FROM',\n 'FULL',\n 'GET',\n 'GLOBAL',\n 'GO',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HOUR',\n 'IDENTITY',\n 'IMMEDIATE',\n 'IN',\n 'INCLUDE',\n 'INDEX',\n 'INDICATOR',\n 'INITIALLY',\n 'INNER',\n 'INPUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INT',\n 'INTEGER',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'ISOLATION',\n 'JOIN',\n 'KEY',\n 'LANGUAGE',\n 'LAST',\n 'LEADING',\n 'LEFT',\n 'LEVEL',\n 'LIKE',\n 'LOCAL',\n 'LOWER',\n 'MATCH',\n 'MAX',\n 'MIN',\n 'MINUTE',\n 'MODULE',\n 'MONTH',\n 'NAMES',\n 'NATIONAL',\n 'NATURAL',\n 'NCHAR',\n 'NEXT',\n 'NO',\n 'NONE',\n 'NOT',\n 'NULL',\n 'NULLIF',\n 'NUMERIC',\n 'OCTET_LENGTH',\n 'OF',\n 'ONLY',\n 'OPEN',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'OUTER',\n 'OUTPUT',\n 'OVERLAPS',\n 'PAD',\n 'PARTIAL',\n 'PASCAL',\n 'POSITION',\n 'PRECISION',\n 'PREPARE',\n 'PRESERVE',\n 'PRIMARY',\n 'PRIOR',\n 'PRIVILEGES',\n 'PROCEDURE',\n 'PUBLIC',\n 'READ',\n 'REAL',\n 'REFERENCES',\n 'RELATIVE',\n 'RESTRICT',\n 'REVOKE',\n 'RIGHT',\n 'ROLLBACK',\n 'ROWS',\n 'SCHEMA',\n 'SCROLL',\n 'SECOND',\n 'SECTION',\n 'SELECT',\n 'SESSION',\n 'SESSION_USER',\n 'SET',\n 'SIZE',\n 'SMALLINT',\n 'SOME',\n 'SPACE',\n 'SQL',\n 'SQLCA',\n 'SQLCODE',\n 'SQLERROR',\n 'SQLSTATE',\n 'SQLWARNING',\n 'SUBSTRING',\n 'SUM',\n 'SYSTEM_USER',\n 'TABLE',\n 'TEMPORARY',\n 'TIME',\n 'TIMESTAMP',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO',\n 'TRAILING',\n 'TRANSACTION',\n 'TRANSLATE',\n 'TRANSLATION',\n 'TRIM',\n 'TRUE',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UPDATE',\n 'UPPER',\n 'USAGE',\n 'USER',\n 'VALUE',\n 'VALUES',\n 'VARCHAR',\n 'VARYING',\n 'VIEW',\n 'WHENEVER',\n 'WHERE',\n 'WITH',\n 'WORK',\n 'WRITE',\n 'YEAR',\n 'ZONE',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './transactsql.functions.js';\nimport { keywords } from './transactsql.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'INTO',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'WINDOW',\n 'PARTITION BY',\n 'ORDER BY',\n 'OFFSET',\n 'FETCH {FIRST | NEXT}',\n // Data manipulation\n // - insert:\n 'INSERT [INTO]',\n 'VALUES',\n // - update:\n 'SET',\n // - merge:\n 'MERGE [INTO]',\n 'WHEN [NOT] MATCHED [BY TARGET | BY SOURCE] [THEN]',\n 'UPDATE SET',\n // Data definition\n 'CREATE [OR ALTER] [MATERIALIZED] VIEW',\n 'CREATE TABLE',\n 'CREATE [OR ALTER] {PROC | PROCEDURE}',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n 'WHERE CURRENT OF',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE',\n 'ADD',\n 'DROP COLUMN [IF EXISTS]',\n 'ALTER COLUMN',\n // - truncate:\n 'TRUNCATE TABLE',\n // https://docs.microsoft.com/en-us/sql/t-sql/statements/statements?view=sql-server-ver15\n 'ADD SENSITIVITY CLASSIFICATION',\n 'ADD SIGNATURE',\n 'AGGREGATE',\n 'ANSI_DEFAULTS',\n 'ANSI_NULLS',\n 'ANSI_NULL_DFLT_OFF',\n 'ANSI_NULL_DFLT_ON',\n 'ANSI_PADDING',\n 'ANSI_WARNINGS',\n 'APPLICATION ROLE',\n 'ARITHABORT',\n 'ARITHIGNORE',\n 'ASSEMBLY',\n 'ASYMMETRIC KEY',\n 'AUTHORIZATION',\n 'AVAILABILITY GROUP',\n 'BACKUP',\n 'BACKUP CERTIFICATE',\n 'BACKUP MASTER KEY',\n 'BACKUP SERVICE MASTER KEY',\n 'BEGIN CONVERSATION TIMER',\n 'BEGIN DIALOG CONVERSATION',\n 'BROKER PRIORITY',\n 'BULK INSERT',\n 'CERTIFICATE',\n 'CLOSE MASTER KEY',\n 'CLOSE SYMMETRIC KEY',\n 'COLLATE',\n 'COLUMN ENCRYPTION KEY',\n 'COLUMN MASTER KEY',\n 'COLUMNSTORE INDEX',\n 'CONCAT_NULL_YIELDS_NULL',\n 'CONTEXT_INFO',\n 'CONTRACT',\n 'CREDENTIAL',\n 'CRYPTOGRAPHIC PROVIDER',\n 'CURSOR_CLOSE_ON_COMMIT',\n 'DATABASE',\n 'DATABASE AUDIT SPECIFICATION',\n 'DATABASE ENCRYPTION KEY',\n 'DATABASE HADR',\n 'DATABASE SCOPED CONFIGURATION',\n 'DATABASE SCOPED CREDENTIAL',\n 'DATABASE SET',\n 'DATEFIRST',\n 'DATEFORMAT',\n 'DEADLOCK_PRIORITY',\n 'DENY',\n 'DENY XML',\n 'DISABLE TRIGGER',\n 'ENABLE TRIGGER',\n 'END CONVERSATION',\n 'ENDPOINT',\n 'EVENT NOTIFICATION',\n 'EVENT SESSION',\n 'EXECUTE AS',\n 'EXTERNAL DATA SOURCE',\n 'EXTERNAL FILE FORMAT',\n 'EXTERNAL LANGUAGE',\n 'EXTERNAL LIBRARY',\n 'EXTERNAL RESOURCE POOL',\n 'EXTERNAL TABLE',\n 'FIPS_FLAGGER',\n 'FMTONLY',\n 'FORCEPLAN',\n 'FULLTEXT CATALOG',\n 'FULLTEXT INDEX',\n 'FULLTEXT STOPLIST',\n 'FUNCTION',\n 'GET CONVERSATION GROUP',\n 'GET_TRANSMISSION_STATUS',\n 'GRANT',\n 'GRANT XML',\n 'IDENTITY_INSERT',\n 'IMPLICIT_TRANSACTIONS',\n 'INDEX',\n 'LANGUAGE',\n 'LOCK_TIMEOUT',\n 'LOGIN',\n 'MASTER KEY',\n 'MESSAGE TYPE',\n 'MOVE CONVERSATION',\n 'NOCOUNT',\n 'NOEXEC',\n 'NUMERIC_ROUNDABORT',\n 'OFFSETS',\n 'OPEN MASTER KEY',\n 'OPEN SYMMETRIC KEY',\n 'PARSEONLY',\n 'PARTITION FUNCTION',\n 'PARTITION SCHEME',\n 'PROCEDURE',\n 'QUERY_GOVERNOR_COST_LIMIT',\n 'QUEUE',\n 'QUOTED_IDENTIFIER',\n 'RECEIVE',\n 'REMOTE SERVICE BINDING',\n 'REMOTE_PROC_TRANSACTIONS',\n 'RESOURCE GOVERNOR',\n 'RESOURCE POOL',\n 'RESTORE',\n 'RESTORE FILELISTONLY',\n 'RESTORE HEADERONLY',\n 'RESTORE LABELONLY',\n 'RESTORE MASTER KEY',\n 'RESTORE REWINDONLY',\n 'RESTORE SERVICE MASTER KEY',\n 'RESTORE VERIFYONLY',\n 'REVERT',\n 'REVOKE',\n 'REVOKE XML',\n 'ROLE',\n 'ROUTE',\n 'ROWCOUNT',\n 'RULE',\n 'SCHEMA',\n 'SEARCH PROPERTY LIST',\n 'SECURITY POLICY',\n 'SELECTIVE XML INDEX',\n 'SEND',\n 'SENSITIVITY CLASSIFICATION',\n 'SEQUENCE',\n 'SERVER AUDIT',\n 'SERVER AUDIT SPECIFICATION',\n 'SERVER CONFIGURATION',\n 'SERVER ROLE',\n 'SERVICE',\n 'SERVICE MASTER KEY',\n 'SETUSER',\n 'SHOWPLAN_ALL',\n 'SHOWPLAN_TEXT',\n 'SHOWPLAN_XML',\n 'SIGNATURE',\n 'SPATIAL INDEX',\n 'STATISTICS',\n 'STATISTICS IO',\n 'STATISTICS PROFILE',\n 'STATISTICS TIME',\n 'STATISTICS XML',\n 'SYMMETRIC KEY',\n 'SYNONYM',\n 'TABLE',\n 'TABLE IDENTITY',\n 'TEXTSIZE',\n 'TRANSACTION ISOLATION LEVEL',\n 'TRIGGER',\n 'TYPE',\n 'UPDATE STATISTICS',\n 'USER',\n 'WORKLOAD GROUP',\n 'XACT_ABORT',\n 'XML INDEX',\n 'XML SCHEMA COLLECTION',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n // non-standard joins\n '{CROSS | OUTER} APPLY',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n '{ROWS | RANGE} BETWEEN',\n]);\n\n// https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15\nexport const transactsql: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n nestedBlockComments: true,\n stringTypes: [{ quote: \"''-qq\", prefixes: ['N'] }],\n identTypes: [`\"\"-qq`, '[]'],\n identChars: { first: '#@', rest: '#@$' },\n paramTypes: { named: ['@'], quoted: ['@'] },\n operators: [\n '%',\n '&',\n '|',\n '^',\n '~',\n '!<',\n '!>',\n '+=',\n '-=',\n '*=',\n '/=',\n '%=',\n '|=',\n '&=',\n '^=',\n '::',\n ':',\n ],\n // TODO: Support for money constants\n },\n formatOptions: {\n alwaysDenseOperators: ['::'],\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // List of all keywords taken from:\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/restricted-keywords/list-of-restricted-keywords.html\n // Then filtered down to reserved keywords by running\n // > SELECT * AS ;\n // for each keyword in that list and observing which of these produce an error.\n reserved: [\n 'ADD',\n 'ALL',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'BEFORE',\n 'BETWEEN',\n 'BIGINT',\n 'BINARY',\n '_BINARY',\n 'BLOB',\n 'BOTH',\n 'BY',\n 'CALL',\n 'CASCADE',\n 'CASE',\n 'CHANGE',\n 'CHAR',\n 'CHARACTER',\n 'CHECK',\n 'COLLATE',\n 'COLUMN',\n 'CONDITION',\n 'CONSTRAINT',\n 'CONTINUE',\n 'CONVERT',\n 'CREATE',\n 'CROSS',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DATABASES',\n 'DAY_HOUR',\n 'DAY_MICROSECOND',\n 'DAY_MINUTE',\n 'DAY_SECOND',\n 'DEC',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DELAYED',\n 'DELETE',\n 'DESC',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISTINCT',\n 'DISTINCTROW',\n 'DIV',\n 'DOUBLE',\n 'DROP',\n 'DUAL',\n 'EACH',\n 'ELSE',\n 'ELSEIF',\n 'ENCLOSED',\n 'ESCAPED',\n 'EXCEPT',\n 'EXISTS',\n 'EXIT',\n 'EXPLAIN',\n 'EXTRA_JOIN',\n 'FALSE',\n 'FETCH',\n 'FLOAT',\n 'FLOAT4',\n 'FLOAT8',\n 'FOR',\n 'FORCE',\n 'FORCE_COMPILED_MODE',\n 'FORCE_INTERPRETER_MODE',\n 'FOREIGN',\n 'FROM',\n 'FULL',\n 'FULLTEXT',\n 'GRANT',\n 'GROUP',\n 'HAVING',\n 'HEARTBEAT_NO_LOGGING',\n 'HIGH_PRIORITY',\n 'HOUR_MICROSECOND',\n 'HOUR_MINUTE',\n 'HOUR_SECOND',\n 'IF',\n 'IGNORE',\n 'IN',\n 'INDEX',\n 'INFILE',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'IN',\n 'INT',\n 'INT1',\n 'INT2',\n 'INT3',\n 'INT4',\n 'INT8',\n 'INTEGER',\n '_INTERNAL_DYNAMIC_TYPECAST',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'ITERATE',\n 'JOIN',\n 'KEY',\n 'KEYS',\n 'KILL',\n 'LEADING',\n 'LEAVE',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LINES',\n 'LOAD',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCK',\n 'LONG',\n 'LONGBLOB',\n 'LONGTEXT',\n 'LOOP',\n 'LOW_PRIORITY',\n 'MATCH',\n 'MAXVALUE',\n 'MEDIUMBLOB',\n 'MEDIUMINT',\n 'MEDIUMTEXT',\n 'MIDDLEINT',\n 'MINUS',\n 'MINUTE_MICROSECOND',\n 'MINUTE_SECOND',\n 'MOD',\n 'MODIFIES',\n 'NATURAL',\n 'NO_QUERY_REWRITE',\n 'NOT',\n 'NO_WRITE_TO_BINLOG',\n 'NO_QUERY_REWRITE',\n 'NULL',\n 'NUMERIC',\n 'ON',\n 'OPTIMIZE',\n 'OPTION',\n 'OPTIONALLY',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OUTFILE',\n 'OVER',\n 'PRECISION',\n 'PRIMARY',\n 'PROCEDURE',\n 'PURGE',\n 'RANGE',\n 'READ',\n 'READS',\n 'REAL',\n 'REFERENCES',\n 'REGEXP',\n 'RELEASE',\n 'RENAME',\n 'REPEAT',\n 'REPLACE',\n 'REQUIRE',\n 'RESTRICT',\n 'RETURN',\n 'REVOKE',\n 'RIGHT',\n 'RIGHT_ANTI_JOIN',\n 'RIGHT_SEMI_JOIN',\n 'RIGHT_STRAIGHT_JOIN',\n 'RLIKE',\n 'SCHEMA',\n 'SCHEMAS',\n 'SECOND_MICROSECOND',\n 'SELECT',\n 'SEMI_JOIN',\n 'SENSITIVE',\n 'SEPARATOR',\n 'SET',\n 'SHOW',\n 'SIGNAL',\n 'SMALLINT',\n 'SPATIAL',\n 'SPECIFIC',\n 'SQL',\n 'SQL_BIG_RESULT',\n 'SQL_BUFFER_RESULT',\n 'SQL_CACHE',\n 'SQL_CALC_FOUND_ROWS',\n 'SQLEXCEPTION',\n 'SQL_NO_CACHE',\n 'SQL_NO_LOGGING',\n 'SQL_SMALL_RESULT',\n 'SQLSTATE',\n 'SQLWARNING',\n 'STRAIGHT_JOIN',\n 'TABLE',\n 'TERMINATED',\n 'THEN',\n 'TINYBLOB',\n 'TINYINT',\n 'TINYTEXT',\n 'TO',\n 'TRAILING',\n 'TRIGGER',\n 'TRUE',\n 'UNBOUNDED',\n 'UNDO',\n 'UNION',\n 'UNIQUE',\n 'UNLOCK',\n 'UNSIGNED',\n 'UPDATE',\n 'USAGE',\n 'USE',\n 'USING',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n '_UTF8',\n 'VALUES',\n 'VARBINARY',\n 'VARCHAR',\n 'VARCHARACTER',\n 'VARYING',\n 'WHEN',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WITHIN',\n 'WRITE',\n 'XOR',\n 'YEAR_MONTH',\n 'ZEROFILL',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/vector-functions/vector-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/window-functions/window-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/string-functions/string-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/conditional-functions/conditional-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/numeric-functions/numeric-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/geospatial-functions/geospatial-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/json-functions/json-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/information-functions/information-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/aggregate-functions/aggregate-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/time-series-functions/time-series-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/identifier-generation-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/date-and-time-functions/date-and-time-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/distinct-count-estimation-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/full-text-search-functions/full-text-search-functions.html\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/regular-expression-functions.html\n all: [\n 'ABS',\n 'ACOS',\n 'ADDDATE',\n 'ADDTIME',\n 'AES_DECRYPT',\n 'AES_ENCRYPT',\n 'ANY_VALUE',\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_COUNT_DISTINCT_ACCUMULATE',\n 'APPROX_COUNT_DISTINCT_COMBINE',\n 'APPROX_COUNT_DISTINCT_ESTIMATE',\n 'APPROX_GEOGRAPHY_INTERSECTS',\n 'APPROX_PERCENTILE',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BIN',\n 'BINARY',\n 'BIT_AND',\n 'BIT_COUNT',\n 'BIT_OR',\n 'BIT_XOR',\n 'CAST',\n 'CEIL',\n 'CEILING',\n 'CHAR',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHARSET',\n 'COALESCE',\n 'COERCIBILITY',\n 'COLLATION',\n 'COLLECT',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONNECTION_ID',\n 'CONV',\n 'CONVERT',\n 'CONVERT_TZ',\n 'COS',\n 'COT',\n 'COUNT',\n 'CUME_DIST',\n 'CURDATE',\n 'CURRENT_DATE',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURTIME',\n 'DATABASE',\n 'DATE',\n 'DATE_ADD',\n 'DATEDIFF',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATE_TRUNC',\n 'DAY',\n 'DAYNAME',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DECODE',\n 'DEFAULT',\n 'DEGREES',\n 'DENSE_RANK',\n 'DIV',\n 'DOT_PRODUCT',\n 'ELT',\n 'EUCLIDEAN_DISTANCE',\n 'EXP',\n 'EXTRACT',\n 'FIELD',\n 'FIRST',\n 'FIRST_VALUE',\n 'FLOOR',\n 'FORMAT',\n 'FOUND_ROWS',\n 'FROM_BASE64',\n 'FROM_DAYS',\n 'FROM_UNIXTIME',\n 'GEOGRAPHY_AREA',\n 'GEOGRAPHY_CONTAINS',\n 'GEOGRAPHY_DISTANCE',\n 'GEOGRAPHY_INTERSECTS',\n 'GEOGRAPHY_LATITUDE',\n 'GEOGRAPHY_LENGTH',\n 'GEOGRAPHY_LONGITUDE',\n 'GEOGRAPHY_POINT',\n 'GEOGRAPHY_WITHIN_DISTANCE',\n 'GEOMETRY_AREA',\n 'GEOMETRY_CONTAINS',\n 'GEOMETRY_DISTANCE',\n 'GEOMETRY_FILTER',\n 'GEOMETRY_INTERSECTS',\n 'GEOMETRY_LENGTH',\n 'GEOMETRY_POINT',\n 'GEOMETRY_WITHIN_DISTANCE',\n 'GEOMETRY_X',\n 'GEOMETRY_Y',\n 'GREATEST',\n 'GROUPING',\n 'GROUP_CONCAT',\n 'HEX',\n 'HIGHLIGHT',\n 'HOUR',\n 'ICU_VERSION',\n 'IF',\n 'IFNULL',\n 'INET_ATON',\n 'INET_NTOA',\n 'INET6_ATON',\n 'INET6_NTOA',\n 'INITCAP',\n 'INSERT',\n 'INSTR',\n 'INTERVAL',\n 'IS',\n 'IS NULL',\n 'JSON_AGG',\n 'JSON_ARRAY_CONTAINS_DOUBLE',\n 'JSON_ARRAY_CONTAINS_JSON',\n 'JSON_ARRAY_CONTAINS_STRING',\n 'JSON_ARRAY_PUSH_DOUBLE',\n 'JSON_ARRAY_PUSH_JSON',\n 'JSON_ARRAY_PUSH_STRING',\n 'JSON_DELETE_KEY',\n 'JSON_EXTRACT_DOUBLE',\n 'JSON_EXTRACT_JSON',\n 'JSON_EXTRACT_STRING',\n 'JSON_EXTRACT_BIGINT',\n 'JSON_GET_TYPE',\n 'JSON_LENGTH',\n 'JSON_SET_DOUBLE',\n 'JSON_SET_JSON',\n 'JSON_SET_STRING',\n 'JSON_SPLICE_DOUBLE',\n 'JSON_SPLICE_JSON',\n 'JSON_SPLICE_STRING',\n 'LAG',\n 'LAST_DAY',\n 'LAST_VALUE',\n 'LCASE',\n 'LEAD',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LIKE',\n 'LN',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LPAD',\n 'LTRIM',\n 'MATCH',\n 'MAX',\n 'MD5',\n 'MEDIAN',\n 'MICROSECOND',\n 'MIN',\n 'MINUTE',\n 'MOD',\n 'MONTH',\n 'MONTHNAME',\n 'MONTHS_BETWEEN',\n 'NOT',\n 'NOW',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'OCTET_LENGTH',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PI',\n 'PIVOT',\n 'POSITION',\n 'POW',\n 'POWER',\n 'QUARTER',\n 'QUOTE',\n 'RADIANS',\n 'RAND',\n 'RANK',\n 'REGEXP',\n 'REPEAT',\n 'REPLACE',\n 'REVERSE',\n 'RIGHT',\n 'RLIKE',\n 'ROUND',\n 'ROW_COUNT',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'SCALAR',\n 'SCHEMA',\n 'SEC_TO_TIME',\n 'SHA1',\n 'SHA2',\n 'SIGMOID',\n 'SIGN',\n 'SIN',\n 'SLEEP',\n 'SPLIT',\n 'SOUNDEX',\n 'SOUNDS LIKE',\n 'SOURCE_POS_WAIT',\n 'SPACE',\n 'SQRT',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DATE',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUBSTRING_INDEX',\n 'SUM',\n 'SYS_GUID',\n 'TAN',\n 'TIME',\n 'TIMEDIFF',\n 'TIME_BUCKET',\n 'TIME_FORMAT',\n 'TIMESTAMP',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TIME_TO_SEC',\n 'TO_BASE64',\n 'TO_CHAR',\n 'TO_DAYS',\n 'TO_JSON',\n 'TO_NUMBER',\n 'TO_SECONDS',\n 'TO_TIMESTAMP',\n 'TRIM',\n 'TRUNC',\n 'TRUNCATE',\n 'UCASE',\n 'UNHEX',\n 'UNIX_TIMESTAMP',\n 'UPDATEXML',\n 'UPPER',\n // 'USER',\n 'UTC_DATE',\n 'UTC_TIME',\n 'UTC_TIMESTAMP',\n 'UUID',\n 'VALUES',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VECTOR_SUB',\n 'VERSION',\n 'WEEK',\n 'WEEKDAY',\n 'WEEKOFYEAR',\n 'YEAR',\n // Data types with parameters\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference/data-types.html\n 'BIT',\n 'TINYINT',\n 'SMALLINT',\n 'MEDIUMINT',\n 'INT',\n 'INTEGER',\n 'BIGINT',\n 'DECIMAL',\n 'DEC',\n 'NUMERIC',\n 'FIXED',\n 'FLOAT',\n 'DOUBLE',\n 'DOUBLE PRECISION',\n 'REAL',\n 'DATETIME',\n 'TIMESTAMP',\n 'TIME',\n 'YEAR',\n 'CHAR',\n 'NATIONAL CHAR',\n 'VARCHAR',\n 'NATIONAL VARCHAR',\n 'BINARY',\n 'VARBINARY',\n 'BLOB',\n 'TEXT',\n 'ENUM',\n ],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { postProcess } from '../mariadb/likeMariaDb.js';\nimport { keywords } from './singlestoredb.keywords.js';\nimport { functions } from './singlestoredb.functions.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT | DISTINCTROW]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'LIMIT',\n 'OFFSET',\n // Data manipulation\n // - insert:\n 'INSERT [IGNORE] [INTO]',\n 'VALUES',\n 'REPLACE [INTO]',\n 'ON DUPLICATE KEY UPDATE',\n // - update:\n 'SET',\n // Data definition\n 'CREATE VIEW',\n 'CREATE [ROWSTORE] [REFERENCE | TEMPORARY | GLOBAL TEMPORARY] TABLE [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] [TEMPORARY] PROCEDURE [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] [EXTERNAL] FUNCTION',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE [FROM]',\n // - drop table:\n 'DROP [TEMPORARY] TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER [ONLINE] TABLE',\n 'ADD [COLUMN]',\n 'ADD [UNIQUE] {INDEX | KEY}',\n 'DROP [COLUMN]',\n 'MODIFY [COLUMN]',\n 'CHANGE',\n 'RENAME [TO | AS]',\n // - truncate:\n 'TRUNCATE [TABLE]',\n // https://docs.singlestore.com/managed-service/en/reference/sql-reference.html\n 'ADD AGGREGATOR',\n 'ADD LEAF',\n 'AGGREGATOR SET AS MASTER',\n 'ALTER DATABASE',\n 'ALTER PIPELINE',\n 'ALTER RESOURCE POOL',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ANALYZE TABLE',\n 'ATTACH DATABASE',\n 'ATTACH LEAF',\n 'ATTACH LEAF ALL',\n 'BACKUP DATABASE',\n 'BINLOG',\n 'BOOTSTRAP AGGREGATOR',\n 'CACHE INDEX',\n 'CALL',\n 'CHANGE',\n 'CHANGE MASTER TO',\n 'CHANGE REPLICATION FILTER',\n 'CHANGE REPLICATION SOURCE TO',\n 'CHECK BLOB CHECKSUM',\n 'CHECK TABLE',\n 'CHECKSUM TABLE',\n 'CLEAR ORPHAN DATABASES',\n 'CLONE',\n 'COMMIT',\n 'CREATE DATABASE',\n 'CREATE GROUP',\n 'CREATE INDEX',\n 'CREATE LINK',\n 'CREATE MILESTONE',\n 'CREATE PIPELINE',\n 'CREATE RESOURCE POOL',\n 'CREATE ROLE',\n 'CREATE USER',\n 'DEALLOCATE PREPARE',\n 'DESCRIBE',\n 'DETACH DATABASE',\n 'DETACH PIPELINE',\n 'DROP DATABASE',\n 'DROP FUNCTION',\n 'DROP INDEX',\n 'DROP LINK',\n 'DROP PIPELINE',\n 'DROP PROCEDURE',\n 'DROP RESOURCE POOL',\n 'DROP ROLE',\n 'DROP USER',\n 'DROP VIEW',\n 'EXECUTE',\n 'EXPLAIN',\n 'FLUSH',\n 'FORCE',\n 'GRANT',\n 'HANDLER',\n 'HELP',\n 'KILL CONNECTION',\n 'KILLALL QUERIES',\n 'LOAD DATA',\n 'LOAD INDEX INTO CACHE',\n 'LOAD XML',\n 'LOCK INSTANCE FOR BACKUP',\n 'LOCK TABLES',\n 'MASTER_POS_WAIT',\n 'OPTIMIZE TABLE',\n 'PREPARE',\n 'PURGE BINARY LOGS',\n 'REBALANCE PARTITIONS',\n 'RELEASE SAVEPOINT',\n 'REMOVE AGGREGATOR',\n 'REMOVE LEAF',\n 'REPAIR TABLE',\n 'REPLACE',\n 'REPLICATE DATABASE',\n 'RESET',\n 'RESET MASTER',\n 'RESET PERSIST',\n 'RESET REPLICA',\n 'RESET SLAVE',\n 'RESTART',\n 'RESTORE DATABASE',\n 'RESTORE REDUNDANCY',\n 'REVOKE',\n 'ROLLBACK',\n 'ROLLBACK TO SAVEPOINT',\n 'SAVEPOINT',\n 'SET CHARACTER SET',\n 'SET DEFAULT ROLE',\n 'SET NAMES',\n 'SET PASSWORD',\n 'SET RESOURCE GROUP',\n 'SET ROLE',\n 'SET TRANSACTION',\n 'SHOW',\n 'SHOW CHARACTER SET',\n 'SHOW COLLATION',\n 'SHOW COLUMNS',\n 'SHOW CREATE DATABASE',\n 'SHOW CREATE FUNCTION',\n 'SHOW CREATE PIPELINE',\n 'SHOW CREATE PROCEDURE',\n 'SHOW CREATE TABLE',\n 'SHOW CREATE USER',\n 'SHOW CREATE VIEW',\n 'SHOW DATABASES',\n 'SHOW ENGINE',\n 'SHOW ENGINES',\n 'SHOW ERRORS',\n 'SHOW FUNCTION CODE',\n 'SHOW FUNCTION STATUS',\n 'SHOW GRANTS',\n 'SHOW INDEX',\n 'SHOW MASTER STATUS',\n 'SHOW OPEN TABLES',\n 'SHOW PLUGINS',\n 'SHOW PRIVILEGES',\n 'SHOW PROCEDURE CODE',\n 'SHOW PROCEDURE STATUS',\n 'SHOW PROCESSLIST',\n 'SHOW PROFILE',\n 'SHOW PROFILES',\n 'SHOW RELAYLOG EVENTS',\n 'SHOW REPLICA STATUS',\n 'SHOW REPLICAS',\n 'SHOW SLAVE',\n 'SHOW SLAVE HOSTS',\n 'SHOW STATUS',\n 'SHOW TABLE STATUS',\n 'SHOW TABLES',\n 'SHOW VARIABLES',\n 'SHOW WARNINGS',\n 'SHUTDOWN',\n 'SNAPSHOT DATABASE',\n 'SOURCE_POS_WAIT',\n 'START GROUP_REPLICATION',\n 'START PIPELINE',\n 'START REPLICA',\n 'START SLAVE',\n 'START TRANSACTION',\n 'STOP GROUP_REPLICATION',\n 'STOP PIPELINE',\n 'STOP REPLICA',\n 'STOP REPLICATING',\n 'STOP SLAVE',\n 'TEST PIPELINE',\n 'UNLOCK INSTANCE',\n 'UNLOCK TABLES',\n 'USE',\n 'XA',\n // flow control\n 'ITERATE',\n 'LEAVE',\n 'LOOP',\n 'REPEAT',\n 'RETURN',\n 'WHILE',\n]);\n\nconst reservedSetOperations = expandPhrases([\n 'UNION [ALL | DISTINCT]',\n 'EXCEPT',\n 'INTERSECT',\n 'MINUS',\n]);\n\nconst reservedJoins = expandPhrases([\n 'JOIN',\n '{LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{INNER | CROSS} JOIN',\n 'NATURAL {LEFT | RIGHT} [OUTER] JOIN',\n // non-standard joins\n 'STRAIGHT_JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n 'ON DELETE',\n 'ON UPDATE',\n 'CHARACTER SET',\n '{ROWS | RANGE} BETWEEN',\n]);\n\nexport const singlestoredb: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n // TODO: support _binary\"some string\" prefix\n stringTypes: [\n '\"\"-qq-bs',\n \"''-qq-bs\",\n { quote: \"''-raw\", prefixes: ['B', 'X'], requirePrefix: true },\n ],\n identTypes: ['``'],\n identChars: { first: '$', rest: '$', allowFirstCharNumber: true },\n variableTypes: [\n { regex: '@@?[A-Za-z0-9_$]+' },\n { quote: '``', prefixes: ['@'], requirePrefix: true },\n ],\n lineCommentTypes: ['--', '#'],\n operators: [\n ':=',\n '&',\n '|',\n '^',\n '~',\n '<<',\n '>>',\n '<=>',\n '&&',\n '||',\n '::',\n '::$',\n '::%',\n ':>',\n '!:>',\n ],\n postProcess,\n },\n formatOptions: {\n alwaysDenseOperators: ['::', '::$', '::%'],\n onelineClauses,\n },\n};\n","import { flatKeywordList } from '../../utils.js';\n\nexport const functions = flatKeywordList({\n // https://docs.snowflake.com/en/sql-reference-functions.html\n //\n // https://docs.snowflake.com/en/sql-reference/functions-all.html\n // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n // 2. split all lines that contain ',' or '/' into multiple lines\n // 3. remove all '— Deprecated' parts from the strings\n // 4. delete all strings that end with '', they are already covered in the list\n // 5. remove all strings that contain '[', they are operators not functions\n // 6. fix all values that contain '*'\n // 7. delete operatos ':', '::', '||'\n //\n // Steps 1-5 can be combined by the following script in the developer console:\n // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n // .map(x => x.split(x.includes(',') ? ',' : '/')).flat().map(x => x.trim()) // Step 2\n // .map(x => x.replace('— Deprecated', '')) // Step 3\n // .filter(x => !x.endsWith('')) // Step 4\n // .filter(x => !x.includes('[')) // Step 5\n all: [\n 'ABS',\n 'ACOS',\n 'ACOSH',\n 'ADD_MONTHS',\n 'ALL_USER_NAMES',\n 'ANY_VALUE',\n 'APPROX_COUNT_DISTINCT',\n 'APPROX_PERCENTILE',\n 'APPROX_PERCENTILE_ACCUMULATE',\n 'APPROX_PERCENTILE_COMBINE',\n 'APPROX_PERCENTILE_ESTIMATE',\n 'APPROX_TOP_K',\n 'APPROX_TOP_K_ACCUMULATE',\n 'APPROX_TOP_K_COMBINE',\n 'APPROX_TOP_K_ESTIMATE',\n 'APPROXIMATE_JACCARD_INDEX',\n 'APPROXIMATE_SIMILARITY',\n 'ARRAY_AGG',\n 'ARRAY_APPEND',\n 'ARRAY_CAT',\n 'ARRAY_COMPACT',\n 'ARRAY_CONSTRUCT',\n 'ARRAY_CONSTRUCT_COMPACT',\n 'ARRAY_CONTAINS',\n 'ARRAY_INSERT',\n 'ARRAY_INTERSECTION',\n 'ARRAY_POSITION',\n 'ARRAY_PREPEND',\n 'ARRAY_SIZE',\n 'ARRAY_SLICE',\n 'ARRAY_TO_STRING',\n 'ARRAY_UNION_AGG',\n 'ARRAY_UNIQUE_AGG',\n 'ARRAYS_OVERLAP',\n 'AS_ARRAY',\n 'AS_BINARY',\n 'AS_BOOLEAN',\n 'AS_CHAR',\n 'AS_VARCHAR',\n 'AS_DATE',\n 'AS_DECIMAL',\n 'AS_NUMBER',\n 'AS_DOUBLE',\n 'AS_REAL',\n 'AS_INTEGER',\n 'AS_OBJECT',\n 'AS_TIME',\n 'AS_TIMESTAMP_LTZ',\n 'AS_TIMESTAMP_NTZ',\n 'AS_TIMESTAMP_TZ',\n 'ASCII',\n 'ASIN',\n 'ASINH',\n 'ATAN',\n 'ATAN2',\n 'ATANH',\n 'AUTO_REFRESH_REGISTRATION_HISTORY',\n 'AUTOMATIC_CLUSTERING_HISTORY',\n 'AVG',\n 'BASE64_DECODE_BINARY',\n 'BASE64_DECODE_STRING',\n 'BASE64_ENCODE',\n 'BIT_LENGTH',\n 'BITAND',\n 'BITAND_AGG',\n 'BITMAP_BIT_POSITION',\n 'BITMAP_BUCKET_NUMBER',\n 'BITMAP_CONSTRUCT_AGG',\n 'BITMAP_COUNT',\n 'BITMAP_OR_AGG',\n 'BITNOT',\n 'BITOR',\n 'BITOR_AGG',\n 'BITSHIFTLEFT',\n 'BITSHIFTRIGHT',\n 'BITXOR',\n 'BITXOR_AGG',\n 'BOOLAND',\n 'BOOLAND_AGG',\n 'BOOLNOT',\n 'BOOLOR',\n 'BOOLOR_AGG',\n 'BOOLXOR',\n 'BOOLXOR_AGG',\n 'BUILD_SCOPED_FILE_URL',\n 'BUILD_STAGE_FILE_URL',\n 'CASE',\n 'CAST',\n 'CBRT',\n 'CEIL',\n 'CHARINDEX',\n 'CHECK_JSON',\n 'CHECK_XML',\n 'CHR',\n 'CHAR',\n 'COALESCE',\n 'COLLATE',\n 'COLLATION',\n 'COMPLETE_TASK_GRAPHS',\n 'COMPRESS',\n 'CONCAT',\n 'CONCAT_WS',\n 'CONDITIONAL_CHANGE_EVENT',\n 'CONDITIONAL_TRUE_EVENT',\n 'CONTAINS',\n 'CONVERT_TIMEZONE',\n 'COPY_HISTORY',\n 'CORR',\n 'COS',\n 'COSH',\n 'COT',\n 'COUNT',\n 'COUNT_IF',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CUME_DIST',\n 'CURRENT_ACCOUNT',\n 'CURRENT_AVAILABLE_ROLES',\n 'CURRENT_CLIENT',\n 'CURRENT_DATABASE',\n 'CURRENT_DATE',\n 'CURRENT_IP_ADDRESS',\n 'CURRENT_REGION',\n 'CURRENT_ROLE',\n 'CURRENT_SCHEMA',\n 'CURRENT_SCHEMAS',\n 'CURRENT_SECONDARY_ROLES',\n 'CURRENT_SESSION',\n 'CURRENT_STATEMENT',\n 'CURRENT_TASK_GRAPHS',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_TRANSACTION',\n 'CURRENT_USER',\n 'CURRENT_VERSION',\n 'CURRENT_WAREHOUSE',\n 'DATA_TRANSFER_HISTORY',\n 'DATABASE_REFRESH_HISTORY',\n 'DATABASE_REFRESH_PROGRESS',\n 'DATABASE_REFRESH_PROGRESS_BY_JOB',\n 'DATABASE_STORAGE_USAGE_HISTORY',\n 'DATE_FROM_PARTS',\n 'DATE_PART',\n 'DATE_TRUNC',\n 'DATEADD',\n 'DATEDIFF',\n 'DAYNAME',\n 'DECODE',\n 'DECOMPRESS_BINARY',\n 'DECOMPRESS_STRING',\n 'DECRYPT',\n 'DECRYPT_RAW',\n 'DEGREES',\n 'DENSE_RANK',\n 'DIV0',\n 'EDITDISTANCE',\n 'ENCRYPT',\n 'ENCRYPT_RAW',\n 'ENDSWITH',\n 'EQUAL_NULL',\n 'EXP',\n 'EXPLAIN_JSON',\n 'EXTERNAL_FUNCTIONS_HISTORY',\n 'EXTERNAL_TABLE_FILES',\n 'EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY',\n 'EXTRACT',\n 'EXTRACT_SEMANTIC_CATEGORIES',\n 'FACTORIAL',\n 'FIRST_VALUE',\n 'FLATTEN',\n 'FLOOR',\n 'GENERATE_COLUMN_DESCRIPTION',\n 'GENERATOR',\n 'GET',\n 'GET_ABSOLUTE_PATH',\n 'GET_DDL',\n 'GET_IGNORE_CASE',\n 'GET_OBJECT_REFERENCES',\n 'GET_PATH',\n 'GET_PRESIGNED_URL',\n 'GET_RELATIVE_PATH',\n 'GET_STAGE_LOCATION',\n 'GETBIT',\n 'GREATEST',\n 'GROUPING',\n 'GROUPING_ID',\n 'HASH',\n 'HASH_AGG',\n 'HAVERSINE',\n 'HEX_DECODE_BINARY',\n 'HEX_DECODE_STRING',\n 'HEX_ENCODE',\n 'HLL',\n 'HLL_ACCUMULATE',\n 'HLL_COMBINE',\n 'HLL_ESTIMATE',\n 'HLL_EXPORT',\n 'HLL_IMPORT',\n 'HOUR',\n 'MINUTE',\n 'SECOND',\n 'IFF',\n 'IFNULL',\n 'ILIKE',\n 'ILIKE ANY',\n 'INFER_SCHEMA',\n 'INITCAP',\n 'INSERT',\n 'INVOKER_ROLE',\n 'INVOKER_SHARE',\n 'IS_ARRAY',\n 'IS_BINARY',\n 'IS_BOOLEAN',\n 'IS_CHAR',\n 'IS_VARCHAR',\n 'IS_DATE',\n 'IS_DATE_VALUE',\n 'IS_DECIMAL',\n 'IS_DOUBLE',\n 'IS_REAL',\n 'IS_GRANTED_TO_INVOKER_ROLE',\n 'IS_INTEGER',\n 'IS_NULL_VALUE',\n 'IS_OBJECT',\n 'IS_ROLE_IN_SESSION',\n 'IS_TIME',\n 'IS_TIMESTAMP_LTZ',\n 'IS_TIMESTAMP_NTZ',\n 'IS_TIMESTAMP_TZ',\n 'JAROWINKLER_SIMILARITY',\n 'JSON_EXTRACT_PATH_TEXT',\n 'KURTOSIS',\n 'LAG',\n 'LAST_DAY',\n 'LAST_QUERY_ID',\n 'LAST_TRANSACTION',\n 'LAST_VALUE',\n 'LEAD',\n 'LEAST',\n 'LEFT',\n 'LENGTH',\n 'LEN',\n 'LIKE',\n 'LIKE ALL',\n 'LIKE ANY',\n 'LISTAGG',\n 'LN',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOG',\n 'LOGIN_HISTORY',\n 'LOGIN_HISTORY_BY_USER',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MATERIALIZED_VIEW_REFRESH_HISTORY',\n 'MD5',\n 'MD5_HEX',\n 'MD5_BINARY',\n 'MD5_NUMBER — Obsoleted',\n 'MD5_NUMBER_LOWER64',\n 'MD5_NUMBER_UPPER64',\n 'MEDIAN',\n 'MIN',\n 'MAX',\n 'MINHASH',\n 'MINHASH_COMBINE',\n 'MOD',\n 'MODE',\n 'MONTHNAME',\n 'MONTHS_BETWEEN',\n 'NEXT_DAY',\n 'NORMAL',\n 'NTH_VALUE',\n 'NTILE',\n 'NULLIF',\n 'NULLIFZERO',\n 'NVL',\n 'NVL2',\n 'OBJECT_AGG',\n 'OBJECT_CONSTRUCT',\n 'OBJECT_CONSTRUCT_KEEP_NULL',\n 'OBJECT_DELETE',\n 'OBJECT_INSERT',\n 'OBJECT_KEYS',\n 'OBJECT_PICK',\n 'OCTET_LENGTH',\n 'PARSE_IP',\n 'PARSE_JSON',\n 'PARSE_URL',\n 'PARSE_XML',\n 'PERCENT_RANK',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PI',\n 'PIPE_USAGE_HISTORY',\n 'POLICY_CONTEXT',\n 'POLICY_REFERENCES',\n 'POSITION',\n 'POW',\n 'POWER',\n 'PREVIOUS_DAY',\n 'QUERY_ACCELERATION_HISTORY',\n 'QUERY_HISTORY',\n 'QUERY_HISTORY_BY_SESSION',\n 'QUERY_HISTORY_BY_USER',\n 'QUERY_HISTORY_BY_WAREHOUSE',\n 'RADIANS',\n 'RANDOM',\n 'RANDSTR',\n 'RANK',\n 'RATIO_TO_REPORT',\n 'REGEXP',\n 'REGEXP_COUNT',\n 'REGEXP_INSTR',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REGEXP_SUBSTR',\n 'REGEXP_SUBSTR_ALL',\n 'REGR_AVGX',\n 'REGR_AVGY',\n 'REGR_COUNT',\n 'REGR_INTERCEPT',\n 'REGR_R2',\n 'REGR_SLOPE',\n 'REGR_SXX',\n 'REGR_SXY',\n 'REGR_SYY',\n 'REGR_VALX',\n 'REGR_VALY',\n 'REPEAT',\n 'REPLACE',\n 'REPLICATION_GROUP_REFRESH_HISTORY',\n 'REPLICATION_GROUP_REFRESH_PROGRESS',\n 'REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB',\n 'REPLICATION_GROUP_USAGE_HISTORY',\n 'REPLICATION_USAGE_HISTORY',\n 'REST_EVENT_HISTORY',\n 'RESULT_SCAN',\n 'REVERSE',\n 'RIGHT',\n 'RLIKE',\n 'ROUND',\n 'ROW_NUMBER',\n 'RPAD',\n 'RTRIM',\n 'RTRIMMED_LENGTH',\n 'SEARCH_OPTIMIZATION_HISTORY',\n 'SEQ1',\n 'SEQ2',\n 'SEQ4',\n 'SEQ8',\n 'SERVERLESS_TASK_HISTORY',\n 'SHA1',\n 'SHA1_HEX',\n 'SHA1_BINARY',\n 'SHA2',\n 'SHA2_HEX',\n 'SHA2_BINARY',\n 'SIGN',\n 'SIN',\n 'SINH',\n 'SKEW',\n 'SOUNDEX',\n 'SPACE',\n 'SPLIT',\n 'SPLIT_PART',\n 'SPLIT_TO_TABLE',\n 'SQRT',\n 'SQUARE',\n 'ST_AREA',\n 'ST_ASEWKB',\n 'ST_ASEWKT',\n 'ST_ASGEOJSON',\n 'ST_ASWKB',\n 'ST_ASBINARY',\n 'ST_ASWKT',\n 'ST_ASTEXT',\n 'ST_AZIMUTH',\n 'ST_CENTROID',\n 'ST_COLLECT',\n 'ST_CONTAINS',\n 'ST_COVEREDBY',\n 'ST_COVERS',\n 'ST_DIFFERENCE',\n 'ST_DIMENSION',\n 'ST_DISJOINT',\n 'ST_DISTANCE',\n 'ST_DWITHIN',\n 'ST_ENDPOINT',\n 'ST_ENVELOPE',\n 'ST_GEOGFROMGEOHASH',\n 'ST_GEOGPOINTFROMGEOHASH',\n 'ST_GEOGRAPHYFROMWKB',\n 'ST_GEOGRAPHYFROMWKT',\n 'ST_GEOHASH',\n 'ST_GEOMETRYFROMWKB',\n 'ST_GEOMETRYFROMWKT',\n 'ST_HAUSDORFFDISTANCE',\n 'ST_INTERSECTION',\n 'ST_INTERSECTS',\n 'ST_LENGTH',\n 'ST_MAKEGEOMPOINT',\n 'ST_GEOM_POINT',\n 'ST_MAKELINE',\n 'ST_MAKEPOINT',\n 'ST_POINT',\n 'ST_MAKEPOLYGON',\n 'ST_POLYGON',\n 'ST_NPOINTS',\n 'ST_NUMPOINTS',\n 'ST_PERIMETER',\n 'ST_POINTN',\n 'ST_SETSRID',\n 'ST_SIMPLIFY',\n 'ST_SRID',\n 'ST_STARTPOINT',\n 'ST_SYMDIFFERENCE',\n 'ST_UNION',\n 'ST_WITHIN',\n 'ST_X',\n 'ST_XMAX',\n 'ST_XMIN',\n 'ST_Y',\n 'ST_YMAX',\n 'ST_YMIN',\n 'STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY',\n 'STAGE_STORAGE_USAGE_HISTORY',\n 'STARTSWITH',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STRIP_NULL_VALUE',\n 'STRTOK',\n 'STRTOK_SPLIT_TO_TABLE',\n 'STRTOK_TO_ARRAY',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'SYSDATE',\n 'SYSTEM$ABORT_SESSION',\n 'SYSTEM$ABORT_TRANSACTION',\n 'SYSTEM$AUTHORIZE_PRIVATELINK',\n 'SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS',\n 'SYSTEM$BEHAVIOR_CHANGE_BUNDLE_STATUS',\n 'SYSTEM$CANCEL_ALL_QUERIES',\n 'SYSTEM$CANCEL_QUERY',\n 'SYSTEM$CLUSTERING_DEPTH',\n 'SYSTEM$CLUSTERING_INFORMATION',\n 'SYSTEM$CLUSTERING_RATIO ',\n 'SYSTEM$CURRENT_USER_TASK_NAME',\n 'SYSTEM$DATABASE_REFRESH_HISTORY ',\n 'SYSTEM$DATABASE_REFRESH_PROGRESS',\n 'SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB ',\n 'SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE',\n 'SYSTEM$DISABLE_DATABASE_REPLICATION',\n 'SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE',\n 'SYSTEM$ESTIMATE_QUERY_ACCELERATION',\n 'SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS',\n 'SYSTEM$EXPLAIN_JSON_TO_TEXT',\n 'SYSTEM$EXPLAIN_PLAN_JSON',\n 'SYSTEM$EXTERNAL_TABLE_PIPE_STATUS',\n 'SYSTEM$GENERATE_SAML_CSR',\n 'SYSTEM$GENERATE_SCIM_ACCESS_TOKEN',\n 'SYSTEM$GET_AWS_SNS_IAM_POLICY',\n 'SYSTEM$GET_PREDECESSOR_RETURN_VALUE',\n 'SYSTEM$GET_PRIVATELINK',\n 'SYSTEM$GET_PRIVATELINK_AUTHORIZED_ENDPOINTS',\n 'SYSTEM$GET_PRIVATELINK_CONFIG',\n 'SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO',\n 'SYSTEM$GET_TAG',\n 'SYSTEM$GET_TAG_ALLOWED_VALUES',\n 'SYSTEM$GET_TAG_ON_CURRENT_COLUMN',\n 'SYSTEM$GET_TAG_ON_CURRENT_TABLE',\n 'SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER',\n 'SYSTEM$LAST_CHANGE_COMMIT_TIME',\n 'SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME',\n 'SYSTEM$MIGRATE_SAML_IDP_REGISTRATION',\n 'SYSTEM$PIPE_FORCE_RESUME',\n 'SYSTEM$PIPE_STATUS',\n 'SYSTEM$REVOKE_PRIVATELINK',\n 'SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS',\n 'SYSTEM$SET_RETURN_VALUE',\n 'SYSTEM$SHOW_OAUTH_CLIENT_SECRETS',\n 'SYSTEM$STREAM_GET_TABLE_TIMESTAMP',\n 'SYSTEM$STREAM_HAS_DATA',\n 'SYSTEM$TASK_DEPENDENTS_ENABLE',\n 'SYSTEM$TYPEOF',\n 'SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS',\n 'SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN',\n 'SYSTEM$WAIT',\n 'SYSTEM$WHITELIST',\n 'SYSTEM$WHITELIST_PRIVATELINK',\n 'TAG_REFERENCES',\n 'TAG_REFERENCES_ALL_COLUMNS',\n 'TAG_REFERENCES_WITH_LINEAGE',\n 'TAN',\n 'TANH',\n 'TASK_DEPENDENTS',\n 'TASK_HISTORY',\n 'TIME_FROM_PARTS',\n 'TIME_SLICE',\n 'TIMEADD',\n 'TIMEDIFF',\n 'TIMESTAMP_FROM_PARTS',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TO_ARRAY',\n 'TO_BINARY',\n 'TO_BOOLEAN',\n 'TO_CHAR',\n 'TO_VARCHAR',\n 'TO_DATE',\n 'DATE',\n 'TO_DECIMAL',\n 'TO_NUMBER',\n 'TO_NUMERIC',\n 'TO_DOUBLE',\n 'TO_GEOGRAPHY',\n 'TO_GEOMETRY',\n 'TO_JSON',\n 'TO_OBJECT',\n 'TO_TIME',\n 'TIME',\n 'TO_TIMESTAMP',\n 'TO_TIMESTAMP_LTZ',\n 'TO_TIMESTAMP_NTZ',\n 'TO_TIMESTAMP_TZ',\n 'TO_VARIANT',\n 'TO_XML',\n 'TRANSLATE',\n 'TRIM',\n 'TRUNCATE',\n 'TRUNC',\n 'TRUNC',\n 'TRY_BASE64_DECODE_BINARY',\n 'TRY_BASE64_DECODE_STRING',\n 'TRY_CAST',\n 'TRY_HEX_DECODE_BINARY',\n 'TRY_HEX_DECODE_STRING',\n 'TRY_PARSE_JSON',\n 'TRY_TO_BINARY',\n 'TRY_TO_BOOLEAN',\n 'TRY_TO_DATE',\n 'TRY_TO_DECIMAL',\n 'TRY_TO_NUMBER',\n 'TRY_TO_NUMERIC',\n 'TRY_TO_DOUBLE',\n 'TRY_TO_GEOGRAPHY',\n 'TRY_TO_GEOMETRY',\n 'TRY_TO_TIME',\n 'TRY_TO_TIMESTAMP',\n 'TRY_TO_TIMESTAMP_LTZ',\n 'TRY_TO_TIMESTAMP_NTZ',\n 'TRY_TO_TIMESTAMP_TZ',\n 'TYPEOF',\n 'UNICODE',\n 'UNIFORM',\n 'UPPER',\n 'UUID_STRING',\n 'VALIDATE',\n 'VALIDATE_PIPE_LOAD',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n 'VARIANCE_SAMP',\n 'VARIANCE_POP',\n 'WAREHOUSE_LOAD_HISTORY',\n 'WAREHOUSE_METERING_HISTORY',\n 'WIDTH_BUCKET',\n 'XMLGET',\n 'YEAR',\n 'YEAROFWEEK',\n 'YEAROFWEEKISO',\n 'DAY',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFWEEKISO',\n 'DAYOFYEAR',\n 'WEEK',\n 'WEEK',\n 'WEEKOFYEAR',\n 'WEEKISO',\n 'MONTH',\n 'QUARTER',\n 'ZEROIFNULL',\n 'ZIPF',\n ],\n});\n","import { flatKeywordList } from '../../utils.js';\n\nexport const keywords = flatKeywordList({\n // https://docs.snowflake.com/en/sql-reference/reserved-keywords.html\n //\n // run in console on this page: $x('//tbody/tr/*[1]/p/text()').map(x => x.nodeValue)\n all: [\n 'ACCOUNT',\n 'ALL',\n 'ALTER',\n 'AND',\n 'ANY',\n 'AS',\n 'BETWEEN',\n 'BY',\n 'CASE',\n 'CAST',\n 'CHECK',\n 'COLUMN',\n 'CONNECT',\n 'CONNECTION',\n 'CONSTRAINT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'DATABASE',\n 'DELETE',\n 'DISTINCT',\n 'DROP',\n 'ELSE',\n 'EXISTS',\n 'FALSE',\n 'FOLLOWING',\n 'FOR',\n 'FROM',\n 'FULL',\n 'GRANT',\n 'GROUP',\n 'GSCLUSTER',\n 'HAVING',\n 'ILIKE',\n 'IN',\n 'INCREMENT',\n 'INNER',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'ISSUE',\n 'JOIN',\n 'LATERAL',\n 'LEFT',\n 'LIKE',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'MINUS',\n 'NATURAL',\n 'NOT',\n 'NULL',\n 'OF',\n 'ON',\n 'OR',\n 'ORDER',\n 'ORGANIZATION',\n 'QUALIFY',\n 'REGEXP',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROW',\n 'ROWS',\n 'SAMPLE',\n 'SCHEMA',\n 'SELECT',\n 'SET',\n 'SOME',\n 'START',\n 'TABLE',\n 'TABLESAMPLE',\n 'THEN',\n 'TO',\n 'TRIGGER',\n 'TRUE',\n 'TRY_CAST',\n 'UNION',\n 'UNIQUE',\n 'UPDATE',\n 'USING',\n 'VALUES',\n 'VIEW',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WITH',\n ],\n // These are definitely keywords, but haven't found a definite list in the docs\n additional: ['COMMENT'],\n});\n","import { DialectOptions } from '../../dialect.js';\nimport { expandPhrases } from '../../expandPhrases.js';\nimport { functions } from './snowflake.functions.js';\nimport { keywords } from './snowflake.keywords.js';\n\nconst reservedSelect = expandPhrases(['SELECT [ALL | DISTINCT]']);\n\nconst reservedClauses = expandPhrases([\n // queries\n 'WITH [RECURSIVE]',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'PARTITION BY',\n 'ORDER BY',\n 'QUALIFY',\n 'LIMIT',\n 'OFFSET',\n 'FETCH [FIRST | NEXT]',\n // Data manipulation\n // - insert:\n 'INSERT [OVERWRITE] [ALL INTO | INTO | ALL | FIRST]',\n '{THEN | ELSE} INTO',\n 'VALUES',\n // - update:\n 'SET',\n // Data definition\n // - view\n 'CREATE [OR REPLACE] [SECURE] [RECURSIVE] VIEW [IF NOT EXISTS]',\n // - create/drop/merge table\n 'CREATE [OR REPLACE] [VOLATILE] TABLE [IF NOT EXISTS]',\n 'CREATE [OR REPLACE] [LOCAL | GLOBAL] {TEMP|TEMPORARY} TABLE [IF NOT EXISTS]',\n 'CLUSTER BY',\n '[WITH] {MASKING POLICY | TAG | ROW ACCESS POLICY}',\n 'COPY GRANTS',\n 'USING TEMPLATE',\n 'MERGE INTO',\n 'WHEN MATCHED [AND]',\n 'THEN {UPDATE SET | DELETE}',\n 'WHEN NOT MATCHED THEN INSERT',\n]);\n\nconst onelineClauses = expandPhrases([\n // - update:\n 'UPDATE',\n // - delete:\n 'DELETE FROM',\n // - drop table:\n 'DROP TABLE [IF EXISTS]',\n // - alter table:\n 'ALTER TABLE [IF EXISTS]',\n 'RENAME TO',\n 'SWAP WITH',\n '[SUSPEND | RESUME] RECLUSTER',\n 'DROP CLUSTERING KEY',\n 'ADD [COLUMN]',\n 'RENAME COLUMN',\n '{ALTER | MODIFY} [COLUMN]',\n 'DROP [COLUMN]',\n '{ADD | ALTER | MODIFY | DROP} [CONSTRAINT]',\n 'RENAME CONSTRAINT',\n '{ADD | DROP} SEARCH OPTIMIZATION',\n '{SET | UNSET} TAG', // Actually TAG is optional, but that conflicts with UPDATE..SET statement\n '{ADD | DROP} ROW ACCESS POLICY',\n 'DROP ALL ROW ACCESS POLICIES',\n '{SET | DROP} DEFAULT', // for alter column\n '{SET | DROP} NOT NULL', // for alter column\n '[SET DATA] TYPE', // for alter column\n 'UNSET COMMENT', // for alter column\n '{SET | UNSET} MASKING POLICY', // for alter column\n // - truncate:\n 'TRUNCATE [TABLE] [IF EXISTS]',\n // other\n // https://docs.snowflake.com/en/sql-reference/sql-all.html\n //\n // 1. run in console on this page: $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue)\n // 2. delete all lines that contain a sting like '(.*)', they are already covered in the list\n // 3. delete all lines that contain a sting like '<.*>', they are already covered in the list\n // 4. delete all lines that contain '…', they are part of a regex statement that can't be covered here\n // 5. Manually add 'COPY INTO'\n // 6. Remove all lines that are already in `reservedClauses`\n //\n // Steps 1-4 can be combined by the following script in the developer console:\n // $x('//tbody/tr/*[1]//a/span/text()').map(x => x.nodeValue) // Step 1\n // filter(x => !x.match(/\\(.*\\)/) && !x.match(/…/) && !x.match(/<.*>/)) // Step 2-4\n 'ALTER ACCOUNT',\n 'ALTER API INTEGRATION',\n 'ALTER CONNECTION',\n 'ALTER DATABASE',\n 'ALTER EXTERNAL TABLE',\n 'ALTER FAILOVER GROUP',\n 'ALTER FILE FORMAT',\n 'ALTER FUNCTION',\n 'ALTER INTEGRATION',\n 'ALTER MASKING POLICY',\n 'ALTER MATERIALIZED VIEW',\n 'ALTER NETWORK POLICY',\n 'ALTER NOTIFICATION INTEGRATION',\n 'ALTER PIPE',\n 'ALTER PROCEDURE',\n 'ALTER REPLICATION GROUP',\n 'ALTER RESOURCE MONITOR',\n 'ALTER ROLE',\n 'ALTER ROW ACCESS POLICY',\n 'ALTER SCHEMA',\n 'ALTER SECURITY INTEGRATION',\n 'ALTER SEQUENCE',\n 'ALTER SESSION',\n 'ALTER SESSION POLICY',\n 'ALTER SHARE',\n 'ALTER STAGE',\n 'ALTER STORAGE INTEGRATION',\n 'ALTER STREAM',\n 'ALTER TAG',\n 'ALTER TASK',\n 'ALTER USER',\n 'ALTER VIEW',\n 'ALTER WAREHOUSE',\n 'BEGIN',\n 'CALL',\n 'COMMIT',\n 'COPY INTO',\n 'CREATE ACCOUNT',\n 'CREATE API INTEGRATION',\n 'CREATE CONNECTION',\n 'CREATE DATABASE',\n 'CREATE EXTERNAL FUNCTION',\n 'CREATE EXTERNAL TABLE',\n 'CREATE FAILOVER GROUP',\n 'CREATE FILE FORMAT',\n 'CREATE FUNCTION',\n 'CREATE INTEGRATION',\n 'CREATE MANAGED ACCOUNT',\n 'CREATE MASKING POLICY',\n 'CREATE MATERIALIZED VIEW',\n 'CREATE NETWORK POLICY',\n 'CREATE NOTIFICATION INTEGRATION',\n 'CREATE PIPE',\n 'CREATE PROCEDURE',\n 'CREATE REPLICATION GROUP',\n 'CREATE RESOURCE MONITOR',\n 'CREATE ROLE',\n 'CREATE ROW ACCESS POLICY',\n 'CREATE SCHEMA',\n 'CREATE SECURITY INTEGRATION',\n 'CREATE SEQUENCE',\n 'CREATE SESSION POLICY',\n 'CREATE SHARE',\n 'CREATE STAGE',\n 'CREATE STORAGE INTEGRATION',\n 'CREATE STREAM',\n 'CREATE TAG',\n 'CREATE TASK',\n 'CREATE USER',\n 'CREATE WAREHOUSE',\n 'DELETE',\n 'DESCRIBE DATABASE',\n 'DESCRIBE EXTERNAL TABLE',\n 'DESCRIBE FILE FORMAT',\n 'DESCRIBE FUNCTION',\n 'DESCRIBE INTEGRATION',\n 'DESCRIBE MASKING POLICY',\n 'DESCRIBE MATERIALIZED VIEW',\n 'DESCRIBE NETWORK POLICY',\n 'DESCRIBE PIPE',\n 'DESCRIBE PROCEDURE',\n 'DESCRIBE RESULT',\n 'DESCRIBE ROW ACCESS POLICY',\n 'DESCRIBE SCHEMA',\n 'DESCRIBE SEQUENCE',\n 'DESCRIBE SESSION POLICY',\n 'DESCRIBE SHARE',\n 'DESCRIBE STAGE',\n 'DESCRIBE STREAM',\n 'DESCRIBE TABLE',\n 'DESCRIBE TASK',\n 'DESCRIBE TRANSACTION',\n 'DESCRIBE USER',\n 'DESCRIBE VIEW',\n 'DESCRIBE WAREHOUSE',\n 'DROP CONNECTION',\n 'DROP DATABASE',\n 'DROP EXTERNAL TABLE',\n 'DROP FAILOVER GROUP',\n 'DROP FILE FORMAT',\n 'DROP FUNCTION',\n 'DROP INTEGRATION',\n 'DROP MANAGED ACCOUNT',\n 'DROP MASKING POLICY',\n 'DROP MATERIALIZED VIEW',\n 'DROP NETWORK POLICY',\n 'DROP PIPE',\n 'DROP PROCEDURE',\n 'DROP REPLICATION GROUP',\n 'DROP RESOURCE MONITOR',\n 'DROP ROLE',\n 'DROP ROW ACCESS POLICY',\n 'DROP SCHEMA',\n 'DROP SEQUENCE',\n 'DROP SESSION POLICY',\n 'DROP SHARE',\n 'DROP STAGE',\n 'DROP STREAM',\n 'DROP TAG',\n 'DROP TASK',\n 'DROP USER',\n 'DROP VIEW',\n 'DROP WAREHOUSE',\n 'EXECUTE IMMEDIATE',\n 'EXECUTE TASK',\n 'EXPLAIN',\n 'GET',\n 'GRANT OWNERSHIP',\n 'GRANT ROLE',\n 'INSERT',\n 'LIST',\n 'MERGE',\n 'PUT',\n 'REMOVE',\n 'REVOKE ROLE',\n 'ROLLBACK',\n 'SHOW COLUMNS',\n 'SHOW CONNECTIONS',\n 'SHOW DATABASES',\n 'SHOW DATABASES IN FAILOVER GROUP',\n 'SHOW DATABASES IN REPLICATION GROUP',\n 'SHOW DELEGATED AUTHORIZATIONS',\n 'SHOW EXTERNAL FUNCTIONS',\n 'SHOW EXTERNAL TABLES',\n 'SHOW FAILOVER GROUPS',\n 'SHOW FILE FORMATS',\n 'SHOW FUNCTIONS',\n 'SHOW GLOBAL ACCOUNTS',\n 'SHOW GRANTS',\n 'SHOW INTEGRATIONS',\n 'SHOW LOCKS',\n 'SHOW MANAGED ACCOUNTS',\n 'SHOW MASKING POLICIES',\n 'SHOW MATERIALIZED VIEWS',\n 'SHOW NETWORK POLICIES',\n 'SHOW OBJECTS',\n 'SHOW ORGANIZATION ACCOUNTS',\n 'SHOW PARAMETERS',\n 'SHOW PIPES',\n 'SHOW PRIMARY KEYS',\n 'SHOW PROCEDURES',\n 'SHOW REGIONS',\n 'SHOW REPLICATION ACCOUNTS',\n 'SHOW REPLICATION DATABASES',\n 'SHOW REPLICATION GROUPS',\n 'SHOW RESOURCE MONITORS',\n 'SHOW ROLES',\n 'SHOW ROW ACCESS POLICIES',\n 'SHOW SCHEMAS',\n 'SHOW SEQUENCES',\n 'SHOW SESSION POLICIES',\n 'SHOW SHARES',\n 'SHOW SHARES IN FAILOVER GROUP',\n 'SHOW SHARES IN REPLICATION GROUP',\n 'SHOW STAGES',\n 'SHOW STREAMS',\n 'SHOW TABLES',\n 'SHOW TAGS',\n 'SHOW TASKS',\n 'SHOW TRANSACTIONS',\n 'SHOW USER FUNCTIONS',\n 'SHOW USERS',\n 'SHOW VARIABLES',\n 'SHOW VIEWS',\n 'SHOW WAREHOUSES',\n 'TRUNCATE MATERIALIZED VIEW',\n 'UNDROP DATABASE',\n 'UNDROP SCHEMA',\n 'UNDROP TABLE',\n 'UNDROP TAG',\n 'UNSET',\n 'USE DATABASE',\n 'USE ROLE',\n 'USE SCHEMA',\n 'USE SECONDARY ROLES',\n 'USE WAREHOUSE',\n]);\n\nconst reservedSetOperations = expandPhrases(['UNION [ALL]', 'MINUS', 'EXCEPT', 'INTERSECT']);\n\nconst reservedJoins = expandPhrases([\n '[INNER] JOIN',\n '[NATURAL] {LEFT | RIGHT | FULL} [OUTER] JOIN',\n '{CROSS | NATURAL} JOIN',\n]);\n\nconst reservedPhrases = expandPhrases([\n '{ROWS | RANGE} BETWEEN',\n 'ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]',\n]);\n\nexport const snowflake: DialectOptions = {\n tokenizerOptions: {\n reservedSelect,\n reservedClauses: [...reservedClauses, ...onelineClauses],\n reservedSetOperations,\n reservedJoins,\n reservedPhrases,\n reservedKeywords: keywords,\n reservedFunctionNames: functions,\n stringTypes: ['$$', `''-qq-bs`],\n identTypes: ['\"\"-qq'],\n variableTypes: [\n // for accessing columns at certain positons in the table\n { regex: '[$][1-9]\\\\d*' },\n // identifier style syntax\n { regex: '[$][_a-zA-Z][_a-zA-Z0-9$]*' },\n ],\n extraParens: ['[]'],\n identChars: { rest: '$' },\n lineCommentTypes: ['--', '//'],\n operators: [\n // Modulo\n '%',\n // Type cast\n '::',\n // String concat\n '||',\n // Get Path\n ':',\n // Generators: https://docs.snowflake.com/en/sql-reference/functions/generator.html#generator\n '=>',\n ],\n },\n formatOptions: {\n alwaysDenseOperators: [':', '::'],\n onelineClauses,\n },\n};\n","import { PrefixedQuoteType } from './TokenizerOptions.js';\n\n// Escapes regex special chars\nexport const escapeRegExp = (string: string) => string.replace(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\n\nexport const WHITESPACE_REGEX = /\\s+/uy;\n\nexport const patternToRegex = (pattern: string): RegExp => new RegExp(`(?:${pattern})`, 'uy');\n\n// Converts \"ab\" to \"[Aa][Bb]\"\nexport const toCaseInsensitivePattern = (prefix: string): string =>\n prefix\n .split('')\n .map(char => (/ /gu.test(char) ? '\\\\s+' : `[${char.toUpperCase()}${char.toLowerCase()}]`))\n .join('');\n\nexport const withDashes = (pattern: string): string => pattern + '(?:-' + pattern + ')*';\n\n// Converts [\"a\", \"b\"] to \"(?:[Aa]|[Bb]|)\" or \"(?:[Aa]|[Bb])\" when required = true\nexport const prefixesPattern = ({ prefixes, requirePrefix }: PrefixedQuoteType): string =>\n `(?:${prefixes.map(toCaseInsensitivePattern).join('|')}${requirePrefix ? '' : '|'})`;\n","import { sortByLengthDesc } from '../utils.js';\n\nimport { IdentChars, QuoteType, VariableType } from './TokenizerOptions.js';\nimport { escapeRegExp, patternToRegex, prefixesPattern, withDashes } from './regexUtil.js';\n\n/**\n * Builds a RegExp for valid line comments in a SQL dialect\n * @param {string[]} lineCommentTypes - list of character strings that denote line comments\n */\nexport const lineComment = (lineCommentTypes: string[]) =>\n new RegExp(`(?:${lineCommentTypes.map(escapeRegExp).join('|')}).*?(?=\\r\\n|\\r|\\n|$)`, 'uy');\n\n/**\n * Builds a RegExp for matching either open- or close-parenthesis patterns\n */\nexport const parenthesis = (kind: 'open' | 'close', extraParens: ('[]' | '{}')[] = []): RegExp => {\n const index = kind === 'open' ? 0 : 1;\n const parens = ['()', ...extraParens].map(pair => pair[index]);\n return patternToRegex(parens.map(escapeRegExp).join('|'));\n};\n\n/**\n * Builds a RegExp containing all operators for a SQL dialect\n */\nexport const operator = (operators: string[]) =>\n patternToRegex(`${sortByLengthDesc(operators).map(escapeRegExp).join('|')}`);\n\n// Negative lookahead to avoid matching a keyword that's actually part of identifier,\n// which can happen when identifier allows word-boundary characters inside it.\n//\n// For example \"SELECT$ME\" should be tokenized as:\n// - [\"SELECT$ME\"] when $ is allowed inside identifiers\n// - [\"SELECT\", \"$\", \"ME\"] when $ can't be part of identifiers.\nconst rejectIdentCharsPattern = ({ rest, dashes }: IdentChars): string =>\n rest || dashes ? `(?![${rest || ''}${dashes ? '-' : ''}])` : '';\n\n/**\n * Builds a RegExp for all Reserved Keywords in a SQL dialect\n */\nexport const reservedWord = (reservedKeywords: string[], identChars: IdentChars = {}): RegExp => {\n if (reservedKeywords.length === 0) {\n return /^\\b$/u;\n }\n\n const avoidIdentChars = rejectIdentCharsPattern(identChars);\n\n const reservedKeywordsPattern = sortByLengthDesc(reservedKeywords)\n .map(escapeRegExp)\n .join('|')\n .replace(/ /gu, '\\\\s+');\n\n return new RegExp(`(?:${reservedKeywordsPattern})${avoidIdentChars}\\\\b`, 'iuy');\n};\n\n/**\n * Builds a RegExp for parameter placeholder patterns\n * @param {string[]} paramTypes - list of strings that denote placeholder types\n * @param {string} pattern - string that denotes placeholder pattern\n */\nexport const parameter = (paramTypes: string[], pattern: string): RegExp | undefined => {\n if (!paramTypes.length) {\n return undefined;\n }\n const typesRegex = paramTypes.map(escapeRegExp).join('|');\n\n return patternToRegex(`(?:${typesRegex})(?:${pattern})`);\n};\n\nconst buildQStringPatterns = () => {\n const specialDelimiterMap = {\n '<': '>',\n '[': ']',\n '(': ')',\n '{': '}',\n };\n\n // base pattern for special delimiters, left must correspond with right\n const singlePattern = \"{left}(?:(?!{right}').)*?{right}\";\n\n // replace {left} and {right} with delimiters, collect as array\n const patternList = Object.entries(specialDelimiterMap).map(([left, right]) =>\n singlePattern.replace(/{left}/g, escapeRegExp(left)).replace(/{right}/g, escapeRegExp(right))\n );\n\n const specialDelimiters = escapeRegExp(Object.keys(specialDelimiterMap).join(''));\n // standard pattern for common delimiters, ignores special delimiters\n const standardDelimiterPattern = String.raw`(?[^\\s${specialDelimiters}])(?:(?!\\k').)*?\\k`;\n\n // constructs final pattern by joining all cases\n const qStringPattern = `[Qq]'(?:${standardDelimiterPattern}|${patternList.join('|')})'`;\n\n return qStringPattern;\n};\n\n// Regex patterns for all supported quote styles.\n//\n// Most of them have a single escaping-style built in,\n// but \"\" and '' support multiple versions of escapes,\n// which must be selected with suffixes: -qq, -bs, -qq-bs, -raw\nexport const quotePatterns = {\n // - backtick quoted (using `` to escape)\n '``': '(?:`[^`]*`)+',\n // - Transact-SQL square bracket quoted (using ]] to escape)\n '[]': String.raw`(?:\\[[^\\]]*\\])(?:\\][^\\]]*\\])*`,\n // double-quoted\n '\"\"-qq': String.raw`(?:\"[^\"]*\")+`, // with repeated quote escapes\n '\"\"-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")`, // with backslash escapes\n '\"\"-qq-bs': String.raw`(?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")+`, // with repeated quote or backslash escapes\n '\"\"-raw': String.raw`(?:\"[^\"]*\")`, // no escaping\n // single-quoted\n \"''-qq\": String.raw`(?:'[^']*')+`, // with repeated quote escapes\n \"''-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')`, // with backslash escapes\n \"''-qq-bs\": String.raw`(?:'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')+`, // with repeated quote or backslash escapes\n \"''-raw\": String.raw`(?:'[^']*')`, // no escaping\n // PostgreSQL dollar-quoted\n '$$': String.raw`(?\\$\\w*\\$)[\\s\\S]*?\\k`,\n // BigQuery '''triple-quoted''' (using \\' to escape)\n \"'''..'''\": String.raw`'''[^\\\\]*?(?:\\\\.[^\\\\]*?)*?'''`,\n // BigQuery \"\"\"triple-quoted\"\"\" (using \\\" to escape)\n '\"\"\"..\"\"\"': String.raw`\"\"\"[^\\\\]*?(?:\\\\.[^\\\\]*?)*?\"\"\"`,\n // Hive and Spark variables: ${name}\n '{}': String.raw`(?:\\{[^\\}]*\\})`,\n // Oracle q'' strings: q'' q'|text|' ...\n \"q''\": buildQStringPatterns(),\n};\n\nconst singleQuotePattern = (quoteTypes: QuoteType): string => {\n if (typeof quoteTypes === 'string') {\n return quotePatterns[quoteTypes];\n } else if ('regex' in quoteTypes) {\n return quoteTypes.regex;\n } else {\n return prefixesPattern(quoteTypes) + quotePatterns[quoteTypes.quote];\n }\n};\n\n/** Builds a RegExp for matching variables */\nexport const variable = (varTypes: VariableType[]): RegExp =>\n patternToRegex(\n varTypes\n .map(varType => ('regex' in varType ? varType.regex : singleQuotePattern(varType)))\n .join('|')\n );\n\n/** Builds a quote-delimited pattern for matching all given quote types */\nexport const stringPattern = (quoteTypes: QuoteType[]): string =>\n quoteTypes.map(singleQuotePattern).join('|');\n\n/** Builds a RegExp for matching quote-delimited patterns */\nexport const string = (quoteTypes: QuoteType[]): RegExp =>\n patternToRegex(stringPattern(quoteTypes));\n\n/**\n * Builds a RegExp for valid identifiers in a SQL dialect\n */\nexport const identifier = (specialChars: IdentChars = {}): RegExp =>\n patternToRegex(identifierPattern(specialChars));\n\n/**\n * Builds a RegExp string for valid identifiers in a SQL dialect\n */\nexport const identifierPattern = ({\n first,\n rest,\n dashes,\n allowFirstCharNumber,\n}: IdentChars = {}): string => {\n // Unicode letters, diacritical marks and underscore\n const letter = '\\\\p{Alphabetic}\\\\p{Mark}_';\n // Numbers 0..9, plus various unicode numbers\n const number = '\\\\p{Decimal_Number}';\n\n const firstChars = escapeRegExp(first ?? '');\n const restChars = escapeRegExp(rest ?? '');\n\n const pattern = allowFirstCharNumber\n ? `[${letter}${number}${firstChars}][${letter}${number}${restChars}]*`\n : `[${letter}${firstChars}][${letter}${number}${restChars}]*`;\n\n return dashes ? withDashes(pattern) : pattern;\n};\n","/**\n * Determines line and column number of character index in source code.\n */\nexport function lineColFromIndex(source: string, index: number): LineCol {\n const lines = source.slice(0, index).split(/\\n/);\n return { line: lines.length, col: lines[lines.length - 1].length + 1 };\n}\n\nexport interface LineCol {\n line: number;\n col: number;\n}\n","import { Token, TokenType } from './token.js';\nimport { lineColFromIndex } from './lineColFromIndex.js';\nimport { WHITESPACE_REGEX } from './regexUtil.js';\n\nexport interface RegExpLike {\n lastIndex: number;\n exec(input: string): string[] | null;\n}\n\nexport interface TokenRule {\n type: TokenType;\n // Normally a RegExp object.\n // But to allow for more complex matching logic,\n // an object can be given that implements a RegExpLike interface.\n regex: RegExpLike;\n // Called with the raw string that was matched\n text?: (rawText: string) => string;\n key?: (rawText: string) => string;\n}\n\nexport default class TokenizerEngine {\n private input = ''; // The input SQL string to process\n private index = 0; // Current position in string\n\n constructor(private rules: TokenRule[]) {}\n\n /**\n * Takes a SQL string and breaks it into tokens.\n * Each token is an object with type and value.\n *\n * @param {string} input - The SQL string\n * @returns {Token[]} output token stream\n */\n public tokenize(input: string): Token[] {\n this.input = input;\n this.index = 0;\n const tokens: Token[] = [];\n let token: Token | undefined;\n\n // Keep processing the string until end is reached\n while (this.index < this.input.length) {\n // skip any preceding whitespace\n const precedingWhitespace = this.getWhitespace();\n\n if (this.index < this.input.length) {\n // Get the next token and the token type\n token = this.getNextToken();\n if (!token) {\n throw this.createParseError();\n }\n\n tokens.push({ ...token, precedingWhitespace });\n }\n }\n return tokens;\n }\n\n private createParseError(): Error {\n const text = this.input.slice(this.index, this.index + 10);\n const { line, col } = lineColFromIndex(this.input, this.index);\n return new Error(`Parse error: Unexpected \"${text}\" at line ${line} column ${col}`);\n }\n\n private getWhitespace(): string | undefined {\n WHITESPACE_REGEX.lastIndex = this.index;\n\n const matches = WHITESPACE_REGEX.exec(this.input);\n if (matches) {\n // Advance current position by matched whitespace length\n this.index += matches[0].length;\n return matches[0];\n }\n return undefined;\n }\n\n private getNextToken(): Token | undefined {\n for (const rule of this.rules) {\n const token = this.match(rule);\n if (token) {\n return token;\n }\n }\n return undefined;\n }\n\n // Attempts to match token rule regex at current position in input\n private match(rule: TokenRule): Token | undefined {\n rule.regex.lastIndex = this.index;\n const matches = rule.regex.exec(this.input);\n if (matches) {\n const matchedText = matches[0];\n\n const token: Token = {\n type: rule.type,\n raw: matchedText,\n text: rule.text ? rule.text(matchedText) : matchedText,\n start: this.index,\n };\n\n if (rule.key) {\n token.key = rule.key(matchedText);\n }\n\n // Advance current position by matched token length\n this.index += matchedText.length;\n return token;\n }\n return undefined;\n }\n}\n","/* eslint-disable no-cond-assign */\nimport { RegExpLike } from './TokenizerEngine.js';\n\nconst START = /\\/\\*/uy; // matches: /*\nconst MIDDLE = /([^/*]|\\*[^/]|\\/[^*])+/uy; // matches text NOT containing /* or */\nconst END = /\\*\\//uy; // matches: */\n\n/**\n * An object mimicking a regular expression,\n * for matching nested block-comments.\n */\nexport class NestedComment implements RegExpLike {\n public lastIndex: number = 0;\n\n public exec(input: string): string[] | null {\n let result = '';\n let match: string | null;\n let nestLevel = 0;\n\n if ((match = this.matchSection(START, input))) {\n result += match;\n nestLevel++;\n } else {\n return null;\n }\n\n while (nestLevel > 0) {\n if ((match = this.matchSection(START, input))) {\n result += match;\n nestLevel++;\n } else if ((match = this.matchSection(END, input))) {\n result += match;\n nestLevel--;\n } else if ((match = this.matchSection(MIDDLE, input))) {\n result += match;\n } else {\n return null;\n }\n }\n\n return [result];\n }\n\n private matchSection(regex: RegExp, input: string): string | null {\n regex.lastIndex = this.lastIndex;\n const matches = regex.exec(input);\n if (matches) {\n this.lastIndex += matches[0].length;\n }\n return matches ? matches[0] : null;\n }\n}\n","import { Token, TokenType } from './token.js';\nimport * as regex from './regexFactory.js';\nimport { ParamTypes, TokenizerOptions } from './TokenizerOptions.js';\nimport TokenizerEngine, { TokenRule } from './TokenizerEngine.js';\nimport { escapeRegExp, patternToRegex } from './regexUtil.js';\nimport { equalizeWhitespace, Optional } from '../utils.js';\nimport { NestedComment } from './NestedComment.js';\n\ntype OptionalTokenRule = Optional;\n\nexport default class Tokenizer {\n private rulesBeforeParams: TokenRule[];\n private rulesAfterParams: TokenRule[];\n\n constructor(private cfg: TokenizerOptions) {\n this.rulesBeforeParams = this.buildRulesBeforeParams(cfg);\n this.rulesAfterParams = this.buildRulesAfterParams(cfg);\n }\n\n public tokenize(input: string, paramTypesOverrides: ParamTypes): Token[] {\n const rules = [\n ...this.rulesBeforeParams,\n ...this.buildParamRules(this.cfg, paramTypesOverrides),\n ...this.rulesAfterParams,\n ];\n const tokens = new TokenizerEngine(rules).tokenize(input);\n return this.cfg.postProcess ? this.cfg.postProcess(tokens) : tokens;\n }\n\n // These rules can be cached as they only depend on\n // the Tokenizer config options specified for each SQL dialect\n private buildRulesBeforeParams(cfg: TokenizerOptions): TokenRule[] {\n return this.validRules([\n {\n type: TokenType.BLOCK_COMMENT,\n regex: cfg.nestedBlockComments ? new NestedComment() : /(\\/\\*[^]*?\\*\\/)/uy,\n },\n {\n type: TokenType.LINE_COMMENT,\n regex: regex.lineComment(cfg.lineCommentTypes ?? ['--']),\n },\n {\n type: TokenType.QUOTED_IDENTIFIER,\n regex: regex.string(cfg.identTypes),\n },\n {\n type: TokenType.NUMBER,\n regex:\n /(?:0x[0-9a-fA-F]+|0b[01]+|(?:-\\s*)?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+(?:\\.[0-9]+)?)?)(?![\\w\\p{Alphabetic}])/uy,\n },\n // RESERVED_PHRASE is matched before all other keyword tokens\n // to e.g. prioritize matching \"TIMESTAMP WITH TIME ZONE\" phrase over \"WITH\" clause.\n {\n type: TokenType.RESERVED_PHRASE,\n regex: regex.reservedWord(cfg.reservedPhrases ?? [], cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.CASE,\n regex: /CASE\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.END,\n regex: /END\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.BETWEEN,\n regex: /BETWEEN\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.LIMIT,\n regex: cfg.reservedClauses.includes('LIMIT') ? /LIMIT\\b/iuy : undefined,\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_CLAUSE,\n regex: regex.reservedWord(cfg.reservedClauses, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_SELECT,\n regex: regex.reservedWord(cfg.reservedSelect, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_SET_OPERATION,\n regex: regex.reservedWord(cfg.reservedSetOperations, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.WHEN,\n regex: /WHEN\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.ELSE,\n regex: /ELSE\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.THEN,\n regex: /THEN\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_JOIN,\n regex: regex.reservedWord(cfg.reservedJoins, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.AND,\n regex: /AND\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.OR,\n regex: /OR\\b/iuy,\n text: toCanonical,\n },\n {\n type: TokenType.XOR,\n regex: cfg.supportsXor ? /XOR\\b/iuy : undefined,\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_FUNCTION_NAME,\n regex: regex.reservedWord(cfg.reservedFunctionNames, cfg.identChars),\n text: toCanonical,\n },\n {\n type: TokenType.RESERVED_KEYWORD,\n regex: regex.reservedWord(cfg.reservedKeywords, cfg.identChars),\n text: toCanonical,\n },\n ]);\n }\n\n // These rules can also be cached as they only depend on\n // the Tokenizer config options specified for each SQL dialect\n private buildRulesAfterParams(cfg: TokenizerOptions): TokenRule[] {\n return this.validRules([\n {\n type: TokenType.VARIABLE,\n regex: cfg.variableTypes ? regex.variable(cfg.variableTypes) : undefined,\n },\n { type: TokenType.STRING, regex: regex.string(cfg.stringTypes) },\n {\n type: TokenType.IDENTIFIER,\n regex: regex.identifier(cfg.identChars),\n },\n { type: TokenType.DELIMITER, regex: /[;]/uy },\n { type: TokenType.COMMA, regex: /[,]/y },\n {\n type: TokenType.OPEN_PAREN,\n regex: regex.parenthesis('open', cfg.extraParens),\n },\n {\n type: TokenType.CLOSE_PAREN,\n regex: regex.parenthesis('close', cfg.extraParens),\n },\n {\n type: TokenType.OPERATOR,\n regex: regex.operator([\n // standard operators\n '+',\n '-',\n '/',\n '>',\n '<',\n '=',\n '<>',\n '<=',\n '>=',\n '!=',\n ...(cfg.operators ?? []),\n ]),\n },\n { type: TokenType.ASTERISK, regex: /[*]/uy },\n { type: TokenType.DOT, regex: /[.]/uy },\n ]);\n }\n\n // These rules can't be blindly cached as the paramTypesOverrides object\n // can differ on each invocation of the format() function.\n private buildParamRules(cfg: TokenizerOptions, paramTypesOverrides: ParamTypes): TokenRule[] {\n // Each dialect has its own default parameter types (if any),\n // but these can be overriden by the user of the library.\n const paramTypes = {\n named: paramTypesOverrides?.named || cfg.paramTypes?.named || [],\n quoted: paramTypesOverrides?.quoted || cfg.paramTypes?.quoted || [],\n numbered: paramTypesOverrides?.numbered || cfg.paramTypes?.numbered || [],\n positional:\n typeof paramTypesOverrides?.positional === 'boolean'\n ? paramTypesOverrides.positional\n : cfg.paramTypes?.positional,\n custom: paramTypesOverrides?.custom || cfg.paramTypes?.custom || [],\n };\n\n return this.validRules([\n {\n type: TokenType.NAMED_PARAMETER,\n regex: regex.parameter(\n paramTypes.named,\n regex.identifierPattern(cfg.paramChars || cfg.identChars)\n ),\n key: v => v.slice(1),\n },\n {\n type: TokenType.QUOTED_PARAMETER,\n regex: regex.parameter(paramTypes.quoted, regex.stringPattern(cfg.identTypes)),\n key: v =>\n (({ tokenKey, quoteChar }) =>\n tokenKey.replace(new RegExp(escapeRegExp('\\\\' + quoteChar), 'gu'), quoteChar))({\n tokenKey: v.slice(2, -1),\n quoteChar: v.slice(-1),\n }),\n },\n {\n type: TokenType.NUMBERED_PARAMETER,\n regex: regex.parameter(paramTypes.numbered, '[0-9]+'),\n key: v => v.slice(1),\n },\n {\n type: TokenType.POSITIONAL_PARAMETER,\n regex: paramTypes.positional ? /[?]/y : undefined,\n },\n ...paramTypes.custom.map(\n (customParam): TokenRule => ({\n type: TokenType.CUSTOM_PARAMETER,\n regex: patternToRegex(customParam.regex),\n key: customParam.key ?? (v => v),\n })\n ),\n ]);\n }\n\n // filters out rules for token types whose regex is undefined\n private validRules(rules: OptionalTokenRule[]): TokenRule[] {\n return rules.filter((rule): rule is TokenRule => Boolean(rule.regex));\n }\n}\n\n/**\n * Converts keywords (and keyword sequences) to canonical form:\n * - in uppercase\n * - single spaces between words\n */\nconst toCanonical = (v: string) => equalizeWhitespace(v.toUpperCase());\n","import {\n DialectFormatOptions,\n ProcessedDialectFormatOptions,\n} from './formatter/ExpressionFormatter.js';\nimport Tokenizer from './lexer/Tokenizer.js';\nimport { TokenizerOptions } from './lexer/TokenizerOptions.js';\n\nexport interface DialectOptions {\n tokenizerOptions: TokenizerOptions;\n formatOptions: DialectFormatOptions;\n}\n\nexport interface Dialect {\n tokenizer: Tokenizer;\n formatOptions: ProcessedDialectFormatOptions;\n}\n\nconst cache = new Map();\n\n/**\n * Factory function for building Dialect objects.\n * When called repeatedly with same options object returns the cached Dialect,\n * to avoid the cost of creating it again.\n */\nexport const createDialect = (options: DialectOptions): Dialect => {\n let dialect = cache.get(options);\n if (!dialect) {\n dialect = dialectFromOptions(options);\n cache.set(options, dialect);\n }\n return dialect;\n};\n\nconst dialectFromOptions = (dialectOptions: DialectOptions): Dialect => ({\n tokenizer: new Tokenizer(dialectOptions.tokenizerOptions),\n formatOptions: processDialectFormatOptions(dialectOptions.formatOptions),\n});\n\nconst processDialectFormatOptions = (\n options: DialectFormatOptions\n): ProcessedDialectFormatOptions => ({\n alwaysDenseOperators: options.alwaysDenseOperators || [],\n onelineClauses: Object.fromEntries(options.onelineClauses.map(name => [name, true])),\n});\n","import { FormatOptions } from '../FormatOptions.js';\n\n// Utility functions for config options\n\n/**\n * Creates a string to use for one step of indentation.\n */\nexport function indentString(cfg: FormatOptions): string {\n if (cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight') {\n return ' '.repeat(10);\n }\n if (cfg.useTabs) {\n return '\\t';\n }\n return ' '.repeat(cfg.tabWidth);\n}\n\n/**\n * True when indentStyle is one of the tabular ones.\n */\nexport function isTabularStyle(cfg: FormatOptions): boolean {\n return cfg.indentStyle === 'tabularLeft' || cfg.indentStyle === 'tabularRight';\n}\n","export type ParamItems = { [k: string]: string };\n\n/**\n * Handles placeholder replacement with given params.\n */\nexport default class Params {\n private params: ParamItems | string[] | undefined;\n private index: number;\n\n constructor(params: ParamItems | string[] | undefined) {\n this.params = params;\n this.index = 0;\n }\n\n /**\n * Returns param value that matches given placeholder with param key.\n */\n public get({ key, text }: { key?: string; text: string }): string {\n if (!this.params) {\n return text;\n }\n\n if (key) {\n return (this.params as ParamItems)[key];\n }\n return (this.params as string[])[this.index++];\n }\n\n /**\n * Returns index of current positional parameter.\n */\n public getPositionalParameterIndex(): number {\n return this.index;\n }\n\n /**\n * Sets index of current positional parameter.\n */\n public setPositionalParameterIndex(i: number) {\n this.index = i;\n }\n}\n","import { isReserved, Token, TokenType } from './token.js';\n\n/**\n * Ensures that no keyword token (RESERVED_*) is preceded by dot (.).\n *\n * Ensures that all RESERVED_FUNCTION_NAME tokens are followed by \"(\".\n * If they're not, converts the token to RESERVED_KEYWORD.\n *\n * When IDENTIFIER and RESERVED_KEYWORD token is followed by \"[\"\n * converts it to ARRAY_IDENTIFIER or ARRAY_KEYWORD accordingly.\n *\n * This is needed to avoid ambiguity in parser which expects function names\n * to always be followed by open-paren, and to distinguish between\n * array accessor `foo[1]` and array literal `[1, 2, 3]`.\n */\nexport function disambiguateTokens(tokens: Token[]): Token[] {\n return tokens\n .map(dotKeywordToIdent)\n .map(funcNameToKeyword)\n .map(identToArrayIdent)\n .map(keywordToArrayKeyword);\n}\n\nconst dotKeywordToIdent = (token: Token, i: number, tokens: Token[]): Token => {\n if (isReserved(token.type)) {\n const prevToken = prevNonCommentToken(tokens, i);\n if (prevToken && prevToken.text === '.') {\n return { ...token, type: TokenType.IDENTIFIER, text: token.raw };\n }\n }\n return token;\n};\n\nconst funcNameToKeyword = (token: Token, i: number, tokens: Token[]): Token => {\n if (token.type === TokenType.RESERVED_FUNCTION_NAME) {\n const nextToken = nextNonCommentToken(tokens, i);\n if (!nextToken || !isOpenParen(nextToken)) {\n return { ...token, type: TokenType.RESERVED_KEYWORD };\n }\n }\n return token;\n};\n\nconst identToArrayIdent = (token: Token, i: number, tokens: Token[]): Token => {\n if (token.type === TokenType.IDENTIFIER) {\n const nextToken = nextNonCommentToken(tokens, i);\n if (nextToken && isOpenBracket(nextToken)) {\n return { ...token, type: TokenType.ARRAY_IDENTIFIER };\n }\n }\n return token;\n};\n\nconst keywordToArrayKeyword = (token: Token, i: number, tokens: Token[]): Token => {\n if (token.type === TokenType.RESERVED_KEYWORD) {\n const nextToken = nextNonCommentToken(tokens, i);\n if (nextToken && isOpenBracket(nextToken)) {\n return { ...token, type: TokenType.ARRAY_KEYWORD };\n }\n }\n return token;\n};\n\nconst prevNonCommentToken = (tokens: Token[], index: number): Token | undefined =>\n nextNonCommentToken(tokens, index, -1);\n\nconst nextNonCommentToken = (\n tokens: Token[],\n index: number,\n dir: -1 | 1 = 1\n): Token | undefined => {\n let i = 1;\n while (tokens[index + i * dir] && isComment(tokens[index + i * dir])) {\n i++;\n }\n return tokens[index + i * dir];\n};\n\nconst isOpenParen = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '(';\n\nconst isOpenBracket = (t: Token): boolean => t.type === TokenType.OPEN_PAREN && t.text === '[';\n\nconst isComment = (t: Token): boolean =>\n t.type === TokenType.BLOCK_COMMENT || t.type === TokenType.LINE_COMMENT;\n","import { lineColFromIndex } from '../lexer/lineColFromIndex.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// Nearly type definitions say that Token must have a value field,\n// which however is wrong. Instead Nearley expects a text field.\ntype NearleyToken = Token & { value: string };\n\nexport default class LexerAdapter {\n private index = 0;\n private tokens: Token[] = [];\n private input = '';\n\n constructor(private tokenize: (chunk: string) => Token[]) {}\n\n reset(chunk: string, _info: any) {\n this.input = chunk;\n this.index = 0;\n this.tokens = this.tokenize(chunk);\n }\n\n next(): NearleyToken | undefined {\n return this.tokens[this.index++] as NearleyToken | undefined;\n }\n\n save(): any {}\n\n formatError(token: NearleyToken) {\n const { line, col } = lineColFromIndex(this.input, token.start);\n return `Parse error at token: ${token.text} at line ${line} column ${col}`;\n }\n\n has(name: string): boolean {\n return name in TokenType;\n }\n}\n","import { TokenType } from '../lexer/token.js';\n\nexport enum NodeType {\n statement = 'statement',\n clause = 'clause',\n set_operation = 'set_operation',\n function_call = 'function_call',\n array_subscript = 'array_subscript',\n property_access = 'property_access',\n parenthesis = 'parenthesis',\n between_predicate = 'between_predicate',\n case_expression = 'case_expression',\n case_when = 'case_when',\n case_else = 'case_else',\n limit_clause = 'limit_clause',\n all_columns_asterisk = 'all_columns_asterisk',\n literal = 'literal',\n identifier = 'identifier',\n keyword = 'keyword',\n parameter = 'parameter',\n operator = 'operator',\n comma = 'comma',\n line_comment = 'line_comment',\n block_comment = 'block_comment',\n}\n\ninterface BaseNode {\n leadingComments?: CommentNode[];\n trailingComments?: CommentNode[];\n}\n\nexport interface StatementNode extends BaseNode {\n type: NodeType.statement;\n children: AstNode[];\n hasSemicolon: boolean;\n}\n\nexport interface ClauseNode extends BaseNode {\n type: NodeType.clause;\n nameKw: KeywordNode;\n children: AstNode[];\n}\n\nexport interface SetOperationNode extends BaseNode {\n type: NodeType.set_operation;\n nameKw: KeywordNode;\n children: AstNode[];\n}\n\nexport interface FunctionCallNode extends BaseNode {\n type: NodeType.function_call;\n nameKw: KeywordNode;\n parenthesis: ParenthesisNode;\n}\n\n// []\nexport interface ArraySubscriptNode extends BaseNode {\n type: NodeType.array_subscript;\n array: IdentifierNode | KeywordNode;\n parenthesis: ParenthesisNode;\n}\n\nexport interface ParenthesisNode extends BaseNode {\n type: NodeType.parenthesis;\n children: AstNode[];\n openParen: string;\n closeParen: string;\n}\n\n// BETWEEN AND \nexport interface BetweenPredicateNode extends BaseNode {\n type: NodeType.between_predicate;\n betweenKw: KeywordNode;\n expr1: AstNode[];\n andKw: KeywordNode;\n expr2: AstNode[];\n}\n\nexport interface CaseExpressionNode extends BaseNode {\n type: NodeType.case_expression;\n caseKw: KeywordNode;\n endKw: KeywordNode;\n expr: AstNode[];\n clauses: (CaseWhenNode | CaseElseNode)[];\n}\n\nexport interface CaseWhenNode extends BaseNode {\n type: NodeType.case_when;\n whenKw: KeywordNode;\n thenKw: KeywordNode;\n condition: AstNode[];\n result: AstNode[];\n}\n\nexport interface CaseElseNode extends BaseNode {\n type: NodeType.case_else;\n elseKw: KeywordNode;\n result: AstNode[];\n}\n\n// LIMIT \n// LIMIT , \nexport interface LimitClauseNode extends BaseNode {\n type: NodeType.limit_clause;\n limitKw: KeywordNode;\n count: AstNode[];\n offset?: AstNode[];\n}\n\n// The \"*\" operator used in SELECT *\nexport interface AllColumnsAsteriskNode extends BaseNode {\n type: NodeType.all_columns_asterisk;\n}\n\nexport interface LiteralNode extends BaseNode {\n type: NodeType.literal;\n text: string;\n}\n\nexport interface PropertyAccessNode extends BaseNode {\n type: NodeType.property_access;\n object: AstNode;\n property: IdentifierNode | ArraySubscriptNode | AllColumnsAsteriskNode;\n}\n\nexport interface IdentifierNode extends BaseNode {\n type: NodeType.identifier;\n text: string;\n}\n\nexport interface KeywordNode extends BaseNode {\n type: NodeType.keyword;\n tokenType: TokenType;\n text: string;\n raw: string;\n}\n\nexport interface ParameterNode extends BaseNode {\n type: NodeType.parameter;\n key?: string;\n text: string;\n}\n\nexport interface OperatorNode extends BaseNode {\n type: NodeType.operator;\n text: string;\n}\n\nexport interface CommaNode extends BaseNode {\n type: NodeType.comma;\n}\n\nexport interface LineCommentNode extends BaseNode {\n type: NodeType.line_comment;\n text: string;\n precedingWhitespace: string;\n}\n\nexport interface BlockCommentNode extends BaseNode {\n type: NodeType.block_comment;\n text: string;\n precedingWhitespace: string;\n}\n\nexport type CommentNode = LineCommentNode | BlockCommentNode;\n\nexport type AstNode =\n | ClauseNode\n | SetOperationNode\n | FunctionCallNode\n | ArraySubscriptNode\n | PropertyAccessNode\n | ParenthesisNode\n | BetweenPredicateNode\n | CaseExpressionNode\n | CaseWhenNode\n | CaseElseNode\n | LimitClauseNode\n | AllColumnsAsteriskNode\n | LiteralNode\n | IdentifierNode\n | KeywordNode\n | ParameterNode\n | OperatorNode\n | CommaNode\n | LineCommentNode\n | BlockCommentNode;\n","// Generated automatically by nearley, version 2.20.1\n// http://github.com/Hardmath123/nearley\n// Bypasses TS6133. Allow declared but unused functions.\n// @ts-ignore\nfunction id(d: any[]): any { return d[0]; }\ndeclare var DELIMITER: any;\ndeclare var EOF: any;\ndeclare var LIMIT: any;\ndeclare var COMMA: any;\ndeclare var RESERVED_SELECT: any;\ndeclare var ASTERISK: any;\ndeclare var RESERVED_CLAUSE: any;\ndeclare var RESERVED_SET_OPERATION: any;\ndeclare var ARRAY_IDENTIFIER: any;\ndeclare var ARRAY_KEYWORD: any;\ndeclare var RESERVED_FUNCTION_NAME: any;\ndeclare var DOT: any;\ndeclare var BETWEEN: any;\ndeclare var AND: any;\ndeclare var CASE: any;\ndeclare var END: any;\ndeclare var WHEN: any;\ndeclare var THEN: any;\ndeclare var ELSE: any;\ndeclare var OPERATOR: any;\ndeclare var IDENTIFIER: any;\ndeclare var QUOTED_IDENTIFIER: any;\ndeclare var VARIABLE: any;\ndeclare var NAMED_PARAMETER: any;\ndeclare var QUOTED_PARAMETER: any;\ndeclare var NUMBERED_PARAMETER: any;\ndeclare var POSITIONAL_PARAMETER: any;\ndeclare var CUSTOM_PARAMETER: any;\ndeclare var NUMBER: any;\ndeclare var STRING: any;\ndeclare var RESERVED_KEYWORD: any;\ndeclare var RESERVED_PHRASE: any;\ndeclare var RESERVED_JOIN: any;\ndeclare var OR: any;\ndeclare var XOR: any;\ndeclare var LINE_COMMENT: any;\ndeclare var BLOCK_COMMENT: any;\n\nimport LexerAdapter from './LexerAdapter.js';\nimport { NodeType, AstNode, CommentNode, KeywordNode } from './ast.js';\nimport { Token, TokenType } from '../lexer/token.js';\n\n// The lexer here is only to provide the has() method,\n// that's used inside the generated grammar definition.\n// A proper lexer gets passed to Nearley Parser constructor.\nconst lexer = new LexerAdapter(chunk => []);\n\n// Used for unwrapping grammar rules like:\n//\n// rule -> ( foo | bar | baz )\n//\n// which otherwise produce single element nested inside two arrays\nconst unwrap = ([[el]]: T[][]): T => el;\n\nconst toKeywordNode = (token: Token): KeywordNode => ({\n type: NodeType.keyword,\n tokenType: token.type,\n text: token.text,\n raw: token.raw,\n});\n\ninterface CommentAttachments {\n leading?: CommentNode[];\n trailing?: CommentNode[];\n}\n\nconst addComments = (node: AstNode, { leading, trailing }: CommentAttachments): AstNode => {\n if (leading?.length) {\n node = { ...node, leadingComments: leading };\n }\n if (trailing?.length) {\n node = { ...node, trailingComments: trailing };\n }\n return node;\n};\n\nconst addCommentsToArray = (nodes: AstNode[], { leading, trailing }: CommentAttachments): AstNode[] => {\n if (leading?.length) {\n const [first, ...rest] = nodes;\n nodes = [addComments(first, { leading }), ...rest];\n }\n if (trailing?.length) {\n const lead = nodes.slice(0, -1);\n const last = nodes[nodes.length-1];\n nodes = [...lead, addComments(last, { trailing })];\n }\n return nodes;\n};\n\n\ninterface NearleyToken {\n value: any;\n [key: string]: any;\n};\n\ninterface NearleyLexer {\n reset: (chunk: string, info: any) => void;\n next: () => NearleyToken | undefined;\n save: () => any;\n formatError: (token: never) => string;\n has: (tokenType: string) => boolean;\n};\n\ninterface NearleyRule {\n name: string;\n symbols: NearleySymbol[];\n postprocess?: (d: any[], loc?: number, reject?: {}) => any;\n};\n\ntype NearleySymbol = string | { literal: any } | { test: (token: any) => boolean };\n\ninterface Grammar {\n Lexer: NearleyLexer | undefined;\n ParserRules: NearleyRule[];\n ParserStart: string;\n};\n\nconst grammar: Grammar = {\n Lexer: lexer,\n ParserRules: [\n {\"name\": \"main$ebnf$1\", \"symbols\": []},\n {\"name\": \"main$ebnf$1\", \"symbols\": [\"main$ebnf$1\", \"statement\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"main\", \"symbols\": [\"main$ebnf$1\"], \"postprocess\": \n ([statements]) => {\n const last = statements[statements.length - 1];\n if (last && !last.hasSemicolon) {\n // we have fully parsed the whole file\n // discard the last statement when it's empty\n return last.children.length > 0 ? statements : statements.slice(0, -1);\n } else {\n // parsing still in progress, do nothing\n return statements;\n }\n }\n },\n {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"DELIMITER\") ? {type: \"DELIMITER\"} : DELIMITER)]},\n {\"name\": \"statement$subexpression$1\", \"symbols\": [(lexer.has(\"EOF\") ? {type: \"EOF\"} : EOF)]},\n {\"name\": \"statement\", \"symbols\": [\"expressions_or_clauses\", \"statement$subexpression$1\"], \"postprocess\": \n ([children, [delimiter]]) => ({\n type: NodeType.statement,\n children,\n hasSemicolon: delimiter.type === TokenType.DELIMITER,\n })\n },\n {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": []},\n {\"name\": \"expressions_or_clauses$ebnf$1\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": []},\n {\"name\": \"expressions_or_clauses$ebnf$2\", \"symbols\": [\"expressions_or_clauses$ebnf$2\", \"clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expressions_or_clauses\", \"symbols\": [\"expressions_or_clauses$ebnf$1\", \"expressions_or_clauses$ebnf$2\"], \"postprocess\": \n ([expressions, clauses]) => [...expressions, ...clauses]\n },\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"limit_clause\"]},\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"select_clause\"]},\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"other_clause\"]},\n {\"name\": \"clause$subexpression$1\", \"symbols\": [\"set_operation\"]},\n {\"name\": \"clause\", \"symbols\": [\"clause$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"free_form_sql\"]},\n {\"name\": \"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"limit_clause$ebnf$1$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA), \"limit_clause$ebnf$1$subexpression$1$ebnf$1\"]},\n {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [\"limit_clause$ebnf$1$subexpression$1\"], \"postprocess\": id},\n {\"name\": \"limit_clause$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n {\"name\": \"limit_clause\", \"symbols\": [(lexer.has(\"LIMIT\") ? {type: \"LIMIT\"} : LIMIT), \"_\", \"expression_chain_\", \"limit_clause$ebnf$1\"], \"postprocess\": \n ([limitToken, _, exp1, optional]) => {\n if (optional) {\n const [comma, exp2] = optional;\n return {\n type: NodeType.limit_clause,\n limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n offset: exp1,\n count: exp2,\n };\n } else {\n return {\n type: NodeType.limit_clause,\n limitKw: addComments(toKeywordNode(limitToken), { trailing: _ }),\n count: exp1,\n };\n }\n }\n },\n {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": []},\n {\"name\": \"select_clause$subexpression$1$ebnf$1\", \"symbols\": [\"select_clause$subexpression$1$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"all_columns_asterisk\", \"select_clause$subexpression$1$ebnf$1\"]},\n {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": []},\n {\"name\": \"select_clause$subexpression$1$ebnf$2\", \"symbols\": [\"select_clause$subexpression$1$ebnf$2\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"select_clause$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\", \"select_clause$subexpression$1$ebnf$2\"]},\n {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT), \"select_clause$subexpression$1\"], \"postprocess\": \n ([nameToken, [exp, expressions]]) => ({\n type: NodeType.clause,\n nameKw: toKeywordNode(nameToken),\n children: [exp, ...expressions],\n })\n },\n {\"name\": \"select_clause\", \"symbols\": [(lexer.has(\"RESERVED_SELECT\") ? {type: \"RESERVED_SELECT\"} : RESERVED_SELECT)], \"postprocess\": \n ([nameToken]) => ({\n type: NodeType.clause,\n nameKw: toKeywordNode(nameToken),\n children: [],\n })\n },\n {\"name\": \"all_columns_asterisk\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)], \"postprocess\": \n () => ({ type: NodeType.all_columns_asterisk })\n },\n {\"name\": \"other_clause$ebnf$1\", \"symbols\": []},\n {\"name\": \"other_clause$ebnf$1\", \"symbols\": [\"other_clause$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"other_clause\", \"symbols\": [(lexer.has(\"RESERVED_CLAUSE\") ? {type: \"RESERVED_CLAUSE\"} : RESERVED_CLAUSE), \"other_clause$ebnf$1\"], \"postprocess\": \n ([nameToken, children]) => ({\n type: NodeType.clause,\n nameKw: toKeywordNode(nameToken),\n children,\n })\n },\n {\"name\": \"set_operation$ebnf$1\", \"symbols\": []},\n {\"name\": \"set_operation$ebnf$1\", \"symbols\": [\"set_operation$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"set_operation\", \"symbols\": [(lexer.has(\"RESERVED_SET_OPERATION\") ? {type: \"RESERVED_SET_OPERATION\"} : RESERVED_SET_OPERATION), \"set_operation$ebnf$1\"], \"postprocess\": \n ([nameToken, children]) => ({\n type: NodeType.set_operation,\n nameKw: toKeywordNode(nameToken),\n children,\n })\n },\n {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_with_comments_\"]},\n {\"name\": \"expression_chain_$ebnf$1\", \"symbols\": [\"expression_chain_$ebnf$1\", \"expression_with_comments_\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expression_chain_\", \"symbols\": [\"expression_chain_$ebnf$1\"], \"postprocess\": id},\n {\"name\": \"expression_chain$ebnf$1\", \"symbols\": []},\n {\"name\": \"expression_chain$ebnf$1\", \"symbols\": [\"expression_chain$ebnf$1\", \"_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"expression_chain\", \"symbols\": [\"expression\", \"expression_chain$ebnf$1\"], \"postprocess\": \n ([expr, chain]) => [expr, ...chain]\n },\n {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": []},\n {\"name\": \"andless_expression_chain$ebnf$1\", \"symbols\": [\"andless_expression_chain$ebnf$1\", \"_andless_expression_with_comments\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"andless_expression_chain\", \"symbols\": [\"andless_expression\", \"andless_expression_chain$ebnf$1\"], \"postprocess\": \n ([expr, chain]) => [expr, ...chain]\n },\n {\"name\": \"expression_with_comments_\", \"symbols\": [\"expression\", \"_\"], \"postprocess\": \n ([expr, _]) => addComments(expr, { trailing: _ })\n },\n {\"name\": \"_expression_with_comments\", \"symbols\": [\"_\", \"expression\"], \"postprocess\": \n ([_, expr]) => addComments(expr, { leading: _ })\n },\n {\"name\": \"_andless_expression_with_comments\", \"symbols\": [\"_\", \"andless_expression\"], \"postprocess\": \n ([_, expr]) => addComments(expr, { leading: _ })\n },\n {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_free_form_sql\"]},\n {\"name\": \"free_form_sql$subexpression$1\", \"symbols\": [\"asterisk\"]},\n {\"name\": \"free_form_sql\", \"symbols\": [\"free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comma\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"comment\"]},\n {\"name\": \"asteriskless_free_form_sql$subexpression$1\", \"symbols\": [\"other_keyword\"]},\n {\"name\": \"asteriskless_free_form_sql\", \"symbols\": [\"asteriskless_free_form_sql$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"expression$subexpression$1\", \"symbols\": [\"andless_expression\"]},\n {\"name\": \"expression$subexpression$1\", \"symbols\": [\"logic_operator\"]},\n {\"name\": \"expression\", \"symbols\": [\"expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asteriskless_andless_expression\"]},\n {\"name\": \"andless_expression$subexpression$1\", \"symbols\": [\"asterisk\"]},\n {\"name\": \"andless_expression\", \"symbols\": [\"andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"atomic_expression\"]},\n {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"between_predicate\"]},\n {\"name\": \"asteriskless_andless_expression$subexpression$1\", \"symbols\": [\"case_expression\"]},\n {\"name\": \"asteriskless_andless_expression\", \"symbols\": [\"asteriskless_andless_expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"function_call\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"property_access\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"parenthesis\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"curly_braces\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"square_brackets\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"operator\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"identifier\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"parameter\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"literal\"]},\n {\"name\": \"atomic_expression$subexpression$1\", \"symbols\": [\"keyword\"]},\n {\"name\": \"atomic_expression\", \"symbols\": [\"atomic_expression$subexpression$1\"], \"postprocess\": unwrap},\n {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_IDENTIFIER\") ? {type: \"ARRAY_IDENTIFIER\"} : ARRAY_IDENTIFIER), \"_\", \"square_brackets\"], \"postprocess\": \n ([arrayToken, _, brackets]) => ({\n type: NodeType.array_subscript,\n array: addComments({ type: NodeType.identifier, text: arrayToken.text}, { trailing: _ }),\n parenthesis: brackets,\n })\n },\n {\"name\": \"array_subscript\", \"symbols\": [(lexer.has(\"ARRAY_KEYWORD\") ? {type: \"ARRAY_KEYWORD\"} : ARRAY_KEYWORD), \"_\", \"square_brackets\"], \"postprocess\": \n ([arrayToken, _, brackets]) => ({\n type: NodeType.array_subscript,\n array: addComments(toKeywordNode(arrayToken), { trailing: _ }),\n parenthesis: brackets,\n })\n },\n {\"name\": \"function_call\", \"symbols\": [(lexer.has(\"RESERVED_FUNCTION_NAME\") ? {type: \"RESERVED_FUNCTION_NAME\"} : RESERVED_FUNCTION_NAME), \"_\", \"parenthesis\"], \"postprocess\": \n ([nameToken, _, parens]) => ({\n type: NodeType.function_call,\n nameKw: addComments(toKeywordNode(nameToken), { trailing: _ }),\n parenthesis: parens,\n })\n },\n {\"name\": \"parenthesis\", \"symbols\": [{\"literal\":\"(\"}, \"expressions_or_clauses\", {\"literal\":\")\"}], \"postprocess\": \n ([open, children, close]) => ({\n type: NodeType.parenthesis,\n children: children,\n openParen: \"(\",\n closeParen: \")\",\n })\n },\n {\"name\": \"curly_braces$ebnf$1\", \"symbols\": []},\n {\"name\": \"curly_braces$ebnf$1\", \"symbols\": [\"curly_braces$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"curly_braces\", \"symbols\": [{\"literal\":\"{\"}, \"curly_braces$ebnf$1\", {\"literal\":\"}\"}], \"postprocess\": \n ([open, children, close]) => ({\n type: NodeType.parenthesis,\n children: children,\n openParen: \"{\",\n closeParen: \"}\",\n })\n },\n {\"name\": \"square_brackets$ebnf$1\", \"symbols\": []},\n {\"name\": \"square_brackets$ebnf$1\", \"symbols\": [\"square_brackets$ebnf$1\", \"free_form_sql\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"square_brackets\", \"symbols\": [{\"literal\":\"[\"}, \"square_brackets$ebnf$1\", {\"literal\":\"]\"}], \"postprocess\": \n ([open, children, close]) => ({\n type: NodeType.parenthesis,\n children: children,\n openParen: \"[\",\n closeParen: \"]\",\n })\n },\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"identifier\"]},\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"array_subscript\"]},\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"all_columns_asterisk\"]},\n {\"name\": \"property_access$subexpression$1\", \"symbols\": [\"parameter\"]},\n {\"name\": \"property_access\", \"symbols\": [\"atomic_expression\", \"_\", (lexer.has(\"DOT\") ? {type: \"DOT\"} : DOT), \"_\", \"property_access$subexpression$1\"], \"postprocess\": \n // Allowing property to be is currently a hack.\n // A better way would be to allow on the left side of array_subscript,\n // but we currently can't do that because of another hack that requires\n // %ARRAY_IDENTIFIER on the left side of .\n ([object, _1, dot, _2, [property]]) => {\n return {\n type: NodeType.property_access,\n object: addComments(object, { trailing: _1 }),\n property: addComments(property, { leading: _2 }),\n };\n }\n },\n {\"name\": \"between_predicate\", \"symbols\": [(lexer.has(\"BETWEEN\") ? {type: \"BETWEEN\"} : BETWEEN), \"_\", \"andless_expression_chain\", \"_\", (lexer.has(\"AND\") ? {type: \"AND\"} : AND), \"_\", \"andless_expression\"], \"postprocess\": \n ([betweenToken, _1, expr1, _2, andToken, _3, expr2]) => ({\n type: NodeType.between_predicate,\n betweenKw: toKeywordNode(betweenToken),\n expr1: addCommentsToArray(expr1, { leading: _1, trailing: _2 }),\n andKw: toKeywordNode(andToken),\n expr2: [addComments(expr2, { leading: _3 })],\n })\n },\n {\"name\": \"case_expression$ebnf$1\", \"symbols\": [\"expression_chain_\"], \"postprocess\": id},\n {\"name\": \"case_expression$ebnf$1\", \"symbols\": [], \"postprocess\": () => null},\n {\"name\": \"case_expression$ebnf$2\", \"symbols\": []},\n {\"name\": \"case_expression$ebnf$2\", \"symbols\": [\"case_expression$ebnf$2\", \"case_clause\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"case_expression\", \"symbols\": [(lexer.has(\"CASE\") ? {type: \"CASE\"} : CASE), \"_\", \"case_expression$ebnf$1\", \"case_expression$ebnf$2\", (lexer.has(\"END\") ? {type: \"END\"} : END)], \"postprocess\": \n ([caseToken, _, expr, clauses, endToken]) => ({\n type: NodeType.case_expression,\n caseKw: addComments(toKeywordNode(caseToken), { trailing: _ }),\n endKw: toKeywordNode(endToken),\n expr: expr || [],\n clauses,\n })\n },\n {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN), \"_\", \"expression_chain_\", (lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN), \"_\", \"expression_chain_\"], \"postprocess\": \n ([whenToken, _1, cond, thenToken, _2, expr]) => ({\n type: NodeType.case_when,\n whenKw: addComments(toKeywordNode(whenToken), { trailing: _1 }),\n thenKw: addComments(toKeywordNode(thenToken), { trailing: _2 }),\n condition: cond,\n result: expr,\n })\n },\n {\"name\": \"case_clause\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE), \"_\", \"expression_chain_\"], \"postprocess\": \n ([elseToken, _, expr]) => ({\n type: NodeType.case_else,\n elseKw: addComments(toKeywordNode(elseToken), { trailing: _ }),\n result: expr,\n })\n },\n {\"name\": \"comma$subexpression$1\", \"symbols\": [(lexer.has(\"COMMA\") ? {type: \"COMMA\"} : COMMA)]},\n {\"name\": \"comma\", \"symbols\": [\"comma$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.comma })},\n {\"name\": \"asterisk$subexpression$1\", \"symbols\": [(lexer.has(\"ASTERISK\") ? {type: \"ASTERISK\"} : ASTERISK)]},\n {\"name\": \"asterisk\", \"symbols\": [\"asterisk$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n {\"name\": \"operator$subexpression$1\", \"symbols\": [(lexer.has(\"OPERATOR\") ? {type: \"OPERATOR\"} : OPERATOR)]},\n {\"name\": \"operator\", \"symbols\": [\"operator$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.operator, text: token.text })},\n {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"IDENTIFIER\") ? {type: \"IDENTIFIER\"} : IDENTIFIER)]},\n {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_IDENTIFIER\") ? {type: \"QUOTED_IDENTIFIER\"} : QUOTED_IDENTIFIER)]},\n {\"name\": \"identifier$subexpression$1\", \"symbols\": [(lexer.has(\"VARIABLE\") ? {type: \"VARIABLE\"} : VARIABLE)]},\n {\"name\": \"identifier\", \"symbols\": [\"identifier$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.identifier, text: token.text })},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NAMED_PARAMETER\") ? {type: \"NAMED_PARAMETER\"} : NAMED_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"QUOTED_PARAMETER\") ? {type: \"QUOTED_PARAMETER\"} : QUOTED_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBERED_PARAMETER\") ? {type: \"NUMBERED_PARAMETER\"} : NUMBERED_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"POSITIONAL_PARAMETER\") ? {type: \"POSITIONAL_PARAMETER\"} : POSITIONAL_PARAMETER)]},\n {\"name\": \"parameter$subexpression$1\", \"symbols\": [(lexer.has(\"CUSTOM_PARAMETER\") ? {type: \"CUSTOM_PARAMETER\"} : CUSTOM_PARAMETER)]},\n {\"name\": \"parameter\", \"symbols\": [\"parameter$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.parameter, key: token.key, text: token.text })},\n {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"NUMBER\") ? {type: \"NUMBER\"} : NUMBER)]},\n {\"name\": \"literal$subexpression$1\", \"symbols\": [(lexer.has(\"STRING\") ? {type: \"STRING\"} : STRING)]},\n {\"name\": \"literal\", \"symbols\": [\"literal$subexpression$1\"], \"postprocess\": ([[token]]) => ({ type: NodeType.literal, text: token.text })},\n {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_KEYWORD\") ? {type: \"RESERVED_KEYWORD\"} : RESERVED_KEYWORD)]},\n {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_PHRASE\") ? {type: \"RESERVED_PHRASE\"} : RESERVED_PHRASE)]},\n {\"name\": \"keyword$subexpression$1\", \"symbols\": [(lexer.has(\"RESERVED_JOIN\") ? {type: \"RESERVED_JOIN\"} : RESERVED_JOIN)]},\n {\"name\": \"keyword\", \"symbols\": [\"keyword$subexpression$1\"], \"postprocess\": \n ([[token]]) => toKeywordNode(token)\n },\n {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"AND\") ? {type: \"AND\"} : AND)]},\n {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"OR\") ? {type: \"OR\"} : OR)]},\n {\"name\": \"logic_operator$subexpression$1\", \"symbols\": [(lexer.has(\"XOR\") ? {type: \"XOR\"} : XOR)]},\n {\"name\": \"logic_operator\", \"symbols\": [\"logic_operator$subexpression$1\"], \"postprocess\": \n ([[token]]) => toKeywordNode(token)\n },\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"WHEN\") ? {type: \"WHEN\"} : WHEN)]},\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"THEN\") ? {type: \"THEN\"} : THEN)]},\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"ELSE\") ? {type: \"ELSE\"} : ELSE)]},\n {\"name\": \"other_keyword$subexpression$1\", \"symbols\": [(lexer.has(\"END\") ? {type: \"END\"} : END)]},\n {\"name\": \"other_keyword\", \"symbols\": [\"other_keyword$subexpression$1\"], \"postprocess\": \n ([[token]]) => toKeywordNode(token)\n },\n {\"name\": \"_$ebnf$1\", \"symbols\": []},\n {\"name\": \"_$ebnf$1\", \"symbols\": [\"_$ebnf$1\", \"comment\"], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"_\", \"symbols\": [\"_$ebnf$1\"], \"postprocess\": ([comments]) => comments},\n {\"name\": \"comment\", \"symbols\": [(lexer.has(\"LINE_COMMENT\") ? {type: \"LINE_COMMENT\"} : LINE_COMMENT)], \"postprocess\": \n ([token]) => ({\n type: NodeType.line_comment,\n text: token.text,\n precedingWhitespace: token.precedingWhitespace,\n })\n },\n {\"name\": \"comment\", \"symbols\": [(lexer.has(\"BLOCK_COMMENT\") ? {type: \"BLOCK_COMMENT\"} : BLOCK_COMMENT)], \"postprocess\": \n ([token]) => ({\n type: NodeType.block_comment,\n text: token.text,\n precedingWhitespace: token.precedingWhitespace,\n })\n }\n ],\n ParserStart: \"main\",\n};\n\nexport default grammar;\n","import nearley from 'nearley';\n\nimport Tokenizer from '../lexer/Tokenizer.js';\nimport { disambiguateTokens } from '../lexer/disambiguateTokens.js';\nimport { ParamTypes } from '../lexer/TokenizerOptions.js';\nimport { StatementNode } from './ast.js';\nimport grammar from './grammar.js';\nimport LexerAdapter from './LexerAdapter.js';\nimport { createEofToken } from '../lexer/token.js';\n\nconst { Parser: NearleyParser, Grammar } = nearley;\n\nexport interface Parser {\n parse(sql: string, paramTypesOverrides: ParamTypes): StatementNode[];\n}\n\n/**\n * Creates a parser object which wraps the setup of Nearley parser\n */\nexport function createParser(tokenizer: Tokenizer): Parser {\n let paramTypesOverrides: ParamTypes = {};\n const lexer = new LexerAdapter(chunk => [\n ...disambiguateTokens(tokenizer.tokenize(chunk, paramTypesOverrides)),\n createEofToken(chunk.length),\n ]);\n const parser = new NearleyParser(Grammar.fromCompiled(grammar), { lexer });\n\n return {\n parse: (sql: string, paramTypes: ParamTypes) => {\n // share paramTypesOverrides with Tokenizer\n paramTypesOverrides = paramTypes;\n\n const { results } = parser.feed(sql);\n\n if (results.length === 1) {\n return results[0];\n } else if (results.length === 0) {\n // Ideally we would report a line number where the parser failed,\n // but I haven't found a way to get this info from Nearley :(\n throw new Error('Parse error: Invalid SQL');\n } else {\n throw new Error(`Parse error: Ambiguous grammar\\n${JSON.stringify(results, undefined, 2)}`);\n }\n },\n };\n}\n","import { CommaPosition } from '../FormatOptions.js';\nimport { maxLength } from '../utils.js';\n\nconst PRECEDING_WHITESPACE_REGEX = /^\\s+/u;\n\n/**\n * Handles comma placement - either before, after or tabulated\n */\nexport default function formatCommaPositions(\n query: string,\n commaPosition: CommaPosition,\n indent: string\n): string {\n return groupCommaDelimitedLines(query.split('\\n'))\n .flatMap(commaLines => {\n if (commaLines.length === 1) {\n return commaLines;\n } else if (commaPosition === 'tabular') {\n return formatTabular(commaLines);\n } else if (commaPosition === 'before') {\n return formatBefore(commaLines, indent);\n } else {\n throw new Error(`Unexpected commaPosition: ${commaPosition}`);\n }\n })\n .join('\\n');\n}\n\n/**\n * Given lines like this:\n *\n * [\n * 'SELECT',\n * ' foo,',\n * ' bar, --comment',\n * ' baz',\n * 'FROM'\n * ]\n *\n * Returns groups like this:\n *\n * [\n * ['SELECT'],\n * [' foo,', ' bar, --comment', ' baz'],\n * ['FROM']\n * ]\n */\nfunction groupCommaDelimitedLines(lines: string[]): string[][] {\n const groups: string[][] = [];\n for (let i = 0; i < lines.length; i++) {\n const group = [lines[i]];\n // when line ends with comma,\n // gather together all following lines that also end with comma,\n // plus one (which doesn't end with comma)\n while (lines[i].match(/.*,(\\s*(--.*)?$)/)) {\n i++;\n group.push(lines[i]);\n }\n groups.push(group);\n }\n return groups;\n}\n\n// makes all lines the same length by appending spaces before comma\nfunction formatTabular(commaLines: string[]): string[] {\n const commaPosition = maxLength(trimTrailingComments(commaLines)) - 1;\n return commaLines.map((line, i) => {\n if (i === commaLines.length - 1) {\n return line; // do not add comma for last item\n }\n return indentComma(line, commaPosition);\n });\n}\n\nfunction indentComma(line: string, commaPosition: number) {\n const [, code, comment] = line.match(/^(.*?),(\\s*--.*)?$/) || [];\n\n const spaces = ' '.repeat(commaPosition - code.length);\n return `${code}${spaces},${comment ?? ''}`;\n}\n\nfunction formatBefore(commaLines: string[], indent: string): string[] {\n return trimTrailingCommas(commaLines).map((line, i) => {\n if (i === 0) {\n return line; // do not add comma for first item\n }\n const [whitespace] = line.match(PRECEDING_WHITESPACE_REGEX) || [''];\n return (\n removeLastIndent(whitespace, indent) +\n indent.replace(/ {2}$/, ', ') + // add comma to the end of last indent\n line.trimStart()\n );\n });\n}\n\nfunction removeLastIndent(whitespace: string, indent: string): string {\n return whitespace.replace(new RegExp(indent + '$'), '');\n}\n\nfunction trimTrailingCommas(lines: string[]): string[] {\n return lines.map(line => line.replace(/,(\\s*(--.*)?$)/, '$1'));\n}\n\nfunction trimTrailingComments(lines: string[]): string[] {\n return lines.map(line => line.replace(/\\s*--.*/, ''));\n}\n","import { last } from '../utils.js';\n\nimport Indentation from './Indentation.js';\n\n/** Whitespace modifiers to be used with add() method */\nexport enum WS {\n SPACE, // Adds single space\n NO_SPACE, // Removes preceding horizontal whitespace (if any)\n NO_NEWLINE, // Removes all preceding whitespace (whether horizontal or vertical)\n NEWLINE, // Adds single newline (and removes any preceding whitespace)\n MANDATORY_NEWLINE, // Adds single newline that can't be removed by NO_NEWLINE\n INDENT, // Adds indentation (as much as needed for current indentation level)\n SINGLE_INDENT, // Adds whitespace for single indentation step\n}\n\nexport type LayoutItem = WS.SPACE | WS.SINGLE_INDENT | WS.NEWLINE | WS.MANDATORY_NEWLINE | string;\n\n/**\n * API for constructing SQL string (especially the whitespace part).\n *\n * It hides the internal implementation.\n * Originally it used plain string concatenation, which was expensive.\n * Now it's storing items to array and builds the string only in the end.\n */\nexport default class Layout {\n private items: LayoutItem[] = [];\n\n constructor(public indentation: Indentation) {}\n\n /**\n * Appends token strings and whitespace modifications to SQL string.\n */\n public add(...items: (WS | string)[]) {\n for (const item of items) {\n switch (item) {\n case WS.SPACE:\n this.items.push(WS.SPACE);\n break;\n case WS.NO_SPACE:\n this.trimHorizontalWhitespace();\n break;\n case WS.NO_NEWLINE:\n this.trimWhitespace();\n break;\n case WS.NEWLINE:\n this.trimHorizontalWhitespace();\n this.addNewline(WS.NEWLINE);\n break;\n case WS.MANDATORY_NEWLINE:\n this.trimHorizontalWhitespace();\n this.addNewline(WS.MANDATORY_NEWLINE);\n break;\n case WS.INDENT:\n this.addIndentation();\n break;\n case WS.SINGLE_INDENT:\n this.items.push(WS.SINGLE_INDENT);\n break;\n default:\n this.items.push(item);\n }\n }\n }\n\n private trimHorizontalWhitespace() {\n while (isHorizontalWhitespace(last(this.items))) {\n this.items.pop();\n }\n }\n\n private trimWhitespace() {\n while (isRemovableWhitespace(last(this.items))) {\n this.items.pop();\n }\n }\n\n private addNewline(newline: WS.NEWLINE | WS.MANDATORY_NEWLINE) {\n if (this.items.length > 0) {\n switch (last(this.items)) {\n case WS.NEWLINE:\n this.items.pop();\n this.items.push(newline);\n break;\n case WS.MANDATORY_NEWLINE:\n // keep as is\n break;\n default:\n this.items.push(newline);\n break;\n }\n }\n }\n\n private addIndentation() {\n for (let i = 0; i < this.indentation.getLevel(); i++) {\n this.items.push(WS.SINGLE_INDENT);\n }\n }\n\n /**\n * Returns the final SQL string.\n */\n public toString(): string {\n return this.items.map(item => this.itemToString(item)).join('');\n }\n\n /**\n * Returns the internal layout data\n */\n public getLayoutItems(): LayoutItem[] {\n return this.items;\n }\n\n private itemToString(item: LayoutItem): string {\n switch (item) {\n case WS.SPACE:\n return ' ';\n case WS.NEWLINE:\n case WS.MANDATORY_NEWLINE:\n return '\\n';\n case WS.SINGLE_INDENT:\n return this.indentation.getSingleIndent();\n default:\n return item;\n }\n }\n}\n\nconst isHorizontalWhitespace = (item: WS | string | undefined) =>\n item === WS.SPACE || item === WS.SINGLE_INDENT;\n\nconst isRemovableWhitespace = (item: WS | string | undefined) =>\n item === WS.SPACE || item === WS.SINGLE_INDENT || item === WS.NEWLINE;\n","import { last } from '../utils.js';\n\nconst INDENT_TYPE_TOP_LEVEL = 'top-level';\nconst INDENT_TYPE_BLOCK_LEVEL = 'block-level';\n\n/**\n * Manages indentation levels.\n *\n * There are two types of indentation levels:\n *\n * - BLOCK_LEVEL : increased by open-parenthesis\n * - TOP_LEVEL : increased by RESERVED_CLAUSE words\n */\nexport default class Indentation {\n private indentTypes: string[] = [];\n\n /**\n * @param {string} indent A string to indent with\n */\n constructor(private indent: string) {}\n\n /**\n * Returns indentation string for single indentation step.\n */\n getSingleIndent(): string {\n return this.indent;\n }\n\n /**\n * Returns current indentation level\n */\n getLevel(): number {\n return this.indentTypes.length;\n }\n\n /**\n * Increases indentation by one top-level indent.\n */\n increaseTopLevel() {\n this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);\n }\n\n /**\n * Increases indentation by one block-level indent.\n */\n increaseBlockLevel() {\n this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);\n }\n\n /**\n * Decreases indentation by one top-level indent.\n * Does nothing when the previous indent is not top-level.\n */\n decreaseTopLevel() {\n if (this.indentTypes.length > 0 && last(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {\n this.indentTypes.pop();\n }\n }\n\n /**\n * Decreases indentation by one block-level indent.\n * If there are top-level indents within the block-level indent,\n * throws away these as well.\n */\n decreaseBlockLevel() {\n while (this.indentTypes.length > 0) {\n const type = this.indentTypes.pop();\n if (type !== INDENT_TYPE_TOP_LEVEL) {\n break;\n }\n }\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport Indentation from './Indentation.js';\nimport Layout, { WS } from './Layout.js';\n\n/**\n * Like Layout, but only formats single-line expressions.\n *\n * Throws InlineLayoutError:\n * - when encountering a newline\n * - when exceeding configured expressionWidth\n */\nexport default class InlineLayout extends Layout {\n private length = 0;\n // Keeps track of the trailing whitespace,\n // so that we can decrease length when encountering WS.NO_SPACE,\n // but only when there actually is a space to remove.\n private trailingSpace = false;\n\n constructor(private expressionWidth: number) {\n super(new Indentation('')); // no indentation in inline layout\n }\n\n public add(...items: (WS | string)[]) {\n items.forEach(item => this.addToLength(item));\n if (this.length > this.expressionWidth) {\n // We have exceeded the allowable width\n throw new InlineLayoutError();\n }\n super.add(...items);\n }\n\n private addToLength(item: WS | string) {\n if (typeof item === 'string') {\n this.length += item.length;\n this.trailingSpace = false;\n } else if (item === WS.MANDATORY_NEWLINE || item === WS.NEWLINE) {\n // newlines not allowed within inline block\n throw new InlineLayoutError();\n } else if (item === WS.INDENT || item === WS.SINGLE_INDENT || item === WS.SPACE) {\n if (!this.trailingSpace) {\n this.length++;\n this.trailingSpace = true;\n }\n } else if (item === WS.NO_NEWLINE || item === WS.NO_SPACE) {\n if (this.trailingSpace) {\n this.trailingSpace = false;\n this.length--;\n }\n }\n }\n}\n\n/**\n * Thrown when block of SQL can't be formatted as a single line.\n */\nexport class InlineLayoutError extends Error {}\n","import { FormatOptions } from '../FormatOptions.js';\nimport { equalizeWhitespace, isMultiline, last } from '../utils.js';\n\nimport Params from './Params.js';\nimport { isTabularStyle } from './config.js';\nimport { TokenType } from '../lexer/token.js';\nimport {\n AllColumnsAsteriskNode,\n ArraySubscriptNode,\n AstNode,\n BetweenPredicateNode,\n SetOperationNode,\n ClauseNode,\n FunctionCallNode,\n LimitClauseNode,\n NodeType,\n ParenthesisNode,\n LiteralNode,\n IdentifierNode,\n ParameterNode,\n OperatorNode,\n LineCommentNode,\n BlockCommentNode,\n CommaNode,\n KeywordNode,\n PropertyAccessNode,\n CommentNode,\n CaseExpressionNode,\n CaseWhenNode,\n CaseElseNode,\n} from '../parser/ast.js';\n\nimport Layout, { WS } from './Layout.js';\nimport toTabularFormat, { isTabularToken } from './tabularStyle.js';\nimport InlineLayout, { InlineLayoutError } from './InlineLayout.js';\n\ninterface ExpressionFormatterParams {\n cfg: FormatOptions;\n dialectCfg: ProcessedDialectFormatOptions;\n params: Params;\n layout: Layout;\n inline?: boolean;\n}\n\nexport interface DialectFormatOptions {\n // List of operators that should always be formatted without surrounding spaces\n alwaysDenseOperators?: string[];\n // List of clauses that should be formatted on a single line\n onelineClauses: string[];\n}\n\n// Contains the same data as DialectFormatOptions,\n// but optimized for faster and more conventient lookup.\nexport interface ProcessedDialectFormatOptions {\n alwaysDenseOperators: string[];\n onelineClauses: Record;\n}\n\n/** Formats a generic SQL expression */\nexport default class ExpressionFormatter {\n private cfg: FormatOptions;\n private dialectCfg: ProcessedDialectFormatOptions;\n private params: Params;\n private layout: Layout;\n\n private inline = false;\n private nodes: AstNode[] = [];\n private index = -1;\n\n constructor({ cfg, dialectCfg, params, layout, inline = false }: ExpressionFormatterParams) {\n this.cfg = cfg;\n this.dialectCfg = dialectCfg;\n this.inline = inline;\n this.params = params;\n this.layout = layout;\n }\n\n public format(nodes: AstNode[]): Layout {\n this.nodes = nodes;\n\n for (this.index = 0; this.index < this.nodes.length; this.index++) {\n this.formatNode(this.nodes[this.index]);\n }\n return this.layout;\n }\n\n private formatNode(node: AstNode) {\n this.formatComments(node.leadingComments);\n this.formatNodeWithoutComments(node);\n this.formatComments(node.trailingComments);\n }\n\n private formatNodeWithoutComments(node: AstNode) {\n switch (node.type) {\n case NodeType.function_call:\n return this.formatFunctionCall(node);\n case NodeType.array_subscript:\n return this.formatArraySubscript(node);\n case NodeType.property_access:\n return this.formatPropertyAccess(node);\n case NodeType.parenthesis:\n return this.formatParenthesis(node);\n case NodeType.between_predicate:\n return this.formatBetweenPredicate(node);\n case NodeType.case_expression:\n return this.formatCaseExpression(node);\n case NodeType.case_when:\n return this.formatCaseWhen(node);\n case NodeType.case_else:\n return this.formatCaseElse(node);\n case NodeType.clause:\n return this.formatClause(node);\n case NodeType.set_operation:\n return this.formatSetOperation(node);\n case NodeType.limit_clause:\n return this.formatLimitClause(node);\n case NodeType.all_columns_asterisk:\n return this.formatAllColumnsAsterisk(node);\n case NodeType.literal:\n return this.formatLiteral(node);\n case NodeType.identifier:\n return this.formatIdentifier(node);\n case NodeType.parameter:\n return this.formatParameter(node);\n case NodeType.operator:\n return this.formatOperator(node);\n case NodeType.comma:\n return this.formatComma(node);\n case NodeType.line_comment:\n return this.formatLineComment(node);\n case NodeType.block_comment:\n return this.formatBlockComment(node);\n case NodeType.keyword:\n return this.formatKeywordNode(node);\n }\n }\n\n private formatFunctionCall(node: FunctionCallNode) {\n this.withComments(node.nameKw, () => {\n this.layout.add(this.showKw(node.nameKw));\n });\n this.formatNode(node.parenthesis);\n }\n\n private formatArraySubscript(node: ArraySubscriptNode) {\n this.withComments(node.array, () => {\n this.layout.add(\n node.array.type === NodeType.keyword ? this.showKw(node.array) : node.array.text\n );\n });\n this.formatNode(node.parenthesis);\n }\n\n private formatPropertyAccess(node: PropertyAccessNode) {\n this.formatNode(node.object);\n this.layout.add(WS.NO_SPACE, '.');\n this.formatNode(node.property);\n }\n\n private formatParenthesis(node: ParenthesisNode) {\n const inlineLayout = this.formatInlineExpression(node.children);\n\n if (inlineLayout) {\n this.layout.add(node.openParen);\n this.layout.add(...inlineLayout.getLayoutItems());\n this.layout.add(WS.NO_SPACE, node.closeParen, WS.SPACE);\n } else {\n this.layout.add(node.openParen, WS.NEWLINE);\n\n if (isTabularStyle(this.cfg)) {\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n } else {\n this.layout.indentation.increaseBlockLevel();\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n this.layout.indentation.decreaseBlockLevel();\n }\n\n this.layout.add(WS.NEWLINE, WS.INDENT, node.closeParen, WS.SPACE);\n }\n }\n\n private formatBetweenPredicate(node: BetweenPredicateNode) {\n this.layout.add(this.showKw(node.betweenKw), WS.SPACE);\n this.layout = this.formatSubExpression(node.expr1);\n this.layout.add(WS.NO_SPACE, WS.SPACE, this.showNonTabularKw(node.andKw), WS.SPACE);\n this.layout = this.formatSubExpression(node.expr2);\n this.layout.add(WS.SPACE);\n }\n\n private formatCaseExpression(node: CaseExpressionNode) {\n this.formatNode(node.caseKw);\n\n this.layout.indentation.increaseBlockLevel();\n this.layout = this.formatSubExpression(node.expr);\n this.layout = this.formatSubExpression(node.clauses);\n this.layout.indentation.decreaseBlockLevel();\n\n this.layout.add(WS.NEWLINE, WS.INDENT);\n this.formatNode(node.endKw);\n }\n\n private formatCaseWhen(node: CaseWhenNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT);\n this.formatNode(node.whenKw);\n this.layout = this.formatSubExpression(node.condition);\n this.formatNode(node.thenKw);\n this.layout = this.formatSubExpression(node.result);\n }\n\n private formatCaseElse(node: CaseElseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT);\n this.formatNode(node.elseKw);\n this.layout = this.formatSubExpression(node.result);\n }\n\n private formatClause(node: ClauseNode) {\n if (this.isOnelineClause(node)) {\n this.formatClauseInOnelineStyle(node);\n } else if (isTabularStyle(this.cfg)) {\n this.formatClauseInTabularStyle(node);\n } else {\n this.formatClauseInIndentedStyle(node);\n }\n }\n\n private isOnelineClause(node: ClauseNode): boolean {\n return this.dialectCfg.onelineClauses[node.nameKw.text];\n }\n\n private formatClauseInIndentedStyle(node: ClauseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n this.layout.indentation.increaseTopLevel();\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n this.layout.indentation.decreaseTopLevel();\n }\n\n private formatClauseInOnelineStyle(node: ClauseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n this.layout = this.formatSubExpression(node.children);\n }\n\n private formatClauseInTabularStyle(node: ClauseNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.SPACE);\n this.layout.indentation.increaseTopLevel();\n this.layout = this.formatSubExpression(node.children);\n this.layout.indentation.decreaseTopLevel();\n }\n\n private formatSetOperation(node: SetOperationNode) {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.nameKw), WS.NEWLINE);\n this.layout.add(WS.INDENT);\n this.layout = this.formatSubExpression(node.children);\n }\n\n private formatLimitClause(node: LimitClauseNode) {\n this.withComments(node.limitKw, () => {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node.limitKw));\n });\n this.layout.indentation.increaseTopLevel();\n\n if (isTabularStyle(this.cfg)) {\n this.layout.add(WS.SPACE);\n } else {\n this.layout.add(WS.NEWLINE, WS.INDENT);\n }\n\n if (node.offset) {\n this.layout = this.formatSubExpression(node.offset);\n this.layout.add(WS.NO_SPACE, ',', WS.SPACE);\n this.layout = this.formatSubExpression(node.count);\n } else {\n this.layout = this.formatSubExpression(node.count);\n }\n this.layout.indentation.decreaseTopLevel();\n }\n\n private formatAllColumnsAsterisk(_node: AllColumnsAsteriskNode) {\n this.layout.add('*', WS.SPACE);\n }\n\n private formatLiteral(node: LiteralNode) {\n this.layout.add(node.text, WS.SPACE);\n }\n\n private formatIdentifier(node: IdentifierNode) {\n this.layout.add(node.text, WS.SPACE);\n }\n\n private formatParameter(node: ParameterNode) {\n this.layout.add(this.params.get(node), WS.SPACE);\n }\n\n private formatOperator({ text }: OperatorNode) {\n if (this.cfg.denseOperators || this.dialectCfg.alwaysDenseOperators.includes(text)) {\n this.layout.add(WS.NO_SPACE, text);\n } else if (text === ':') {\n this.layout.add(WS.NO_SPACE, text, WS.SPACE);\n } else {\n this.layout.add(text, WS.SPACE);\n }\n }\n\n private formatComma(_node: CommaNode) {\n if (!this.inline) {\n this.layout.add(WS.NO_SPACE, ',', WS.NEWLINE, WS.INDENT);\n } else {\n this.layout.add(WS.NO_SPACE, ',', WS.SPACE);\n }\n }\n\n private withComments(node: AstNode, fn: () => void) {\n this.formatComments(node.leadingComments);\n fn();\n this.formatComments(node.trailingComments);\n }\n\n private formatComments(comments: CommentNode[] | undefined) {\n if (!comments) {\n return;\n }\n comments.forEach(com => {\n if (com.type === NodeType.line_comment) {\n this.formatLineComment(com);\n } else {\n this.formatBlockComment(com);\n }\n });\n }\n\n private formatLineComment(node: LineCommentNode) {\n if (isMultiline(node.precedingWhitespace || '')) {\n this.layout.add(WS.NEWLINE, WS.INDENT, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n } else if (this.layout.getLayoutItems().length > 0) {\n this.layout.add(WS.NO_NEWLINE, WS.SPACE, node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n } else {\n // comment is the first item in code - no need to add preceding spaces\n this.layout.add(node.text, WS.MANDATORY_NEWLINE, WS.INDENT);\n }\n }\n\n private formatBlockComment(node: BlockCommentNode) {\n if (this.isMultilineBlockComment(node)) {\n this.splitBlockComment(node.text).forEach(line => {\n this.layout.add(WS.NEWLINE, WS.INDENT, line);\n });\n this.layout.add(WS.NEWLINE, WS.INDENT);\n } else {\n this.layout.add(node.text, WS.SPACE);\n }\n }\n\n private isMultilineBlockComment(node: BlockCommentNode): boolean {\n return isMultiline(node.text) || isMultiline(node.precedingWhitespace || '');\n }\n\n private isDocComment(comment: string): boolean {\n const lines = comment.split(/\\n/);\n return (\n // first line starts with /* or /**\n /^\\/\\*\\*?$/.test(lines[0]) &&\n // intermediate lines start with *\n lines.slice(1, lines.length - 1).every(line => /^\\s*\\*/.test(line)) &&\n // last line ends with */\n /^\\s*\\*\\/$/.test(last(lines) as string)\n );\n }\n\n // Breaks up block comment to multiple lines.\n // For example this doc-comment (dots representing leading whitespace):\n //\n // ..../**\n // .....* Some description here\n // .....* and here too\n // .....*/\n //\n // gets broken to this array (note the leading single spaces):\n //\n // [ '/**',\n // '.* Some description here',\n // '.* and here too',\n // '.*/' ]\n //\n // However, a normal comment (non-doc-comment) like this:\n //\n // ..../*\n // ....Some description here\n // ....*/\n //\n // gets broken to this array (no leading spaces):\n //\n // [ '/*',\n // 'Some description here',\n // '*/' ]\n //\n private splitBlockComment(comment: string): string[] {\n if (this.isDocComment(comment)) {\n return comment.split(/\\n/).map(line => {\n if (/^\\s*\\*/.test(line)) {\n return ' ' + line.replace(/^\\s*/, '');\n } else {\n return line;\n }\n });\n } else {\n return comment.split(/\\n/).map(line => line.replace(/^\\s*/, ''));\n }\n }\n\n private formatSubExpression(nodes: AstNode[]): Layout {\n return new ExpressionFormatter({\n cfg: this.cfg,\n dialectCfg: this.dialectCfg,\n params: this.params,\n layout: this.layout,\n inline: this.inline,\n }).format(nodes);\n }\n\n private formatInlineExpression(nodes: AstNode[]): Layout | undefined {\n const oldParamIndex = this.params.getPositionalParameterIndex();\n try {\n return new ExpressionFormatter({\n cfg: this.cfg,\n dialectCfg: this.dialectCfg,\n params: this.params,\n layout: new InlineLayout(this.cfg.expressionWidth),\n inline: true,\n }).format(nodes);\n } catch (e) {\n if (e instanceof InlineLayoutError) {\n // While formatting, some of the positional parameters might have\n // been consumed, which increased the current parameter index.\n // We reset the index to an earlier state, so we can run the\n // formatting again and re-consume these parameters in non-inline mode.\n this.params.setPositionalParameterIndex(oldParamIndex);\n return undefined;\n } else {\n // forward all unexpected errors\n throw e;\n }\n }\n }\n\n private formatKeywordNode(node: KeywordNode): void {\n switch (node.tokenType) {\n case TokenType.RESERVED_JOIN:\n return this.formatJoin(node);\n case TokenType.AND:\n case TokenType.OR:\n case TokenType.XOR:\n return this.formatLogicalOperator(node);\n default:\n return this.formatKeyword(node);\n }\n }\n\n private formatJoin(node: KeywordNode) {\n if (isTabularStyle(this.cfg)) {\n // in tabular style JOINs are at the same level as clauses\n this.layout.indentation.decreaseTopLevel();\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n this.layout.indentation.increaseTopLevel();\n } else {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n }\n }\n\n private formatKeyword(node: KeywordNode) {\n this.layout.add(this.showKw(node), WS.SPACE);\n }\n\n private formatLogicalOperator(node: KeywordNode) {\n if (this.cfg.logicalOperatorNewline === 'before') {\n if (isTabularStyle(this.cfg)) {\n // In tabular style AND/OR is placed on the same level as clauses\n this.layout.indentation.decreaseTopLevel();\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n this.layout.indentation.increaseTopLevel();\n } else {\n this.layout.add(WS.NEWLINE, WS.INDENT, this.showKw(node), WS.SPACE);\n }\n } else {\n this.layout.add(this.showKw(node), WS.NEWLINE, WS.INDENT);\n }\n }\n\n private showKw(node: KeywordNode): string {\n if (isTabularToken(node.tokenType)) {\n return toTabularFormat(this.showNonTabularKw(node), this.cfg.indentStyle);\n } else {\n return this.showNonTabularKw(node);\n }\n }\n\n // Like showKw(), but skips tabular formatting\n private showNonTabularKw(node: KeywordNode): string {\n switch (this.cfg.keywordCase) {\n case 'preserve':\n return equalizeWhitespace(node.raw);\n case 'upper':\n return node.text;\n case 'lower':\n return node.text.toLowerCase();\n }\n }\n}\n","import { IndentStyle } from '../FormatOptions.js';\nimport { isLogicalOperator, TokenType } from '../lexer/token.js';\n\n/**\n * When tabular style enabled,\n * produces a 10-char wide version of token text.\n */\nexport default function toTabularFormat(tokenText: string, indentStyle: IndentStyle): string {\n if (indentStyle === 'standard') {\n return tokenText;\n }\n\n let tail = [] as string[]; // rest of keyword\n if (tokenText.length >= 10 && tokenText.includes(' ')) {\n // split for long keywords like INNER JOIN or UNION DISTINCT\n [tokenText, ...tail] = tokenText.split(' ');\n }\n\n if (indentStyle === 'tabularLeft') {\n tokenText = tokenText.padEnd(9, ' ');\n } else {\n tokenText = tokenText.padStart(9, ' ');\n }\n\n return tokenText + ['', ...tail].join(' ');\n}\n\n/**\n * True when the token can be formatted in tabular style\n */\nexport function isTabularToken(type: TokenType): boolean {\n return (\n isLogicalOperator(type) ||\n type === TokenType.RESERVED_CLAUSE ||\n type === TokenType.RESERVED_SELECT ||\n type === TokenType.RESERVED_SET_OPERATION ||\n type === TokenType.RESERVED_JOIN ||\n type === TokenType.LIMIT\n );\n}\n","import { FormatOptions } from '../FormatOptions.js';\nimport { indentString } from './config.js';\nimport Params from './Params.js';\n\nimport { createParser } from '../parser/createParser.js';\nimport { StatementNode } from '../parser/ast.js';\nimport { Dialect } from '../dialect.js';\n\nimport formatCommaPositions from './formatCommaPositions.js';\nimport formatAliasPositions from './formatAliasPositions.js';\nimport ExpressionFormatter from './ExpressionFormatter.js';\nimport Layout, { WS } from './Layout.js';\nimport Indentation from './Indentation.js';\n\n/** Main formatter class that produces a final output string from list of tokens */\nexport default class Formatter {\n private dialect: Dialect;\n private cfg: FormatOptions;\n private params: Params;\n\n constructor(dialect: Dialect, cfg: FormatOptions) {\n this.dialect = dialect;\n this.cfg = cfg;\n this.params = new Params(this.cfg.params);\n }\n\n /**\n * Formats an SQL query.\n * @param {string} query - The SQL query string to be formatted\n * @return {string} The formatter query\n */\n public format(query: string): string {\n const ast = this.parse(query);\n const formattedQuery = this.formatAst(ast);\n const finalQuery = this.postFormat(formattedQuery);\n\n return finalQuery.trimEnd();\n }\n\n private parse(query: string): StatementNode[] {\n return createParser(this.dialect.tokenizer).parse(query, this.cfg.paramTypes || {});\n }\n\n private formatAst(statements: StatementNode[]): string {\n return statements\n .map(stat => this.formatStatement(stat))\n .join('\\n'.repeat(this.cfg.linesBetweenQueries + 1));\n }\n\n private formatStatement(statement: StatementNode): string {\n const layout = new ExpressionFormatter({\n cfg: this.cfg,\n dialectCfg: this.dialect.formatOptions,\n params: this.params,\n layout: new Layout(new Indentation(indentString(this.cfg))),\n }).format(statement.children);\n\n if (!statement.hasSemicolon) {\n // do nothing\n } else if (this.cfg.newlineBeforeSemicolon) {\n layout.add(WS.NEWLINE, ';');\n } else {\n layout.add(WS.NO_NEWLINE, ';');\n }\n return layout.toString();\n }\n\n private postFormat(query: string): string {\n if (this.cfg.tabulateAlias) {\n query = formatAliasPositions(query);\n }\n if (this.cfg.commaPosition === 'before' || this.cfg.commaPosition === 'tabular') {\n query = formatCommaPositions(query, this.cfg.commaPosition, indentString(this.cfg));\n }\n\n return query;\n }\n}\n","import { maxLength } from '../utils.js';\n\n/**\n * Handles select alias placement - tabulates if enabled\n */\nexport default function formatAliasPositions(query: string): string {\n const lines = query.split('\\n');\n\n let newQuery: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n // find SELECT rows with trailing comma, if no comma (only one row) - no-op\n if (lines[i].match(/^\\s*SELECT/i)) {\n let aliasLines: string[] = [];\n if (lines[i].match(/.*,$/)) {\n aliasLines = [lines[i]]; // add select to aliasLines in case of tabular formats\n } else {\n newQuery.push(lines[i]); // add select to new query\n if (lines[i].match(/^\\s*SELECT\\s+.+(?!,$)/i)) {\n continue;\n }\n aliasLines.push(lines[++i]);\n }\n\n // get all lines in SELECT clause\n while (lines[i++].match(/.*,$/)) {\n aliasLines.push(lines[i]);\n }\n\n // break lines into alias with optional AS, and all preceding text\n const splitLines = aliasLines\n .map(line => ({ line, matches: line.match(/(^.*?\\S) (AS )?(\\S+,?$)/i) }))\n .map(({ line, matches }) => {\n if (!matches) {\n return { precedingText: line };\n }\n return {\n precedingText: matches[1],\n as: matches[2],\n alias: matches[3],\n };\n });\n\n // get longest of precedingText, trim trailing comma for non-alias columns\n const aliasMaxLength = maxLength(\n splitLines.map(({ precedingText }) => precedingText.replace(/\\s*,\\s*$/, ''))\n );\n // re-construct line, aligning by inserting space before AS or alias\n aliasLines = splitLines.map(\n ({ precedingText, as, alias }) =>\n precedingText +\n (alias ? ' '.repeat(aliasMaxLength - precedingText.length + 1) + (as ?? '') + alias : '')\n );\n newQuery = [...newQuery, ...aliasLines];\n }\n newQuery.push(lines[i]);\n }\n\n return newQuery.join('\\n');\n}\n","import { FormatOptions } from './FormatOptions.js';\nimport { ParamItems } from './formatter/Params.js';\n\nexport class ConfigError extends Error {}\n\nexport function validateConfig(cfg: FormatOptions): FormatOptions {\n if ('multilineLists' in cfg) {\n throw new ConfigError('multilineLists config is no more supported.');\n }\n if ('newlineBeforeOpenParen' in cfg) {\n throw new ConfigError('newlineBeforeOpenParen config is no more supported.');\n }\n if ('newlineBeforeCloseParen' in cfg) {\n throw new ConfigError('newlineBeforeCloseParen config is no more supported.');\n }\n if ('aliasAs' in cfg) {\n throw new ConfigError('aliasAs config is no more supported.');\n }\n\n if (cfg.expressionWidth <= 0) {\n throw new ConfigError(\n `expressionWidth config must be positive number. Received ${cfg.expressionWidth} instead.`\n );\n }\n\n if (cfg.commaPosition === 'before' && cfg.useTabs) {\n throw new ConfigError(\n 'commaPosition: before does not work when tabs are used for indentation.'\n );\n }\n\n if (cfg.params && !validateParams(cfg.params)) {\n // eslint-disable-next-line no-console\n console.warn('WARNING: All \"params\" option values should be strings.');\n }\n\n return cfg;\n}\n\nfunction validateParams(params: ParamItems | string[]): boolean {\n const paramValues = params instanceof Array ? params : Object.values(params);\n return paramValues.every(p => typeof p === 'string');\n}\n","import * as allDialects from './allDialects.js';\n\nimport { FormatOptions } from './FormatOptions.js';\nimport { createDialect, DialectOptions } from './dialect.js';\nimport Formatter from './formatter/Formatter.js';\nimport { ConfigError, validateConfig } from './validateConfig.js';\n\nconst dialectNameMap: Record = {\n bigquery: 'bigquery',\n db2: 'db2',\n db2i: 'db2i',\n hive: 'hive',\n mariadb: 'mariadb',\n mysql: 'mysql',\n n1ql: 'n1ql',\n plsql: 'plsql',\n postgresql: 'postgresql',\n redshift: 'redshift',\n spark: 'spark',\n sqlite: 'sqlite',\n sql: 'sql',\n trino: 'trino',\n transactsql: 'transactsql',\n tsql: 'transactsql', // alias for transactsq\n singlestoredb: 'singlestoredb',\n snowflake: 'snowflake',\n};\n\nexport const supportedDialects = Object.keys(dialectNameMap);\nexport type SqlLanguage = keyof typeof dialectNameMap;\n\nexport type FormatOptionsWithLanguage = Partial & {\n language?: SqlLanguage;\n};\n\nexport type FormatOptionsWithDialect = Partial & {\n dialect: DialectOptions;\n};\n\nconst defaultOptions: FormatOptions = {\n tabWidth: 2,\n useTabs: false,\n keywordCase: 'preserve',\n indentStyle: 'standard',\n logicalOperatorNewline: 'before',\n tabulateAlias: false,\n commaPosition: 'after',\n expressionWidth: 50,\n linesBetweenQueries: 1,\n denseOperators: false,\n newlineBeforeSemicolon: false,\n};\n\n/**\n * Format whitespace in a query to make it easier to read.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithLanguage} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const format = (query: string, cfg: FormatOptionsWithLanguage = {}): string => {\n if (typeof cfg.language === 'string' && !supportedDialects.includes(cfg.language)) {\n throw new ConfigError(`Unsupported SQL dialect: ${cfg.language}`);\n }\n\n const canonicalDialectName = dialectNameMap[cfg.language || 'sql'];\n\n return formatDialect(query, {\n ...cfg,\n dialect: allDialects[canonicalDialectName],\n });\n};\n\n/**\n * Like the above format(), but language parameter is mandatory\n * and must be a Dialect object instead of a string.\n *\n * @param {string} query - input SQL query string\n * @param {FormatOptionsWithDialect} cfg Configuration options (see docs in README)\n * @return {string} formatted query\n */\nexport const formatDialect = (\n query: string,\n { dialect, ...cfg }: FormatOptionsWithDialect\n): string => {\n if (typeof query !== 'string') {\n throw new Error('Invalid query argument. Expected string, instead got ' + typeof query);\n }\n\n const options = validateConfig({\n ...defaultOptions,\n ...cfg,\n });\n\n return new Formatter(createDialect(dialect), options).format(query);\n};\n\nexport type FormatFn = typeof format;\n"],"names":["root","factory","exports","module","define","amd","this","Rule","name","symbols","postprocess","id","highestId","State","rule","dot","reference","wantedBy","data","isComplete","length","Column","grammar","index","states","wants","scannable","completed","Grammar","rules","start","byName","forEach","hasOwnProperty","push","StreamLexer","reset","Parser","options","fromCompiled","key","keepHistory","lexer","lexerState","undefined","column","table","predict","process","current","getSymbolShortDisplay","symbol","type","literal","JSON","stringify","RegExp","toString","test","String","Error","prototype","withCursorAt","symbolSequence","map","join","slice","nextState","child","state","left","right","build","children","node","reverse","finish","fail","nextColumn","w","i","complete","exp","nulls","r","s","copy","Lexer","ParserStart","ParserRules","g","buffer","line","lastLineBreak","col","next","ch","value","save","formatError","token","message","lines","split","Math","max","nextLineBreak","indexOf","lastLineDigits","pad","n","Array","feed","chunk","e","err","reportLexerError","offset","text","constructor","expect","isToken","reportError","results","lexerError","tokenDisplay","lexerMessage","reportErrorCommon","lastColumnIndex","lastColumn","expectantStates","filter","nextSymbol","displayStateStack","buildFirstStateStack","stateStack","symbolDisplay","getSymbolDisplay","lastDisplay","sameDisplayCount","j","display","getSymbolLongDisplay","visited","prevState","childVisited","concat","childResult","restore","splice","rewind","considerations","t","c","nearley","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","obj","prop","Symbol","toStringTag","TokenType","createEofToken","EOF","raw","EOF_TOKEN","Infinity","testToken","compareToken","ARRAY","RESERVED_KEYWORD","BY","SET","RESERVED_CLAUSE","STRUCT","WINDOW","VALUES","isReserved","RESERVED_FUNCTION_NAME","RESERVED_PHRASE","RESERVED_SELECT","RESERVED_SET_OPERATION","RESERVED_JOIN","ARRAY_KEYWORD","CASE","END","WHEN","ELSE","THEN","LIMIT","BETWEEN","AND","OR","XOR","expandPhrases","phrases","flatMap","expandSinglePhrase","phrase","buildCombinations","parsePhrase","trim","REQUIRED_PART","REQUIRED_BLOCK","OPTIONAL_BLOCK","result","lastIndex","requiredMatch","exec","optionalBlockMatch","choices","requiredBlockMatch","first","rest","tail","head","last","arr","sortByLengthDesc","strings","sort","b","localeCompare","maxLength","reduce","cur","equalizeWhitespace","replace","flatKeywordList","dedupe","values","flat","Set","isMultiline","keywords","datatypes","stringFormat","misc","ddl","functions","aead","aggregateAnalytic","aggregate","approximateAggregate","array","bitwise","conversion","date","datetime","debugging","federatedQuery","geography","hash","hll","interval","json","math","navigation","net","numbering","security","statisticalAggregate","string","time","timestamp","uuid","conditional","legacyAggregate","legacyBitwise","legacyCasting","legacyComparison","legacyDatetime","legacyIp","legacyJson","legacyMath","legacyRegex","legacyString","legacyTableWildcard","legacyUrl","legacyWindow","legacyMisc","other","pivot","dataTypes","reservedSelect","reservedClauses","onelineClauses","reservedSetOperations","reservedJoins","reservedPhrases","bigquery","tokenizerOptions","reservedKeywords","reservedFunctionNames","extraParens","stringTypes","quote","prefixes","requirePrefix","identTypes","identChars","dashes","paramTypes","positional","named","quoted","variableTypes","regex","lineCommentTypes","operators","postProcess","tokens","prevToken","detectArraySubscripts","processed","_a","endIndex","findClosingAngleBracketIndex","typeDefTokens","IDENTIFIER","formatTypeDefToken","combineParameterizedTypes","formatOptions","COMMA","startIndex","level","scalar","row","olap","cast","standard","additional","db2","paramChars","db2i","masking","window","nonReserved","reserved","fileTypes","hive","nextToken","all","mariadb","supportsXor","allowFirstCharNumber","mysql","n1ql","numbered","numeric","character","comparison","largeObject","collection","hierarchical","dataMining","xml","encoding","nullRelated","env","objectReference","model","plsql","previousReservedToken","alwaysDenseOperators","binary","bitstring","pattern","datatype","enum","geometry","network","textsearch","sequence","range","set","sysInfo","sysAdmin","trigger","eventTrigger","stats","postgresql","nestedBlockComments","dateTime","spatial","hyperLogLog","machineLearning","superType","dataType","dataConversionParams","dataLoadParams","dataFormatParams","copyAuthParams","copyCompressionParams","copyMiscParams","compressionEncodings","redshift","caseAbbrev","spark","OPEN_PAREN","sqlite","nonStandard","sql","rowPattern","types","trino","analytic","configuration","cryptographic","cursor","mathematical","metadata","ranking","system","statistical","odbc","transactsql","singlestoredb","snowflake","escapeRegExp","WHITESPACE_REGEX","patternToRegex","toCaseInsensitivePattern","prefix","char","toUpperCase","toLowerCase","parenthesis","kind","parens","pair","reservedWord","avoidIdentChars","rejectIdentCharsPattern","reservedKeywordsPattern","parameter","typesRegex","quotePatterns","specialDelimiterMap","patternList","entries","specialDelimiters","keys","buildQStringPatterns","singleQuotePattern","quoteTypes","prefixesPattern","stringPattern","identifier","specialChars","identifierPattern","letter","number","firstChars","restChars","withDashes","lineColFromIndex","source","TokenizerEngine","input","tokenize","precedingWhitespace","getWhitespace","getNextToken","createParseError","matches","match","matchedText","START","MIDDLE","NestedComment","nestLevel","matchSection","Tokenizer","cfg","rulesBeforeParams","buildRulesBeforeParams","rulesAfterParams","buildRulesAfterParams","paramTypesOverrides","buildParamRules","validRules","BLOCK_COMMENT","LINE_COMMENT","QUOTED_IDENTIFIER","NUMBER","_b","toCanonical","includes","varTypes","VARIABLE","varType","STRING","DELIMITER","CLOSE_PAREN","OPERATOR","ASTERISK","DOT","_c","_d","custom","_e","NAMED_PARAMETER","v","QUOTED_PARAMETER","tokenKey","quoteChar","NUMBERED_PARAMETER","POSITIONAL_PARAMETER","customParam","CUSTOM_PARAMETER","Boolean","cache","Map","processDialectFormatOptions","fromEntries","indentString","indentStyle","repeat","useTabs","tabWidth","isTabularStyle","Params","params","getPositionalParameterIndex","setPositionalParameterIndex","dotKeywordToIdent","prevNonCommentToken","funcNameToKeyword","nextNonCommentToken","isOpenParen","identToArrayIdent","isOpenBracket","ARRAY_IDENTIFIER","keywordToArrayKeyword","dir","isComment","LexerAdapter","_info","has","NodeType","unwrap","el","toKeywordNode","keyword","tokenType","addComments","leading","trailing","leadingComments","trailingComments","addCommentsToArray","nodes","lead","statements","hasSemicolon","delimiter","statement","expressions","clauses","limitToken","_","exp1","optional","comma","exp2","limit_clause","limitKw","count","nameToken","clause","nameKw","all_columns_asterisk","set_operation","expr","chain","arrayToken","brackets","array_subscript","function_call","open","close","openParen","closeParen","object","_1","_2","property","property_access","betweenToken","expr1","andToken","_3","expr2","between_predicate","betweenKw","andKw","caseToken","endToken","case_expression","caseKw","endKw","whenToken","cond","thenToken","case_when","whenKw","thenKw","condition","elseToken","case_else","elseKw","operator","comments","line_comment","block_comment","NearleyParser","PRECEDING_WHITESPACE_REGEX","WS","Layout","indentation","items","add","item","SPACE","NO_SPACE","trimHorizontalWhitespace","NO_NEWLINE","trimWhitespace","NEWLINE","addNewline","MANDATORY_NEWLINE","INDENT","addIndentation","SINGLE_INDENT","isHorizontalWhitespace","pop","isRemovableWhitespace","newline","getLevel","itemToString","getLayoutItems","getSingleIndent","INDENT_TYPE_TOP_LEVEL","Indentation","indent","indentTypes","increaseTopLevel","increaseBlockLevel","decreaseTopLevel","decreaseBlockLevel","InlineLayout","expressionWidth","super","trailingSpace","addToLength","InlineLayoutError","ExpressionFormatter","dialectCfg","layout","inline","format","formatNode","formatComments","formatNodeWithoutComments","formatFunctionCall","formatArraySubscript","formatPropertyAccess","formatParenthesis","formatBetweenPredicate","formatCaseExpression","formatCaseWhen","formatCaseElse","formatClause","formatSetOperation","formatLimitClause","formatAllColumnsAsterisk","formatLiteral","formatIdentifier","formatParameter","formatOperator","formatComma","formatLineComment","formatBlockComment","formatKeywordNode","withComments","showKw","inlineLayout","formatInlineExpression","formatSubExpression","showNonTabularKw","isOnelineClause","formatClauseInOnelineStyle","formatClauseInTabularStyle","formatClauseInIndentedStyle","_node","denseOperators","fn","com","isMultilineBlockComment","splitBlockComment","isDocComment","comment","every","oldParamIndex","formatJoin","formatLogicalOperator","formatKeyword","logicalOperatorNewline","isLogicalOperator","tokenText","padEnd","padStart","toTabularFormat","keywordCase","Formatter","dialect","query","ast","parse","formattedQuery","formatAst","postFormat","trimEnd","tokenizer","parser","createParser","stat","formatStatement","linesBetweenQueries","newlineBeforeSemicolon","tabulateAlias","newQuery","aliasLines","splitLines","precedingText","as","alias","aliasMaxLength","formatAliasPositions","commaPosition","groups","group","groupCommaDelimitedLines","commaLines","code","indentComma","formatTabular","whitespace","removeLastIndent","trimStart","formatBefore","formatCommaPositions","ConfigError","dialectNameMap","tsql","supportedDialects","defaultOptions","language","canonicalDialectName","formatDialect","allDialects","p","console","warn","validateConfig","dialectOptions","createDialect"],"sourceRoot":""}