You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2023/04/14 07:36:59 UTC
[arrow-adbc] branch main updated: fix(c/driver/sqlite,c/validation): Ensure float/double values are not truncated on bind or select (#585)
This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 55ce4b9 fix(c/driver/sqlite,c/validation): Ensure float/double values are not truncated on bind or select (#585)
55ce4b9 is described below
commit 55ce4b91a286e3f0d1a4d155a6838eeab869fe5f
Author: Dewey Dunnington <de...@voltrondata.com>
AuthorDate: Fri Apr 14 03:36:52 2023 -0400
fix(c/driver/sqlite,c/validation): Ensure float/double values are not truncated on bind or select (#585)
Closes #578 and modifies the validation suite so that it will catch this
type of accidental cast should it happen again.
---
c/driver/sqlite/statement_reader.c | 4 ++--
c/validation/adbc_validation.cc | 10 +++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/c/driver/sqlite/statement_reader.c b/c/driver/sqlite/statement_reader.c
index 694b8cc..8b57906 100644
--- a/c/driver/sqlite/statement_reader.c
+++ b/c/driver/sqlite/statement_reader.c
@@ -182,8 +182,8 @@ AdbcStatusCode AdbcSqliteBinderBindNext(struct AdbcSqliteBinder* binder, sqlite3
}
case NANOARROW_TYPE_FLOAT:
case NANOARROW_TYPE_DOUBLE: {
- int64_t value = ArrowArrayViewGetDoubleUnsafe(binder->batch.children[col],
- binder->next_row);
+ double value = ArrowArrayViewGetDoubleUnsafe(binder->batch.children[col],
+ binder->next_row);
status = sqlite3_bind_double(stmt, col + 1, value);
break;
}
diff --git a/c/validation/adbc_validation.cc b/c/validation/adbc_validation.cc
index 0c07db0..bfd1322 100644
--- a/c/validation/adbc_validation.cc
+++ b/c/validation/adbc_validation.cc
@@ -937,8 +937,8 @@ void StatementTest::TestSqlIngestNumericType(ArrowType type) {
if constexpr (std::is_floating_point_v<CType>) {
// XXX: sqlite and others seem to have trouble with extreme
// values. Likely a bug on our side, but for now, avoid them.
- values.push_back(-1.0);
- values.push_back(1.0);
+ values.push_back(-1.5);
+ values.push_back(1.5);
} else {
values.push_back(std::numeric_limits<CType>::lowest());
values.push_back(std::numeric_limits<CType>::max());
@@ -1678,7 +1678,7 @@ void StatementTest::TestSqlQueryInts() {
void StatementTest::TestSqlQueryFloats() {
ASSERT_THAT(AdbcStatementNew(&connection, &statement, &error), IsOkStatus(&error));
- ASSERT_THAT(AdbcStatementSetSqlQuery(&statement, "SELECT CAST(1.0 AS FLOAT)", &error),
+ ASSERT_THAT(AdbcStatementSetSqlQuery(&statement, "SELECT CAST(1.5 AS FLOAT)", &error),
IsOkStatus(&error));
{
@@ -1702,11 +1702,11 @@ void StatementTest::TestSqlQueryFloats() {
switch (reader.fields[0].type) {
case NANOARROW_TYPE_FLOAT:
ASSERT_NO_FATAL_FAILURE(
- CompareArray<float>(reader.array_view->children[0], {1.0f}));
+ CompareArray<float>(reader.array_view->children[0], {1.5f}));
break;
case NANOARROW_TYPE_DOUBLE:
ASSERT_NO_FATAL_FAILURE(
- CompareArray<double>(reader.array_view->children[0], {1.0}));
+ CompareArray<double>(reader.array_view->children[0], {1.5}));
break;
default:
FAIL() << "Unexpected data type: " << reader.fields[0].type;