|
1 | 1 | /* |
2 | 2 | Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. |
3 | | - 2013, 2022 MariaDB Corporation AB |
| 3 | + 2013, 2025 MariaDB Corporation plc |
4 | 4 |
|
5 | 5 | The MySQL Connector/ODBC is licensed under the terms of the GPLv2 |
6 | 6 | <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most |
@@ -753,15 +753,75 @@ ODBC_TEST(my_dynamic_cursor) |
753 | 753 | return OK; |
754 | 754 | } |
755 | 755 |
|
| 756 | + |
| 757 | +ODBC_TEST(odbc476) |
| 758 | +{ |
| 759 | + SQLLEN nlen[15]= { 0 }, nrow[15]= { 0 }; |
| 760 | + char szData[15][15]= { 0 }; |
| 761 | + SQLINTEGER nData[15]; |
| 762 | + |
| 763 | + if (ForwardOnly == TRUE && NoCache == TRUE) |
| 764 | + { |
| 765 | + skip("The test cannot be run if FORWARDONLY and NOCACHE options are selected"); |
| 766 | + } |
| 767 | + OK_SIMPLE_STMT(Stmt, "DROP TABLE IF EXISTS t_odbc476"); |
| 768 | + |
| 769 | + OK_SIMPLE_STMT(Stmt, "CREATE TABLE t_odbc476 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY," |
| 770 | + "string_null VARCHAR(255), int32_null INT, INDEX idx_string_null(string_null))"); |
| 771 | + OK_SIMPLE_STMT(Stmt, "INSERT INTO t_odbc476 VALUES(1,'name 3', 3)"); |
| 772 | + OK_SIMPLE_STMT(Stmt, "INSERT INTO t_odbc476 VALUES(2,'name 5', 5)"); |
| 773 | + OK_SIMPLE_STMT(Stmt, "INSERT INTO t_odbc476 VALUES(3,'name 9', 9)"); |
| 774 | + OK_SIMPLE_STMT(Stmt, "INSERT INTO t_odbc476 VALUES(4,'name 3', 32)"); |
| 775 | + |
| 776 | + CHECK_STMT_RC(Stmt, SQLFreeStmt(Stmt, SQL_CLOSE)); |
| 777 | + CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, 0)); |
| 778 | + CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER)SQL_CONCUR_LOCK, 0)); |
| 779 | + |
| 780 | + // To repeat issue it has to be SELECT string_null |
| 781 | + OK_SIMPLE_STMT(Stmt, "SELECT id, string_null FROM t_odbc476 " |
| 782 | + "WHERE string_null='name 3' OR string_null='name 5'"); |
| 783 | + |
| 784 | + CHECK_STMT_RC(Stmt, SQLFetchScroll(Stmt, SQL_FETCH_ABSOLUTE, 1)); |
| 785 | + // This fails with "can't build index" if id field or all fields are not selected |
| 786 | + CHECK_STMT_RC(Stmt, SQLSetPos(Stmt, 0, SQL_DELETE, SQL_LOCK_NO_CHANGE)); |
| 787 | + |
| 788 | + CHECK_STMT_RC(Stmt, SQLFreeStmt(Stmt, SQL_CLOSE)); |
| 789 | + |
| 790 | + OK_SIMPLE_STMT(Stmt, "SELECT * FROM t_odbc476 ORDER BY id"); |
| 791 | + CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)3, 0)); |
| 792 | + CHECK_STMT_RC(Stmt, SQLBindCol(Stmt, 1, SQL_C_LONG, &nData, 0, nrow)); |
| 793 | + CHECK_STMT_RC(Stmt, SQLBindCol(Stmt, 2, SQL_C_CHAR, szData, sizeof(szData[0]), nlen)); |
| 794 | + CHECK_STMT_RC(Stmt, SQLFetchScroll(Stmt, SQL_FETCH_ABSOLUTE, 1)); |
| 795 | + |
| 796 | + is_num(nData[0], 2); |
| 797 | + IS_STR(szData[0], "name 5", 7); |
| 798 | + is_num(nData[1], 3); |
| 799 | + IS_STR(szData[1], "name 9", 7); |
| 800 | + is_num(nData[2], 4); |
| 801 | + IS_STR(szData[2], "name 3", 7); |
| 802 | + |
| 803 | + FAIL_IF(SQLFetchScroll(Stmt, SQL_FETCH_NEXT, 1) != SQL_NO_DATA_FOUND, "no data found expected"); |
| 804 | + |
| 805 | + CHECK_STMT_RC(Stmt, SQLFreeStmt(Stmt, SQL_UNBIND)); |
| 806 | + CHECK_STMT_RC(Stmt, SQLFreeStmt(Stmt, SQL_CLOSE)); |
| 807 | + CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, 0)); |
| 808 | + |
| 809 | + OK_SIMPLE_STMT(Stmt, "DROP TABLE t_odbc476"); |
| 810 | + |
| 811 | + return OK; |
| 812 | +} |
| 813 | + |
| 814 | + |
756 | 815 | MA_ODBC_TESTS my_tests[]= |
757 | 816 | { |
758 | 817 | {my_dynamic_pos_cursor, "my_dynamic_pos_cursor", NORMAL}, |
759 | 818 | {my_dynamic_pos_cursor1, "my_dynamic_pos_cursor1", NORMAL}, |
760 | 819 | {my_position, "my_position", NORMAL}, |
761 | | - { my_position1, "my_position1", NORMAL }, |
762 | | - { my_zero_irow_update, "my_zero_irow_update", NORMAL }, |
| 820 | + {my_position1, "my_position1", NORMAL }, |
| 821 | + {my_zero_irow_update, "my_zero_irow_update", NORMAL }, |
763 | 822 | {my_zero_irow_delete, "my_zero_irow_delete", NORMAL}, |
764 | 823 | {my_dynamic_cursor, "my_dynamic_cursor", NORMAL}, |
| 824 | + {odbc476, "odbc476-not-enough-info", NORMAL}, |
765 | 825 | {NULL, NULL} |
766 | 826 | }; |
767 | 827 |
|
|
0 commit comments