@tinybirdco/sdk 0.0.1

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.
Files changed (258) hide show
  1. package/README.md +518 -0
  2. package/bin/tinybird.js +7 -0
  3. package/dist/api/branches.d.ts +98 -0
  4. package/dist/api/branches.d.ts.map +1 -0
  5. package/dist/api/branches.js +203 -0
  6. package/dist/api/branches.js.map +1 -0
  7. package/dist/api/branches.test.d.ts +2 -0
  8. package/dist/api/branches.test.d.ts.map +1 -0
  9. package/dist/api/branches.test.js +286 -0
  10. package/dist/api/branches.test.js.map +1 -0
  11. package/dist/api/build.d.ts +130 -0
  12. package/dist/api/build.d.ts.map +1 -0
  13. package/dist/api/build.js +143 -0
  14. package/dist/api/build.js.map +1 -0
  15. package/dist/api/build.test.d.ts +2 -0
  16. package/dist/api/build.test.d.ts.map +1 -0
  17. package/dist/api/build.test.js +138 -0
  18. package/dist/api/build.test.js.map +1 -0
  19. package/dist/api/deploy.d.ts +39 -0
  20. package/dist/api/deploy.d.ts.map +1 -0
  21. package/dist/api/deploy.js +135 -0
  22. package/dist/api/deploy.js.map +1 -0
  23. package/dist/api/deploy.test.d.ts +2 -0
  24. package/dist/api/deploy.test.d.ts.map +1 -0
  25. package/dist/api/deploy.test.js +118 -0
  26. package/dist/api/deploy.test.js.map +1 -0
  27. package/dist/api/workspaces.d.ts +46 -0
  28. package/dist/api/workspaces.d.ts.map +1 -0
  29. package/dist/api/workspaces.js +39 -0
  30. package/dist/api/workspaces.js.map +1 -0
  31. package/dist/api/workspaces.test.d.ts +2 -0
  32. package/dist/api/workspaces.test.d.ts.map +1 -0
  33. package/dist/api/workspaces.test.js +65 -0
  34. package/dist/api/workspaces.test.js.map +1 -0
  35. package/dist/cli/auth.d.ts +86 -0
  36. package/dist/cli/auth.d.ts.map +1 -0
  37. package/dist/cli/auth.js +284 -0
  38. package/dist/cli/auth.js.map +1 -0
  39. package/dist/cli/branch-store.d.ts +53 -0
  40. package/dist/cli/branch-store.d.ts.map +1 -0
  41. package/dist/cli/branch-store.js +91 -0
  42. package/dist/cli/branch-store.js.map +1 -0
  43. package/dist/cli/branch-store.test.d.ts +2 -0
  44. package/dist/cli/branch-store.test.d.ts.map +1 -0
  45. package/dist/cli/branch-store.test.js +115 -0
  46. package/dist/cli/branch-store.test.js.map +1 -0
  47. package/dist/cli/commands/branch.d.ts +82 -0
  48. package/dist/cli/commands/branch.d.ts.map +1 -0
  49. package/dist/cli/commands/branch.js +215 -0
  50. package/dist/cli/commands/branch.js.map +1 -0
  51. package/dist/cli/commands/build.d.ts +43 -0
  52. package/dist/cli/commands/build.d.ts.map +1 -0
  53. package/dist/cli/commands/build.js +138 -0
  54. package/dist/cli/commands/build.js.map +1 -0
  55. package/dist/cli/commands/dev.d.ts +78 -0
  56. package/dist/cli/commands/dev.d.ts.map +1 -0
  57. package/dist/cli/commands/dev.js +226 -0
  58. package/dist/cli/commands/dev.js.map +1 -0
  59. package/dist/cli/commands/init.d.ts +45 -0
  60. package/dist/cli/commands/init.d.ts.map +1 -0
  61. package/dist/cli/commands/init.js +277 -0
  62. package/dist/cli/commands/init.js.map +1 -0
  63. package/dist/cli/commands/init.test.d.ts +2 -0
  64. package/dist/cli/commands/init.test.d.ts.map +1 -0
  65. package/dist/cli/commands/init.test.js +158 -0
  66. package/dist/cli/commands/init.test.js.map +1 -0
  67. package/dist/cli/commands/login.d.ts +37 -0
  68. package/dist/cli/commands/login.d.ts.map +1 -0
  69. package/dist/cli/commands/login.js +64 -0
  70. package/dist/cli/commands/login.js.map +1 -0
  71. package/dist/cli/config.d.ts +114 -0
  72. package/dist/cli/config.d.ts.map +1 -0
  73. package/dist/cli/config.js +258 -0
  74. package/dist/cli/config.js.map +1 -0
  75. package/dist/cli/config.test.d.ts +2 -0
  76. package/dist/cli/config.test.d.ts.map +1 -0
  77. package/dist/cli/config.test.js +243 -0
  78. package/dist/cli/config.test.js.map +1 -0
  79. package/dist/cli/env.d.ts +29 -0
  80. package/dist/cli/env.d.ts.map +1 -0
  81. package/dist/cli/env.js +66 -0
  82. package/dist/cli/env.js.map +1 -0
  83. package/dist/cli/git.d.ts +29 -0
  84. package/dist/cli/git.d.ts.map +1 -0
  85. package/dist/cli/git.js +114 -0
  86. package/dist/cli/git.js.map +1 -0
  87. package/dist/cli/git.test.d.ts +2 -0
  88. package/dist/cli/git.test.d.ts.map +1 -0
  89. package/dist/cli/git.test.js +125 -0
  90. package/dist/cli/git.test.js.map +1 -0
  91. package/dist/cli/index.d.ts +7 -0
  92. package/dist/cli/index.d.ts.map +1 -0
  93. package/dist/cli/index.js +337 -0
  94. package/dist/cli/index.js.map +1 -0
  95. package/dist/cli/utils/schema-validation.d.ts +95 -0
  96. package/dist/cli/utils/schema-validation.d.ts.map +1 -0
  97. package/dist/cli/utils/schema-validation.js +175 -0
  98. package/dist/cli/utils/schema-validation.js.map +1 -0
  99. package/dist/cli/utils/schema-validation.test.d.ts +5 -0
  100. package/dist/cli/utils/schema-validation.test.d.ts.map +1 -0
  101. package/dist/cli/utils/schema-validation.test.js +173 -0
  102. package/dist/cli/utils/schema-validation.test.js.map +1 -0
  103. package/dist/client/base.d.ts +116 -0
  104. package/dist/client/base.d.ts.map +1 -0
  105. package/dist/client/base.js +328 -0
  106. package/dist/client/base.js.map +1 -0
  107. package/dist/client/types.d.ts +137 -0
  108. package/dist/client/types.d.ts.map +1 -0
  109. package/dist/client/types.js +43 -0
  110. package/dist/client/types.js.map +1 -0
  111. package/dist/generator/client.d.ts +44 -0
  112. package/dist/generator/client.d.ts.map +1 -0
  113. package/dist/generator/client.js +144 -0
  114. package/dist/generator/client.js.map +1 -0
  115. package/dist/generator/datasource.d.ts +57 -0
  116. package/dist/generator/datasource.d.ts.map +1 -0
  117. package/dist/generator/datasource.js +169 -0
  118. package/dist/generator/datasource.js.map +1 -0
  119. package/dist/generator/datasource.test.d.ts +2 -0
  120. package/dist/generator/datasource.test.d.ts.map +1 -0
  121. package/dist/generator/datasource.test.js +254 -0
  122. package/dist/generator/datasource.test.js.map +1 -0
  123. package/dist/generator/index.d.ts +131 -0
  124. package/dist/generator/index.d.ts.map +1 -0
  125. package/dist/generator/index.js +121 -0
  126. package/dist/generator/index.js.map +1 -0
  127. package/dist/generator/index.test.d.ts +2 -0
  128. package/dist/generator/index.test.d.ts.map +1 -0
  129. package/dist/generator/index.test.js +175 -0
  130. package/dist/generator/index.test.js.map +1 -0
  131. package/dist/generator/loader.d.ts +156 -0
  132. package/dist/generator/loader.d.ts.map +1 -0
  133. package/dist/generator/loader.js +295 -0
  134. package/dist/generator/loader.js.map +1 -0
  135. package/dist/generator/pipe.d.ts +72 -0
  136. package/dist/generator/pipe.d.ts.map +1 -0
  137. package/dist/generator/pipe.js +174 -0
  138. package/dist/generator/pipe.js.map +1 -0
  139. package/dist/generator/pipe.test.d.ts +2 -0
  140. package/dist/generator/pipe.test.d.ts.map +1 -0
  141. package/dist/generator/pipe.test.js +393 -0
  142. package/dist/generator/pipe.test.js.map +1 -0
  143. package/dist/index.d.ts +74 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +73 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/infer/index.d.ts +202 -0
  148. package/dist/infer/index.d.ts.map +1 -0
  149. package/dist/infer/index.js +5 -0
  150. package/dist/infer/index.js.map +1 -0
  151. package/dist/schema/datasource.d.ts +135 -0
  152. package/dist/schema/datasource.d.ts.map +1 -0
  153. package/dist/schema/datasource.js +105 -0
  154. package/dist/schema/datasource.js.map +1 -0
  155. package/dist/schema/datasource.test.d.ts +2 -0
  156. package/dist/schema/datasource.test.d.ts.map +1 -0
  157. package/dist/schema/datasource.test.js +142 -0
  158. package/dist/schema/datasource.test.js.map +1 -0
  159. package/dist/schema/engines.d.ts +157 -0
  160. package/dist/schema/engines.d.ts.map +1 -0
  161. package/dist/schema/engines.js +155 -0
  162. package/dist/schema/engines.js.map +1 -0
  163. package/dist/schema/engines.test.d.ts +2 -0
  164. package/dist/schema/engines.test.d.ts.map +1 -0
  165. package/dist/schema/engines.test.js +221 -0
  166. package/dist/schema/engines.test.js.map +1 -0
  167. package/dist/schema/params.d.ts +106 -0
  168. package/dist/schema/params.d.ts.map +1 -0
  169. package/dist/schema/params.js +138 -0
  170. package/dist/schema/params.js.map +1 -0
  171. package/dist/schema/params.test.d.ts +2 -0
  172. package/dist/schema/params.test.d.ts.map +1 -0
  173. package/dist/schema/params.test.js +175 -0
  174. package/dist/schema/params.test.js.map +1 -0
  175. package/dist/schema/pipe.d.ts +436 -0
  176. package/dist/schema/pipe.d.ts.map +1 -0
  177. package/dist/schema/pipe.js +484 -0
  178. package/dist/schema/pipe.js.map +1 -0
  179. package/dist/schema/pipe.test.d.ts +2 -0
  180. package/dist/schema/pipe.test.d.ts.map +1 -0
  181. package/dist/schema/pipe.test.js +488 -0
  182. package/dist/schema/pipe.test.js.map +1 -0
  183. package/dist/schema/project.d.ts +202 -0
  184. package/dist/schema/project.d.ts.map +1 -0
  185. package/dist/schema/project.js +188 -0
  186. package/dist/schema/project.js.map +1 -0
  187. package/dist/schema/project.test.d.ts +2 -0
  188. package/dist/schema/project.test.d.ts.map +1 -0
  189. package/dist/schema/project.test.js +180 -0
  190. package/dist/schema/project.test.js.map +1 -0
  191. package/dist/schema/types.d.ts +140 -0
  192. package/dist/schema/types.d.ts.map +1 -0
  193. package/dist/schema/types.js +174 -0
  194. package/dist/schema/types.js.map +1 -0
  195. package/dist/schema/types.test.d.ts +2 -0
  196. package/dist/schema/types.test.d.ts.map +1 -0
  197. package/dist/schema/types.test.js +176 -0
  198. package/dist/schema/types.test.js.map +1 -0
  199. package/dist/test/handlers.d.ts +58 -0
  200. package/dist/test/handlers.d.ts.map +1 -0
  201. package/dist/test/handlers.js +62 -0
  202. package/dist/test/handlers.js.map +1 -0
  203. package/dist/test/setup.d.ts +5 -0
  204. package/dist/test/setup.d.ts.map +1 -0
  205. package/dist/test/setup.js +11 -0
  206. package/dist/test/setup.js.map +1 -0
  207. package/package.json +57 -0
  208. package/src/api/branches.test.ts +377 -0
  209. package/src/api/branches.ts +334 -0
  210. package/src/api/build.test.ts +216 -0
  211. package/src/api/build.ts +266 -0
  212. package/src/api/deploy.test.ts +193 -0
  213. package/src/api/deploy.ts +163 -0
  214. package/src/api/workspaces.test.ts +81 -0
  215. package/src/api/workspaces.ts +77 -0
  216. package/src/cli/auth.ts +358 -0
  217. package/src/cli/branch-store.test.ts +139 -0
  218. package/src/cli/branch-store.ts +137 -0
  219. package/src/cli/commands/branch.ts +306 -0
  220. package/src/cli/commands/build.ts +183 -0
  221. package/src/cli/commands/dev.ts +334 -0
  222. package/src/cli/commands/init.test.ts +249 -0
  223. package/src/cli/commands/init.ts +323 -0
  224. package/src/cli/commands/login.ts +98 -0
  225. package/src/cli/config.test.ts +359 -0
  226. package/src/cli/config.ts +335 -0
  227. package/src/cli/env.ts +86 -0
  228. package/src/cli/git.test.ts +147 -0
  229. package/src/cli/git.ts +125 -0
  230. package/src/cli/index.ts +382 -0
  231. package/src/cli/utils/schema-validation.test.ts +222 -0
  232. package/src/cli/utils/schema-validation.ts +272 -0
  233. package/src/client/base.ts +414 -0
  234. package/src/client/types.ts +165 -0
  235. package/src/generator/client.ts +194 -0
  236. package/src/generator/datasource.test.ts +297 -0
  237. package/src/generator/datasource.ts +217 -0
  238. package/src/generator/index.test.ts +209 -0
  239. package/src/generator/index.ts +203 -0
  240. package/src/generator/loader.ts +406 -0
  241. package/src/generator/pipe.test.ts +441 -0
  242. package/src/generator/pipe.ts +220 -0
  243. package/src/index.ts +191 -0
  244. package/src/infer/index.ts +247 -0
  245. package/src/schema/datasource.test.ts +187 -0
  246. package/src/schema/datasource.ts +195 -0
  247. package/src/schema/engines.test.ts +247 -0
  248. package/src/schema/engines.ts +271 -0
  249. package/src/schema/params.test.ts +208 -0
  250. package/src/schema/params.ts +249 -0
  251. package/src/schema/pipe.test.ts +588 -0
  252. package/src/schema/pipe.ts +832 -0
  253. package/src/schema/project.test.ts +236 -0
  254. package/src/schema/project.ts +394 -0
  255. package/src/schema/types.test.ts +212 -0
  256. package/src/schema/types.ts +366 -0
  257. package/src/test/handlers.ts +79 -0
  258. package/src/test/setup.ts +13 -0
