[Libreoffice-commits] core.git: connectivity/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Sat Jan 12 16:25:29 UTC 2019
connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx | 45 +++++-----
1 file changed, 25 insertions(+), 20 deletions(-)
New commits:
commit 316f85fa1d0617064a9908dc336586332e9375ae
Author: Tamas Bunth <tamas.bunth at collabora.co.uk>
AuthorDate: Sat Jan 12 12:41:05 2019 +0100
Commit: Tamás Bunth <btomi96 at gmail.com>
CommitDate: Sat Jan 12 17:25:07 2019 +0100
tdf#122437 mysqlc: Fix foreign key references
Comparing mysqlc terminology (INFORMATION_SCHEMA) with the description
of the XDatabaseMetadata interface:
- columns with name "REFERENCED_*" (INF_SCHEMA) should be used for primary key
attributes (sdbc terminology).
- columns without any prefix (INF_SCHEMA) should be used for primary key
attributes (sdbc)
Change-Id: Id9780fd86834441485da927f85b9446c40951fcf
Reviewed-on: https://gerrit.libreoffice.org/66213
Tested-by: Jenkins
Reviewed-by: Tamás Bunth <btomi96 at gmail.com>
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
index 419d8e7acb9e..370d9635c4e9 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
@@ -928,18 +928,23 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c
"org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
UNO_QUERY);
- OUString query(
- "SELECT refi.CONSTRAINT_CATALOG, k.COLUMN_NAME, "
- " refi.UNIQUE_CONSTRAINT_CATALOG, "
- " refi.UNIQUE_CONSTRAINT_SCHEMA, refi.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME, "
- " refi.UPDATE_RULE, refi.DELETE_RULE, refi.CONSTRAINT_NAME "
- " FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as refi"
- " INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as k ON k.CONSTRAINT_NAME = "
- "refi.CONSTRAINT_NAME "
- " and k.TABLE_NAME = refi.TABLE_NAME "
- " WHERE refi.CONSTRAINT_SCHEMA LIKE "
- "'?' AND refi.TABLE_NAME='?'"); // TODO
- query = query.replaceFirst("?", schema);
+ OUString query("SELECT refi.CONSTRAINT_CATALOG," // 1: foreign catalog
+ " k.COLUMN_NAME," // 2: foreign column name
+ " refi.UNIQUE_CONSTRAINT_CATALOG," // 3: primary catalog FIXME
+ " k.REFERENCED_TABLE_SCHEMA," // 4: primary schema
+ " refi.REFERENCED_TABLE_NAME," // 5: primary table name
+ " k.REFERENCED_COLUMN_NAME," // 6: primary column name
+ " refi.UPDATE_RULE, refi.DELETE_RULE," // 7,8: update, delete rule
+ " refi.CONSTRAINT_NAME, " // 9: name of constraint itself
+ " refi.TABLE_NAME, " // 10: foreign table name
+ " refi.CONSTRAINT_SCHEMA " // 11: foreign schema name FIXME
+ " FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as refi"
+ " INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE as k ON k.CONSTRAINT_NAME = "
+ "refi.CONSTRAINT_NAME "
+ " and k.TABLE_NAME = refi.TABLE_NAME "
+ " WHERE k.REFERENCED_TABLE_SCHEMA LIKE "
+ "'?' AND refi.TABLE_NAME='?'");
+ query = query.replaceFirst("?", schema); // TODO what if schema is NULL?
query = query.replaceFirst("?", table);
std::vector<std::vector<Any>> aRows;
@@ -952,22 +957,22 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c
std::vector<Any> aRow{ Any() }; // 0. element is unused
// primary key catalog
- aRow.push_back(makeAny(xRow->getString(1)));
+ aRow.push_back(makeAny(xRow->getString(3)));
// primary key schema
- aRow.push_back(makeAny(schema));
+ aRow.push_back(makeAny(xRow->getString(4)));
// primary key table
- aRow.push_back(makeAny(table));
+ aRow.push_back(makeAny(xRow->getString(5)));
// primary column name
- aRow.push_back(makeAny(xRow->getString(2)));
+ aRow.push_back(makeAny(xRow->getString(6)));
// fk table catalog
- aRow.push_back(makeAny(xRow->getString(3)));
+ aRow.push_back(makeAny(xRow->getString(1)));
// fk schema
- aRow.push_back(makeAny(xRow->getString(4)));
+ aRow.push_back(makeAny(xRow->getString(11)));
// fk table
- aRow.push_back(makeAny(xRow->getString(5)));
+ aRow.push_back(makeAny(xRow->getString(10)));
// fk column name
- aRow.push_back(makeAny(xRow->getString(6)));
+ aRow.push_back(makeAny(xRow->getString(2)));
// KEY_SEQ
aRow.push_back(makeAny(sal_Int32{ 0 })); // TODO
// update rule
More information about the Libreoffice-commits
mailing list