@@ -1825,72 +1825,81 @@ TEST_F(PostgresStatementTest, SqlQueryInt2vector) {
18251825 ASSERT_EQ (reader.array ->release , nullptr );
18261826}
18271827
1828- TEST_F (PostgresStatementTest, PostgresCompositeTest ) {
1828+ TEST_F (PostgresStatementTest, PostgresCompositeTypeTest ) {
18291829 ASSERT_THAT (AdbcStatementNew (&connection, &statement, &error), IsOkStatus (&error));
1830-
18311830 {
18321831 adbc_validation::StreamReader reader;
18331832
1834- // Cleanup first: Drop table before type
1833+ // Types are cached on the AdbcDatabase so this test has to totally recreate
1834+ // its AdbcDatabase (see the call to ResetTest in the body here).
1835+
1836+ // Cleanup. We have to drop the table before we drop the type.
18351837 ASSERT_THAT (
1836- AdbcStatementSetSqlQuery (&statement, " DROP TABLE IF EXISTS adbc_test;" , &error),
1838+ AdbcStatementSetSqlQuery (
1839+ &statement, " DROP TABLE IF EXISTS adbc_postgresql_composite_type_test_table;" ,
1840+ &error),
18371841 IsOkStatus (&error));
18381842 ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
18391843 &reader.rows_affected , &error),
18401844 IsOkStatus (&error));
1845+ ASSERT_THAT (AdbcStatementSetSqlQuery (
1846+ &statement, " DROP TYPE IF EXISTS my_composite_type;" , &error),
1847+ IsOkStatus (&error));
1848+ ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
1849+ &reader.rows_affected , &error),
1850+ IsOkStatus (&error));
1851+
1852+ // Create type and table, fill with data
18411853 ASSERT_THAT (
1842- AdbcStatementSetSqlQuery (&statement, " DROP TYPE IF EXISTS mycomp;" , &error),
1854+ AdbcStatementSetSqlQuery (
1855+ &statement, " CREATE TYPE my_composite_type AS (x integer, y text);" , &error),
18431856 IsOkStatus (&error));
18441857 ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
18451858 &reader.rows_affected , &error),
18461859 IsOkStatus (&error));
18471860
1848- ASSERT_THAT (AdbcStatementSetSqlQuery (&statement, " CREATE TYPE mycomp AS (x integer);" ,
1849- &error),
1850- IsOkStatus (&error));
1861+ ASSERT_THAT (
1862+ AdbcStatementSetSqlQuery (&statement,
1863+ " CREATE TABLE adbc_postgresql_composite_type_test_table "
1864+ " (a my_composite_type);" ,
1865+ &error),
1866+ IsOkStatus (&error));
18511867 ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
18521868 &reader.rows_affected , &error),
18531869 IsOkStatus (&error));
18541870
18551871 ASSERT_THAT (AdbcStatementSetSqlQuery (
1856- &statement, " CREATE TABLE adbc_test (mycomps mycomp);" , &error),
1872+ &statement,
1873+ " INSERT INTO adbc_postgresql_composite_type_test_table "
1874+ " (a) VALUES (ROW(1, 'a')), (ROW(2,' b')), (ROW(3,' c'));" ,
1875+ &error),
18571876 IsOkStatus (&error));
18581877 ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
18591878 &reader.rows_affected , &error),
18601879 IsOkStatus (&error));
18611880
1862- ASSERT_THAT (
1863- AdbcStatementSetSqlQuery (
1864- &statement,
1865- " INSERT INTO adbc_test (mycomps) VALUES (ROW(1)), (ROW(2)), (ROW(3));" ,
1866- &error),
1867- IsOkStatus (&error));
1868- ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
1869- &reader.rows_affected , &error),
1870- IsOkStatus (&error));
1881+ // AdbcDatabase currently caches types so we need to recreate it
1882+ // https://github.com/apache/arrow-adbc/pull/3196#pullrequestreview-3103472826
1883+ ResetTest ();
18711884
1872- // Since the composite type is added after we connect the ADBC driver, we
1873- // need to reconnect.
1874- //
1875- // TODO: This could he a helper (disconnect without recreating db)
1876- ASSERT_THAT (AdbcStatementRelease (&statement, &error), IsOkStatus (&error));
1877- ASSERT_THAT (AdbcConnectionRelease (&connection, &error), IsOkStatus (&error));
1878- ASSERT_THAT (AdbcConnectionNew (&connection, &error), IsOkStatus (&error));
1879- ASSERT_THAT (AdbcConnectionInit (&connection, &database, &error), IsOkStatus (&error));
18801885 ASSERT_THAT (AdbcStatementNew (&connection, &statement, &error), IsOkStatus (&error));
1881-
1882- ASSERT_THAT (
1883- AdbcStatementSetSqlQuery (&statement, " SELECT mycomps FROM adbc_test ;" , &error),
1884- IsOkStatus (&error));
1886+ ASSERT_THAT ( AdbcStatementSetSqlQuery (
1887+ &statement,
1888+ " SELECT * FROM adbc_postgresql_composite_type_test_table ;" , &error),
1889+ IsOkStatus (&error));
18851890 ASSERT_THAT (AdbcStatementExecuteQuery (&statement, &reader.stream .value ,
18861891 &reader.rows_affected , &error),
18871892 IsOkStatus (&error));
18881893
1889- // TODO: Still working on this
18901894 ASSERT_NO_FATAL_FAILURE (reader.GetSchema ());
18911895 ASSERT_EQ (reader.schema ->n_children , 1 );
1892- ASSERT_STREQ (reader.schema ->children [0 ]->name , " mycomps" );
1893- ASSERT_STREQ (reader.schema ->children [0 ]->format , " i" );
1896+ ASSERT_STREQ (reader.schema ->children [0 ]->name , " a" );
1897+ ASSERT_STREQ (reader.schema ->children [0 ]->format , " +s" );
1898+ ASSERT_EQ (reader.schema ->children [0 ]->n_children , 2 );
1899+ ASSERT_STREQ (reader.schema ->children [0 ]->children [0 ]->name , " x" );
1900+ ASSERT_STREQ (reader.schema ->children [0 ]->children [0 ]->format , " i" );
1901+ ASSERT_STREQ (reader.schema ->children [0 ]->children [1 ]->name , " y" );
1902+ ASSERT_STREQ (reader.schema ->children [0 ]->children [1 ]->format , " u" );
18941903 }
18951904}
18961905
0 commit comments