pre updating version control

This commit is contained in:
taDuc
2026-04-17 20:55:33 +07:00
parent 6f7e819aca
commit 5397bf9808
5 changed files with 806 additions and 166 deletions

View File

@@ -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();