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

Commit 1b465d3e by Mick Hansen

Merge pull request #5017 from sushantdhiman/fix-5015

bug(5015) pg doesn't support create table if not exists for 9.0 and below
2 parents a2366463 a91d8b68
...@@ -5,7 +5,8 @@ var Utils = require('../../utils') ...@@ -5,7 +5,8 @@ var Utils = require('../../utils')
, util = require('util') , util = require('util')
, DataTypes = require('../../data-types') , DataTypes = require('../../data-types')
, AbstractQueryGenerator = require('../abstract/query-generator') , AbstractQueryGenerator = require('../abstract/query-generator')
, primaryKeys = {}; , primaryKeys = {}
, semver = require('semver');
var QueryGenerator = { var QueryGenerator = {
options: {}, options: {},
...@@ -42,7 +43,11 @@ var QueryGenerator = { ...@@ -42,7 +43,11 @@ var QueryGenerator = {
primaryKeys[tableName] = []; primaryKeys[tableName] = [];
var query = 'CREATE TABLE IF NOT EXISTS <%= table %> (<%= attributes%>)<%= comments %>' var databaseVersion = Utils._.get(self, 'sequelize.options.databaseVersion', 0);
//Postgres 9.0 does not support CREATE TABLE IF NOT EXISTS, 9.1 and above do
var query = 'CREATE TABLE ' +
( (databaseVersion === 0 || semver.gte(databaseVersion, '9.1.0')) ? 'IF NOT EXISTS ' : '') +
'<%= table %> (<%= attributes%>)<%= comments %>'
, comments = '' , comments = ''
, attrStr = [] , attrStr = []
, i; , i;
......
...@@ -5,19 +5,19 @@ var Support = require(__dirname + '/../support') ...@@ -5,19 +5,19 @@ var Support = require(__dirname + '/../support')
, DataTypes = require(__dirname + '/../../../lib/data-types') , DataTypes = require(__dirname + '/../../../lib/data-types')
, expectsql = Support.expectsql , expectsql = Support.expectsql
, current = Support.sequelize , current = Support.sequelize
, sql = current.dialect.QueryGenerator; , sql = current.dialect.QueryGenerator
, _ = require('lodash');
describe(Support.getTestDialectTeaser('SQL'), function() { describe(Support.getTestDialectTeaser('SQL'), function() {
describe('createTable', function () { describe('createTable', function () {
var FooUser = current.define('user', {
mood: DataTypes.ENUM('happy', 'sad')
},{
schema: 'foo',
timestamps: false
});
describe('with enums', function () { describe('with enums', function () {
var FooUser = current.define('user', {
mood: DataTypes.ENUM('happy', 'sad')
},{
schema: 'foo',
timestamps: false
});
it('references enum in the right schema #3171', function () { it('references enum in the right schema #3171', function () {
expectsql(sql.createTableQuery(FooUser.getTableName(), sql.attributesToSQL(FooUser.rawAttributes), { }), { expectsql(sql.createTableQuery(FooUser.getTableName(), sql.attributesToSQL(FooUser.rawAttributes), { }), {
sqlite: 'CREATE TABLE IF NOT EXISTS `foo.users` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `mood` TEXT);', sqlite: 'CREATE TABLE IF NOT EXISTS `foo.users` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `mood` TEXT);',
...@@ -27,6 +27,29 @@ describe(Support.getTestDialectTeaser('SQL'), function() { ...@@ -27,6 +27,29 @@ describe(Support.getTestDialectTeaser('SQL'), function() {
}); });
}); });
}); });
if (current.dialect.name === 'postgres') {
describe('IF NOT EXISTS version check', function() {
var modifiedSQL = _.clone(sql);
var createTableQueryModified = sql.createTableQuery.bind(modifiedSQL);
it('it will not have IF NOT EXISTS for version 9.0 or below', function () {
modifiedSQL.sequelize.options.databaseVersion = '9.0.0';
expectsql(createTableQueryModified(FooUser.getTableName(), sql.attributesToSQL(FooUser.rawAttributes), { }), {
postgres: 'CREATE TABLE "foo"."users" ("id" SERIAL , "mood" "foo"."enum_users_mood", PRIMARY KEY ("id"));'
});
});
it('it will have IF NOT EXISTS for version 9.1 or above', function () {
modifiedSQL.sequelize.options.databaseVersion = '9.1.0';
expectsql(createTableQueryModified(FooUser.getTableName(), sql.attributesToSQL(FooUser.rawAttributes), { }), {
postgres: 'CREATE TABLE IF NOT EXISTS "foo"."users" ("id" SERIAL , "mood" "foo"."enum_users_mood", PRIMARY KEY ("id"));'
});
});
it('it will have IF NOT EXISTS for default version', function () {
modifiedSQL.sequelize.options.databaseVersion = 0;
expectsql(createTableQueryModified(FooUser.getTableName(), sql.attributesToSQL(FooUser.rawAttributes), { }), {
postgres: 'CREATE TABLE IF NOT EXISTS "foo"."users" ("id" SERIAL , "mood" "foo"."enum_users_mood", PRIMARY KEY ("id"));'
});
});
});
}
}); });
}); });
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!