db-migrate
Advanced tools
Comparing version 0.5.3 to 0.5.4
@@ -165,1 +165,6 @@ ## 0.1.0 | ||
- Fixed bug setting default values to values that are falsy #114 (via @wbrady) | ||
## 0.5.4 | ||
Fix: | ||
- Add backticks to MySQL driver #114 (via @mstorgaard) |
@@ -50,2 +50,3 @@ var util = require('util'); | ||
createColumnDef: function(name, spec, options) { | ||
name = util.format('`%s`', name); | ||
var t = this.mapDataType(spec); | ||
@@ -101,12 +102,105 @@ var len; | ||
createTable: function(tableName, options, callback) { | ||
log.verbose('creating table:', tableName); | ||
var columnSpecs = options; | ||
var tableOptions = {}; | ||
if (options.columns !== undefined) { | ||
columnSpecs = options.columns; | ||
delete options.columns; | ||
tableOptions = options; | ||
} | ||
var ifNotExistsSql = ""; | ||
if(tableOptions.ifNotExists) { | ||
ifNotExistsSql = "IF NOT EXISTS"; | ||
} | ||
var primaryKeyColumns = []; | ||
var columnDefOptions = { | ||
emitPrimaryKey: false | ||
}; | ||
for (var columnName in columnSpecs) { | ||
var columnSpec = this.normalizeColumnSpec(columnSpecs[columnName]); | ||
columnSpecs[columnName] = columnSpec; | ||
if (columnSpec.primaryKey) { | ||
primaryKeyColumns.push(columnName); | ||
} | ||
} | ||
var pkSql = ''; | ||
if (primaryKeyColumns.length > 1) { | ||
pkSql = util.format(', PRIMARY KEY (`%s`)', primaryKeyColumns.join('`, `')); | ||
} else { | ||
columnDefOptions.emitPrimaryKey = true; | ||
} | ||
var columnDefs = []; | ||
for (var columnName in columnSpecs) { | ||
var columnSpec = columnSpecs[columnName]; | ||
columnDefs.push(this.createColumnDef(columnName, columnSpec, columnDefOptions)); | ||
} | ||
var sql = util.format('CREATE TABLE %s `%s` (%s%s)', ifNotExistsSql, tableName, columnDefs.join(', '), pkSql); | ||
this.runSql(sql, callback); | ||
}, | ||
renameTable: function(tableName, newTableName, callback) { | ||
var sql = util.format('RENAME TABLE %s TO %s', tableName, newTableName); | ||
var sql = util.format('RENAME TABLE `%s` TO `%s`', tableName, newTableName); | ||
this.runSql(sql, callback); | ||
}, | ||
addColumn: function(tableName, columnName, columnSpec, callback) { | ||
var def = this.createColumnDef(columnName, this.normalizeColumnSpec(columnSpec)); | ||
var sql = util.format('ALTER TABLE `%s` ADD COLUMN %s', tableName, def); | ||
this.runSql(sql, callback); | ||
}, | ||
removeColumn: function(tableName, columnName, callback) { | ||
var sql = util.format('ALTER TABLE %s DROP COLUMN %s', tableName, columnName); | ||
var sql = util.format('ALTER TABLE `%s` DROP COLUMN `%s`', tableName, columnName); | ||
this.runSql(sql, callback); | ||
}, | ||
addIndex: function(tableName, indexName, columns, unique, callback) { | ||
if (typeof(unique) === 'function') { | ||
callback = unique; | ||
unique = false; | ||
} | ||
if (!Array.isArray(columns)) { | ||
columns = [columns]; | ||
} | ||
var sql = util.format('CREATE %s INDEX `%s` ON `%s` (`%s`)', (unique ? 'UNIQUE' : ''), indexName, tableName, columns.join('`, `')); | ||
this.runSql(sql, callback); | ||
}, | ||
insert: function(tableName, columnNameArray, valueArray, callback) { | ||
if (columnNameArray.length !== valueArray.length) { | ||
return callback(new Error('The number of columns does not match the number of values.')); | ||
} | ||
var sql = util.format('INSERT INTO `%s` ', tableName); | ||
var columnNames = '('; | ||
var values = 'VALUES ('; | ||
for (var index in columnNameArray) { | ||
columnNames += '`' + columnNameArray[index] + '`'; | ||
if (typeof(valueArray[index]) === 'string') { | ||
values += "'" + valueArray[index].replace("'", "''") + "'"; | ||
} else { | ||
values += valueArray[index]; | ||
} | ||
if (index != columnNameArray.length - 1) { | ||
columnNames += ","; | ||
values += ","; | ||
} | ||
} | ||
sql += columnNames + ') '+ values + ');'; | ||
this.runSql(sql, callback); | ||
}, | ||
removeIndex: function(tableName, indexName, callback) { | ||
@@ -123,3 +217,3 @@ // tableName is optional for other drivers, but required for mySql. So, check the args to ensure they are valid | ||
var sql = util.format('DROP INDEX %s ON %s', indexName, tableName); | ||
var sql = util.format('DROP INDEX `%s` ON `%s`', indexName, tableName); | ||
this.runSql(sql, callback); | ||
@@ -132,3 +226,3 @@ }, | ||
var columnType = result[0].COLUMN_TYPE; | ||
var alterSql = util.format("ALTER TABLE %s CHANGE %s %s %s", tableName, oldColumnName, newColumnName, columnType); | ||
var alterSql = util.format("ALTER TABLE `%s` CHANGE `%s` `%s` %s", tableName, oldColumnName, newColumnName, columnType); | ||
self.runSql(alterSql, callback); | ||
@@ -140,3 +234,3 @@ }); | ||
var constraint = this.createColumnDef(columnName, columnSpec); | ||
var sql = util.format('ALTER TABLE %s CHANGE COLUMN %s %s', tableName, columnName, constraint); | ||
var sql = util.format('ALTER TABLE `%s` CHANGE COLUMN `%s` %s', tableName, columnName, constraint); | ||
this.runSql(sql, callback); | ||
@@ -147,3 +241,3 @@ }, | ||
var formattedDate = moment(new Date()).format('YYYY-MM-DD HH:mm:ss'); | ||
this.runSql('INSERT INTO migrations (name, run_on) VALUES (?, ?)', [name, formattedDate], callback); | ||
this.runSql('INSERT INTO migrations (`name`, `run_on`) VALUES (?, ?)', [name, formattedDate], callback); | ||
}, | ||
@@ -150,0 +244,0 @@ |
@@ -14,3 +14,3 @@ { | ||
], | ||
"version": "0.5.3", | ||
"version": "0.5.4", | ||
"engines": { | ||
@@ -17,0 +17,0 @@ "node": ">=0.6.0" |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
97480
1618