summaryrefslogtreecommitdiff
path: root/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx')
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx312
1 files changed, 152 insertions, 160 deletions
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
index 77e20700b135..c3c073f276b2 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
@@ -22,6 +22,7 @@
#include <com/sun/star/sdbc/Deferrability.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
#include <comphelper/sequence.hxx>
+#include <o3tl/string_view.hxx>
#include <sal/log.hxx>
#include <rtl/ustrbuf.hxx>
@@ -32,7 +33,6 @@
using namespace connectivity::mysqlc;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
static std::string wild("%");
@@ -41,8 +41,6 @@ static void lcl_setRows_throw(const Reference<XResultSet>& _xResultSet, sal_Int3
const std::vector<std::vector<Any>>& _rRows)
{
Reference<XInitialization> xIni(_xResultSet, UNO_QUERY);
- Sequence<Any> aArgs(2);
- aArgs[0] <<= _nType;
Sequence<Sequence<Any>> aRows(_rRows.size());
@@ -55,7 +53,7 @@ static void lcl_setRows_throw(const Reference<XResultSet>& _xResultSet, sal_Int3
}
++pRowsIter;
}
- aArgs[1] <<= aRows;
+ Sequence<Any> aArgs{ Any(_nType), Any(aRows) };
xIni->initialize(aArgs);
}
@@ -160,11 +158,11 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getMaxIndexLength() { return 256; }
sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns() { return true; }
-OUString SAL_CALL ODatabaseMetaData::getCatalogTerm() { return "n/a"; }
+OUString SAL_CALL ODatabaseMetaData::getCatalogTerm() { return u"n/a"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return "\""; }
+OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return u"`"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters() { return "#@"; }
+OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters() { return u"#@"_ustr; }
sal_Bool SAL_CALL ODatabaseMetaData::supportsDifferentTableCorrelationNames() { return true; }
@@ -351,7 +349,7 @@ OUString SAL_CALL ODatabaseMetaData::getURL()
OUString SAL_CALL ODatabaseMetaData::getUserName()
{
Reference<XStatement> statement = m_rConnection.createStatement();
- Reference<XResultSet> rs = statement->executeQuery("select user()");
+ Reference<XResultSet> rs = statement->executeQuery(u"select user()"_ustr);
Reference<XRow> xRow(rs, UNO_QUERY_THROW);
(void)rs->next(); // the first and only result
// e.g. root@localhost
@@ -365,9 +363,9 @@ OUString SAL_CALL ODatabaseMetaData::getUserName()
return userWithConnection;
}
-OUString SAL_CALL ODatabaseMetaData::getDriverName() { return "MySQL Connector/OO.org"; }
+OUString SAL_CALL ODatabaseMetaData::getDriverName() { return u"MySQL Connector/OO.org"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getDriverVersion() { return "0.9.2"; }
+OUString SAL_CALL ODatabaseMetaData::getDriverVersion() { return u"0.9.2"_ustr; }
OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion()
{
@@ -375,11 +373,11 @@ OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion()
m_rConnection.getConnectionEncoding());
}
-OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName() { return "MySQL"; }
+OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName() { return u"MySQL"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getProcedureTerm() { return "procedure"; }
+OUString SAL_CALL ODatabaseMetaData::getProcedureTerm() { return u"procedure"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getSchemaTerm() { return "database"; }
+OUString SAL_CALL ODatabaseMetaData::getSchemaTerm() { return u"database"_ustr; }
sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion()
{
@@ -402,7 +400,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion()
OUString SAL_CALL ODatabaseMetaData::getSQLKeywords()
{
- return "ACCESSIBLE, ADD, ALL,"
+ return u"ACCESSIBLE, ADD, ALL,"
"ALTER, ANALYZE, AND, AS, ASC, ASENSITIVE, BEFORE,"
"BETWEEN, BIGINT, BINARY, BLOB, BOTH, BY, CALL,"
"CASCADE, CASE, CHANGE, CHAR, CHARACTER, CHECK,"
@@ -444,43 +442,43 @@ OUString SAL_CALL ODatabaseMetaData::getSQLKeywords()
"VARCHARACTER, VARYING, WHEN, WHERE, WHILE, WITH,"
"WRITE, X509, XOR, YEAR_MONTH, ZEROFILL"
"GENERAL, IGNORE_SERVER_IDS, MASTER_HEARTBEAT_PERIOD,"
- "MAXVALUE, RESIGNAL, SIGNAL, SLOW";
+ "MAXVALUE, RESIGNAL, SIGNAL, SLOW"_ustr;
}
-OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape() { return "\\"; }
+OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape() { return u"\\"_ustr; }
OUString SAL_CALL ODatabaseMetaData::getStringFunctions()
{
- return "ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,"
+ return u"ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,"
"CONCAT_WS,CONV,ELT,EXPORT_SET,FIELD,FIND_IN_SET,HEX,INSERT,"
"INSTR,LCASE,LEFT,LENGTH,LOAD_FILE,LOCATE,LOCATE,LOWER,LPAD,"
"LTRIM,MAKE_SET,MATCH,MID,OCT,OCTET_LENGTH,ORD,POSITION,"
"QUOTE,REPEAT,REPLACE,REVERSE,RIGHT,RPAD,RTRIM,SOUNDEX,"
"SPACE,STRCMP,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING,"
- "SUBSTRING_INDEX,TRIM,UCASE,UPPER";
+ "SUBSTRING_INDEX,TRIM,UCASE,UPPER"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions()
{
- return "DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,"
+ return u"DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,"
"MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,PERIOD_ADD,"
"PERIOD_DIFF,TO_DAYS,FROM_DAYS,DATE_FORMAT,TIME_FORMAT,"
"CURDATE,CURRENT_DATE,CURTIME,CURRENT_TIME,NOW,SYSDATE,"
"CURRENT_TIMESTAMP,UNIX_TIMESTAMP,FROM_UNIXTIME,"
- "SEC_TO_TIME,TIME_TO_SEC";
+ "SEC_TO_TIME,TIME_TO_SEC"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getSystemFunctions()
{
- return "DATABASE,USER,SYSTEM_USER,"
- "SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION";
+ return u"DATABASE,USER,SYSTEM_USER,"
+ "SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getNumericFunctions()
{
- return "ABS,ACOS,ASIN,ATAN,ATAN2,BIT_COUNT,CEILING,COS,"
+ return u"ABS,ACOS,ASIN,ATAN,ATAN2,BIT_COUNT,CEILING,COS,"
"COT,DEGREES,EXP,FLOOR,LOG,LOG10,MAX,MIN,MOD,PI,POW,"
- "POWER,RADIANS,RAND,ROUND,SIN,SQRT,TAN,TRUNCATE";
+ "POWER,RADIANS,RAND,ROUND,SIN,SQRT,TAN,TRUNCATE"_ustr;
}
sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar() { return false; }
@@ -555,9 +553,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes()
const char* const table_types[] = { "TABLE", "VIEW" };
sal_Int32 const requiredVersion[] = { 0, 50000 };
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
@@ -565,9 +564,8 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes()
{
if (m_rConnection.getMysqlVersion() >= requiredVersion[i])
{
- std::vector<Any> aRow{ Any() };
- aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(table_types[i], encoding)));
- rRows.push_back(aRow);
+ rRows.push_back(
+ { { Any(), Any(mysqlc_sdbc_driver::convert(table_types[i], encoding)) } });
}
}
lcl_setRows_throw(xResultSet, 5, rRows);
@@ -576,9 +574,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes()
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo()
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
@@ -586,32 +585,19 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo()
unsigned int i = 0;
while (mysqlc_types[i].typeName)
{
- std::vector<Any> aRow{ Any() };
-
- aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)));
- aRow.push_back(makeAny(mysqlc_types[i].dataType));
- aRow.push_back(makeAny(mysqlc_types[i].precision));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)));
- aRow.push_back(makeAny(mysqlc_types[i].nullable));
- aRow.push_back(makeAny(mysqlc_types[i].caseSensitive));
- aRow.push_back(makeAny(mysqlc_types[i].searchable));
- aRow.push_back(makeAny(mysqlc_types[i].isUnsigned));
- aRow.push_back(makeAny(mysqlc_types[i].fixedPrecScale));
- aRow.push_back(makeAny(mysqlc_types[i].autoIncrement));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)));
- aRow.push_back(makeAny(mysqlc_types[i].minScale));
- aRow.push_back(makeAny(mysqlc_types[i].maxScale));
- aRow.push_back(makeAny(sal_Int32(0)));
- aRow.push_back(makeAny(sal_Int32(0)));
- aRow.push_back(makeAny(sal_Int32(10)));
+ rRows.push_back(
+ { { Any(), Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)),
+ Any(mysqlc_types[i].dataType), Any(mysqlc_types[i].precision),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)),
+ Any(mysqlc_types[i].nullable), Any(mysqlc_types[i].caseSensitive),
+ Any(mysqlc_types[i].searchable), Any(mysqlc_types[i].isUnsigned),
+ Any(mysqlc_types[i].fixedPrecScale), Any(mysqlc_types[i].autoIncrement),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)),
+ Any(mysqlc_types[i].minScale), Any(mysqlc_types[i].maxScale), Any(sal_Int32(0)),
+ Any(sal_Int32(0)), Any(sal_Int32(10)) } });
- rRows.push_back(aRow);
i++;
}
@@ -621,27 +607,26 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo()
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getCatalogs()
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
return xResultSet;
}
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getSchemas()
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
- OUString sSql
- = m_rConnection.getMysqlVersion() > 49999
- ? OUString{ "SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG "
- "FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY SCHEMA_NAME" }
- : OUString{ "SHOW DATABASES" };
-
Reference<XStatement> statement = m_rConnection.createStatement();
- Reference<XInterface> executed = statement->executeQuery(sSql);
+ Reference<XInterface> executed = statement->executeQuery(
+ u"SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG FROM INFORMATION_SCHEMA.SCHEMATA \
+ WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema') \
+ ORDER BY SCHEMA_NAME"_ustr);
Reference<XResultSet> rs(executed, UNO_QUERY_THROW);
Reference<XResultSetMetaDataSupplier> supp(executed, UNO_QUERY_THROW);
Reference<XResultSetMetaData> rs_meta = supp->getMetaData();
@@ -651,20 +636,12 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getSchemas()
while (rs->next())
{
std::vector<Any> aRow{ Any() };
- bool informationSchema = false;
for (sal_uInt32 i = 1; i <= columns; i++)
{
OUString columnStringValue = xRow->getString(i);
- if (i == 1)
- { // TABLE_SCHEM
- informationSchema = columnStringValue.equalsIgnoreAsciiCase("information_schema");
- }
- aRow.push_back(makeAny(columnStringValue));
- }
- if (!informationSchema)
- {
- rRows.push_back(aRow);
+ aRow.push_back(Any(columnStringValue));
}
+ rRows.push_back(aRow);
}
lcl_setRows_throw(xResultSet, 1, rRows);
@@ -676,12 +653,12 @@ Reference<XResultSet>
const OUString& table,
const OUString& columnNamePattern)
{
- OUString query("SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS "
+ OUString query(u"SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS "
"TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, NULL AS GRANTOR, "
"GRANTEE, PRIVILEGE_TYPE AS PRIVILEGE, IS_GRANTABLE FROM "
"INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE TABLE_SCHEMA LIKE "
"'?' AND TABLE_NAME='?' AND COLUMN_NAME LIKE '?' ORDER BY "
- "COLUMN_NAME, PRIVILEGE_TYPE");
+ "COLUMN_NAME, PRIVILEGE_TYPE"_ustr);
query = query.replaceFirst("?", schema);
query = query.replaceFirst("?", table);
@@ -750,34 +727,35 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(const Any& /*catalo
Reference<XResultSet> rs = statement->executeQuery(query);
Reference<XRow> xRow(rs, UNO_QUERY_THROW);
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> aRows;
while (rs->next())
{
std::vector<Any> aRow{ Any() }; // 0. element is unused
// catalog name
- aRow.push_back(makeAny(xRow->getString(1)));
+ aRow.emplace_back(xRow->getString(1));
// schema name
- aRow.push_back(makeAny(xRow->getString(2)));
+ aRow.emplace_back(xRow->getString(2));
// table name
- aRow.push_back(makeAny(xRow->getString(3)));
+ aRow.emplace_back(xRow->getString(3));
// column name
- aRow.push_back(makeAny(xRow->getString(4)));
+ aRow.emplace_back(xRow->getString(4));
// data type
OUString sDataType = xRow->getString(5);
- aRow.push_back(makeAny(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType)));
+ aRow.emplace_back(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType));
// type name
- aRow.push_back(makeAny(sDataType)); // TODO
+ aRow.emplace_back(sDataType); // TODO
// column size
sal_Int32 nColumnSize = 0;
OUString sColumnType = xRow->getString(14);
sal_Int32 nCharMaxLen = xRow->getShort(6);
bool bIsCharMax = !xRow->wasNull();
if (sDataType.equalsIgnoreAsciiCase("year"))
- nColumnSize = sColumnType.copy(6, 1).toInt32(); // 'year(' length is 5
+ nColumnSize = o3tl::toInt32(sColumnType.subView(6, 1)); // 'year(' length is 5
else if (sDataType.equalsIgnoreAsciiCase("date"))
nColumnSize = 10;
else if (sDataType.equalsIgnoreAsciiCase("time"))
@@ -789,34 +767,34 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(const Any& /*catalo
nColumnSize = xRow->getShort(7); // numeric precision
else
nColumnSize = nCharMaxLen;
- aRow.push_back(makeAny(nColumnSize));
- aRow.push_back(Any()); // buffer length - unused
+ aRow.emplace_back(nColumnSize);
+ aRow.emplace_back(); // buffer length - unused
// decimal digits (scale)
- aRow.push_back(makeAny(xRow->getShort(8)));
+ aRow.emplace_back(xRow->getShort(8));
// num_prec_radix
- aRow.push_back(makeAny(sal_Int32(10)));
+ aRow.emplace_back(sal_Int32(10));
// nullable
OUString sIsNullable = xRow->getString(13);
if (xRow->wasNull())
- aRow.push_back(makeAny(ColumnValue::NULLABLE_UNKNOWN));
+ aRow.emplace_back(ColumnValue::NULLABLE_UNKNOWN);
else if (sIsNullable.equalsIgnoreAsciiCase("YES"))
- aRow.push_back(makeAny(ColumnValue::NULLABLE));
+ aRow.emplace_back(ColumnValue::NULLABLE);
else
- aRow.push_back(makeAny(ColumnValue::NO_NULLS));
+ aRow.emplace_back(ColumnValue::NO_NULLS);
// remarks
- aRow.push_back(makeAny(xRow->getString(9)));
+ aRow.emplace_back(xRow->getString(9));
// default
- aRow.push_back(makeAny(xRow->getString(10)));
+ aRow.emplace_back(xRow->getString(10));
- aRow.push_back(Any{}); // sql_data_type - unused
- aRow.push_back(Any{}); // sql_datetime_sub - unused
+ aRow.emplace_back(); // sql_data_type - unused
+ aRow.emplace_back(); // sql_datetime_sub - unused
// character octet length
- aRow.push_back(makeAny(xRow->getString(11)));
+ aRow.emplace_back(xRow->getString(11));
// ordinal position
- aRow.push_back(makeAny(xRow->getString(12)));
+ aRow.emplace_back(xRow->getString(12));
// is nullable
- aRow.push_back(makeAny(sIsNullable));
+ aRow.emplace_back(sIsNullable);
aRows.push_back(aRow);
}
lcl_setRows_throw(xResultSet, 1, aRows);
@@ -832,25 +810,20 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTables(const Any& /*catalog
"SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS TABLE_SCHEM, TABLE_NAME,"
"IF(STRCMP(TABLE_TYPE,'BASE TABLE'), TABLE_TYPE, 'TABLE') AS TABLE_TYPE, TABLE_COMMENT AS "
"REMARKS "
- "FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' "
+ "FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', "
+ "'performance_schema') AND TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' "
};
if (types.getLength() == 1)
{
- buffer.append("AND TABLE_TYPE LIKE '");
- buffer.append(types[0]);
- buffer.append("'");
+ buffer.append("AND TABLE_TYPE LIKE '" + types[0] + "'");
}
else if (types.getLength() > 1)
{
- buffer.append("AND (TABLE_TYPE LIKE '");
- buffer.append(types[0]);
- buffer.append("'");
+ buffer.append("AND (TABLE_TYPE LIKE '" + types[0] + "'");
for (sal_Int32 i = 1; i < types.getLength(); ++i)
{
- buffer.append(" OR TABLE_TYPE LIKE '");
- buffer.append(types[i]);
- buffer.append("'");
+ buffer.append(" OR TABLE_TYPE LIKE '" + types[i] + "'");
}
buffer.append(")");
}
@@ -881,9 +854,10 @@ Reference<XResultSet>
const OUString& /*schemaPattern*/,
const OUString& /*procedureNamePattern*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO IMPL
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -895,9 +869,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getVersionColumns(const Any& /
const OUString& /* schema */,
const OUString& /* table */)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
lcl_setRows_throw(xResultSet, 16, rRows);
return xResultSet;
@@ -907,9 +882,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getExportedKeys(const Any& /*c
const OUString& /*schema */,
const OUString& /*table */)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO implement
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -921,11 +897,12 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c
const OUString& schema,
const OUString& table)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
- OUString query("SELECT refi.CONSTRAINT_CATALOG," // 1: foreign catalog
+ OUString query(u"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
@@ -940,7 +917,7 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c
"refi.CONSTRAINT_NAME "
" and k.TABLE_NAME = refi.TABLE_NAME "
" WHERE k.REFERENCED_TABLE_SCHEMA LIKE "
- "'?' AND refi.TABLE_NAME='?'");
+ "'?' AND refi.TABLE_NAME='?'"_ustr);
query = query.replaceFirst("?", schema); // TODO what if schema is NULL?
query = query.replaceFirst("?", table);
@@ -954,34 +931,34 @@ 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(3)));
+ aRow.push_back(Any(xRow->getString(3)));
// primary key schema
- aRow.push_back(makeAny(xRow->getString(4)));
+ aRow.push_back(Any(xRow->getString(4)));
// primary key table
- aRow.push_back(makeAny(xRow->getString(5)));
+ aRow.push_back(Any(xRow->getString(5)));
// primary column name
- aRow.push_back(makeAny(xRow->getString(6)));
+ aRow.push_back(Any(xRow->getString(6)));
// fk table catalog
- aRow.push_back(makeAny(xRow->getString(1)));
+ aRow.push_back(Any(xRow->getString(1)));
// fk schema
- aRow.push_back(makeAny(xRow->getString(11)));
+ aRow.push_back(Any(xRow->getString(11)));
// fk table
- aRow.push_back(makeAny(xRow->getString(10)));
+ aRow.push_back(Any(xRow->getString(10)));
// fk column name
- aRow.push_back(makeAny(xRow->getString(2)));
+ aRow.push_back(Any(xRow->getString(2)));
// KEY_SEQ
- aRow.push_back(makeAny(sal_Int32{ 0 })); // TODO
+ aRow.push_back(Any(sal_Int32{ 0 })); // TODO
// update rule
- aRow.push_back(makeAny(xRow->getShort(7)));
+ aRow.push_back(Any(xRow->getShort(7)));
// delete rule
- aRow.push_back(makeAny(xRow->getShort(8)));
+ aRow.push_back(Any(xRow->getShort(8)));
// foreign key name
- aRow.push_back(makeAny(xRow->getString(9)));
+ aRow.push_back(Any(xRow->getString(9)));
// primary key name
- aRow.push_back(makeAny(OUString{})); // TODO
+ aRow.push_back(Any(OUString{})); // TODO
// deferrability
- aRow.push_back(makeAny(Deferrability::NONE));
+ aRow.push_back(Any(Deferrability::NONE));
aRows.push_back(aRow);
}
lcl_setRows_throw(xResultSet, 1, aRows);
@@ -992,12 +969,12 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getPrimaryKeys(const Any& /*ca
const OUString& schema,
const OUString& table)
{
- OUString query("SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA "
+ OUString query(u"SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA "
"AS TABLE_SCHEM, TABLE_NAME, "
"COLUMN_NAME, SEQ_IN_INDEX AS KEY_SEQ,"
"INDEX_NAME AS PK_NAME FROM INFORMATION_SCHEMA.STATISTICS "
"WHERE TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' AND INDEX_NAME='PRIMARY' "
- "ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX");
+ "ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX"_ustr);
// TODO use prepared stmt instead
// TODO escape schema, table name ?
@@ -1015,9 +992,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getIndexInfo(const Any& /*cata
sal_Bool /*unique*/,
sal_Bool /*approximate*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -1031,9 +1009,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getBestRowIdentifier(const Any
sal_Int32 /*scope*/,
sal_Bool /*nullable*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -1042,11 +1021,23 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getBestRowIdentifier(const Any
}
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTablePrivileges(
- const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/)
+ const Any& /* catalog */, const OUString& schemaPattern, const OUString& tableNamePattern)
{
- // TODO
- SAL_WARN("connectivity.mysqlc", "method not implemented");
- throw SQLException("getTablePrivileges method not implemented", *this, "IM001", 0, Any());
+ OUString query(u"SELECT TABLE_SCHEMA TABLE_CAT, "
+ "NULL TABLE_SCHEM, "
+ "TABLE_NAME, "
+ "NULL GRANTOR,"
+ "GRANTEE, "
+ "PRIVILEGE_TYPE PRIVILEGE, "
+ "IS_GRANTABLE "
+ "FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES "
+ "WHERE TABLE_SCHEMA LIKE '?' "
+ "AND TABLE_NAME='?'"_ustr);
+ query = query.replaceFirst("?", schemaPattern);
+ query = query.replaceFirst("?", tableNamePattern);
+ Reference<XStatement> statement = m_rConnection.createStatement();
+ Reference<XResultSet> rs = statement->executeQuery(query);
+ return rs;
}
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getCrossReference(
@@ -1054,9 +1045,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getCrossReference(
const OUString& /*primaryTable_*/, const Any& /*foreignCatalog*/,
const OUString& /*foreignSchema*/, const OUString& /*foreignTable*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO
SAL_WARN("connectivity.mysqlc", "method not implemented");