@@ -0,0 +1,142 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { defineDatasource, isDatasourceDefinition, getColumnType, getColumnJsonPath, getColumnNames, column, } from "./datasource.js";
3
+ import { t } from "./types.js";
4
+ import { engine } from "./engines.js";
5
+ describe("Datasource Schema", () => {
6
+ describe("defineDatasource", () => {
7
+ it("creates a datasource with required fields", () => {
8
+ const ds = defineDatasource("events", {
9
+ schema: {
10
+ id: t.string(),
11
+ timestamp: t.dateTime(),
12
+ },
13
+ });
14
+ expect(ds._name).toBe("events");
15
+ expect(ds._type).toBe("datasource");
16
+ expect(ds.options.schema).toBeDefined();
17
+ });
18
+ it("creates a datasource with description", () => {
19
+ const ds = defineDatasource("events", {
20
+ description: "Event tracking data",
21
+ schema: {
22
+ id: t.string(),
23
+ },
24
+ });
25
+ expect(ds.options.description).toBe("Event tracking data");
26
+ });
27
+ it("creates a datasource with engine configuration", () => {
28
+ const ds = defineDatasource("events", {
29
+ schema: {
30
+ id: t.string(),
31
+ timestamp: t.dateTime(),
32
+ },
33
+ engine: engine.mergeTree({
34
+ sortingKey: ["id", "timestamp"],
35
+ partitionKey: "toYYYYMM(timestamp)",
36
+ }),
37
+ });
38
+ expect(ds.options.engine).toBeDefined();
39
+ expect(ds.options.engine?.type).toBe("MergeTree");
40
+ });
41
+ it("throws error for invalid datasource name", () => {
42
+ expect(() => defineDatasource("123invalid", {
43
+ schema: { id: t.string() },
44
+ })).toThrow("Invalid datasource name");
45
+ expect(() => defineDatasource("my-datasource", {
46
+ schema: { id: t.string() },
47
+ })).toThrow("Invalid datasource name");
48
+ expect(() => defineDatasource("", {
49
+ schema: { id: t.string() },
50
+ })).toThrow("Invalid datasource name");
51
+ });
52
+ it("allows valid naming patterns", () => {
53
+ // Underscore prefix
54
+ const ds1 = defineDatasource("_private", {
55
+ schema: { id: t.string() },
56
+ });
57
+ expect(ds1._name).toBe("_private");
58
+ // With numbers
59
+ const ds2 = defineDatasource("events_v2", {
60
+ schema: { id: t.string() },
61
+ });
62
+ expect(ds2._name).toBe("events_v2");
63
+ });
64
+ });
65
+ describe("isDatasourceDefinition", () => {
66
+ it("returns true for valid datasource", () => {
67
+ const ds = defineDatasource("events", {
68
+ schema: { id: t.string() },
69
+ });
70
+ expect(isDatasourceDefinition(ds)).toBe(true);
71
+ });
72
+ it("returns false for non-datasource objects", () => {
73
+ expect(isDatasourceDefinition({})).toBe(false);
74
+ expect(isDatasourceDefinition(null)).toBe(false);
75
+ expect(isDatasourceDefinition(undefined)).toBe(false);
76
+ expect(isDatasourceDefinition("string")).toBe(false);
77
+ expect(isDatasourceDefinition(123)).toBe(false);
78
+ expect(isDatasourceDefinition({ _name: "test" })).toBe(false);
79
+ });
80
+ });
81
+ describe("getColumnType", () => {
82
+ it("returns type from raw validator", () => {
83
+ const validator = t.string();
84
+ const result = getColumnType(validator);
85
+ expect(result).toBe(validator);
86
+ });
87
+ it("returns type from column definition", () => {
88
+ const validator = t.string();
89
+ const col = column(validator, { jsonPath: "$.id" });
90
+ const result = getColumnType(col);
91
+ expect(result).toBe(validator);
92
+ });
93
+ });
94
+ describe("getColumnJsonPath", () => {
95
+ it("returns undefined for raw validator", () => {
96
+ const validator = t.string();
97
+ const result = getColumnJsonPath(validator);
98
+ expect(result).toBeUndefined();
99
+ });
100
+ it("returns jsonPath from column definition", () => {
101
+ const col = column(t.string(), { jsonPath: "$.user.id" });
102
+ const result = getColumnJsonPath(col);
103
+ expect(result).toBe("$.user.id");
104
+ });
105
+ it("returns undefined when jsonPath is not set", () => {
106
+ const col = column(t.string());
107
+ const result = getColumnJsonPath(col);
108
+ expect(result).toBeUndefined();
109
+ });
110
+ });
111
+ describe("getColumnNames", () => {
112
+ it("returns all column names from schema", () => {
113
+ const schema = {
114
+ id: t.string(),
115
+ timestamp: t.dateTime(),
116
+ user_id: t.string(),
117
+ };
118
+ const names = getColumnNames(schema);
119
+ expect(names).toHaveLength(3);
120
+ expect(names).toContain("id");
121
+ expect(names).toContain("timestamp");
122
+ expect(names).toContain("user_id");
123
+ });
124
+ it("returns empty array for empty schema", () => {
125
+ const names = getColumnNames({});
126
+ expect(names).toHaveLength(0);
127
+ });
128
+ });
129
+ describe("column", () => {
130
+ it("creates a column definition with type only", () => {
131
+ const col = column(t.string());
132
+ expect(col.type).toBeDefined();
133
+ expect(col.jsonPath).toBeUndefined();
134
+ });
135
+ it("creates a column definition with jsonPath", () => {
136
+ const col = column(t.string(), { jsonPath: "$.data.value" });
137
+ expect(col.type).toBeDefined();
138
+ expect(col.jsonPath).toBe("$.data.value");
139
+ });
140
+ });
141
+ });
142
+ //# sourceMappingURL=datasource.test.js.map
@@ -0,0 +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;AAEtC,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;QAC1C,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;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;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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Engine configurations for Tinybird datasources
3
+ * ClickHouse table engines determine how data is stored and queried
4
+ */
5
+ /**
6
+ * Base configuration shared by all MergeTree engines
7
+ */
8
+ export interface BaseMergeTreeConfig {
9
+ /** Columns used for sorting data within parts (required for all MergeTree engines) */
10
+ sortingKey: string | readonly string[];
11
+ /** Expression for partitioning data (e.g., 'toYYYYMM(timestamp)') */
12
+ partitionKey?: string;
13
+ /** Primary key columns (defaults to sortingKey if not specified) */
14
+ primaryKey?: string | readonly string[];
15
+ /** TTL expression for automatic data expiration (e.g., 'timestamp + INTERVAL 90 DAY') */
16
+ ttl?: string;
17
+ /** Additional engine settings */
18
+ settings?: Record<string, string | number | boolean>;
19
+ }
20
+ /**
21
+ * MergeTree engine configuration
22
+ * The most universal and functional table engine for high-load tasks
23
+ */
24
+ export interface MergeTreeConfig extends BaseMergeTreeConfig {
25
+ type: "MergeTree";
26
+ }
27
+ /**
28
+ * ReplacingMergeTree engine configuration
29
+ * Removes duplicate rows with the same sorting key during merges
30
+ */
31
+ export interface ReplacingMergeTreeConfig extends BaseMergeTreeConfig {
32
+ type: "ReplacingMergeTree";
33
+ /** Optional version column - rows with highest version are kept */
34
+ ver?: string;
35
+ /** Optional flag to enable clean mode (ClickHouse 23.2+) */
36
+ isDeleted?: string;
37
+ }
38
+ /**
39
+ * SummingMergeTree engine configuration
40
+ * Sums numeric columns for rows with the same sorting key during merges
41
+ */
42
+ export interface SummingMergeTreeConfig extends BaseMergeTreeConfig {
43
+ type: "SummingMergeTree";
44
+ /** Columns to sum (if not specified, all numeric columns are summed) */
45
+ columns?: readonly string[];
46
+ }
47
+ /**
48
+ * AggregatingMergeTree engine configuration
49
+ * For incremental data aggregation with AggregateFunction columns
50
+ */
51
+ export interface AggregatingMergeTreeConfig extends BaseMergeTreeConfig {
52
+ type: "AggregatingMergeTree";
53
+ }
54
+ /**
55
+ * CollapsingMergeTree engine configuration
56
+ * For collapsing rows that cancel each other out
57
+ */
58
+ export interface CollapsingMergeTreeConfig extends BaseMergeTreeConfig {
59
+ type: "CollapsingMergeTree";
60
+ /** Column containing sign (1 for state, -1 for cancel) */
61
+ sign: string;
62
+ }
63
+ /**
64
+ * VersionedCollapsingMergeTree engine configuration
65
+ * For collapsing with versioning when events may arrive out of order
66
+ */
67
+ export interface VersionedCollapsingMergeTreeConfig extends BaseMergeTreeConfig {
68
+ type: "VersionedCollapsingMergeTree";
69
+ /** Column containing sign (1 for state, -1 for cancel) */
70
+ sign: string;
71
+ /** Column containing version number */
72
+ version: string;
73
+ }
74
+ /**
75
+ * Union type of all engine configurations
76
+ */
77
+ export type EngineConfig = MergeTreeConfig | ReplacingMergeTreeConfig | SummingMergeTreeConfig | AggregatingMergeTreeConfig | CollapsingMergeTreeConfig | VersionedCollapsingMergeTreeConfig;
78
+ /**
79
+ * Engine configuration builders
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * import { engine } from '@tinybirdco/sdk';
84
+ *
85
+ * // Basic MergeTree
86
+ * engine.mergeTree({
87
+ * sortingKey: ['user_id', 'timestamp'],
88
+ * partitionKey: 'toYYYYMM(timestamp)',
89
+ * });
90
+ *
91
+ * // ReplacingMergeTree for upserts
92
+ * engine.replacingMergeTree({
93
+ * sortingKey: ['id'],
94
+ * ver: 'updated_at',
95
+ * });
96
+ *
97
+ * // SummingMergeTree for counters
98
+ * engine.summingMergeTree({
99
+ * sortingKey: ['date', 'metric_name'],
100
+ * columns: ['value'],
101
+ * });
102
+ * ```
103
+ */
104
+ export declare const engine: {
105
+ /**
106
+ * MergeTree - The most universal engine for high-load tasks
107
+ * Best for: General-purpose analytics, logs, events
108
+ */
109
+ readonly mergeTree: (config: Omit<MergeTreeConfig, "type">) => MergeTreeConfig;
110
+ /**
111
+ * ReplacingMergeTree - Removes duplicates during background merges
112
+ * Best for: Maintaining latest state, upserts, slowly changing dimensions
113
+ *
114
+ * @param config.ver - Optional version column. Rows with highest version are kept.
115
+ */
116
+ readonly replacingMergeTree: (config: Omit<ReplacingMergeTreeConfig, "type">) => ReplacingMergeTreeConfig;
117
+ /**
118
+ * SummingMergeTree - Sums numeric columns during background merges
119
+ * Best for: Counters, metrics aggregation, pre-aggregated data
120
+ *
121
+ * @param config.columns - Columns to sum. If not specified, all numeric columns are summed.
122
+ */
123
+ readonly summingMergeTree: (config: Omit<SummingMergeTreeConfig, "type">) => SummingMergeTreeConfig;
124
+ /**
125
+ * AggregatingMergeTree - For incremental aggregation with AggregateFunction columns
126
+ * Best for: Materialized views, incremental aggregation pipelines
127
+ */
128
+ readonly aggregatingMergeTree: (config: Omit<AggregatingMergeTreeConfig, "type">) => AggregatingMergeTreeConfig;
129
+ /**
130
+ * CollapsingMergeTree - For collapsing state/cancel row pairs
131
+ * Best for: Changelog-style updates, mutable data with deletes
132
+ *
133
+ * @param config.sign - Column containing 1 (state) or -1 (cancel)
134
+ */
135
+ readonly collapsingMergeTree: (config: Omit<CollapsingMergeTreeConfig, "type">) => CollapsingMergeTreeConfig;
136
+ /**
137
+ * VersionedCollapsingMergeTree - Collapsing with versioning for out-of-order events
138
+ * Best for: Changelog-style updates with potential out-of-order arrival
139
+ *
140
+ * @param config.sign - Column containing 1 (state) or -1 (cancel)
141
+ * @param config.version - Column containing version number for ordering
142
+ */
143
+ readonly versionedCollapsingMergeTree: (config: Omit<VersionedCollapsingMergeTreeConfig, "type">) => VersionedCollapsingMergeTreeConfig;
144
+ };
145
+ /**
146
+ * Get the sorting key as an array
147
+ */
148
+ export declare function getSortingKey(config: EngineConfig): readonly string[];
149
+ /**
150
+ * Get the primary key as an array (defaults to sorting key)
151
+ */
152
+ export declare function getPrimaryKey(config: EngineConfig): readonly string[];
153
+ /**
154
+ * Generate the engine clause for a datasource file
155
+ */
156
+ export declare function getEngineClause(config: EngineConfig): string;
157
+ //# sourceMappingURL=engines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engines.d.ts","sourceRoot":"","sources":["../../src/schema/engines.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sFAAsF;IACtF,UAAU,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACvC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACxC,yFAAyF;IACzF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,IAAI,EAAE,kBAAkB,CAAC;IACzB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,IAAI,EAAE,sBAAsB,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,kCAAmC,SAAQ,mBAAmB;IAC7E,IAAI,EAAE,8BAA8B,CAAC;IACrC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,wBAAwB,GACxB,sBAAsB,GACtB,0BAA0B,GAC1B,yBAAyB,GACzB,kCAAkC,CAAC;AASvC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,MAAM;IACjB;;;OAGG;iCACiB,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,KAAG,eAAe;IAKnE;;;;;OAKG;0CAEO,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,KAC7C,wBAAwB;IAK3B;;;;;OAKG;wCAEO,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAC3C,sBAAsB;IAKzB;;;OAGG;4CAEO,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,KAC/C,0BAA0B;IAK7B;;;;;OAKG;2CAEO,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,KAC9C,yBAAyB;IAK5B;;;;;;OAMG;oDAEO,IAAI,CAAC,kCAAkC,EAAE,MAAM,CAAC,KACvD,kCAAkC;CAI7B,CAAC;AAEX;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAKrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAkD5D"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Engine configurations for Tinybird datasources
3
+ * ClickHouse table engines determine how data is stored and queried
4
+ */
5
+ /**
6
+ * Helper to normalize sorting key to array format
7
+ */
8
+ function normalizeSortingKey(key) {
9
+ return typeof key === "string" ? [key] : key;
10
+ }
11
+ /**
12
+ * Engine configuration builders
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { engine } from '@tinybirdco/sdk';
17
+ *
18
+ * // Basic MergeTree
19
+ * engine.mergeTree({
20
+ * sortingKey: ['user_id', 'timestamp'],
21
+ * partitionKey: 'toYYYYMM(timestamp)',
22
+ * });
23
+ *
24
+ * // ReplacingMergeTree for upserts
25
+ * engine.replacingMergeTree({
26
+ * sortingKey: ['id'],
27
+ * ver: 'updated_at',
28
+ * });
29
+ *
30
+ * // SummingMergeTree for counters
31
+ * engine.summingMergeTree({
32
+ * sortingKey: ['date', 'metric_name'],
33
+ * columns: ['value'],
34
+ * });
35
+ * ```
36
+ */
37
+ export const engine = {
38
+ /**
39
+ * MergeTree - The most universal engine for high-load tasks
40
+ * Best for: General-purpose analytics, logs, events
41
+ */
42
+ mergeTree: (config) => ({
43
+ type: "MergeTree",
44
+ ...config,
45
+ }),
46
+ /**
47
+ * ReplacingMergeTree - Removes duplicates during background merges
48
+ * Best for: Maintaining latest state, upserts, slowly changing dimensions
49
+ *
50
+ * @param config.ver - Optional version column. Rows with highest version are kept.
51
+ */
52
+ replacingMergeTree: (config) => ({
53
+ type: "ReplacingMergeTree",
54
+ ...config,
55
+ }),
56
+ /**
57
+ * SummingMergeTree - Sums numeric columns during background merges
58
+ * Best for: Counters, metrics aggregation, pre-aggregated data
59
+ *
60
+ * @param config.columns - Columns to sum. If not specified, all numeric columns are summed.
61
+ */
62
+ summingMergeTree: (config) => ({
63
+ type: "SummingMergeTree",
64
+ ...config,
65
+ }),
66
+ /**
67
+ * AggregatingMergeTree - For incremental aggregation with AggregateFunction columns
68
+ * Best for: Materialized views, incremental aggregation pipelines
69
+ */
70
+ aggregatingMergeTree: (config) => ({
71
+ type: "AggregatingMergeTree",
72
+ ...config,
73
+ }),
74
+ /**
75
+ * CollapsingMergeTree - For collapsing state/cancel row pairs
76
+ * Best for: Changelog-style updates, mutable data with deletes
77
+ *
78
+ * @param config.sign - Column containing 1 (state) or -1 (cancel)
79
+ */
80
+ collapsingMergeTree: (config) => ({
81
+ type: "CollapsingMergeTree",
82
+ ...config,
83
+ }),
84
+ /**
85
+ * VersionedCollapsingMergeTree - Collapsing with versioning for out-of-order events
86
+ * Best for: Changelog-style updates with potential out-of-order arrival
87
+ *
88
+ * @param config.sign - Column containing 1 (state) or -1 (cancel)
89
+ * @param config.version - Column containing version number for ordering
90
+ */
91
+ versionedCollapsingMergeTree: (config) => ({
92
+ type: "VersionedCollapsingMergeTree",
93
+ ...config,
94
+ }),
95
+ };
96
+ /**
97
+ * Get the sorting key as an array
98
+ */
99
+ export function getSortingKey(config) {
100
+ return normalizeSortingKey(config.sortingKey);
101
+ }
102
+ /**
103
+ * Get the primary key as an array (defaults to sorting key)
104
+ */
105
+ export function getPrimaryKey(config) {
106
+ if (config.primaryKey) {
107
+ return normalizeSortingKey(config.primaryKey);
108
+ }
109
+ return getSortingKey(config);
110
+ }
111
+ /**
112
+ * Generate the engine clause for a datasource file
113
+ */
114
+ export function getEngineClause(config) {
115
+ const parts = [`ENGINE "${config.type}"`];
116
+ if (config.partitionKey) {
117
+ parts.push(`ENGINE_PARTITION_KEY "${config.partitionKey}"`);
118
+ }
119
+ const sortingKey = getSortingKey(config);
120
+ parts.push(`ENGINE_SORTING_KEY "${sortingKey.join(", ")}"`);
121
+ if (config.primaryKey) {
122
+ const primaryKey = getPrimaryKey(config);
123
+ parts.push(`ENGINE_PRIMARY_KEY "${primaryKey.join(", ")}"`);
124
+ }
125
+ if (config.ttl) {
126
+ parts.push(`ENGINE_TTL "${config.ttl}"`);
127
+ }
128
+ // Engine-specific options
129
+ if (config.type === "ReplacingMergeTree" && config.ver) {
130
+ parts.push(`ENGINE_VER "${config.ver}"`);
131
+ }
132
+ if (config.type === "CollapsingMergeTree" || config.type === "VersionedCollapsingMergeTree") {
133
+ parts.push(`ENGINE_SIGN "${config.sign}"`);
134
+ }
135
+ if (config.type === "VersionedCollapsingMergeTree") {
136
+ parts.push(`ENGINE_VERSION "${config.version}"`);
137
+ }
138
+ if (config.type === "SummingMergeTree" && config.columns && config.columns.length > 0) {
139
+ parts.push(`ENGINE_SUMMING_COLUMNS "${config.columns.join(", ")}"`);
140
+ }
141
+ if (config.settings && Object.keys(config.settings).length > 0) {
142
+ const settingsStr = Object.entries(config.settings)
143
+ .map(([k, v]) => {
144
+ if (typeof v === "string") {
145
+ const escaped = v.replace(/'/g, "\\'");
146
+ return `${k}='${escaped}'`;
147
+ }
148
+ return `${k}=${v}`;
149
+ })
150
+ .join(", ");
151
+ parts.push(`ENGINE_SETTINGS "${settingsStr}"`);
152
+ }
153
+ return parts.join("\n");
154
+ }
155
+ //# sourceMappingURL=engines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engines.js","sourceRoot":"","sources":["../../src/schema/engines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=engines.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engines.test.d.ts","sourceRoot":"","sources":["../../src/schema/engines.test.ts"],"names":[],"mappings":""}