@uwdata/mosaic-sql
Version:
SQL query construction and analysis.
32 lines • 960 B
JavaScript
import { isNode } from '../ast/node.js';
import { recurse } from './recurse.js';
/**
* Perform a traversal of a SQL expression AST.
* @param node Root node for AST traversal.
* @param visit Visitor callback function.
*/
export function walk(node, visit) {
if (!isNode(node))
return;
const result = visit(node);
if (result)
return result;
const props = recurse[node.type];
const n = props?.length ?? 0;
for (let i = 0; i < n; ++i) {
// @ts-expect-error lookup of valid property
const value = node[props[i]];
if (Array.isArray(value)) {
const m = value.length;
for (let j = 0; j < m; ++j) {
if (value[j] && Number(walk(value[j], visit)) < 0) {
return result;
}
}
}
else if (value && Number(walk(value, visit)) < 0) {
return -1;
}
}
}
//# sourceMappingURL=walk.js.map