-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Closed
Description
I have found a bug when using a column data type of "TEXT" in a PostgreSQL database.
In function oidToColumnDataType() of file Data/PostgreSQL/src/PostgreSQLTypes.cpp, columns of type "TEXT" (TEXTOID) are assigned to type MetaColumn::FDT_CLOB. But that column type is not handled in functions RecordSet::value() and StatementImpl::makeExtractors()
There are two solutions:
1- Assign type MetaColumn::FDT_STRING to TEXTOID columns:
diff --git a/Data/PostgreSQL/src/PostgreSQLTypes.cpp b/Data/PostgreSQL/src/PostgreSQLTypes.cpp
index 743e729..d5494b7 100644
--- a/Data/PostgreSQL/src/PostgreSQLTypes.cpp
+++ b/Data/PostgreSQL/src/PostgreSQLTypes.cpp
@@ -70,7 +70,7 @@ Poco::Data::MetaColumn::ColumnDataType oidToColumnDataType(const Oid anOID)
cdt = Poco::Data::MetaColumn::FDT_BLOB;
break;
case TEXTOID:
- cdt = Poco::Data::MetaColumn::FDT_CLOB;
+ cdt = Poco::Data::MetaColumn::FDT_STRING;
break;
// date
2- Add support for MetaColumn::FDT_CLOB column data type:
diff --git a/Data/src/RecordSet.cpp b/Data/src/RecordSet.cpp
index d0028f3..1a6ae67 100644
--- a/Data/src/RecordSet.cpp
+++ b/Data/src/RecordSet.cpp
@@ -188,6 +188,7 @@ Poco::Dynamic::Var RecordSet::value(const std::string& name, std::size_t row, bo
case MetaColumn::FDT_STRING: return value<std::string>(name, row, useFilter);
case MetaColumn::FDT_WSTRING: return value<UTF16String>(name, row, useFilter);
case MetaColumn::FDT_BLOB: return value<BLOB>(name, row, useFilter);
+ case MetaColumn::FDT_CLOB: return value<CLOB>(name, row, useFilter);
case MetaColumn::FDT_DATE: return value<Date>(name, row, useFilter);
case MetaColumn::FDT_TIME: return value<Time>(name, row, useFilter);
case MetaColumn::FDT_TIMESTAMP: return value<DateTime>(name, row, useFilter);
diff --git a/Data/src/StatementImpl.cpp b/Data/src/StatementImpl.cpp
index 43d2c36..8735de2 100644
--- a/Data/src/StatementImpl.cpp
+++ b/Data/src/StatementImpl.cpp
@@ -343,6 +343,8 @@ void StatementImpl::makeExtractors(std::size_t count)
addInternalExtract<Poco::UTF16String>(mc); break;
case MetaColumn::FDT_BLOB:
addInternalExtract<BLOB>(mc); break;
+ case MetaColumn::FDT_CLOB:
+ addInternalExtract<CLOB>(mc); break;
case MetaColumn::FDT_DATE:
addInternalExtract<Date>(mc); break;
case MetaColumn::FDT_TIME:
Best regards
Luis Recuerda
Reactions are currently unavailable