fix(mssql): only last column in foreign key definition kept

This commit is contained in:
Alex Klein 2024-07-05 17:45:41 +02:00
parent 29afa9de05
commit f0bb82a4fc
No known key found for this signature in database
GPG Key ID: 293EB31AE6E47FB1
2 changed files with 23 additions and 20 deletions

View File

@ -120,7 +120,7 @@
(defmethod fetch-foreign-keys ((catalog catalog) (mssql copy-mssql) (defmethod fetch-foreign-keys ((catalog catalog) (mssql copy-mssql)
&key including excluding) &key including excluding)
"Get the list of MSSQL index definitions per table." "Get the list of MSSQL foreign key definitions per table."
(loop (loop
:with incl-where := (filter-list-to-where-clause :with incl-where := (filter-list-to-where-clause
mssql including :not nil mssql including :not nil
@ -130,8 +130,8 @@
mssql excluding :not t mssql excluding :not t
:schema-col "kcu1.table_schema" :schema-col "kcu1.table_schema"
:table-col "kcu1.table_name") :table-col "kcu1.table_name")
:for (fkey-name schema-name table-name col :for (fkey-name schema-name table-name cols
fschema-name ftable-name fcol fschema-name ftable-name fcols
fk-update-rule fk-delete-rule) fk-update-rule fk-delete-rule)
:in (mssql-query (sql "/mssql/list-all-fkeys.sql" :in (mssql-query (sql "/mssql/list-all-fkeys.sql"
(db-name *mssql-db*) (db-name *mssql-db*) (db-name *mssql-db*) (db-name *mssql-db*)
@ -143,20 +143,16 @@
(table (find-table schema table-name)) (table (find-table schema table-name))
(fschema (find-schema catalog fschema-name)) (fschema (find-schema catalog fschema-name))
(ftable (find-table fschema ftable-name)) (ftable (find-table fschema ftable-name))
(col-name (apply-identifier-case col)) (fkey (make-fkey :table table
(fcol-name (apply-identifier-case fcol)) :columns (mapcar #'apply-identifier-case
(pg-fkey (sq:split-sequence #\, cols))
(make-fkey :name (apply-identifier-case fkey-name)
:table table
:columns nil
:foreign-table ftable :foreign-table ftable
:foreign-columns nil :foreign-columns (mapcar
#'apply-identifier-case
(sq:split-sequence #\, fcols))
:update-rule fk-update-rule :update-rule fk-update-rule
:delete-rule fk-delete-rule)) :delete-rule fk-delete-rule)))
(fkey (add-fkey table fkey)
(maybe-add-fkey table fkey-name pg-fkey :key #'fkey-name)))
(push-to-end col-name (fkey-columns fkey))
(push-to-end fcol-name (fkey-foreign-columns fkey)))
:finally (return catalog))) :finally (return catalog)))

View File

@ -7,10 +7,10 @@
REPLACE(KCU1.CONSTRAINT_NAME, '.', '_') AS 'CONSTRAINT_NAME' REPLACE(KCU1.CONSTRAINT_NAME, '.', '_') AS 'CONSTRAINT_NAME'
, KCU1.TABLE_SCHEMA AS 'TABLE_SCHEMA' , KCU1.TABLE_SCHEMA AS 'TABLE_SCHEMA'
, KCU1.TABLE_NAME AS 'TABLE_NAME' , KCU1.TABLE_NAME AS 'TABLE_NAME'
, KCU1.COLUMN_NAME AS 'COLUMN_NAME' , STRING_AGG(KCU1.COLUMN_NAME, ',') AS 'COLUMNS'
, KCU2.TABLE_SCHEMA AS 'UNIQUE_TABLE_SCHEMA' , KCU2.TABLE_SCHEMA AS 'UNIQUE_TABLE_SCHEMA'
, KCU2.TABLE_NAME AS 'UNIQUE_TABLE_NAME' , KCU2.TABLE_NAME AS 'UNIQUE_TABLE_NAME'
, KCU2.COLUMN_NAME AS 'UNIQUE_COLUMN_NAME' , STRING_AGG(KCU2.COLUMN_NAME, ',') AS 'UNIQUE_COLUMN_NAME'
, RC.UPDATE_RULE AS 'UPDATE_RULE' , RC.UPDATE_RULE AS 'UPDATE_RULE'
, RC.DELETE_RULE AS 'DELETE_RULE' , RC.DELETE_RULE AS 'DELETE_RULE'
@ -34,4 +34,11 @@
~:[~*~;and (~{~a~^ or ~})~] ~:[~*~;and (~{~a~^ or ~})~]
~:[~*~;and (~{~a~^ and ~})~] ~:[~*~;and (~{~a~^ and ~})~]
ORDER BY KCU1.CONSTRAINT_NAME, KCU1.ORDINAL_POSITION; GROUP BY
KCU1.CONSTRAINT_NAME
, KCU1.TABLE_SCHEMA
, KCU1.TABLE_NAME
, KCU2.TABLE_SCHEMA
, KCU2.TABLE_NAME
, RC.UPDATE_RULE
, RC.DELETE_RULE;