diff options
| author | Jean-Cyril Poiraud <jclgms@gmail.com> | 2019-01-29 20:00:48 +0100 |
|---|---|---|
| committer | Damien Regad <dregad@mantisbt.org> | 2019-12-30 00:19:15 +0100 |
| commit | 248188451a329c9f1cec9c0a26206c7d57bb9784 (patch) | |
| tree | 6ecad4fa7b5c8ffa3d6277f792da6f50e320a325 | |
| parent | 5ea89245ddf78a7aaefea792e95fde7871cec48e (diff) | |
| download | adodb-248188451a329c9f1cec9c0a26206c7d57bb9784.tar.gz adodb-248188451a329c9f1cec9c0a26206c7d57bb9784.tar.bz2 adodb-248188451a329c9f1cec9c0a26206c7d57bb9784.zip | |
mssql: MetaForeignKeys not returning all FK's
MetaForeignKeys returns an associative array with the name of reference
table for key. But when there are 2 foreign keys from the same reference
table, MetaForeignKeys returns only the last foreign key.
A solution is to merge arrays when there are several foreign keys.
Fixes #486
Signed-off-by: Damien Regad <dregad@mantisbt.org>
Original commits from PR squashed and message reworded.
| -rw-r--r-- | drivers/adodb-mssql.inc.php | 6 | ||||
| -rw-r--r-- | drivers/adodb-mssqlnative.inc.php | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/adodb-mssql.inc.php b/drivers/adodb-mssql.inc.php index b60d28c3..c137d17a 100644 --- a/drivers/adodb-mssql.inc.php +++ b/drivers/adodb-mssql.inc.php @@ -511,7 +511,11 @@ order by constraint_name, referenced_table_name, keyno"; foreach($arr as $k => $v) { foreach($v as $a => $b) { if ($upper) $a = strtoupper($a); - $arr2[$a] = $b; + if (is_array($arr2[$a])) { // a previous foreign key was define for this reference table, we merge the new one + $arr2[$a] = array_merge($arr2[$a], $b); + } else { + $arr2[$a] = $b; + } } } return $arr2; diff --git a/drivers/adodb-mssqlnative.inc.php b/drivers/adodb-mssqlnative.inc.php index 312fcfd0..acb4eec3 100644 --- a/drivers/adodb-mssqlnative.inc.php +++ b/drivers/adodb-mssqlnative.inc.php @@ -735,7 +735,11 @@ class ADODB_mssqlnative extends ADOConnection { foreach($arr as $k => $v) { foreach($v as $a => $b) { if ($upper) $a = strtoupper($a); - $arr2[$a] = $b; + if (is_array($arr2[$a])) { // a previous foreign key was define for this reference table, we merge the new one + $arr2[$a] = array_merge($arr2[$a], $b); + } else { + $arr2[$a] = $b; + } } } return $arr2; |
