/* * http://bugs.mysql.com/bug.php?id=2570 * * -- Create the table * mysql> create table bug2570 ( x decimal(10,2)); * Query OK, 0 rows affected (0.05 sec) * * mysql> insert into bug2570 values (10.22),(11.22),(12.12),(14.33); * Query OK, 4 rows affected (0.00 sec) * Records: 4 Duplicates: 0 Warnings: 0 * * -- Result from test program: * 1. ===== * Row=10.22 * Row=11.22 * Row=12.12 * Row=14.33 * 2. ===== * Row=10.22 * Row=11.22 * Row=12.12 * Row=14.33 */ #include #include #include #include #define CHECK_SQL(x) \ { \ SQLRETURN rc = (x); \ if(rc != SQL_SUCCESS) {\ printf("Failed %d=%s\n", rc, #x); \ exit(1); \ } \ } void do_some_stuff(SQLHANDLE stmt) { SQLCHAR buf[100]; CHECK_SQL(SQLExecDirect(stmt, (SQLCHAR*)"select x from bug2570", SQL_NTS)); while(SQLFetch(stmt) != SQL_NO_DATA_FOUND) { CHECK_SQL(SQLGetData(stmt, 1, SQL_C_CHAR, buf, 100, NULL)); printf("Row=%s\n", buf); } } int main(int argc, char* argv[]) { SQLHANDLE env1, dbc1, env2, dbc2; SQLHANDLE stmt1, stmt2; /* Allocate Handles 1 */ CHECK_SQL(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env1)); CHECK_SQL(SQLSetEnvAttr(env1, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER)); CHECK_SQL(SQLAllocHandle(SQL_HANDLE_DBC, env1, &dbc1)); /* Allocate Handles 2 */ CHECK_SQL(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env2)); CHECK_SQL(SQLSetEnvAttr(env2, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER)); CHECK_SQL(SQLAllocHandle(SQL_HANDLE_DBC, env2, &dbc2)); /* Do some stuff on Handles 1 */ CHECK_SQL(SQLConnect(dbc1, (SQLCHAR*)"myodbctest3", SQL_NTS, (SQLCHAR*)"root", SQL_NTS, NULL, 0)); CHECK_SQL(SQLAllocHandle(SQL_HANDLE_STMT, dbc1, &stmt1)); printf("1. =====\n"); do_some_stuff(stmt1); CHECK_SQL(SQLFreeHandle(SQL_HANDLE_STMT, stmt1)); CHECK_SQL(SQLDisconnect(dbc1)); CHECK_SQL(SQLFreeHandle(SQL_HANDLE_DBC, dbc1)); CHECK_SQL(SQLFreeHandle(SQL_HANDLE_ENV, env1)); /* Do some stuff on Handles 2 */ CHECK_SQL(SQLConnect(dbc2, (SQLCHAR*)"myodbctest3", SQL_NTS, (SQLCHAR*)"root", SQL_NTS, NULL, 0)); CHECK_SQL(SQLAllocHandle(SQL_HANDLE_STMT, dbc2, &stmt2)); printf("2. =====\n"); do_some_stuff(stmt2); CHECK_SQL(SQLFreeHandle(SQL_HANDLE_STMT, stmt2)); CHECK_SQL(SQLDisconnect(dbc2)); CHECK_SQL(SQLFreeHandle(SQL_HANDLE_DBC, dbc2)); CHECK_SQL(SQLFreeHandle(SQL_HANDLE_ENV, env2)); return 0; }