mysqlsyncr 1.0.80 → 1.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +178 -177
- package/dist/index.js +178 -177
- package/package.json +1 -1
- package/src/compare.js +1 -1
- package/src/differences.js +33 -27
- package/src/dump.js +0 -1
- package/ui/dist/spa/assets/{MainLayout-Cft1OeWe.js → MainLayout-CvQD3xKr.js} +1 -1
- package/ui/dist/spa/assets/{axios-CNk6rzlZ.js → axios-C0XcclIb.js} +1 -1
- package/ui/dist/spa/assets/index-CwWo8xmP.js +40 -0
- package/ui/dist/spa/index.html +1 -1
- package/ui/src/pages/MainComponent.vue +155 -18
- package/ui/dist/spa/assets/index-DomDZ6ci.js +0 -30
package/dist/index.js
CHANGED
|
@@ -6,7 +6,6 @@ import path, { normalize, resolve, dirname, basename, extname, relative, join }
|
|
|
6
6
|
import yargs from 'yargs';
|
|
7
7
|
import { notStrictEqual, strictEqual } from 'assert';
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
9
|
-
import 'module';
|
|
10
9
|
import fs, { readdir, mkdir } from 'fs/promises';
|
|
11
10
|
import express from 'express';
|
|
12
11
|
import http from 'http';
|
|
@@ -3188,7 +3187,14 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3188
3187
|
_tableName = _Object$entries$_i[0],
|
|
3189
3188
|
contents = _Object$entries$_i[1];
|
|
3190
3189
|
//check if craete table matches from json, if so, we dont need to compare indexes, triggers, or fields
|
|
3191
|
-
|
|
3190
|
+
var columns = contents.columns,
|
|
3191
|
+
indexes = contents.indexes,
|
|
3192
|
+
triggers = contents.triggers;
|
|
3193
|
+
contents.createSQL;
|
|
3194
|
+
contents.name;
|
|
3195
|
+
contents.engine;
|
|
3196
|
+
contents.charset;
|
|
3197
|
+
contents.collate;
|
|
3192
3198
|
if (!current.tables[_tableName]) {
|
|
3193
3199
|
console.log('missing_table', contents);
|
|
3194
3200
|
differences.push({
|
|
@@ -3198,6 +3204,74 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3198
3204
|
});
|
|
3199
3205
|
continue;
|
|
3200
3206
|
}
|
|
3207
|
+
try {
|
|
3208
|
+
//verify triggers
|
|
3209
|
+
logger('Verifying triggers for table', _tableName);
|
|
3210
|
+
var _iterator = _createForOfIteratorHelper(triggers),
|
|
3211
|
+
_step;
|
|
3212
|
+
try {
|
|
3213
|
+
var _loop = function _loop() {
|
|
3214
|
+
var trigger = _step.value;
|
|
3215
|
+
var currentTrigger = current.tables[_tableName].triggers.find(function (t) {
|
|
3216
|
+
return t.Name === trigger.Name;
|
|
3217
|
+
});
|
|
3218
|
+
if (!currentTrigger) {
|
|
3219
|
+
logger('Missing trigger', trigger);
|
|
3220
|
+
differences.push({
|
|
3221
|
+
type: 'missing_trigger',
|
|
3222
|
+
tableName: _tableName,
|
|
3223
|
+
trigger: trigger
|
|
3224
|
+
});
|
|
3225
|
+
} else {
|
|
3226
|
+
// Compare additional properties if needed
|
|
3227
|
+
if (currentTrigger.Event !== trigger.Event || currentTrigger.Statement !== trigger.Statement) {
|
|
3228
|
+
logger('Mismatched trigger', {
|
|
3229
|
+
expected: trigger,
|
|
3230
|
+
current: currentTrigger
|
|
3231
|
+
});
|
|
3232
|
+
differences.push({
|
|
3233
|
+
type: 'mismatched_trigger',
|
|
3234
|
+
tableName: _tableName,
|
|
3235
|
+
trigger: trigger
|
|
3236
|
+
});
|
|
3237
|
+
}
|
|
3238
|
+
}
|
|
3239
|
+
};
|
|
3240
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
3241
|
+
_loop();
|
|
3242
|
+
}
|
|
3243
|
+
} catch (err) {
|
|
3244
|
+
_iterator.e(err);
|
|
3245
|
+
} finally {
|
|
3246
|
+
_iterator.f();
|
|
3247
|
+
}
|
|
3248
|
+
var _iterator2 = _createForOfIteratorHelper(current.tables[_tableName].triggers),
|
|
3249
|
+
_step2;
|
|
3250
|
+
try {
|
|
3251
|
+
var _loop2 = function _loop2() {
|
|
3252
|
+
var trigger = _step2.value;
|
|
3253
|
+
if (!triggers.some(function (t) {
|
|
3254
|
+
return t.Name === trigger.Name;
|
|
3255
|
+
})) {
|
|
3256
|
+
logger('Extra trigger', trigger);
|
|
3257
|
+
differences.push({
|
|
3258
|
+
type: 'extra_trigger',
|
|
3259
|
+
tableName: _tableName,
|
|
3260
|
+
trigger: trigger
|
|
3261
|
+
});
|
|
3262
|
+
}
|
|
3263
|
+
};
|
|
3264
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
3265
|
+
_loop2();
|
|
3266
|
+
}
|
|
3267
|
+
} catch (err) {
|
|
3268
|
+
_iterator2.e(err);
|
|
3269
|
+
} finally {
|
|
3270
|
+
_iterator2.f();
|
|
3271
|
+
}
|
|
3272
|
+
} catch (e) {
|
|
3273
|
+
console.error("Error verifying triggers for table ".concat(_tableName), e);
|
|
3274
|
+
}
|
|
3201
3275
|
var createTableSql = current.tables[_tableName].createSQL;
|
|
3202
3276
|
if (createTableSql === contents.createSQL) {
|
|
3203
3277
|
logger("Table ".concat(_tableName, " createSQL matches from json, skipping indexes, triggers, and fields"));
|
|
@@ -3207,14 +3281,6 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3207
3281
|
logger(createTableSql);
|
|
3208
3282
|
logger(contents.createSQL);
|
|
3209
3283
|
}
|
|
3210
|
-
var columns = contents.columns,
|
|
3211
|
-
indexes = contents.indexes,
|
|
3212
|
-
triggers = contents.triggers;
|
|
3213
|
-
contents.createSQL;
|
|
3214
|
-
contents.name;
|
|
3215
|
-
contents.engine;
|
|
3216
|
-
contents.charset;
|
|
3217
|
-
contents.collate;
|
|
3218
3284
|
current.tables[_tableName].columns.map(function (f) {
|
|
3219
3285
|
return f.Field;
|
|
3220
3286
|
});
|
|
@@ -3231,11 +3297,11 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3231
3297
|
|
|
3232
3298
|
logger('Detecting extra fields for table', _tableName);
|
|
3233
3299
|
// Detect extra fields
|
|
3234
|
-
var
|
|
3235
|
-
|
|
3300
|
+
var _iterator3 = _createForOfIteratorHelper(current.tables[_tableName].columns),
|
|
3301
|
+
_step3;
|
|
3236
3302
|
try {
|
|
3237
|
-
for (
|
|
3238
|
-
var field =
|
|
3303
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
3304
|
+
var field = _step3.value;
|
|
3239
3305
|
if (!expectedFieldNames.includes(field.Field)) {
|
|
3240
3306
|
differences.push({
|
|
3241
3307
|
type: 'extra_field',
|
|
@@ -3247,16 +3313,16 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3247
3313
|
|
|
3248
3314
|
// verify Type Null and Default
|
|
3249
3315
|
} catch (err) {
|
|
3250
|
-
|
|
3316
|
+
_iterator3.e(err);
|
|
3251
3317
|
} finally {
|
|
3252
|
-
|
|
3318
|
+
_iterator3.f();
|
|
3253
3319
|
}
|
|
3254
3320
|
logger('Verifying Type Null and Default for table', _tableName);
|
|
3255
|
-
var
|
|
3256
|
-
|
|
3321
|
+
var _iterator4 = _createForOfIteratorHelper(columns),
|
|
3322
|
+
_step4;
|
|
3257
3323
|
try {
|
|
3258
|
-
var
|
|
3259
|
-
var field =
|
|
3324
|
+
var _loop3 = function _loop3() {
|
|
3325
|
+
var field = _step4.value;
|
|
3260
3326
|
var currentField = current.tables[_tableName].columns.find(function (f) {
|
|
3261
3327
|
return f.Field === field.Field;
|
|
3262
3328
|
});
|
|
@@ -3308,23 +3374,23 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3308
3374
|
}
|
|
3309
3375
|
},
|
|
3310
3376
|
_ret;
|
|
3311
|
-
for (
|
|
3312
|
-
_ret =
|
|
3377
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
3378
|
+
_ret = _loop3();
|
|
3313
3379
|
if (_ret === 0) continue;
|
|
3314
3380
|
}
|
|
3315
3381
|
|
|
3316
3382
|
// verify indexes
|
|
3317
3383
|
} catch (err) {
|
|
3318
|
-
|
|
3384
|
+
_iterator4.e(err);
|
|
3319
3385
|
} finally {
|
|
3320
|
-
|
|
3386
|
+
_iterator4.f();
|
|
3321
3387
|
}
|
|
3322
3388
|
logger('Verifying indexes for table', _tableName);
|
|
3323
|
-
var
|
|
3324
|
-
|
|
3389
|
+
var _iterator5 = _createForOfIteratorHelper(indexes),
|
|
3390
|
+
_step5;
|
|
3325
3391
|
try {
|
|
3326
|
-
var
|
|
3327
|
-
var index =
|
|
3392
|
+
var _loop4 = function _loop4() {
|
|
3393
|
+
var index = _step5.value;
|
|
3328
3394
|
// Check if the current index matches the expected index structure
|
|
3329
3395
|
var currentIndex = current.tables[_tableName].indexes.find(function (i) {
|
|
3330
3396
|
return i.ColumnName.sort().join(', ') === index.ColumnName.sort().join(', ');
|
|
@@ -3360,19 +3426,19 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3360
3426
|
}
|
|
3361
3427
|
}
|
|
3362
3428
|
};
|
|
3363
|
-
for (
|
|
3364
|
-
|
|
3429
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
3430
|
+
_loop4();
|
|
3365
3431
|
}
|
|
3366
3432
|
} catch (err) {
|
|
3367
|
-
|
|
3433
|
+
_iterator5.e(err);
|
|
3368
3434
|
} finally {
|
|
3369
|
-
|
|
3435
|
+
_iterator5.f();
|
|
3370
3436
|
}
|
|
3371
|
-
var
|
|
3372
|
-
|
|
3437
|
+
var _iterator6 = _createForOfIteratorHelper(current.tables[_tableName].indexes),
|
|
3438
|
+
_step6;
|
|
3373
3439
|
try {
|
|
3374
|
-
var
|
|
3375
|
-
var index =
|
|
3440
|
+
var _loop5 = function _loop5() {
|
|
3441
|
+
var index = _step6.value;
|
|
3376
3442
|
logger('Checking index', index);
|
|
3377
3443
|
var indexFound = false;
|
|
3378
3444
|
|
|
@@ -3389,71 +3455,6 @@ var findDifferences = function findDifferences(expected, current) {
|
|
|
3389
3455
|
});
|
|
3390
3456
|
}
|
|
3391
3457
|
};
|
|
3392
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
3393
|
-
_loop3();
|
|
3394
|
-
}
|
|
3395
|
-
|
|
3396
|
-
//verify triggers
|
|
3397
|
-
} catch (err) {
|
|
3398
|
-
_iterator4.e(err);
|
|
3399
|
-
} finally {
|
|
3400
|
-
_iterator4.f();
|
|
3401
|
-
}
|
|
3402
|
-
logger('Verifying triggers for table', _tableName);
|
|
3403
|
-
var _iterator5 = _createForOfIteratorHelper(triggers),
|
|
3404
|
-
_step5;
|
|
3405
|
-
try {
|
|
3406
|
-
var _loop4 = function _loop4() {
|
|
3407
|
-
var trigger = _step5.value;
|
|
3408
|
-
var currentTrigger = current.tables[_tableName].triggers.find(function (t) {
|
|
3409
|
-
return t.Name === trigger.Name;
|
|
3410
|
-
});
|
|
3411
|
-
if (!currentTrigger) {
|
|
3412
|
-
logger('Missing trigger', trigger);
|
|
3413
|
-
differences.push({
|
|
3414
|
-
type: 'missing_trigger',
|
|
3415
|
-
tableName: _tableName,
|
|
3416
|
-
trigger: trigger
|
|
3417
|
-
});
|
|
3418
|
-
} else {
|
|
3419
|
-
// Compare additional properties if needed
|
|
3420
|
-
if (currentTrigger.Event !== trigger.Event || currentTrigger.Statement !== trigger.Statement) {
|
|
3421
|
-
logger('Mismatched trigger', {
|
|
3422
|
-
expected: trigger,
|
|
3423
|
-
current: currentTrigger
|
|
3424
|
-
});
|
|
3425
|
-
differences.push({
|
|
3426
|
-
type: 'mismatched_trigger',
|
|
3427
|
-
tableName: _tableName,
|
|
3428
|
-
trigger: trigger
|
|
3429
|
-
});
|
|
3430
|
-
}
|
|
3431
|
-
}
|
|
3432
|
-
};
|
|
3433
|
-
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
3434
|
-
_loop4();
|
|
3435
|
-
}
|
|
3436
|
-
} catch (err) {
|
|
3437
|
-
_iterator5.e(err);
|
|
3438
|
-
} finally {
|
|
3439
|
-
_iterator5.f();
|
|
3440
|
-
}
|
|
3441
|
-
var _iterator6 = _createForOfIteratorHelper(current.tables[_tableName].triggers),
|
|
3442
|
-
_step6;
|
|
3443
|
-
try {
|
|
3444
|
-
var _loop5 = function _loop5() {
|
|
3445
|
-
var trigger = _step6.value;
|
|
3446
|
-
if (!triggers.some(function (t) {
|
|
3447
|
-
return t.Name === trigger.Name;
|
|
3448
|
-
})) {
|
|
3449
|
-
logger('Extra trigger', trigger);
|
|
3450
|
-
differences.push({
|
|
3451
|
-
type: 'extra_trigger',
|
|
3452
|
-
tableName: _tableName,
|
|
3453
|
-
trigger: trigger
|
|
3454
|
-
});
|
|
3455
|
-
}
|
|
3456
|
-
};
|
|
3457
3458
|
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
3458
3459
|
_loop5();
|
|
3459
3460
|
}
|
|
@@ -4058,12 +4059,12 @@ var compareAllDatabases = /*#__PURE__*/function () {
|
|
|
4058
4059
|
expectedDatabases = expectedDatabases.filter(function (file) {
|
|
4059
4060
|
return file !== 'dumpInfo.json';
|
|
4060
4061
|
});
|
|
4061
|
-
|
|
4062
|
+
console.log('Expected databases from input directory:', expectedDatabases);
|
|
4062
4063
|
|
|
4063
4064
|
// Check existing databases
|
|
4064
|
-
_context.next =
|
|
4065
|
+
_context.next = 14;
|
|
4065
4066
|
return getDatabases(connection);
|
|
4066
|
-
case
|
|
4067
|
+
case 14:
|
|
4067
4068
|
existingDatabases = _context.sent;
|
|
4068
4069
|
// console.log('Existing databases:', existingDatabases);
|
|
4069
4070
|
allDifferences = {};
|
|
@@ -4072,20 +4073,20 @@ var compareAllDatabases = /*#__PURE__*/function () {
|
|
|
4072
4073
|
|
|
4073
4074
|
// Note missing databases and prepare to create them
|
|
4074
4075
|
_iterator = _createForOfIteratorHelper(expectedDatabases);
|
|
4075
|
-
_context.prev =
|
|
4076
|
+
_context.prev = 19;
|
|
4076
4077
|
_iterator.s();
|
|
4077
|
-
case
|
|
4078
|
+
case 21:
|
|
4078
4079
|
if ((_step = _iterator.n()).done) {
|
|
4079
|
-
_context.next =
|
|
4080
|
+
_context.next = 28;
|
|
4080
4081
|
break;
|
|
4081
4082
|
}
|
|
4082
4083
|
_database = _step.value;
|
|
4083
4084
|
if (!(options && options.database && options.database !== _database)) {
|
|
4084
|
-
_context.next =
|
|
4085
|
+
_context.next = 25;
|
|
4085
4086
|
break;
|
|
4086
4087
|
}
|
|
4087
|
-
return _context.abrupt("continue",
|
|
4088
|
-
case
|
|
4088
|
+
return _context.abrupt("continue", 26);
|
|
4089
|
+
case 25:
|
|
4089
4090
|
if (!existingDatabases.includes(_database)) {
|
|
4090
4091
|
allDifferences[_database] = [{
|
|
4091
4092
|
database: _database,
|
|
@@ -4094,58 +4095,58 @@ var compareAllDatabases = /*#__PURE__*/function () {
|
|
|
4094
4095
|
}];
|
|
4095
4096
|
missingDatabases.push(_database);
|
|
4096
4097
|
}
|
|
4097
|
-
case
|
|
4098
|
-
_context.next =
|
|
4098
|
+
case 26:
|
|
4099
|
+
_context.next = 21;
|
|
4099
4100
|
break;
|
|
4100
|
-
case
|
|
4101
|
-
_context.next =
|
|
4101
|
+
case 28:
|
|
4102
|
+
_context.next = 33;
|
|
4102
4103
|
break;
|
|
4103
|
-
case
|
|
4104
|
-
_context.prev =
|
|
4105
|
-
_context.t0 = _context["catch"](
|
|
4104
|
+
case 30:
|
|
4105
|
+
_context.prev = 30;
|
|
4106
|
+
_context.t0 = _context["catch"](19);
|
|
4106
4107
|
_iterator.e(_context.t0);
|
|
4107
|
-
case
|
|
4108
|
-
_context.prev =
|
|
4108
|
+
case 33:
|
|
4109
|
+
_context.prev = 33;
|
|
4109
4110
|
_iterator.f();
|
|
4110
|
-
return _context.finish(
|
|
4111
|
-
case
|
|
4111
|
+
return _context.finish(33);
|
|
4112
|
+
case 36:
|
|
4112
4113
|
if (!(missingDatabases.length > 0 && update)) {
|
|
4113
|
-
_context.next =
|
|
4114
|
+
_context.next = 59;
|
|
4114
4115
|
break;
|
|
4115
4116
|
}
|
|
4116
4117
|
console.log('Creating missing databases:');
|
|
4117
4118
|
_iterator2 = _createForOfIteratorHelper(missingDatabases);
|
|
4118
|
-
_context.prev =
|
|
4119
|
+
_context.prev = 39;
|
|
4119
4120
|
_iterator2.s();
|
|
4120
|
-
case
|
|
4121
|
+
case 41:
|
|
4121
4122
|
if ((_step2 = _iterator2.n()).done) {
|
|
4122
|
-
_context.next =
|
|
4123
|
+
_context.next = 49;
|
|
4123
4124
|
break;
|
|
4124
4125
|
}
|
|
4125
4126
|
database = _step2.value;
|
|
4126
4127
|
console.log("Creating database ".concat(database, "..."));
|
|
4127
|
-
_context.next =
|
|
4128
|
+
_context.next = 46;
|
|
4128
4129
|
return connection.query("CREATE DATABASE `".concat(database, "`;"));
|
|
4129
|
-
case 45:
|
|
4130
|
-
console.log("Database ".concat(database, " created."));
|
|
4131
4130
|
case 46:
|
|
4132
|
-
|
|
4131
|
+
console.log("Database ".concat(database, " created."));
|
|
4132
|
+
case 47:
|
|
4133
|
+
_context.next = 41;
|
|
4133
4134
|
break;
|
|
4134
|
-
case
|
|
4135
|
-
_context.next =
|
|
4135
|
+
case 49:
|
|
4136
|
+
_context.next = 54;
|
|
4136
4137
|
break;
|
|
4137
|
-
case
|
|
4138
|
-
_context.prev =
|
|
4139
|
-
_context.t1 = _context["catch"](
|
|
4138
|
+
case 51:
|
|
4139
|
+
_context.prev = 51;
|
|
4140
|
+
_context.t1 = _context["catch"](39);
|
|
4140
4141
|
_iterator2.e(_context.t1);
|
|
4141
|
-
case
|
|
4142
|
-
_context.prev =
|
|
4142
|
+
case 54:
|
|
4143
|
+
_context.prev = 54;
|
|
4143
4144
|
_iterator2.f();
|
|
4144
|
-
return _context.finish(
|
|
4145
|
-
case
|
|
4146
|
-
_context.next =
|
|
4145
|
+
return _context.finish(54);
|
|
4146
|
+
case 57:
|
|
4147
|
+
_context.next = 60;
|
|
4147
4148
|
break;
|
|
4148
|
-
case
|
|
4149
|
+
case 59:
|
|
4149
4150
|
if (missingDatabases.length > 0 && !update) {
|
|
4150
4151
|
console.error('Missing databases found but update is not enabled. Please enable update to create missing databases.');
|
|
4151
4152
|
console.error('Please run the command again with the --update flag to create missing databases.');
|
|
@@ -4154,87 +4155,87 @@ var compareAllDatabases = /*#__PURE__*/function () {
|
|
|
4154
4155
|
} else {
|
|
4155
4156
|
console.log('All expected databases exist.');
|
|
4156
4157
|
}
|
|
4157
|
-
case
|
|
4158
|
+
case 60:
|
|
4158
4159
|
_iterator3 = _createForOfIteratorHelper(expectedDatabases);
|
|
4159
|
-
_context.prev =
|
|
4160
|
+
_context.prev = 61;
|
|
4160
4161
|
_iterator3.s();
|
|
4161
|
-
case
|
|
4162
|
+
case 63:
|
|
4162
4163
|
if ((_step3 = _iterator3.n()).done) {
|
|
4163
|
-
_context.next =
|
|
4164
|
+
_context.next = 101;
|
|
4164
4165
|
break;
|
|
4165
4166
|
}
|
|
4166
4167
|
_database2 = _step3.value;
|
|
4167
4168
|
if (!(options && options.database && options.database !== _database2)) {
|
|
4168
|
-
_context.next =
|
|
4169
|
+
_context.next = 67;
|
|
4169
4170
|
break;
|
|
4170
4171
|
}
|
|
4171
|
-
return _context.abrupt("continue",
|
|
4172
|
-
case
|
|
4172
|
+
return _context.abrupt("continue", 99);
|
|
4173
|
+
case 67:
|
|
4173
4174
|
if (!missingDatabases.includes(_database2)) {
|
|
4174
|
-
_context.next =
|
|
4175
|
+
_context.next = 70;
|
|
4175
4176
|
break;
|
|
4176
4177
|
}
|
|
4177
4178
|
console.log('Skipping database', _database2, 'because it is missing');
|
|
4178
|
-
return _context.abrupt("continue",
|
|
4179
|
-
case
|
|
4179
|
+
return _context.abrupt("continue", 99);
|
|
4180
|
+
case 70:
|
|
4180
4181
|
filePath = path.join(inputDir, _database2, "".concat(_database2, ".json"));
|
|
4181
|
-
_context.prev =
|
|
4182
|
-
_context.next =
|
|
4182
|
+
_context.prev = 71;
|
|
4183
|
+
_context.next = 74;
|
|
4183
4184
|
return fs.readFile(filePath, 'utf-8');
|
|
4184
|
-
case
|
|
4185
|
+
case 74:
|
|
4185
4186
|
fileContent = _context.sent;
|
|
4186
4187
|
expectedStructure = JSON.parse(fileContent);
|
|
4187
4188
|
console.log('Getting database structure for', _database2);
|
|
4188
|
-
_context.next =
|
|
4189
|
+
_context.next = 79;
|
|
4189
4190
|
return getDatabaseStructure(connection, _database2, command, options);
|
|
4190
|
-
case
|
|
4191
|
+
case 79:
|
|
4191
4192
|
currentStructure = _context.sent;
|
|
4192
4193
|
console.log('Database structure for', _database2, 'obtained');
|
|
4193
4194
|
differences = findDifferences(expectedStructure, currentStructure);
|
|
4194
4195
|
console.log('Differences for', _database2, 'obtained');
|
|
4195
4196
|
if (update) {
|
|
4196
|
-
_context.next =
|
|
4197
|
+
_context.next = 88;
|
|
4197
4198
|
break;
|
|
4198
4199
|
}
|
|
4199
4200
|
console.log('Logging differences for', _database2);
|
|
4200
4201
|
logDifferences(differences, _database2, true);
|
|
4201
|
-
_context.next =
|
|
4202
|
+
_context.next = 93;
|
|
4202
4203
|
break;
|
|
4203
|
-
case
|
|
4204
|
+
case 88:
|
|
4204
4205
|
console.log('Logging differences for', _database2);
|
|
4205
4206
|
logDifferences(differences, _database2, false);
|
|
4206
4207
|
console.log('Applying differences for', _database2);
|
|
4207
|
-
_context.next =
|
|
4208
|
+
_context.next = 93;
|
|
4208
4209
|
return applyDifferences(connection, _database2, differences);
|
|
4209
|
-
case
|
|
4210
|
+
case 93:
|
|
4210
4211
|
allDifferences[_database2] = differences;
|
|
4211
|
-
_context.next =
|
|
4212
|
+
_context.next = 99;
|
|
4212
4213
|
break;
|
|
4213
|
-
case
|
|
4214
|
-
_context.prev =
|
|
4215
|
-
_context.t2 = _context["catch"](
|
|
4214
|
+
case 96:
|
|
4215
|
+
_context.prev = 96;
|
|
4216
|
+
_context.t2 = _context["catch"](71);
|
|
4216
4217
|
console.error("Error processing database ".concat(_database2, ":"), _context.t2.message);
|
|
4217
|
-
case
|
|
4218
|
-
_context.next =
|
|
4218
|
+
case 99:
|
|
4219
|
+
_context.next = 63;
|
|
4219
4220
|
break;
|
|
4220
|
-
case
|
|
4221
|
-
_context.next =
|
|
4221
|
+
case 101:
|
|
4222
|
+
_context.next = 106;
|
|
4222
4223
|
break;
|
|
4223
|
-
case
|
|
4224
|
-
_context.prev =
|
|
4225
|
-
_context.t3 = _context["catch"](
|
|
4224
|
+
case 103:
|
|
4225
|
+
_context.prev = 103;
|
|
4226
|
+
_context.t3 = _context["catch"](61);
|
|
4226
4227
|
_iterator3.e(_context.t3);
|
|
4227
|
-
case
|
|
4228
|
-
_context.prev =
|
|
4228
|
+
case 106:
|
|
4229
|
+
_context.prev = 106;
|
|
4229
4230
|
_iterator3.f();
|
|
4230
|
-
return _context.finish(
|
|
4231
|
-
case 108:
|
|
4232
|
-
return _context.abrupt("return", allDifferences);
|
|
4231
|
+
return _context.finish(106);
|
|
4233
4232
|
case 109:
|
|
4233
|
+
return _context.abrupt("return", allDifferences);
|
|
4234
|
+
case 110:
|
|
4234
4235
|
case "end":
|
|
4235
4236
|
return _context.stop();
|
|
4236
4237
|
}
|
|
4237
|
-
}, _callee, null, [[
|
|
4238
|
+
}, _callee, null, [[19, 30, 33, 36], [39, 51, 54, 57], [61, 103, 106, 109], [71, 96]]);
|
|
4238
4239
|
}));
|
|
4239
4240
|
return function compareAllDatabases(_x, _x2) {
|
|
4240
4241
|
return _ref.apply(this, arguments);
|
package/package.json
CHANGED
package/src/compare.js
CHANGED
|
@@ -15,7 +15,7 @@ export const compareAllDatabases = async (connection, inputDir, update = false,
|
|
|
15
15
|
expectedDatabases = expectedDatabases.filter(file => file !== 'diffs.json');
|
|
16
16
|
//filter out dumpInfo.json
|
|
17
17
|
expectedDatabases = expectedDatabases.filter(file => file !== 'dumpInfo.json');
|
|
18
|
-
|
|
18
|
+
console.log('Expected databases from input directory:', expectedDatabases);
|
|
19
19
|
|
|
20
20
|
// Check existing databases
|
|
21
21
|
const existingDatabases = await getDatabases(connection);
|
package/src/differences.js
CHANGED
|
@@ -15,12 +15,39 @@ export const findDifferences = (expected, current) => {
|
|
|
15
15
|
if (!expected.tables) throw new Error('No tables found in expected');
|
|
16
16
|
for (const [tableName, contents] of Object.entries(expected.tables)) {
|
|
17
17
|
//check if craete table matches from json, if so, we dont need to compare indexes, triggers, or fields
|
|
18
|
+
const { columns, indexes, triggers, createSQL, name, engine, charset, collate } = contents;
|
|
19
|
+
|
|
18
20
|
|
|
19
21
|
if (!current.tables[tableName]) {
|
|
20
22
|
console.log('missing_table', contents);
|
|
21
23
|
differences.push({ type: 'missing_table', tableName, createSQL: contents.createSQL });
|
|
22
24
|
continue;
|
|
23
25
|
}
|
|
26
|
+
try {
|
|
27
|
+
//verify triggers
|
|
28
|
+
logger('Verifying triggers for table', tableName);
|
|
29
|
+
for (const trigger of triggers) {
|
|
30
|
+
const currentTrigger = current.tables[tableName].triggers.find(t => t.Name === trigger.Name);
|
|
31
|
+
if (!currentTrigger) {
|
|
32
|
+
logger('Missing trigger', trigger);
|
|
33
|
+
differences.push({ type: 'missing_trigger', tableName, trigger });
|
|
34
|
+
} else {
|
|
35
|
+
// Compare additional properties if needed
|
|
36
|
+
if (currentTrigger.Event !== trigger.Event || currentTrigger.Statement !== trigger.Statement) {
|
|
37
|
+
logger('Mismatched trigger', { expected: trigger, current: currentTrigger });
|
|
38
|
+
differences.push({ type: 'mismatched_trigger', tableName, trigger });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const trigger of current.tables[tableName].triggers) {
|
|
43
|
+
if (!triggers.some(t => t.Name === trigger.Name)) {
|
|
44
|
+
logger('Extra trigger', trigger);
|
|
45
|
+
differences.push({ type: 'extra_trigger', tableName, trigger });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} catch (e) {
|
|
49
|
+
console.error(`Error verifying triggers for table ${tableName}`, e);
|
|
50
|
+
}
|
|
24
51
|
|
|
25
52
|
const createTableSql = current.tables[tableName].createSQL;
|
|
26
53
|
if (createTableSql === contents.createSQL) {
|
|
@@ -31,7 +58,6 @@ export const findDifferences = (expected, current) => {
|
|
|
31
58
|
logger(createTableSql);
|
|
32
59
|
logger(contents.createSQL);
|
|
33
60
|
}
|
|
34
|
-
const { columns, indexes, triggers, createSQL, name, engine, charset, collate } = contents;
|
|
35
61
|
|
|
36
62
|
|
|
37
63
|
const currentFieldNames = current.tables[tableName].columns.map(f => f.Field);
|
|
@@ -70,11 +96,11 @@ export const findDifferences = (expected, current) => {
|
|
|
70
96
|
differences.push({ type: 'mismatched_field', info: "Default", tableName, field, currentField });
|
|
71
97
|
}
|
|
72
98
|
if (field.Type !== currentField.Type) {
|
|
73
|
-
if(field.Type == 'int' && currentField.Type.startsWith('int(')) continue; // int(11) is the default for int and used on older versions of mysql
|
|
74
|
-
if(field.Type == 'smallint' && currentField.Type.startsWith('smallint(')) continue; // smallint(6) is the default for smallint and used on older versions of mysql
|
|
75
|
-
if(field.Type == 'tinyint' && currentField.Type.startsWith('tinyint(')) continue; // tinyint(1) is the default for tinyint and used on older versions of mysql
|
|
76
|
-
if(field.Type == 'varchar' && currentField.Type.startsWith('varchar(')) continue; // varchar(255) is the default for varchar and used on older versions of mysql
|
|
77
|
-
if(field.Type == 'bigint' && currentField.Type.startsWith('bigint(')) continue; // bigint(20) is the default for bigint and used on older versions of mysql
|
|
99
|
+
if (field.Type == 'int' && currentField.Type.startsWith('int(')) continue; // int(11) is the default for int and used on older versions of mysql
|
|
100
|
+
if (field.Type == 'smallint' && currentField.Type.startsWith('smallint(')) continue; // smallint(6) is the default for smallint and used on older versions of mysql
|
|
101
|
+
if (field.Type == 'tinyint' && currentField.Type.startsWith('tinyint(')) continue; // tinyint(1) is the default for tinyint and used on older versions of mysql
|
|
102
|
+
if (field.Type == 'varchar' && currentField.Type.startsWith('varchar(')) continue; // varchar(255) is the default for varchar and used on older versions of mysql
|
|
103
|
+
if (field.Type == 'bigint' && currentField.Type.startsWith('bigint(')) continue; // bigint(20) is the default for bigint and used on older versions of mysql
|
|
78
104
|
differences.push({ type: 'mismatched_field', info: "Type", tableName, field, currentField });
|
|
79
105
|
}
|
|
80
106
|
}
|
|
@@ -112,27 +138,7 @@ export const findDifferences = (expected, current) => {
|
|
|
112
138
|
}
|
|
113
139
|
}
|
|
114
140
|
|
|
115
|
-
|
|
116
|
-
logger('Verifying triggers for table', tableName);
|
|
117
|
-
for (const trigger of triggers) {
|
|
118
|
-
const currentTrigger = current.tables[tableName].triggers.find(t => t.Name === trigger.Name);
|
|
119
|
-
if (!currentTrigger) {
|
|
120
|
-
logger('Missing trigger', trigger);
|
|
121
|
-
differences.push({ type: 'missing_trigger', tableName, trigger });
|
|
122
|
-
} else {
|
|
123
|
-
// Compare additional properties if needed
|
|
124
|
-
if (currentTrigger.Event !== trigger.Event || currentTrigger.Statement !== trigger.Statement) {
|
|
125
|
-
logger('Mismatched trigger', { expected: trigger, current: currentTrigger });
|
|
126
|
-
differences.push({ type: 'mismatched_trigger', tableName, trigger });
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
for (const trigger of current.tables[tableName].triggers) {
|
|
131
|
-
if (!triggers.some(t => t.Name === trigger.Name)) {
|
|
132
|
-
logger('Extra trigger', trigger);
|
|
133
|
-
differences.push({ type: 'extra_trigger', tableName, trigger });
|
|
134
|
-
}
|
|
135
|
-
}
|
|
141
|
+
|
|
136
142
|
}
|
|
137
143
|
|
|
138
144
|
|
package/src/dump.js
CHANGED