|
18 | 18 | */
|
19 | 19 | const { es_import_promise } = require("../../fun/dev-console-ui-utils");
|
20 | 20 | const { surrounding_box } = require("../../fun/dev-console-ui-utils");
|
| 21 | +const { CompositeError } = require("../../util/errorutil"); |
21 | 22 | const structutil = require("../../util/structutil");
|
22 | 23 | const { BaseDatabaseAccessService } = require("./BaseDatabaseAccessService");
|
23 | 24 |
|
@@ -45,51 +46,18 @@ class SqliteDatabaseAccessService extends BaseDatabaseAccessService {
|
45 | 46 | // Database upgrade logic
|
46 | 47 | const TARGET_VERSION = 24;
|
47 | 48 |
|
48 |
| - if ( do_setup ) { |
49 |
| - this.log.noticeme(`SETUP: creating database at ${this.config.path}`); |
50 |
| - const sql_files = [ |
51 |
| - '0001_create-tables.sql', |
52 |
| - '0002_add-default-apps.sql', |
53 |
| - '0003_user-permissions.sql', |
54 |
| - '0004_sessions.sql', |
55 |
| - '0005_background-apps.sql', |
56 |
| - '0006_update-apps.sql', |
57 |
| - '0007_sessions.sql', |
58 |
| - '0008_otp.sql', |
59 |
| - '0009_app-prefix-fix.sql', |
60 |
| - '0010_add-git-app.sql', |
61 |
| - '0011_notification.sql', |
62 |
| - '0012_appmetadata.sql', |
63 |
| - '0013_protected-apps.sql', |
64 |
| - '0014_share.sql', |
65 |
| - '0015_group.sql', |
66 |
| - '0016_group-permissions.sql', |
67 |
| - '0017_publicdirs.sql', |
68 |
| - '0018_fix-0003.sql', |
69 |
| - '0019_fix-0016.sql', |
70 |
| - '0020_dev-center.sql', |
71 |
| - '0021_app-owner-id.sql', |
72 |
| - '0022_dev-center-max.sql', |
73 |
| - '0023_fix-kv.sql', |
74 |
| - '0024_default-groups.sql', |
75 |
| - '0025_system-user.dbmig.js', |
76 |
| - '0026_user-groups.dbmig.js', |
77 |
| - ].map(p => path_.join(__dirname, 'sqlite_setup', p)); |
78 |
| - const fs = require('fs'); |
79 |
| - for ( const filename of sql_files ) { |
80 |
| - const basename = path_.basename(filename); |
81 |
| - this.log.noticeme(`applying ${basename}`); |
82 |
| - const contents = fs.readFileSync(filename, 'utf8'); |
83 |
| - this.db.exec(contents); |
84 |
| - } |
85 |
| - await this.db.exec(`PRAGMA user_version = ${TARGET_VERSION};`); |
86 |
| - } |
87 |
| - |
88 |
| - const [{ user_version }] = await this._read('PRAGMA user_version'); |
| 49 | + const [{ user_version }] = do_setup |
| 50 | + ? [{ user_version: -1 }] |
| 51 | + : await this._read('PRAGMA user_version'); |
89 | 52 | this.log.info('database version: ' + user_version);
|
90 | 53 |
|
91 | 54 | const upgrade_files = [];
|
92 | 55 |
|
| 56 | + if ( user_version === -1 ) { |
| 57 | + upgrade_files.push('0001_create-tables.sql'); |
| 58 | + upgrade_files.push('0002_add-default-apps.sql'); |
| 59 | + } |
| 60 | + |
93 | 61 | if ( user_version <= 0 ) {
|
94 | 62 | upgrade_files.push('0003_user-permissions.sql');
|
95 | 63 | }
|
@@ -201,12 +169,26 @@ class SqliteDatabaseAccessService extends BaseDatabaseAccessService {
|
201 | 169 | const contents = fs.readFileSync(filename, 'utf8');
|
202 | 170 | switch ( path_.extname(filename) ) {
|
203 | 171 | case '.sql':
|
204 |
| - this.db.exec(contents); |
| 172 | + const stmts = contents.split(/;\s*\n/); |
| 173 | + for ( let i=0 ; i < stmts.length ; i++ ) { |
| 174 | + if ( stmts[i].trim() === '' ) continue; |
| 175 | + const stmt = stmts[i] + ';'; |
| 176 | + try { |
| 177 | + this.db.exec(stmt); |
| 178 | + } catch (e) { |
| 179 | + debugger; |
| 180 | + throw new CompositeError(`failed to apply: ${basename} at line ${i}`, e); |
| 181 | + } |
| 182 | + } |
205 | 183 | break;
|
206 | 184 | case '.js':
|
207 |
| - await this.run_js_migration_({ |
208 |
| - filename, contents, |
209 |
| - }); |
| 185 | + try { |
| 186 | + await this.run_js_migration_({ |
| 187 | + filename, contents, |
| 188 | + }); |
| 189 | + } catch (e) { |
| 190 | + throw new CompositeError(`failed to apply: ${basename}`, e); |
| 191 | + } |
210 | 192 | break;
|
211 | 193 | default:
|
212 | 194 | throw new Error(
|
|
0 commit comments