Skip to content

Commit c47c747

Browse files
author
Jeff Kunkle
committed
Added backticks to mysql driver
2 parents b5c9662 + 8882dd9 commit c47c747

File tree

1 file changed

+100
-6
lines changed

1 file changed

+100
-6
lines changed

lib/driver/mysql.js

Lines changed: 100 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ var MysqlDriver = Base.extend({
4747
},
4848

4949
createColumnDef: function(name, spec, options) {
50+
name = util.format('`%s`', name);
5051
var t = this.mapDataType(spec);
5152
var len;
5253
if(spec.type !== type.TEXT && spec.type !== type.BLOB) {
@@ -97,13 +98,106 @@ var MysqlDriver = Base.extend({
9798
return constraint.join(' ');
9899
},
99100

101+
createTable: function(tableName, options, callback) {
102+
log.verbose('creating table:', tableName);
103+
var columnSpecs = options;
104+
var tableOptions = {};
105+
106+
if (options.columns !== undefined) {
107+
columnSpecs = options.columns;
108+
delete options.columns;
109+
tableOptions = options;
110+
}
111+
112+
var ifNotExistsSql = "";
113+
if(tableOptions.ifNotExists) {
114+
ifNotExistsSql = "IF NOT EXISTS";
115+
}
116+
117+
var primaryKeyColumns = [];
118+
var columnDefOptions = {
119+
emitPrimaryKey: false
120+
};
121+
122+
for (var columnName in columnSpecs) {
123+
var columnSpec = this.normalizeColumnSpec(columnSpecs[columnName]);
124+
columnSpecs[columnName] = columnSpec;
125+
if (columnSpec.primaryKey) {
126+
primaryKeyColumns.push(columnName);
127+
}
128+
}
129+
130+
var pkSql = '';
131+
if (primaryKeyColumns.length > 1) {
132+
pkSql = util.format(', PRIMARY KEY (`%s`)', primaryKeyColumns.join('`, `'));
133+
} else {
134+
columnDefOptions.emitPrimaryKey = true;
135+
}
136+
137+
var columnDefs = [];
138+
for (var columnName in columnSpecs) {
139+
var columnSpec = columnSpecs[columnName];
140+
columnDefs.push(this.createColumnDef(columnName, columnSpec, columnDefOptions));
141+
}
142+
143+
var sql = util.format('CREATE TABLE %s `%s` (%s%s)', ifNotExistsSql, tableName, columnDefs.join(', '), pkSql);
144+
this.runSql(sql, callback);
145+
},
146+
100147
renameTable: function(tableName, newTableName, callback) {
101-
var sql = util.format('RENAME TABLE %s TO %s', tableName, newTableName);
148+
var sql = util.format('RENAME TABLE `%s` TO `%s`', tableName, newTableName);
149+
this.runSql(sql, callback);
150+
},
151+
152+
addColumn: function(tableName, columnName, columnSpec, callback) {
153+
var def = this.createColumnDef(columnName, this.normalizeColumnSpec(columnSpec));
154+
var sql = util.format('ALTER TABLE `%s` ADD COLUMN %s', tableName, def);
102155
this.runSql(sql, callback);
103156
},
104157

105158
removeColumn: function(tableName, columnName, callback) {
106-
var sql = util.format('ALTER TABLE %s DROP COLUMN %s', tableName, columnName);
159+
var sql = util.format('ALTER TABLE `%s` DROP COLUMN `%s`', tableName, columnName);
160+
this.runSql(sql, callback);
161+
},
162+
163+
addIndex: function(tableName, indexName, columns, unique, callback) {
164+
if (typeof(unique) === 'function') {
165+
callback = unique;
166+
unique = false;
167+
}
168+
169+
if (!Array.isArray(columns)) {
170+
columns = [columns];
171+
}
172+
var sql = util.format('CREATE %s INDEX `%s` ON `%s` (`%s`)', (unique ? 'UNIQUE' : ''), indexName, tableName, columns.join('`, `'));
173+
this.runSql(sql, callback);
174+
},
175+
176+
insert: function(tableName, columnNameArray, valueArray, callback) {
177+
if (columnNameArray.length !== valueArray.length) {
178+
return callback(new Error('The number of columns does not match the number of values.'));
179+
}
180+
181+
var sql = util.format('INSERT INTO `%s` ', tableName);
182+
var columnNames = '(';
183+
var values = 'VALUES (';
184+
185+
for (var index in columnNameArray) {
186+
columnNames += '`' + columnNameArray[index] + '`';
187+
188+
if (typeof(valueArray[index]) === 'string') {
189+
values += "'" + valueArray[index].replace("'", "''") + "'";
190+
} else {
191+
values += valueArray[index];
192+
}
193+
194+
if (index != columnNameArray.length - 1) {
195+
columnNames += ",";
196+
values += ",";
197+
}
198+
}
199+
200+
sql += columnNames + ') '+ values + ');';
107201
this.runSql(sql, callback);
108202
},
109203

@@ -118,28 +212,28 @@ var MysqlDriver = Base.extend({
118212
return;
119213
}
120214

121-
var sql = util.format('DROP INDEX %s ON %s', indexName, tableName);
215+
var sql = util.format('DROP INDEX `%s` ON `%s`', indexName, tableName);
122216
this.runSql(sql, callback);
123217
},
124218

125219
renameColumn: function(tableName, oldColumnName, newColumnName, callback) {
126220
var self = this, columnTypeSql = util.format("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '%s' AND COLUMN_NAME = '%s'", tableName, oldColumnName);
127221
this.all(columnTypeSql, function(err, result) {
128222
var columnType = result[0].COLUMN_TYPE;
129-
var alterSql = util.format("ALTER TABLE %s CHANGE %s %s %s", tableName, oldColumnName, newColumnName, columnType);
223+
var alterSql = util.format("ALTER TABLE `%s` CHANGE `%s` `%s` %s", tableName, oldColumnName, newColumnName, columnType);
130224
self.runSql(alterSql, callback);
131225
});
132226
},
133227

134228
changeColumn: function(tableName, columnName, columnSpec, callback) {
135229
var constraint = this.createColumnDef(columnName, columnSpec);
136-
var sql = util.format('ALTER TABLE %s CHANGE COLUMN %s %s', tableName, columnName, constraint);
230+
var sql = util.format('ALTER TABLE `%s` CHANGE COLUMN `%s` %s', tableName, columnName, constraint);
137231
this.runSql(sql, callback);
138232
},
139233

140234
addMigrationRecord: function (name, callback) {
141235
var formattedDate = moment(new Date()).format('YYYY-MM-DD HH:mm:ss');
142-
this.runSql('INSERT INTO migrations (name, run_on) VALUES (?, ?)', [name, formattedDate], callback);
236+
this.runSql('INSERT INTO migrations (`name`, `run_on`) VALUES (?, ?)', [name, formattedDate], callback);
143237
},
144238

145239
runSql: function() {

0 commit comments

Comments
 (0)