/*
 * 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 <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <stdio.h>

#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;
}

