🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@valv/clickhouse

Package Overview
Dependencies
Maintainers
2
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@valv/clickhouse - npm Package Compare versions

Comparing version
0.7.1
to
0.8.0
+7
dist/sql.d.ts
import type { FilterNode } from "@valv/core";
export declare function quoteIdent(name: string): string;
export declare function escapeString(s: string): string;
export declare function escapeLikePattern(s: string): string;
export declare function formatValue(v: unknown): string;
export declare function compileFilter(node: FilterNode): string;
//# sourceMappingURL=sql.d.ts.map
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAmB9C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAkDtD"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.quoteIdent = quoteIdent;
exports.escapeString = escapeString;
exports.escapeLikePattern = escapeLikePattern;
exports.formatValue = formatValue;
exports.compileFilter = compileFilter;
function quoteIdent(name) {
return "`" + name.replace(/`/g, "``") + "`";
}
function escapeString(s) {
return s.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
}
function escapeLikePattern(s) {
return s.replace(/\\/g, "\\\\").replace(/%/g, "\\%").replace(/_/g, "\\_");
}
function formatValue(v) {
if (v === null || v === undefined)
return "NULL";
if (typeof v === "boolean")
return v ? "1" : "0";
if (typeof v === "number") {
if (!isFinite(v))
throw new Error(`Non-finite number value not allowed in query: ${v}`);
return String(v);
}
if (v instanceof Date) {
const pad = (n) => String(n).padStart(2, "0");
const y = v.getUTCFullYear();
const mo = pad(v.getUTCMonth() + 1);
const d = pad(v.getUTCDate());
const h = pad(v.getUTCHours());
const mi = pad(v.getUTCMinutes());
const s = pad(v.getUTCSeconds());
return `'${y}-${mo}-${d} ${h}:${mi}:${s}'`;
}
if (typeof v === "string")
return `'${escapeString(v)}'`;
return `'${escapeString(JSON.stringify(v))}'`;
}
function compileFilter(node) {
switch (node.type) {
case "eq":
if (node.value === null || node.value === undefined) {
return `${quoteIdent(node.field)} IS NULL`;
}
return `${quoteIdent(node.field)} = ${formatValue(node.value)}`;
case "in": {
if (node.values.length === 0)
return "1 = 0";
const list = node.values.map(formatValue).join(", ");
return `${quoteIdent(node.field)} IN (${list})`;
}
case "range": {
const parts = [];
if (node.gte !== undefined)
parts.push(`${quoteIdent(node.field)} >= ${formatValue(node.gte)}`);
if (node.lte !== undefined)
parts.push(`${quoteIdent(node.field)} <= ${formatValue(node.lte)}`);
if (node.gt !== undefined)
parts.push(`${quoteIdent(node.field)} > ${formatValue(node.gt)}`);
if (node.lt !== undefined)
parts.push(`${quoteIdent(node.field)} < ${formatValue(node.lt)}`);
return parts.join(" AND ");
}
case "like": {
const escaped = escapeLikePattern(node.value);
let pattern;
if (node.mode === "startsWith")
pattern = `${escaped}%`;
else if (node.mode === "endsWith")
pattern = `%${escaped}`;
else
pattern = `%${escaped}%`;
return `${quoteIdent(node.field)} ILIKE '${escapeString(pattern)}'`;
}
case "null":
return node.isNull
? `${quoteIdent(node.field)} IS NULL`
: `${quoteIdent(node.field)} IS NOT NULL`;
case "and":
if (node.filters.length === 0)
return "1 = 1";
return "(" + node.filters.map(compileFilter).join(" AND ") + ")";
case "or":
if (node.filters.length === 0)
return "1 = 0";
return "(" + node.filters.map(compileFilter).join(" OR ") + ")";
case "not":
return `NOT (${compileFilter(node.filter)})`;
}
}
//# sourceMappingURL=sql.js.map
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"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"}
+6
-0

@@ -7,2 +7,8 @@ import type { ValvAdapter, SchemaMap, Query, CompiledQuery, FnDef, InjectedMutation, MutationResult } from "@valv/core";

schema?: SchemaMap;
/**
* Per-query wall-clock cap in milliseconds (`max_execution_time`). Defaults to
* 30000. Raise it for heavier analytical workloads; keep it low to bound a
* query that would otherwise full-scan a huge table.
*/
statementTimeoutMs?: number;
}

