@effectstream/db 0.100.0

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 (50) hide show
  1. package/assets-config.json +28 -0
  2. package/migrations/assets.ts +35 -0
  3. package/migrations/readme.md +37 -0
  4. package/migrations/system-down-v-0.0.0.sql +2 -0
  5. package/migrations/system-down-v-0.0.1.sql +14 -0
  6. package/migrations/system-up-v-0.0.0.sql +40 -0
  7. package/migrations/system-up-v-0.0.1.sql +117 -0
  8. package/migrations/system-up-v-0.0.2.sql +22 -0
  9. package/migrations/system-up-v-0.8.1.sql +5 -0
  10. package/migrations/system-version.ts +147 -0
  11. package/package.json +33 -0
  12. package/pgtypedconfig.json +21 -0
  13. package/scripts/Dockerfile +13 -0
  14. package/scripts/apply-migrations.ts +49 -0
  15. package/scripts/pgtyped-internal.ts +43 -0
  16. package/scripts/pgtyped-update.ts +119 -0
  17. package/scripts/start-pglite.ts +71 -0
  18. package/scripts/wait-for-db.ts +43 -0
  19. package/src/dynamic-tables.ts +110 -0
  20. package/src/event-indexing.ts +31 -0
  21. package/src/migrations.ts +28 -0
  22. package/src/mod.ts +65 -0
  23. package/src/pg-connection.test.ts +99 -0
  24. package/src/pg-connection.ts +211 -0
  25. package/src/register-events.ts +40 -0
  26. package/src/scheduled-constructors.ts +117 -0
  27. package/src/snapshot-handler.ts +164 -0
  28. package/src/sql/accounts.queries.ts +350 -0
  29. package/src/sql/accounts.sql +77 -0
  30. package/src/sql/achievements.queries.ts +74 -0
  31. package/src/sql/achievements.sql +17 -0
  32. package/src/sql/block-heights.queries.ts +205 -0
  33. package/src/sql/block-heights.sql +45 -0
  34. package/src/sql/events.queries.ts +201 -0
  35. package/src/sql/events.sql +41 -0
  36. package/src/sql/nonces.queries.ts +85 -0
  37. package/src/sql/nonces.sql +11 -0
  38. package/src/sql/primitives.queries.ts +35 -0
  39. package/src/sql/primitives.sql +4 -0
  40. package/src/sql/rollup_inputs.queries.ts +654 -0
  41. package/src/sql/rollup_inputs.sql +227 -0
  42. package/src/sql/statistics.queries.ts +160 -0
  43. package/src/sql/statistics.sql +55 -0
  44. package/src/sql/sync-protocols/page.queries.ts +140 -0
  45. package/src/sql/sync-protocols/page.sql +39 -0
  46. package/src/sql/system.queries.ts +356 -0
  47. package/src/sql/system.sql +75 -0
  48. package/src/sql/tables.queries.ts +89 -0
  49. package/src/sql/tables.sql +17 -0
  50. package/src/system.ts +41 -0
