Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,16 @@ jobs:
env:
- DB: sqlite3
NODE_ENV: testing
- DB: better-sqlite3
NODE_ENV: testing-better-sqlite3
- DB: mysql8
NODE_ENV: testing-mysql
exclude:
# better-sqlite3 requires Node 20.x or later
- node: '18.12.1'
env:
DB: better-sqlite3
NODE_ENV: testing-better-sqlite3
env:
DB: ${{ matrix.env.DB }}
NODE_ENV: ${{ matrix.env.NODE_ENV }}
Expand Down
2 changes: 1 addition & 1 deletion lib/database.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ exports.drop = function drop(options) {
} else if (DatabaseInfo.isSQLite(connection)) {
// @NOTE: sqlite3 does not support "DROP DATABASE". We have to drop each table instead.
// @NOTE: We cannot just remove the sqlite3 file, because any database connection will get invalid.
return connection.raw('SELECT name FROM sqlite_master WHERE type="table";')
return connection.raw(`SELECT name FROM sqlite_master WHERE type='table';`)
.then(function (tables) {
return sequence(tables.map(table => () => {
if (table.name === 'sqlite_sequence') {
Expand Down
3 changes: 2 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1207,7 +1207,8 @@ KnexMigrator.prototype._integrityCheck = async function _integrityCheck(options)
}

// CASE: migration table does not exist
if (err.errno === 1 || err.errno === 1146) {
// errno 1 = sqlite3, errno 1146 = mysql, code SQLITE_ERROR = better-sqlite3
if (err.errno === 1 || err.errno === 1146 || err.code === 'SQLITE_ERROR') {
throw new errors.DatabaseIsNotOkError({
message: 'Please run `yarn knex-migrator init`',
code: 'MIGRATION_TABLE_IS_MISSING'
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
"sinon": "9.2.4"
},
"optionalDependencies": {
"better-sqlite3": "12.5.0",
"sqlite3": "5.1.7"
}
}
4 changes: 2 additions & 2 deletions test/assets/migrations/init/2-seed.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function insert(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Hausweib");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Hausweib');`);
};

module.exports.down = function insert(options) {
return options.connection.raw('DELETE FROM users where name="Hausweib";');
return options.connection.raw(`DELETE FROM users where name='Hausweib';`);
};
4 changes: 2 additions & 2 deletions test/assets/migrations/versions/1.0/1-another.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function update(options) {
return options.connection.raw('UPDATE users set name="LULULU";');
return options.connection.raw(`UPDATE users set name='LULULU';`);
};

module.exports.down = function createTables(options) {
return options.connection.update('UPDATE users set name="Hausweib";');
return options.connection.update(`UPDATE users set name='Hausweib';`);
};
4 changes: 2 additions & 2 deletions test/assets/migrations_1/init/2-seed.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function createTables(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Hausweib");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Hausweib');`);
};

module.exports.down = function createTables(options) {
return options.connection.raw('DELETE FROM users where name="Hausweib";');
return options.connection.raw(`DELETE FROM users where name='Hausweib';`);
};
4 changes: 2 additions & 2 deletions test/assets/migrations_2/init/2-seed.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function createTables(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Hausweib");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Hausweib');`);
};

module.exports.up = function createTables(options) {
return options.connection.raw('DELETE FROM users where name="Hausweib";');
return options.connection.raw(`DELETE FROM users where name='Hausweib';`);
};
2 changes: 1 addition & 1 deletion test/assets/migrations_3/init/2-seed.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports.up = function createTables(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Hausweib");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Hausweib');`);
};
2 changes: 1 addition & 1 deletion test/assets/migrations_3/init/3-fixtures.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports.up = function createTables(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Guido");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Guido');`);
};
4 changes: 2 additions & 2 deletions test/assets/migrations_4/init/2-seed.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function createTables(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Hausweib");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Hausweib');`);
};

module.exports.down = function createTables(options) {
return options.connection.raw('DELETE FROM users where name="Hausweib";');
return options.connection.raw(`DELETE FROM users where name='Hausweib';`);
};
4 changes: 2 additions & 2 deletions test/assets/migrations_4/versions/1.1/2-me.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function doesNothing(options) {
return options.connection.raw('INSERT INTO users (name, country) VALUES("Fun", "France");');
return options.connection.raw(`INSERT INTO users (name, country) VALUES('Fun', 'France');`);
};

module.exports.down = function doesNothing(options) {
return options.connection.raw('DELETE FROM users where name="Fun";');
return options.connection.raw(`DELETE FROM users where name='Fun';`);
};
4 changes: 2 additions & 2 deletions test/assets/migrations_4/versions/1.1/3-now.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function doesNothing(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("James");');
return options.connection.raw(`INSERT INTO users (name) VALUES('James');`);
};

module.exports.down = function doesNothing(options) {
return options.connection.raw('DELETE FROM users where name="James";');
return options.connection.raw(`DELETE FROM users where name='James';`);
};
2 changes: 1 addition & 1 deletion test/assets/migrations_5/init/2-seed.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports.up = function createTables(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Hausweib");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Hausweib');`);
};
2 changes: 1 addition & 1 deletion test/assets/migrations_5/versions/1.1/2-me.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports.up = function doesNothing(options) {
return options.connection.raw('INSERT INTO users (name, country) VALUES("Fun", "France");');
return options.connection.raw(`INSERT INTO users (name, country) VALUES('Fun', 'France');`);
};
2 changes: 1 addition & 1 deletion test/assets/migrations_5/versions/1.1/3-now.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports.up = function doesNothing(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("James");');
return options.connection.raw(`INSERT INTO users (name) VALUES('James');`);
};
2 changes: 1 addition & 1 deletion test/assets/migrations_5/versions/1.2/2-boy.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports.up = function doesSomething(options) {
return options.connection.raw('INSERT INTO dogs (type) VALUES("Zwergpudel");');
return options.connection.raw(`INSERT INTO dogs (type) VALUES('Zwergpudel');`);
};
4 changes: 2 additions & 2 deletions test/assets/migrations_6/init/2-seed.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module.exports.up = function createTables(options) {
return options.connection.raw('INSERT INTO users (name) VALUES("Hausweib");');
return options.connection.raw(`INSERT INTO users (name) VALUES('Hausweib');`);
};

module.exports.up = function createTables(options) {
return options.connection.raw('DELETE FROM users where name="Hausweib";');
return options.connection.raw(`DELETE FROM users where name='Hausweib';`);
};
2 changes: 1 addition & 1 deletion test/assets/migrations_7/init/2-seed.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ module.exports.up = function createTables() {
};

module.exports.down = function createTables(options) {
return options.connection.raw('DELETE FROM users where name="Hausweib";');
return options.connection.raw(`DELETE FROM users where name='Hausweib';`);
};
9 changes: 9 additions & 0 deletions test/config/env/config.testing-better-sqlite3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"database": {
"client": "better-sqlite3",
"connection": {
"filename": "test.db"
},
"useNullAsDefault": true
}
}
12 changes: 6 additions & 6 deletions test/functional/functional_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -259,13 +259,13 @@ _.each(['default', 'migrateInit'], function (initMethod) {
fs.mkdirSync(migrationsv12);

let jsFile = testUtils.generateMigrationScript({
up: 'UPDATE users set name="Hausmann";',
down: 'UPDATE users set name="LULULU";'
up: `UPDATE users set name='Hausmann';`,
down: `UPDATE users set name='LULULU';`
});

let jsFile1 = testUtils.generateMigrationScript({
up: 'UPDATE users set name="Kind";',
down: 'UPDATE users set name="Hausmann";'
up: `UPDATE users set name='Kind';`,
down: `UPDATE users set name='Hausmann';`
});

fs.writeFileSync(migrationsv11File, jsFile);
Expand Down Expand Up @@ -372,8 +372,8 @@ _.each(['default', 'migrateInit'], function (initMethod) {
fs.mkdirSync(migrationsv13);

let jsFile = testUtils.generateMigrationScript({
up: 'DELETE FROM users where name="Kind";',
down: 'INSERT INTO users (name) VALUES ("Kind");'
up: `DELETE FROM users where name='Kind';`,
down: `INSERT INTO users (name) VALUES ('Kind');`
});

fs.writeFileSync(migrationsv13File, jsFile);
Expand Down
6 changes: 6 additions & 0 deletions test/functional/implicit_commits_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,11 @@ describe('Implicit Commits', function () {
})
.catch(function (err) {
// table not found
// errno 1146 = mysql, errno 1 = sqlite3, code SQLITE_ERROR = better-sqlite3
if (['mysql', 'mysql2'].includes(config.get('database:client'))) {
err.errno.should.eql(1146);
} else if (err.code === 'SQLITE_ERROR') {
err.code.should.eql('SQLITE_ERROR');
} else {
err.errno.should.eql(1);
}
Expand Down Expand Up @@ -204,8 +207,11 @@ describe('Implicit Commits', function () {
})
.catch(function (err) {
// table not found
// errno 1146 = mysql, errno 1 = sqlite3, code SQLITE_ERROR = better-sqlite3
if (['mysql', 'mysql2'].includes(config.get('database:client'))) {
err.errno.should.eql(1146);
} else if (err.code === 'SQLITE_ERROR') {
err.code.should.eql('SQLITE_ERROR');
} else {
err.errno.should.eql(1);
}
Expand Down
4 changes: 2 additions & 2 deletions test/functional/rollback_1_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ describe('knex-migrator rollback (default)', function () {
fs.mkdirSync(migration121);

let jsFile = testUtils.generateMigrationScript({
up: 'UPDATE users set name="Kind";',
down: 'UPDATE users set name="Hausmann";'
up: `UPDATE users set name='Kind';`,
down: `UPDATE users set name='Hausmann';`
});

fs.writeFileSync(migration121File, jsFile);
Expand Down
4 changes: 2 additions & 2 deletions test/functional/rollback_2_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ describe('knex-migrator rollback (force)', function () {
fs.mkdirSync(migration121);

let jsFile = testUtils.generateMigrationScript({
up: 'UPDATE users set name="Kind";',
down: 'UPDATE users set name="Hausmann";'
up: `UPDATE users set name='Kind';`,
down: `UPDATE users set name='Hausmann';`
});

fs.writeFileSync(migration121File, jsFile);
Expand Down
4 changes: 2 additions & 2 deletions test/functional/rollback_4_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ describe('knex-migrator rollback (to specific version)', function () {
fs.mkdirSync(migration.folder);

let jsFile = testUtils.generateMigrationScript({
up: 'UPDATE users set name="Kind";',
down: 'UPDATE users set name="Hausmann";'
up: `UPDATE users set name='Kind';`,
down: `UPDATE users set name='Hausmann';`
});

fs.writeFileSync(migration.folder + '/' + migration.file, jsFile);
Expand Down
4 changes: 2 additions & 2 deletions test/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ exports.generateMigrationScript = function (options) {
down = options.down;

let script = 'module.exports.up = function something(options) {' +
'return options.connection.raw(\'' + up + '\');' +
'return options.connection.raw(`' + up + '`);' +
'};';

if (options.down) {
script += 'module.exports.down = function something(options) {' +
'return options.connection.raw(\'' + down + '\');' +
'return options.connection.raw(`' + down + '`);' +
'};';
}

Expand Down
8 changes: 8 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1500,6 +1500,14 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"

better-sqlite3@12.5.0:
version "12.5.0"
resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.5.0.tgz#c570873d9635b5d56baa52f7e72634c2c589f35f"
integrity sha512-WwCZ/5Diz7rsF29o27o0Gcc1Du+l7Zsv7SYtVPG0X3G/uUI1LqdxrQI7c9Hs2FWpqXXERjW9hp6g3/tH7DlVKg==
dependencies:
bindings "^1.5.0"
prebuild-install "^7.1.1"

binary-extensions@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
Expand Down