summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
authorTamas Bunth <tamas.bunth@collabora.co.uk>2017-12-18 14:47:40 +0100
committerAndras Timar <andras.timar@collabora.com>2018-03-20 12:26:26 +0100
commitd0f6e30ed05b3949436eb2d49f33bf8a30dc47ef (patch)
tree822f1a0142e8e5f69dd4e523b210a3f04bc8f46e /connectivity
parenta50a418c946c5f37de9bc6ae5853744e71f78147 (diff)
tdf#104734 Firebird: Add VARBINARY type to driver
Change-Id: I9a1b3aa9bde855577078fe0db2e31a9c160031d7 Reviewed-on: https://gerrit.libreoffice.org/47092 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tamás Bunth <btomi96@gmail.com> (cherry picked from commit e7a80ddb91c44711296aa996bf00242edbfba32d)
Diffstat (limited to 'connectivity')
-rw-r--r--connectivity/source/drivers/firebird/DatabaseMetaData.cxx11
-rw-r--r--connectivity/source/drivers/firebird/ResultSetMetaData.cxx3
-rw-r--r--connectivity/source/drivers/firebird/Tables.cxx2
-rw-r--r--connectivity/source/drivers/firebird/Util.cxx7
4 files changed, 19 insertions, 4 deletions
diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
index dcb617363692..614ccf7c2409 100644
--- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
@@ -863,6 +863,17 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
aResults.push_back(aRow);
+ // Varbinary (VARCHAR)
+ aRow[1] = new ORowSetValueDecorator(OUString("VARCHAR"));
+ aRow[2] = new ORowSetValueDecorator(DataType::VARBINARY);
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(32765)); // Prevision = max length
+ aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::NONE)); // Searchable
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ aResults.push_back(aRow);
+
// Integer Types common
{
aRow[6] = new ORowSetValueDecorator(); // Create Params
diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx
index 725ed288d00a..b598846545de 100644
--- a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx
+++ b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx
@@ -96,7 +96,8 @@ sal_Int32 SAL_CALL OResultSetMetaData::getColumnType(sal_Int32 column)
short aType = m_pSqlda->sqlvar[column-1].sqltype & ~1;
OUString sCharset;
- if(aType == SQL_TEXT)
+ // do not query the character set unnecessarily
+ if(aType == SQL_TEXT || aType == SQL_VARYING)
{
sCharset = getCharacterSet(column);
}
diff --git a/connectivity/source/drivers/firebird/Tables.cxx b/connectivity/source/drivers/firebird/Tables.cxx
index 5a79f8afe33d..57a44650589e 100644
--- a/connectivity/source/drivers/firebird/Tables.cxx
+++ b/connectivity/source/drivers/firebird/Tables.cxx
@@ -101,7 +101,7 @@ OUString Tables::createStandardColumnPart(const Reference< XPropertySet >& xColP
sal_Int32 aType = 0;
xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_TYPE))
>>= aType;
- if(aType == DataType::BINARY)
+ if(aType == DataType::BINARY || aType == DataType::VARBINARY)
{
aSql.append(" ");
aSql.append("CHARACTER SET OCTETS");
diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx
index 20587e5172ba..e91e0da0bdf9 100644
--- a/connectivity/source/drivers/firebird/Util.cxx
+++ b/connectivity/source/drivers/firebird/Util.cxx
@@ -100,8 +100,11 @@ sal_Int32 lcl_getCharColumnType( short aType, const OUString& sCharset )
return DataType::BINARY;
else
return DataType::CHAR;
- case SQL_VARYING: // TODO VARBINARY
- return DataType::VARCHAR;
+ case SQL_VARYING:
+ if( sCharset == "OCTETS")
+ return DataType::VARBINARY;
+ else
+ return DataType::VARCHAR;
default:
assert(false);
return 0;