Skip to content

Commit b465133

Browse files
committed
fix: sqlify to mariadb for autoincrement from sqlite
1 parent 0cdb40e commit b465133

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

src/column.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { exprToSQL } from './expr'
33
import { castToSQL } from './func'
44
import { tablesToSQL } from './tables'
55
import {
6-
autoIncreatementToSQL,
6+
autoIncrementToSQL,
77
columnIdentifierToSql,
88
commonOptionConnector,
99
commonTypeValue,
@@ -88,7 +88,7 @@ function columnOption(definition) {
8888
columnOpt.push(type.toUpperCase(), exprToSQL(value))
8989
}
9090
columnOpt.push(constraintDefinitionToSQL(check))
91-
columnOpt.push(autoIncreatementToSQL(autoIncrement), toUpper(uniquePrimary), commentToSQL(comment))
91+
columnOpt.push(autoIncrementToSQL(autoIncrement), toUpper(uniquePrimary), commentToSQL(comment))
9292
columnOpt.push(...commonTypeValue(characterSet))
9393
columnOpt.push(...commonTypeValue(collate))
9494
columnOpt.push(...commonTypeValue(columnFormat))

src/util.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,18 @@ function commonKeywordArgsToSQL(kwArgs) {
328328
return [toUpper(kwArgs.keyword), toUpper(kwArgs.args)]
329329
}
330330

331-
function autoIncreatementToSQL(autoIncreatement) {
332-
if (!autoIncreatement || typeof autoIncreatement === 'string') return toUpper(autoIncreatement)
333-
const { keyword, seed, increment, parentheses } = autoIncreatement
331+
function autoIncrementToSQL(autoIncrement) {
332+
if (!autoIncrement) return
333+
if (typeof autoIncrement === 'string') {
334+
const { database } = getParserOpt()
335+
switch (database && database.toLowerCase()) {
336+
case 'sqlite':
337+
return 'AUTOINCREMENT'
338+
default:
339+
return 'AUTO_INCREMENT'
340+
}
341+
}
342+
const { keyword, seed, increment, parentheses } = autoIncrement
334343
let result = toUpper(keyword)
335344
if (parentheses) result += `(${literalToSQL(seed)}, ${literalToSQL(increment)})`
336345
return result
@@ -342,7 +351,7 @@ function columnOrderListToSQL(columnOrderList) {
342351
}
343352

344353
export {
345-
arrayStructTypeToSQL, autoIncreatementToSQL,
354+
arrayStructTypeToSQL, autoIncrementToSQL,
346355
columnOrderListToSQL, commonKeywordArgsToSQL, commonOptionConnector,
347356
connector, commonTypeValue,commentToSQL, createBinaryExpr,
348357
createValueExpr, dataTypeToSQL, DEFAULT_OPT, escape, literalToSQL, columnIdentifierToSql,

test/sqlite.spec.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ const Parser = require('../src/parser').default
33

44
describe('sqlite', () => {
55
const parser = new Parser();
6+
const DEFAULT_OPT = { database: 'sqlite' }
67

7-
function getParsedSql(sql, opt = { database: 'sqlite' }) {
8+
function getParsedSql(sql, opt = DEFAULT_OPT) {
89
const ast = parser.astify(sql, opt);
910
return parser.sqlify(ast, opt);
1011
}
@@ -144,4 +145,10 @@ describe('sqlite', () => {
144145
const sql = 'CREATE TABLE IF NOT EXISTS "Test" (Id INTEGER NOT NULL UNIQUE, like TEXT NOT NULL, Difficulty TEXT, PRIMARY KEY(Id));'
145146
expect(getParsedSql(sql)).to.be.equal('CREATE TABLE IF NOT EXISTS `Test` (`Id` INTEGER NOT NULL UNIQUE, `like` TEXT NOT NULL, `Difficulty` TEXT, PRIMARY KEY (`Id`))')
146147
})
148+
149+
it('should support sqlify autoincrement to other db', () => {
150+
const sql = 'CREATE TABLE IF NOT EXISTS "SampleTable" ( "ID" INTEGER NOT NULL AUTOINCREMENT UNIQUE, "Name" TEXT NOT NULL);'
151+
const ast = parser.astify(sql, DEFAULT_OPT)
152+
expect(parser.sqlify(ast, { database: 'mariadb'})).to.be.equal('CREATE TABLE IF NOT EXISTS `SampleTable` (`ID` INTEGER NOT NULL AUTO_INCREMENT UNIQUE, `Name` TEXT NOT NULL)')
153+
})
147154
})

0 commit comments

Comments
 (0)