Files
email-tracker/external/duckdb/test/helpers/capi_tester.cpp
2025-10-24 19:21:19 -05:00

166 lines
3.9 KiB
C++

#include "capi_tester.hpp"
bool NO_FAIL(duckdb::CAPIResult &result) {
if (result.HasError()) {
fprintf(stderr, "Query failed with message: %s\n", result.ErrorMessage());
}
return result.success;
}
bool NO_FAIL(duckdb::unique_ptr<duckdb::CAPIResult> result) {
return NO_FAIL(*result);
}
namespace duckdb {
template <>
bool CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_boolean(&result, col, row);
}
template <>
int8_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_int8(&result, col, row);
}
template <>
int16_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_int16(&result, col, row);
}
template <>
int32_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_int32(&result, col, row);
}
template <>
int64_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_int64(&result, col, row);
}
template <>
uint8_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_uint8(&result, col, row);
}
template <>
uint16_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_uint16(&result, col, row);
}
template <>
uint32_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_uint32(&result, col, row);
}
template <>
uint64_t CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_uint64(&result, col, row);
}
template <>
float CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_float(&result, col, row);
}
template <>
double CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_double(&result, col, row);
}
template <>
duckdb_decimal CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_decimal(&result, col, row);
}
template <>
duckdb_date CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_date *)duckdb_column_data(&result, col);
return data[row];
}
template <>
duckdb_time CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_time *)duckdb_column_data(&result, col);
return data[row];
}
template <>
duckdb_time_ns CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_time_ns *)duckdb_column_data(&result, col);
return data[row];
}
template <>
duckdb_timestamp CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_timestamp *)duckdb_column_data(&result, col);
return data[row];
}
template <>
duckdb_timestamp_s CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_timestamp_s *)duckdb_column_data(&result, col);
return data[row];
}
template <>
duckdb_timestamp_ms CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_timestamp_ms *)duckdb_column_data(&result, col);
return data[row];
}
template <>
duckdb_timestamp_ns CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_timestamp_ns *)duckdb_column_data(&result, col);
return data[row];
}
template <>
duckdb_interval CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_interval(&result, col, row);
}
template <>
duckdb_blob CAPIResult::Fetch(idx_t col, idx_t row) {
auto data = (duckdb_blob *)duckdb_column_data(&result, col);
return data[row];
}
template <>
string CAPIResult::Fetch(idx_t col, idx_t row) {
auto value = duckdb_value_varchar(&result, col, row);
string strval = value ? string(value) : string();
free((void *)value);
return strval;
}
template <>
duckdb_date_struct CAPIResult::Fetch(idx_t col, idx_t row) {
auto value = duckdb_value_date(&result, col, row);
return duckdb_from_date(value);
}
template <>
duckdb_time_struct CAPIResult::Fetch(idx_t col, idx_t row) {
auto value = duckdb_value_time(&result, col, row);
return duckdb_from_time(value);
}
template <>
duckdb_timestamp_struct CAPIResult::Fetch(idx_t col, idx_t row) {
auto value = duckdb_value_timestamp(&result, col, row);
return duckdb_from_timestamp(value);
}
template <>
duckdb_hugeint CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_hugeint(&result, col, row);
}
template <>
duckdb_uhugeint CAPIResult::Fetch(idx_t col, idx_t row) {
return duckdb_value_uhugeint(&result, col, row);
}
} // namespace duckdb