Skip to content

Commit d065d13

Browse files
committed
fix(connect): early connect due to changes on PG
1 parent bb55679 commit d065d13

1 file changed

Lines changed: 134 additions & 97 deletions

File tree

index.js

Lines changed: 134 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,76 @@
1-
var Base = require('db-migrate-pg').base,
2-
util = require('util'),
3-
pg = require('pg'),
4-
log,
5-
type,
6-
Promise = require('bluebird');
1+
var Base = require("db-migrate-pg").base,
2+
util = require("util"),
3+
pg = require("pg"),
4+
log,
5+
type,
6+
Promise = require("bluebird");
77

88
var CockroachDriver = Base.extend({
9-
109
init: function(connection, schema, intern) {
11-
1210
this._super(connection, schema, intern);
1311
},
1412

15-
addForeignKey: function(tableName, referencedTableName, keyName, fieldMapping, rules, callback) {
16-
if(arguments.length === 5 && typeof(rules) === 'function') {
13+
addForeignKey: function(
14+
tableName,
15+
referencedTableName,
16+
keyName,
17+
fieldMapping,
18+
rules,
19+
callback
20+
) {
21+
if (arguments.length === 5 && typeof rules === "function") {
1722
callback = rules;
1823
rules = {};
1924
}
2025
var columns = Object.keys(fieldMapping);
21-
var referencedColumns = columns.map(function (key) { return '"' + fieldMapping[key] + '"'; });
22-
var sql = util.format('ALTER TABLE "%s" ADD CONSTRAINT "%s" FOREIGN KEY (%s) REFERENCES "%s" (%s)',
23-
tableName, keyName, this.quoteDDLArr(columns), referencedTableName, referencedColumns);
26+
var referencedColumns = columns.map(function(key) {
27+
return '"' + fieldMapping[key] + '"';
28+
});
29+
var sql = util.format(
30+
'ALTER TABLE "%s" ADD CONSTRAINT "%s" FOREIGN KEY (%s) REFERENCES "%s" (%s)',
31+
tableName,
32+
keyName,
33+
this.quoteDDLArr(columns),
34+
referencedTableName,
35+
referencedColumns
36+
);
2437
return this.runSql(sql).nodeify(callback);
2538
},
2639

2740
_handleMultiPrimaryKeys: function(primaryKeyColumns) {
28-
29-
return util.format(', PRIMARY KEY (%s)',
30-
this.quoteDDLArr(primaryKeyColumns.sort(function(a, b) {
31-
32-
if(a.spec.interleave && b.spec.interleave)
33-
return 0;
34-
35-
return a.spec.interleave ? -1 : 1;z
36-
}).map(function(value) {
37-
38-
return value.name;
39-
})).join(', '));
41+
return util.format(
42+
", PRIMARY KEY (%s)",
43+
this.quoteDDLArr(
44+
primaryKeyColumns
45+
.sort(function(a, b) {
46+
if (a.spec.interleave && b.spec.interleave) return 0;
47+
48+
return a.spec.interleave ? -1 : 1;
49+
z;
50+
})
51+
.map(function(value) {
52+
return value.name;
53+
})
54+
).join(", ")
55+
);
4056
},
4157

4258
_applyTableOptions: function(options) {
43-
44-
var sql = '',
45-
interleave,
46-
interleaves = [],
47-
self = this;
59+
var sql = "",
60+
interleave,
61+
interleaves = [],
62+
self = this;
4863

4964
Object.keys(options).forEach(function(key) {
50-
5165
var option = options[key];
5266

53-
if(option.interleave) {
54-
55-
if(typeof(option.interleave) === 'string') {
56-
57-
if(interleave && interleave !== option.interleave) {
58-
59-
this.log.warn('Ignoring interleave "' + interleave +
60-
'", you can only have one!');
61-
}
62-
else {
63-
67+
if (option.interleave) {
68+
if (typeof option.interleave === "string") {
69+
if (interleave && interleave !== option.interleave) {
70+
this.log.warn(
71+
'Ignoring interleave "' + interleave + '", you can only have one!'
72+
);
73+
} else {
6474
interleave = option.interleave;
6575
}
6676

@@ -69,90 +79,94 @@ var CockroachDriver = Base.extend({
6979
}
7080
});
7181

72-
if(interleaves.length > 0) {
73-
74-
sql = util.format(' INTERLEAVE IN PARENT %s (%s)',
82+
if (interleaves.length > 0) {
83+
sql = util.format(
84+
" INTERLEAVE IN PARENT %s (%s)",
7585
self.escapeDDL(interleave),
76-
self.quoteDDLArr(interleaves).join(', ')
86+
self.quoteDDLArr(interleaves).join(", ")
7787
);
7888
}
7989

8090
return sql;
8191
},
8292

8393
_applyExtensions: function(options) {
84-
8594
var families = {},
86-
firstFamily,
87-
indizies = {},
88-
sql = [],
89-
self = this;
95+
firstFamily,
96+
indizies = {},
97+
sql = [],
98+
self = this;
9099

91100
Object.keys(options).forEach(function(key) {
92-
93101
var option = options[key];
94102

95-
if(option.family && typeof(option.family) === 'string') {
96-
103+
if (option.family && typeof option.family === "string") {
97104
families[option.family] = families[option.family] || [];
98105
families[option.family].push(self.escapeDDL(key));
99106

100-
if(option.primaryKey === true)
101-
firstFamily = option.family;
107+
if (option.primaryKey === true) firstFamily = option.family;
102108
}
103109

104-
if(option.foreignKey && typeof(option.foreignKey) === 'object') {
105-
106-
indizies[option.foreignKey.name] = indizies[option.foreignKey.name] || [];
110+
if (option.foreignKey && typeof option.foreignKey === "object") {
111+
indizies[option.foreignKey.name] =
112+
indizies[option.foreignKey.name] || [];
107113
indizies[option.foreignKey.name].push(self.escapeDDL(key));
108114
}
109115
});
110116

111117
Object.keys(indizies).forEach(function(key) {
112-
113-
sql.push(util.format('INDEX %s (%s)',
114-
self.escapeDDL(key),
115-
indizies[key].join(', ')
116-
));
118+
sql.push(
119+
util.format(
120+
"INDEX %s (%s)",
121+
self.escapeDDL(key),
122+
indizies[key].join(", ")
123+
)
124+
);
117125
});
118126

119-
if(firstFamily) {
120-
121-
sql.push(util.format('FAMILY %s (%s)',
122-
self.escapeDDL(firstFamily),
123-
families[firstFamily].join(', ')
124-
));
127+
if (firstFamily) {
128+
sql.push(
129+
util.format(
130+
"FAMILY %s (%s)",
131+
self.escapeDDL(firstFamily),
132+
families[firstFamily].join(", ")
133+
)
134+
);
125135
}
126136

127-
128137
Object.keys(families).forEach(function(key) {
129-
130-
if(key !== firstFamily) {
131-
132-
sql.push(util.format('FAMILY %s (%s)',
133-
self.escapeDDL(key),
134-
families[key].join(', ')
135-
));
138+
if (key !== firstFamily) {
139+
sql.push(
140+
util.format(
141+
"FAMILY %s (%s)",
142+
self.escapeDDL(key),
143+
families[key].join(", ")
144+
)
145+
);
136146
}
137147
});
138148

139-
if(sql.length === 0)
140-
return '';
149+
if (sql.length === 0) return "";
141150

142-
return ', ' + sql.join(', ');
151+
return ", " + sql.join(", ");
143152
},
144153

145154
changeColumn: function(tableName, columnName, columnSpec, callback) {
146155
return setNotNull.call(this);
147156

148157
function setNotNull() {
149158
// in cockroacdb you cannot add a null value afterwards
150-
if(columnSpec.notNull === true) {
159+
if (columnSpec.notNull === true) {
151160
return setUnique.call(this);
152161
}
153162

154-
var setOrDrop = 'DROP';
155-
var sql = util.format('ALTER TABLE "%s" ALTER COLUMN "%s" %s NOT NULL', tableName, columnName, setOrDrop);
163+
var setOrDrop = "DROP";
164+
var sql = util.format(
165+
'ALTER TABLE "%s" ALTER COLUMN "%s" %s NOT NULL',
166+
tableName,
167+
columnName,
168+
setOrDrop
169+
);
156170

157171
return this.runSql(sql).nodeify(setUnique.bind(this));
158172
}
@@ -163,13 +177,22 @@ var CockroachDriver = Base.extend({
163177
}
164178

165179
var sql;
166-
var constraintName = tableName + '_' + columnName + '_key';
180+
var constraintName = tableName + "_" + columnName + "_key";
167181

168182
if (columnSpec.unique === true) {
169-
sql = util.format('ALTER TABLE "%s" ADD CONSTRAINT "%s" UNIQUE ("%s")', tableName, constraintName, columnName);
183+
sql = util.format(
184+
'ALTER TABLE "%s" ADD CONSTRAINT "%s" UNIQUE ("%s")',
185+
tableName,
186+
constraintName,
187+
columnName
188+
);
170189
return this.runSql(sql).nodeify(setDefaultValue.bind(this));
171190
} else if (columnSpec.unique === false) {
172-
sql = util.format('ALTER TABLE "%s" DROP CONSTRAINT "%s"', tableName, constraintName);
191+
sql = util.format(
192+
'ALTER TABLE "%s" DROP CONSTRAINT "%s"',
193+
tableName,
194+
constraintName
195+
);
173196
return this.runSql(sql).nodeify(setDefaultValue.bind(this));
174197
} else {
175198
return setDefaultValue.call(this);
@@ -185,32 +208,46 @@ var CockroachDriver = Base.extend({
185208

186209
if (columnSpec.defaultValue !== undefined) {
187210
var defaultValue = null;
188-
if (typeof columnSpec.defaultValue === 'string') {
211+
if (typeof columnSpec.defaultValue === "string") {
189212
defaultValue = "'" + columnSpec.defaultValue + "'";
190213
} else {
191214
defaultValue = columnSpec.defaultValue;
192215
}
193-
sql = util.format('ALTER TABLE "%s" ALTER COLUMN "%s" SET DEFAULT %s', tableName, columnName, defaultValue);
216+
sql = util.format(
217+
'ALTER TABLE "%s" ALTER COLUMN "%s" SET DEFAULT %s',
218+
tableName,
219+
columnName,
220+
defaultValue
221+
);
194222
} else {
195-
sql = util.format('ALTER TABLE "%s" ALTER COLUMN "%s" DROP DEFAULT', tableName, columnName);
223+
sql = util.format(
224+
'ALTER TABLE "%s" ALTER COLUMN "%s" DROP DEFAULT',
225+
tableName,
226+
columnName
227+
);
196228
}
197-
return this.runSql(sql).then(
198-
setType.bind(this)
199-
).nodeify(callback);
229+
return this.runSql(sql)
230+
.then(setType.bind(this))
231+
.nodeify(callback);
200232
}
201233

202234
function setType() {
203-
204235
// no changes are possible afterwards in cockroachdb currently
205236
return Promise.resolve();
206237
}
207238
}
208239
});
209240

210-
211241
exports.connect = function(config, intern, callback) {
242+
if (config.native) {
243+
pg = pg.native;
244+
}
245+
var db = config.db || new pg.Client(config);
212246

213-
if (config.native) { pg = pg.native; }
214-
var db = config.db || new pg.Client(config);
247+
db.connect(function(err) {
248+
if (err) {
249+
callback(err);
250+
}
215251
callback(null, new CockroachDriver(db, config.database, intern));
252+
});
216253
};

0 commit comments

Comments
 (0)