Skip to content
Snippets Groups Projects
Unverified Commit 78f7171a authored by Ngoc Khuat's avatar Ngoc Khuat Committed by GitHub
Browse files

Add unique constraint on databasechangelog if it's not existed (#37846)

parent 46fb2d94
No related branches found
No related tags found
No related merge requests found
......@@ -4195,6 +4195,59 @@ databaseChangeLog:
nullable: true
remarks: 'Hash of normalized query, calculated in middleware.cache'
# this index was added in migration 95, but during our split migration work in #34400 we didn't include this index
# in the sql initialization, so we need to recreate one here for new instances running 48+
- changeSet:
id: v48.00-067
author: qnkhuat
comment: 'Add unique constraint idx_databasechangelog_id_author_filename'
preConditions:
- onFail: MARK_RAN
# If we're dumping the migration as a SQL file or trying to force-migrate we can't check the preconditions
# so just go ahead and skip the entire thing. This is a non-critical migration
- onUpdateSQL: IGNORE
- and:
- sqlCheck:
expectedResult: 0
sql: SELECT count(*) FROM (SELECT count(*) FROM DATABASECHANGELOG GROUP BY ID, AUTHOR, FILENAME HAVING count(*) > 1) t1
- or:
- and:
- dbms:
type: postgresql
- sqlCheck:
expectedResult: 0
sql: >-
SELECT COUNT(*)
FROM pg_indexes
WHERE tablename = 'databasechangelog' AND
indexname = 'idx_databasechangelog_id_author_filename';
- and:
- dbms:
type: h2
- sqlCheck:
expectedResult: 0
sql: >-
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.INDEXES
WHERE TABLE_NAME = 'DATABASECHANGELOG' AND
INDEX_NAME = 'IDX_DATABASECHANGELOG_ID_AUTHOR_FILENAME_INDEX_1';
- and:
- dbms:
type: mysql,mariadb
- not:
- indexExists:
tableName: ${databasechangelog.name}
indexName: idx_databasechangelog_id_author_filename
changes:
- addUniqueConstraint:
constraintName: idx_databasechangelog_id_author_filename
tableName: ${databasechangelog.name}
columnNames: id, author, filename
rollback:
- dropUniqueConstraint:
tableName: ${databasechangelog.name}
constraintName: idx_databasechangelog_id_author_filename
- changeSet:
id: v49.00-000
author: qnkhuat
......
......@@ -764,3 +764,18 @@
(t2/query
(format "SELECT table_name, column_name FROM information_schema.columns WHERE data_type LIKE 'tinyint%%' AND table_schema = '%s';"
(-> (mdb.connection/data-source) .getConnection .getCatalog))))))))
(deftest index-database-changelog-test
(testing "we should have an unique constraint on databasechangelog.(id,author,filename)"
(impl/test-migrations "v49.00-000" [migrate!]
(migrate!)
(is (pos?
(:count
(t2/query-one
(case (mdb.connection/db-type)
:postgres "SELECT COUNT(*) as count FROM pg_indexes WHERE
tablename = 'databasechangelog' AND indexname = 'idx_databasechangelog_id_author_filename';"
:mysql "SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 'DATABASECHANGELOG' AND INDEX_NAME = 'idx_databasechangelog_id_author_filename';"
;; h2 has a strange way of naming constraint
:h2 "SELECT COUNT(*) as count FROM information_schema.indexes
WHERE TABLE_NAME = 'DATABASECHANGELOG' AND INDEX_NAME = 'IDX_DATABASECHANGELOG_ID_AUTHOR_FILENAME_INDEX_1';"))))))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment