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@gmail.com>
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
index 419d8e7a..370d963 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
@@ -928,18 +928,23 @@
                                         "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 @@
        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