Skip to content

Commit b4078bb

Browse files
authored
Merge pull request #372 from jlawrencecfm/patch-1
Use canonical index name when dropping
2 parents 7f8b63d + bb6d14b commit b4078bb

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

lib/migration.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,7 @@ function mixinMigration(PostgreSQL) {
744744

745745
// remove indexes
746746
aiNames.forEach(function(indexName) {
747+
var schema = self.escapeName(self.schema(model) || 'public');
747748
var i = ai[indexName];
748749
var propName = propNameRegEx.exec(indexName);
749750
var si; // index definition from model schema
@@ -753,7 +754,7 @@ function mixinMigration(PostgreSQL) {
753754
propName = propName && self.propertyName(model, propName[1]) || null;
754755
if (!(indexNames.indexOf(indexName) > -1) && !(propName && m.properties[propName] &&
755756
m.properties[propName].index)) {
756-
sql.push('DROP INDEX ' + self.escapeName(indexName));
757+
sql.push('DROP INDEX ' + schema + '.' + self.escapeName(indexName));
757758
} else {
758759
// The index was found, verify that database matches what we're expecting.
759760
// first: check single column indexes.
@@ -765,7 +766,7 @@ function mixinMigration(PostgreSQL) {
765766
!((!si.type || si.type === ai[indexName].type) && (!si.unique || si.unique === ai[indexName].unique))
766767
) {
767768
// Drop the index if the type or unique differs from the actual table
768-
sql.push('DROP INDEX ' + self.escapeName(indexName));
769+
sql.push('DROP INDEX ' + schema + '.' + self.escapeName(indexName));
769770
delete ai[indexName];
770771
}
771772
}
@@ -791,7 +792,7 @@ function mixinMigration(PostgreSQL) {
791792
}
792793

793794
if (!identical) {
794-
sql.push('DROP INDEX ' + self.escapeName(indexName));
795+
sql.push('DROP INDEX ' + schema + '.' + self.escapeName(indexName));
795796
delete ai[indexName];
796797
}
797798
}

test/postgresql.autoupdate.test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,4 +689,53 @@ describe('autoupdate', function() {
689689
});
690690
});
691691
});
692+
693+
describe('indexes on table in schema', function() {
694+
var schema = {
695+
options: {
696+
postgresql: {
697+
schema: 'aschema',
698+
},
699+
},
700+
properties: {
701+
something: {
702+
type: 'string',
703+
index: true,
704+
},
705+
},
706+
};
707+
708+
var changedSchema = Object.assign({}, schema, {
709+
properties: {
710+
something: {
711+
type: 'string',
712+
index: false,
713+
},
714+
},
715+
});
716+
717+
afterEach(function(done) {
718+
ds.adapter.dropTable('ATable', done);
719+
});
720+
721+
it('should update without errors', function(done) {
722+
ds.define('ATable', schema.properties, schema.options);
723+
ds.autoupdate(['ATable'], function(err) {
724+
assert(!err, err);
725+
done();
726+
});
727+
});
728+
729+
it('should be removed successfully', function(done) {
730+
ds.define('ATable', schema.properties, schema.options);
731+
ds.autoupdate(['ATable'], function(err) {
732+
assert(!err, err);
733+
ds.define('ATable', changedSchema.properties, changedSchema.options);
734+
ds.autoupdate(['ATable'], function(err) {
735+
assert(!err, err);
736+
done();
737+
});
738+
});
739+
});
740+
});
692741
});

0 commit comments

Comments
 (0)