mirror of
https://github.com/dimitri/pgloader.git
synced 2025-08-07 23:07:00 +02:00
fix(mssql): only last column in foreign key definition kept
This commit is contained in:
parent
29afa9de05
commit
f0bb82a4fc
@ -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)
|
:foreign-table ftable
|
||||||
:table table
|
:foreign-columns (mapcar
|
||||||
:columns nil
|
#'apply-identifier-case
|
||||||
:foreign-table ftable
|
(sq:split-sequence #\, fcols))
|
||||||
:foreign-columns nil
|
:update-rule fk-update-rule
|
||||||
:update-rule fk-update-rule
|
:delete-rule fk-delete-rule)))
|
||||||
:delete-rule fk-delete-rule))
|
(add-fkey table fkey)
|
||||||
(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)))
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user