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

Commit 01ac6bc0 by Jan Aagaard Meier Committed by GitHub

fix(postgres/connection-manager): Only fetch OIDs once (#8733)

* fix(postgres/connection-manager): Only fetch OIDs once

* fix: make sure postgres extensions are enabled on travis
1 parent 9246e06b
......@@ -25,7 +25,7 @@ addons:
before_script:
- "mysql -e 'create database sequelize_test;'"
- "psql -c 'create database sequelize_test;' -U postgres"
- "psql sequelize_test -c 'create extension postgis;' -U postgres"
- "psql sequelize_test -c 'create extension postgis;create extension if not exists hstore;create extension if not exists btree_gist;' -U postgres"
script:
- "if [ $COVERAGE ]; then npm run cover && bash <(curl -s https://codecov.io/bash) -f coverage/lcov.info; else npm run test; fi"
......
......@@ -29,6 +29,7 @@ ConnectionManager = function(dialect, sequelize) {
throw err;
}
this._oidsFetched = false;
this.refreshTypeParser(dataTypes.postgres);
};
......@@ -148,7 +149,7 @@ ConnectionManager.prototype.connect = function(config) {
}
// fetch OIDs for Geometry / Hstore / Enum as they are dynamic
if (dataTypes.HSTORE.types.postgres.oids.length === 0) {
if (!self._oidsFetched) {
query += 'SELECT typname, typtype, oid, typarray FROM pg_type WHERE (typtype = \'b\' AND typname IN (\'hstore\', \'geometry\', \'geography\')) OR (typtype = \'e\')';
}
......@@ -172,6 +173,8 @@ ConnectionManager.prototype.connect = function(config) {
self.$refreshTypeParser(type);
}).on('end', function () {
self._oidsFetched = true;
resolve();
});
});
......
......@@ -25,12 +25,5 @@ if (dialect.match(/^postgres/)) {
it('should correctly parse the moment based timezone', function() {
return checkTimezoneParsing(this.sequelize.options);
});
it('should correctly parse the moment based timezone while fetching hstore oids', function() {
// reset oids so we need to refetch them
DataTypes.HSTORE.types.postgres.oids = [];
DataTypes.HSTORE.types.postgres.array_oids = [];
return checkTimezoneParsing(this.sequelize.options);
});
});
}
'use strict';
var Support = require('../support')
, dialect = Support.getTestDialect();
before(function() {
if (dialect !== 'postgres' && dialect !== 'postgres-native') {
return;
}
return Support.sequelize.Promise.all([
Support.sequelize.query('CREATE EXTENSION IF NOT EXISTS hstore', {raw: true}),
Support.sequelize.query('CREATE EXTENSION IF NOT EXISTS btree_gist', {raw: true})
]);
});
var Support = require('../support');
beforeEach(function() {
this.sequelize.test.trackRunningQueries();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!