@@ -9,0 +15,0 @@ export declare class ClickHouseAdapter implements ValvAdapter {

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAG7E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAaD,qBAAa,iBAAkB,YAAW,WAAW;IAIjD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,WAAW,CAAyB;gBAGlC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,wBAA6B;IAG1C,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAMtC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,GAAG,aAAa;IAIxD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAO5B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;IAarF;;;;OAIG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAS3E"}
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAG7E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAaD,qBAAa,iBAAkB,YAAW,WAAW;IAIjD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,WAAW,CAAyB;gBAGlC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,wBAA6B;IAG1C,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAMtC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,GAAG,aAAa;IAIxD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAO5B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;IAarF;;;;OAIG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAc3E"}

@@ -7,8 +7,7 @@ "use strict";

const dialect_1 = require("./dialect");
// Per-query safety caps so a structurally-valid query can't run away on the
// server. They bound wall-clock and result size — a tiny `WHERE col > x` that
// would otherwise full-scan a billion-row table is killed at 30s. Conservative
// defaults; raise per deployment if real analytics needs more headroom.
const QUERY_SETTINGS = {
max_execution_time: 30,
const DEFAULT_STATEMENT_TIMEOUT_MS = 30000;
// Result-size caps so a structurally-valid query can't run away on the server —
// they bound how much a single query may return. The wall-clock cap
// (`max_execution_time`) is added per query from `statementTimeoutMs`.
const RESULT_CAPS = {
max_result_rows: 10000,

@@ -59,3 +58,7 @@ max_result_bytes: 100000000,

format: "JSONEachRow",
clickhouse_settings: QUERY_SETTINGS,
// ClickHouse takes max_execution_time in seconds; the option is in ms.
clickhouse_settings: {
...RESULT_CAPS,
max_execution_time: (this.options.statementTimeoutMs ?? DEFAULT_STATEMENT_TIMEOUT_MS) / 1000,
},
...(parameters.length ? { query_params: toQueryParams(parameters) } : {}),

@@ -62,0 +65,0 @@ });

@@ -1,1 +0,1 @@

{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":";;;AASA,qCAAkE;AAClE,mDAA6E;AAC7E,uCAA6C;AAc7C,MAAM,4BAA4B,GAAG,KAAM,CAAA;AAE3C,gFAAgF;AAChF,oEAAoE;AACpE,uEAAuE;AACvE,MAAM,WAAW,GAAG;IAClB,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,SAAW;IAC7B,oBAAoB,EAAE,OAAO;CACrB,CAAA;AAEV,MAAa,iBAAiB;IAG5B,YACU,MAAwB,EACxB,UAAoC,EAAE;QADtC,WAAM,GAAN,MAAM,CAAkB;QACxB,YAAO,GAAP,OAAO,CAA+B;QAJxC,gBAAW,GAAqB,IAAI,CAAA;IAKzC,CAAC;IAEJ,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,WAAW,KAAhB,IAAI,CAAC,WAAW,GACd,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,IAAA,oCAAoB,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAA;QACzF,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,OAAO,CAAC,KAAY,EAAE,OAAkB;QACtC,OAAO,IAAA,WAAI,EAAC,KAAK,EAAE,OAAO,EAAE,2BAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrF,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,qBAAc,EAAE,GAAG,2BAAiB,CAAC,SAAS,EAAE,CAAA;IAC9D,CAAC;IAED,iFAAiF;IACjF,8EAA8E;IAC9E,iFAAiF;IACjF,KAAK,CAAC,MAAM,CAAC,QAA0B,EAAE,OAAkB;QACzD,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,sBAAe,CAAC,yCAAyC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAA;QACpF,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACjD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAA;QACvF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;YACjC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE;YAClD,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAA;QACtB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;QACrF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;IACxB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,aAAwB,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACrC,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,aAAa;YACrB,uEAAuE;YACvE,mBAAmB,EAAE;gBACnB,GAAG,WAAW;gBACd,kBAAkB,EAChB,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,4BAA4B,CAAC,GAAG,IAAI;aAC3E;YACD,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAc,CAAA;IAC3C,CAAC;CACF;AAzDD,8CAyDC;AAED,SAAS,aAAa,CAAC,UAAqB;IAC1C,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;IACzB,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC"}

@@ -1,1 +0,1 @@

{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,KAAK,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,GACzE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,GAAG;IACzC,yEAAyE;IACzE,MAAM,EAAE,YAAY,GAAG,SAAS,CAAA;CACjC,CAAA;AAEH;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,GAAG,cAAc,EACxD,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAWjC"}
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,KAAK,YAAY,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,GACzE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,GAAG;IACzC,yEAAyE;IACzE,MAAM,EAAE,YAAY,GAAG,SAAS,CAAA;CACjC,CAAA;AAEH;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,GAAG,cAAc,EACxD,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAYjC"}

@@ -12,3 +12,3 @@ "use strict";

async function createValv(client, config) {
const { database, schema, ...rest } = config;
const { database, schema, statementTimeoutMs, ...rest } = config;
const valv = new core_1.Valv({

@@ -19,2 +19,3 @@ ...rest,

schema: schema === "introspect" ? undefined : schema,
statementTimeoutMs,
}),

@@ -21,0 +22,0 @@ });

@@ -1,1 +0,1 @@

{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;AAgBA,gCAcC;AA9BD,qCAAiC;AAEjC,uCAA4E;AAS5E;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAC9B,MAAwB,EACxB,MAA8B;IAE9B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IAC5C,MAAM,IAAI,GAAG,IAAI,WAAI,CAAmB;QACtC,GAAG,IAAI;QACP,OAAO,EAAE,IAAI,2BAAiB,CAAC,MAAM,EAAE;YACrC,QAAQ;YACR,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;SACrD,CAAC;KACH,CAAC,CAAA;IACF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;IACvB,OAAO,IAAI,CAAA;AACb,CAAC"}
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;AAgBA,gCAeC;AA/BD,qCAAiC;AAEjC,uCAA4E;AAS5E;;;;GAIG;AACI,KAAK,UAAU,UAAU,CAC9B,MAAwB,EACxB,MAA8B;IAE9B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IAChE,MAAM,IAAI,GAAG,IAAI,WAAI,CAAmB;QACtC,GAAG,IAAI;QACP,OAAO,EAAE,IAAI,2BAAiB,CAAC,MAAM,EAAE;YACrC,QAAQ;YACR,MAAM,EAAE,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YACpD,kBAAkB;SACnB,CAAC;KACH,CAAC,CAAA;IACF,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;IACvB,OAAO,IAAI,CAAA;AACb,CAAC"}
{
"name": "@valv/clickhouse",
"version": "0.7.1",
"version": "0.8.0",
"description": "ClickHouse adapter for valv — row-level security and access control for AI agents",

@@ -43,3 +43,3 @@ "keywords": [

"@clickhouse/client": "^1.0.0",
"@valv/core": "^0.8.1"
"@valv/core": "^0.9.0"
},

@@ -46,0 +46,0 @@ "publishConfig": {

import type { Dialect } from "@valv/core";
export declare const clickhouseDialect: Dialect;
//# sourceMappingURL=emit.d.ts.map
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAUzC,eAAO,MAAM,iBAAiB,EAAE,OAqC/B,CAAA"}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.clickhouseDialect = void 0;
const INTERVAL_UNITS = ["second", "minute", "hour", "day", "week", "month", "quarter", "year"];
// ClickHouse uses backtick identifiers (escaping `\` then `` ` ``) and typed
// named placeholders `{pN:Type}`. The type is the one schema-derived string that
// reaches SQL, so its characters are allowlisted — a malformed hand-defined type
// can't break out of the placeholder.
const SAFE_TYPE = /^[A-Za-z0-9_(), '=]+$/;
exports.clickhouseDialect = {
quoteId(id) {
return "`" + id.replace(/\\/g, "\\\\").replace(/`/g, "``") + "`";
},
placeholder(index, type) {
if (!SAFE_TYPE.test(type)) {
throw new Error(`[valv/clickhouse] unsafe column type "${type}"`);
}
return `{p${index}:${type}}`;
},
functions: {
// Parametric aggregate: quantileTiming(level)(column). `level` is a finite
// number in [0, 1], so inlining it can't carry SQL.
quantileTiming: {
args: [{ kind: "number", range: [0, 1] }, { kind: "column" }],
render: ([level, c]) => `quantileTiming(${level})(${c})`,
},
// Time bucketing for series — fixed grains.
toDate: { args: [{ kind: "column" }], render: ([c]) => `toDate(${c})` },
toStartOfHour: { args: [{ kind: "column" }], render: ([c]) => `toStartOfHour(${c})` },
toStartOfDay: { args: [{ kind: "column" }], render: ([c]) => `toStartOfDay(${c})` },
// Arbitrary-grain bucketing: toStartOfInterval(ts, INTERVAL n unit). The unit
// is membership-checked, the magnitude is a finite number — both safe inlined.
toStartOfInterval: {
args: [{ kind: "column" }, { kind: "number" }, { kind: "enum", values: INTERVAL_UNITS }],
render: ([c, n, unit]) => `toStartOfInterval(${c}, INTERVAL ${n} ${unit.toUpperCase()})`,
},
// Distinct counts.
uniqExact: { args: [{ kind: "column" }], render: ([c]) => `uniqExact(${c})` },
uniq: { args: [{ kind: "column" }], render: ([c]) => `uniq(${c})` },
// Conditional aggregation — the predicate's literals become bound params.
countIf: { args: [{ kind: "predicate" }], render: ([p]) => `countIf(${p})` },
sumIf: {
args: [{ kind: "column" }, { kind: "predicate" }],
render: ([c, p]) => `sumIf(${c}, ${p})`,
},
},
};
//# sourceMappingURL=emit.js.map
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}