@@ -39,7 +39,7 @@ TYPED_TEST_SUITE(StatementTest, TestTypes);
3939
4040TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsInputString) {
4141 SQLWCHAR buf[1024 ];
42- SQLINTEGER buf_char_len = sizeof (buf) / ODBC:: GetSqlWCharSize ();
42+ SQLINTEGER buf_char_len = sizeof (buf) / GetSqlWCharSize ();
4343 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
4444 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
4545 SQLINTEGER output_char_len = 0 ;
@@ -58,7 +58,7 @@ TYPED_TEST(StatementTest, TestSQLNativeSqlReturnsInputString) {
5858
5959TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsNTSInputString) {
6060 SQLWCHAR buf[1024 ];
61- SQLINTEGER buf_char_len = sizeof (buf) / ODBC:: GetSqlWCharSize ();
61+ SQLINTEGER buf_char_len = sizeof (buf) / GetSqlWCharSize ();
6262 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
6363 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
6464 SQLINTEGER output_char_len = 0 ;
@@ -95,7 +95,7 @@ TYPED_TEST(StatementTest, TestSQLNativeSqlReturnsInputStringLength) {
9595TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsTruncatedString) {
9696 const SQLINTEGER small_buf_size_in_char = 11 ;
9797 SQLWCHAR small_buf[small_buf_size_in_char];
98- SQLINTEGER small_buf_char_len = sizeof (small_buf) / ODBC:: GetSqlWCharSize ();
98+ SQLINTEGER small_buf_char_len = sizeof (small_buf) / GetSqlWCharSize ();
9999 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
100100 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
101101 SQLINTEGER output_char_len = 0 ;
@@ -122,7 +122,7 @@ TYPED_TEST(StatementTest, TestSQLNativeSqlReturnsTruncatedString) {
122122
123123TYPED_TEST (StatementTest, TestSQLNativeSqlReturnsErrorOnBadInputs) {
124124 SQLWCHAR buf[1024 ];
125- SQLINTEGER buf_char_len = sizeof (buf) / ODBC:: GetSqlWCharSize ();
125+ SQLINTEGER buf_char_len = sizeof (buf) / GetSqlWCharSize ();
126126 SQLWCHAR input_str[] = L" SELECT * FROM mytable WHERE id == 1" ;
127127 SQLINTEGER input_char_len = static_cast <SQLINTEGER>(wcslen (input_str));
128128 SQLINTEGER output_char_len = 0 ;
@@ -140,4 +140,27 @@ TYPED_TEST(StatementTest, TestSQLNativeSqlReturnsErrorOnBadInputs) {
140140 VerifyOdbcErrorState (SQL_HANDLE_DBC, this ->conn , kErrorStateHY090 );
141141}
142142
143+ TYPED_TEST (StatementTest, TestSQLCloseCursor) {
144+ std::wstring wsql = L" SELECT 1;" ;
145+ std::vector<SQLWCHAR> sql0 (wsql.begin (), wsql.end ());
146+
147+ ASSERT_EQ (SQL_SUCCESS,
148+ SQLExecDirect (this ->stmt , &sql0[0 ], static_cast <SQLINTEGER>(sql0.size ())));
149+
150+ ASSERT_EQ (SQL_SUCCESS, SQLCloseCursor (this ->stmt ));
151+ }
152+
153+ TYPED_TEST (StatementTest, TestSQLFreeStmtSQLCloseWithoutCursor) {
154+ // Verify SQLFreeStmt(SQL_CLOSE) does not throw error with invalid cursor
155+
156+ ASSERT_EQ (SQL_SUCCESS, SQLFreeStmt (this ->stmt , SQL_CLOSE));
157+ }
158+
159+ TYPED_TEST (StatementTest, TestSQLCloseCursorWithoutCursor) {
160+ ASSERT_EQ (SQL_ERROR, SQLCloseCursor (this ->stmt ));
161+
162+ // Verify invalid cursor error state is returned
163+ VerifyOdbcErrorState (SQL_HANDLE_STMT, this ->stmt , kErrorState24000 );
164+ }
165+
143166} // namespace arrow::flight::sql::odbc
0 commit comments