@memberjunction/generic-database-provider 5.28.0 → 5.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GenericDatabaseProvider.d.ts +6 -8
- package/dist/GenericDatabaseProvider.d.ts.map +1 -1
- package/dist/GenericDatabaseProvider.js +32 -81
- package/dist/GenericDatabaseProvider.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/queryCompositionEngine.d.ts +24 -99
- package/dist/queryCompositionEngine.d.ts.map +1 -1
- package/dist/queryCompositionEngine.js +92 -369
- package/dist/queryCompositionEngine.js.map +1 -1
- package/dist/queryPagingEngine.d.ts +8 -59
- package/dist/queryPagingEngine.d.ts.map +1 -1
- package/dist/queryPagingEngine.js +55 -235
- package/dist/queryPagingEngine.js.map +1 -1
- package/dist/renderPipeline.d.ts +133 -0
- package/dist/renderPipeline.d.ts.map +1 -0
- package/dist/renderPipeline.js +218 -0
- package/dist/renderPipeline.js.map +1 -0
- package/dist/symbolTable.d.ts +47 -0
- package/dist/symbolTable.d.ts.map +1 -0
- package/dist/symbolTable.js +94 -0
- package/dist/symbolTable.js.map +1 -0
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryPagingEngine.js","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAgBvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,iBAAiB;IAE1B;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAc,CACjB,WAAmB,EACnB,QAAgB,EAChB,OAAe,EACf,QAA0B;QAE1B,uEAAuE;QACvE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEvE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACzF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,QAA4B,EAAE,OAA2B;QACvE,OAAO,OAAO,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,uEAAuE;IACvE,2DAA2D;IAC3D,uEAAuE;IAEvE;;;;;;;;OAQG;IACK,MAAM,CAAC,YAAY,CACvB,GAAW,EACX,QAAgB,EAChB,OAAe,EACf,QAA0B;QAE1B,IAAI,OAAO,GAAG,GAAG,CAAC;QAElB,mEAAmE;QACnE,8DAA8D;QAC9D,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC3D,MAAM,YAAY,GAAG,iBAAiB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO,GAAG,GAAG,OAAO,cAAc,YAAY,EAAE,CAAC;QACrD,CAAC;QAED,uBAAuB;QACvB,MAAM,YAAY,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtF,OAAO,GAAG,OAAO,KAAK,YAAY,EAAE,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,sBAAsB,CAAC,GAAW;QAC7C,qEAAqE;QACrE,sEAAsE;QACtE,MAAM,aAAa,GAAG,aAAa,CAAC;QACpC,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAE7D,IAAI,UAAU,EAAE,CAAC;YACb,wDAAwD;YACxD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAClG,IAAI,UAAU,EAAE,CAAC;gBACb,8CAA8C;gBAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3F,OAAO,GAAG,SAAS,KAAK,SAAS,EAAE,CAAC;YACxC,CAAC;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,uEAAuE;IACvE,2DAA2D;IAC3D,uEAAuE;IAEvE;;;;;;;OAOG;IACK,MAAM,CAAC,aAAa,CAAC,GAAW,EAAE,QAA0B;QAChE,2CAA2C;QAC3C,MAAM,SAAS,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvE,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAEhC,oEAAoE;QACpE,OAAO,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,mBAAmB,CAAC,GAAW,EAAE,QAA0B;QACtE,MAAM,aAAa,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;QAC/E,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YAEtB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAuC,CAAC;YACvF,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,+CAA+C;YAC/C,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;YAE5F,wEAAwE;YACxE,MAAM,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACjE,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;gBACvB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,CAAC;YAED,qCAAqC;YACrC,IAAI,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAE9B,kDAAkD;YAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CACrC,IAA4D,EAAE,aAAa,CAC9E,CAAC;YAEF,qEAAqE;YACrE,MAAM,YAAY,GAAG,iBAAiB,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,YAAY,UAAU,aAAa,KAAK,CAAC,CAAC;YAClF,OAAO,QAAQ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,2CAA2C,YAAY,EAAE,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,kBAAkB,CAC7B,IAA6B,EAC7B,aAAqB,EACrB,QAA0B;QAE1B,MAAM,IAAI,GAAI,IAAI,CAAC,IAAyB,IAAI,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClB,MAAM,SAAS,GAAG,GAA0D,CAAC;YAC7E,MAAM,UAAU,GAAG,iBAAiB,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAgD,EAAE,aAAa,CAAC,CAAC;YACpH,OAAO,GAAG,UAAU,UAAU,OAAO,KAAK,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,qBAAqB,CAAC,GAAW,EAAE,QAA0B;QACxE,MAAM,aAAa,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;QAC/E,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAE7D,IAAI,UAAU,EAAE,CAAC;YACb,2CAA2C;YAC3C,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACvF,MAAM,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACtD,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAChD,CAAC;YACF,MAAM,YAAY,GAAG,iBAAiB,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,UAAU,eAAe,KAAK,CAAC,CAAC;YAClF,OAAO,QAAQ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,2CAA2C,YAAY,EAAE,CAAC;QAChG,CAAC;QAED,kDAAkD;QAClD,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB,CAAC,QAAgB,EAAE,QAA0B;QACxE,MAAM,YAAY,GAAG,iBAAiB,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5E,OAAO,QAAQ,YAAY,UAAU,QAAQ,8CAA8C,YAAY,EAAE,CAAC;IAC9G,CAAC;IAED,uEAAuE;IACvE,cAAc;IACd,uEAAuE;IAE/D,MAAM,CAAC,oBAAoB,CAAC,IAA6B;QAC7D,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC;QACrG,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,uBAAuB;IACvB,uEAAuE;IAEvE;;;;;;;;;;OAUG;IACK,MAAM,CAAC,kBAAkB,CAAC,GAAW,EAAE,QAA0B;QACrE,MAAM,SAAS,GAAG,iBAAiB,CAAC,wBAAwB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,wBAAwB,CAAC,GAAW,EAAE,QAA0B;QAC3E,MAAM,aAAa,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;QAC/E,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YAEtB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAuC,CAAC;YACvF,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,qEAAqE;YACrE,0CAA0C;YAC1C,OAAO,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,GAAW;QAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAElB,gBAAgB;YAChB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClD,CAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;oBAAE,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;oBAAE,CAAC,IAAI,CAAC,CAAC;;oBAAM,CAAC,GAAG,GAAG,CAAC;gBACtC,SAAS;YACb,CAAC;YACD,eAAe;YACf,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAClD,CAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;oBAAE,CAAC,EAAE,CAAC;gBACvC,SAAS;YACb,CAAC;YACD,uBAAuB;YACvB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;4BAAC,CAAC,IAAI,CAAC,CAAC;4BAAC,SAAS;wBAAC,CAAC;wBAC5D,CAAC,EAAE,CAAC;wBAAC,MAAM;oBACf,CAAC;oBACD,CAAC,EAAE,CAAC;gBACR,CAAC;gBACD,SAAS;YACb,CAAC;YACD,4BAA4B;YAC5B,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;oBAAE,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,GAAG;oBAAE,CAAC,EAAE,CAAC;gBACjB,SAAS;YACb,CAAC;YACD,2BAA2B;YAC3B,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;oBAAE,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,GAAG;oBAAE,CAAC,EAAE,CAAC;gBACjB,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,KAAK,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC3C,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBAAC,KAAK,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAE3C,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBAC7E,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnC,cAAc,GAAG,CAAC,CAAC;gBACvB,CAAC;gBACD,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACb,CAAC;YAED,CAAC,EAAE,CAAC;QACR,CAAC;QAED,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACzD,CAAC;QAED,OAAO;YACH,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YACvD,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE;SAC3D,CAAC;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAW;QAC7B,MAAM,QAAQ,GAAG,6DAA6D,CAAC;QAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC9C,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAChF,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,YAAY,CAAC,aAAqB,EAAE,QAA0B;QACzE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK;YAAE,OAAO,aAAa,CAAC;QAEjC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ;YAAE,OAAO,aAAa,CAAC;QAEpC,MAAM,UAAU,GAAG,iBAAiB,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzE,OAAO,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,uEAAuE;IACvE,mBAAmB;IACnB,uEAAuE;IAE/D,MAAM,CAAC,eAAe,CAAC,IAAY,EAAE,QAA0B;QACnE,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,QAAgB,EAAE,OAAe,EAAE,QAA0B;QAC1F,OAAO,QAAQ,KAAK,YAAY;YAC5B,CAAC,CAAC,SAAS,OAAO,WAAW,QAAQ,EAAE;YACvC,CAAC,CAAC,UAAU,QAAQ,oBAAoB,OAAO,YAAY,CAAC;IACpE,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,QAA0B;QACpD,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC;IAC7D,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"queryPagingEngine.js","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { DatabasePlatform, UserInfo, QueryDependencySpec, QueryParameterInfo } from '@memberjunction/core';
|
|
2
|
+
import { CompositionResult, CompositionCTEInfo } from './queryCompositionEngine.js';
|
|
3
|
+
import { PagingWrappedSQL } from './queryPagingEngine.js';
|
|
4
|
+
import { type QueryTemplateInput } from '@memberjunction/query-processor';
|
|
5
|
+
/**
|
|
6
|
+
* Diagnostic metadata for a single composition operation.
|
|
7
|
+
*/
|
|
8
|
+
export interface CompositionDiagnostic {
|
|
9
|
+
/** Name of the dependency query resolved */
|
|
10
|
+
DepName: string;
|
|
11
|
+
/** Category path of the dependency */
|
|
12
|
+
CategoryPath: string;
|
|
13
|
+
/** Generated CTE name in the output */
|
|
14
|
+
CTEName: string;
|
|
15
|
+
/** Whether ORDER BY was stripped from this dep */
|
|
16
|
+
OrderByStripped: boolean;
|
|
17
|
+
/** Number of inner CTEs hoisted from this dep */
|
|
18
|
+
InnerCTEsHoisted: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Pipeline trace capturing the SQL state after each pass.
|
|
22
|
+
* Used for error diagnosis — when SQL Server rejects the output, the
|
|
23
|
+
* caller can see what each pass produced to identify which pass
|
|
24
|
+
* mangled the SQL.
|
|
25
|
+
*/
|
|
26
|
+
export interface RenderTrace {
|
|
27
|
+
/** SQL after composition ({{ }}/{% %} tokens still present) */
|
|
28
|
+
AfterComposition: string;
|
|
29
|
+
/** Composition metadata: which deps resolved, which CTEs generated */
|
|
30
|
+
CompositionDiagnostics: CompositionDiagnostic[];
|
|
31
|
+
/** SQL after Nunjucks template evaluation (fully resolved, executable) */
|
|
32
|
+
AfterTemplates: string;
|
|
33
|
+
/** SQL after paging (final) — only set if paging was applied */
|
|
34
|
+
AfterPaging: string | null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Context passed to {@link RenderPipeline.Run} controlling each pipeline stage.
|
|
38
|
+
*/
|
|
39
|
+
export interface RenderContext {
|
|
40
|
+
/** Target database platform */
|
|
41
|
+
Platform: DatabasePlatform;
|
|
42
|
+
/** User context for permission checks on referenced queries */
|
|
43
|
+
ContextUser?: UserInfo;
|
|
44
|
+
/** Parameter values from the caller */
|
|
45
|
+
Parameters?: Record<string, string>;
|
|
46
|
+
/** Formal parameter definitions (for validation). Null = skip validation. */
|
|
47
|
+
ParameterDefinitions?: QueryParameterInfo[];
|
|
48
|
+
/** Whether the outer query uses Nunjucks templates */
|
|
49
|
+
UsesTemplate?: boolean;
|
|
50
|
+
/** Inline dependency specs for transient query testing */
|
|
51
|
+
Dependencies?: QueryDependencySpec[];
|
|
52
|
+
/** Original (pre-composition) SQL — used for template input metadata */
|
|
53
|
+
OriginalSQL?: string;
|
|
54
|
+
/** Full query metadata object (saved query path). When provided, passed
|
|
55
|
+
* directly to processQueryTemplate for parameter validation. When omitted,
|
|
56
|
+
* a synthetic QueryTemplateInput is built from OriginalSQL + ParameterDefinitions. */
|
|
57
|
+
QueryInfo?: QueryTemplateInput;
|
|
58
|
+
/** Paging parameters (omit to skip paging) */
|
|
59
|
+
Paging?: {
|
|
60
|
+
StartRow: number;
|
|
61
|
+
MaxRows: number;
|
|
62
|
+
};
|
|
63
|
+
/** MaxRows safety limit for transient query testing */
|
|
64
|
+
MaxRows?: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Result returned by {@link RenderPipeline.Run}.
|
|
68
|
+
*/
|
|
69
|
+
export interface RenderResult {
|
|
70
|
+
/** The final SQL ready for execution */
|
|
71
|
+
FinalSQL: string;
|
|
72
|
+
/** Parameters that were applied during template processing */
|
|
73
|
+
AppliedParameters: Record<string, string>;
|
|
74
|
+
/** Whether composition tokens were found and resolved */
|
|
75
|
+
HasCompositions: boolean;
|
|
76
|
+
/** Metadata about each CTE generated during composition */
|
|
77
|
+
CTEs: CompositionCTEInfo[];
|
|
78
|
+
/** Pipeline trace for error diagnosis */
|
|
79
|
+
Trace: RenderTrace;
|
|
80
|
+
/** Paging result (if paging was applied) */
|
|
81
|
+
PagingResult: PagingWrappedSQL | null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* RenderPipeline wraps the existing composition → template → paging calls
|
|
85
|
+
* into a single entry point with enforced ordering and diagnostic tracing.
|
|
86
|
+
*
|
|
87
|
+
* **Pipeline order** (this is a data dependency, not a convention):
|
|
88
|
+
* 1. **Composition** resolves `{{query:"..."}}` tokens into CTEs. Must run
|
|
89
|
+
* BEFORE Nunjucks because pass-through parameters rename `{{ innerParam }}`
|
|
90
|
+
* to `{{ outerParam }}` — Nunjucks needs those tokens intact.
|
|
91
|
+
* 2. **Nunjucks** evaluates `{{ param | filter }}` and `{% if/for %}` blocks.
|
|
92
|
+
* Must run AFTER composition and BEFORE paging.
|
|
93
|
+
* 3. **Paging** detects ORDER BY and injects OFFSET/FETCH or LIMIT/OFFSET.
|
|
94
|
+
* Must run AFTER Nunjucks because it needs to detect whether
|
|
95
|
+
* `{% if SortField %} ORDER BY ... {% endif %}` resolved to an actual
|
|
96
|
+
* ORDER BY or not — that depends on runtime parameter values.
|
|
97
|
+
*
|
|
98
|
+
* The `Trace` field on the result captures the SQL state after each pass,
|
|
99
|
+
* enabling diagnosis when SQL Server rejects the output.
|
|
100
|
+
*/
|
|
101
|
+
export declare class RenderPipeline {
|
|
102
|
+
/**
|
|
103
|
+
* Runs the full rendering pipeline: composition → Nunjucks → paging.
|
|
104
|
+
*
|
|
105
|
+
* @param sql - Raw SQL with potential composition tokens and template expressions
|
|
106
|
+
* @param ctx - Pipeline context (platform, user, parameters, paging, etc.)
|
|
107
|
+
* @returns Final SQL, applied parameters, composition metadata, and diagnostic trace
|
|
108
|
+
*/
|
|
109
|
+
static Run(sql: string, ctx: RenderContext): RenderResult;
|
|
110
|
+
/**
|
|
111
|
+
* Resolves only the composition step — for callers that need composition
|
|
112
|
+
* without the full pipeline (e.g., save-time token analysis).
|
|
113
|
+
*
|
|
114
|
+
* Wraps {@link QueryCompositionEngine.ResolveComposition} to maintain the
|
|
115
|
+
* existing public API while the internal implementation may change.
|
|
116
|
+
*/
|
|
117
|
+
static ResolveCompositionOnly(sql: string, platform: DatabasePlatform, contextUser: UserInfo, outerParams?: Record<string, string>, inlineDependencies?: QueryDependencySpec[]): CompositionResult;
|
|
118
|
+
/**
|
|
119
|
+
* Checks whether SQL contains composition tokens.
|
|
120
|
+
* Convenience wrapper for callers that need a fast guard.
|
|
121
|
+
*/
|
|
122
|
+
static HasCompositionTokens(sql: string): boolean;
|
|
123
|
+
private static runComposition;
|
|
124
|
+
private static runTemplates;
|
|
125
|
+
private static applyMaxRows;
|
|
126
|
+
private static getDialect;
|
|
127
|
+
/**
|
|
128
|
+
* Strips SQL comments (single-line -- and block comments) from a SQL string.
|
|
129
|
+
* Preserves single-quoted string literals to avoid stripping inside them.
|
|
130
|
+
*/
|
|
131
|
+
private static stripSQLComments;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=renderPipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderPipeline.d.ts","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { GetDialect } from '@memberjunction/sql-dialect';
|
|
2
|
+
import { QueryCompositionEngine } from './queryCompositionEngine.js';
|
|
3
|
+
import { QueryPagingEngine } from './queryPagingEngine.js';
|
|
4
|
+
import { QueryParameterProcessor } from '@memberjunction/query-processor';
|
|
5
|
+
// ════════════════════════════════════════════════════════════════════
|
|
6
|
+
// Pipeline
|
|
7
|
+
// ════════════════════════════════════════════════════════════════════
|
|
8
|
+
/**
|
|
9
|
+
* RenderPipeline wraps the existing composition → template → paging calls
|
|
10
|
+
* into a single entry point with enforced ordering and diagnostic tracing.
|
|
11
|
+
*
|
|
12
|
+
* **Pipeline order** (this is a data dependency, not a convention):
|
|
13
|
+
* 1. **Composition** resolves `{{query:"..."}}` tokens into CTEs. Must run
|
|
14
|
+
* BEFORE Nunjucks because pass-through parameters rename `{{ innerParam }}`
|
|
15
|
+
* to `{{ outerParam }}` — Nunjucks needs those tokens intact.
|
|
16
|
+
* 2. **Nunjucks** evaluates `{{ param | filter }}` and `{% if/for %}` blocks.
|
|
17
|
+
* Must run AFTER composition and BEFORE paging.
|
|
18
|
+
* 3. **Paging** detects ORDER BY and injects OFFSET/FETCH or LIMIT/OFFSET.
|
|
19
|
+
* Must run AFTER Nunjucks because it needs to detect whether
|
|
20
|
+
* `{% if SortField %} ORDER BY ... {% endif %}` resolved to an actual
|
|
21
|
+
* ORDER BY or not — that depends on runtime parameter values.
|
|
22
|
+
*
|
|
23
|
+
* The `Trace` field on the result captures the SQL state after each pass,
|
|
24
|
+
* enabling diagnosis when SQL Server rejects the output.
|
|
25
|
+
*/
|
|
26
|
+
export class RenderPipeline {
|
|
27
|
+
/**
|
|
28
|
+
* Runs the full rendering pipeline: composition → Nunjucks → paging.
|
|
29
|
+
*
|
|
30
|
+
* @param sql - Raw SQL with potential composition tokens and template expressions
|
|
31
|
+
* @param ctx - Pipeline context (platform, user, parameters, paging, etc.)
|
|
32
|
+
* @returns Final SQL, applied parameters, composition metadata, and diagnostic trace
|
|
33
|
+
*/
|
|
34
|
+
static Run(sql, ctx) {
|
|
35
|
+
let currentSQL = sql;
|
|
36
|
+
let appliedParameters = {};
|
|
37
|
+
// ── Step 1: Composition ──────────────────────────────────────
|
|
38
|
+
const compositionResult = RenderPipeline.runComposition(currentSQL, ctx);
|
|
39
|
+
currentSQL = compositionResult.ResolvedSQL;
|
|
40
|
+
const afterComposition = currentSQL;
|
|
41
|
+
const compositionDiagnostics = buildCompositionDiagnostics(compositionResult);
|
|
42
|
+
// ── Step 1.5: Strip SQL comments ─────────────────────────────
|
|
43
|
+
// Comments serve no runtime purpose in executed SQL and can contain
|
|
44
|
+
// {{ }} patterns (e.g. documentation examples) that would crash
|
|
45
|
+
// Nunjucks. Strip them after composition (which correctly ignores
|
|
46
|
+
// comment-embedded tokens) and before Nunjucks processes the SQL.
|
|
47
|
+
// Comments are still visible in Trace.AfterComposition for debugging.
|
|
48
|
+
currentSQL = RenderPipeline.stripSQLComments(currentSQL);
|
|
49
|
+
// ── Step 2: Nunjucks template evaluation ─────────────────────
|
|
50
|
+
const templateResult = RenderPipeline.runTemplates(currentSQL, sql, ctx, compositionResult);
|
|
51
|
+
currentSQL = templateResult.processedSQL;
|
|
52
|
+
appliedParameters = templateResult.appliedParameters;
|
|
53
|
+
const afterTemplates = currentSQL;
|
|
54
|
+
// ── Step 3: MaxRows safety limit (if specified) ──────────────
|
|
55
|
+
if (ctx.MaxRows != null && ctx.MaxRows > 0) {
|
|
56
|
+
currentSQL = RenderPipeline.applyMaxRows(currentSQL, ctx.MaxRows, ctx.Platform);
|
|
57
|
+
}
|
|
58
|
+
// ── Step 4: Paging (if requested) ────────────────────────────
|
|
59
|
+
let pagingResult = null;
|
|
60
|
+
let afterPaging = null;
|
|
61
|
+
if (ctx.Paging && QueryPagingEngine.ShouldPage(ctx.Paging.StartRow, ctx.Paging.MaxRows)) {
|
|
62
|
+
pagingResult = QueryPagingEngine.WrapWithPaging(currentSQL, ctx.Paging.StartRow, ctx.Paging.MaxRows, ctx.Platform);
|
|
63
|
+
currentSQL = pagingResult.DataSQL;
|
|
64
|
+
afterPaging = currentSQL;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
FinalSQL: currentSQL,
|
|
68
|
+
AppliedParameters: appliedParameters,
|
|
69
|
+
HasCompositions: compositionResult.HasCompositions,
|
|
70
|
+
CTEs: compositionResult.CTEs,
|
|
71
|
+
Trace: {
|
|
72
|
+
AfterComposition: afterComposition,
|
|
73
|
+
CompositionDiagnostics: compositionDiagnostics,
|
|
74
|
+
AfterTemplates: afterTemplates,
|
|
75
|
+
AfterPaging: afterPaging,
|
|
76
|
+
},
|
|
77
|
+
PagingResult: pagingResult,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolves only the composition step — for callers that need composition
|
|
82
|
+
* without the full pipeline (e.g., save-time token analysis).
|
|
83
|
+
*
|
|
84
|
+
* Wraps {@link QueryCompositionEngine.ResolveComposition} to maintain the
|
|
85
|
+
* existing public API while the internal implementation may change.
|
|
86
|
+
*/
|
|
87
|
+
static ResolveCompositionOnly(sql, platform, contextUser, outerParams, inlineDependencies) {
|
|
88
|
+
return new QueryCompositionEngine().ResolveComposition(sql, platform, contextUser, outerParams, inlineDependencies);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Checks whether SQL contains composition tokens.
|
|
92
|
+
* Convenience wrapper for callers that need a fast guard.
|
|
93
|
+
*/
|
|
94
|
+
static HasCompositionTokens(sql) {
|
|
95
|
+
return new QueryCompositionEngine().HasCompositionTokens(sql);
|
|
96
|
+
}
|
|
97
|
+
// ════════════════════════════════════════════════════════════════
|
|
98
|
+
// Internal pass implementations
|
|
99
|
+
// ═════════════════════════════════════════════════════���══════════
|
|
100
|
+
static runComposition(sql, ctx) {
|
|
101
|
+
const engine = new QueryCompositionEngine();
|
|
102
|
+
if (!engine.HasCompositionTokens(sql) || !ctx.ContextUser) {
|
|
103
|
+
return {
|
|
104
|
+
ResolvedSQL: sql,
|
|
105
|
+
CTEs: [],
|
|
106
|
+
DependencyGraph: new Map(),
|
|
107
|
+
HasCompositions: false,
|
|
108
|
+
AnyDependencyUsesTemplates: false,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return engine.ResolveComposition(sql, ctx.Platform, ctx.ContextUser, ctx.Parameters, ctx.Dependencies);
|
|
112
|
+
}
|
|
113
|
+
static runTemplates(composedSQL, originalSQL, ctx, compositionResult) {
|
|
114
|
+
const needsTemplateProcessing = ctx.UsesTemplate || compositionResult.AnyDependencyUsesTemplates;
|
|
115
|
+
if (!needsTemplateProcessing) {
|
|
116
|
+
return { processedSQL: composedSQL, appliedParameters: {} };
|
|
117
|
+
}
|
|
118
|
+
// Build the template input. When a QueryInfo object is provided (saved
|
|
119
|
+
// query path), pass it directly so processQueryTemplate gets the real
|
|
120
|
+
// Parameters array for validation. Otherwise build a synthetic input.
|
|
121
|
+
const templateInput = ctx.QueryInfo ?? {
|
|
122
|
+
SQL: ctx.OriginalSQL ?? originalSQL,
|
|
123
|
+
UsesTemplate: ctx.UsesTemplate ?? false,
|
|
124
|
+
Parameters: ctx.ParameterDefinitions ?? [],
|
|
125
|
+
};
|
|
126
|
+
const skipUnknownParamCheck = compositionResult.AnyDependencyUsesTemplates || !ctx.ParameterDefinitions;
|
|
127
|
+
const result = QueryParameterProcessor.processQueryTemplate(templateInput, ctx.Parameters, composedSQL, skipUnknownParamCheck);
|
|
128
|
+
if (!result.success) {
|
|
129
|
+
throw new Error(result.error);
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
processedSQL: result.processedSQL,
|
|
133
|
+
appliedParameters: (result.appliedParameters || {}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
static applyMaxRows(sql, maxRows, platform) {
|
|
137
|
+
const trimmed = sql.trim();
|
|
138
|
+
if (/\bTOP\s+\d/i.test(trimmed) || /\bLIMIT\s+\d/i.test(trimmed)) {
|
|
139
|
+
return sql;
|
|
140
|
+
}
|
|
141
|
+
const dialect = RenderPipeline.getDialect(platform);
|
|
142
|
+
const limitResult = dialect.LimitClause(maxRows);
|
|
143
|
+
if (limitResult.prefix) {
|
|
144
|
+
// SQL Server style: inject TOP N after SELECT
|
|
145
|
+
return trimmed.replace(/^(SELECT\s+(?:DISTINCT\s+)?)/i, `$1${limitResult.prefix} `);
|
|
146
|
+
}
|
|
147
|
+
// PostgreSQL style: append LIMIT N
|
|
148
|
+
const withoutSemicolon = trimmed.replace(/;\s*$/, '');
|
|
149
|
+
return `${withoutSemicolon}\n${limitResult.suffix}`;
|
|
150
|
+
}
|
|
151
|
+
static getDialect(platform) {
|
|
152
|
+
return GetDialect(platform);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Strips SQL comments (single-line -- and block comments) from a SQL string.
|
|
156
|
+
* Preserves single-quoted string literals to avoid stripping inside them.
|
|
157
|
+
*/
|
|
158
|
+
static stripSQLComments(sql) {
|
|
159
|
+
let result = '';
|
|
160
|
+
let i = 0;
|
|
161
|
+
while (i < sql.length) {
|
|
162
|
+
// Single-quoted string literal — preserve as-is
|
|
163
|
+
if (sql[i] === "'") {
|
|
164
|
+
result += sql[i++];
|
|
165
|
+
while (i < sql.length) {
|
|
166
|
+
if (sql[i] === "'" && i + 1 < sql.length && sql[i + 1] === "'") {
|
|
167
|
+
result += "''";
|
|
168
|
+
i += 2;
|
|
169
|
+
}
|
|
170
|
+
else if (sql[i] === "'") {
|
|
171
|
+
result += sql[i++];
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
result += sql[i++];
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Single-line comment: -- to end of line
|
|
180
|
+
else if (sql[i] === '-' && i + 1 < sql.length && sql[i + 1] === '-') {
|
|
181
|
+
while (i < sql.length && sql[i] !== '\n')
|
|
182
|
+
i++;
|
|
183
|
+
}
|
|
184
|
+
// Block comment: /* ... */
|
|
185
|
+
else if (sql[i] === '/' && i + 1 < sql.length && sql[i + 1] === '*') {
|
|
186
|
+
i += 2;
|
|
187
|
+
while (i < sql.length) {
|
|
188
|
+
if (sql[i] === '*' && i + 1 < sql.length && sql[i + 1] === '/') {
|
|
189
|
+
i += 2;
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
i++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Normal character
|
|
196
|
+
else {
|
|
197
|
+
result += sql[i++];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// ════════════════════════════════════════════════════════════════════
|
|
204
|
+
// Helpers
|
|
205
|
+
// ════════════════════════════════════════════════════════════════════
|
|
206
|
+
function buildCompositionDiagnostics(result) {
|
|
207
|
+
return result.CTEs.map(cte => ({
|
|
208
|
+
DepName: cte.QueryName,
|
|
209
|
+
CategoryPath: cte.CategoryPath,
|
|
210
|
+
CTEName: cte.CTEName,
|
|
211
|
+
// We can't easily tell if ORDER BY was stripped without comparing
|
|
212
|
+
// original vs resolved SQL, so this is a best-effort flag based on
|
|
213
|
+
// whether the original had ORDER BY and the resolved doesn't.
|
|
214
|
+
OrderByStripped: /ORDER\s+BY\b/i.test(cte.OriginalSQL) && !/ORDER\s+BY\b/i.test(cte.ResolvedSQL),
|
|
215
|
+
InnerCTEsHoisted: 0, // TODO: track in composition engine
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=renderPipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderPipeline.js","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { SQLParserDialect } from '@memberjunction/sql-dialect';
|
|
2
|
+
/**
|
|
3
|
+
* Symbol table for managing CTE names during composition.
|
|
4
|
+
*
|
|
5
|
+
* Guarantees uniqueness at CTE creation time — name collisions become
|
|
6
|
+
* impossible by construction.
|
|
7
|
+
*
|
|
8
|
+
* All name comparisons are case-insensitive (SQL Server and PostgreSQL
|
|
9
|
+
* both treat unquoted identifiers case-insensitively for CTEs).
|
|
10
|
+
*/
|
|
11
|
+
export declare class SymbolTable {
|
|
12
|
+
/** Allocated names (canonical lowercase → original casing) */
|
|
13
|
+
private allocatedNames;
|
|
14
|
+
/** Dialect for identifier quoting */
|
|
15
|
+
private dialect;
|
|
16
|
+
constructor(dialect: SQLParserDialect);
|
|
17
|
+
/**
|
|
18
|
+
* Registers a name. If the name is already taken, generates a unique
|
|
19
|
+
* suffix (`Name__2`, `Name__3`, ...) and returns the suffixed version.
|
|
20
|
+
*
|
|
21
|
+
* @param desiredName - The preferred name (unquoted)
|
|
22
|
+
* @returns The actual allocated name (may be suffixed if collision)
|
|
23
|
+
*/
|
|
24
|
+
Register(desiredName: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Pre-seeds the table with names that are already taken (e.g., outer CTE names).
|
|
27
|
+
*/
|
|
28
|
+
Seed(name: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Checks if a name (case-insensitive) is already allocated.
|
|
31
|
+
*/
|
|
32
|
+
Has(name: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the dialect-quoted form of a name via `dialect.QuoteIdentifier()`.
|
|
35
|
+
*/
|
|
36
|
+
Quote(name: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Generates a composition CTE name from a query name + hash, registers it,
|
|
39
|
+
* and returns the quoted form.
|
|
40
|
+
*/
|
|
41
|
+
RegisterCompositionCTE(queryName: string, hashInput: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Returns the current count of allocated names.
|
|
44
|
+
*/
|
|
45
|
+
get Size(): number;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=symbolTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbolTable.d.ts","sourceRoot":"","sources":["../src/symbolTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACpB,8DAA8D;IAC9D,OAAO,CAAC,cAAc,CAA6B;IAEnD,qCAAqC;IACrC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,gBAAgB;IAIrC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAmBrC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3B;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAYpE;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symbol table for managing CTE names during composition.
|
|
3
|
+
*
|
|
4
|
+
* Guarantees uniqueness at CTE creation time — name collisions become
|
|
5
|
+
* impossible by construction.
|
|
6
|
+
*
|
|
7
|
+
* All name comparisons are case-insensitive (SQL Server and PostgreSQL
|
|
8
|
+
* both treat unquoted identifiers case-insensitively for CTEs).
|
|
9
|
+
*/
|
|
10
|
+
export class SymbolTable {
|
|
11
|
+
constructor(dialect) {
|
|
12
|
+
/** Allocated names (canonical lowercase → original casing) */
|
|
13
|
+
this.allocatedNames = new Map();
|
|
14
|
+
this.dialect = dialect;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Registers a name. If the name is already taken, generates a unique
|
|
18
|
+
* suffix (`Name__2`, `Name__3`, ...) and returns the suffixed version.
|
|
19
|
+
*
|
|
20
|
+
* @param desiredName - The preferred name (unquoted)
|
|
21
|
+
* @returns The actual allocated name (may be suffixed if collision)
|
|
22
|
+
*/
|
|
23
|
+
Register(desiredName) {
|
|
24
|
+
const canonical = desiredName.toLowerCase();
|
|
25
|
+
if (!this.allocatedNames.has(canonical)) {
|
|
26
|
+
this.allocatedNames.set(canonical, desiredName);
|
|
27
|
+
return desiredName;
|
|
28
|
+
}
|
|
29
|
+
// Collision — find a fresh name
|
|
30
|
+
let suffix = 2;
|
|
31
|
+
let candidate = `${desiredName}__${suffix}`;
|
|
32
|
+
while (this.allocatedNames.has(candidate.toLowerCase())) {
|
|
33
|
+
suffix++;
|
|
34
|
+
candidate = `${desiredName}__${suffix}`;
|
|
35
|
+
}
|
|
36
|
+
this.allocatedNames.set(candidate.toLowerCase(), candidate);
|
|
37
|
+
return candidate;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Pre-seeds the table with names that are already taken (e.g., outer CTE names).
|
|
41
|
+
*/
|
|
42
|
+
Seed(name) {
|
|
43
|
+
const canonical = name.toLowerCase();
|
|
44
|
+
if (this.allocatedNames.has(canonical)) {
|
|
45
|
+
return; // Already seeded — idempotent
|
|
46
|
+
}
|
|
47
|
+
this.allocatedNames.set(canonical, name);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Checks if a name (case-insensitive) is already allocated.
|
|
51
|
+
*/
|
|
52
|
+
Has(name) {
|
|
53
|
+
return this.allocatedNames.has(name.toLowerCase());
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns the dialect-quoted form of a name via `dialect.QuoteIdentifier()`.
|
|
57
|
+
*/
|
|
58
|
+
Quote(name) {
|
|
59
|
+
return this.dialect.QuoteIdentifier(name);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generates a composition CTE name from a query name + hash, registers it,
|
|
63
|
+
* and returns the quoted form.
|
|
64
|
+
*/
|
|
65
|
+
RegisterCompositionCTE(queryName, hashInput) {
|
|
66
|
+
const sanitized = queryName
|
|
67
|
+
.replace(/[^a-zA-Z0-9_ ]/g, '')
|
|
68
|
+
.replace(/\s+/g, '_')
|
|
69
|
+
.substring(0, 50);
|
|
70
|
+
const hash = simpleHash(hashInput);
|
|
71
|
+
const desired = `__cte_${sanitized}_${hash}`;
|
|
72
|
+
const actual = this.Register(desired);
|
|
73
|
+
return this.Quote(actual);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Returns the current count of allocated names.
|
|
77
|
+
*/
|
|
78
|
+
get Size() {
|
|
79
|
+
return this.allocatedNames.size;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Simple string hash for generating short, deterministic suffixes.
|
|
84
|
+
*/
|
|
85
|
+
function simpleHash(input) {
|
|
86
|
+
let hash = 0;
|
|
87
|
+
for (let i = 0; i < input.length; i++) {
|
|
88
|
+
const char = input.charCodeAt(i);
|
|
89
|
+
hash = ((hash << 5) - hash) + char;
|
|
90
|
+
hash = hash & hash;
|
|
91
|
+
}
|
|
92
|
+
return Math.abs(hash).toString(36).substring(0, 6);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=symbolTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbolTable.js","sourceRoot":"","sources":["../src/symbolTable.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/generic-database-provider",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.30.0",
|
|
5
5
|
"description": "Shared database provider logic for MemberJunction — intermediate base class between DatabaseProviderBase and platform-specific providers",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -22,18 +22,18 @@
|
|
|
22
22
|
"vitest": "^3.1.1"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@memberjunction/actions": "5.
|
|
26
|
-
"@memberjunction/actions-base": "5.
|
|
27
|
-
"@memberjunction/aiengine": "5.
|
|
28
|
-
"@memberjunction/core": "5.
|
|
29
|
-
"@memberjunction/core-entities": "5.
|
|
30
|
-
"@memberjunction/encryption": "5.
|
|
31
|
-
"@memberjunction/geo-core": "5.
|
|
32
|
-
"@memberjunction/global": "5.
|
|
33
|
-
"@memberjunction/query-processor": "5.
|
|
34
|
-
"@memberjunction/sql-dialect": "5.
|
|
35
|
-
"@memberjunction/sql-parser": "5.
|
|
36
|
-
"@memberjunction/queue": "5.
|
|
25
|
+
"@memberjunction/actions": "5.30.0",
|
|
26
|
+
"@memberjunction/actions-base": "5.30.0",
|
|
27
|
+
"@memberjunction/aiengine": "5.30.0",
|
|
28
|
+
"@memberjunction/core": "5.30.0",
|
|
29
|
+
"@memberjunction/core-entities": "5.30.0",
|
|
30
|
+
"@memberjunction/encryption": "5.30.0",
|
|
31
|
+
"@memberjunction/geo-core": "5.30.0",
|
|
32
|
+
"@memberjunction/global": "5.30.0",
|
|
33
|
+
"@memberjunction/query-processor": "5.30.0",
|
|
34
|
+
"@memberjunction/sql-dialect": "5.30.0",
|
|
35
|
+
"@memberjunction/sql-parser": "5.30.0",
|
|
36
|
+
"@memberjunction/queue": "5.30.0",
|
|
37
37
|
"sql-formatter": "^15.7.0",
|
|
38
38
|
"uuid": "^13.0.0"
|
|
39
39
|
},
|