@@ -0,0 +1,350 @@
1
+ /** Types generated for queries found in "src/sql/accounts.sql" */
2
+ import { PreparedQuery } from '@pgtyped/runtime';
3
+
4
+ /** 'NewAddress' parameters type */
5
+ export interface INewAddressParams {
6
+ address: string;
7
+ address_type?: number | null | void;
8
+ }
9
+
10
+ /** 'NewAddress' return type */
11
+ export type INewAddressResult = void;
12
+
13
+ /** 'NewAddress' query type */
14
+ export interface INewAddressQuery {
15
+ params: INewAddressParams;
16
+ result: INewAddressResult;
17
+ }
18
+
19
+ const newAddressIR: any = {"usedParamSet":{"address":true,"address_type":true},"params":[{"name":"address","required":true,"transform":{"type":"scalar"},"locs":[{"a":68,"b":76}]},{"name":"address_type","required":false,"transform":{"type":"scalar"},"locs":[{"a":79,"b":91}]}],"statement":"INSERT INTO effectstream.addresses (address, address_type) \nVALUES (:address!, :address_type)"};
20
+
21
+ /**
22
+ * Query generated from SQL:
23
+ * ```
24
+ * INSERT INTO effectstream.addresses (address, address_type)
25
+ * VALUES (:address!, :address_type)
26
+ * ```
27
+ */
28
+ export const newAddress = new PreparedQuery<INewAddressParams,INewAddressResult>(newAddressIR);
29
+
30
+
31
+ /** 'NewAddressWithId' parameters type */
32
+ export interface INewAddressWithIdParams {
33
+ account_id: number;
34
+ address: string;
35
+ address_type: number;
36
+ }
37
+
38
+ /** 'NewAddressWithId' return type */
39
+ export type INewAddressWithIdResult = void;
40
+
41
+ /** 'NewAddressWithId' query type */
42
+ export interface INewAddressWithIdQuery {
43
+ params: INewAddressWithIdParams;
44
+ result: INewAddressWithIdResult;
45
+ }
46
+
47
+ const newAddressWithIdIR: any = {"usedParamSet":{"address":true,"address_type":true,"account_id":true},"params":[{"name":"address","required":true,"transform":{"type":"scalar"},"locs":[{"a":80,"b":88}]},{"name":"address_type","required":true,"transform":{"type":"scalar"},"locs":[{"a":91,"b":104}]},{"name":"account_id","required":true,"transform":{"type":"scalar"},"locs":[{"a":107,"b":118}]}],"statement":"INSERT INTO effectstream.addresses (address, address_type, account_id) \nVALUES (:address!, :address_type!, :account_id!)"};
48
+
49
+ /**
50
+ * Query generated from SQL:
51
+ * ```
52
+ * INSERT INTO effectstream.addresses (address, address_type, account_id)
53
+ * VALUES (:address!, :address_type!, :account_id!)
54
+ * ```
55
+ */
56
+ export const newAddressWithId = new PreparedQuery<INewAddressWithIdParams,INewAddressWithIdResult>(newAddressWithIdIR);
57
+
58
+
59
+ /** 'NewAccount' parameters type */
60
+ export interface INewAccountParams {
61
+ primary_address?: string | null | void;
62
+ }
63
+
64
+ /** 'NewAccount' return type */
65
+ export interface INewAccountResult {
66
+ id: number;
67
+ }
68
+
69
+ /** 'NewAccount' query type */
70
+ export interface INewAccountQuery {
71
+ params: INewAccountParams;
72
+ result: INewAccountResult;
73
+ }
74
+
75
+ const newAccountIR: any = {"usedParamSet":{"primary_address":true},"params":[{"name":"primary_address","required":false,"transform":{"type":"scalar"},"locs":[{"a":61,"b":76}]}],"statement":"INSERT INTO effectstream.accounts (primary_address) \nVALUES (:primary_address)\nRETURNING id"};
76
+
77
+ /**
78
+ * Query generated from SQL:
79
+ * ```
80
+ * INSERT INTO effectstream.accounts (primary_address)
81
+ * VALUES (:primary_address)
82
+ * RETURNING id
83
+ * ```
84
+ */
85
+ export const newAccount = new PreparedQuery<INewAccountParams,INewAccountResult>(newAccountIR);
86
+
87
+
88
+ /** 'UpdateAddressAccount' parameters type */
89
+ export interface IUpdateAddressAccountParams {
90
+ account_id: number;
91
+ address: string;
92
+ }
93
+
94
+ /** 'UpdateAddressAccount' return type */
95
+ export type IUpdateAddressAccountResult = void;
96
+
97
+ /** 'UpdateAddressAccount' query type */
98
+ export interface IUpdateAddressAccountQuery {
99
+ params: IUpdateAddressAccountParams;
100
+ result: IUpdateAddressAccountResult;
101
+ }
102
+
103
+ const updateAddressAccountIR: any = {"usedParamSet":{"account_id":true,"address":true},"params":[{"name":"account_id","required":true,"transform":{"type":"scalar"},"locs":[{"a":47,"b":58}]},{"name":"address","required":true,"transform":{"type":"scalar"},"locs":[{"a":76,"b":84}]}],"statement":"UPDATE effectstream.addresses\nSET account_id = :account_id!\nWHERE address = :address!"};
104
+
105
+ /**
106
+ * Query generated from SQL:
107
+ * ```
108
+ * UPDATE effectstream.addresses
109
+ * SET account_id = :account_id!
110
+ * WHERE address = :address!
111
+ * ```
112
+ */
113
+ export const updateAddressAccount = new PreparedQuery<IUpdateAddressAccountParams,IUpdateAddressAccountResult>(updateAddressAccountIR);
114
+
115
+
116
+ /** 'RemoveAddressAccount' parameters type */
117
+ export interface IRemoveAddressAccountParams {
118
+ address: string;
119
+ }
120
+
121
+ /** 'RemoveAddressAccount' return type */
122
+ export type IRemoveAddressAccountResult = void;
123
+
124
+ /** 'RemoveAddressAccount' query type */
125
+ export interface IRemoveAddressAccountQuery {
126
+ params: IRemoveAddressAccountParams;
127
+ result: IRemoveAddressAccountResult;
128
+ }
129
+
130
+ const removeAddressAccountIR: any = {"usedParamSet":{"address":true},"params":[{"name":"address","required":true,"transform":{"type":"scalar"},"locs":[{"a":68,"b":76}]}],"statement":"UPDATE effectstream.addresses\nSET account_id = NULL\nWHERE address = :address!"};
131
+
132
+ /**
133
+ * Query generated from SQL:
134
+ * ```
135
+ * UPDATE effectstream.addresses
136
+ * SET account_id = NULL
137
+ * WHERE address = :address!
138
+ * ```
139
+ */
140
+ export const removeAddressAccount = new PreparedQuery<IRemoveAddressAccountParams,IRemoveAddressAccountResult>(removeAddressAccountIR);
141
+
142
+
143
+ /** 'UpdatePrimaryAddress' parameters type */
144
+ export interface IUpdatePrimaryAddressParams {
145
+ account_id: number;
146
+ primary_address?: string | null | void;
147
+ }
148
+
149
+ /** 'UpdatePrimaryAddress' return type */
150
+ export type IUpdatePrimaryAddressResult = void;
151
+
152
+ /** 'UpdatePrimaryAddress' query type */
153
+ export interface IUpdatePrimaryAddressQuery {
154
+ params: IUpdatePrimaryAddressParams;
155
+ result: IUpdatePrimaryAddressResult;
156
+ }
157
+
158
+ const updatePrimaryAddressIR: any = {"usedParamSet":{"primary_address":true,"account_id":true},"params":[{"name":"primary_address","required":false,"transform":{"type":"scalar"},"locs":[{"a":51,"b":66}]},{"name":"account_id","required":true,"transform":{"type":"scalar"},"locs":[{"a":79,"b":90}]}],"statement":"UPDATE effectstream.accounts\nSET primary_address = :primary_address\nWHERE id = :account_id!"};
159
+
160
+ /**
161
+ * Query generated from SQL:
162
+ * ```
163
+ * UPDATE effectstream.accounts
164
+ * SET primary_address = :primary_address
165
+ * WHERE id = :account_id!
166
+ * ```
167
+ */
168
+ export const updatePrimaryAddress = new PreparedQuery<IUpdatePrimaryAddressParams,IUpdatePrimaryAddressResult>(updatePrimaryAddressIR);
169
+
170
+
171
+ /** 'GetAddressByAddress' parameters type */
172
+ export interface IGetAddressByAddressParams {
173
+ address: string;
174
+ }
175
+
176
+ /** 'GetAddressByAddress' return type */
177
+ export interface IGetAddressByAddressResult {
178
+ account_id: number | null;
179
+ address: string;
180
+ address_type: number;
181
+ }
182
+
183
+ /** 'GetAddressByAddress' query type */
184
+ export interface IGetAddressByAddressQuery {
185
+ params: IGetAddressByAddressParams;
186
+ result: IGetAddressByAddressResult;
187
+ }
188
+
189
+ const getAddressByAddressIR: any = {"usedParamSet":{"address":true},"params":[{"name":"address","required":true,"transform":{"type":"scalar"},"locs":[{"a":53,"b":61}]}],"statement":"SELECT * FROM effectstream.addresses\nWHERE address = :address!"};
190
+
191
+ /**
192
+ * Query generated from SQL:
193
+ * ```
194
+ * SELECT * FROM effectstream.addresses
195
+ * WHERE address = :address!
196
+ * ```
197
+ */
198
+ export const getAddressByAddress = new PreparedQuery<IGetAddressByAddressParams,IGetAddressByAddressResult>(getAddressByAddressIR);
199
+
200
+
201
+ /** 'GetAddressByAccountId' parameters type */
202
+ export interface IGetAddressByAccountIdParams {
203
+ account_id: number;
204
+ }
205
+
206
+ /** 'GetAddressByAccountId' return type */
207
+ export interface IGetAddressByAccountIdResult {
208
+ account_id: number | null;
209
+ address: string;
210
+ address_type: number;
211
+ }
212
+
213
+ /** 'GetAddressByAccountId' query type */
214
+ export interface IGetAddressByAccountIdQuery {
215
+ params: IGetAddressByAccountIdParams;
216
+ result: IGetAddressByAccountIdResult;
217
+ }
218
+
219
+ const getAddressByAccountIdIR: any = {"usedParamSet":{"account_id":true},"params":[{"name":"account_id","required":true,"transform":{"type":"scalar"},"locs":[{"a":56,"b":67}]}],"statement":"SELECT * FROM effectstream.addresses\nWHERE account_id = :account_id!"};
220
+
221
+ /**
222
+ * Query generated from SQL:
223
+ * ```
224
+ * SELECT * FROM effectstream.addresses
225
+ * WHERE account_id = :account_id!
226
+ * ```
227
+ */
228
+ export const getAddressByAccountId = new PreparedQuery<IGetAddressByAccountIdParams,IGetAddressByAccountIdResult>(getAddressByAccountIdIR);
229
+
230
+
231
+ /** 'GetAccountById' parameters type */
232
+ export interface IGetAccountByIdParams {
233
+ account_id: number;
234
+ }
235
+
236
+ /** 'GetAccountById' return type */
237
+ export interface IGetAccountByIdResult {
238
+ account_id: number | null;
239
+ address: string;
240
+ address_id: number;
241
+ address_type: number;
242
+ primary_address: string | null;
243
+ }
244
+
245
+ /** 'GetAccountById' query type */
246
+ export interface IGetAccountByIdQuery {
247
+ params: IGetAccountByIdParams;
248
+ result: IGetAccountByIdResult;
249
+ }
250
+
251
+ const getAccountByIdIR: any = {"usedParamSet":{"account_id":true},"params":[{"name":"account_id","required":true,"transform":{"type":"scalar"},"locs":[{"a":220,"b":231}]}],"statement":"SELECT account_id, address, address_type, primary_address, id as address_id FROM effectstream.accounts\nLEFT JOIN effectstream.addresses ON effectstream.accounts.primary_address =effectstream.addresses.address\nWHERE id = :account_id!"};
252
+
253
+ /**
254
+ * Query generated from SQL:
255
+ * ```
256
+ * SELECT account_id, address, address_type, primary_address, id as address_id FROM effectstream.accounts
257
+ * LEFT JOIN effectstream.addresses ON effectstream.accounts.primary_address =effectstream.addresses.address
258
+ * WHERE id = :account_id!
259
+ * ```
260
+ */
261
+ export const getAccountById = new PreparedQuery<IGetAccountByIdParams,IGetAccountByIdResult>(getAccountByIdIR);
262
+
263
+
264
+ /** 'GetAllAddresses' parameters type */
265
+ export interface IGetAllAddressesParams {
266
+ after_account_id?: number | null | void;
267
+ after_address?: string | null | void;
268
+ limit?: number | null | void;
269
+ }
270
+
271
+ /** 'GetAllAddresses' return type */
272
+ export interface IGetAllAddressesResult {
273
+ account_id: number | null;
274
+ address: string;
275
+ address_type: number;
276
+ primary_address: string | null;
277
+ }
278
+
279
+ /** 'GetAllAddresses' query type */
280
+ export interface IGetAllAddressesQuery {
281
+ params: IGetAllAddressesParams;
282
+ result: IGetAllAddressesResult;
283
+ }
284
+
285
+ const getAllAddressesIR: any = {"usedParamSet":{"after_account_id":true,"after_address":true,"limit":true},"params":[{"name":"after_account_id","required":false,"transform":{"type":"scalar"},"locs":[{"a":401,"b":417},{"a":756,"b":772},{"a":817,"b":833},{"a":1143,"b":1159},{"a":1203,"b":1219}]},{"name":"after_address","required":false,"transform":{"type":"scalar"},"locs":[{"a":436,"b":449},{"a":1277,"b":1290}]},{"name":"limit","required":false,"transform":{"type":"scalar"},"locs":[{"a":1388,"b":1393}]}],"statement":"SELECT \n addresses.address as \"address\", \n addresses.address_type as \"address_type\",\n addresses.account_id as \"account_id\",\n accounts.primary_address as \"primary_address\"\nFROM effectstream.addresses\nLEFT JOIN effectstream.accounts ON effectstream.accounts.primary_address =effectstream.addresses.address\nWHERE\n -- This clause is for the first page fetch when no cursor is provided\n (:after_account_id::INT IS NULL AND :after_address::TEXT IS NULL)\n OR\n (\n -- Case 1: The current row's account_id is \"greater\" than the cursor's.\n -- This handles two sub-cases:\n -- a) regular greater-than (e.g., 5 > 4)\n -- b) current is NULL but cursor is NOT NULL (since NULLS sort LAST)\n (addresses.account_id > :after_account_id::INT) OR (addresses.account_id IS NULL AND :after_account_id::INT IS NOT NULL)\n )\n OR\n (\n -- Case 2: The account_ids are equivalent, so we compare by the tie-breaker (address).\n -- This handles two sub-cases for equivalence:\n -- a) they are equal and not null (e.g., 5 = 5)\n -- b) they are both null\n (addresses.account_id = :after_account_id::INT OR (addresses.account_id IS NULL AND :after_account_id::INT IS NULL))\n AND\n (addresses.address > :after_address::TEXT)\n )\nORDER BY addresses.account_id ASC NULLS LAST, addresses.address ASC\nLIMIT COALESCE(:limit, 1000)"};
286
+
287
+ /**
288
+ * Query generated from SQL:
289
+ * ```
290
+ * SELECT
291
+ * addresses.address as "address",
292
+ * addresses.address_type as "address_type",
293
+ * addresses.account_id as "account_id",
294
+ * accounts.primary_address as "primary_address"
295
+ * FROM effectstream.addresses
296
+ * LEFT JOIN effectstream.accounts ON effectstream.accounts.primary_address =effectstream.addresses.address
297
+ * WHERE
298
+ * -- This clause is for the first page fetch when no cursor is provided
299
+ * (:after_account_id::INT IS NULL AND :after_address::TEXT IS NULL)
300
+ * OR
301
+ * (
302
+ * -- Case 1: The current row's account_id is "greater" than the cursor's.
303
+ * -- This handles two sub-cases:
304
+ * -- a) regular greater-than (e.g., 5 > 4)
305
+ * -- b) current is NULL but cursor is NOT NULL (since NULLS sort LAST)
306
+ * (addresses.account_id > :after_account_id::INT) OR (addresses.account_id IS NULL AND :after_account_id::INT IS NOT NULL)
307
+ * )
308
+ * OR
309
+ * (
310
+ * -- Case 2: The account_ids are equivalent, so we compare by the tie-breaker (address).
311
+ * -- This handles two sub-cases for equivalence:
312
+ * -- a) they are equal and not null (e.g., 5 = 5)
313
+ * -- b) they are both null
314
+ * (addresses.account_id = :after_account_id::INT OR (addresses.account_id IS NULL AND :after_account_id::INT IS NULL))
315
+ * AND
316
+ * (addresses.address > :after_address::TEXT)
317
+ * )
318
+ * ORDER BY addresses.account_id ASC NULLS LAST, addresses.address ASC
319
+ * LIMIT COALESCE(:limit, 1000)
320
+ * ```
321
+ */
322
+ export const getAllAddresses = new PreparedQuery<IGetAllAddressesParams,IGetAllAddressesResult>(getAllAddressesIR);
323
+
324
+
325
+ /** 'GetAllAddressesCount' parameters type */
326
+ export type IGetAllAddressesCountParams = void;
327
+
328
+ /** 'GetAllAddressesCount' return type */
329
+ export interface IGetAllAddressesCountResult {
330
+ total: string | null;
331
+ }
332
+
333
+ /** 'GetAllAddressesCount' query type */
334
+ export interface IGetAllAddressesCountQuery {
335
+ params: IGetAllAddressesCountParams;
336
+ result: IGetAllAddressesCountResult;
337
+ }
338
+
339
+ const getAllAddressesCountIR: any = {"usedParamSet":{},"params":[],"statement":"SELECT COUNT(*) as total\nFROM effectstream.addresses"};
340
+
341
+ /**
342
+ * Query generated from SQL:
343
+ * ```
344
+ * SELECT COUNT(*) as total
345
+ * FROM effectstream.addresses
346
+ * ```
347
+ */
348
+ export const getAllAddressesCount = new PreparedQuery<IGetAllAddressesCountParams,IGetAllAddressesCountResult>(getAllAddressesCountIR);
349
+
350
+
@@ -0,0 +1,77 @@
1
+ /* @name newAddress */
2
+ INSERT INTO effectstream.addresses (address, address_type)
3
+ VALUES (:address!, :address_type);
4
+
5
+ /* @name newAddressWithId */
6
+ INSERT INTO effectstream.addresses (address, address_type, account_id)
7
+ VALUES (:address!, :address_type!, :account_id!);
8
+
9
+ /* @name newAccount */
10
+ INSERT INTO effectstream.accounts (primary_address)
11
+ VALUES (:primary_address)
12
+ RETURNING id;
13
+
14
+ /* @name updateAddressAccount */
15
+ UPDATE effectstream.addresses
16
+ SET account_id = :account_id!
17
+ WHERE address = :address!;
18
+
19
+ /* @name removeAddressAccount */
20
+ UPDATE effectstream.addresses
21
+ SET account_id = NULL
22
+ WHERE address = :address!;
23
+
24
+ /* @name updatePrimaryAddress */
25
+ UPDATE effectstream.accounts
26
+ SET primary_address = :primary_address
27
+ WHERE id = :account_id!;
28
+
29
+ /* @name getAddressByAddress */
30
+ SELECT * FROM effectstream.addresses
31
+ WHERE address = :address!;
32
+
33
+ /* @name getAddressByAccountId */
34
+ SELECT * FROM effectstream.addresses
35
+ WHERE account_id = :account_id!;
36
+
37
+ /* @name getAccountById */
38
+ SELECT account_id, address, address_type, primary_address, id as address_id FROM effectstream.accounts
39
+ LEFT JOIN effectstream.addresses ON effectstream.accounts.primary_address =effectstream.addresses.address
40
+ WHERE id = :account_id!;
41
+
42
+
43
+ /* @name getAllAddresses */
44
+ SELECT
45
+ addresses.address as "address",
46
+ addresses.address_type as "address_type",
47
+ addresses.account_id as "account_id",
48
+ accounts.primary_address as "primary_address"
49
+ FROM effectstream.addresses
50
+ LEFT JOIN effectstream.accounts ON effectstream.accounts.primary_address =effectstream.addresses.address
51
+ WHERE
52
+ -- This clause is for the first page fetch when no cursor is provided
53
+ (:after_account_id::INT IS NULL AND :after_address::TEXT IS NULL)
54
+ OR
55
+ (
56
+ -- Case 1: The current row's account_id is "greater" than the cursor's.
57
+ -- This handles two sub-cases:
58
+ -- a) regular greater-than (e.g., 5 > 4)
59
+ -- b) current is NULL but cursor is NOT NULL (since NULLS sort LAST)
60
+ (addresses.account_id > :after_account_id::INT) OR (addresses.account_id IS NULL AND :after_account_id::INT IS NOT NULL)
61
+ )
62
+ OR
63
+ (
64
+ -- Case 2: The account_ids are equivalent, so we compare by the tie-breaker (address).
65
+ -- This handles two sub-cases for equivalence:
66
+ -- a) they are equal and not null (e.g., 5 = 5)
67
+ -- b) they are both null
68
+ (addresses.account_id = :after_account_id::INT OR (addresses.account_id IS NULL AND :after_account_id::INT IS NULL))
69
+ AND
70
+ (addresses.address > :after_address::TEXT)
71
+ )
72
+ ORDER BY addresses.account_id ASC NULLS LAST, addresses.address ASC
73
+ LIMIT COALESCE(:limit, 1000);
74
+
75
+ /* @name getAllAddressesCount */
76
+ SELECT COUNT(*) as total
77
+ FROM effectstream.addresses;
@@ -0,0 +1,74 @@
1
+ /** Types generated for queries found in "src/sql/achievements.sql" */
2
+ import { PreparedQuery } from '@pgtyped/runtime';
3
+
4
+ export type DateOrString = Date | string;
5
+
6
+ /** 'GetAchievementProgress' parameters type */
7
+ export interface IGetAchievementProgressParams {
8
+ account_id: number;
9
+ names: readonly (string | null | void)[];
10
+ }
11
+
12
+ /** 'GetAchievementProgress' return type */
13
+ export interface IGetAchievementProgressResult {
14
+ account_id: number;
15
+ completed_date: Date | null;
16
+ name: string;
17
+ progress: number | null;
18
+ total: number | null;
19
+ }
20
+
21
+ /** 'GetAchievementProgress' query type */
22
+ export interface IGetAchievementProgressQuery {
23
+ params: IGetAchievementProgressParams;
24
+ result: IGetAchievementProgressResult;
25
+ }
26
+
27
+ const getAchievementProgressIR: any = {"usedParamSet":{"account_id":true,"names":true},"params":[{"name":"names","required":false,"transform":{"type":"array_spread"},"locs":[{"a":92,"b":97},{"a":110,"b":115}]},{"name":"account_id","required":true,"transform":{"type":"scalar"},"locs":[{"a":67,"b":78}]}],"statement":"SELECT * FROM effectstream.achievement_progress\nWHERE account_id = :account_id!\nAND ('*' in :names OR name IN :names)"};
28
+
29
+ /**
30
+ * Query generated from SQL:
31
+ * ```
32
+ * SELECT * FROM effectstream.achievement_progress
33
+ * WHERE account_id = :account_id!
34
+ * AND ('*' in :names OR name IN :names)
35
+ * ```
36
+ */
37
+ export const getAchievementProgress = new PreparedQuery<IGetAchievementProgressParams,IGetAchievementProgressResult>(getAchievementProgressIR);
38
+
39
+
40
+ /** 'SetAchievementProgress' parameters type */
41
+ export interface ISetAchievementProgressParams {
42
+ account_id: number;
43
+ completed_date?: DateOrString | null | void;
44
+ name: string;
45
+ progress?: number | null | void;
46
+ total?: number | null | void;
47
+ }
48
+
49
+ /** 'SetAchievementProgress' return type */
50
+ export type ISetAchievementProgressResult = void;
51
+
52
+ /** 'SetAchievementProgress' query type */
53
+ export interface ISetAchievementProgressQuery {
54
+ params: ISetAchievementProgressParams;
55
+ result: ISetAchievementProgressResult;
56
+ }
57
+
58
+ const setAchievementProgressIR: any = {"usedParamSet":{"account_id":true,"name":true,"completed_date":true,"progress":true,"total":true},"params":[{"name":"account_id","required":true,"transform":{"type":"scalar"},"locs":[{"a":106,"b":117}]},{"name":"name","required":true,"transform":{"type":"scalar"},"locs":[{"a":120,"b":125}]},{"name":"completed_date","required":false,"transform":{"type":"scalar"},"locs":[{"a":128,"b":142}]},{"name":"progress","required":false,"transform":{"type":"scalar"},"locs":[{"a":145,"b":153}]},{"name":"total","required":false,"transform":{"type":"scalar"},"locs":[{"a":156,"b":161}]}],"statement":"INSERT INTO effectstream.achievement_progress (account_id, name, completed_date, progress, total)\nVALUES (:account_id!, :name!, :completed_date, :progress, :total)\nON CONFLICT (account_id, name)\nDO UPDATE SET\n completed_date = EXCLUDED.completed_date,\n progress = EXCLUDED.progress,\n total = EXCLUDED.total"};
59
+
60
+ /**
61
+ * Query generated from SQL:
62
+ * ```
63
+ * INSERT INTO effectstream.achievement_progress (account_id, name, completed_date, progress, total)
64
+ * VALUES (:account_id!, :name!, :completed_date, :progress, :total)
65
+ * ON CONFLICT (account_id, name)
66
+ * DO UPDATE SET
67
+ * completed_date = EXCLUDED.completed_date,
68
+ * progress = EXCLUDED.progress,
69
+ * total = EXCLUDED.total
70
+ * ```
71
+ */
72
+ export const setAchievementProgress = new PreparedQuery<ISetAchievementProgressParams,ISetAchievementProgressResult>(setAchievementProgressIR);
73
+
74
+
@@ -0,0 +1,17 @@
1
+ /*
2
+ @name getAchievementProgress
3
+ @param names -> (...)
4
+ */
5
+ SELECT * FROM effectstream.achievement_progress
6
+ WHERE account_id = :account_id!
7
+ AND ('*' in :names OR name IN :names)
8
+ ;
9
+
10
+ /* @name setAchievementProgress */
11
+ INSERT INTO effectstream.achievement_progress (account_id, name, completed_date, progress, total)
12
+ VALUES (:account_id!, :name!, :completed_date, :progress, :total)
13
+ ON CONFLICT (account_id, name)
14
+ DO UPDATE SET
15
+ completed_date = EXCLUDED.completed_date,
16
+ progress = EXCLUDED.progress,
17
+ total = EXCLUDED.total;