pre updating version control
This commit is contained in:
@@ -30,7 +30,6 @@ db.prepare(`
|
||||
slug TEXT UNIQUE,
|
||||
description TEXT,
|
||||
type_id TEXT NOT NULL DEFAULT 'country',
|
||||
kind TEXT,
|
||||
status INTEGER DEFAULT 1,
|
||||
is_deleted INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT,
|
||||
@@ -54,6 +53,7 @@ ensureColumn("entities", "is_deleted", "INTEGER NOT NULL DEFAULT 0");
|
||||
ensureColumn("entities", "type_id", "TEXT NOT NULL DEFAULT 'country'");
|
||||
ensureColumn("geometries", "is_deleted", "INTEGER NOT NULL DEFAULT 0");
|
||||
ensureColumn("geometries", "binding", "TEXT");
|
||||
dropEntityDeprecatedColumnsIfExists();
|
||||
dropGeometryDeprecatedColumnsIfExists();
|
||||
migrateLegacyGeometryTypeTokens();
|
||||
|
||||
@@ -98,6 +98,91 @@ function dropGeometryDeprecatedColumnsIfExists() {
|
||||
rebuildGeometriesTableToCurrentSchema(columns);
|
||||
}
|
||||
|
||||
function dropEntityDeprecatedColumnsIfExists() {
|
||||
const columns = db.prepare(`PRAGMA table_info(entities)`).all();
|
||||
const hasKind = columns.some((column) => column.name === "kind");
|
||||
if (!hasKind) return;
|
||||
rebuildEntitiesTableToCurrentSchema(columns);
|
||||
}
|
||||
|
||||
function rebuildEntitiesTableToCurrentSchema(existingColumns = null) {
|
||||
const foreignKeysEnabled = Number(db.pragma("foreign_keys", { simple: true })) === 1;
|
||||
const columns = existingColumns || db.prepare(`PRAGMA table_info(entities)`).all();
|
||||
const hasSlug = columns.some((column) => column.name === "slug");
|
||||
const hasDescription = columns.some((column) => column.name === "description");
|
||||
const hasTypeId = columns.some((column) => column.name === "type_id");
|
||||
const hasStatus = columns.some((column) => column.name === "status");
|
||||
const hasIsDeleted = columns.some((column) => column.name === "is_deleted");
|
||||
const hasCreatedAt = columns.some((column) => column.name === "created_at");
|
||||
const hasUpdatedAt = columns.some((column) => column.name === "updated_at");
|
||||
|
||||
const slugSelect = hasSlug ? "slug" : "NULL";
|
||||
const descriptionSelect = hasDescription ? "description" : "NULL";
|
||||
const typeIdSelect = hasTypeId ? "type_id" : "'country'";
|
||||
const statusSelect = hasStatus ? "status" : "1";
|
||||
const isDeletedSelect = hasIsDeleted ? "is_deleted" : "0";
|
||||
const createdAtSelect = hasCreatedAt ? "created_at" : "NULL";
|
||||
const updatedAtSelect = hasUpdatedAt ? "updated_at" : "NULL";
|
||||
|
||||
if (foreignKeysEnabled) {
|
||||
db.pragma("foreign_keys = OFF");
|
||||
}
|
||||
|
||||
try {
|
||||
const tx = db.transaction(() => {
|
||||
db.prepare(`DROP TABLE IF EXISTS entities_new`).run();
|
||||
|
||||
db.prepare(`
|
||||
CREATE TABLE entities_new (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
slug TEXT UNIQUE,
|
||||
description TEXT,
|
||||
type_id TEXT NOT NULL DEFAULT 'country',
|
||||
status INTEGER DEFAULT 1,
|
||||
is_deleted INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT,
|
||||
updated_at TEXT
|
||||
)
|
||||
`).run();
|
||||
|
||||
db.prepare(`
|
||||
INSERT INTO entities_new (
|
||||
id,
|
||||
name,
|
||||
slug,
|
||||
description,
|
||||
type_id,
|
||||
status,
|
||||
is_deleted,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
SELECT
|
||||
id,
|
||||
name,
|
||||
${slugSelect},
|
||||
${descriptionSelect},
|
||||
${typeIdSelect},
|
||||
${statusSelect},
|
||||
${isDeletedSelect},
|
||||
${createdAtSelect},
|
||||
${updatedAtSelect}
|
||||
FROM entities
|
||||
`).run();
|
||||
|
||||
db.prepare(`DROP TABLE entities`).run();
|
||||
db.prepare(`ALTER TABLE entities_new RENAME TO entities`).run();
|
||||
});
|
||||
|
||||
tx();
|
||||
} finally {
|
||||
if (foreignKeysEnabled) {
|
||||
db.pragma("foreign_keys = ON");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function rebuildGeometriesTableToCurrentSchema(existingColumns = null) {
|
||||
const foreignKeysEnabled = Number(db.pragma("foreign_keys", { simple: true })) === 1;
|
||||
const columns = existingColumns || db.prepare(`PRAGMA table_info(geometries)`).all();
|
||||
|
||||
Reference in New Issue
Block a user