@@ -37,9 +37,86 @@ class StatementRemoteTest : public FlightSQLODBCRemoteTestBase {};
3737using TestTypes = ::testing::Types<StatementMockTest, StatementRemoteTest>;
3838TYPED_TEST_SUITE (StatementTest, TestTypes);
3939
40+ TYPED_TEST (StatementTest, TestSQLExecDirectSimpleQuery) {
41+ std::wstring wsql = L" SELECT 1;" ;
42+ std::vector<SQLWCHAR> sql0 (wsql.begin (), wsql.end ());
43+
44+ ASSERT_EQ (SQL_SUCCESS,
45+ SQLExecDirect (this ->stmt , &sql0[0 ], static_cast <SQLINTEGER>(sql0.size ())));
46+
47+ // GH-47713 TODO: Uncomment call to SQLFetch SQLGetData after implementation
48+ /*
49+ ASSERT_EQ(SQL_SUCCESS, SQLFetch(this->stmt));
50+
51+ SQLINTEGER val;
52+
53+ ASSERT_EQ(SQL_SUCCESS, SQLGetData(this->stmt, 1, SQL_C_LONG, &val, 0, 0));
54+ // Verify 1 is returned
55+ EXPECT_EQ(1, val);
56+
57+ ASSERT_EQ(SQL_NO_DATA, SQLFetch(this->stmt));
58+
59+ ASSERT_EQ(SQL_ERROR, SQLGetData(this->stmt, 1, SQL_C_LONG, &val, 0, 0));
60+ // Invalid cursor state
61+ VerifyOdbcErrorState(SQL_HANDLE_STMT, this->stmt, kErrorState24000);
62+ */
63+ }
64+
65+ TYPED_TEST (StatementTest, TestSQLExecDirectInvalidQuery) {
66+ std::wstring wsql = L" SELECT;" ;
67+ std::vector<SQLWCHAR> sql0 (wsql.begin (), wsql.end ());
68+
69+ ASSERT_EQ (SQL_ERROR,
70+ SQLExecDirect (this ->stmt , &sql0[0 ], static_cast <SQLINTEGER>(sql0.size ())));
71+ // ODBC provides generic error code HY000 to all statement errors
72+ VerifyOdbcErrorState (SQL_HANDLE_STMT, this ->stmt , kErrorStateHY000 );
73+ }
74+
75+ TYPED_TEST (StatementTest, TestSQLExecuteSimpleQuery) {
76+ std::wstring wsql = L" SELECT 1;" ;
77+ std::vector<SQLWCHAR> sql0 (wsql.begin (), wsql.end ());
78+
79+ ASSERT_EQ (SQL_SUCCESS,
80+ SQLPrepare (this ->stmt , &sql0[0 ], static_cast <SQLINTEGER>(sql0.size ())));
81+
82+ ASSERT_EQ (SQL_SUCCESS, SQLExecute (this ->stmt ));
83+
84+ // GH-47713 TODO: Uncomment call to SQLFetch SQLGetData after implementation
85+ /*
86+ // Fetch data
87+ ASSERT_EQ(SQL_SUCCESS, SQLFetch(this->stmt));
88+
89+ SQLINTEGER val;
90+ ASSERT_EQ(SQL_SUCCESS, SQLGetData(this->stmt, 1, SQL_C_LONG, &val, 0, 0));
91+
92+ // Verify 1 is returned
93+ EXPECT_EQ(1, val);
94+
95+ ASSERT_EQ(SQL_NO_DATA, SQLFetch(this->stmt));
96+
97+ ASSERT_EQ(SQL_ERROR, SQLGetData(this->stmt, 1, SQL_C_LONG, &val, 0, 0));
98+ // Invalid cursor state
99+ VerifyOdbcErrorState(SQL_HANDLE_STMT, this->stmt, kErrorState24000);
100+ */
101+ }
102+
103+ TYPED_TEST (StatementTest, TestSQLPrepareInvalidQuery) {
104+ std::wstring wsql = L" SELECT;" ;
105+ std::vector<SQLWCHAR> sql0 (wsql.begin (), wsql.end ());
106+
107+ ASSERT_EQ (SQL_ERROR,
108+ SQLPrepare (this ->stmt , &sql0[0 ], static_cast <SQLINTEGER>(sql0.size ())));
109+ // ODBC provides generic error code HY000 to all statement errors
110+ VerifyOdbcErrorState (SQL_HANDLE_STMT, this ->stmt , kErrorStateHY000 );
111+
112+ ASSERT_EQ (SQL_ERROR, SQLExecute (this ->stmt ));
113+ // Verify function sequence error state is returned
114+ VerifyOdbcErrorState (SQL_HANDLE_STMT, this ->stmt , kErrorStateHY010 );
115+ }
116+
40117TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsInputString) {
41118 SQLWCHAR buf[1024 ];
42- SQLINTEGER buf_char_len = sizeof (buf) / ODBC:: GetSqlWCharSize ();
119+ SQLINTEGER buf_char_len = sizeof (buf) / GetSqlWCharSize ();
43120 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
44121 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
45122 SQLINTEGER output_char_len = 0 ;
@@ -58,7 +135,7 @@ TYPED_TEST(StatementTest, TestSQLNativeSqlReturnsInputString) {
58135
59136TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsNTSInputString) {
60137 SQLWCHAR buf[1024 ];
61- SQLINTEGER buf_char_len = sizeof (buf) / ODBC:: GetSqlWCharSize ();
138+ SQLINTEGER buf_char_len = sizeof (buf) / GetSqlWCharSize ();
62139 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
63140 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
64141 SQLINTEGER output_char_len = 0 ;
@@ -95,7 +172,7 @@ TYPED_TEST(StatementTest, TestSQLNativeSqlReturnsInputStringLength) {
95172TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsTruncatedString) {
96173 const SQLINTEGER small_buf_size_in_char = 11 ;
97174 SQLWCHAR small_buf[small_buf_size_in_char];
98- SQLINTEGER small_buf_char_len = sizeof (small_buf) / ODBC:: GetSqlWCharSize ();
175+ SQLINTEGER small_buf_char_len = sizeof (small_buf) / GetSqlWCharSize ();
99176 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
100177 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
101178 SQLINTEGER output_char_len = 0 ;
@@ -122,7 +199,7 @@ TYPED_TEST(StatementTest, TestSQLNativeSqlReturnsTruncatedString) {
122199
123200TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsErrorOnBadInputs) {
124201 SQLWCHAR buf[1024 ];
125- SQLINTEGER buf_char_len = sizeof (buf) / ODBC:: GetSqlWCharSize ();
202+ SQLINTEGER buf_char_len = sizeof (buf) / GetSqlWCharSize ();
126203 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
127204 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
128205 SQLINTEGER output_char_len = 0 ;
0 commit comments