Socket
Socket
Sign inDemoInstall

db-migrate-pg

Package Overview
Dependencies
Maintainers
1
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

db-migrate-pg - npm Package Compare versions

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"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc