@tinybirdco/sdk 0.0.50 → 0.0.51
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/cli/commands/migrate.test.js +247 -2
- package/dist/cli/commands/migrate.test.js.map +1 -1
- package/dist/codegen/type-mapper.d.ts.map +1 -1
- package/dist/codegen/type-mapper.js +70 -7
- package/dist/codegen/type-mapper.js.map +1 -1
- package/dist/codegen/type-mapper.test.js +9 -0
- package/dist/codegen/type-mapper.test.js.map +1 -1
- package/dist/generator/datasource.d.ts.map +1 -1
- package/dist/generator/datasource.js +19 -0
- package/dist/generator/datasource.js.map +1 -1
- package/dist/generator/datasource.test.js +16 -0
- package/dist/generator/datasource.test.js.map +1 -1
- package/dist/generator/pipe.d.ts.map +1 -1
- package/dist/generator/pipe.js +92 -3
- package/dist/generator/pipe.js.map +1 -1
- package/dist/generator/pipe.test.js +19 -0
- package/dist/generator/pipe.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/migrate/emit-ts.d.ts.map +1 -1
- package/dist/migrate/emit-ts.js +11 -0
- package/dist/migrate/emit-ts.js.map +1 -1
- package/dist/migrate/parse-datasource.d.ts.map +1 -1
- package/dist/migrate/parse-datasource.js +37 -0
- package/dist/migrate/parse-datasource.js.map +1 -1
- package/dist/migrate/parse-pipe.d.ts.map +1 -1
- package/dist/migrate/parse-pipe.js +212 -93
- package/dist/migrate/parse-pipe.js.map +1 -1
- package/dist/migrate/parser-utils.d.ts.map +1 -1
- package/dist/migrate/parser-utils.js +3 -1
- package/dist/migrate/parser-utils.js.map +1 -1
- package/dist/migrate/types.d.ts +7 -0
- package/dist/migrate/types.d.ts.map +1 -1
- package/dist/schema/datasource.d.ts +16 -0
- package/dist/schema/datasource.d.ts.map +1 -1
- package/dist/schema/datasource.js +16 -0
- package/dist/schema/datasource.js.map +1 -1
- package/dist/schema/datasource.test.js +39 -0
- package/dist/schema/datasource.test.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/migrate.test.ts +357 -2
- package/src/codegen/type-mapper.test.ts +18 -0
- package/src/codegen/type-mapper.ts +79 -7
- package/src/generator/datasource.test.ts +22 -0
- package/src/generator/datasource.ts +25 -0
- package/src/generator/pipe.test.ts +21 -0
- package/src/generator/pipe.ts +119 -3
- package/src/index.ts +1 -0
- package/src/migrate/emit-ts.ts +13 -0
- package/src/migrate/parse-datasource.ts +72 -1
- package/src/migrate/parse-pipe.ts +250 -111
- package/src/migrate/parser-utils.ts +5 -1
- package/src/migrate/types.ts +8 -0
- package/src/schema/datasource.test.ts +53 -0
- package/src/schema/datasource.ts +38 -0
|
@@ -44,6 +44,22 @@ export function defineDatasource(name, options) {
|
|
|
44
44
|
if (ingestionConfigCount > 1) {
|
|
45
45
|
throw new Error("Datasource can only define one ingestion option: `kafka`, `s3`, or `gcs`.");
|
|
46
46
|
}
|
|
47
|
+
if (options.indexes) {
|
|
48
|
+
for (const index of options.indexes) {
|
|
49
|
+
if (!index.name || /\s/.test(index.name)) {
|
|
50
|
+
throw new Error(`Invalid datasource index name: "${index.name}". Index names must be non-empty and cannot contain whitespace.`);
|
|
51
|
+
}
|
|
52
|
+
if (!index.expr?.trim()) {
|
|
53
|
+
throw new Error(`Invalid datasource index "${index.name}": expr is required.`);
|
|
54
|
+
}
|
|
55
|
+
if (!index.type?.trim()) {
|
|
56
|
+
throw new Error(`Invalid datasource index "${index.name}": type is required.`);
|
|
57
|
+
}
|
|
58
|
+
if (!Number.isInteger(index.granularity) || index.granularity <= 0) {
|
|
59
|
+
throw new Error(`Invalid datasource index "${index.name}": granularity must be a positive integer.`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
47
63
|
return {
|
|
48
64
|
[DATASOURCE_BRAND]: true,
|
|
49
65
|
_name: name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAyB,MAAM,YAAY,CAAC;AASlF,iEAAiE;AACjE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/schema/datasource.ts"],"names":[],"mappings":"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"}
|
|
@@ -112,6 +112,45 @@ describe("Datasource Schema", () => {
|
|
|
112
112
|
expect(ds.options.gcs?.connection._name).toBe("my_gcs");
|
|
113
113
|
expect(ds.options.gcs?.bucketUri).toBe("gs://my-bucket/events/*.csv");
|
|
114
114
|
});
|
|
115
|
+
it("accepts datasource indexes", () => {
|
|
116
|
+
const ds = defineDatasource("events", {
|
|
117
|
+
schema: { id: t.string() },
|
|
118
|
+
indexes: [
|
|
119
|
+
{
|
|
120
|
+
name: "id_set",
|
|
121
|
+
expr: "id",
|
|
122
|
+
type: "set(100)",
|
|
123
|
+
granularity: 1,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
});
|
|
127
|
+
expect(ds.options.indexes).toEqual([
|
|
128
|
+
{
|
|
129
|
+
name: "id_set",
|
|
130
|
+
expr: "id",
|
|
131
|
+
type: "set(100)",
|
|
132
|
+
granularity: 1,
|
|
133
|
+
},
|
|
134
|
+
]);
|
|
135
|
+
});
|
|
136
|
+
it("validates datasource index fields", () => {
|
|
137
|
+
expect(() => defineDatasource("events", {
|
|
138
|
+
schema: { id: t.string() },
|
|
139
|
+
indexes: [{ name: "invalid name", expr: "id", type: "set(100)", granularity: 1 }],
|
|
140
|
+
})).toThrow("Invalid datasource index name");
|
|
141
|
+
expect(() => defineDatasource("events", {
|
|
142
|
+
schema: { id: t.string() },
|
|
143
|
+
indexes: [{ name: "id_set", expr: "", type: "set(100)", granularity: 1 }],
|
|
144
|
+
})).toThrow('Invalid datasource index "id_set": expr is required.');
|
|
145
|
+
expect(() => defineDatasource("events", {
|
|
146
|
+
schema: { id: t.string() },
|
|
147
|
+
indexes: [{ name: "id_set", expr: "id", type: "", granularity: 1 }],
|
|
148
|
+
})).toThrow('Invalid datasource index "id_set": type is required.');
|
|
149
|
+
expect(() => defineDatasource("events", {
|
|
150
|
+
schema: { id: t.string() },
|
|
151
|
+
indexes: [{ name: "id_set", expr: "id", type: "set(100)", granularity: 0 }],
|
|
152
|
+
})).toThrow('Invalid datasource index "id_set": granularity must be a positive integer.');
|
|
153
|
+
});
|
|
115
154
|
});
|
|
116
155
|
describe("isDatasourceDefinition", () => {
|
|
117
156
|
it("returns true for valid datasource", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.test.js","sourceRoot":"","sources":["../../src/schema/datasource.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,MAAM,GACP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEjG,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE;gBACpC,MAAM,EAAE;oBACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;oBACd,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE;iBACxB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE;gBACpC,WAAW,EAAE,qBAAqB;gBAClC,MAAM,EAAE;oBACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;iBACf;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE;gBACpC,MAAM,EAAE;oBACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;oBACd,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE;iBACxB;gBACD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;oBACvB,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC;oBAC/B,YAAY,EAAE,qBAAqB;iBACpC,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CACV,gBAAgB,CAAC,YAAY,EAAE;gBAC7B,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;aAC3B,CAAC,CACH,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAErC,MAAM,CAAC,GAAG,EAAE,CACV,gBAAgB,CAAC,eAAe,EAAE;gBAChC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;aAC3B,CAAC,CACH,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAErC,MAAM,CAAC,GAAG,EAAE,CACV,gBAAgB,CAAC,EAAE,EAAE;gBACnB,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;aAC3B,CAAC,CACH,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,oBAAoB;YACpB,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,EAAE;gBACvC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;aAC3B,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnC,eAAe;YACf,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,EAAE;gBACxC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;aAC3B,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,EAAE;gBAClD,gBAAgB,EAAE,wBAAwB;aAC3C,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE;gBACzC,MAAM,EAAE,WAAW;gBACnB,GAAG,EAAE,mDAAmD;aACzD,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,EAAE;gBAC5C,6BAA6B,EAAE,yDAAyD;aACzF,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CACV,gBAAgB,CAAC,QAAQ,EAAE;gBACzB,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1B,KAAK,EAAE;oBACL,UAAU,EAAE,SAAS;oBACrB,KAAK,EAAE,QAAQ;iBAChB;gBACD,EAAE,EAAE;oBACF,UAAU,EAAE,MAAM;oBAClB,SAAS,EAAE,6BAA6B;iBACzC;aACF,CAAC,CACH,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC;YAEvF,MAAM,CAAC,GAAG,EAAE,CACV,gBAAgB,CAAC,YAAY,EAAE;gBAC7B,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1B,KAAK,EAAE;oBACL,UAAU,EAAE,SAAS;oBACrB,KAAK,EAAE,QAAQ;iBAChB;gBACD,GAAG,EAAE;oBACH,UAAU,EAAE,OAAO;oBACnB,SAAS,EAAE,6BAA6B;iBACzC;aACF,CAAC,CACH,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,EAAE;gBAC5C,6BAA6B,EAAE,yDAAyD;aACzF,CAAC,CAAC;YAEH,MAAM,EAAE,GAAG,gBAAgB,CAAC,YAAY,EAAE;gBACxC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1B,GAAG,EAAE;oBACH,UAAU,EAAE,OAAO;oBACnB,SAAS,EAAE,6BAA6B;oBACxC,QAAQ,EAAE,OAAO;iBAClB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,EAAE,GAAG,gBAAgB,CAAC,QAAQ,EAAE;gBACpC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YAExC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAElC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;gBAC1D,QAAQ,EAAE,eAAe;aAC1B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAG;gBACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;gBACd,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE;gBACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;aACpB,CAAC;YAEF,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAErC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;YAEjC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAE/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;YAE7D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"datasource.test.js","sourceRoot":"","sources":["../../src/schema/datasource.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -107,7 +107,7 @@ export const eventsEndpoint = definePipe("events_endpoint", {
|
|
|
107
107
|
SELECT event_id, user_id, payload
|
|
108
108
|
FROM events
|
|
109
109
|
WHERE user_id = {{UInt64(user_id)}}
|
|
110
|
-
AND env = {{String(env
|
|
110
|
+
AND env = {{ String(env) }}
|
|
111
111
|
\`,
|
|
112
112
|
}),
|
|
113
113
|
node({
|
|
@@ -168,7 +168,7 @@ GROUP BY user_id
|
|
|
168
168
|
sql: \`
|
|
169
169
|
SELECT user_id, total
|
|
170
170
|
FROM agg
|
|
171
|
-
WHERE total > {{UInt32(min_total
|
|
171
|
+
WHERE total > {{ UInt32(min_total) }}
|
|
172
172
|
\`,
|
|
173
173
|
}),
|
|
174
174
|
],
|
|
@@ -668,6 +668,53 @@ IMPORT_FROM_TIMESTAMP 2024-01-01T00:00:00Z
|
|
|
668
668
|
expect(output).toContain('fromTimestamp: "2024-01-01T00:00:00Z"');
|
|
669
669
|
});
|
|
670
670
|
|
|
671
|
+
it("migrates single-quoted gcs import directives", async () => {
|
|
672
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
673
|
+
tempDirs.push(tempDir);
|
|
674
|
+
|
|
675
|
+
writeFile(
|
|
676
|
+
tempDir,
|
|
677
|
+
"gcp_billing_reports.connection",
|
|
678
|
+
`TYPE gcs
|
|
679
|
+
GCS_SERVICE_ACCOUNT_CREDENTIALS_JSON {{tb_secret("GCP_SERVICE_ACCOUNT_CREDENTIALS_JSON")}}
|
|
680
|
+
`
|
|
681
|
+
);
|
|
682
|
+
|
|
683
|
+
writeFile(
|
|
684
|
+
tempDir,
|
|
685
|
+
"gcp_production_billing_account_landing.datasource",
|
|
686
|
+
`SCHEMA >
|
|
687
|
+
usage_start_time DateTime64(3)
|
|
688
|
+
|
|
689
|
+
ENGINE "MergeTree"
|
|
690
|
+
ENGINE_SORTING_KEY "usage_start_time"
|
|
691
|
+
IMPORT_CONNECTION_NAME 'gcp_billing_reports'
|
|
692
|
+
IMPORT_BUCKET_URI 'gs://tinybird-oa-sot-fwd/gcp_production_billing_reports/billing_*.csv.gz'
|
|
693
|
+
IMPORT_SCHEDULE '@on-demand'
|
|
694
|
+
`
|
|
695
|
+
);
|
|
696
|
+
|
|
697
|
+
const result = await runMigrate({
|
|
698
|
+
cwd: tempDir,
|
|
699
|
+
patterns: ["."],
|
|
700
|
+
strict: true,
|
|
701
|
+
});
|
|
702
|
+
|
|
703
|
+
expect(result.success).toBe(true);
|
|
704
|
+
expect(result.errors).toHaveLength(0);
|
|
705
|
+
|
|
706
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
707
|
+
expect(output).toContain(
|
|
708
|
+
'export const gcpBillingReports = defineGCSConnection("gcp_billing_reports", {'
|
|
709
|
+
);
|
|
710
|
+
expect(output).toContain("gcs: {");
|
|
711
|
+
expect(output).toContain("connection: gcpBillingReports");
|
|
712
|
+
expect(output).toContain(
|
|
713
|
+
'bucketUri: "gs://tinybird-oa-sot-fwd/gcp_production_billing_reports/billing_*.csv.gz"'
|
|
714
|
+
);
|
|
715
|
+
expect(output).toContain('schedule: "@on-demand"');
|
|
716
|
+
});
|
|
717
|
+
|
|
671
718
|
it("reports an error when import directives use a non-bucket connection type", async () => {
|
|
672
719
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
673
720
|
tempDirs.push(tempDir);
|
|
@@ -750,6 +797,44 @@ KAFKA_STORE_RAW_VALUE True
|
|
|
750
797
|
expect(output).toContain("storeRawValue: true");
|
|
751
798
|
});
|
|
752
799
|
|
|
800
|
+
it("migrates INDEXES datasource block", async () => {
|
|
801
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
802
|
+
tempDirs.push(tempDir);
|
|
803
|
+
|
|
804
|
+
writeFile(
|
|
805
|
+
tempDir,
|
|
806
|
+
"events.datasource",
|
|
807
|
+
`SCHEMA >
|
|
808
|
+
id String,
|
|
809
|
+
pipe_name String
|
|
810
|
+
|
|
811
|
+
ENGINE "MergeTree"
|
|
812
|
+
ENGINE_SORTING_KEY "id"
|
|
813
|
+
INDEXES >
|
|
814
|
+
pipe_name_set pipe_name TYPE set(100) GRANULARITY 1
|
|
815
|
+
id_bf lower(id) TYPE bloom_filter(0.001) GRANULARITY 4
|
|
816
|
+
`
|
|
817
|
+
);
|
|
818
|
+
|
|
819
|
+
const result = await runMigrate({
|
|
820
|
+
cwd: tempDir,
|
|
821
|
+
patterns: ["."],
|
|
822
|
+
strict: true,
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
expect(result.success).toBe(true);
|
|
826
|
+
expect(result.errors).toHaveLength(0);
|
|
827
|
+
|
|
828
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
829
|
+
expect(output).toContain("indexes: [");
|
|
830
|
+
expect(output).toContain(
|
|
831
|
+
'{ name: "pipe_name_set", expr: "pipe_name", type: "set(100)", granularity: 1 }'
|
|
832
|
+
);
|
|
833
|
+
expect(output).toContain(
|
|
834
|
+
'{ name: "id_bf", expr: "lower(id)", type: "bloom_filter(0.001)", granularity: 4 }'
|
|
835
|
+
);
|
|
836
|
+
});
|
|
837
|
+
|
|
753
838
|
it("migrates kafka schema registry and engine is deleted directives", async () => {
|
|
754
839
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
755
840
|
tempDirs.push(tempDir);
|
|
@@ -900,6 +985,201 @@ TYPE ENDPOINT
|
|
|
900
985
|
expect(output).toContain("endpoint: true,");
|
|
901
986
|
});
|
|
902
987
|
|
|
988
|
+
it("supports Int/Integer aliases and column placeholder params", async () => {
|
|
989
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
990
|
+
tempDirs.push(tempDir);
|
|
991
|
+
|
|
992
|
+
writeFile(
|
|
993
|
+
tempDir,
|
|
994
|
+
"placeholder_aliases.pipe",
|
|
995
|
+
`NODE endpoint
|
|
996
|
+
SQL >
|
|
997
|
+
SELECT event_id AS event_id
|
|
998
|
+
FROM events
|
|
999
|
+
WHERE score >= {{int(min_score, 10)}}
|
|
1000
|
+
ORDER BY {{column(sort_col)}} DESC
|
|
1001
|
+
LIMIT {{ Integer(limit, 50) }}
|
|
1002
|
+
TYPE endpoint
|
|
1003
|
+
`
|
|
1004
|
+
);
|
|
1005
|
+
|
|
1006
|
+
const result = await runMigrate({
|
|
1007
|
+
cwd: tempDir,
|
|
1008
|
+
patterns: ["."],
|
|
1009
|
+
strict: true,
|
|
1010
|
+
});
|
|
1011
|
+
|
|
1012
|
+
expect(result.success).toBe(true);
|
|
1013
|
+
expect(result.errors).toHaveLength(0);
|
|
1014
|
+
|
|
1015
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1016
|
+
expect(output).toContain('export const placeholderAliases = definePipe("placeholder_aliases", {');
|
|
1017
|
+
expect(output).toContain("params: {");
|
|
1018
|
+
expect(output).toContain("limit: p.int32().optional(50),");
|
|
1019
|
+
expect(output).toContain("min_score: p.int32().optional(10),");
|
|
1020
|
+
expect(output).toContain("sort_col: p.column(),");
|
|
1021
|
+
});
|
|
1022
|
+
|
|
1023
|
+
it("supports error() placeholder helper without treating it as a param", async () => {
|
|
1024
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1025
|
+
tempDirs.push(tempDir);
|
|
1026
|
+
|
|
1027
|
+
writeFile(
|
|
1028
|
+
tempDir,
|
|
1029
|
+
"placeholder_error.pipe",
|
|
1030
|
+
`NODE endpoint
|
|
1031
|
+
SQL >
|
|
1032
|
+
%
|
|
1033
|
+
{% if not defined(start_date) and not defined(end_date) %}
|
|
1034
|
+
{{ error('start_date and end_date are required parameters') }}
|
|
1035
|
+
{% end %}
|
|
1036
|
+
SELECT 1 AS id
|
|
1037
|
+
WHERE now() >= {{DateTime(start_date, '2025-01-01 00:00:00')}}
|
|
1038
|
+
TYPE endpoint
|
|
1039
|
+
`
|
|
1040
|
+
);
|
|
1041
|
+
|
|
1042
|
+
const result = await runMigrate({
|
|
1043
|
+
cwd: tempDir,
|
|
1044
|
+
patterns: ["."],
|
|
1045
|
+
strict: true,
|
|
1046
|
+
});
|
|
1047
|
+
|
|
1048
|
+
expect(result.success).toBe(true);
|
|
1049
|
+
expect(result.errors).toHaveLength(0);
|
|
1050
|
+
|
|
1051
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1052
|
+
expect(output).toContain('export const placeholderError = definePipe("placeholder_error", {');
|
|
1053
|
+
expect(output).toContain("params: {");
|
|
1054
|
+
expect(output).toContain('start_date: p.dateTime().optional("2025-01-01 00:00:00"),');
|
|
1055
|
+
expect(output).not.toContain("error:");
|
|
1056
|
+
});
|
|
1057
|
+
|
|
1058
|
+
it("uses the last explicit default and strips inline defaults from SQL", async () => {
|
|
1059
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1060
|
+
tempDirs.push(tempDir);
|
|
1061
|
+
|
|
1062
|
+
writeFile(
|
|
1063
|
+
tempDir,
|
|
1064
|
+
"last_default.pipe",
|
|
1065
|
+
`NODE endpoint
|
|
1066
|
+
SQL >
|
|
1067
|
+
SELECT 1
|
|
1068
|
+
WHERE d >= {{ String(start_date, '2025-03-01') }}
|
|
1069
|
+
AND d <= {{ String(start_date, '2025-04-01') }}
|
|
1070
|
+
TYPE endpoint
|
|
1071
|
+
`
|
|
1072
|
+
);
|
|
1073
|
+
|
|
1074
|
+
const result = await runMigrate({
|
|
1075
|
+
cwd: tempDir,
|
|
1076
|
+
patterns: ["."],
|
|
1077
|
+
strict: true,
|
|
1078
|
+
});
|
|
1079
|
+
|
|
1080
|
+
expect(result.success).toBe(true);
|
|
1081
|
+
expect(result.errors).toHaveLength(0);
|
|
1082
|
+
|
|
1083
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1084
|
+
expect(output).toContain('start_date: p.string().optional("2025-04-01"),');
|
|
1085
|
+
expect(output).toContain("{{ String(start_date) }}");
|
|
1086
|
+
expect(output).not.toContain("{{ String(start_date, '2025-03-01') }}");
|
|
1087
|
+
expect(output).not.toContain("{{ String(start_date, '2025-04-01') }}");
|
|
1088
|
+
});
|
|
1089
|
+
|
|
1090
|
+
it("keeps the previous truthy default when a later duplicate uses a falsy default", async () => {
|
|
1091
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1092
|
+
tempDirs.push(tempDir);
|
|
1093
|
+
|
|
1094
|
+
writeFile(
|
|
1095
|
+
tempDir,
|
|
1096
|
+
"truthy_default_precedence.pipe",
|
|
1097
|
+
`NODE endpoint
|
|
1098
|
+
SQL >
|
|
1099
|
+
SELECT 1
|
|
1100
|
+
WHERE d >= {{ String(start_date, '2025-03-01') }}
|
|
1101
|
+
AND d <= {{ String(start_date, '') }}
|
|
1102
|
+
TYPE endpoint
|
|
1103
|
+
`
|
|
1104
|
+
);
|
|
1105
|
+
|
|
1106
|
+
const result = await runMigrate({
|
|
1107
|
+
cwd: tempDir,
|
|
1108
|
+
patterns: ["."],
|
|
1109
|
+
strict: true,
|
|
1110
|
+
});
|
|
1111
|
+
|
|
1112
|
+
expect(result.success).toBe(true);
|
|
1113
|
+
expect(result.errors).toHaveLength(0);
|
|
1114
|
+
|
|
1115
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1116
|
+
expect(output).toContain('start_date: p.string().optional("2025-03-01"),');
|
|
1117
|
+
expect(output).toContain("{{ String(start_date) }}");
|
|
1118
|
+
});
|
|
1119
|
+
|
|
1120
|
+
it("extracts params from placeholder expressions with multiple function calls", async () => {
|
|
1121
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1122
|
+
tempDirs.push(tempDir);
|
|
1123
|
+
|
|
1124
|
+
writeFile(
|
|
1125
|
+
tempDir,
|
|
1126
|
+
"expression_params.pipe",
|
|
1127
|
+
`NODE endpoint
|
|
1128
|
+
SQL >
|
|
1129
|
+
SELECT 1
|
|
1130
|
+
LIMIT {{ Int32(limit, 20) }}
|
|
1131
|
+
OFFSET {{ Int32(page, 0) * Int32(limit, 20) }}
|
|
1132
|
+
TYPE endpoint
|
|
1133
|
+
`
|
|
1134
|
+
);
|
|
1135
|
+
|
|
1136
|
+
const result = await runMigrate({
|
|
1137
|
+
cwd: tempDir,
|
|
1138
|
+
patterns: ["."],
|
|
1139
|
+
strict: true,
|
|
1140
|
+
});
|
|
1141
|
+
|
|
1142
|
+
expect(result.success).toBe(true);
|
|
1143
|
+
expect(result.errors).toHaveLength(0);
|
|
1144
|
+
|
|
1145
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1146
|
+
expect(output).toContain("limit: p.int32().optional(20),");
|
|
1147
|
+
expect(output).toContain("page: p.int32().optional(0),");
|
|
1148
|
+
expect(output).toContain("{{ Int32(limit) }}");
|
|
1149
|
+
expect(output).toContain("{{ Int32(page) * Int32(limit) }}");
|
|
1150
|
+
});
|
|
1151
|
+
|
|
1152
|
+
it("uses the last explicit type when a param appears with mixed placeholder types", async () => {
|
|
1153
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1154
|
+
tempDirs.push(tempDir);
|
|
1155
|
+
|
|
1156
|
+
writeFile(
|
|
1157
|
+
tempDir,
|
|
1158
|
+
"last_type.pipe",
|
|
1159
|
+
`NODE endpoint
|
|
1160
|
+
SQL >
|
|
1161
|
+
SELECT 1
|
|
1162
|
+
WHERE d >= {{ Date(start_date) }}
|
|
1163
|
+
AND d <= {{ String(start_date, '2025-04-01') }}
|
|
1164
|
+
TYPE endpoint
|
|
1165
|
+
`
|
|
1166
|
+
);
|
|
1167
|
+
|
|
1168
|
+
const result = await runMigrate({
|
|
1169
|
+
cwd: tempDir,
|
|
1170
|
+
patterns: ["."],
|
|
1171
|
+
strict: true,
|
|
1172
|
+
});
|
|
1173
|
+
|
|
1174
|
+
expect(result.success).toBe(true);
|
|
1175
|
+
expect(result.errors).toHaveLength(0);
|
|
1176
|
+
|
|
1177
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1178
|
+
expect(output).toContain('start_date: p.string().optional("2025-04-01"),');
|
|
1179
|
+
expect(output).toContain("{{ Date(start_date) }}");
|
|
1180
|
+
expect(output).toContain("{{ String(start_date) }}");
|
|
1181
|
+
});
|
|
1182
|
+
|
|
903
1183
|
it("parses multiline datasource blocks with flexible indentation", async () => {
|
|
904
1184
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
905
1185
|
tempDirs.push(tempDir);
|
|
@@ -1198,6 +1478,38 @@ TYPE endpoint
|
|
|
1198
1478
|
);
|
|
1199
1479
|
});
|
|
1200
1480
|
|
|
1481
|
+
it("ignores function-like text inside quoted descriptions when parsing placeholders", async () => {
|
|
1482
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1483
|
+
tempDirs.push(tempDir);
|
|
1484
|
+
|
|
1485
|
+
writeFile(
|
|
1486
|
+
tempDir,
|
|
1487
|
+
"description_parentheses.pipe",
|
|
1488
|
+
`NODE endpoint
|
|
1489
|
+
SQL >
|
|
1490
|
+
%
|
|
1491
|
+
SELECT 1 AS id
|
|
1492
|
+
WHERE ts >= now() - interval {{Int32(days, 1, description="Number of days to analyze (defaults to 1 day)")}} day
|
|
1493
|
+
TYPE endpoint
|
|
1494
|
+
`
|
|
1495
|
+
);
|
|
1496
|
+
|
|
1497
|
+
const result = await runMigrate({
|
|
1498
|
+
cwd: tempDir,
|
|
1499
|
+
patterns: ["."],
|
|
1500
|
+
strict: true,
|
|
1501
|
+
});
|
|
1502
|
+
|
|
1503
|
+
expect(result.success).toBe(true);
|
|
1504
|
+
expect(result.errors).toHaveLength(0);
|
|
1505
|
+
|
|
1506
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1507
|
+
expect(output).toContain(
|
|
1508
|
+
'days: p.int32().optional(1).describe("Number of days to analyze (defaults to 1 day)"),'
|
|
1509
|
+
);
|
|
1510
|
+
expect(output).toContain("{{ Int32(days) }}");
|
|
1511
|
+
});
|
|
1512
|
+
|
|
1201
1513
|
it("migrates datasource with mixed explicit and default json paths", async () => {
|
|
1202
1514
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1203
1515
|
tempDirs.push(tempDir);
|
|
@@ -1449,6 +1761,49 @@ EXPORT_COMPRESSION gzip
|
|
|
1449
1761
|
expect(output).toContain('compression: "gzip"');
|
|
1450
1762
|
});
|
|
1451
1763
|
|
|
1764
|
+
it("migrates legacy EXPORT_WRITE_STRATEGY sink directives", async () => {
|
|
1765
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1766
|
+
tempDirs.push(tempDir);
|
|
1767
|
+
|
|
1768
|
+
writeFile(
|
|
1769
|
+
tempDir,
|
|
1770
|
+
"exports_s3.connection",
|
|
1771
|
+
`TYPE s3
|
|
1772
|
+
S3_REGION "us-east-1"
|
|
1773
|
+
S3_ARN "arn:aws:iam::123456789012:role/tinybird-s3-access"
|
|
1774
|
+
`
|
|
1775
|
+
);
|
|
1776
|
+
|
|
1777
|
+
writeFile(
|
|
1778
|
+
tempDir,
|
|
1779
|
+
"events_s3_sink.pipe",
|
|
1780
|
+
`NODE export
|
|
1781
|
+
SQL >
|
|
1782
|
+
SELECT * FROM events
|
|
1783
|
+
TYPE sink
|
|
1784
|
+
EXPORT_CONNECTION_NAME exports_s3
|
|
1785
|
+
EXPORT_BUCKET_URI s3://exports/events/
|
|
1786
|
+
EXPORT_FILE_TEMPLATE events_{date}
|
|
1787
|
+
EXPORT_SCHEDULE @once
|
|
1788
|
+
EXPORT_FORMAT ndjson
|
|
1789
|
+
EXPORT_WRITE_STRATEGY truncate
|
|
1790
|
+
`
|
|
1791
|
+
);
|
|
1792
|
+
|
|
1793
|
+
const result = await runMigrate({
|
|
1794
|
+
cwd: tempDir,
|
|
1795
|
+
patterns: ["."],
|
|
1796
|
+
strict: true,
|
|
1797
|
+
});
|
|
1798
|
+
|
|
1799
|
+
expect(result.success).toBe(true);
|
|
1800
|
+
expect(result.errors).toHaveLength(0);
|
|
1801
|
+
|
|
1802
|
+
const output = fs.readFileSync(result.outputPath, "utf-8");
|
|
1803
|
+
expect(output).toContain('export const eventsS3Sink = defineSinkPipe("events_s3_sink", {');
|
|
1804
|
+
expect(output).toContain('strategy: "replace"');
|
|
1805
|
+
});
|
|
1806
|
+
|
|
1452
1807
|
it("reports an error when sink pipe references a missing connection", async () => {
|
|
1453
1808
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tinybird-migrate-"));
|
|
1454
1809
|
tempDirs.push(tempDir);
|
|
@@ -132,6 +132,18 @@ describe("clickhouseTypeToValidator", () => {
|
|
|
132
132
|
"t.map(t.string(), t.int32())"
|
|
133
133
|
);
|
|
134
134
|
});
|
|
135
|
+
|
|
136
|
+
it("handles Tuple(T1, T2, ...)", () => {
|
|
137
|
+
expect(clickhouseTypeToValidator("Tuple(String, Float64, String)")).toBe(
|
|
138
|
+
"t.tuple(t.string(), t.float64(), t.string())"
|
|
139
|
+
);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("handles Array(Tuple(...))", () => {
|
|
143
|
+
expect(clickhouseTypeToValidator("Array(Tuple(String, Float64, String))")).toBe(
|
|
144
|
+
"t.array(t.tuple(t.string(), t.float64(), t.string()))"
|
|
145
|
+
);
|
|
146
|
+
});
|
|
135
147
|
});
|
|
136
148
|
|
|
137
149
|
describe("enum types", () => {
|
|
@@ -160,6 +172,12 @@ describe("clickhouseTypeToValidator", () => {
|
|
|
160
172
|
't.aggregateFunction("uniq", t.string())'
|
|
161
173
|
);
|
|
162
174
|
});
|
|
175
|
+
|
|
176
|
+
it("handles AggregateFunction(count) without explicit state type", () => {
|
|
177
|
+
expect(clickhouseTypeToValidator("AggregateFunction(count)")).toBe(
|
|
178
|
+
't.aggregateFunction("count", t.uint64())'
|
|
179
|
+
);
|
|
180
|
+
});
|
|
163
181
|
});
|
|
164
182
|
|
|
165
183
|
describe("unknown types", () => {
|
|
@@ -16,6 +16,61 @@ function parseEnumValues(enumContent: string): string[] {
|
|
|
16
16
|
return values;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
function splitTopLevelComma(input: string): string[] {
|
|
20
|
+
const parts: string[] = [];
|
|
21
|
+
let current = "";
|
|
22
|
+
let depth = 0;
|
|
23
|
+
let inSingleQuote = false;
|
|
24
|
+
let inDoubleQuote = false;
|
|
25
|
+
|
|
26
|
+
for (let i = 0; i < input.length; i += 1) {
|
|
27
|
+
const char = input[i];
|
|
28
|
+
const prev = i > 0 ? input[i - 1] : "";
|
|
29
|
+
|
|
30
|
+
if (char === "'" && !inDoubleQuote && prev !== "\\") {
|
|
31
|
+
inSingleQuote = !inSingleQuote;
|
|
32
|
+
current += char;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (char === '"' && !inSingleQuote && prev !== "\\") {
|
|
37
|
+
inDoubleQuote = !inDoubleQuote;
|
|
38
|
+
current += char;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (!inSingleQuote && !inDoubleQuote) {
|
|
43
|
+
if (char === "(") {
|
|
44
|
+
depth += 1;
|
|
45
|
+
current += char;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (char === ")") {
|
|
49
|
+
depth -= 1;
|
|
50
|
+
current += char;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (char === "," && depth === 0) {
|
|
54
|
+
const trimmed = current.trim();
|
|
55
|
+
if (trimmed.length > 0) {
|
|
56
|
+
parts.push(trimmed);
|
|
57
|
+
}
|
|
58
|
+
current = "";
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
current += char;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const trimmed = current.trim();
|
|
67
|
+
if (trimmed.length > 0) {
|
|
68
|
+
parts.push(trimmed);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return parts;
|
|
72
|
+
}
|
|
73
|
+
|
|
19
74
|
/**
|
|
20
75
|
* Map a ClickHouse type to a t.* validator call
|
|
21
76
|
*
|
|
@@ -138,19 +193,26 @@ export function clickhouseTypeToValidator(chType: string): string {
|
|
|
138
193
|
return `t.array(${innerType})`;
|
|
139
194
|
}
|
|
140
195
|
|
|
141
|
-
// Tuple(T1, T2, ...)
|
|
196
|
+
// Tuple(T1, T2, ...)
|
|
142
197
|
const tupleMatch = chType.match(/^Tuple\((.+)\)$/);
|
|
143
198
|
if (tupleMatch) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
199
|
+
const tupleArgs = splitTopLevelComma(tupleMatch[1]);
|
|
200
|
+
if (tupleArgs.length === 0) {
|
|
201
|
+
return `t.string() /* TODO: Unknown type: ${chType} */`;
|
|
202
|
+
}
|
|
203
|
+
const tupleTypes = tupleArgs.map((arg) => clickhouseTypeToValidator(arg));
|
|
204
|
+
return `t.tuple(${tupleTypes.join(", ")})`;
|
|
147
205
|
}
|
|
148
206
|
|
|
149
207
|
// Map(K, V)
|
|
150
|
-
const mapMatch = chType.match(/^Map\((
|
|
208
|
+
const mapMatch = chType.match(/^Map\((.+)\)$/);
|
|
151
209
|
if (mapMatch) {
|
|
152
|
-
const
|
|
153
|
-
|
|
210
|
+
const mapArgs = splitTopLevelComma(mapMatch[1]);
|
|
211
|
+
if (mapArgs.length !== 2) {
|
|
212
|
+
return `t.string() /* TODO: Unknown type: ${chType} */`;
|
|
213
|
+
}
|
|
214
|
+
const keyType = clickhouseTypeToValidator(mapArgs[0]);
|
|
215
|
+
const valueType = clickhouseTypeToValidator(mapArgs[1]);
|
|
154
216
|
return `t.map(${keyType}, ${valueType})`;
|
|
155
217
|
}
|
|
156
218
|
|
|
@@ -190,6 +252,16 @@ export function clickhouseTypeToValidator(chType: string): string {
|
|
|
190
252
|
return `t.aggregateFunction("${func}", ${innerType})`;
|
|
191
253
|
}
|
|
192
254
|
|
|
255
|
+
// AggregateFunction(count)
|
|
256
|
+
const aggNoArgMatch = chType.match(/^AggregateFunction\((\w+)\)$/);
|
|
257
|
+
if (aggNoArgMatch) {
|
|
258
|
+
const func = aggNoArgMatch[1];
|
|
259
|
+
if (func === "count") {
|
|
260
|
+
return 't.aggregateFunction("count", t.uint64())';
|
|
261
|
+
}
|
|
262
|
+
return `t.string() /* TODO: Unknown type: ${chType} */`;
|
|
263
|
+
}
|
|
264
|
+
|
|
193
265
|
// Nested - treat as JSON
|
|
194
266
|
if (chType.startsWith("Nested(")) {
|
|
195
267
|
return `t.json() /* ${chType} */`;
|