summaryrefslogtreecommitdiff
path: root/connectivity/source/drivers/mysqlc/mysqlc_general.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity/source/drivers/mysqlc/mysqlc_general.cxx')
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_general.cxx154
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;
}
}