mirror of
https://github.com/donpat1to/Schichtenplaner.git
synced 2025-11-30 22:45:46 +01:00
added seperate transaction for pragma statement
This commit is contained in:
@@ -65,7 +65,7 @@ export async function initializeDatabase(): Promise<void> {
|
|||||||
|
|
||||||
console.log('Existing tables found:', existingTables.map(t => t.name).join(', ') || 'none');
|
console.log('Existing tables found:', existingTables.map(t => t.name).join(', ') || 'none');
|
||||||
|
|
||||||
// UPDATED: Drop tables in correct dependency order for new schema
|
// Drop tables in correct dependency order for new schema
|
||||||
const tablesToDrop = [
|
const tablesToDrop = [
|
||||||
'employee_availability',
|
'employee_availability',
|
||||||
'shift_assignments',
|
'shift_assignments',
|
||||||
@@ -95,16 +95,40 @@ export async function initializeDatabase(): Promise<void> {
|
|||||||
// Continue with schema creation even if table dropping fails
|
// Continue with schema creation even if table dropping fails
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute schema creation in a transaction
|
// NEU: PRAGMA-Anweisungen außerhalb der Transaktion ausführen
|
||||||
await db.run('BEGIN EXCLUSIVE TRANSACTION');
|
console.log('Executing PRAGMA statements outside transaction...');
|
||||||
|
const pragmaStatements = schema
|
||||||
// Execute each statement separately for better error reporting
|
|
||||||
const statements = schema
|
|
||||||
.split(';')
|
.split(';')
|
||||||
.map(stmt => stmt.trim())
|
.map(stmt => stmt.trim())
|
||||||
.filter(stmt => stmt.length > 0)
|
.filter(stmt => stmt.length > 0)
|
||||||
|
.filter(stmt => stmt.toUpperCase().startsWith('PRAGMA'))
|
||||||
|
.map(stmt => {
|
||||||
|
return stmt.split('\n')
|
||||||
|
.filter(line => !line.trim().startsWith('--'))
|
||||||
|
.join('\n')
|
||||||
|
.trim();
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const statement of pragmaStatements) {
|
||||||
|
try {
|
||||||
|
console.log('Executing PRAGMA:', statement);
|
||||||
|
await db.run(statement);
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('PRAGMA statement might have failed:', statement, error);
|
||||||
|
// Continue even if PRAGMA fails
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Schema-Erstellung in Transaktion
|
||||||
|
await db.run('BEGIN EXCLUSIVE TRANSACTION');
|
||||||
|
|
||||||
|
// Nur die CREATE TABLE und andere Anweisungen (ohne PRAGMA)
|
||||||
|
const schemaStatements = schema
|
||||||
|
.split(';')
|
||||||
|
.map(stmt => stmt.trim())
|
||||||
|
.filter(stmt => stmt.length > 0)
|
||||||
|
.filter(stmt => !stmt.toUpperCase().startsWith('PRAGMA'))
|
||||||
.map(stmt => {
|
.map(stmt => {
|
||||||
// Remove any single-line comments
|
|
||||||
return stmt.split('\n')
|
return stmt.split('\n')
|
||||||
.filter(line => !line.trim().startsWith('--'))
|
.filter(line => !line.trim().startsWith('--'))
|
||||||
.join('\n')
|
.join('\n')
|
||||||
@@ -112,7 +136,7 @@ export async function initializeDatabase(): Promise<void> {
|
|||||||
})
|
})
|
||||||
.filter(stmt => stmt.length > 0);
|
.filter(stmt => stmt.length > 0);
|
||||||
|
|
||||||
for (const statement of statements) {
|
for (const statement of schemaStatements) {
|
||||||
try {
|
try {
|
||||||
console.log('Executing statement:', statement.substring(0, 50) + '...');
|
console.log('Executing statement:', statement.substring(0, 50) + '...');
|
||||||
await db.run(statement);
|
await db.run(statement);
|
||||||
@@ -124,7 +148,7 @@ export async function initializeDatabase(): Promise<void> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// UPDATED: Insert default data in correct order
|
// Insert default data in correct order
|
||||||
try {
|
try {
|
||||||
console.log('Inserting default employee types...');
|
console.log('Inserting default employee types...');
|
||||||
await db.run(`INSERT OR IGNORE INTO employee_types (type, category, has_contract_type) VALUES ('manager', 'internal', 1)`);
|
await db.run(`INSERT OR IGNORE INTO employee_types (type, category, has_contract_type) VALUES ('manager', 'internal', 1)`);
|
||||||
|
|||||||
Reference in New Issue
Block a user