Adds ICS
This commit is contained in:
parent
441715675c
commit
a79898b2e9
48 changed files with 2062 additions and 1503 deletions
|
|
@ -4,78 +4,82 @@ import {Container} from "../Container/Container";
|
|||
import {Logger} from "log4js";
|
||||
|
||||
export class DatabaseUpdater {
|
||||
constructor(private readonly database: DatabaseConnection) {}
|
||||
|
||||
public ensureAvaliablity(definitions: Iterable<DatabaseDefinition>) {
|
||||
for (const definition of definitions) {
|
||||
this.ensureDefinition(definition);
|
||||
}
|
||||
}
|
||||
|
||||
private ensureDefinition(definition: DatabaseDefinition) {
|
||||
if (this.database.hasTable(definition.name)) {
|
||||
this.ensureTableColumns(definition);
|
||||
return;
|
||||
}
|
||||
|
||||
this.createTable(definition);
|
||||
}
|
||||
|
||||
private ensureTableColumns(definition: DatabaseDefinition) {
|
||||
const DBSQLColumns = this.database.fetchAll<object, {name: string, type: string}>(
|
||||
`PRAGMA table_info("${definition.name}")`
|
||||
);
|
||||
|
||||
if (!DBSQLColumns) {
|
||||
Container.get<Logger>("logger").log("Request failed...");
|
||||
return;
|
||||
}
|
||||
|
||||
const missingColumns = definition.columns.filter(
|
||||
(column: DatabaseColumnDefinition) => {
|
||||
return !DBSQLColumns.some((dbColumn: DatabaseColumnDefinition) => {
|
||||
return column.name === dbColumn.name
|
||||
});
|
||||
}
|
||||
)
|
||||
|
||||
if (missingColumns.length < 1) {
|
||||
Container.get<Logger>("logger").log(`No new columns found for ${definition.name}`)
|
||||
return;
|
||||
}
|
||||
|
||||
const columnsSQL = missingColumns.map((column: DatabaseColumnDefinition) => {
|
||||
const values = [
|
||||
"ADD",
|
||||
column.name,
|
||||
column.type,
|
||||
column.primaryKey ? `PRIMARY KEY` : '',
|
||||
column.notNull ? 'NOT NULL' : '',
|
||||
column.autoIncrement ? 'AUTOINCREMENT' : '',
|
||||
]
|
||||
constructor(private readonly database: DatabaseConnection) {
|
||||
}
|
||||
|
||||
return values.join(' ');
|
||||
}).join(', ');
|
||||
|
||||
const sql = `ALTER TABLE ${definition.name} ${columnsSQL}`;
|
||||
this.database.execute(sql);
|
||||
public ensureAvaliablity(definitions: Iterable<DatabaseDefinition>) {
|
||||
for (const definition of definitions) {
|
||||
this.ensureDefinition(definition);
|
||||
}
|
||||
}
|
||||
|
||||
private ensureDefinition(definition: DatabaseDefinition) {
|
||||
if (this.database.hasTable(definition.name)) {
|
||||
this.ensureTableColumns(definition);
|
||||
return;
|
||||
}
|
||||
|
||||
this.createTable(definition);
|
||||
}
|
||||
|
||||
private createTable(definition: DatabaseDefinition) {
|
||||
const columnsSQL = definition.columns.map((column: DatabaseColumnDefinition) => {
|
||||
const values = [
|
||||
column.name,
|
||||
column.type,
|
||||
column.primaryKey ? `PRIMARY KEY` : '',
|
||||
column.notNull ? 'NOT NULL' : '',
|
||||
column.autoIncrement ? 'AUTOINCREMENT' : '',
|
||||
]
|
||||
|
||||
return values.join(' ');
|
||||
}).join(', ');
|
||||
|
||||
const sql = `CREATE TABLE IF NOT EXISTS ${definition.name} (${columnsSQL})`;
|
||||
this.database.execute(sql);
|
||||
private ensureTableColumns(definition: DatabaseDefinition) {
|
||||
const DBSQLColumns = this.database.fetchAll<object, { name: string, type: string }>(
|
||||
`PRAGMA table_info("${definition.name}")`
|
||||
);
|
||||
|
||||
if (!DBSQLColumns) {
|
||||
Container.get<Logger>("logger").log("Request failed...");
|
||||
return;
|
||||
}
|
||||
|
||||
const missingColumns = definition.columns.filter(
|
||||
(column: DatabaseColumnDefinition) => {
|
||||
return !DBSQLColumns.some((dbColumn: DatabaseColumnDefinition) => {
|
||||
return column.name === dbColumn.name
|
||||
});
|
||||
}
|
||||
)
|
||||
|
||||
if (missingColumns.length < 1) {
|
||||
Container.get<Logger>("logger").log(`No new columns found for ${definition.name}`)
|
||||
return;
|
||||
}
|
||||
|
||||
const columnsSQL = missingColumns.map((column: DatabaseColumnDefinition) => {
|
||||
const values = [
|
||||
"ADD",
|
||||
column.name,
|
||||
column.type,
|
||||
column.primaryKey ? `PRIMARY KEY` : '',
|
||||
column.notNull ? 'NOT NULL' : '',
|
||||
column.autoIncrement ? 'AUTOINCREMENT' : '',
|
||||
]
|
||||
|
||||
return values.join(' ');
|
||||
}).join(', ');
|
||||
|
||||
const sql = `ALTER TABLE ${definition.name} ${columnsSQL}`;
|
||||
this.database.execute(sql);
|
||||
}
|
||||
|
||||
|
||||
private createTable(definition: DatabaseDefinition) {
|
||||
const columnsSQL = definition.columns.map((column: DatabaseColumnDefinition) => {
|
||||
const values = [
|
||||
column.name,
|
||||
column.type,
|
||||
column.primaryKey ? `PRIMARY KEY` : '',
|
||||
column.notNull ? 'NOT NULL' : '',
|
||||
column.autoIncrement ? 'AUTOINCREMENT' : '',
|
||||
]
|
||||
|
||||
return values.join(' ');
|
||||
}).join(', ');
|
||||
|
||||
const sql = `CREATE TABLE IF NOT EXISTS ${definition.name}
|
||||
(
|
||||
${columnsSQL}
|
||||
)`;
|
||||
this.database.execute(sql);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue