From ec818b825db228f48dfac8a3ea2cb5ba2d5b3fe5 Mon Sep 17 00:00:00 2001 From: Ivan Rubinson Date: Sat, 9 May 2020 12:42:45 +0300 Subject: [PATCH] fix(sqlite): Fix multiple primary keys results in syntax error Closes #12194 --- lib/dialects/sqlite/query-generator.js | 6 +++++- test/unit/dialects/sqlite/query-generator.test.js | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/dialects/sqlite/query-generator.js b/lib/dialects/sqlite/query-generator.js index b47140a88ad5..0a78f9807034 100644 --- a/lib/dialects/sqlite/query-generator.js +++ b/lib/dialects/sqlite/query-generator.js @@ -44,7 +44,11 @@ class SQLiteQueryGenerator extends MySqlQueryGenerator { if (needsMultiplePrimaryKeys) { primaryKeys.push(attr); - dataTypeString = dataType.replace('PRIMARY KEY', 'NOT NULL'); + if (dataType.includes('NOT NULL')) { + dataTypeString = dataType.replace(' PRIMARY KEY', ''); + } else { + dataTypeString = dataType.replace('PRIMARY KEY', 'NOT NULL'); + } } } attrArray.push(`${this.quoteIdentifier(attr)} ${dataTypeString}`); diff --git a/test/unit/dialects/sqlite/query-generator.test.js b/test/unit/dialects/sqlite/query-generator.test.js index 310942464ec0..062352d78b08 100644 --- a/test/unit/dialects/sqlite/query-generator.test.js +++ b/test/unit/dialects/sqlite/query-generator.test.js @@ -152,6 +152,10 @@ if (dialect === 'sqlite') { { arguments: ['myTable', { id: 'INTEGER PRIMARY KEY AUTOINCREMENT', name: 'VARCHAR(255)', surname: 'VARCHAR(255)' }, { uniqueKeys: { uniqueConstraint: { fields: ['name', 'surname'], customIndex: true } } }], expectation: 'CREATE TABLE IF NOT EXISTS `myTable` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `surname` VARCHAR(255), UNIQUE (`name`, `surname`));' + }, + { + arguments: ['myTable', { foo1: 'INTEGER PRIMARY KEY NOT NULL', foo2: 'INTEGER PRIMARY KEY NOT NULL' }], + expectation: 'CREATE TABLE IF NOT EXISTS `myTable` (`foo1` INTEGER NOT NULL, `foo2` INTEGER NOT NULL, PRIMARY KEY (`foo1`, `foo2`));' } ],