diff options
Diffstat (limited to 'connectivity/source/drivers/mysqlc/mysqlc_general.cxx')
-rw-r--r-- | connectivity/source/drivers/mysqlc/mysqlc_general.cxx | 154 |
1 files changed, 85 insertions, 69 deletions
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_general.cxx b/connectivity/source/drivers/mysqlc/mysqlc_general.cxx index 7ed11fe3ff13..58409e454e7a 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_general.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_general.cxx @@ -20,6 +20,7 @@ #include <sal/log.hxx> #include <rtl/ustring.hxx> +#include <o3tl/string_view.hxx> #include <com/sun/star/sdbc/DataType.hpp> @@ -43,6 +44,7 @@ void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize) *mem = malloc(sizeof(sal_Int32)); break; case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_YEAR: *mem = malloc(sizeof(sal_Int16)); break; case MYSQL_TYPE_BIT: @@ -62,7 +64,6 @@ void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize) 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: @@ -93,7 +94,7 @@ void throwFeatureNotImplementedException(const char* _pAsciiFeatureName, { const OUString sMessage = OUString::createFromAscii(_pAsciiFeatureName) + ": feature not implemented."; - throw SQLException(sMessage, _rxContext, "HYC00", 0, Any()); + throw SQLException(sMessage, _rxContext, u"HYC00"_ustr, 0, Any()); } void throwInvalidArgumentException(const char* _pAsciiFeatureName, @@ -101,7 +102,7 @@ void throwInvalidArgumentException(const char* _pAsciiFeatureName, { const OUString sMessage = OUString::createFromAscii(_pAsciiFeatureName) + ": invalid arguments."; - throw SQLException(sMessage, _rxContext, "HYC00", 0, Any()); + throw SQLException(sMessage, _rxContext, u"HYC00"_ustr, 0, Any()); } void throwSQLExceptionWithMsg(const char* msg, const char* SQLSTATE, unsigned int errorNum, @@ -125,12 +126,13 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept switch (eType) { case MYSQL_TYPE_BIT: - return css::sdbc::DataType::VARCHAR; + return css::sdbc::DataType::BIT; case MYSQL_TYPE_TINY: return css::sdbc::DataType::TINYINT; case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_YEAR: return css::sdbc::DataType::SMALLINT; case MYSQL_TYPE_INT24: @@ -163,6 +165,9 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept return css::sdbc::DataType::VARCHAR; case MYSQL_TYPE_BLOB: + case MYSQL_TYPE_TINY_BLOB: + case MYSQL_TYPE_MEDIUM_BLOB: + case MYSQL_TYPE_LONG_BLOB: if (charsetnr == 63) return css::sdbc::DataType::LONGVARBINARY; return css::sdbc::DataType::LONGVARCHAR; @@ -188,46 +193,58 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept return css::sdbc::DataType::VARCHAR; } -sal_Int32 mysqlStrToOOOType(const OUString& sType) +sal_Int32 mysqlStrToOOOType(std::u16string_view sType) { // TODO other types. - if (sType.equalsIgnoreAsciiCase("tiny") || sType.equalsIgnoreAsciiCase("tinyint")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"tiny") + || o3tl::equalsIgnoreAsciiCase(sType, u"tinyint")) return css::sdbc::DataType::TINYINT; - if (sType.equalsIgnoreAsciiCase("smallint") || sType.equalsIgnoreAsciiCase("mediumint")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"smallint") + || o3tl::equalsIgnoreAsciiCase(sType, u"year")) return css::sdbc::DataType::SMALLINT; - if (sType.equalsIgnoreAsciiCase("longtext")) - return css::sdbc::DataType::LONGVARCHAR; - if (sType.equalsIgnoreAsciiCase("int")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"int") + || o3tl::equalsIgnoreAsciiCase(sType, u"mediumint")) return css::sdbc::DataType::INTEGER; - if (sType.equalsIgnoreAsciiCase("varchar") || sType.equalsIgnoreAsciiCase("set") - || sType.equalsIgnoreAsciiCase("enum")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"varchar") || o3tl::equalsIgnoreAsciiCase(sType, u"set") + || o3tl::equalsIgnoreAsciiCase(sType, u"enum")) return css::sdbc::DataType::VARCHAR; - if (sType.equalsIgnoreAsciiCase("bigint")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"bigint")) return css::sdbc::DataType::BIGINT; - if (sType.equalsIgnoreAsciiCase("blob") || sType.equalsIgnoreAsciiCase("longblob")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"blob") + || o3tl::equalsIgnoreAsciiCase(sType, u"longblob") + || o3tl::equalsIgnoreAsciiCase(sType, u"tinyblob") + || o3tl::equalsIgnoreAsciiCase(sType, u"mediumblob")) return css::sdbc::DataType::BLOB; - if (sType.equalsIgnoreAsciiCase("varbinary")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"varbinary")) return css::sdbc::DataType::VARBINARY; - if (sType.equalsIgnoreAsciiCase("char")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"char")) return css::sdbc::DataType::CHAR; - if (sType.equalsIgnoreAsciiCase("text")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"tinytext")) + return css::sdbc::DataType::VARCHAR; + if (o3tl::equalsIgnoreAsciiCase(sType, u"text")) + return css::sdbc::DataType::LONGVARCHAR; + if (o3tl::equalsIgnoreAsciiCase(sType, u"mediumtext") + || o3tl::equalsIgnoreAsciiCase(sType, u"longtext")) return css::sdbc::DataType::CLOB; - if (sType.equalsIgnoreAsciiCase("binary")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"binary")) return css::sdbc::DataType::BINARY; - if (sType.equalsIgnoreAsciiCase("time")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"time")) return css::sdbc::DataType::TIME; - if (sType.equalsIgnoreAsciiCase("date")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"date")) return css::sdbc::DataType::DATE; - if (sType.equalsIgnoreAsciiCase("datetime") || sType.equalsIgnoreAsciiCase("timestamp")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"datetime") + || o3tl::equalsIgnoreAsciiCase(sType, u"timestamp")) return css::sdbc::DataType::TIMESTAMP; - if (sType.equalsIgnoreAsciiCase("decimal")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"decimal")) return css::sdbc::DataType::DECIMAL; - if (sType.equalsIgnoreAsciiCase("real") || sType.equalsIgnoreAsciiCase("float")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"real") || o3tl::equalsIgnoreAsciiCase(sType, u"float")) return css::sdbc::DataType::REAL; - if (sType.equalsIgnoreAsciiCase("double")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"double")) return css::sdbc::DataType::DOUBLE; - if (sType.equalsIgnoreAsciiCase("bit") || sType.equalsIgnoreAsciiCase("bool") - || sType.equalsIgnoreAsciiCase("boolean")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"bit")) + return css::sdbc::DataType::BIT; + if (o3tl::equalsIgnoreAsciiCase(sType, u"bool") + || o3tl::equalsIgnoreAsciiCase(sType, u"boolean")) return css::sdbc::DataType::BOOLEAN; OSL_FAIL("Unknown type name from string, failing back to varchar."); return css::sdbc::DataType::VARCHAR; @@ -240,93 +257,92 @@ OUString mysqlTypeToStr(unsigned type, unsigned flags) switch (type) { case MYSQL_TYPE_BIT: - return OUString{ "BIT" }; + return u"BIT"_ustr; case MYSQL_TYPE_DECIMAL: case MYSQL_TYPE_NEWDECIMAL: - return isUnsigned ? (isZerofill ? OUString{ "DECIMAL UNSIGNED ZEROFILL" } - : OUString{ "DECIMAL UNSIGNED" }) - : OUString{ "DECIMAL" }; + return isUnsigned + ? (isZerofill ? u"DECIMAL UNSIGNED ZEROFILL"_ustr : u"DECIMAL UNSIGNED"_ustr) + : u"DECIMAL"_ustr; case MYSQL_TYPE_TINY: - return isUnsigned ? (isZerofill ? OUString{ "TINYINT UNSIGNED ZEROFILL" } - : OUString{ "TINYINT UNSIGNED" }) - : OUString{ "TINYINT" }; + return isUnsigned + ? (isZerofill ? u"TINYINT UNSIGNED ZEROFILL"_ustr : u"TINYINT UNSIGNED"_ustr) + : u"TINYINT"_ustr; case MYSQL_TYPE_SHORT: - return isUnsigned ? (isZerofill ? OUString{ "SMALLINT UNSIGNED ZEROFILL" } - : OUString{ "SMALLINT UNSIGNED" }) - : OUString{ "SMALLINT" }; + return isUnsigned ? (isZerofill ? u"SMALLINT UNSIGNED ZEROFILL"_ustr + : u"SMALLINT UNSIGNED"_ustr) + : u"SMALLINT"_ustr; case MYSQL_TYPE_LONG: - return isUnsigned ? (isZerofill ? OUString{ "INT UNSIGNED ZEROFILL" } - : OUString{ "INT UNSIGNED" }) - : OUString{ "INT" }; + return isUnsigned ? (isZerofill ? u"INT UNSIGNED ZEROFILL"_ustr : u"INT UNSIGNED"_ustr) + : u"INT"_ustr; case MYSQL_TYPE_FLOAT: - return isUnsigned ? (isZerofill ? OUString{ "FLOAT UNSIGNED ZEROFILL" } - : OUString{ "FLOAT UNSIGNED" }) - : OUString{ "FLOAT" }; + return isUnsigned + ? (isZerofill ? u"FLOAT UNSIGNED ZEROFILL"_ustr : u"FLOAT UNSIGNED"_ustr) + : u"FLOAT"_ustr; case MYSQL_TYPE_DOUBLE: - return isUnsigned ? (isZerofill ? OUString{ "DOUBLE UNSIGNED ZEROFILL" } - : OUString{ "DOUBLE UNSIGNED" }) - : OUString{ "DOUBLE" }; + return isUnsigned + ? (isZerofill ? u"DOUBLE UNSIGNED ZEROFILL"_ustr : u"DOUBLE UNSIGNED"_ustr) + : u"DOUBLE"_ustr; case MYSQL_TYPE_NULL: - return OUString{ "NULL" }; + return u"NULL"_ustr; case MYSQL_TYPE_TIMESTAMP: - return OUString{ "TIMESTAMP" }; + return u"TIMESTAMP"_ustr; case MYSQL_TYPE_LONGLONG: - return isUnsigned ? (isZerofill ? OUString{ "BIGINT UNSIGNED ZEROFILL" } - : OUString{ "BIGINT UNSIGNED" }) - : OUString{ "BIGINT" }; + return isUnsigned + ? (isZerofill ? u"BIGINT UNSIGNED ZEROFILL"_ustr : u"BIGINT UNSIGNED"_ustr) + : u"BIGINT"_ustr; case MYSQL_TYPE_INT24: - return isUnsigned ? (isZerofill ? OUString{ "MEDIUMINT UNSIGNED ZEROFILL" } - : OUString{ "MEDIUMINT UNSIGNED" }) - : OUString{ "MEDIUMINT" }; + return isUnsigned ? (isZerofill ? u"MEDIUMINT UNSIGNED ZEROFILL"_ustr + : u"MEDIUMINT UNSIGNED"_ustr) + : u"MEDIUMINT"_ustr; case MYSQL_TYPE_DATE: - return OUString{ "DATE" }; + return u"DATE"_ustr; case MYSQL_TYPE_TIME: - return OUString{ "TIME" }; + return u"TIME"_ustr; case MYSQL_TYPE_DATETIME: - return OUString{ "DATETIME" }; + return u"DATETIME"_ustr; case MYSQL_TYPE_TINY_BLOB: { - return OUString{ "TINYBLOB" }; + return u"TINYBLOB"_ustr; } case MYSQL_TYPE_MEDIUM_BLOB: { - return OUString{ "MEDIUMBLOB" }; + return u"MEDIUMBLOB"_ustr; } case MYSQL_TYPE_LONG_BLOB: { - return OUString{ "LONGBLOB" }; + return u"LONGBLOB"_ustr; } case MYSQL_TYPE_BLOB: { - return OUString{ "BLOB" }; + return u"BLOB"_ustr; } case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_VAR_STRING: if (flags & ENUM_FLAG) { - return OUString{ "ENUM" }; + return u"ENUM"_ustr; } if (flags & SET_FLAG) { - return OUString{ "SET" }; + return u"SET"_ustr; } - return OUString{ "VARCHAR" }; + return u"VARCHAR"_ustr; case MYSQL_TYPE_STRING: if (flags & ENUM_FLAG) { - return OUString{ "ENUM" }; + return u"ENUM"_ustr; } if (flags & SET_FLAG) { - return OUString{ "SET" }; + return u"SET"_ustr; } - return OUString{ "CHAR" }; + return u"CHAR"_ustr; case MYSQL_TYPE_YEAR: - return OUString{ "YEAR" }; + return u"YEAR"_ustr; case MYSQL_TYPE_GEOMETRY: - return OUString{ "GEOMETRY" }; + return u"GEOMETRY"_ustr; default: - return OUString{ "UNKNOWN" }; + return u"UNKNOWN"_ustr; } } |