@mongrov/analytics 0.8.3 → 0.8.5
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/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +2 -1
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/migrations.d.ts +0 -4
- package/dist/core/migrations.d.ts.map +1 -1
- package/dist/core/migrations.js +54 -22
- package/dist/core/migrations.js.map +1 -1
- package/dist/core/retention.d.ts.map +1 -1
- package/dist/core/retention.js +2 -1
- package/dist/core/retention.js.map +1 -1
- package/dist/core/schemas.d.ts +16 -0
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +33 -2
- package/dist/core/schemas.js.map +1 -1
- package/package.json +1 -1
package/dist/core/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAmB,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAmB,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAKvE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CASjD;AAID,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AA8BD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,EACvC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,mBAAmB,CAAC,CAAC,CAAC,CA8ExB;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,CAgBvD"}
|
package/dist/core/hooks.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { useCallback, useEffect, useMemo, useReducer, useRef, useSyncExternalStore } from 'react';
|
|
10
10
|
import { useAnalyticsEngine } from './context';
|
|
11
|
+
import { quoteQualifier } from './schemas';
|
|
11
12
|
/**
|
|
12
13
|
* Subscribe to the engine's state machine. Re-renders on every transition.
|
|
13
14
|
* `isReady` is true from `ready` onward (engine opened); `isAttached` is true
|
|
@@ -116,7 +117,7 @@ export function useInsight(id) {
|
|
|
116
117
|
const engine = useAnalyticsEngine();
|
|
117
118
|
const catalog = engine.catalog;
|
|
118
119
|
const sql = catalog
|
|
119
|
-
? `SELECT * FROM ${catalog}.insight WHERE insight_id = $id LIMIT 1`
|
|
120
|
+
? `SELECT * FROM ${quoteQualifier(catalog)}.insight WHERE insight_id = $id LIMIT 1`
|
|
120
121
|
: '';
|
|
121
122
|
const params = useMemo(() => ({ id }), [id]);
|
|
122
123
|
const { data, loading } = useTimeseries(catalog ? id : undefined, sql, params);
|
package/dist/core/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAEjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAEjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAW1C;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACpC,OAAO;QACL,KAAK;QACL,OAAO,EAAE,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;QACrE,UAAU,EAAE,KAAK,KAAK,UAAU;QAChC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;KACnD,CAAA;AACH,CAAC;AAuBD,SAAS,iBAAiB,CACxB,KAAyB,EACzB,MAA2B;IAE3B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QACjD,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QAC3D,KAAK,SAAS;YACZ,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;QAC1D,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAC3D,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAuB,EACvB,GAAW,EACX,MAAgC;IAEhC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,KAAK,KAAK,UAAU,CAAA;IAErC,2EAA2E;IAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAE7E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAClC,iBAGuB,EACvB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAwB,CACvE,CAAA;IAED,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACtC,eAAe,CAAC,OAAO,GAAG,MAAM,CAAA;IAEhC,MAAM,QAAQ,GAAG,WAAW,CAC1B,KAAK,EAAE,QAA8B,EAAiB,EAAE;QACtD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAI,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;YAClE,IAAI,QAAQ,CAAC,OAAO;gBAAE,OAAM;YAC5B,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,OAAO;gBAAE,OAAM;YAC5B,QAAQ,CAAC;gBACP,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,GAAG,CAAC,CACd,CAAA;IAED,yEAAyE;IACzE,gEAAgE;IAChE,MAAM,cAAc,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAA;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;YAC3B,OAAM;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,0EAA0E;YAC1E,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QACnC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAA;QACjC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACvB,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;YACvB,IAAI,cAAc,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACxC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAA;YAC/B,CAAC;QACH,CAAC,CAAA;QACD,iFAAiF;QACjF,uDAAuD;IACzD,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE7C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAmB,EAAE;QACpD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,QAAQ;YAAE,OAAM;QAC1C,iEAAiE;QACjE,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,cAAc,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;QACvC,CAAC;QACD,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QACnC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAA;QACjC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE7B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAA;AAClF,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC9B,MAAM,GAAG,GAAG,OAAO;QACjB,CAAC,CAAC,iBAAiB,cAAc,CAAC,OAAO,CAAC,yCAAyC;QACnF,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,CACrC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACxB,GAAG,EACH,MAAM,CACP,CAAA;IACD,OAAO;QACL,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClB,OAAO;KACR,CAAA;AACH,CAAC;AAED,qDAAqD;AAErD,sEAAsE;AACtE,SAAS,cAAc,CAAC,MAAuB;IAC7C,OAAO,oBAAoB,CACzB,WAAW,CACT,CAAC,aAAa,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,EAClD,CAAC,MAAM,CAAC,CACT,EACD,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EACzC,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAC1C,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAA8B;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IACtC,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC"}
|
|
@@ -45,10 +45,6 @@ export interface Migration {
|
|
|
45
45
|
/** Idempotent DDL — called with the current attach's catalog set. */
|
|
46
46
|
up(db: HybridDuckDB, catalogs: MigrationCatalogs): Promise<void>;
|
|
47
47
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Ordered list of migrations. Each entry's `version` must equal its
|
|
50
|
-
* (1-based) position; `CURRENT_VERSION` is derived from the tail.
|
|
51
|
-
*/
|
|
52
48
|
export declare const MIGRATIONS: readonly Migration[];
|
|
53
49
|
/** Version of the latest known migration — target for every attach. */
|
|
54
50
|
export declare const CURRENT_VERSION: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE;
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,MAAM,WAAW,SAAS;IACxB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE;AAkDD,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAwJzC,CAAA;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,MAA0B,CAAA;AAExD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAWD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAyCjC"}
|
package/dist/core/migrations.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* `ensureMigrations` is idempotent and safe to call on every attach.
|
|
21
21
|
*/
|
|
22
22
|
import { AnalyticsError } from './errors';
|
|
23
|
-
import { ensureSchemas, insightIndexDdl, LOCAL_SCHEMAS, qualifyDdl, SCHEMAS } from './schemas';
|
|
23
|
+
import { ensureSchemas, insightIndexDdl, LOCAL_SCHEMAS, qualifyDdl, quoteQualifier, SCHEMAS } from './schemas';
|
|
24
24
|
/**
|
|
25
25
|
* Iceberg namespace remote DDL is issued under — remote tables live at
|
|
26
26
|
* `<secret>.default.<table>` (spec §Attach Protocol). Local DDL stays
|
|
@@ -31,6 +31,40 @@ export const REMOTE_NAMESPACE = 'default';
|
|
|
31
31
|
* Ordered list of migrations. Each entry's `version` must equal its
|
|
32
32
|
* (1-based) position; `CURRENT_VERSION` is derived from the tail.
|
|
33
33
|
*/
|
|
34
|
+
/**
|
|
35
|
+
* Column names for a table, without touching `information_schema`.
|
|
36
|
+
*
|
|
37
|
+
* `information_schema.columns` is a view in DuckDB's `system` catalog, and
|
|
38
|
+
* the react-native-duckdb iOS build cannot resolve it:
|
|
39
|
+
*
|
|
40
|
+
* Binder Error: Referenced table "system" not found!
|
|
41
|
+
*
|
|
42
|
+
* `PRAGMA table_info` answers the same question through the pragma
|
|
43
|
+
* interface, which does not bind a catalog. A missing table throws there, and
|
|
44
|
+
* an empty list is exactly what callers use to mean "table absent", so that
|
|
45
|
+
* case is normalised rather than propagated.
|
|
46
|
+
*/
|
|
47
|
+
async function listColumns(db, catalog, table) {
|
|
48
|
+
const qualified = `${quoteQualifier(catalog)}.${table}`;
|
|
49
|
+
try {
|
|
50
|
+
const rows = await db.execute(`PRAGMA table_info('${qualified}');`);
|
|
51
|
+
return rows
|
|
52
|
+
.map((r) => r.name ?? r.column_name)
|
|
53
|
+
.filter((n) => typeof n === 'string');
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Either the table does not exist, or this build has no table_info.
|
|
57
|
+
// Fall back to information_schema for platforms where it works.
|
|
58
|
+
try {
|
|
59
|
+
const rows = await db.execute(`SELECT column_name FROM information_schema.columns `
|
|
60
|
+
+ `WHERE table_catalog = $catalog AND table_name = $table`, { catalog, table });
|
|
61
|
+
return rows.map((r) => r.column_name);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
34
68
|
export const MIGRATIONS = Object.freeze([
|
|
35
69
|
{
|
|
36
70
|
version: 1,
|
|
@@ -46,7 +80,7 @@ export const MIGRATIONS = Object.freeze([
|
|
|
46
80
|
// namespace explicitly — 2-part `zone_x.<table>` fails with
|
|
47
81
|
// "Schema with name ... not found" on an attached Iceberg catalog.
|
|
48
82
|
if (catalogs.remote) {
|
|
49
|
-
await ensureSchemas(db, `${catalogs.remote}.${REMOTE_NAMESPACE}`, SCHEMAS, { skipLocalOnly: true });
|
|
83
|
+
await ensureSchemas(db, `${quoteQualifier(catalogs.remote)}.${REMOTE_NAMESPACE}`, SCHEMAS, { skipLocalOnly: true });
|
|
50
84
|
}
|
|
51
85
|
},
|
|
52
86
|
},
|
|
@@ -62,7 +96,7 @@ export const MIGRATIONS = Object.freeze([
|
|
|
62
96
|
async up(db, catalogs) {
|
|
63
97
|
await db.execute(qualifyDdl(LOCAL_SCHEMAS.device_battery, 'device_battery', catalogs.local));
|
|
64
98
|
if (catalogs.remote) {
|
|
65
|
-
await db.execute(qualifyDdl(SCHEMAS.device_battery, 'device_battery', `${catalogs.remote}.${REMOTE_NAMESPACE}`));
|
|
99
|
+
await db.execute(qualifyDdl(SCHEMAS.device_battery, 'device_battery', `${quoteQualifier(catalogs.remote)}.${REMOTE_NAMESPACE}`));
|
|
66
100
|
}
|
|
67
101
|
},
|
|
68
102
|
},
|
|
@@ -81,31 +115,30 @@ export const MIGRATIONS = Object.freeze([
|
|
|
81
115
|
// destructively rewrites the attached Iceberg catalog; schema
|
|
82
116
|
// evolution of pre-existing remote tables is a server-side operation.
|
|
83
117
|
async up(db, catalogs) {
|
|
84
|
-
const cols = await db
|
|
85
|
-
|
|
86
|
-
const hasMetric = cols.some(c => c.column_name === 'metric');
|
|
118
|
+
const cols = await listColumns(db, catalogs.local, 'insight');
|
|
119
|
+
const hasMetric = cols.includes('metric');
|
|
87
120
|
if (!hasMetric) {
|
|
88
121
|
// Re-entrancy: a prior partially-failed run may have left the
|
|
89
122
|
// scratch table behind (KV only advances after full success).
|
|
90
|
-
await db.execute(`DROP TABLE IF EXISTS ${catalogs.local}.insight_v2;`);
|
|
91
|
-
const tmpDdl = LOCAL_SCHEMAS.insight.replace('CREATE TABLE insight', `CREATE TABLE ${catalogs.local}.insight_v2`);
|
|
123
|
+
await db.execute(`DROP TABLE IF EXISTS ${quoteQualifier(catalogs.local)}.insight_v2;`);
|
|
124
|
+
const tmpDdl = LOCAL_SCHEMAS.insight.replace('CREATE TABLE insight', `CREATE TABLE ${quoteQualifier(catalogs.local)}.insight_v2`);
|
|
92
125
|
await db.execute(tmpDdl);
|
|
93
126
|
// Old rows had no metric column; the package never wrote rows
|
|
94
127
|
// pre-v2 (rules only emitted events), so 'unknown' only tags
|
|
95
128
|
// app-authored legacy rows.
|
|
96
|
-
await db.execute(`INSERT INTO ${catalogs.local}.insight_v2 `
|
|
129
|
+
await db.execute(`INSERT INTO ${quoteQualifier(catalogs.local)}.insight_v2 `
|
|
97
130
|
+ `(insight_id, ts, brand, family_id, user_id, rule_id, metric, kind, `
|
|
98
131
|
+ `severity, title, body, evidence, acknowledged_at, dismissed_at) `
|
|
99
132
|
+ `SELECT id, ts, brand, family_id, user_id, rule_id, 'unknown', 'threshold', `
|
|
100
133
|
+ `CASE WHEN severity = 'critical' THEN 'urgent' ELSE severity END, `
|
|
101
134
|
+ `title, body, evidence, acknowledged_at, NULL `
|
|
102
|
-
+ `FROM ${catalogs.local}.insight;`);
|
|
103
|
-
await db.execute(`DROP TABLE ${catalogs.local}.insight;`);
|
|
104
|
-
await db.execute(`ALTER TABLE ${catalogs.local}.insight_v2 RENAME TO insight;`);
|
|
135
|
+
+ `FROM ${quoteQualifier(catalogs.local)}.insight;`);
|
|
136
|
+
await db.execute(`DROP TABLE ${quoteQualifier(catalogs.local)}.insight;`);
|
|
137
|
+
await db.execute(`ALTER TABLE ${quoteQualifier(catalogs.local)}.insight_v2 RENAME TO insight;`);
|
|
105
138
|
}
|
|
106
139
|
await db.execute(insightIndexDdl(catalogs.local));
|
|
107
140
|
if (catalogs.remote) {
|
|
108
|
-
await db.execute(qualifyDdl(SCHEMAS.insight, 'insight', `${catalogs.remote}.${REMOTE_NAMESPACE}`));
|
|
141
|
+
await db.execute(qualifyDdl(SCHEMAS.insight, 'insight', `${quoteQualifier(catalogs.remote)}.${REMOTE_NAMESPACE}`));
|
|
109
142
|
}
|
|
110
143
|
},
|
|
111
144
|
},
|
|
@@ -143,16 +176,15 @@ export const MIGRATIONS = Object.freeze([
|
|
|
143
176
|
// client never destructively rewrites the attached Iceberg catalog;
|
|
144
177
|
// remote schema evolution is a server-side operation.
|
|
145
178
|
async up(db, catalogs) {
|
|
146
|
-
const cols = await db
|
|
147
|
-
+ `WHERE table_catalog = $catalog AND table_name = 'device_config'`, { catalog: catalogs.local });
|
|
179
|
+
const cols = await listColumns(db, catalogs.local, 'device_config');
|
|
148
180
|
if (cols.length === 0)
|
|
149
181
|
return; // table absent; baseline will create it
|
|
150
|
-
if (cols.
|
|
182
|
+
if (cols.includes('metric'))
|
|
151
183
|
return;
|
|
152
|
-
await db.execute(`DROP TABLE IF EXISTS ${catalogs.local}.device_config_v2;`);
|
|
153
|
-
const tmpDdl = LOCAL_SCHEMAS.device_config.replace('CREATE TABLE device_config', `CREATE TABLE ${catalogs.local}.device_config_v2`);
|
|
184
|
+
await db.execute(`DROP TABLE IF EXISTS ${quoteQualifier(catalogs.local)}.device_config_v2;`);
|
|
185
|
+
const tmpDdl = LOCAL_SCHEMAS.device_config.replace('CREATE TABLE device_config', `CREATE TABLE ${quoteQualifier(catalogs.local)}.device_config_v2`);
|
|
154
186
|
await db.execute(tmpDdl);
|
|
155
|
-
await db.execute(`INSERT INTO ${catalogs.local}.device_config_v2 `
|
|
187
|
+
await db.execute(`INSERT INTO ${quoteQualifier(catalogs.local)}.device_config_v2 `
|
|
156
188
|
+ `(device_id, brand, family_id, user_id, metric, interval_minutes, `
|
|
157
189
|
+ `start_time, end_time, weeks, valid_from, valid_to) `
|
|
158
190
|
+ `SELECT device_id, brand, family_id, user_id, `
|
|
@@ -162,9 +194,9 @@ export const MIGRATIONS = Object.freeze([
|
|
|
162
194
|
// revision that added one is diagnosable instead of invisible.
|
|
163
195
|
+ `ELSE 'unknown_' || data_type::VARCHAR END, `
|
|
164
196
|
+ `interval_minutes, start_time, end_time, weeks, valid_from, valid_to `
|
|
165
|
-
+ `FROM ${catalogs.local}.device_config;`);
|
|
166
|
-
await db.execute(`DROP TABLE ${catalogs.local}.device_config;`);
|
|
167
|
-
await db.execute(`ALTER TABLE ${catalogs.local}.device_config_v2 RENAME TO device_config;`);
|
|
197
|
+
+ `FROM ${quoteQualifier(catalogs.local)}.device_config;`);
|
|
198
|
+
await db.execute(`DROP TABLE ${quoteQualifier(catalogs.local)}.device_config;`);
|
|
199
|
+
await db.execute(`ALTER TABLE ${quoteQualifier(catalogs.local)}.device_config_v2 RENAME TO device_config;`);
|
|
168
200
|
},
|
|
169
201
|
},
|
|
170
202
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEzC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/core/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/core/retention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/core/retention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAG1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C,MAAM,WAAW,uBAAuB;IACtC,gGAAgG;IAChG,YAAY,EAAE,MAAM,CAAA;IACpB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAMhF;AAgDD,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,KAAK,CAAA;AACxC,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAItC;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;AAE9E,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAA;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,mBAAmB,EAAE,CAAA;IAC5B,2EAA2E;IAC3E,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAqC/B;AAaD,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAO5D"}
|
package/dist/core/retention.js
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
* are skipped.
|
|
31
31
|
*/
|
|
32
32
|
import { AnalyticsError } from './errors';
|
|
33
|
+
import { quoteQualifier } from './schemas';
|
|
33
34
|
import { isSyncable } from './table_metadata';
|
|
34
35
|
/**
|
|
35
36
|
* Resolve effective retention days per spec §Retention precedence — returns
|
|
@@ -142,6 +143,6 @@ export function buildDeleteSql(input) {
|
|
|
142
143
|
const bound = watermarkBound
|
|
143
144
|
? `LEAST(${cutoff}, CAST($pushWatermark AS TIMESTAMP))`
|
|
144
145
|
: cutoff;
|
|
145
|
-
return `DELETE FROM ${catalog}.${table} WHERE ${tsCol} < ${bound};`;
|
|
146
|
+
return `DELETE FROM ${quoteQualifier(catalog)}.${table} WHERE ${tsCol} < ${bound};`;
|
|
146
147
|
}
|
|
147
148
|
//# sourceMappingURL=retention.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/core/retention.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/core/retention.ts"],"names":[],"mappings":"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"}
|
package/dist/core/schemas.d.ts
CHANGED
|
@@ -99,6 +99,22 @@ export declare function generateViewDdl(table: ViewedTable, ctx: {
|
|
|
99
99
|
}): string;
|
|
100
100
|
/** `DROP VIEW IF EXISTS v_{table}` for detach + brand switch. */
|
|
101
101
|
export declare function dropViewDdl(table: ViewedTable): string;
|
|
102
|
+
/**
|
|
103
|
+
* Quote a (possibly dotted) SQL qualifier for use in DDL/DML.
|
|
104
|
+
*
|
|
105
|
+
* Catalog names come from the database filename, so `zivaone-analytics.duckdb`
|
|
106
|
+
* yields the catalog `zivaone-analytics` — and a bare hyphen is a syntax
|
|
107
|
+
* error in an identifier position:
|
|
108
|
+
*
|
|
109
|
+
* CREATE TABLE IF NOT EXISTS zivaone-analytics.hrv (...)
|
|
110
|
+
* ^ Parser Error: syntax error at or near "-"
|
|
111
|
+
*
|
|
112
|
+
* Each dot-separated part is quoted independently, because callers pass both
|
|
113
|
+
* plain catalogs (`memory`) and qualified namespaces (`remote.analytics`).
|
|
114
|
+
* Parts that are already quoted are left alone, and embedded double quotes
|
|
115
|
+
* are doubled per SQL rules.
|
|
116
|
+
*/
|
|
117
|
+
export declare function quoteQualifier(qualifier: string): string;
|
|
102
118
|
/**
|
|
103
119
|
* Rewrite one base DDL to `CREATE TABLE IF NOT EXISTS <catalog>.<table>`.
|
|
104
120
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,qEAAqE;AACrE,eAAO,MAAM,WAAW,uPAiBd,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,SAAS,CAEnD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CA4MtD,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,wJAWhB,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF,MAAM,CA0BR;AAkBD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAI7D,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAW,EACtD,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,qEAAqE;AACrE,eAAO,MAAM,WAAW,uPAiBd,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,SAAS,CAEnD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CA4MtD,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,wJAWhB,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF,MAAM,CA0BR;AAkBD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAI7D,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAW,EACtD,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
package/dist/core/schemas.js
CHANGED
|
@@ -259,7 +259,7 @@ export const SCHEMAS = Object.freeze({
|
|
|
259
259
|
* the `day(ts)` partition instead. Issued by migration step 3.
|
|
260
260
|
*/
|
|
261
261
|
export function insightIndexDdl(catalog) {
|
|
262
|
-
return `CREATE INDEX IF NOT EXISTS idx_insight_lookup ON ${catalog}.insight (user_id, metric, dismissed_at, ts);`;
|
|
262
|
+
return `CREATE INDEX IF NOT EXISTS idx_insight_lookup ON ${quoteQualifier(catalog)}.insight (user_id, metric, dismissed_at, ts);`;
|
|
263
263
|
}
|
|
264
264
|
/**
|
|
265
265
|
* Sensor tables exposed through a `v_{table}` union view (Sprint 5 §3).
|
|
@@ -351,13 +351,44 @@ function sqlLiteral(value) {
|
|
|
351
351
|
export function dropViewDdl(table) {
|
|
352
352
|
return `DROP VIEW IF EXISTS v_${table};`;
|
|
353
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Quote a (possibly dotted) SQL qualifier for use in DDL/DML.
|
|
356
|
+
*
|
|
357
|
+
* Catalog names come from the database filename, so `zivaone-analytics.duckdb`
|
|
358
|
+
* yields the catalog `zivaone-analytics` — and a bare hyphen is a syntax
|
|
359
|
+
* error in an identifier position:
|
|
360
|
+
*
|
|
361
|
+
* CREATE TABLE IF NOT EXISTS zivaone-analytics.hrv (...)
|
|
362
|
+
* ^ Parser Error: syntax error at or near "-"
|
|
363
|
+
*
|
|
364
|
+
* Each dot-separated part is quoted independently, because callers pass both
|
|
365
|
+
* plain catalogs (`memory`) and qualified namespaces (`remote.analytics`).
|
|
366
|
+
* Parts that are already quoted are left alone, and embedded double quotes
|
|
367
|
+
* are doubled per SQL rules.
|
|
368
|
+
*/
|
|
369
|
+
export function quoteQualifier(qualifier) {
|
|
370
|
+
return qualifier
|
|
371
|
+
.split('.')
|
|
372
|
+
.map((part) => {
|
|
373
|
+
if (part.startsWith('"') && part.endsWith('"'))
|
|
374
|
+
return part;
|
|
375
|
+
// Leave plain identifiers bare. Quoting everything would work, but it
|
|
376
|
+
// churns every emitted statement and makes the SQL harder to read for
|
|
377
|
+
// the common `memory` / `main` case; only names that actually need it
|
|
378
|
+
// get quoted.
|
|
379
|
+
if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(part))
|
|
380
|
+
return part;
|
|
381
|
+
return `"${part.split('"').join('""')}"`;
|
|
382
|
+
})
|
|
383
|
+
.join('.');
|
|
384
|
+
}
|
|
354
385
|
/**
|
|
355
386
|
* Rewrite one base DDL to `CREATE TABLE IF NOT EXISTS <catalog>.<table>`.
|
|
356
387
|
*
|
|
357
388
|
* Exported for tests; call sites should prefer `ensureSchemas`.
|
|
358
389
|
*/
|
|
359
390
|
export function qualifyDdl(baseDdl, table, catalog) {
|
|
360
|
-
return baseDdl.replace(`CREATE TABLE ${table}`, `CREATE TABLE IF NOT EXISTS ${catalog}.${table}`);
|
|
391
|
+
return baseDdl.replace(`CREATE TABLE ${table}`, `CREATE TABLE IF NOT EXISTS ${quoteQualifier(catalog)}.${table}`);
|
|
361
392
|
}
|
|
362
393
|
/**
|
|
363
394
|
* Strip the Iceberg-only `PARTITIONED BY (...)` clause from a DDL string.
|
package/dist/core/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGzC,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK;IACL,YAAY;IACZ,MAAM;IACN,aAAa;IACb,UAAU;IACV,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,WAAW;IACX,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,SAAS;IACT,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;CACP,CAAA;AAIV;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B,IAAI,GAAG,CAAY;IAC1E,eAAe;CAChB,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAwC,MAAM,CAAC,MAAM,CAAC;IACxE,GAAG,EAAE;;;;;;;;;;;qCAW8B;IAEnC,UAAU,EAAE;;;;;;;qCAOuB;IAEnC,IAAI,EAAE;;;;;;;qCAO6B;IAEnC,WAAW,EAAE;;;;;;;qCAOsB;IAEnC,QAAQ,EAAE;;;;;;;qCAOyB;IAEnC,eAAe,EAAE;;;;;;;;qCAQkB;IAEnC,aAAa,EAAE;;;;;;;;;;;;;;;2CAe0B;IAEzC,WAAW,EAAE;;;;;;;;;qCASsB;IAEnC,SAAS,EAAE;;;;;;;;;mDASsC;IAEjD,YAAY,EAAE;;;;;;;;4BAQY;IAE1B,cAAc,EAAE;;;;;;;uCAOqB;IAErC,0EAA0E;IAC1E,sEAAsE;IACtE,uEAAuE;IACvE,oDAAoD;IACpD,aAAa,EAAE;;;;;;;;;;;;;GAad;IAED,OAAO,EAAE;;;;;;;;;;;;;;;4BAeiB;IAE1B,cAAc,EAAE;;;;;;;;GAQf;IAED,eAAe,EAAE;;;;;;;;;;;;4BAYS;IAE1B,sEAAsE;IACtE,qEAAqE;IACrE,uEAAuE;IACvE,qEAAqE;IACrE,6CAA6C;IAC7C,EAAE;IACF,2CAA2C;IAC3C,sEAAsE;IACtE,sCAAsC;IACtC,aAAa,EAAE;;;;;;;;;;;;;;;;GAgBd;CACF,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,oDAAoD,OAAO,+CAA+C,CAAA;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"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"}
|