* [LIQ] Extend with `group by` and `having` support Also update documentation with extensive examples and add some parser tests. Note: `make generate` JS files included. Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz> * Merge `liq-add-support-for-aggregators` branch Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz> * Fix link, remove `_` example Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz> * Wrap example LIQ queries inside `query [[ .. ]]` and replace `sql` code block type to `lua` Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz> * Example self-consistency fix Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz> * Fixed some queries * Add experimental tags to LIQ aggregation/grouping --------- Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz> Co-authored-by: Zef Hemel <zef@zef.me>
27 lines
742 B
TypeScript
27 lines
742 B
TypeScript
import { LuaEnv, luaGet, luaKeys, type LuaStackFrame } from "./runtime.ts";
|
|
|
|
/**
|
|
* Build an environment for evaluating per-item expressions in queries.
|
|
* Extracted to its own module to avoid circular imports between
|
|
* query_collection.ts and aggregates.ts.
|
|
*/
|
|
export function buildItemEnv(
|
|
objectVariable: string | undefined,
|
|
item: any,
|
|
env: LuaEnv,
|
|
sf: LuaStackFrame,
|
|
): LuaEnv {
|
|
const itemEnv = new LuaEnv(env);
|
|
if (!objectVariable) {
|
|
// Inject all item keys as variables
|
|
for (const key of luaKeys(item)) {
|
|
itemEnv.setLocal(key, luaGet(item, key, sf.astCtx ?? null, sf));
|
|
}
|
|
// As well as _
|
|
itemEnv.setLocal("_", item);
|
|
} else {
|
|
itemEnv.setLocal(objectVariable, item);
|
|
}
|
|
return itemEnv;
|
|
}
|