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

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: ...@@ -25,7 +25,7 @@ addons:
before_script: before_script:
- "mysql -e 'create database sequelize_test;'" - "mysql -e 'create database sequelize_test;'"
- "psql -c 'create database sequelize_test;' -U postgres" - "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: script:
- "if [ $COVERAGE ]; then npm run cover && bash <(curl -s https://codecov.io/bash) -f coverage/lcov.info; else npm run test; fi" - "if [ $COVERAGE ]; then npm run cover && bash <(curl -s https://codecov.io/bash) -f coverage/lcov.info; else npm run test; fi"
......
...@@ -24,4 +24,4 @@ mysql: ...@@ -24,4 +24,4 @@ mysql:
MYSQL_ROOT_PASSWORD: lollerskates MYSQL_ROOT_PASSWORD: lollerskates
MYSQL_DATABASE: sequelize_test MYSQL_DATABASE: sequelize_test
MYSQL_USER: sequelize_test MYSQL_USER: sequelize_test
MYSQL_PASSWORD: sequelize_test MYSQL_PASSWORD: sequelize_test
\ No newline at end of file
...@@ -29,6 +29,7 @@ ConnectionManager = function(dialect, sequelize) { ...@@ -29,6 +29,7 @@ ConnectionManager = function(dialect, sequelize) {
throw err; throw err;
} }
this._oidsFetched = false;
this.refreshTypeParser(dataTypes.postgres); this.refreshTypeParser(dataTypes.postgres);
}; };
...@@ -148,7 +149,7 @@ ConnectionManager.prototype.connect = function(config) { ...@@ -148,7 +149,7 @@ ConnectionManager.prototype.connect = function(config) {
} }
// fetch OIDs for Geometry / Hstore / Enum as they are dynamic // 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\')'; 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) { ...@@ -172,6 +173,8 @@ ConnectionManager.prototype.connect = function(config) {
self.$refreshTypeParser(type); self.$refreshTypeParser(type);
}).on('end', function () { }).on('end', function () {
self._oidsFetched = true;
resolve(); resolve();
}); });
}); });
......
...@@ -25,12 +25,5 @@ if (dialect.match(/^postgres/)) { ...@@ -25,12 +25,5 @@ if (dialect.match(/^postgres/)) {
it('should correctly parse the moment based timezone', function() { it('should correctly parse the moment based timezone', function() {
return checkTimezoneParsing(this.sequelize.options); 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'; 'use strict';
var Support = require('../support') 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})
]);
});
beforeEach(function() { beforeEach(function() {
this.sequelize.test.trackRunningQueries(); 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!