Insert NULL using BULK #4001 (#4755)

* fix(ODBC): Insert NULL using BULK #4001
resolve bound types and sizes at compile time

* fix: remove string suffix for static_assert

* Insert NULL using BULK #4001

* fix: typo

* fix(SQLite): missing functions; consolidate extract calls

* chore(SQLite): remove unnecessary typedef

* fix(SQLite): remove duplicate functions

* fix(SQLite): compile errors and warnings

* fix(SQLite): extract implementation signatures

* fix(SQLite): long64 platforms compile errors

* fix(SQLite): long64 platforms compile errors, part ii

* fix(ODBC): windows build

* fix(ODBC): MSSQL big string on windows

* fix(Data): psql and mysql compile errors

* fix(PostgreSQL): add missing functions

* fix(ODBC): revert column size discovery (breaks Oracle)

* fix(PostgreSQL): Nullable extraction #4001

* fix(MySQL): Nullable extraction #4001

* chore(Data): code tidy up

* fix(ODBC): add missing changes
This commit is contained in:
Aleksandar Fabijanic
2024-11-11 11:23:21 -06:00
committed by GitHub
parent fe9c13102d
commit 9530a77347
43 changed files with 5512 additions and 1313 deletions

View File

@@ -652,6 +652,154 @@ bool BinaryExtractor::extract(std::size_t pos, Dynamic::Var& val)
return readVar(outputParameter, val);
}
//////////////
// Nullable
//////////////
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::Int8>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt8>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::Int16>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt16>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::Int32>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt32>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::Int64>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt64>& val)
{
return extractNullable(pos, val);
}
#ifndef POCO_INT64_IS_LONG
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<long>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<unsigned long>& val)
{
return extractNullable(pos, val);
}
#endif
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<bool>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<float>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<double>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<char>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<std::string>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<UTF16String>& val)
{
throw NotImplementedException(poco_src_loc);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<BLOB>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<CLOB>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<DateTime>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Date>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Time>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<UUID>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Any>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::extract(std::size_t pos, Poco::Nullable<Poco::Dynamic::Var>& val)
{
return extractNullable(pos, val);
}
bool BinaryExtractor::isNull(std::size_t col, std::size_t /*row*/)
{
@@ -849,6 +997,23 @@ bool BinaryExtractor::extract(std::size_t, std::list<long>&)
{
throw NotImplementedException("std::list extractor must be implemented.");
}
bool BinaryExtractor::extract(std::size_t, std::vector<unsigned long>&)
{
throw NotImplementedException("std::vector extractor must be implemented.");
}
bool BinaryExtractor::extract(std::size_t, std::deque<unsigned long>&)
{
throw NotImplementedException("std::deque extractor must be implemented.");
}
bool BinaryExtractor::extract(std::size_t, std::list<unsigned long>&)
{
throw NotImplementedException("std::list extractor must be implemented.");
}
#endif

View File

@@ -27,7 +27,7 @@ namespace Data {
namespace PostgreSQL {
Extractor::Extractor(StatementExecutor& st /*, ResultMetadata& md */):
Extractor::Extractor(StatementExecutor& st):
_statementExecutor(st)
{
}
@@ -539,6 +539,154 @@ bool Extractor::extractToDynamic(std::size_t pos, Dynamic::Var& val)
return success;
}
//////////////
// Nullable
//////////////
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::Int8>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt8>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::Int16>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt16>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::Int32>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt32>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::Int64>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::UInt64>& val)
{
return extractNullable(pos, val);
}
#ifndef POCO_INT64_IS_LONG
bool Extractor::extract(std::size_t pos, Poco::Nullable<long>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<unsigned long>& val)
{
return extractNullable(pos, val);
}
#endif
bool Extractor::extract(std::size_t pos, Poco::Nullable<bool>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<float>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<double>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<char>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<std::string>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<UTF16String>& val)
{
throw NotImplementedException(poco_src_loc);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<BLOB>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<CLOB>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<DateTime>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Date>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Time>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<UUID>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Any>& val)
{
return extractNullable(pos, val);
}
bool Extractor::extract(std::size_t pos, Poco::Nullable<Poco::Dynamic::Var>& val)
{
return extractNullable(pos, val);
}
//////////////
// Not implemented
@@ -706,6 +854,23 @@ bool Extractor::extract(std::size_t, std::list<long>&)
{
throw NotImplementedException("std::list extractor must be implemented.");
}
bool Extractor::extract(std::size_t, std::vector<unsigned long>&)
{
throw NotImplementedException("std::vector extractor must be implemented.");
}
bool Extractor::extract(std::size_t, std::deque<unsigned long>&)
{
throw NotImplementedException("std::deque extractor must be implemented.");
}
bool Extractor::extract(std::size_t, std::list<unsigned long>&)
{
throw NotImplementedException("std::list extractor must be implemented.");
}
#endif