ponder 0.8.1 → 0.8.2
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/bin/ponder.js +46 -41
- package/dist/bin/ponder.js.map +1 -1
- package/package.json +1 -1
- package/src/database/index.ts +82 -70
package/dist/bin/ponder.js
CHANGED
|
@@ -4369,12 +4369,7 @@ var createDatabase = ({
|
|
|
4369
4369
|
(tableName) => tableName.sql
|
|
4370
4370
|
)
|
|
4371
4371
|
};
|
|
4372
|
-
|
|
4373
|
-
await tx.insertInto("_ponder_meta").values({ key: "status", value: null }).execute();
|
|
4374
|
-
await tx.insertInto("_ponder_meta").values({
|
|
4375
|
-
key: "app",
|
|
4376
|
-
value: newApp
|
|
4377
|
-
}).execute();
|
|
4372
|
+
const createEnums = async () => {
|
|
4378
4373
|
for (let i = 0; i < schemaBuild.statements.enums.sql.length; i++) {
|
|
4379
4374
|
await sql2.raw(schemaBuild.statements.enums.sql[i]).execute(tx).catch((_error) => {
|
|
4380
4375
|
const error = _error;
|
|
@@ -4387,6 +4382,8 @@ var createDatabase = ({
|
|
|
4387
4382
|
throw e;
|
|
4388
4383
|
});
|
|
4389
4384
|
}
|
|
4385
|
+
};
|
|
4386
|
+
const createTables = async () => {
|
|
4390
4387
|
for (let i = 0; i < schemaBuild.statements.tables.sql.length; i++) {
|
|
4391
4388
|
await sql2.raw(schemaBuild.statements.tables.sql[i]).execute(tx).catch((_error) => {
|
|
4392
4389
|
const error = _error;
|
|
@@ -4399,6 +4396,26 @@ var createDatabase = ({
|
|
|
4399
4396
|
throw e;
|
|
4400
4397
|
});
|
|
4401
4398
|
}
|
|
4399
|
+
};
|
|
4400
|
+
const dropTables = async () => {
|
|
4401
|
+
for (const tableName of getTableNames(schemaBuild.schema)) {
|
|
4402
|
+
await tx.schema.dropTable(tableName.sql).cascade().ifExists().execute();
|
|
4403
|
+
await tx.schema.dropTable(tableName.reorg).cascade().ifExists().execute();
|
|
4404
|
+
}
|
|
4405
|
+
};
|
|
4406
|
+
const dropEnums = async () => {
|
|
4407
|
+
for (const enumName of schemaBuild.statements.enums.json) {
|
|
4408
|
+
await tx.schema.dropType(enumName.name).ifExists().execute();
|
|
4409
|
+
}
|
|
4410
|
+
};
|
|
4411
|
+
if (previousApp === void 0) {
|
|
4412
|
+
await tx.insertInto("_ponder_meta").values({ key: "status", value: null }).execute();
|
|
4413
|
+
await tx.insertInto("_ponder_meta").values({
|
|
4414
|
+
key: "app",
|
|
4415
|
+
value: newApp
|
|
4416
|
+
}).execute();
|
|
4417
|
+
await createEnums();
|
|
4418
|
+
await createTables();
|
|
4402
4419
|
common.logger.info({
|
|
4403
4420
|
service: "database",
|
|
4404
4421
|
msg: `Created tables [${newApp.table_names.join(", ")}]`
|
|
@@ -4410,37 +4427,11 @@ var createDatabase = ({
|
|
|
4410
4427
|
}
|
|
4411
4428
|
if (previousApp.is_dev === 1 || process.env.PONDER_EXPERIMENTAL_DB === "platform" && previousApp.build_id !== newApp.build_id || process.env.PONDER_EXPERIMENTAL_DB === "platform" && previousApp.checkpoint === encodeCheckpoint(zeroCheckpoint)) {
|
|
4412
4429
|
await tx.updateTable("_ponder_meta").set({ value: null }).where("key", "=", "status").execute();
|
|
4413
|
-
await tx.updateTable("_ponder_meta").set({
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
|
|
4418
|
-
await tx.schema.dropTable(tableName.reorg).cascade().ifExists().execute();
|
|
4419
|
-
}
|
|
4420
|
-
for (let i = 0; i < schemaBuild.statements.enums.sql.length; i++) {
|
|
4421
|
-
await sql2.raw(schemaBuild.statements.enums.sql[i]).execute(tx).catch((_error) => {
|
|
4422
|
-
const error = _error;
|
|
4423
|
-
if (!error.message.includes("already exists"))
|
|
4424
|
-
throw error;
|
|
4425
|
-
const e = new NonRetryableError(
|
|
4426
|
-
`Unable to create enum '${preBuild.namespace}'.'${schemaBuild.statements.enums.json[i].name}' because an enum with that name already exists.`
|
|
4427
|
-
);
|
|
4428
|
-
e.stack = void 0;
|
|
4429
|
-
throw e;
|
|
4430
|
-
});
|
|
4431
|
-
}
|
|
4432
|
-
for (let i = 0; i < schemaBuild.statements.tables.sql.length; i++) {
|
|
4433
|
-
await sql2.raw(schemaBuild.statements.tables.sql[i]).execute(tx).catch((_error) => {
|
|
4434
|
-
const error = _error;
|
|
4435
|
-
if (!error.message.includes("already exists"))
|
|
4436
|
-
throw error;
|
|
4437
|
-
const e = new NonRetryableError(
|
|
4438
|
-
`Unable to create table '${preBuild.namespace}'.'${schemaBuild.statements.tables.json[i].tableName}' because a table with that name already exists.`
|
|
4439
|
-
);
|
|
4440
|
-
e.stack = void 0;
|
|
4441
|
-
throw e;
|
|
4442
|
-
});
|
|
4443
|
-
}
|
|
4430
|
+
await tx.updateTable("_ponder_meta").set({ value: newApp }).where("key", "=", "app").execute();
|
|
4431
|
+
await dropTables();
|
|
4432
|
+
await dropEnums();
|
|
4433
|
+
await createEnums();
|
|
4434
|
+
await createTables();
|
|
4444
4435
|
common.logger.info({
|
|
4445
4436
|
service: "database",
|
|
4446
4437
|
msg: `Created tables [${newApp.table_names.join(", ")}]`
|
|
@@ -4450,7 +4441,7 @@ var createDatabase = ({
|
|
|
4450
4441
|
checkpoint: encodeCheckpoint(zeroCheckpoint)
|
|
4451
4442
|
};
|
|
4452
4443
|
}
|
|
4453
|
-
if (common.options.command === "dev" || previousApp.build_id !== newApp.build_id
|
|
4444
|
+
if (common.options.command === "dev" || previousApp.build_id !== newApp.build_id) {
|
|
4454
4445
|
const error = new NonRetryableError(
|
|
4455
4446
|
`Schema '${preBuild.namespace}' was previously used by a different Ponder app. Drop the schema first, or use a different schema. Read more: https://ponder.sh/docs/getting-started/database#database-schema`
|
|
4456
4447
|
);
|
|
@@ -4464,12 +4455,26 @@ var createDatabase = ({
|
|
|
4464
4455
|
expiry: previousApp.heartbeat_at + common.options.databaseHeartbeatTimeout
|
|
4465
4456
|
};
|
|
4466
4457
|
}
|
|
4458
|
+
if (previousApp.checkpoint === encodeCheckpoint(zeroCheckpoint)) {
|
|
4459
|
+
await tx.updateTable("_ponder_meta").set({ value: null }).where("key", "=", "status").execute();
|
|
4460
|
+
await tx.updateTable("_ponder_meta").set({ value: newApp }).where("key", "=", "app").execute();
|
|
4461
|
+
await dropTables();
|
|
4462
|
+
await dropEnums();
|
|
4463
|
+
await createEnums();
|
|
4464
|
+
await createTables();
|
|
4465
|
+
common.logger.info({
|
|
4466
|
+
service: "database",
|
|
4467
|
+
msg: `Created tables [${newApp.table_names.join(", ")}]`
|
|
4468
|
+
});
|
|
4469
|
+
return {
|
|
4470
|
+
status: "success",
|
|
4471
|
+
checkpoint: encodeCheckpoint(zeroCheckpoint)
|
|
4472
|
+
};
|
|
4473
|
+
}
|
|
4467
4474
|
const checkpoint = previousApp.checkpoint;
|
|
4468
4475
|
newApp.checkpoint = checkpoint;
|
|
4469
4476
|
await tx.updateTable("_ponder_meta").set({ value: null }).where("key", "=", "status").execute();
|
|
4470
|
-
await tx.updateTable("_ponder_meta").set({
|
|
4471
|
-
value: newApp
|
|
4472
|
-
}).where("key", "=", "app").execute();
|
|
4477
|
+
await tx.updateTable("_ponder_meta").set({ value: newApp }).where("key", "=", "app").execute();
|
|
4473
4478
|
common.logger.info({
|
|
4474
4479
|
service: "database",
|
|
4475
4480
|
msg: `Detected crash recovery for build '${buildId}' in schema '${preBuild.namespace}' last active ${formatEta(Date.now() - previousApp.heartbeat_at)} ago`
|