db-migrate-pg
Advanced tools
Comparing version 0.1.0 to 0.1.1
229
index.js
@@ -13,2 +13,3 @@ var util = require('util'); | ||
init: function(connection, schema) { | ||
this._escapeString = '\''; | ||
this._super(internals); | ||
@@ -22,5 +23,5 @@ this.connection = connection; | ||
if(!internals.notansactions) { | ||
if(!internals.notransactions) { | ||
return Promise.promisify(this.runSql.bind(this))('BEGIN;').nodeify(cb); | ||
return this.runSql('BEGIN;').nodeify(cb); | ||
} | ||
@@ -35,3 +36,3 @@ else | ||
return Promise.promisify(this.runSql.bind(this))('COMMIT;').nodeify(cb); | ||
return this.runSql('COMMIT;').nodeify(cb); | ||
} | ||
@@ -153,9 +154,7 @@ else | ||
this.runSql('select version() as version', function(err, result) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
return this.all('select version() as version') | ||
.then(function(result) { | ||
if (result && result.rows && result.rows.length > 0 && result.rows[0].version) { | ||
var version = result.rows[0].version; | ||
if (result && result && result.length > 0 && result[0].version) { | ||
var version = result[0].version; | ||
var match = version.match(/\d+\.\d+\.\d+/); | ||
@@ -169,9 +168,75 @@ if (match && match[0] && semver.gte(match[0], '9.1.0')) { | ||
// if necessary | ||
this.runSql("SHOW search_path", function(err, result) { | ||
if (err) { | ||
return callback(err); | ||
return this.all("SHOW search_path"); | ||
}.bind(this)) | ||
.then(function(result) { | ||
var searchPath, | ||
search_pathes = result[0].search_path.split(','); | ||
for (var i = 0; i < search_pathes.length; ++i) { | ||
if (search_pathes[i].indexOf('"') !== 0) { | ||
search_pathes[i] = '"' + search_pathes[i].trim() + '"'; | ||
} | ||
} | ||
var searchPath; | ||
result[0].search_path = search_pathes.join(','); | ||
// if the user specified a different schema, prepend it to the | ||
// search path. This will make all DDL/DML/SQL operate on the specified | ||
// schema. | ||
if (this.schema === 'public') { | ||
searchPath = result[0].search_path; | ||
} else { | ||
searchPath = '"' + this.schema + '",' + result[0].search_path; | ||
} | ||
return this.all('SET search_path TO ' + searchPath); | ||
}.bind(this)) | ||
.then(function() { | ||
return this.all("SELECT table_name FROM information_schema.tables WHERE table_name = '" + | ||
internals.migrationTable + "'" + | ||
((this.schema) ? | ||
" AND table_schema = '" + this.schema + "'" : | ||
'')); | ||
}.bind(this)) | ||
.then(function(result) { | ||
if (result && result && result.length < 1) { | ||
return this.createTable(internals.migrationTable, options); | ||
} else { | ||
return Promise.resolve(); | ||
} | ||
}.bind(this)).nodeify(callback); | ||
}, | ||
createSeedsTable: function(callback) { | ||
var options = { | ||
columns: { | ||
'id': { type: type.INTEGER, notNull: true, primaryKey: true, autoIncrement: true }, | ||
'name': { type: type.STRING, length: 255, notNull: true}, | ||
'run_on': { type: type.DATE_TIME, notNull: true} | ||
}, | ||
ifNotExists: false | ||
}; | ||
return this.all('select version() as version') | ||
.then(function(result) { | ||
if (result && result && result.length > 0 && result[0].version) { | ||
var version = result[0].version; | ||
var match = version.match(/\d+\.\d+\.\d+/); | ||
if (match && match[0] && semver.gte(match[0], '9.1.0')) { | ||
options.ifNotExists = true; | ||
} | ||
} | ||
// Get the current search path so we can change the current schema | ||
// if necessary | ||
return this.all("SHOW search_path"); | ||
}.bind(this)) | ||
.then(function(result) { | ||
var searchPath; | ||
// if the user specified a different schema, prepend it to the | ||
@@ -181,22 +246,25 @@ // search path. This will make all DDL/DML/SQL operate on the specified | ||
if (this.schema === 'public') { | ||
searchPath = result.rows[0].search_path; | ||
searchPath = result[0].search_path; | ||
} else { | ||
searchPath = this.schema + ',' + result.rows[0].search_path; | ||
searchPath = '"' + this.schema + '",' + result[0].search_path; | ||
} | ||
this.runSql('SET search_path TO ' + searchPath, function() { | ||
this.runSql("SELECT table_name FROM information_schema.tables WHERE table_name = '" + internals.migrationTable + "'", function(err, result) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
return this.all('SET search_path TO ' + searchPath); | ||
}.bind(this)) | ||
.then(function() { | ||
if (result && result.rows && result.rows.length < 1) { | ||
this.createTable(internals.migrationTable, options, callback); | ||
} else { | ||
callback(); | ||
} | ||
}.bind(this)); | ||
}.bind(this)); | ||
}.bind(this)); | ||
}.bind(this)); | ||
return this.all("SELECT table_name FROM information_schema.tables WHERE table_name = '" + | ||
internals.seedTable + "'" + | ||
((this.schema) ? | ||
" AND table_schema = '" + this.schema + "'" : | ||
'')); | ||
}.bind(this)) | ||
.then(function(result) { | ||
if (result && result && result.length < 1) { | ||
return this.createTable(internals.seedTable, options); | ||
} else { | ||
return Promise.resolve(); | ||
} | ||
}.bind(this)).nodeify(callback); | ||
}, | ||
@@ -242,3 +310,3 @@ | ||
var sql = util.format('ALTER TABLE "%s" RENAME TO "%s"', tableName, newTableName); | ||
this.runSql(sql, callback); | ||
return this.runSql(sql).nodeify(callback); | ||
}, | ||
@@ -248,3 +316,4 @@ | ||
var sql = util.format('ALTER TABLE "%s" DROP COLUMN "%s"', tableName, columnName); | ||
this.runSql(sql, callback); | ||
return this.runSql(sql).nodeify(callback); | ||
}, | ||
@@ -254,7 +323,7 @@ | ||
var sql = util.format('ALTER TABLE "%s" RENAME COLUMN "%s" TO "%s"', tableName, oldColumnName, newColumnName); | ||
this.runSql(sql, callback); | ||
return this.runSql(sql).nodeify(callback); | ||
}, | ||
changeColumn: function(tableName, columnName, columnSpec, callback) { | ||
setNotNull.call(this); | ||
return setNotNull.call(this); | ||
@@ -264,3 +333,4 @@ function setNotNull() { | ||
var sql = util.format('ALTER TABLE "%s" ALTER COLUMN "%s" %s NOT NULL', tableName, columnName, setOrDrop); | ||
this.runSql(sql, setUnique.bind(this)); | ||
return this.runSql(sql).nodeify(setUnique.bind(this)); | ||
} | ||
@@ -270,3 +340,3 @@ | ||
if (err) { | ||
callback(err); | ||
return Promise.reject(err); | ||
} | ||
@@ -279,8 +349,8 @@ | ||
sql = util.format('ALTER TABLE "%s" ADD CONSTRAINT "%s" UNIQUE ("%s")', tableName, constraintName, columnName); | ||
this.runSql(sql, setDefaultValue.bind(this)); | ||
return this.runSql(sql).nodeify(setDefaultValue.bind(this)); | ||
} else if (columnSpec.unique === false) { | ||
sql = util.format('ALTER TABLE "%s" DROP CONSTRAINT "%s"', tableName, constraintName); | ||
this.runSql(sql, setDefaultValue.bind(this)); | ||
return this.runSql(sql).nodeify(setDefaultValue.bind(this)); | ||
} else { | ||
setDefaultValue.call(this); | ||
return setDefaultValue.call(this); | ||
} | ||
@@ -291,3 +361,3 @@ } | ||
if (err) { | ||
return callback(err); | ||
return Promise.reject(err).nodeify(callback); | ||
} | ||
@@ -308,4 +378,14 @@ | ||
} | ||
return this.runSql(sql).then( | ||
setType.bind(this) | ||
).nodeify(callback); | ||
} | ||
this.runSql(sql, callback); | ||
function setType() { | ||
if (columnSpec.type !== undefined){ | ||
var using = columnSpec.using !== undefined ? | ||
columnSpec.using : util.format('USING "%s"::%s', columnName, this.mapDataType(columnSpec.type)) | ||
var sql = util.format('ALTER TABLE "%s" ALTER COLUMN "%s" TYPE %s %s', tableName, columnName, this.mapDataType(columnSpec.type), using); | ||
return this.runSql(sql); | ||
} | ||
} | ||
@@ -322,4 +402,4 @@ }, | ||
var sql = util.format('ALTER TABLE "%s" ADD CONSTRAINT "%s" FOREIGN KEY (%s) REFERENCES "%s" (%s) ON DELETE %s ON UPDATE %s', | ||
tableName, keyName, this.quoteArr(columns), referencedTableName, referencedColumns, rules.onDelete || 'NO ACTION', rules.onUpdate || 'NO ACTION'); | ||
this.runSql(sql, callback); | ||
tableName, keyName, this.quoteDDLArr(columns), referencedTableName, referencedColumns, rules.onDelete || 'NO ACTION', rules.onUpdate || 'NO ACTION'); | ||
return this.runSql(sql).nodeify(callback); | ||
}, | ||
@@ -329,22 +409,33 @@ | ||
var sql = util.format('ALTER TABLE "%s" DROP CONSTRAINT "%s"', tableName, keyName); | ||
this.runSql(sql, callback); | ||
return this.runSql(sql).nodeify(callback); | ||
}, | ||
insert: function(tableName, columnNameArray, valueArray, callback) { | ||
columnNameArray = columnNameArray.map(function(columnName) { | ||
return (columnName.charAt(0) != '"') ? '"' + columnName + '"' : columnName; | ||
}); | ||
insert: function() { | ||
valueArray = valueArray.map(function(value) { | ||
var index = 1; | ||
if( arguments.length > 3 ) { | ||
index = 2; | ||
} | ||
arguments[index] = arguments[index].map(function(value) { | ||
return 'string' === typeof value ? value : JSON.stringify(value); | ||
}); | ||
return this._super(tableName, columnNameArray, valueArray, callback); | ||
return this._super.apply(this, arguments); | ||
}, | ||
runSql: function() { | ||
var callback = arguments[arguments.length - 1]; | ||
var callback, | ||
minLength = 1; | ||
if(typeof(arguments[arguments.length - 1]) === 'function') | ||
{ | ||
minLength = 2; | ||
callback = arguments[arguments.length - 1]; | ||
} | ||
params = arguments; | ||
if (params.length > 2){ | ||
if (params.length > minLength){ | ||
// We have parameters, but db-migrate uses "?" for param substitutions. | ||
@@ -363,5 +454,17 @@ // PG uses "$1", "$2", etc so fix up the "?" into "$1", etc | ||
if(internals.dryRun) { | ||
return callback(); | ||
return Promise.resolve().nodeify(callback); | ||
} | ||
this.connection.query.apply(this.connection, params); | ||
return new Promise(function(resolve, reject) { | ||
var prCB = function(err, data) { | ||
return (err ? reject(err) : resolve(data)); | ||
}; | ||
if( minLength === 2 ) | ||
params[params.length - 1] = prCB; | ||
else | ||
params[params.length++] = prCB; | ||
this.connection.query.apply(this.connection, params); | ||
}.bind(this)).nodeify(callback); | ||
}, | ||
@@ -371,5 +474,15 @@ | ||
params = arguments; | ||
this.connection.query.apply(this.connection, [params[0], function(err, result){ | ||
params[1](err, result.rows); | ||
}]); | ||
log.sql.apply(null, params); | ||
return new Promise(function(resolve, reject) { | ||
var prCB = function(err, data) { | ||
return (err ? reject(err) : resolve(data)); | ||
}; | ||
this.connection.query.apply(this.connection, [params[0], function(err, result){ | ||
prCB(err, result.rows); | ||
}]); | ||
}.bind(this)).nodeify(params[1]); | ||
}, | ||
@@ -379,3 +492,3 @@ | ||
this.connection.end(); | ||
callback(null); | ||
return Promise.resolve().nodeify(callback); | ||
} | ||
@@ -385,2 +498,4 @@ | ||
Promise.promisifyAll(PgDriver); | ||
exports.connect = function(config, intern, callback) { | ||
@@ -387,0 +502,0 @@ |
{ | ||
"name": "db-migrate-pg", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"description": "A postgresql driver for db-migrate", | ||
@@ -31,3 +31,8 @@ "main": "index.js", | ||
}, | ||
"homepage": "https://github.com/db-migrate/pg" | ||
"homepage": "https://github.com/db-migrate/pg", | ||
"dependencies": { | ||
"bluebird": "^2.9.34", | ||
"db-migrate-base": "^1.2.1", | ||
"pg": "^4.4.1" | ||
} | ||
} |
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
17978
392
3
+ Addedbluebird@^2.9.34
+ Addeddb-migrate-base@^1.2.1
+ Addedpg@^4.4.1
+ Addedbluebird@2.11.03.7.2(transitive)
+ Addedbuffer-writer@1.0.1(transitive)
+ Addeddb-migrate-base@1.6.3(transitive)
+ Addedgeneric-pool@2.4.2(transitive)
+ Addedjs-string-escape@1.0.1(transitive)
+ Addedpacket-reader@0.2.0(transitive)
+ Addedpg@4.5.7(transitive)
+ Addedpg-connection-string@0.1.3(transitive)
+ Addedpg-int8@1.0.1(transitive)
+ Addedpg-types@1.13.0(transitive)
+ Addedpgpass@0.0.3(transitive)
+ Addedpostgres-array@1.0.3(transitive)
+ Addedpostgres-bytea@1.0.0(transitive)
+ Addedpostgres-date@1.0.7(transitive)
+ Addedpostgres-interval@1.2.0(transitive)
+ Addedsemver@4.3.6(transitive)
+ Addedsplit@0.3.3(transitive)
+ Addedthrough@2.3.8(transitive)
+ Addedxtend@4.0.2(transitive)