summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamas Bunth <tamas.bunth@collabora.co.uk>2018-08-27 10:16:17 +0200
committerTamás Bunth <btomi96@gmail.com>2018-08-27 12:57:54 +0200
commitbce87186e5a67d5e5cf9dc169a67e852ef5f9bec (patch)
treed322ba29b5cddc2790995f6c438b28a37175d5ca
parent0705d2a239b8fd44420fe2af3555436775660cd6 (diff)
Delete mysqlc module, mysql cpp connector remains
Change-Id: Ic3536c1dd1e2aa9dd19af66db1b9a50fd8ef90e6 Reviewed-on: https://gerrit.libreoffice.org/59639 Tested-by: Jenkins Reviewed-by: Tamás Bunth <btomi96@gmail.com>
-rw-r--r--mysqlc/source/mysqlc_databasemetadata.cxx1234
-rw-r--r--mysqlc/source/mysqlc_general.cxx353
2 files changed, 0 insertions, 1587 deletions
diff --git a/mysqlc/source/mysqlc_databasemetadata.cxx b/mysqlc/source/mysqlc_databasemetadata.cxx
deleted file mode 100644
index 310ce4c1c678..000000000000
--- a/mysqlc/source/mysqlc_databasemetadata.cxx
+++ /dev/null
@@ -1,1234 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#include "mysqlc_databasemetadata.hxx"
-#include <memory>
-#include <com/sun/star/sdbc/DataType.hpp>
-#include <com/sun/star/sdbc/ResultSetType.hpp>
-#include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
-#include <com/sun/star/sdbc/TransactionIsolation.hpp>
-#include <com/sun/star/sdbc/KeyRule.hpp>
-#include <com/sun/star/sdbc/Deferrability.hpp>
-#include <com/sun/star/sdbc/IndexType.hpp>
-#include <com/sun/star/sdbc/BestRowScope.hpp>
-#include <com/sun/star/sdbc/ColumnType.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-
-#include <rtl/ustrbuf.hxx>
-#include "mysqlc_general.hxx"
-#include "mysqlc_statement.hxx"
-#include "mysqlc_driver.hxx"
-#include "mysqlc_preparedstatement.hxx"
-
-#include <stdio.h>
-
-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;
-using mysqlc_sdbc_driver::getStringFromAny;
-
-#include <sal/macros.h>
-
-static std::string wild("%");
-
-
-void lcl_setRows_throw(const Reference< XResultSet >& _xResultSet,sal_Int32 _nType,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());
-
- std::vector< std::vector< Any > >::const_iterator aIter = _rRows.begin();
- Sequence< Any > * pRowsIter = aRows.getArray();
- Sequence< Any > * pRowsEnd = pRowsIter + aRows.getLength();
- for (; pRowsIter != pRowsEnd;++pRowsIter,++aIter) {
- if (!aIter->empty()) {
- Sequence<Any> aSeq(&(*aIter->begin()),aIter->size());
- (*pRowsIter) = aSeq;
- }
- }
- aArgs[1] <<= aRows;
- xIni->initialize(aArgs);
-}
-
-ODatabaseMetaData::ODatabaseMetaData(OConnection& _rCon, MYSQL* pMySql)
- :m_rConnection(_rCon)
- ,m_pMySql(pMySql)
- ,identifier_quote_string_set(false)
-{
-}
-
-ODatabaseMetaData::~ODatabaseMetaData()
-{
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getCatalogSeparator()
-{
- return rtl::OUString();
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxBinaryLiteralLength()
-{
- return 16777208L;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxRowSize()
-{
- return 2147483647L - 8; // Max buffer size - HEADER
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCatalogNameLength()
-{
- return 32;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCharLiteralLength()
-{
- return 16777208;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnNameLength()
-{
- return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInIndex()
-{
- return 16;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxCursorNameLength()
-{
- return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxConnections()
-{
- // TODO
- // SELECT @@max_connections
- return 100;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInTable()
-{
- return 512;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength()
-{
- // TODO
- // "SHOW VARIABLES LIKE 'max_allowed_packet'"
- return 32767;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength()
-{
- return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTablesInSelect()
-{
- return 256;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseQuotedIdentifiers()
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesLowerCaseIdentifiers()
-{
- //TODO;
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseQuotedIdentifiers()
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesMixedCaseIdentifiers()
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseQuotedIdentifiers()
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::storesUpperCaseIdentifiers()
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsAlterTableWithAddColumn()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsAlterTableWithDropColumn()
-{
- return true;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxIndexLength()
-{
- return 256;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns()
-{
- return true;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getCatalogTerm()
-{
- return rtl::OUString("n/a");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString()
-{
- return rtl::OUString("\"");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters()
-{
- return rtl::OUString("#@");
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsDifferentTableCorrelationNames()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::isCatalogAtStart()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionIgnoredInTransactions()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::dataDefinitionCausesTransactionCommit()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsDataManipulationTransactionsOnly()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedDelete()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsPositionedUpdate()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossRollback()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenStatementsAcrossCommit()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossCommit()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOpenCursorsAcrossRollback()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactionIsolationLevel(sal_Int32 /*level*/)
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInDataManipulation()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92FullSQL()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92EntryLevelSQL()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsIntegrityEnhancementFacility()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInIndexDefinitions()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInTableDefinitions()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInTableDefinitions()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInIndexDefinitions()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInDataManipulation()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins()
-{
- return true;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatements()
-{
- return 0;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxProcedureNameLength()
-{
- return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxSchemaNameLength()
-{
- return 64;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTransactions()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::allProceduresAreCallable()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsStoredProcedures()
-{
- return m_rConnection.getMysqlVersion() >= 50000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSelectForUpdate()
-{
- return m_rConnection.getMysqlVersion() >= 40000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::allTablesAreSelectable()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::isReadOnly()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFiles()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::usesLocalFilePerTable()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTypeConversion()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullPlusNonNullIsNull()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsColumnAliasing()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsTableCorrelationNames()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsConvert(sal_Int32 /*fromType*/, sal_Int32 /*toType*/)
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsExpressionsInOrderBy()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupBy()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByBeyondSelect()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsGroupByUnrelated()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleTransactions()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleResultSets()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsLikeEscapeClause()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsOrderByUnrelated()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsUnion()
-{
- return m_rConnection.getMysqlVersion() >= 40000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsUnionAll()
-{
- return m_rConnection.getMysqlVersion() >= 40000;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseIdentifiers()
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseQuotedIdentifiers()
-{
- // TODO
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtEnd()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedAtStart()
-{
- return m_rConnection.getMysqlVersion() > 40001 && m_rConnection.getMysqlVersion() < 40011;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedHigh()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::nullsAreSortedLow()
-{
- return !nullsAreSortedHigh();
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInProcedureCalls()
-{
- return m_rConnection.getMysqlVersion() >= 32200;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSchemasInPrivilegeDefinitions()
-{
- return m_rConnection.getMysqlVersion() >= 32200;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInProcedureCalls()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCatalogsInPrivilegeDefinitions()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCorrelatedSubqueries()
-{
- return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInComparisons()
-{
- return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInExists()
-{
- return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInIns()
-{
- return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsSubqueriesInQuantifieds()
-{
- return m_rConnection.getMysqlVersion() >= 40100;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL()
-{
- return false;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getURL()
-{
- return m_rConnection.getConnectionSettings().connectionURL;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getUserName()
-{
- // TODO execute "SELECT USER()"
- return rtl::OUString();
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDriverName()
-{
- return rtl::OUString( "MySQL Connector/OO.org" );
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDriverVersion()
-{
- return rtl::OUString( "0.9.2" );
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion()
-{
- return rtl::OStringToOUString(mysql_get_server_info(m_pMySql),
- m_rConnection.getConnectionEncoding());
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName()
-{
- return rtl::OUString("MySQL");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getProcedureTerm()
-{
- return rtl::OUString("procedure");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSchemaTerm()
-{
- return rtl::OUString("database");
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion()
-{
- // TODO
- return MARIADBC_VERSION_MAJOR;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getDefaultTransactionIsolation()
-{
- return m_rConnection.getMysqlVersion() >= 32336 ? TransactionIsolation::READ_COMMITTED :
- TransactionIsolation::NONE;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion()
-{
- // TODO
- return MARIADBC_VERSION_MINOR;
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSQLKeywords()
-{
- return rtl::OUString(
- "ACCESSIBLE, ADD, ALL,"\
- "ALTER, ANALYZE, AND, AS, ASC, ASENSITIVE, BEFORE,"\
- "BETWEEN, BIGINT, BINARY, BLOB, BOTH, BY, CALL,"\
- "CASCADE, CASE, CHANGE, CHAR, CHARACTER, CHECK,"\
- "COLLATE, COLUMN, CONDITION, CONNECTION, CONSTRAINT,"\
- "CONTINUE, CONVERT, CREATE, CROSS, CURRENT_DATE,"\
- "CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR,"\
- "DATABASE, DATABASES, DAY_HOUR, DAY_MICROSECOND,"\
- "DAY_MINUTE, DAY_SECOND, DEC, DECIMAL, DECLARE,"\
- "DEFAULT, DELAYED, DELETE, DESC, DESCRIBE,"\
- "DETERMINISTIC, DISTINCT, DISTINCTROW, DIV, DOUBLE,"\
- "DROP, DUAL, EACH, ELSE, ELSEIF, ENCLOSED,"\
- "ESCAPED, EXISTS, EXIT, EXPLAIN, FALSE, FETCH,"\
- "FLOAT, FLOAT4, FLOAT8, FOR, FORCE, FOREIGN, FROM,"\
- "FULLTEXT, GRANT, GROUP, HAVING, HIGH_PRIORITY,"\
- "HOUR_MICROSECOND, HOUR_MINUTE, HOUR_SECOND, IF,"\
- "IGNORE, IN, INDEX, INFILE, INNER, INOUT,"\
- "INSENSITIVE, INSERT, INT, INT1, INT2, INT3, INT4,"\
- "INT8, INTEGER, INTERVAL, INTO, IS, ITERATE, JOIN,"\
- "KEY, KEYS, KILL, LEADING, LEAVE, LEFT, LIKE,"\
- "LOCALTIMESTAMP, LOCK, LONG, LONGBLOB, LONGTEXT,"\
- "LOOP, LOW_PRIORITY, MATCH, MEDIUMBLOB, MEDIUMINT,"\
- "MEDIUMTEXT, MIDDLEINT, MINUTE_MICROSECOND,"\
- "MINUTE_SECOND, MOD, MODIFIES, NATURAL, NOT,"\
- "NO_WRITE_TO_BINLOG, NULL, NUMERIC, ON, OPTIMIZE,"\
- "OPTION, OPTIONALLY, OR, ORDER, OUT, OUTER,"\
- "OUTFILE, PRECISION, PRIMARY, PROCEDURE, PURGE,"\
- "RANGE, READ, READS, READ_ONLY, READ_WRITE, REAL,"\
- "REFERENCES, REGEXP, RELEASE, RENAME, REPEAT,"\
- "REPLACE, REQUIRE, RESTRICT, RETURN, REVOKE, RIGHT,"\
- "RLIKE, SCHEMA, SCHEMAS, SECOND_MICROSECOND, SELECT,"\
- "SENSITIVE, SEPARATOR, SET, SHOW, SMALLINT, SPATIAL,"\
- "SPECIFIC, SQL, SQLEXCEPTION, SQLSTATE, SQLWARNING,"\
- "SQL_BIG_RESULT, SQL_CALC_FOUND_ROWS, SQL_SMALL_RESULT,"\
- "SSL, STARTING, STRAIGHT_JOIN, TABLE, TERMINATED,"\
- "THEN, TINYBLOB, TINYINT, TINYTEXT, TO, TRAILING,"\
- "TRIGGER, TRUE, UNDO, UNION, UNIQUE, UNLOCK,"\
- "UNSIGNED, UPDATE, USAGE, USE, USING, UTC_DATE,"\
- "UTC_TIME, UTC_TIMESTAMP, VALUES, VARBINARY, VARCHAR,"\
- "VARCHARACTER, VARYING, WHEN, WHERE, WHILE, WITH,"\
- "WRITE, X509, XOR, YEAR_MONTH, ZEROFILL" \
- "GENERAL, IGNORE_SERVER_IDS, MASTER_HEARTBEAT_PERIOD," \
- "MAXVALUE, RESIGNAL, SIGNAL, SLOW");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape()
-{
- return rtl::OUString("\\");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getStringFunctions()
-{
- return rtl::OUString(
- "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");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions()
-{
- return rtl::OUString(
- "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");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getSystemFunctions()
-{
- return rtl::OUString(
- "DATABASE,USER,SYSTEM_USER,"
- "SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION");
-}
-
-rtl::OUString SAL_CALL ODatabaseMetaData::getNumericFunctions()
-{
- return rtl::OUString("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");
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsCoreSQLGrammar()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsMinimumSQLGrammar()
-{
- return true;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsFullOuterJoins()
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsLimitedOuterJoins()
-{
- return true;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInGroupBy()
-{
- return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInOrderBy()
-{
- return 64;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxColumnsInSelect()
-{
- return 256;
-}
-
-sal_Int32 SAL_CALL ODatabaseMetaData::getMaxUserNameLength()
-{
- return 16;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetType(sal_Int32 setType)
-{
- return setType == ResultSetType::SCROLL_SENSITIVE;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsResultSetConcurrency(sal_Int32 /*setType*/, sal_Int32 /*concurrency*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::ownUpdatesAreVisible(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::ownDeletesAreVisible(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::ownInsertsAreVisible(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::othersUpdatesAreVisible(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::othersDeletesAreVisible(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::othersInsertsAreVisible(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::updatesAreDetected(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::deletesAreDetected(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::insertsAreDetected(sal_Int32 /*setType*/)
-{
- return false;
-}
-
-sal_Bool SAL_CALL ODatabaseMetaData::supportsBatchUpdates()
-{
- return true;
-}
-
-Reference< XConnection > SAL_CALL ODatabaseMetaData::getConnection()
-{
- return &m_rConnection;
-}
-
-/*
- Here follow all methods which return(a resultset
- the first methods is an example implementation how to use this resultset
- of course you could implement it on your and you should do this because
- the general way is more memory expensive
-*/
-
-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);
- std::vector< std::vector< Any > > rRows;
- rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
-
- for (sal_uInt32 i = 0; i < 2; i++) {
- 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);
- }
- }
- lcl_setRows_throw(xResultSet, 5 ,rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
-
- std::vector< std::vector< Any > > rRows;
-
- rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
- 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(aRow);
- i++;
- }
-
- lcl_setRows_throw(xResultSet, 14, rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs()
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas()
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
-
- rtl::OUString sSql = m_rConnection.getMysqlVersion() > 49999?
- rtl::OUString{"SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY SCHEMA_NAME"}:
- rtl::OUString{"SHOW DATABASES"};
-
- Reference< XStatement > statement = m_rConnection.createStatement();
- Reference< XInterface > executed = statement->executeQuery(sSql);
- Reference< XResultSet > rs( executed, UNO_QUERY_THROW);
- Reference< XResultSetMetaDataSupplier > supp( executed, UNO_QUERY_THROW);
- Reference< XResultSetMetaData > rs_meta = supp->getMetaData();
-
- Reference< XRow > xRow( rs, UNO_QUERY_THROW );
- sal_uInt32 columns = rs_meta->getColumnCount();
- while( rs->next() )
- {
- std::vector< Any > aRow { Any() };
- bool informationSchema = false;
- for (sal_uInt32 i = 1; i <= columns; i++) {
- rtl::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);
- }
- }
-
- lcl_setRows_throw(xResultSet, 1, rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
- const Any& /*catalog*/,
- const rtl::OUString& schema,
- const rtl::OUString& table,
- const rtl::OUString& columnNamePattern)
-{
- rtl::OUString query("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");
-
- query = query.replaceFirst("?", schema);
- query = query.replaceFirst("?", table);
- query = query.replaceFirst("?", columnNamePattern);
-
- Reference<XStatement> statement = m_rConnection.createStatement();
- Reference<XResultSet> rs = statement->executeQuery(query);
- return rs;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
- const Any& /*catalog*/,
- const rtl::OUString& /*schemaPattern*/,
- const rtl::OUString& tableNamePattern,
- const rtl::OUString& columnNamePattern)
-{
- rtl::OUStringBuffer queryBuf("SELECT TABLE_CATALOG AS TABLE_CAT, " // 1
- "TABLE_SCHEMA AS TABLE_SCHEM, " // 2
- "TABLE_NAME, " // 3
- "COLUMN_NAME, " // 4
- "DATA_TYPE, " // 5
- // TYPE_NAME missing
- "CHARACTER_MAXIMUM_LENGTH, " // 6
- "NUMERIC_PRECISION, " // 7
- // buffer length missing
- "NUMERIC_SCALE AS DECIMAL_DIGITS, " // 8
- // NUM_PREC_RADIX missing
- // NULLABLE missing
- "COLUMN_COMMENT AS REMARKS, " // 9
- "COLUMN_DEFAULT AS COLUMN_DEF," // 10
- "CHARACTER_OCTET_LENGTH, " // 11
- "ORDINAL_POSITION, " // 12
- "IS_NULLABLE, " // 13
- "COLUMN_TYPE " // 14
- "FROM INFORMATION_SCHEMA.COLUMNS "
- "WHERE (1 = 1) ");
-
- if (!tableNamePattern.isEmpty())
- {
- rtl::OUString sAppend;
- if (tableNamePattern.match("%"))
- sAppend = "AND TABLE_NAME LIKE '%' ";
- else
- sAppend = "AND TABLE_NAME = '%' ";
- queryBuf.append(sAppend.replaceAll("%", tableNamePattern));
- }
- if (!columnNamePattern.isEmpty())
- {
- rtl::OUString sAppend;
- if (columnNamePattern.match("%"))
- sAppend = "AND COLUMN_NAME LIKE '%' ";
- else
- sAppend = "AND COLUMN_NAME = '%' ";
- queryBuf.append(sAppend.replaceAll("%", columnNamePattern));
- }
-
- rtl::OUString query = queryBuf.makeStringAndClear();
- Reference<XStatement> statement = m_rConnection.createStatement();
- Reference<XResultSet> rs = statement->executeQuery(query.getStr());
- Reference<XRow> xRow( rs, UNO_QUERY_THROW );
-
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),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)));
- // schema name
- aRow.push_back(makeAny(xRow->getString(2)));
- // table name
- aRow.push_back(makeAny(xRow->getString(3)));
- // column name
- aRow.push_back(makeAny(xRow->getString(4)));
- // data type
- rtl::OUString sDataType = xRow->getString(5);
- aRow.push_back(makeAny(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType)));
- // type name
- aRow.push_back(makeAny(sDataType)); // TODO
- // column size
- sal_Int32 nColumnSize = 0;
- rtl::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
- else if(sDataType.equalsIgnoreAsciiCase("date"))
- nColumnSize = 10;
- else if(sDataType.equalsIgnoreAsciiCase("date"))
- nColumnSize = 8;
- else if(sDataType.equalsIgnoreAsciiCase("datetime")
- || sDataType.equalsIgnoreAsciiCase("timestamp"))
- nColumnSize = 19;
- else if(!bIsCharMax)
- nColumnSize = xRow->getShort(7); // numeric precision
- else
- nColumnSize = nCharMaxLen;
- aRow.push_back(makeAny(nColumnSize));
- aRow.push_back( Any() ); // buffer length - unused
- // decimal digits (scale)
- aRow.push_back(makeAny(xRow->getShort(8)));
- // num_prec_radix
- aRow.push_back(makeAny(sal_Int32(10)));
- // nullable
- rtl::OUString sIsNullable = xRow->getString(13);
- if(xRow->wasNull())
- aRow.push_back(makeAny(ColumnValue::NULLABLE_UNKNOWN));
- else if(sIsNullable.equalsIgnoreAsciiCase("YES"))
- aRow.push_back(makeAny(ColumnValue::NULLABLE));
- else
- aRow.push_back(makeAny(ColumnValue::NO_NULLS));
- // remarks
- aRow.push_back(makeAny(xRow->getString(9)));
- // default
- aRow.push_back(makeAny(xRow->getString(10)));
-
- aRow.push_back( Any{} ); // sql_data_type - unused
- aRow.push_back( Any{} ); // sql_datetime_sub - unused
-
- // character octet length
- aRow.push_back(makeAny(xRow->getString(11)));
- // ordinal position
- aRow.push_back(makeAny(xRow->getString(12)));
- // is nullable
- aRow.push_back(makeAny(sIsNullable));
- aRows.push_back(aRow);
- }
- lcl_setRows_throw(xResultSet, 1, aRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
- const Any& /*catalog*/,
- const rtl::OUString& schemaPattern,
- const rtl::OUString& tableNamePattern,
- const Sequence< rtl::OUString >& /*types */)
-{
- rtl::OUString query("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 '?' "
- "ORDER BY TABLE_TYPE, TABLE_SCHEMA, TABLE_NAME");
-
- // TODO use prepared stmt instead
- // TODO escape schema, table name ?
- 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::getProcedureColumns(
- const Any& /* catalog */,
- const rtl::OUString& /* schemaPattern */,
- const rtl::OUString& /* procedureNamePattern */,
- const rtl::OUString& /* columnNamePattern */)
-{
- // Currently there is no information available
- return nullptr;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures(
- const Any& /*catalog*/,
- const rtl::OUString& /*schemaPattern*/,
- const rtl::OUString& /*procedureNamePattern*/)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- // TODO IMPL
- lcl_setRows_throw(xResultSet, 7,rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getVersionColumns(
- const Any& /* catalog */,
- const rtl::OUString& /* schema */,
- const rtl::OUString& /* table */)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- lcl_setRows_throw(xResultSet, 16,rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys(
- const Any& /*catalog */,
- const rtl::OUString& /*schema */,
- const rtl::OUString& /*table */)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- // TODO implement
- lcl_setRows_throw(xResultSet, 8, rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys(
- const Any& /*catalog*/,
- const rtl::OUString& /*schema*/,
- const rtl::OUString& /*table*/)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- // TODO implement
- lcl_setRows_throw(xResultSet,9,rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys(
- const Any& /*catalog*/,
- const rtl::OUString& schema,
- const rtl::OUString& table)
-{
- rtl::OUString query("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");
-
- // TODO use prepared stmt instead
- // TODO escape schema, table name ?
- query = query.replaceFirst("?", schema);
- query = query.replaceFirst("?", table);
-
- Reference<XStatement> statement = m_rConnection.createStatement();
- Reference<XResultSet> rs = statement->executeQuery(query);
- return rs;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
- const Any& /*catalog*/,
- const rtl::OUString& /*schema*/,
- const rtl::OUString& /*table*/,
- sal_Bool /*unique*/,
- sal_Bool /*approximate*/)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- // TODO
- lcl_setRows_throw(xResultSet, 11, rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getBestRowIdentifier(
- const Any& /*catalog*/,
- const rtl::OUString& /*schema*/,
- const rtl::OUString& /*table*/,
- sal_Int32 /*scope*/,
- sal_Bool /*nullable*/)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- // TODO
- lcl_setRows_throw(xResultSet, 15, rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
- const Any& /*catalog*/,
- const rtl::OUString& /*schemaPattern*/,
- const rtl::OUString& /*tableNamePattern*/)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- // TODO
- lcl_setRows_throw(xResultSet,12,rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference(
- const Any& /*primaryCatalog*/,
- const rtl::OUString& /*primarySchema_*/,
- const rtl::OUString& /*primaryTable_*/,
- const Any& /*foreignCatalog*/,
- const rtl::OUString& /*foreignSchema*/,
- const rtl::OUString& /*foreignTable*/)
-{
- Reference< XResultSet > xResultSet(getOwnConnection().getDriver().getFactory()->createInstance("org.openoffice.comp.helper.DatabaseMetaDataResultSet"),UNO_QUERY);
- std::vector< std::vector< Any > > rRows;
- // TODO
- lcl_setRows_throw(xResultSet,13,rRows);
- return xResultSet;
-}
-
-Reference< XResultSet > SAL_CALL ODatabaseMetaData::getUDTs(
- const Any& /* catalog */,
- const rtl::OUString& /* schemaPattern */,
- const rtl::OUString& /* typeNamePattern */,
- const Sequence< sal_Int32 >& /* types */)
-{
- mysqlc_sdbc_driver::throwFeatureNotImplementedException("ODatabaseMetaData::getUDTs", *this);
- return nullptr;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/mysqlc/source/mysqlc_general.cxx b/mysqlc/source/mysqlc_general.cxx
deleted file mode 100644
index aa6822a6ba49..000000000000
--- a/mysqlc/source/mysqlc_general.cxx
+++ /dev/null
@@ -1,353 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#include "mysqlc_general.hxx"
-#include "mysqlc_resultsetmetadata.hxx"
-
-#include <sal/log.hxx>
-#include <rtl/ustring.hxx>
-
-using com::sun::star::sdbc::SQLException;
-
-using com::sun::star::uno::Reference;
-using com::sun::star::uno::XInterface;
-using com::sun::star::uno::Any;
-
-using namespace rtl;
-
-namespace mysqlc_sdbc_driver
-{
-
-void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize)
-{
- assert(mem);
- switch(eType)
- {
- case MYSQL_TYPE_LONG:
- case MYSQL_TYPE_INT24:
- *mem = malloc(sizeof(sal_Int32));
- break;
- case MYSQL_TYPE_SHORT:
- *mem = malloc(sizeof(sal_Int16));
- break;
- case MYSQL_TYPE_BIT:
- case MYSQL_TYPE_TINY:
- *mem = malloc(sizeof(sal_Int8));
- break;
- case MYSQL_TYPE_LONGLONG:
- *mem = malloc(sizeof(sal_Int64));
- break;
- case MYSQL_TYPE_FLOAT:
- *mem = malloc(sizeof(float));
- break;
- case MYSQL_TYPE_DOUBLE:
- *mem = malloc(sizeof(double));
- break;
- case MYSQL_TYPE_DATE:
- case MYSQL_TYPE_TIME:
- case MYSQL_TYPE_DATETIME:
- case MYSQL_TYPE_TIMESTAMP:
- case MYSQL_TYPE_YEAR: // FIXME below
- case MYSQL_TYPE_NEWDATE:
- case MYSQL_TYPE_ENUM:
- case MYSQL_TYPE_SET:
- case MYSQL_TYPE_GEOMETRY:
- *mem = malloc(sizeof(MYSQL_TIME));
- break;
- case MYSQL_TYPE_STRING:
- case MYSQL_TYPE_VAR_STRING:
- case MYSQL_TYPE_VARCHAR:
- case MYSQL_TYPE_DECIMAL:
- case MYSQL_TYPE_NEWDECIMAL:
- *mem = malloc(sizeof(char)*nSize);
- break;
- case MYSQL_TYPE_NULL:
- case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_TINY_BLOB:
- case MYSQL_TYPE_MEDIUM_BLOB:
- case MYSQL_TYPE_LONG_BLOB:
- *mem = nullptr;
- break;
- default:
- SAL_WARN("mysqlc","unknown enum_field_type");
- }
-}
-
-/// Use this instead of mysql_real_escape_string, because that one also escapes
-/// single quote ('), which should not be escaped
-rtl::OString escapeSql( const rtl::OString& from )
-{
- rtl::OString sRet = from.replaceAll("\\", "\\\\");
- sRet = sRet.replaceAll("\"", "\\\"");
- sRet = sRet.replaceAll("`", "\\`");
- return sRet;
-}
-
-void throwFeatureNotImplementedException( const sal_Char* _pAsciiFeatureName, const css::uno::Reference< XInterface >& _rxContext )
-{
- const rtl::OUString sMessage = rtl::OUString::createFromAscii( _pAsciiFeatureName ) + ": feature not implemented.";
- throw SQLException(
- sMessage,
- _rxContext,
- rtl::OUString("HYC00"),
- 0,
- Any()
- );
-}
-
-void throwInvalidArgumentException( const sal_Char* _pAsciiFeatureName, const css::uno::Reference< XInterface >& _rxContext )
-{
- const rtl::OUString sMessage = rtl::OUString::createFromAscii( _pAsciiFeatureName ) + ": invalid arguments.";
- throw SQLException(
- sMessage,
- _rxContext,
- rtl::OUString("HYC00"),
- 0,
- Any()
- );
-}
-
-void translateAndThrow(const ::sql::SQLException& _error, const css::uno::Reference< css::uno::XInterface >& _context, const rtl_TextEncoding encoding)
-{
- throw SQLException(
- convert(_error.what(), encoding),
- _context,
- convert(_error.getSQLState(), encoding),
- _error.getErrorCode(),
- Any()
- );
-}
-
-void throwSQLExceptionWithMsg(const char* msg, unsigned int errorNum, const css::uno::Reference< css::uno::XInterface >& _context, const rtl_TextEncoding encoding)
-{
- rtl::OString errorMsg{msg};
- // TODO error code?
- throw SQLException( rtl::OStringToOUString(errorMsg, encoding),
- _context, rtl::OUString(), errorNum, Any());
-}
-
-rtl::OUString getStringFromAny(const Any& _rAny)
-{
- rtl::OUString nReturn;
- OSL_VERIFY( _rAny >>= nReturn );
- return nReturn;
-}
-
-int mysqlToOOOType(int eType, int charsetnr) noexcept
-{
- // charset number 63 indicates binary
- switch (eType) {
- case MYSQL_TYPE_BIT:
- return css::sdbc::DataType::VARCHAR;
-
- case MYSQL_TYPE_TINY:
- return css::sdbc::DataType::TINYINT;
-
- case MYSQL_TYPE_SHORT:
- return css::sdbc::DataType::SMALLINT;
-
- case MYSQL_TYPE_INT24:
- case MYSQL_TYPE_LONG:
- return css::sdbc::DataType::INTEGER;
-
- case MYSQL_TYPE_LONGLONG:
- return css::sdbc::DataType::BIGINT;
-
- case MYSQL_TYPE_FLOAT:
- return css::sdbc::DataType::REAL;
-
- case MYSQL_TYPE_DOUBLE:
- return css::sdbc::DataType::DOUBLE;
-
- case MYSQL_TYPE_DECIMAL:
- case MYSQL_TYPE_NEWDECIMAL:
- return css::sdbc::DataType::DECIMAL;
-
- case MYSQL_TYPE_STRING:
- if(charsetnr == 63)
- return css::sdbc::DataType::BINARY;
- return css::sdbc::DataType::CHAR;
-
- case MYSQL_TYPE_ENUM:
- case MYSQL_TYPE_SET:
- case MYSQL_TYPE_VAR_STRING:
- if(charsetnr == 63)
- return css::sdbc::DataType::VARBINARY;
- return css::sdbc::DataType::VARCHAR;
-
- case MYSQL_TYPE_BLOB:
- if(charsetnr == 63)
- return css::sdbc::DataType::LONGVARBINARY;
- return css::sdbc::DataType::LONGVARCHAR;
-
- case MYSQL_TYPE_TIMESTAMP:
- case MYSQL_TYPE_DATETIME:
- return css::sdbc::DataType::TIMESTAMP;
-
- case MYSQL_TYPE_DATE:
- return css::sdbc::DataType::DATE;
-
- case MYSQL_TYPE_TIME:
- return css::sdbc::DataType::TIME;
-
- case MYSQL_TYPE_GEOMETRY:
- return css::sdbc::DataType::VARCHAR;
-
- case MYSQL_TYPE_NULL:
- return css::sdbc::DataType::SQLNULL;
- }
-
- OSL_FAIL( "mysqlToOOOType: unhandled case, falling back to VARCHAR" );
- return css::sdbc::DataType::VARCHAR;
-}
-
-int mysqlStrToOOOType(const rtl::OUString& sType)
-{
- // TODO other types.
- if(sType.equalsIgnoreAsciiCase("tiny") || sType.equalsIgnoreAsciiCase("tinyint"))
- return css::sdbc::DataType::TINYINT;
- if(sType.equalsIgnoreAsciiCase("smallint"))
- return css::sdbc::DataType::SMALLINT;
- if(sType.equalsIgnoreAsciiCase("longtext"))
- return css::sdbc::DataType::LONGVARCHAR;
- if(sType.equalsIgnoreAsciiCase("int"))
- return css::sdbc::DataType::INTEGER;
- if(sType.equalsIgnoreAsciiCase("varchar") || sType.equalsIgnoreAsciiCase("set") ||
- sType.equalsIgnoreAsciiCase("enum"))
- return css::sdbc::DataType::VARCHAR;
- if(sType.equalsIgnoreAsciiCase("bigint"))
- return css::sdbc::DataType::BIGINT;
- if(sType.equalsIgnoreAsciiCase("blob") || sType.equalsIgnoreAsciiCase("longblob"))
- return css::sdbc::DataType::BLOB;
- if(sType.equalsIgnoreAsciiCase("varbinary"))
- return css::sdbc::DataType::VARBINARY;
- if(sType.equalsIgnoreAsciiCase("text"))
- return css::sdbc::DataType::CHAR;
- if(sType.equalsIgnoreAsciiCase("binary"))
- return css::sdbc::DataType::BINARY;
- if(sType.equalsIgnoreAsciiCase("time"))
- return css::sdbc::DataType::TIME;
- if(sType.equalsIgnoreAsciiCase("date"))
- return css::sdbc::DataType::DATE;
- if(sType.equalsIgnoreAsciiCase("datetime"))
- return css::sdbc::DataType::TIMESTAMP;
- if(sType.equalsIgnoreAsciiCase("decimal"))
- return css::sdbc::DataType::DECIMAL;
- if(sType.equalsIgnoreAsciiCase("real") || sType.equalsIgnoreAsciiCase("float"))
- return css::sdbc::DataType::REAL;
- if(sType.equalsIgnoreAsciiCase("double"))
- return css::sdbc::DataType::DOUBLE;
- if(sType.equalsIgnoreAsciiCase("bit") || sType.equalsIgnoreAsciiCase("bool") ||
- sType.equalsIgnoreAsciiCase("boolean"))
- return css::sdbc::DataType::BOOLEAN;
- OSL_FAIL("Unknown type name from string, failing back to varchar.");
- return css::sdbc::DataType::VARCHAR;
-}
-
-rtl::OUString mysqlTypeToStr(MYSQL_FIELD* field)
-{
- bool isUnsigned = (field->flags & UNSIGNED_FLAG) != 0;
- bool isZerofill = (field->flags & ZEROFILL_FLAG) != 0;
- switch (field->type)
- {
- case MYSQL_TYPE_BIT:
- return OUString{"BIT"};
- case MYSQL_TYPE_DECIMAL:
- case MYSQL_TYPE_NEWDECIMAL:
- return isUnsigned ? (isZerofill? OUString{"DECIMAL UNSIGNED ZEROFILL"} : OUString{"DECIMAL UNSIGNED"}): OUString{"DECIMAL"};
- case MYSQL_TYPE_TINY:
- return isUnsigned ? (isZerofill? OUString{"TINYINT UNSIGNED ZEROFILL"} : OUString{"TINYINT UNSIGNED"}): OUString{"TINYINT"};
- case MYSQL_TYPE_SHORT:
- return isUnsigned ? (isZerofill? OUString{"SMALLINT UNSIGNED ZEROFILL"} : OUString{"SMALLINT UNSIGNED"}): OUString{"SMALLINT"};
- case MYSQL_TYPE_LONG:
- return isUnsigned ? (isZerofill? OUString{"INT UNSIGNED ZEROFILL"} : OUString{"INT UNSIGNED"}): OUString{"INT"};
- case MYSQL_TYPE_FLOAT:
- return isUnsigned ? (isZerofill? OUString{"FLOAT UNSIGNED ZEROFILL"} : OUString{"FLOAT UNSIGNED"}): OUString{"FLOAT"};
- case MYSQL_TYPE_DOUBLE:
- return isUnsigned ? (isZerofill? OUString{"DOUBLE UNSIGNED ZEROFILL"} : OUString{"DOUBLE UNSIGNED"}): OUString{"DOUBLE"};
- case MYSQL_TYPE_NULL:
- return OUString{"NULL"};
- case MYSQL_TYPE_TIMESTAMP:
- return OUString{"TIMESTAMP"};
- case MYSQL_TYPE_LONGLONG:
- return isUnsigned ? (isZerofill? OUString{"BIGINT UNSIGNED ZEROFILL"} : OUString{"BIGINT UNSIGNED"}) : OUString{"BIGINT"};
- case MYSQL_TYPE_INT24:
- return isUnsigned ? (isZerofill? OUString{"MEDIUMINT UNSIGNED ZEROFILL"} : OUString{"MEDIUMINT UNSIGNED"}) : OUString{"MEDIUMINT"};
- case MYSQL_TYPE_DATE:
- return OUString{"DATE"};
- case MYSQL_TYPE_TIME:
- return OUString{"TIME"};
- case MYSQL_TYPE_DATETIME:
- return OUString{"DATETIME"};
- case MYSQL_TYPE_TINY_BLOB:
- {
- return OUString{"TINYBLOB"};
- }
- case MYSQL_TYPE_MEDIUM_BLOB:
- {
- return OUString{"MEDIUMBLOB"};
- }
- case MYSQL_TYPE_LONG_BLOB:
- {
- return OUString{"LONGBLOB"};
- }
- case MYSQL_TYPE_BLOB:
- {
- return OUString{"BLOB"};
- }
- case MYSQL_TYPE_VARCHAR:
- case MYSQL_TYPE_VAR_STRING:
- if (field->flags & ENUM_FLAG) {
- return OUString{"ENUM"};
- }
- if (field->flags & SET_FLAG) {
- return OUString{"SET"};
- }
- return OUString{"VARCHAR"};
- case MYSQL_TYPE_STRING:
- if (field->flags & ENUM_FLAG) {
- return OUString{"ENUM"};
- }
- if (field->flags & SET_FLAG) {
- return OUString{"SET"};
- }
- return OUString{"CHAR"};
- case MYSQL_TYPE_YEAR:
- return OUString{"YEAR"};
- case MYSQL_TYPE_GEOMETRY:
- return OUString{"GEOMETRY"};
- default:
- return OUString{"UNKNOWN"};
- }
-
-}
-
-rtl::OUString convert(const ::std::string& _string, const rtl_TextEncoding encoding)
-{
- return rtl::OUString( _string.c_str(), _string.size(), encoding );
-}
-
-::std::string convert(const rtl::OUString& _string, const rtl_TextEncoding encoding)
-{
- return ::std::string( rtl::OUStringToOString( _string, encoding ).getStr() );
-}
-
-
-} /* namespace */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */