不要怂,就是干,撸起袖子干!

Commit 301f6b80 by Jan Aagaard Meier

fix(postgres/conectionmanager): Don't leak postgres OIDs between instances

1 parent 6611b408
Showing with 21 additions and 4 deletions
......@@ -29,6 +29,9 @@ ConnectionManager = function(dialect, sequelize) {
throw err;
}
this.oidMap = {};
this.arrayOidMap = {};
this._oidsFetched = false;
this.refreshTypeParser(dataTypes.postgres);
};
......@@ -41,23 +44,33 @@ ConnectionManager.prototype.$refreshTypeParser = function (dataType) {
if (dataType.types.postgres.oids) {
dataType.types.postgres.oids.forEach(function (oid) {
self.lib.types.setTypeParser(oid, function (value) {
self.oidMap[oid] = function (value) {
return dataType.parse(value, oid, self.lib.types.getTypeParser);
});
};
});
}
if (dataType.types.postgres.array_oids) {
dataType.types.postgres.array_oids.forEach(function (oid) {
self.lib.types.setTypeParser(oid, function (value) {
self.arrayOidMap[oid] = function (value) {
return self.lib.types.arrayParser.create(value, function (value) {
return dataType.parse(value, oid, self.lib.types.getTypeParser);
}).parse();
};
});
});
}
};
ConnectionManager.prototype.getTypeParser = function (oid, format) {
if (this.oidMap[oid]) {
return this.oidMap[oid];
} else if (this.arrayOidMap[oid]) {
return this.arrayOidMap[oid];
}
return this.lib.types.getTypeParser.apply(undefined, arguments);
};
ConnectionManager.prototype.connect = function(config) {
var self = this
, connectionConfig = {};
......@@ -67,6 +80,10 @@ ConnectionManager.prototype.connect = function(config) {
'user', 'password', 'host', 'database', 'port'
]);
connectionConfig.types = {
getTypeParser: ConnectionManager.prototype.getTypeParser.bind(this)
};
if (config.dialectOptions) {
Utils._.merge(connectionConfig,
Utils._.pick(config.dialectOptions, [
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!