@@ -223,18 +223,20 @@ class PostgresDatabaseTest : public ::testing::Test,
223223};
224224ADBCV_TEST_DATABASE (PostgresDatabaseTest)
225225
226+ int Canary(const struct AdbcError *) { return 0 ; }
227+
226228TEST_F (PostgresDatabaseTest, AdbcDriverBackwardsCompatibility) {
227- // XXX: sketchy cast
228- auto * driver = static_cast < struct AdbcDriver *>( malloc (ADBC_DRIVER_1_0_0_SIZE) );
229- std::memset ( driver, 0 , ADBC_DRIVER_1_0_0_SIZE) ;
229+ struct AdbcDriver driver;
230+ std::memset (& driver, 0 , ADBC_DRIVER_1_1_0_SIZE );
231+ driver. ErrorGetDetailCount = Canary ;
230232
231- ASSERT_THAT (::PostgresqlDriverInit (ADBC_VERSION_1_0_0, driver, &error),
233+ ASSERT_THAT (::PostgresqlDriverInit (ADBC_VERSION_1_0_0, & driver, &error),
232234 IsOkStatus (&error));
233235
234- ASSERT_THAT (::PostgresqlDriverInit (424242 , driver, &error),
235- IsStatus (ADBC_STATUS_NOT_IMPLEMENTED, &error));
236+ ASSERT_EQ (Canary, driver.ErrorGetDetailCount );
236237
237- free (driver);
238+ ASSERT_THAT (::PostgresqlDriverInit (424242 , &driver, &error),
239+ IsStatus (ADBC_STATUS_NOT_IMPLEMENTED, &error));
238240}
239241
240242class PostgresConnectionTest : public ::testing::Test,
@@ -1552,24 +1554,25 @@ TEST_F(PostgresStatementTest, BatchSizeHint) {
15521554
15531555// Test that an ADBC 1.0.0-sized error still works
15541556TEST_F (PostgresStatementTest, AdbcErrorBackwardsCompatibility) {
1555- // XXX: sketchy cast
1556- auto * error = static_cast <struct AdbcError *>(malloc (ADBC_ERROR_1_0_0_SIZE));
1557- std::memset (error, 0 , ADBC_ERROR_1_0_0_SIZE);
1557+ struct AdbcError error;
1558+ std::memset (&error, 0 , ADBC_ERROR_1_1_0_SIZE);
1559+ struct AdbcDriver canary;
1560+ error.private_data = &canary;
1561+ error.private_driver = &canary;
15581562
1559- ASSERT_THAT (AdbcStatementNew (&connection, &statement, error), IsOkStatus (error));
1563+ ASSERT_THAT (AdbcStatementNew (&connection, &statement, & error), IsOkStatus (& error));
15601564 ASSERT_THAT (
1561- AdbcStatementSetSqlQuery (&statement, " SELECT * FROM thistabledoesnotexist" , error),
1562- IsOkStatus (error));
1565+ AdbcStatementSetSqlQuery (&statement, " SELECT * FROM thistabledoesnotexist" , & error),
1566+ IsOkStatus (& error));
15631567 adbc_validation::StreamReader reader;
15641568 ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
1565- &reader.rows_affected , error),
1566- IsStatus (ADBC_STATUS_NOT_FOUND, error));
1567-
1568- ASSERT_EQ (" 42P01" , std::string_view (error->sqlstate , 5 ));
1569- ASSERT_EQ (0 , AdbcErrorGetDetailCount (error));
1570-
1571- error->release (error);
1572- free (error);
1569+ &reader.rows_affected , &error),
1570+ IsStatus (ADBC_STATUS_NOT_FOUND, &error));
1571+ ASSERT_EQ (" 42P01" , std::string_view (error.sqlstate , 5 ));
1572+ ASSERT_EQ (0 , AdbcErrorGetDetailCount (&error));
1573+ ASSERT_EQ (&canary, error.private_data );
1574+ ASSERT_EQ (&canary, error.private_driver );
1575+ error.release (&error);
15731576}
15741577
15751578TEST_F (PostgresStatementTest, Cancel) {
0 commit comments