Added:
trunk/test/my_info.c
trunk/test/my_types.c
Removed:
trunk/test/mytest3.c
Modified:
trunk/test/
trunk/test/Makefile.am
trunk/test/my_basics.c
trunk/test/my_blob.c
trunk/test/my_catalog.c
trunk/test/my_cursor.c
trunk/test/my_datetime.c
trunk/test/my_error.c
trunk/test/my_prepare.c
trunk/test/my_relative.c
trunk/test/my_result.c
Log:
Break up mytest3, putting tests into some old tests and a couple of new ones
Property changes on: trunk/test
___________________________________________________________________
Name: svn:ignore
- .deps
.libs
Makefile
Makefile.in
my_basics
my_blob
my_bulk
my_catalog
my_col_length
my_curext
my_cursor
my_datetime
my_dyn_cursor
my_error
my_keys
my_param
my_position
my_prepare
my_relative
my_result
my_scroll
mytest
mytest3
my_tran
my_unixodbc
my_use_result
odbc.ini
odbcinst.ini
+ .deps
.libs
Makefile
Makefile.in
my_basics
my_blob
my_bulk
my_catalog
my_col_length
my_curext
my_cursor
my_datetime
my_dyn_cursor
my_error
my_info
my_keys
my_param
my_position
my_prepare
my_relative
my_result
my_scroll
mytest
my_tran
my_types
my_unixodbc
my_use_result
odbc.ini
odbcinst.ini
Modified: trunk/test/Makefile.am
===================================================================
--- trunk/test/Makefile.am 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/Makefile.am 2007-04-06 18:21:39 UTC (rev 298)
@@ -48,6 +48,7 @@
my_datetime \
my_dyn_cursor \
my_error \
+my_info \
my_keys \
my_param \
my_position \
@@ -56,10 +57,10 @@
my_result \
my_scroll \
my_tran \
+my_types \
my_unixodbc \
my_use_result \
-mytest \
-mytest3
+mytest
noinst_PROGRAMS= $(tap_tests)
Modified: trunk/test/my_basics.c
===================================================================
--- trunk/test/my_basics.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_basics.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -118,8 +118,68 @@
}
+DECLARE_TEST(t_max_select)
+{
+ SQLRETURN rc;
+ SQLCHAR szData[255];
+ SQLINTEGER i;
+
+ tmysql_exec(hstmt,"drop table t_max_select");
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"create table t_max_select(col1 int ,col2 varchar(30))");
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_max_select values(?,?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
+ SQL_INTEGER,0,0,&i,0,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,
+ SQL_CHAR,0,0,szData,sizeof(szData),NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," inserting 1000 rows, it will take some time\n");
+ for(i = 1; i <= 1000; i++)
+ {
+ fprintf(stdout," \r %d", i);
+ sprintf((char *)szData,"MySQL%d",i);
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+ }
+ fprintf(stdout,"\n");
+
+ rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_max_select");
+ mystmt(hstmt,rc);
+
+ my_assert( 1000 == myrowcount(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(my_basics)
+ ADD_TEST(t_max_select)
END_TESTS
Modified: trunk/test/my_blob.c
===================================================================
--- trunk/test/my_blob.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_blob.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -199,9 +199,527 @@
}
+/* Test for a simple SQLPutData and SQLParamData handling for longtext */
+DECLARE_TEST(t_putdata)
+{
+ SQLRETURN rc;
+ SQLLEN pcbLength;
+ SQLINTEGER c1;
+ SQLCHAR data[255];
+ SQLPOINTER token;
+
+ SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS);
+ rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
+ SQL_INTEGER,0,0,&c1,0,NULL);
+
+ rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,
+ SQL_LONGVARCHAR,0,0,
+ (SQLPOINTER)1,0,&pcbLength);
+
+ pcbLength = SQL_LEN_DATA_AT_EXEC(0);
+
+ c1 = 10;
+ rc = SQLExecute(hstmt);
+ myassert(rc == SQL_NEED_DATA);
+
+ rc = SQLParamData(hstmt, &token);
+ myassert(rc == SQL_NEED_DATA);
+
+ strcpy(data,"mysql ab");
+ rc = SQLPutData(hstmt,data,6);
+ mystmt(hstmt,rc);
+
+ strcpy(data,"- the open source database company");
+ rc = SQLPutData(hstmt,data,strlen(data));
+ mystmt(hstmt,rc);
+
+ rc = SQLParamData(hstmt, &token);
+ mystmt(hstmt,rc);
+
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ pcbLength= 0;
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
+ myassert(strcmp(data,"mysql - the open source database company")==0);
+ myassert(pcbLength == 40);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ return OK;
+}
+
+/* Test for a simple SQLPutData and SQLParamData handling for longtext */
+DECLARE_TEST(t_putdata1)
+{
+ SQLRETURN rc;
+ SQLLEN pcbLength;
+ SQLINTEGER c1;
+ SQLCHAR data[255];
+ SQLPOINTER token;
+
+ SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS);
+ rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_putdata values(10,'venu')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"update t_putdata set c2= ? where c1 = ?",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,
+ SQL_LONGVARCHAR,0,0,
+ (SQLPOINTER)1,0,&pcbLength);
+
+ rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_LONG,
+ SQL_INTEGER,0,0,&c1,0,NULL);
+
+ pcbLength = SQL_LEN_DATA_AT_EXEC(0);
+
+ c1 = 10;
+ rc = SQLExecute(hstmt);
+ myassert(rc == SQL_NEED_DATA);
+
+ rc = SQLParamData(hstmt, &token);
+ myassert(rc == SQL_NEED_DATA);
+
+ strcpy(data,"mysql ab");
+ rc = SQLPutData(hstmt,data,6);
+ mystmt(hstmt,rc);
+
+ strcpy(data,"- the open source database company");
+ rc = SQLPutData(hstmt,data,strlen(data));
+ mystmt(hstmt,rc);
+
+ rc = SQLParamData(hstmt, &token);
+ mystmt(hstmt,rc);
+
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ pcbLength= 0;
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
+ myassert(strcmp(data,"mysql - the open source database company")==0);
+ myassert(pcbLength == 40);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ return OK;
+}
+
+
+/* Test for a simple SQLPutData and SQLParamData handling for longtext */
+DECLARE_TEST(t_putdata2)
+{
+ SQLRETURN rc;
+ SQLLEN pcbLength;
+ SQLINTEGER c1;
+ SQLCHAR data[255];
+ SQLPOINTER token;
+
+ SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS);
+ rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar, c3 long
varchar)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?,?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
+ SQL_INTEGER,0,0,&c1,0,NULL);
+
+ rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,
+ SQL_LONGVARCHAR,0,0,
+ (SQLPOINTER)1,0,&pcbLength);
+
+ rc = SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,
+ SQL_LONGVARCHAR,0,0,
+ (SQLPOINTER)1,0,&pcbLength);
+
+ pcbLength = SQL_LEN_DATA_AT_EXEC(0);
+
+ c1 = 10;
+ rc = SQLExecute(hstmt);
+ myassert(rc == SQL_NEED_DATA);
+
+ rc = SQLParamData(hstmt, &token);
+ myassert(rc == SQL_NEED_DATA);
+
+ strcpy(data,"mysql ab");
+ rc = SQLPutData(hstmt,data,6);
+ mystmt(hstmt,rc);
+
+ strcpy(data,"- the open source database company");
+ rc = SQLPutData(hstmt,data,strlen(data));
+ mystmt(hstmt,rc);
+
+ rc = SQLParamData(hstmt, &token);
+ myassert(rc == SQL_NEED_DATA);
+
+ strcpy(data,"MySQL AB");
+ rc = SQLPutData(hstmt,data, 8);
+ mystmt(hstmt,rc);
+
+ rc = SQLParamData(hstmt, &token);
+ mystmt(hstmt,rc);
+
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"select c2,c3 from t_putdata where c1= 10",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ pcbLength= 0;
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
+ myassert(strcmp(data,"mysql - the open source database company")==0);
+ myassert(pcbLength == 40);
+
+ pcbLength= 0;
+ rc = SQLGetData(hstmt, 2, SQL_C_CHAR, data, sizeof(data), &pcbLength);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
+ myassert(strcmp(data,"MySQL AB")==0);
+ myassert(pcbLength == 8);
+
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ return OK;
+}
+
+
+/* Test for a simple SQLPutData and SQLParamData handling bug #1316 */
+DECLARE_TEST(t_putdata3)
+{
+ char buffer[]= "MySQL - The worlds's most popular open source database";
+ SQLRETURN rc;
+ const int MAX_PART_SIZE = 5;
+
+ char *pdata= 0, data[50];
+ int dynData;
+ int commonLen= 20;
+
+ SQLINTEGER id, id1, id2, id3, resId;
+ SQLINTEGER resUTimeSec;
+ SQLINTEGER resUTimeMSec;
+ SQLINTEGER resDataLen;
+ SQLLEN resData;
+
+ SQLExecDirect(hstmt,"drop table t_putdata3",SQL_NTS);
+ rc = SQLExecDirect(hstmt,"CREATE TABLE t_putdata3 ( id INT, id1 INT, \
+ id2 INT, id3 INT, pdata blob);",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ dynData = 1;
+
+ rc = SQLPrepare(hstmt, "INSERT INTO t_putdata3 VALUES ( ?, ?, ?, ?, ? )", SQL_NTS);
+ mystmt(hstmt,rc);
+
+ id= 1, id1= 2, id2= 3, id3= 4;
+ resId = 0;
+ resUTimeSec = 0;
+ resUTimeMSec = 0;
+ resDataLen = 0;
+ resData = SQL_LEN_DATA_AT_EXEC(0);
+
+ rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG,
+ SQL_INTEGER, 0, 0, &id, 0, &resId);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG,
+ SQL_INTEGER, 0, 0, &id1, 0, &resUTimeSec);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG,
+ SQL_INTEGER, 0, 0, &id2, 0, &resUTimeMSec);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_SLONG,
+ SQL_INTEGER, 0, 0, &id3, 0,
+ &resDataLen);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT,
+ SQL_C_BINARY, SQL_LONGVARBINARY, 10, 10,
+ dynData ? (SQLPOINTER)5 :
+ pdata, 0, &resData);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecute(hstmt);
+ if (rc == SQL_NEED_DATA)
+ {
+ int parameter;
+ if (SQLParamData(hstmt,(void**)¶meter) == SQL_NEED_DATA &&
parameter == 5)
+ {
+ int len = 0;
+ int partsize;
+
+ /* storing long data by parts */
+ while (len < commonLen)
+ {
+ partsize = commonLen - len;
+ if (partsize > MAX_PART_SIZE)
+ partsize = MAX_PART_SIZE;
+
+ rc = SQLPutData(hstmt, buffer+len, partsize);
+ mystmt(hstmt,rc);
+ len += partsize;
+ }
+ if (SQLParamData(hstmt,(void**)¶meter) == SQL_ERROR)
+ {
+
+ }
+ }
+ } /* end if (rc == SQL_NEED_DATA) */
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ if (mysql_min_version(hdbc, "4.0", 3))
+ {
+ rc = tmysql_exec(hstmt,"select id, id1, id2, id3, convert(pdata,char) from
t_putdata3");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+
+ my_assert(1 == my_fetch_int(hstmt,1));
+ my_assert(2 == my_fetch_int(hstmt,2));
+ my_assert(3 == my_fetch_int(hstmt,3));
+ my_assert(4 == my_fetch_int(hstmt,4));
+
+ my_assert(strncmp(buffer, my_fetch_str(hstmt,data,5), commonLen) == 0);
+ }
+ else
+ {
+ rc = tmysql_exec(hstmt,"select id, id1, id2, id3, pdata from t_putdata3");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+
+ my_assert(1 == my_fetch_int(hstmt,1));
+ my_assert(2 == my_fetch_int(hstmt,2));
+ my_assert(3 == my_fetch_int(hstmt,3));
+ my_assert(4 == my_fetch_int(hstmt,4));
+ my_assert(strncmp("4D7953514C202D2054686520776F726C64732773",
+ my_fetch_str(hstmt,data,5), commonLen) == 0);
+ }
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ /*
+ output:
+
+ ######################################
+ t_putdata3
+ ######################################
+ my_fetch_int: 1
+ my_fetch_int: 2
+ my_fetch_int: 3
+ my_fetch_int: 4
+ my_fetch_str: MySQL - The worlds's(20)
+ */
+
+ return OK;
+}
+
+
+/* Test the bug when blob size > 8k */
+DECLARE_TEST(t_blob_bug)
+{
+ SQLRETURN rc;
+ SQLCHAR *data;
+ SQLINTEGER i;
+ SQLLEN length;
+ const SQLINTEGER max_blob_size=1024*100;
+
+ SQLExecDirect(hstmt,"drop table t_blob",SQL_NTS);
+ rc = SQLExecDirect(hstmt,"create table t_blob(blb long varbinary)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_blob values(?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ if (!(data = (SQLCHAR *)calloc(max_blob_size,sizeof(SQLCHAR))))
+ {
+ SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+ return;
+ }
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARBINARY,
+ 0,0,data,0,&length);
+ mystmt(hstmt,rc);
+
+ memset(data,'X',max_blob_size);
+
+ fprintf(stdout,"inserting %d rows\n\n", max_blob_size / 1024);
+ for (length=1024; length <= max_blob_size; length+= 1024)
+ {
+ fprintf(stdout,"\r %d", length/1024);
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+ }
+
+ SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"SELECT length(blb) FROM t_blob",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&length,0,NULL);
+ mystmt(hstmt,rc);
+
+ for (i= 1; i <= max_blob_size/1024; i++)
+ {
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"row %d length: %d\n", i, length);
+ myassert(length == i * 1024);
+ }
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA);
+
+ free(data);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ return OK;
+}
+
+
+#define TEST_ODBC_TEXT_LEN 3000
+DECLARE_TEST(t_text_fetch)
+{
+ SQLRETURN rc;
+ SQLINTEGER i;
+ SQLLEN row_count, length;
+ SQLCHAR data[TEST_ODBC_TEXT_LEN+1];
+
+ SQLExecDirect(hstmt,"drop table t_text_fetch",SQL_NTS);
+ rc = SQLExecDirect(hstmt,"create table t_text_fetch(t1 tinytext, \
+ t2 text, \
+ t3 mediumtext, \
+ t4 longtext)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_text_fetch values(?,?,?,?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
+ 0,0,(char *)data, TEST_ODBC_TEXT_LEN/3, NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
+ 0,0,(char *)data, TEST_ODBC_TEXT_LEN/2, NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
+ 0,0,(char *)data,
+ (SQLINTEGER)(TEST_ODBC_TEXT_LEN/1.5), NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
+ 0,0,(char *)data, TEST_ODBC_TEXT_LEN-1, NULL);
+ mystmt(hstmt,rc);
+
+ memset(data,'A',TEST_ODBC_TEXT_LEN);
+ data[TEST_ODBC_TEXT_LEN]='\0';
+
+ for (i=0; i < 10; i++)
+ {
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+ }
+
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"SELECT * FROM t_text_fetch",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ row_count= 0;
+ rc = SQLFetch(hstmt);
+ while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
+ {
+ fprintf(stdout,"row '%d' (lengths: \n", row_count);
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"%d", length);
+ myassert(length == 255);
+
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,",%d", length);
+ myassert(length == TEST_ODBC_TEXT_LEN/2);
+
+ rc = SQLGetData(hstmt,3,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,",%d", length);
+ myassert(length == (SQLINTEGER)(TEST_ODBC_TEXT_LEN/1.5));
+
+ rc = SQLGetData(hstmt,4,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,",%d)", length);
+ myassert(length == TEST_ODBC_TEXT_LEN-1);
+ row_count++;
+
+ rc = SQLFetch(hstmt);
+ }
+ fprintf(stdout,"total rows: %d\n", row_count);
+ myassert(row_count == i);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"DROP TABLE t_text_fetch",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(t_blob)
ADD_TEST(t_1piecewrite2)
+ ADD_TEST(t_putdata)
+ ADD_TEST(t_putdata1)
+ ADD_TEST(t_putdata2)
+ ADD_TEST(t_putdata3)
+ ADD_TEST(t_blob_bug)
+ ADD_TEST(t_text_fetch)
END_TESTS
Modified: trunk/test/my_catalog.c
===================================================================
--- trunk/test/my_catalog.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_catalog.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -815,6 +815,302 @@
}
+DECLARE_TEST(tmysql_specialcols)
+{
+ SQLRETURN rc;
+
+ tmysql_exec(hstmt,"drop table tmysql_specialcols");
+ rc = tmysql_exec(hstmt,"create table tmysql_specialcols(col1 int primary key, col2
varchar(30), col3 int)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"create index tmysql_ind1 on tmysql_specialcols(col1)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into tmysql_specialcols values(100,'venu',1)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into tmysql_specialcols values(200,'MySQL',2)");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from tmysql_specialcols");
+ mystmt(hstmt,rc);
+
+ myresult(hstmt);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSpecialColumns(hstmt,
+ SQL_BEST_ROWID,
+ NULL,0,
+ NULL,0,
+ "tmysql_specialcols",SQL_NTS,
+ SQL_SCOPE_SESSION,
+ SQL_NULLABLE);
+ mystmt(hstmt,rc);
+
+ myresult(hstmt);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"drop table tmysql_specialcols");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ return OK;
+}
+
+
+/* To test SQLColumns misc case */
+DECLARE_TEST(t_columns)
+{
+ SQLSMALLINT NumPrecRadix, DataType, Nullable, DecimalDigits;
+ SQLLEN cbColumnSize, cbDecimalDigits, cbNumPrecRadix,
+ cbDatabaseName, cbDataType, cbNullable;
+ SQLRETURN rc;
+ SQLUINTEGER ColumnSize, i;
+ SQLUINTEGER ColumnCount= 7;
+ SQLCHAR ColumnName[MAX_NAME_LEN], DatabaseName[MAX_NAME_LEN];
+ SQLINTEGER Values[7][5][2]=
+ {
+ { {5,2}, {6,4}, {0,2}, {10,2}, {1,2}},
+ { {1,2}, {5,4}, {0,-1}, {10,-1}, {1,2}},
+ { {12,2}, {20,4}, {0,-1}, {10,-1}, {0,2}},
+ { {3,2}, {10,4}, {2,2}, {10,2}, {1,2}},
+ { {-6,2}, {4,4}, {0,2}, {10,2}, {0,2}},
+ { {4,2}, {11,4}, {0,2}, {10,2}, {0,2}},
+ { {-6,2}, {4,4}, {0,2}, {10,2}, {0,2}}
+ };
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+ SQLExecDirect(hstmt,"DROP TABLE test_column",SQL_NTS);
+
+ rc = SQLExecDirect(hstmt,"CREATE TABLE test_column(col0 smallint, \
+ col1 char(5),\
+ col2 varchar(20) not null,\
+ col3 decimal(10,2),\
+ col4 tinyint not null,\
+ col5 integer primary key,\
+ col6 tinyint not null unique
auto_increment)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ mystmt(hstmt,rc);
+
+ rc= SQLSetStmtAttr(hstmt, SQL_ATTR_METADATA_ID,
+ (SQLPOINTER)SQL_FALSE, SQL_IS_UINTEGER);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0);
+
+ rc= SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG,(SQLCHAR *)DatabaseName,
+ MAX_NAME_LEN, &cbDatabaseName);/* Current Catalog */
+ mycon(hdbc,rc);
+
+ for (i=0; i< ColumnCount; i++)
+ {
+ sprintf(ColumnName,"col%d",i);
+
+ rc= SQLColumns(hstmt,
+ (SQLCHAR *)DatabaseName, (SQLUSMALLINT)cbDatabaseName,
+ SQL_NULL_HANDLE, 0,
+ (SQLCHAR *)"test_column", SQL_NTS,
+ (SQLCHAR *)ColumnName, SQL_NTS);
+ mystmt(hstmt,rc);
+
+ /* 5 -- Data type */
+ rc= SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType);
+ mystmt(hstmt,rc);
+
+ /* 7 -- Column Size */
+ rc= SQLBindCol(hstmt, 7, SQL_C_ULONG, &ColumnSize, 0, &cbColumnSize);
+ mystmt(hstmt,rc);
+
+ /* 9 -- Decimal Digits */
+ rc= SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0,
&cbDecimalDigits);
+ mystmt(hstmt,rc);
+
+ /* 10 -- Num Prec Radix */
+ rc= SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);
+ mystmt(hstmt,rc);
+
+ /* 11 -- Nullable */
+ rc= SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable);
+ mystmt(hstmt,rc);
+
+ rc= SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"Column %s:\n", ColumnName);
+ fprintf(stdout,"\t DataType = %d(%d)\n", DataType, cbDataType);
+ fprintf(stdout,"\t ColumnSize = %d(%d)\n", ColumnSize, cbColumnSize);
+ fprintf(stdout,"\t DecimalDigits= %d(%d)\n", DecimalDigits, cbDecimalDigits);
+ fprintf(stdout,"\t NumPrecRadix = %d(%d)\n", NumPrecRadix, cbNumPrecRadix);
+ fprintf(stdout,"\t Nullable = %s(%d)\n\n",
+ Nullable == SQL_NO_NULLS ? "NO": "YES", cbNullable);
+
+ myassert(DataType == Values[i][0][0]);
+ myassert(cbDataType == Values[i][0][1]);
+
+ myassert(ColumnSize == Values[i][1][0]);
+ myassert(cbColumnSize == Values[i][1][1]);
+
+ myassert(DecimalDigits == Values[i][2][0]);
+ myassert(cbDecimalDigits == Values[i][2][1]);
+
+ myassert(NumPrecRadix == Values[i][3][0]);
+ myassert(cbNumPrecRadix == Values[i][3][1]);
+
+ myassert(Nullable == Values[i][4][0]);
+ myassert(cbNullable == Values[i][4][1]);
+
+ rc= SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+ }
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"DROP TABLE test_column",SQL_NTS);
+ mystmt(hstmt,rc);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ return OK;
+}
+
+
+/* Test the bug SQLTables */
+typedef struct t_table_bug
+{
+ SQLCHAR szColName[MAX_NAME_LEN];
+ SQLSMALLINT pcbColName;
+ SQLSMALLINT pfSqlType;
+ SQLUINTEGER pcbColDef;
+ SQLSMALLINT pibScale;
+ SQLSMALLINT pfNullable;
+} t_describe_col;
+
+
+t_describe_col t_tables_bug_data[5] =
+{
+ {"TABLE_CAT", 9, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
+ {"TABLE_SCHEM",11, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
+ {"TABLE_NAME", 10, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
+ {"TABLE_TYPE", 10, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
+ {"REMARKS", 7, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
+};
+
+
+DECLARE_TEST(t_tables_bug)
+{
+ SQLRETURN rc;
+ SQLSMALLINT i, ColumnCount, pcbColName, pfSqlType, pibScale, pfNullable;
+ SQLUINTEGER pcbColDef;
+ SQLCHAR szColName[MAX_NAME_LEN];
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLTables(hstmt,NULL,0,NULL,0,NULL,0,"'TABLE'",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLNumResultCols(hstmt,&ColumnCount);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout, "total columns in SQLTables: %d\n", ColumnCount);
+ myassert(ColumnCount == 5);
+
+ for (i= 1; i <= ColumnCount; i++)
+ {
+ rc = SQLDescribeCol(hstmt, (SQLUSMALLINT)i,
+ szColName,MAX_NAME_LEN,&pcbColName,
+ &pfSqlType,&pcbColDef,&pibScale,&pfNullable);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout, "Column Number'%d':\n", i);
+ fprintf(stdout, "\t Column Name : %s\n", szColName);
+ fprintf(stdout, "\t NameLengh : %d\n", pcbColName);
+ fprintf(stdout, "\t DataType : %d\n", pfSqlType);
+ fprintf(stdout, "\t ColumnSize : %d\n", pcbColDef);
+ fprintf(stdout, "\t DecimalDigits : %d\n", pibScale);
+ fprintf(stdout, "\t Nullable : %d\n", pfNullable);
+
+ myassert(strcmp(t_tables_bug_data[i-1].szColName,szColName) == 0);
+ myassert(t_tables_bug_data[i-1].pcbColName == pcbColName);
+ myassert(t_tables_bug_data[i-1].pfSqlType == pfSqlType);
+ myassert(t_tables_bug_data[i-1].pcbColDef == pcbColDef);
+ myassert(t_tables_bug_data[i-1].pibScale == pibScale);
+ myassert(t_tables_bug_data[i-1].pfNullable == pfNullable);
+ }
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_current_catalog)
+{
+ SQLCHAR cur_db[255], db[255];
+ SQLRETURN rc;
+ SQLUINTEGER len;
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, 255, &len);
+ mycon(hdbc,rc);
+ fprintf(stdout,"current_catalog: %s (%ld)\n", db, len);
+ myassert(strcmp(db, "test") == 0 || strlen("test") == len);
+
+ rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, SQL_NTS);
+ mycon(hdbc,rc);
+
+ SQLExecDirect(hstmt, "DROP DATABASE IF EXISTS test_odbc_current", SQL_NTS);
+
+ strcpy(cur_db, "test_odbc_current");
+ rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS);
+ mycon_r(hdbc,rc);
+
+ rc = SQLExecDirect(hstmt, "CREATE DATABASE test_odbc_current", SQL_NTS);
+ mystmt(hstmt,rc);
+
+ strcpy(cur_db, "test_odbc_current");
+ rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS);
+ mycon(hdbc,rc);
+
+ rc = SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, 255, &len);
+ mycon(hdbc,rc);
+ fprintf(stdout,"current_catalog: %s (%ld)\n", db, len);
+ myassert(strcmp(cur_db, db) == 0 || strlen(cur_db) == len);
+
+ strcpy(cur_db, "test_odbc_current_12455");
+ rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS);
+ mycon_r(hdbc,rc);
+
+ rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, len);
+ mycon(hdbc,rc);
+
+ /* reset for further tests */
+ rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)test_db, SQL_NTS);
+ mycon(hdbc,rc);
+
+ rc = SQLExecDirect(hstmt, "DROP DATABASE test_odbc_current", SQL_NTS);
+ mycon(hstmt,rc);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(my_columns_null)
ADD_TEST(my_drop_table)
@@ -826,6 +1122,10 @@
ADD_TEST(my_colpriv)
ADD_TEST(t_sqlprocedures)
ADD_TEST(t_catalog)
+ ADD_TEST(tmysql_specialcols)
+ ADD_TEST(t_columns)
+ ADD_TEST(t_tables_bug)
+ ADD_TEST(t_current_catalog)
END_TESTS
Modified: trunk/test/my_cursor.c
===================================================================
--- trunk/test/my_cursor.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_cursor.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -187,8 +187,6 @@
long id;
char name[50];
- printMessage("\nmy_setpos_cursor:\n");
-
/* Open the resultset of table 'my_demo_cursor' */
rc = SQLExecDirect(hstmt,"SELECT * FROM my_demo_cursor",SQL_NTS);
mystmt(hstmt,rc);
@@ -356,11 +354,872 @@
}
+DECLARE_TEST(t_setpos_del_all)
+{
+ SQLRETURN rc;
+ SQLINTEGER nData[4];
+ SQLLEN nlen;
+ SQLCHAR szData[4][10];
+
+ tmysql_exec(hstmt,"drop table t_sp_del_all");
+ rc = tmysql_exec(hstmt,"create table t_sp_del_all(col1 int not null primary key,\
+ col2 varchar(20))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(100,'MySQL1')");
+ mystmt(hstmt,rc);
+ rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(200,'MySQL2')");
+ mystmt(hstmt,rc);
+ rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(300,'MySQL3')");
+ mystmt(hstmt,rc);
+ rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(400,'MySQL4')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetCursorName(hstmt,"venu",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 4);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_sp_del_all order by col1 asc");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,2,SQL_C_CHAR,&szData[0],sizeof(szData[0]),NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_FIRST,1,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," row1 : %d, %s\n",nData[0],szData[0]);
+ fprintf(stdout," row2 : %d, %s\n",nData[1],szData[1]);
+ fprintf(stdout," row3 : %d, %s\n",nData[2],szData[2]);
+ fprintf(stdout," row4 : %d, %s\n",nData[3],szData[3]);
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetPos(hstmt,0,SQL_DELETE,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLRowCount(hstmt,&nlen);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," total rows deleted: %d\n",nlen);
+ myassert(nlen == 4);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_sp_del_all");
+ mystmt(hstmt,rc);
+
+ my_assert(0 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 1);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_setpos_upd_decimal)
+{
+ SQLRETURN rc;
+ SQLINTEGER rec;
+
+ tmysql_exec(hstmt,"drop table t_setpos_upd_decimal");
+ rc = tmysql_exec(hstmt,"create table t_setpos_upd_decimal(record decimal(3,0),\
+ num1 float, num2 decimal(6,0),num3 decimal(10,3))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_setpos_upd_decimal
values(001,12.3,134,0.100)");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ /* MS SQL Server to work...*/
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
+ SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
+
+ rc = tmysql_exec(hstmt,"select record from t_setpos_upd_decimal");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&rec,100,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout," row1: %d",rec);
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rec = 100;
+
+ rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ mystmt_r(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_setpos_upd_decimal");
+ mystmt(hstmt,rc);
+
+ myresult(hstmt);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_setpos_position)
+{
+ SQLRETURN rc;
+ SQLINTEGER nData= 500;
+ SQLLEN nlen;
+ SQLCHAR szData[255]={0};
+ SQLUINTEGER pcrow;
+
+ tmysql_exec(hstmt,"drop table t_setpos_position");
+ rc = tmysql_exec(hstmt,"create table t_setpos_position(col1 int, col2 varchar(30))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_setpos_position values(100,'MySQL1')");
+ mystmt(hstmt,rc);
+ rc = tmysql_exec(hstmt,"insert into t_setpos_position values(200,'MySQL2')");
+ mystmt(hstmt,rc);
+ rc = tmysql_exec(hstmt,"insert into t_setpos_position values(300,'MySQL3')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetCursorName(hstmt,"venu",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
+ SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
+
+ rc = tmysql_exec(hstmt,"select * from t_setpos_position");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," pcrow:%d\n",pcrow);
+ fprintf(stdout," row1:%d,%s\n",nData,szData);
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ nData = 1000;
+ strcpy((char *)szData , "updated");
+
+ rc = SQLSetPos(hstmt,3,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ mystmt_err(hstmt,rc == SQL_ERROR,rc);
+
+ rc = SQLSetPos(hstmt,2,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ mystmt_err(hstmt,rc == SQL_ERROR,rc);
+
+ rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLRowCount(hstmt,&nlen);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," rows affected:%d\n",nlen);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_setpos_position");
+ mystmt(hstmt,rc);
+
+ myresult(hstmt);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"DELETE FROM t_setpos_position WHERE col2 =
'updated'",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLRowCount(hstmt,&nlen);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"total rows affceted:%d\n",nlen);
+ my_assert(nlen == 1);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_setpos_position");
+ mystmt(hstmt,rc);
+
+ my_assert(2 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_pos_column_ignore)
+{
+ SQLRETURN rc;
+ SQLHSTMT hstmt1;
+ SQLCHAR szData[]="updated";
+ SQLINTEGER nData;
+ SQLLEN pcbValue, nlen, pcrow;
+
+ rc = SQLAllocStmt(hdbc,&hstmt1);
+ mycon(hdbc,rc);
+
+ tmysql_exec(hstmt,"drop table t_pos_column_ignore");
+ rc = tmysql_exec(hstmt,"create table t_pos_column_ignore(col1 int NOT NULL primary
key, col2 varchar(30))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_column_ignore values(10,'venu')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_column_ignore values(100,'MySQL')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
+
+ /* ignore all columns */
+ rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,&pcbValue);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&pcbValue);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ nData = 99;
+ strcpy((char *)szData , "updated");
+
+ pcbValue = SQL_COLUMN_IGNORE;
+ rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLRowCount(hstmt,&nlen);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," rows affected:%d\n",nlen);
+ myassert(nlen == 0);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ SQLFreeStmt(hstmt1,SQL_CLOSE);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+ {
+ SQLCHAR szData[20];
+ my_assert(10 == my_fetch_int(hstmt,1));
+ my_assert(!strcmp("venu",my_fetch_str(hstmt,szData,2)));
+ }
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ /* ignore only one column */
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&pcbValue);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ nData = 99;
+ strcpy((char *)szData , "updated");
+
+ pcbValue = SQL_COLUMN_IGNORE;
+ rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLRowCount(hstmt,&nlen);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," rows affected:%d\n",nlen);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ SQLFreeStmt(hstmt1,SQL_CLOSE);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+ {
+ SQLCHAR szData[20];
+ my_assert(99 == my_fetch_int(hstmt,1));
+ my_assert(!strcmp("venu",my_fetch_str(hstmt,szData,2)));
+ }
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt1,SQL_DROP);
+ mystmt(hstmt1,rc);
+
+ return OK;
+}
+
+
+static void verify_col_data(SQLHSTMT hstmt, const char *table,
+ const char *col, const char *exp_data)
+{
+ SQLCHAR data[255], query[255];
+ SQLRETURN rc;
+
+ if (table && col)
+ {
+ sprintf(query,"SELECT %s FROM %s",col,table);
+ fprintf(stdout,"\n %s", query);
+
+ rc = SQLExecDirect(hstmt, query, SQL_NTS);
+ mystmt(hstmt,rc);
+ }
+
+ rc = SQLFetch(hstmt);
+ if (rc == SQL_NO_DATA)
+ myassert(strcmp(exp_data,"SQL_NO_DATA") ==0 );
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, &data, 255, NULL);
+ if (rc == SQL_ERROR)
+ {
+ fprintf(stdout,"\n *** ERROR: FAILED TO GET THE RESULT ***");
+ exit(1);
+ }
+ fprintf(stdout,"\n obtained: `%s` (expected: `%s`)\n", data, exp_data);
+ myassert(strcmp(data,exp_data) == 0);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+}
+
+
+DECLARE_TEST(t_pos_datetime_delete)
+{
+ SQLRETURN rc;
+ SQLHSTMT hstmt1;
+ SQLINTEGER int_data;
+ SQLLEN row_count, cur_type;
+
+ rc = SQLAllocStmt(hdbc,&hstmt1);
+ mycon(hdbc,rc);
+
+ tmysql_exec(hstmt,"drop table t_pos_delete");
+ rc = tmysql_exec(hstmt,"create table t_pos_delete(id int not null default '0',\
+ name varchar(20) NOT NULL default
'',\
+ created datetime NOT NULL default
'2000-01-01')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete values(1,'venu','2003-02-10
14:45:39')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete(name) values('')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(2)");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_delete");
+ mystmt(hstmt,rc);
+
+ my_assert(3 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
+ SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_TRY_UNIQUE);
+
+ SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
+ SQLSetStmtOption(hstmt1,SQL_SIMULATE_CURSOR,SQL_SC_TRY_UNIQUE);
+
+ rc = SQLSetCursorName(hstmt,"venu_cur",8);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, &cur_type, 0, NULL);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_delete");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&int_data,0,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"current_row: %d\n", int_data);
+ myassert(int_data == 1);
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
+ mystmt(hstmt1,rc);
+
+ rc = SQLRowCount(hstmt1,&row_count);
+ mystmt(hstmt1,rc);
+ fprintf(stdout, "rows affected: %d\n", row_count);
+ myassert(row_count == 1);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"current_row: %d\n", int_data);
+ if (cur_type == SQL_CURSOR_DYNAMIC)
+ myassert(int_data == 2);
+ else
+ myassert(int_data == 0);
+
+ /*rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ mystmt(hstmt,rc);*/
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
+ mystmt(hstmt1,rc);
+
+ rc = SQLRowCount(hstmt1,&row_count);
+ mystmt(hstmt1,rc);
+ fprintf(stdout, "rows affected: %d\n", row_count);
+ myassert(row_count == 1);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+ SQLFreeStmt(hstmt1,SQL_CLOSE);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_delete");
+ mystmt(hstmt,rc);
+
+ my_assert(1 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ if (cur_type == SQL_CURSOR_DYNAMIC)
+ verify_col_data(hstmt,"t_pos_delete","id","0");
+ else
+ verify_col_data(hstmt,"t_pos_delete","id","2");
+
+ rc = SQLFreeStmt(hstmt1,SQL_DROP);
+ mystmt(hstmt1,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_pos_datetime_delete1)
+{
+ SQLRETURN rc;
+ SQLHSTMT hstmt1;
+ SQLINTEGER int_data;
+ SQLLEN row_count, cur_type;
+
+ rc = SQLAllocStmt(hdbc,&hstmt1);
+ mycon(hdbc,rc);
+
+ tmysql_exec(hstmt,"drop table t_pos_delete");
+ rc = tmysql_exec(hstmt,"create table t_pos_delete(id int not null default '0',\
+ name varchar(20) NOT NULL default
'',\
+ created datetime NOT NULL default
'2000-01-01')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete values(1,'venu','2003-02-10
14:45:39')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete(name) values('')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(2)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(3)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(4)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(5)");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_delete");
+ mystmt(hstmt,rc);
+
+ my_assert(6 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
+ SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
+
+ SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
+ SQLSetStmtOption(hstmt1,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
+
+ rc = SQLSetCursorName(hstmt,"venu_cur",8);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, &cur_type, 0, NULL);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_delete");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&int_data,0,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,3,NULL,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"current_row: %d\n", int_data);
+ myassert(int_data == 2);
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
+ mystmt(hstmt1,rc);
+
+ rc = SQLRowCount(hstmt1,&row_count);
+ mystmt(hstmt1,rc);
+ fprintf(stdout, "rows affected: %d\n", row_count);
+ myassert(row_count == 1);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"current_row: %d\n", int_data);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"current_row: %d\n", int_data);
+
+ /*rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ mystmt(hstmt,rc);*/
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
+ mystmt(hstmt1,rc);
+
+ rc = SQLRowCount(hstmt1,&row_count);
+ mystmt(hstmt1,rc);
+ fprintf(stdout, "rows affected: %d\n", row_count);
+ myassert(row_count == 1);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+ SQLFreeStmt(hstmt1,SQL_CLOSE);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_pos_delete");
+ mystmt(hstmt,rc);
+
+ my_assert(4 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt1,SQL_DROP);
+ mystmt(hstmt1,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_getcursor)
+{
+ SQLRETURN rc;
+ SQLHSTMT hstmt1,hstmt2,hstmt3;
+ SQLCHAR curname[50];
+ SQLSMALLINT nlen;
+
+ rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt1);
+ mycon(hdbc, rc);
+ rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt2);
+ mycon(hdbc, rc);
+ rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt3);
+ mycon(hdbc, rc);
+
+ rc = SQLGetCursorName(hstmt1,curname,50,&nlen);
+ if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
+ {
+ fprintf(stdout,"default cursor name : %s(%d)\n",curname,nlen);
+ myassert(nlen == 8);
+ myassert(!strcmp(curname,"SQL_CUR0"));
+
+ rc = SQLGetCursorName(hstmt3,curname,50,&nlen);
+ mystmt(hstmt1,rc);
+ fprintf(stdout,"default cursor name : %s(%d)\n",curname,nlen);
+
+ rc = SQLGetCursorName(hstmt1,curname,4,&nlen);
+ mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc);
+ fprintf(stdout,"truncated cursor name: %s(%d)\n",curname,nlen);
+ myassert(nlen == 8);
+ myassert(!strcmp(curname,"SQL"));
+
+ rc = SQLGetCursorName(hstmt1,curname,0,&nlen);
+ mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc);
+ fprintf(stdout,"untouched cursor name: %s(%d)\n",curname,nlen);
+ myassert(nlen == 8);
+
+ rc = SQLGetCursorName(hstmt1,curname,8,&nlen);
+ mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc);
+ fprintf(stdout,"truncated cursor name: %s(%d)\n",curname,nlen);
+ myassert(nlen == 8);
+ myassert(!strcmp(curname,"SQL_CUR"));
+
+ rc = SQLGetCursorName(hstmt1,curname,9,&nlen);
+ mystmt(hstmt1,rc);
+ fprintf(stdout,"full cursor name : %s(%d)\n",curname,nlen);
+ myassert(nlen == 8);
+ myassert(!strcmp(curname,"SQL_CUR0"));
+ }
+
+ rc = SQLSetCursorName(hstmt1,"venucur123",7);
+ mystmt(hstmt1,rc);
+
+ rc = SQLGetCursorName(hstmt1,curname,8,&nlen);
+ mystmt(hstmt1,rc);
+ fprintf(stdout,"full setcursor name : %s(%d)\n",curname,nlen);
+ myassert(nlen == 7);
+ myassert(!strcmp(curname,"venucur"));
+
+ rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
+ mystmt(hstmt1,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_getcursor1)
+{
+ SQLRETURN rc;
+ SQLHSTMT hstmt1;
+ SQLCHAR curname[50];
+ SQLSMALLINT nlen,index;;
+
+ for(index=0; index < 100; index++)
+ {
+ rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt1);
+ mycon(hdbc, rc);
+
+ rc = SQLGetCursorName(hstmt1,curname,50,&nlen);
+ if (rc != SQL_SUCCESS)
+ break;
+ fprintf(stdout,"%s(%d) \n",curname,nlen);
+
+ rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
+ mystmt(hstmt1,rc);
+ }
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_acc_crash)
+{
+ SQLRETURN rc;
+ SQLINTEGER id;
+ SQLCHAR name[20], data[30];
+ SQL_TIMESTAMP_STRUCT ts;
+
+ tmysql_exec(hstmt,"drop table if exists t_acc_crash");
+ rc = tmysql_exec(hstmt,"create table t_acc_crash(id int(11) not null auto_increment,\
+ name char(20),\
+ ts date,\
+ primary key(id))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_acc_crash(id,name) values(1,'venu')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_acc_crash(name) values('monty')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_acc_crash(name) values('mysql')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 1);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_acc_crash order by id asc");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,2,SQL_C_CHAR,(SQLCHAR *)&name,20,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,3,SQL_C_DATE,&ts,30,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetchScroll(hstmt,SQL_FETCH_FIRST,1);
+ mystmt(hstmt,rc);
+
+ id = 9;
+ strcpy(name,"updated");
+ ts.year=2010;ts.month=9;ts.day=25;
+
+ rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_acc_crash order by id desc");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ my_assert(9 == my_fetch_int(hstmt,1));
+ my_assert(!strcmp("updated", my_fetch_str(hstmt,data,2)));
+ my_assert(!strcmp("2010-09-25", my_fetch_str(hstmt,data,3)));
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(my_init_table)
ADD_TEST(my_positioned_cursor)
ADD_TEST(my_setpos_cursor)
ADD_TEST(t_bug5853)
+ ADD_TEST(t_setpos_del_all)
+ ADD_TEST(t_setpos_upd_decimal)
+ ADD_TEST(t_setpos_position)
+ ADD_TEST(t_pos_column_ignore)
+ ADD_TEST(t_pos_datetime_delete)
+ ADD_TEST(t_pos_datetime_delete1)
+ ADD_TEST(t_getcursor)
+ ADD_TEST(t_getcursor1)
+ ADD_TEST(t_acc_crash)
END_TESTS
Modified: trunk/test/my_datetime.c
===================================================================
--- trunk/test/my_datetime.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_datetime.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -326,11 +326,346 @@
}
+DECLARE_TEST(t_time)
+{
+ SQLRETURN rc;
+ SQL_TIME_STRUCT tm;
+ SQLCHAR str[20];
+
+ tmysql_exec(hstmt,"drop table t_time");
+ rc = tmysql_exec(hstmt,"create table t_time(tm time, ts timestamp(14))");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_time values (?,?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_TIME,
+ SQL_TIME, 0, 0, &tm, 0, NULL );
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_TIME,
+ SQL_TIMESTAMP, 0, 0, &tm, 15, NULL );
+ mystmt(hstmt,rc);
+
+ tm.hour = 20;
+ tm.minute = 59;
+ tm.second = 45;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLExecDirect(hstmt,"select tm from t_time",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,100,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time:%s\n",str);
+ my_assert(strcmp(str,"20:59:45")==0);
+
+ rc = SQLFetch(hstmt);
+ my_assert(rc == SQL_NO_DATA_FOUND);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+/* Test for a simple time struct */
+DECLARE_TEST(t_time1)
+{
+ SQLRETURN rc;
+ SQL_TIME_STRUCT tt;
+ SQLCHAR data[30];
+ SQLLEN length;
+
+ SQLExecDirect(hstmt,"drop table t_time",SQL_NTS);
+ rc = SQLExecDirect(hstmt,"create table t_time(t time, t1 timestamp, t2 datetime, t3
date)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_time(t) values(?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_TYPE_TIME,
+ SQL_TIME,0,0,&tt,0,NULL);
+
+
+ tt.hour= 00;
+ tt.minute= 00;
+ tt.second= 03;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 01;
+ tt.minute= 00;
+ tt.second= 00;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 19;
+ tt.minute= 00;
+ tt.second= 00;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 01;
+ tt.minute= 01;
+ tt.second= 00;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 01;
+ tt.minute= 00;
+ tt.second= 01;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 00;
+ tt.minute= 01;
+ tt.second= 00;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 00;
+ tt.minute= 11;
+ tt.second= 12;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 01;
+ tt.minute= 01;
+ tt.second= 01;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 00;
+ tt.minute= 00;
+ tt.second= 00;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ tt.hour= 10;
+ tt.minute= 11;
+ tt.second= 12;
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt, rc);
+
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"select t from t_time",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"00:00:03")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"01:00:00")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"19:00:00")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"01:01:00")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"01:00:01")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"00:01:00")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"00:11:12")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"01:01:01")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+
+ myassert(strcmp(data,"00:00:00")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %s(%d)\n", data, length);
+ myassert(strcmp(data,"10:11:12")==0);
+ myassert(length == 8);
+
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_time(t1) values('2003-05-12
10:11:12')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"select t1 from t_time", SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %d:%d:%d(%d)\n", tt.hour, tt.minute, tt.second, length);
+
+ myassert(tt.hour == 10 && tt.minute == 11 && tt.second == 12);
+ myassert(length == sizeof(SQL_TIME_STRUCT));
+
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_time(t2) values('03-12-28
05:59:59')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"select t2 from t_time", SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %d:%d:%d(%d)\n", tt.hour, tt.minute, tt.second, length);
+ myassert(tt.hour == 05 && tt.minute == 59 && tt.second == 59);
+ myassert(length == sizeof(SQL_TIME_STRUCT));
+
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_time(t3) values('2003-05-12
10:11:12')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"select t3 from t_time", SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"time: %d:%d:%d(%d)\n", tt.hour, tt.minute, tt.second, length);
+ myassert(tt.hour == 00 || tt.minute == 00 || tt.second == 00);
+ myassert(length == sizeof(SQL_TIME_STRUCT));
+
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(my_ts)
ADD_TEST(t_tstotime)
ADD_TEST(t_tstotime1)
ADD_TEST(t_bug25846)
+ ADD_TEST(t_time)
+ ADD_TEST(t_time1)
END_TESTS
Modified: trunk/test/my_error.c
===================================================================
--- trunk/test/my_error.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_error.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -180,11 +180,106 @@
return OK;
}
+static void test_diagrec(SQLSMALLINT HandleType,SQLHANDLE Handle,
+ SQLSMALLINT RecNumber, SQLSMALLINT BufferLength,
+ SQLRETURN return_value_expected)
+{
+ SQLRETURN rc;
+ SQLCHAR sqlstate[6]={0};
+ SQLCHAR message[255]={0};
+ SQLINTEGER native_err=0;
+ SQLSMALLINT msglen=0;
+
+ rc = SQLGetDiagRec(HandleType,Handle,RecNumber,
+ (char *)&sqlstate,&native_err,
+ (char *)&message,BufferLength,&msglen);
+
+ fprintf(stdout,"%d@%s(%d)\n",rc,message,msglen);
+ myassert(return_value_expected == rc);
+}
+
+
+DECLARE_TEST(t_diagrec)
+{
+ SQLRETURN rc;
+
+ fprintf(stdout," ** SQL_HANDLE_STMT ** \n");
+
+ rc = SQLExecDirect(hstmt,"DROP TABLE ODBC3_NON_EXISTANTi_TAB",SQL_NTS);
+ myassert(rc == SQL_ERROR);
+
+ test_diagrec(SQL_HANDLE_STMT,hstmt,2,0,SQL_NO_DATA_FOUND);
+ test_diagrec(SQL_HANDLE_STMT,hstmt,1,255,SQL_SUCCESS);
+ test_diagrec(SQL_HANDLE_STMT,hstmt,1,0,SQL_SUCCESS_WITH_INFO);
+ test_diagrec(SQL_HANDLE_STMT,hstmt,1,10,SQL_SUCCESS_WITH_INFO);
+ test_diagrec(SQL_HANDLE_STMT,hstmt,1,-1,SQL_ERROR);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_warning)
+{
+ SQLRETURN rc;
+ SQLCHAR szData[20];
+ SQLINTEGER pcbValue;
+
+ tmysql_exec(hstmt,"drop table t_warning");
+ rc = tmysql_exec(hstmt,"create table t_warning(col2 char(20))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_warning values('venu anuganti')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
+
+ /* ignore all columns */
+ rc = tmysql_exec(hstmt,"select * from t_warning");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt, rc);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
+ mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc);
+ fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
+ mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc);
+ fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
+ mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc);
+ fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
+
+ rc = SQLFetch(hstmt);
+ mystmt_err(hstmt, rc == SQL_NO_DATA_FOUND, rc);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(t_odbc2_error)
ADD_TEST(t_odbc3_error)
/* Run twice to test the driver's handling of switching */
ADD_TEST(t_odbc2_error)
+ ADD_TEST(t_diagrec)
+ ADD_TEST(t_warning)
END_TESTS
RUN_TESTS
Added: trunk/test/my_info.c
===================================================================
--- trunk/test/my_info.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_info.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -0,0 +1,168 @@
+/*
+ Copyright (C) 1995-2007 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation.
+
+ There are special exceptions to the terms and conditions of the GPL
+ as it is applied to this software. View the full text of the exception
+ in file LICENSE.exceptions in the top-level directory of this software
+ distribution.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "odbctap.h"
+
+
+DECLARE_TEST(t_gettypeinfo)
+{
+ SQLRETURN rc;
+ SQLSMALLINT pccol;
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetTypeInfo(hstmt,SQL_ALL_TYPES);
+ mystmt(hstmt,rc);
+
+ rc = SQLNumResultCols(hstmt,&pccol);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"total columns: %d\n",pccol);
+ myassert(pccol == 19);
+ myresult(hstmt);
+
+ rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_getinfo)
+{
+ SQLRETURN rc;
+ SQLCHAR rgbValue[100];
+ SQLSMALLINT pcbInfo;
+
+ rc = SQLGetInfo(hdbc,SQL_DRIVER_ODBC_VER,rgbValue,100,&pcbInfo);
+ mycon(hdbc,rc);
+ fprintf(stdout,"SQL_DRIVER_ODBC_VER: %s(%d)\n",rgbValue,pcbInfo);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_stmt_attr_status)
+{
+ SQLRETURN rc;
+ SQLUSMALLINT rowStatusPtr[3];
+ SQLUINTEGER rowsFetchedPtr;
+
+ tmysql_exec(hstmt,"drop table t_stmtstatus");
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"create table t_stmtstatus(id int, name char(20))");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_stmtstatus values(10,'data1')");
+ mystmt(hstmt,rc);
+ rc = tmysql_exec(hstmt,"insert into t_stmtstatus values(20,'data2')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc =
SQLSetStmtAttr(hstmt,SQL_ATTR_CURSOR_SCROLLABLE,(SQLPOINTER)SQL_NONSCROLLABLE,0);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_stmtstatus");
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,&rowsFetchedPtr,0);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_STATUS_PTR,&rowStatusPtr,0);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,2);
+ mystmt_err(hstmt,rc == SQL_ERROR,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_CURSOR_SCROLLABLE,(SQLPOINTER)SQL_SCROLLABLE,0);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_stmtstatus");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,2);
+ mystmt(hstmt,rc);
+
+ printMessage("total rows fetched: %d\n",rowsFetchedPtr);
+ printMessage("row 0 status : %d\n",rowStatusPtr[0]);
+ printMessage("row 1 status : %d\n",rowStatusPtr[1]);
+ printMessage("row 2 status : %d\n",rowStatusPtr[2]);
+ myassert(rowsFetchedPtr == 1);
+ myassert(rowStatusPtr[0] == 0);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,(SQLPOINTER)0,0);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_STATUS_PTR,(SQLPOINTER)0,0);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_msdev_bug)
+{
+ SQLRETURN rc;
+ SQLCHAR catalog[30];
+ SQLLEN len;
+
+ rc = SQLGetConnectOption(hdbc,SQL_CURRENT_QUALIFIER,&catalog);
+ mycon(hdbc,rc);
+ fprintf(stdout," SQL_CURRENT_QUALIFIER:%s\n",catalog);
+
+ rc = SQLGetConnectAttr(hdbc,SQL_ATTR_CURRENT_CATALOG,&catalog,30,&len);
+ mycon(hdbc,rc);
+ fprintf(stdout," SQL_ATTR_CURRENT_CATRALOG:%s(%d)\n",catalog,len);
+
+ return OK;
+}
+
+
+BEGIN_TESTS
+ ADD_TEST(t_gettypeinfo)
+ ADD_TEST(t_getinfo)
+ ADD_TEST(t_stmt_attr_status)
+ ADD_TEST(t_msdev_bug)
+END_TESTS
+
+
+RUN_TESTS
Modified: trunk/test/my_prepare.c
===================================================================
--- trunk/test/my_prepare.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_prepare.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -722,6 +722,126 @@
}
+DECLARE_TEST(t_prepare)
+{
+ SQLRETURN rc;
+ SQLINTEGER nidata= 200, nodata;
+ SQLLEN nlen;
+ char szodata[20],szidata[20]="MySQL";
+ short pccol;
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ tmysql_exec(hstmt,"drop table t_prepare");
+
+ rc = tmysql_exec(hstmt,"create table t_prepare(col1 int primary key, col2
varchar(30), col3 set(\"one\", \"two\"))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_prepare values(100,'venu','one')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_prepare values(200,'MySQL','two')");
+ mystmt(hstmt,rc);
+
+ rc = SQLPrepare(hstmt,"select * from t_prepare where col2 = ? AND col1 = ?",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLNumResultCols(hstmt,&pccol);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nodata,0,&nlen);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szodata,200,&nlen);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_CHAR,SQL_VARCHAR,
+ 0,0,szidata,20,&nlen);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER,
+ 0,0,&nidata,20,NULL);
+ mystmt(hstmt,rc);
+
+ nlen= strlen(szidata);
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," outdata: %d, %s(%d)\n", nodata,szodata,nlen);
+ my_assert(nodata == 200);
+
+ rc = SQLFetch(hstmt);
+ my_assert(rc == SQL_NO_DATA_FOUND);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_prepare1)
+{
+ SQLRETURN rc;
+ SQLINTEGER nidata= 1000;
+
+ tmysql_exec(hstmt,"drop table t_prepare1");
+
+ rc = tmysql_exec(hstmt,"create table t_prepare1(col1 int primary key, col2
varchar(30))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_prepare1 values(100,'venu')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_prepare1 values(200,'MySQL')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_prepare(hstmt,"insert into t_prepare1(col1) values(?)");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER,
+ 0,0,&nidata,0,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"SELECT * FROM t_prepare1",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ myassert(3 == myresult(hstmt));/* unless prepare is supported..*/
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(t_prep_basic)
ADD_TEST(t_prep_buffer_length)
@@ -731,6 +851,8 @@
ADD_TEST(t_prep_getdata1)
ADD_TEST(t_prep_catalog)
ADD_TEST(t_sps)
+ ADD_TEST(t_prepare)
+ ADD_TEST(t_prepare1)
END_TESTS
Modified: trunk/test/my_relative.c
===================================================================
--- trunk/test/my_relative.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_relative.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -745,11 +745,144 @@
}
+DECLARE_TEST(t_rows_fetched_ptr1)
+{
+ SQLRETURN rc;
+ SQLLEN rowsFetched, rowsSize;
+ SQLINTEGER i;
+
+ SQLExecDirect(hstmt,"drop table t_rows_fetched_ptr",SQL_NTS);
+
+ rc = SQLExecDirect(hstmt,"create table t_rows_fetched_ptr(a int)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(0)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(1)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(2)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(3)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(4)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(5)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rowsSize= 1;
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ i= 0;
+ rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
+ while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
+ {
+ fprintf(stdout,"total rows fetched: %ld\n", rowsFetched);
+ myassert(rowsFetched == rowsSize);
+ i++; rowsFetched= 0;
+ rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
+ }
+ myassert( i == 6);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rowsSize= 2;
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ i= 0;
+ rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
+ while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
+ {
+ fprintf(stdout,"total rows fetched: %ld\n", rowsFetched);
+ myassert(rowsFetched == rowsSize);
+ i++;rowsFetched= 0;
+ rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
+ }
+ myassert( i == 3);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rowsSize= 3;
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ i= 0;
+ rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
+ while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
+ {
+ printMessage("total rows fetched: %ld\n", rowsFetched);
+ myassert(rowsFetched == rowsSize);
+ i++;rowsFetched= 0;
+ rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
+ }
+ myassert( i == 2);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rowsSize= 4;
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ printMessage("total rows fetched: %ld\n", rowsFetched);
+ myassert(rowsFetched == rowsSize);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ printMessage("total rows fetched: %ld\n", rowsFetched);
+ myassert(rowsFetched == 2);
+
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA);
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, 0);/* reset */
+ mystmt(hstmt,rc);
+
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, NULL, 0);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(t_relative)
ADD_TEST(t_relative1)
ADD_TEST(t_relative2)
ADD_TEST(t_rows_fetched_ptr)
+ ADD_TEST(t_rows_fetched_ptr1)
END_TESTS
Modified: trunk/test/my_result.c
===================================================================
--- trunk/test/my_result.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_result.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -128,8 +128,952 @@
}
+/* To test a convertion type */
+DECLARE_TEST(t_convert_type)
+{
+ SQLRETURN rc;
+ SQLSMALLINT SqlType, DateType;
+ SQLCHAR ColName[MAX_NAME_LEN];
+ SQLCHAR DbVersion[MAX_NAME_LEN];
+ SQLINTEGER OdbcVersion;
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&OdbcVersion,0,NULL);
+ myenv(henv,rc);
+
+ fprintf(stdout,"odbc version:\n");
+ if (OdbcVersion == SQL_OV_ODBC2)
+ {
+ fprintf(stdout," SQL_OV_ODBC2");
+ DateType= SQL_DATE;
+ }
+ else
+ {
+ fprintf(stdout," SQL_OV_ODBC3");
+ DateType= SQL_TYPE_DATE;
+ }
+
+ rc = SQLGetInfo(hdbc,SQL_DBMS_VER,(SQLCHAR *)&DbVersion,MAX_NAME_LEN,NULL);
+ mycon(hdbc,rc);
+
+ SQLExecDirect(hstmt,"DROP TABLE t_convert",SQL_NTS);
+
+ rc = SQLExecDirect(hstmt,"CREATE TABLE t_convert(col0 integer, \
+ col1 date,\
+ col2 char(10))",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(10,'2002-10-24','venu')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(20,'2002-10-23','venu1')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(30,'2002-10-25','venu2')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(40,'2002-10-24','venu3')",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"SELECT MAX(col0) FROM t_convert",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"MAX(col0): %d\n", SqlType);
+ myassert(SqlType == SQL_INTEGER);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"SELECT MAX(col1) FROM t_convert",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"MAX(col1): %d\n", SqlType);
+ myassert(SqlType == DateType);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"SELECT MAX(col2) FROM t_convert",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"MAX(col0): %d\n", SqlType);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ if (strncmp(DbVersion,"4.",2) >= 0)
+ {
+ rc = SQLExecDirect(hstmt,"SELECT CAST(MAX(col1) AS DATE) AS col1 FROM
t_convert",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"CAST(MAX(col1) AS DATE): %d\n", SqlType);
+ myassert(SqlType == DateType);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"SELECT CONVERT(MAX(col1),DATE) AS col1 FROM
t_convert",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"CONVERT(MAX(col1),DATE): %d\n", SqlType);
+ myassert(SqlType == DateType);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLExecDirect(hstmt,"SELECT CAST(MAX(col1) AS CHAR) AS col1 FROM
t_convert",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"CAST(MAX(col1) AS CHAR): %d\n", SqlType);
+ myassert(SqlType == SQL_VARCHAR || SqlType == SQL_LONGVARCHAR);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+ }
+
+ rc = SQLExecDirect(hstmt,"DROP TABLE t_convert",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ return OK;
+}
+
+
+static void desc_col_check(SQLHSTMT hstmt,
+ SQLUSMALLINT icol,
+ const char *name,
+ SQLSMALLINT sql_type,
+ SQLUINTEGER col_def,
+ SQLUINTEGER col_def1,
+ SQLSMALLINT scale,
+ SQLSMALLINT nullable)
+{
+ SQLRETURN rc;
+ SQLSMALLINT pcbColName, pfSqlType, pibScale, pfNullable;
+ SQLUINTEGER pcbColDef;
+ SQLCHAR szColName[MAX_NAME_LEN];
+
+ rc = SQLDescribeCol(hstmt, icol,
+ szColName,MAX_NAME_LEN,&pcbColName,
+ &pfSqlType,&pcbColDef,&pibScale,&pfNullable);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout, "\n\n Column Number'%d':", icol);
+
+ fprintf(stdout, "\t Column Name : %s\n", szColName);
+ fprintf(stdout, "\t NameLengh : %d\n", pcbColName);
+ fprintf(stdout, "\t DataType : %d\n", pfSqlType);
+ fprintf(stdout, "\t ColumnSize : %d\n", pcbColDef);
+ fprintf(stdout, "\t DecimalDigits : %d\n", pibScale);
+ fprintf(stdout, "\t Nullable : %d\n", pfNullable);
+
+ myassert(strcmp(name,szColName) == 0);
+ myassert(sql_type == pfSqlType);
+ myassert(col_def == pcbColDef || col_def1 == pcbColDef);
+ myassert(scale == pibScale);
+ myassert(nullable == pfNullable);
+}
+
+
+/* To test SQLDescribeCol */
+DECLARE_TEST(t_desc_col)
+{
+ SQLRETURN rc;
+ SQLSMALLINT ColumnCount;
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ SQLExecDirect(hstmt,"DROP TABLE t_desc_col",SQL_NTS);
+
+ rc = SQLExecDirect(hstmt,"CREATE TABLE t_desc_col(c1 integer, \
+ c2 binary(2) NOT NULL,\
+ c3 char(1), \
+ c4 varchar(5),\
+ c5 decimal(10,3) NOT NULL,\
+ c6 tinyint,\
+ c7 smallint,\
+ c8 numeric(4,2),\
+ c9 real,\
+ c10 float(5),\
+ c11 bigint NOT NULL,\
+ c12 varbinary(12),\
+ c13 char(20) NOT NULL,\
+ c14 float(10,3),\
+ c15 tinytext,\
+ c16 text,\
+ c17 mediumtext,\
+ c18 longtext,\
+ c19 tinyblob,\
+ c20 blob,\
+ c21 mediumblob,\
+ c22 longblob,\
+ c23 tinyblob)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLExecDirect(hstmt,"SELECT * FROM t_desc_col",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLNumResultCols(hstmt, &ColumnCount);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout,"total columns: %d\n", ColumnCount);
+ my_assert(ColumnCount == 23);
+
+ desc_col_check(hstmt, 1, "c1", SQL_INTEGER, 10, 11, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 2, "c2", SQL_BINARY, 2, 2, 0, SQL_NO_NULLS);
+ desc_col_check(hstmt, 3, "c3", SQL_CHAR, 1, 1, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 4, "c4", SQL_VARCHAR, 5, 5, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 5, "c5", SQL_DECIMAL, 10, 10, 3, SQL_NO_NULLS);
+ desc_col_check(hstmt, 6, "c6", SQL_TINYINT, 3, 4, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 7, "c7", SQL_SMALLINT, 5, 6, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 8, "c8", SQL_DECIMAL, 4, 4, 2, SQL_NULLABLE);
+ desc_col_check(hstmt, 9, "c9", SQL_DOUBLE, 22, 24, 31, SQL_NULLABLE);
+ desc_col_check(hstmt, 10, "c10", SQL_REAL, 12, 24, 31, SQL_NULLABLE);
+ desc_col_check(hstmt, 11, "c11", SQL_BIGINT, 19, 19, 0, SQL_NO_NULLS);
+ desc_col_check(hstmt, 12, "c12", SQL_VARBINARY, 12, 12, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 13, "c13", SQL_CHAR, 20, 20, 0, SQL_NO_NULLS);
+ desc_col_check(hstmt, 14, "c14", SQL_REAL, 10, 24, 3, SQL_NULLABLE);
+ desc_col_check(hstmt, 15, "c15", SQL_LONGVARCHAR, 255, 255, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 16, "c16", SQL_LONGVARCHAR, 65535, 65535, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 17, "c17", SQL_LONGVARCHAR, 16777215, 16777215, 0,
SQL_NULLABLE);
+ desc_col_check(hstmt, 18, "c18", SQL_LONGVARCHAR, 4294967295 , 16777215 , 0,
SQL_NULLABLE);
+ desc_col_check(hstmt, 19, "c19", SQL_LONGVARBINARY, 255, 255, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 20, "c20", SQL_LONGVARBINARY, 65535, 65535, 0, SQL_NULLABLE);
+ desc_col_check(hstmt, 21, "c21", SQL_LONGVARBINARY, 16777215, 16777215, 0,
SQL_NULLABLE);
+ desc_col_check(hstmt, 22, "c22", SQL_LONGVARBINARY, 4294967295 , 16777215 , 0,
SQL_NULLABLE);
+ desc_col_check(hstmt, 23, "c23", SQL_LONGVARBINARY, 255, 5, 0, SQL_NULLABLE);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+}
+
+
+/* Test for misc CONVERT bug #1082 */
+DECLARE_TEST(t_convert)
+{
+ SQLRETURN rc;
+ SQLLEN data_len;
+ SQLCHAR data[50];
+
+ tmysql_exec(hstmt,"drop table t_convert");
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"CREATE TABLE t_convert(testing tinytext)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"INSERT INTO t_convert VALUES('record1')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"INSERT INTO t_convert VALUES('record2')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"SELECT CONCAT(testing, '-must be string') FROM t_convert
ORDER BY RAND()");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_CHAR, &data, 100, &data_len);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+ myassert(strcmp(data,"record1-must be string") == 0 ||
+ strcmp(data,"record2-must be string") == 0);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+ myassert(strcmp(data,"record1-must be string") == 0 ||
+ strcmp(data,"record2-must be string") == 0);
+
+ rc = SQLFetch(hstmt);
+ myassert( rc == SQL_NO_DATA);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_max_rows)
+{
+ SQLRETURN rc;
+ SQLUINTEGER i;
+
+ tmysql_exec(hstmt,"drop table t_max_rows");
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"create table t_max_rows(id int)");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_max_rows values(?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc =
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_ULONG,SQL_INTEGER,0,0,&i,0,NULL);
+ mystmt(hstmt,rc);
+
+ for(i=0; i < 10; i++)
+ {
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+ }
+
+ SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)0,0);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select count(*) from t_max_rows");
+ mystmt(hstmt,rc);
+ myassert( 1 == myresult(hstmt) );
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = tmysql_exec(hstmt,"select * from t_max_rows");
+ mystmt(hstmt,rc);
+ myassert( 10 == myresult(hstmt) );
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ /* MAX rows through connection attribute */
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)5,0);
+ mystmt(hstmt,rc);
+
+ /*
+ This query includes leading spaces to act as a regression test
+ for Bug #6609: SQL_ATTR_MAX_ROWS and leading spaces in query result in
+ truncating end of query.
+ */
+ rc = tmysql_exec(hstmt," select * from t_max_rows");
+ mystmt(hstmt,rc);
+ myassert( 5 == myrowcount(hstmt));
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)15,0);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_max_rows");
+ mystmt(hstmt,rc);
+ myassert( 10 == myrowcount(hstmt));
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)0,0);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_max_rows");
+ mystmt(hstmt,rc);
+ myassert( 10 == myrowcount(hstmt));
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_multistep)
+{
+ SQLRETURN rc;
+ SQLCHAR szData[150];
+ SQLLEN pcbValue;
+ SQLINTEGER id;
+
+ tmysql_exec(hstmt,"drop table t_multistep");
+ rc = tmysql_exec(hstmt,"create table t_multistep(col1 int,col2 varchar(200))");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_multistep values(10,'MySQL - Open Source
Database')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_multistep");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"id: %ld\n",id);
+ myassert(id == 10);
+
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"length: %ld\n", pcbValue);
+ myassert(pcbValue == 28);
+
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"length: %ld\n", pcbValue);
+ myassert(pcbValue == 28);
+
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"length: %ld\n", pcbValue);
+ myassert(pcbValue == 28);
+
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"length: %ld\n", pcbValue);
+ myassert(pcbValue == 28);
+
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"length: %ld\n", pcbValue);
+ myassert(pcbValue == 28);
+
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,10,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
+ myassert(pcbValue == 28);
+ myassert(strcmp(szData,"MySQL - O") == 0);
+
+ pcbValue= 0;
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,5,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
+ myassert(pcbValue == 19);
+ myassert(strcmp(szData,"pen ") == 0);
+
+ pcbValue= 0;
+ szData[0]='A';
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
+ myassert(pcbValue == 15);
+ myassert(szData[0] == 'A');
+
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,pcbValue+1,&pcbValue);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
+ myassert(pcbValue == 15);
+ myassert(strcmp(szData,"Source Database") == 0);
+
+ pcbValue= 99;
+ szData[0]='A';
+ rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
+ myassert(rc == SQL_SUCCESS_WITH_INFO);
+ fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
+ myassert(pcbValue == 0);
+ myassert(szData[0] == 'A');
+
+
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA_FOUND);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+}
+
+
+DECLARE_TEST(t_zerolength)
+{
+ SQLRETURN rc;
+ SQLCHAR szData[100], bData[100], bData1[100];
+ SQLLEN pcbValue,pcbValue1,pcbValue2;
+
+ tmysql_exec(hstmt,"drop table t_zerolength");
+ rc = tmysql_exec(hstmt,"create table t_zerolength(str varchar(20), bin varbinary(20),
blb blob)");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_zerolength values('','','')");
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"insert into t_zerolength values('venu','mysql','monty')");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
+
+ rc = tmysql_exec(hstmt,"select * from t_zerolength");
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ pcbValue= pcbValue1= 99;
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"length: %d\n", pcbValue);
+ myassert(pcbValue == 0);
+
+ bData[0]=bData[1]='z';
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"length: %d\n", pcbValue1);
+ myassert(pcbValue1 == 0);
+ myassert(bData[0] == 'z');
+ myassert(bData[1] == 'z');
+
+ bData1[0]=bData1[1]='z';
+ rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"length: %d\n", pcbValue2);
+ myassert(pcbValue2 == 0);
+ myassert(bData1[0] == 'z');
+ myassert(bData1[1] == 'z');
+
+ pcbValue= pcbValue1= 99;
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ myassert(pcbValue == 0);
+ myassert(szData[0] == '\0');
+
+ bData[0]=bData[1]='z';
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
+ myassert(pcbValue1 == 0);
+ myassert(bData[0]== '\0');
+
+ bData1[0]=bData1[1]='z';
+ rc = SQLGetData(hstmt,3,SQL_C_CHAR,bData1,1,&pcbValue2);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s, length: %d\n", bData1, pcbValue2);
+ myassert(pcbValue2 == 0);
+ myassert(bData1[0] == '\0');
+ myassert(bData1[1] == 'z');
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ pcbValue= pcbValue1= 99;
+ szData[0]= bData[0]= 'z';
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"length: %d\n", pcbValue);
+ myassert(pcbValue == 4);
+ myassert(szData[0] == 'z');
+
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"length: %d\n", pcbValue1);
+ myassert(pcbValue1 == 5);
+ myassert(bData[0] == 'z');
+
+ bData[0]=bData1[1]='z';
+ rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"length: %d\n", pcbValue2);
+ myassert(pcbValue2 == 5);
+
+ pcbValue= pcbValue1= 99;
+ szData[0]= szData[1]= bData[0]= bData[1]= 'z';
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData,pcbValue);
+ myassert(pcbValue == 4);
+ myassert(szData[0] == '\0');
+
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"data; %s, length: %d\n", bData, pcbValue1);
+ myassert(pcbValue1 == 5);
+ myassert(bData[0] == 'm');
+
+ bData[0]=bData1[1]='z';
+ rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,1,&pcbValue2);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"length: %d\n", pcbValue2);
+ myassert(pcbValue2 == 5);
+ myassert(bData1[0] == 'm');
+ myassert(bData1[1] == 'z');
+
+ pcbValue= pcbValue1= 99;
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ myassert(pcbValue == 4);
+ myassert(strcmp(szData,"ven")==0);
+
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,4,&pcbValue1);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
+ myassert(pcbValue1 == 5);
+ myassert(strncmp(bData,"mysq",4)==0);
+
+ pcbValue= pcbValue1= 99;
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,5,&pcbValue);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ myassert(pcbValue == 4);
+ myassert(strcmp(szData,"venu")==0);
+
+ rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,5,&pcbValue1);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
+ myassert(pcbValue1 == 5);
+ myassert(strncmp(bData,"mysql",5)==0);
+
+ szData[0]= 'z';
+ rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,0,&pcbValue);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ myassert(pcbValue == 5 || pcbValue == 10);
+ myassert(szData[0] == 'z');
+
+#if TO_BE_FIXED_IN_DRIVER
+ szData[0]=szData[1]='z';
+ rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,1,&pcbValue);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ myassert(pcbValue == 10);
+ myassert(szData[0] == 'm');
+ myassert(szData[1] == 'z');
+
+ rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,4,&pcbValue);
+ mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ myassert(pcbValue == 10);
+ myassert(strncmp(szData,"mont",4) == 0);
+
+ rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,5,&pcbValue);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
+ myassert(pcbValue == 10);
+ myassert(strncmp(szData,"monty",5) == 0);
+#endif
+
+ rc = SQLFetch(hstmt);
+ myassert(rc == SQL_NO_DATA_FOUND);
+
+ SQLFreeStmt(hstmt,SQL_UNBIND);
+ SQLFreeStmt(hstmt,SQL_CLOSE);
+
+ return OK;
+}
+
+
+/* Test the bug when two stmts are used with the don't cache results */
+DECLARE_TEST(t_cache_bug)
+{
+ SQLRETURN rc;
+ SQLHENV henv1;
+ SQLHDBC hdbc1;
+ SQLHSTMT hstmt11, hstmt12;
+ SQLCHAR conn[MAX_NAME_LEN];
+
+ sprintf(conn,"DSN=%s;USER=%s;PASSWORD=%s;OPTION=1048579",
+ mydsn,myuid,mypwd);
+ if (mysock != NULL)
+ {
+ strcat(conn, ";SOCKET=");
+ strcat(conn, mysock);
+ }
+ mydrvconnect(&henv1,&hdbc1,&hstmt11,conn);
+
+ tmysql_exec(hstmt11,"drop table t_cache");
+ rc = tmysql_exec(hstmt11,"create table t_cache(id int)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(1)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(2)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(3)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(4)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(5)");
+ mystmt(hstmt11,rc);
+
+ rc = SQLExecDirect(hstmt11,"select * from t_cache",SQL_NTS);
+ mystmt(hstmt11,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt11,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt11,rc);
+
+ rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt12);
+ mycon(hdbc1,rc);
+
+ rc = SQLColumns(hstmt12,test_db,SQL_NTS,
+ NULL,0,"t_cache",SQL_NTS,
+ NULL,0);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt12);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt11,rc);
+
+ rc = SQLFetch(hstmt12);
+ myassert(rc == SQL_NO_DATA);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt12);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt11);
+ myassert(rc == SQL_NO_DATA);
+
+ rc = SQLFreeStmt(hstmt11, SQL_DROP);
+ mystmt(hstmt11,rc);
+
+ rc = SQLDisconnect(hdbc1);
+ mycon(hdbc1,rc);
+
+ rc = SQLFreeConnect(hdbc1);
+ mycon(hdbc1,rc);
+
+ rc = SQLFreeEnv(henv1);
+ myenv(henv1,rc);
+
+ return OK;
+}
+
+
+/* Test the bug when two stmts are used with the don't cache results */
+DECLARE_TEST(t_non_cache_bug)
+{
+ SQLRETURN rc;
+ SQLHENV henv1;
+ SQLHDBC hdbc1;
+ SQLHSTMT hstmt11, hstmt12;
+ SQLCHAR conn[MAX_NAME_LEN];
+
+ sprintf(conn,"DSN=%s;USER=%s;PASSWORD=%s;OPTION=3",
+ mydsn,myuid,mypwd);
+ if (mysock != NULL)
+ {
+ strcat(conn, ";SOCKET=");
+ strcat(conn, mysock);
+ }
+ mydrvconnect(&henv1,&hdbc1,&hstmt11,conn);
+
+ tmysql_exec(hstmt11,"drop table t_cache");
+ rc = tmysql_exec(hstmt11,"create table t_cache(id int)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(1)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(2)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(3)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(4)");
+ mystmt(hstmt11,rc);
+
+ rc = tmysql_exec(hstmt11,"insert into t_cache values(5)");
+ mystmt(hstmt11,rc);
+
+ rc = SQLExecDirect(hstmt11,"select * from t_cache",SQL_NTS);
+ mystmt(hstmt11,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt11,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt11,rc);
+
+ rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt12);
+ mycon(hdbc1,rc);
+
+ rc = SQLColumns(hstmt12,test_db,SQL_NTS,
+ NULL,0,"t_cache",SQL_NTS,
+ NULL,0);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt12);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt11,rc);
+
+ rc = SQLFetch(hstmt12);
+ myassert(rc == SQL_NO_DATA);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt12);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt11);
+ mystmt(hstmt12,rc);
+
+ rc = SQLFetch(hstmt11);
+ myassert(rc == SQL_NO_DATA);
+
+ rc = SQLFreeStmt(hstmt11, SQL_DROP);
+ mystmt(hstmt11,rc);
+
+ rc = SQLDisconnect(hdbc1);
+ mycon(hdbc1,rc);
+
+ rc = SQLFreeConnect(hdbc1);
+ mycon(hdbc1,rc);
+
+ rc = SQLFreeEnv(henv1);
+ myenv(henv1,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_empty_str_bug)
+{
+ SQLRETURN rc;
+ SQLINTEGER id;
+ SQLLEN name_len, desc_len;
+ SQLCHAR name[20], desc[20];
+
+ tmysql_exec(hstmt,"drop table t_empty_str_bug");
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"CREATE TABLE t_empty_str_bug(Id int NOT NULL,\
+ Name varchar(10) default NULL, \
+ Description varchar(10) default
NULL, \
+ PRIMARY KEY (Id))");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLSetCursorName(hstmt,"venu",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_empty_str_bug");
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,2,SQL_C_CHAR,&name,100,&name_len);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindCol(hstmt,3,SQL_C_CHAR,&desc,100,&desc_len);
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
+ myassert(rc == SQL_NO_DATA_FOUND);
+
+ id= 10;
+ strcpy(name,"MySQL AB");name_len= SQL_NTS;
+ strcpy(desc,"");desc_len= SQL_COLUMN_IGNORE;
+
+ rc = SQLSetPos(hstmt,1,SQL_ADD,SQL_LOCK_NO_CHANGE);
+ mystmt(hstmt,rc);
+
+ rc = SQLRowCount(hstmt,&name_len);
+ mystmt(hstmt,rc);
+
+ fprintf(stdout," rows affected:%d\n",name_len);
+ myassert(name_len == 1);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_empty_str_bug");
+ mystmt(hstmt,rc);
+
+ my_assert( 1 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_empty_str_bug");
+ mystmt(hstmt,rc);
+
+ rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,1,NULL,NULL);
+ mystmt(hstmt,rc);
+
+ name[0]='\0';
+ my_assert(10 == my_fetch_int(hstmt,1));
+ my_assert(!strcmp((const char *)"MySQL AB",my_fetch_str(hstmt,name,2)));
+ my_assert(!strcmp((const char *)"MySQL AB",my_fetch_str(hstmt,name,3))); /* NULL */
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(my_resultset)
+ ADD_TEST(t_convert_type)
+ ADD_TEST(t_desc_col)
+ ADD_TEST(t_convert)
+ ADD_TEST(t_max_rows)
+ ADD_TEST(t_multistep)
+ ADD_TEST(t_zerolength)
+ ADD_TEST(t_cache_bug)
+ ADD_TEST(t_non_cache_bug)
+ ADD_TEST(t_empty_str_bug)
END_TESTS
Added: trunk/test/my_types.c
===================================================================
--- trunk/test/my_types.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/my_types.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -0,0 +1,243 @@
+/*
+ Copyright (C) 1995-2007 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation.
+
+ There are special exceptions to the terms and conditions of the GPL
+ as it is applied to this software. View the full text of the exception
+ in file LICENSE.exceptions in the top-level directory of this software
+ distribution.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "odbctap.h"
+
+
+DECLARE_TEST(t_longlong1)
+{
+ SQLRETURN rc;
+ SQLINTEGER session_id, ctn;
+
+ tmysql_exec(hstmt,"drop table t_longlong");
+ rc = tmysql_exec(hstmt,"create table t_longlong (\
+ session_id bigint not null,\
+ ctn bigint not null)");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
+ SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0);
+
+ rc = SQLPrepare(hstmt,"insert into t_longlong values (?,?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_UBIGINT,
+ SQL_BIGINT, 20, 0, &session_id, 20, NULL );
+
+ rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_UBIGINT,
+ SQL_BIGINT, 20, 0, &ctn, 20, NULL );
+
+ for (session_id=50; session_id < 100; session_id++)
+ {
+ ctn += session_id;
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+ }
+
+ rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = tmysql_exec(hstmt,"select * from t_longlong");
+ mystmt(hstmt,rc);
+
+ my_assert( 50 == myresult(hstmt));
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_numeric)
+{
+ SQLRETURN rc;
+ SQL_NUMERIC_STRUCT num;
+
+ tmysql_exec(hstmt,"drop table t_decimal");
+ rc = tmysql_exec(hstmt,"create table t_decimal(d1 decimal(10,6))");
+ mystmt(hstmt,rc);
+ rc = tmysql_exec(hstmt,"insert into t_decimal values(10.2)");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_decimal values (?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_NUMERIC,
+ SQL_DECIMAL, 10, 4, &num, 0, NULL );
+ mystmt_r(hstmt,rc);
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ rc = SQLPrepare(hstmt,"insert into t_decimal values (?),(?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG,
+ SQL_DECIMAL, 10, 4, &rc, 0, NULL );
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_NUMERIC,
+ SQL_DECIMAL, 10, 4, &num, 0, NULL );
+ mystmt_r(hstmt,rc);
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+
+ rc = SQLBindCol( hstmt, 1, SQL_C_NUMERIC, &num, 0, NULL );
+ mystmt_r(hstmt,rc);
+
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+
+ rc = SQLExecDirect(hstmt, "select * from t_decimal",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData( hstmt, 1, SQL_C_NUMERIC, &num, 0, NULL );
+ mystmt_r(hstmt,rc);
+
+ SQLFreeStmt(hstmt, SQL_UNBIND);
+ SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
+ SQLFreeStmt(hstmt, SQL_CLOSE);
+
+ return OK;
+}
+
+
+DECLARE_TEST(t_decimal)
+{
+ SQLCHAR str[20],s_data[]="189.4567";
+ SQLDOUBLE d_data=189.4567;
+ SQLINTEGER i_data=189, l_data=-23;
+ SQLRETURN rc;
+
+ tmysql_exec(hstmt,"drop table t_decimal");
+ rc = tmysql_exec(hstmt,"create table t_decimal(d1 decimal(10,6))");
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLPrepare(hstmt,"insert into t_decimal values (?),(?),(?),(?)",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_DOUBLE,
+ SQL_DECIMAL, 10, 4, &d_data, 0, NULL );
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG,
+ SQL_DECIMAL, 10, 4, &i_data, 0, NULL );
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,
+ SQL_DECIMAL, 10, 4, &s_data, 9, NULL );
+ mystmt(hstmt,rc);
+
+ rc = SQLBindParameter( hstmt, 4, SQL_PARAM_INPUT, SQL_C_LONG,
+ SQL_DECIMAL, 10, 4, &l_data, 0, NULL );
+ mystmt(hstmt,rc);
+
+ rc = SQLExecute(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
+ mycon(hdbc,rc);
+
+ rc = SQLExecDirect(hstmt,"select d1 from t_decimal",SQL_NTS);
+ mystmt(hstmt,rc);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"decimal(SQL_C_DOUBLE) : %s\n",str);
+ my_assert(strncmp(str,"189.4567",8)==0);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"decimal(SQL_C_INTEGER): %s\n",str);
+ my_assert(strncmp(str,"189.0000",5)==0);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"decimal(SQL_C_CHAR) : %s\n",str);
+ my_assert(strncmp(str,"189.4567",8)==0);
+
+ rc = SQLFetch(hstmt);
+ mystmt(hstmt,rc);
+
+ rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
+ mystmt(hstmt,rc);
+ fprintf(stdout,"decimal(SQL_C_LONG) : %s\n",str);
+ my_assert(strncmp(str,"-23.00",6)==0);
+
+ rc = SQLFetch(hstmt);
+ my_assert(rc == SQL_NO_DATA_FOUND);
+
+ rc = SQLFreeStmt(hstmt,SQL_UNBIND);
+ mystmt(hstmt,rc);
+
+ rc = SQLFreeStmt(hstmt,SQL_CLOSE);
+ mystmt(hstmt,rc);
+
+ return OK;
+}
+
+
+BEGIN_TESTS
+ ADD_TEST(t_longlong1)
+ ADD_TEST(t_numeric)
+ ADD_TEST(t_decimal)
+END_TESTS
+
+
+RUN_TESTS
Deleted: trunk/test/mytest3.c
===================================================================
--- trunk/test/mytest3.c 2007-04-06 17:01:21 UTC (rev 297)
+++ trunk/test/mytest3.c 2007-04-06 18:21:39 UTC (rev 298)
@@ -1,3844 +0,0 @@
-/*
- Copyright (C) 2003-2007 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as
- published by the Free Software Foundation.
-
- There are special exceptions to the terms and conditions of the GPL
- as it is applied to this software. View the full text of the exception
- in file LICENSE.exceptions in the top-level directory of this software
- distribution.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "odbctap.h"
-
-/* Utility function to verify a particular column data */
-static void verify_col_data(SQLHSTMT hstmt, const char *table,
- const char *col, const char *exp_data)
-{
- SQLCHAR data[255], query[255];
- SQLRETURN rc;
-
- if (table && col)
- {
- sprintf(query,"SELECT %s FROM %s",col,table);
- fprintf(stdout,"%s\n", query);
-
- rc = SQLExecDirect(hstmt, query, SQL_NTS);
- mystmt(hstmt,rc);
- }
-
- rc = SQLFetch(hstmt);
- if (rc == SQL_NO_DATA)
- myassert(strcmp(exp_data,"SQL_NO_DATA") ==0 );
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, &data, 255, NULL);
- if (rc == SQL_ERROR)
- {
- fprintf(stdout,"*** ERROR: FAILED TO GET THE RESULT ***\n");
- exit(1);
- }
- fprintf(stdout,"obtained: `%s` (expected: `%s`)\n", data, exp_data);
- myassert(strcmp(data,exp_data) == 0);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-}
-
-
-DECLARE_TEST(t_setpos_del_all)
-{
- SQLRETURN rc;
- SQLINTEGER nData[4];
- SQLLEN nlen;
- SQLCHAR szData[4][10];
-
- tmysql_exec(hstmt,"drop table t_sp_del_all");
- rc = tmysql_exec(hstmt,"create table t_sp_del_all(col1 int not null primary key,\
- col2 varchar(20))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(100,'MySQL1')");
- mystmt(hstmt,rc);
- rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(200,'MySQL2')");
- mystmt(hstmt,rc);
- rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(300,'MySQL3')");
- mystmt(hstmt,rc);
- rc = tmysql_exec(hstmt,"insert into t_sp_del_all values(400,'MySQL4')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSetCursorName(hstmt,"venu",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 4);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_sp_del_all order by col1 asc");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,2,SQL_C_CHAR,&szData[0],sizeof(szData[0]),NULL);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_FIRST,1,NULL,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout," row1 : %d, %s\n",nData[0],szData[0]);
- fprintf(stdout," row2 : %d, %s\n",nData[1],szData[1]);
- fprintf(stdout," row3 : %d, %s\n",nData[2],szData[2]);
- fprintf(stdout," row4 : %d, %s\n",nData[3],szData[3]);
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLSetPos(hstmt,0,SQL_DELETE,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLRowCount(hstmt,&nlen);
- mystmt(hstmt,rc);
-
- fprintf(stdout," total rows deleted: %d\n",nlen);
- myassert(nlen == 4);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_sp_del_all");
- mystmt(hstmt,rc);
-
- my_assert(0 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 1);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_setpos_upd_decimal)
-{
- SQLRETURN rc;
- SQLINTEGER rec;
-
- tmysql_exec(hstmt,"drop table t_setpos_upd_decimal");
- rc = tmysql_exec(hstmt,"create table t_setpos_upd_decimal(record decimal(3,0),\
- num1 float, num2 decimal(6,0),num3 decimal(10,3))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_setpos_upd_decimal
values(001,12.3,134,0.100)");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- /* MS SQL Server to work...*/
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
- SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
-
- rc = tmysql_exec(hstmt,"select record from t_setpos_upd_decimal");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&rec,100,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout," row1: %d",rec);
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rec = 100;
-
- rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt_r(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_setpos_upd_decimal");
- mystmt(hstmt,rc);
-
- myresult(hstmt);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(tmysql_specialcols)
-{
- SQLRETURN rc;
-
- tmysql_exec(hstmt,"drop table tmysql_specialcols");
- rc = tmysql_exec(hstmt,"create table tmysql_specialcols(col1 int primary key, col2
varchar(30), col3 int)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"create index tmysql_ind1 on tmysql_specialcols(col1)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into tmysql_specialcols values(100,'venu',1)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into tmysql_specialcols values(200,'MySQL',2)");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from tmysql_specialcols");
- mystmt(hstmt,rc);
-
- myresult(hstmt);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSpecialColumns(hstmt,
- SQL_BEST_ROWID,
- NULL,0,
- NULL,0,
- "tmysql_specialcols",SQL_NTS,
- SQL_SCOPE_SESSION,
- SQL_NULLABLE);
- mystmt(hstmt,rc);
-
- myresult(hstmt);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"drop table tmysql_specialcols");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_max_select)
-{
- SQLRETURN rc;
- SQLCHAR szData[255];
- SQLINTEGER i;
-
- tmysql_exec(hstmt,"drop table t_max_select");
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"create table t_max_select(col1 int ,col2 varchar(30))");
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_max_select values(?,?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
- SQL_INTEGER,0,0,&i,0,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,
- SQL_CHAR,0,0,szData,sizeof(szData),NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout," inserting 1000 rows, it will take some time\n");
- for(i = 1; i <= 1000; i++)
- {
- fprintf(stdout," \r %d", i);
- sprintf((char *)szData,"MySQL%d",i);
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
- }
- fprintf(stdout,"\n");
-
- rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_max_select");
- mystmt(hstmt,rc);
-
- my_assert( 1000 == myrowcount(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_getcursor)
-{
- SQLRETURN rc;
- SQLHSTMT hstmt1,hstmt2,hstmt3;
- SQLCHAR curname[50];
- SQLSMALLINT nlen;
-
- rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt1);
- mycon(hdbc, rc);
- rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt2);
- mycon(hdbc, rc);
- rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt3);
- mycon(hdbc, rc);
-
- rc = SQLGetCursorName(hstmt1,curname,50,&nlen);
- if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
- {
- fprintf(stdout,"default cursor name : %s(%d)\n",curname,nlen);
- myassert(nlen == 8);
- myassert(!strcmp(curname,"SQL_CUR0"));
-
- rc = SQLGetCursorName(hstmt3,curname,50,&nlen);
- mystmt(hstmt1,rc);
- fprintf(stdout,"default cursor name : %s(%d)\n",curname,nlen);
-
- rc = SQLGetCursorName(hstmt1,curname,4,&nlen);
- mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc);
- fprintf(stdout,"truncated cursor name: %s(%d)\n",curname,nlen);
- myassert(nlen == 8);
- myassert(!strcmp(curname,"SQL"));
-
- rc = SQLGetCursorName(hstmt1,curname,0,&nlen);
- mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc);
- fprintf(stdout,"untouched cursor name: %s(%d)\n",curname,nlen);
- myassert(nlen == 8);
-
- rc = SQLGetCursorName(hstmt1,curname,8,&nlen);
- mystmt_err(hstmt1,rc == SQL_SUCCESS_WITH_INFO, rc);
- fprintf(stdout,"truncated cursor name: %s(%d)\n",curname,nlen);
- myassert(nlen == 8);
- myassert(!strcmp(curname,"SQL_CUR"));
-
- rc = SQLGetCursorName(hstmt1,curname,9,&nlen);
- mystmt(hstmt1,rc);
- fprintf(stdout,"full cursor name : %s(%d)\n",curname,nlen);
- myassert(nlen == 8);
- myassert(!strcmp(curname,"SQL_CUR0"));
- }
-
- rc = SQLSetCursorName(hstmt1,"venucur123",7);
- mystmt(hstmt1,rc);
-
- rc = SQLGetCursorName(hstmt1,curname,8,&nlen);
- mystmt(hstmt1,rc);
- fprintf(stdout,"full setcursor name : %s(%d)\n",curname,nlen);
- myassert(nlen == 7);
- myassert(!strcmp(curname,"venucur"));
-
- rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
- mystmt(hstmt1,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_getcursor1)
-{
- SQLRETURN rc;
- SQLHSTMT hstmt1;
- SQLCHAR curname[50];
- SQLSMALLINT nlen,index;;
-
- for(index=0; index < 100; index++)
- {
- rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt1);
- mycon(hdbc, rc);
-
- rc = SQLGetCursorName(hstmt1,curname,50,&nlen);
- if (rc != SQL_SUCCESS)
- break;
- fprintf(stdout,"%s(%d) \n",curname,nlen);
-
- rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);
- mystmt(hstmt1,rc);
- }
-
- return OK;
-}
-
-
-DECLARE_TEST(t_gettypeinfo)
-{
- SQLRETURN rc;
- SQLSMALLINT pccol;
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLGetTypeInfo(hstmt,SQL_ALL_TYPES);
- mystmt(hstmt,rc);
-
- rc = SQLNumResultCols(hstmt,&pccol);
- mystmt(hstmt,rc);
- fprintf(stdout,"total columns: %d\n",pccol);
- myassert(pccol == 19);
- myresult(hstmt);
-
- rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_getinfo)
-{
- SQLRETURN rc;
- SQLCHAR rgbValue[100];
- SQLSMALLINT pcbInfo;
-
- rc = SQLGetInfo(hdbc,SQL_DRIVER_ODBC_VER,rgbValue,100,&pcbInfo);
- mycon(hdbc,rc);
- fprintf(stdout,"SQL_DRIVER_ODBC_VER: %s(%d)\n",rgbValue,pcbInfo);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_stmt_attr_status)
-{
- SQLRETURN rc;
- SQLUSMALLINT rowStatusPtr[3];
- SQLUINTEGER rowsFetchedPtr;
-
- tmysql_exec(hstmt,"drop table t_stmtstatus");
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"create table t_stmtstatus(id int, name char(20))");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_stmtstatus values(10,'data1')");
- mystmt(hstmt,rc);
- rc = tmysql_exec(hstmt,"insert into t_stmtstatus values(20,'data2')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc =
SQLSetStmtAttr(hstmt,SQL_ATTR_CURSOR_SCROLLABLE,(SQLPOINTER)SQL_NONSCROLLABLE,0);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_stmtstatus");
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,&rowsFetchedPtr,0);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_STATUS_PTR,&rowStatusPtr,0);
- mystmt(hstmt,rc);
-
- rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,2);
- mystmt_err(hstmt,rc == SQL_ERROR,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_CURSOR_SCROLLABLE,(SQLPOINTER)SQL_SCROLLABLE,0);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_stmtstatus");
- mystmt(hstmt,rc);
-
- rc = SQLFetchScroll(hstmt,SQL_FETCH_ABSOLUTE,2);
- mystmt(hstmt,rc);
-
- printMessage("total rows fetched: %d\n",rowsFetchedPtr);
- printMessage("row 0 status : %d\n",rowStatusPtr[0]);
- printMessage("row 1 status : %d\n",rowStatusPtr[1]);
- printMessage("row 2 status : %d\n",rowStatusPtr[2]);
- myassert(rowsFetchedPtr == 1);
- myassert(rowStatusPtr[0] == 0);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,(SQLPOINTER)0,0);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_STATUS_PTR,(SQLPOINTER)0,0);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_max_rows)
-{
- SQLRETURN rc;
- SQLUINTEGER i;
-
- tmysql_exec(hstmt,"drop table t_max_rows");
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"create table t_max_rows(id int)");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_max_rows values(?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc =
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_ULONG,SQL_INTEGER,0,0,&i,0,NULL);
- mystmt(hstmt,rc);
-
- for(i=0; i < 10; i++)
- {
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
- }
-
- SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)0,0);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select count(*) from t_max_rows");
- mystmt(hstmt,rc);
- myassert( 1 == myresult(hstmt) );
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = tmysql_exec(hstmt,"select * from t_max_rows");
- mystmt(hstmt,rc);
- myassert( 10 == myresult(hstmt) );
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- /* MAX rows through connection attribute */
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)5,0);
- mystmt(hstmt,rc);
-
- /*
- This query includes leading spaces to act as a regression test
- for Bug #6609: SQL_ATTR_MAX_ROWS and leading spaces in query result in
- truncating end of query.
- */
- rc = tmysql_exec(hstmt," select * from t_max_rows");
- mystmt(hstmt,rc);
- myassert( 5 == myrowcount(hstmt));
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)15,0);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_max_rows");
- mystmt(hstmt,rc);
- myassert( 10 == myrowcount(hstmt));
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_MAX_ROWS,(SQLPOINTER)0,0);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_max_rows");
- mystmt(hstmt,rc);
- myassert( 10 == myrowcount(hstmt));
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_prepare)
-{
- SQLRETURN rc;
- SQLINTEGER nidata= 200, nodata;
- SQLLEN nlen;
- char szodata[20],szidata[20]="MySQL";
- short pccol;
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- tmysql_exec(hstmt,"drop table t_prepare");
-
- rc = tmysql_exec(hstmt,"create table t_prepare(col1 int primary key, col2
varchar(30), col3 set(\"one\", \"two\"))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_prepare values(100,'venu','one')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_prepare values(200,'MySQL','two')");
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"select * from t_prepare where col2 = ? AND col1 = ?",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLNumResultCols(hstmt,&pccol);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nodata,0,&nlen);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szodata,200,&nlen);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_CHAR,SQL_VARCHAR,
- 0,0,szidata,20,&nlen);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER,
- 0,0,&nidata,20,NULL);
- mystmt(hstmt,rc);
-
- nlen= strlen(szidata);
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- fprintf(stdout," outdata: %d, %s(%d)\n", nodata,szodata,nlen);
- my_assert(nodata == 200);
-
- rc = SQLFetch(hstmt);
- my_assert(rc == SQL_NO_DATA_FOUND);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_prepare1)
-{
- SQLRETURN rc;
- SQLINTEGER nidata= 1000;
-
- tmysql_exec(hstmt,"drop table t_prepare1");
-
- rc = tmysql_exec(hstmt,"create table t_prepare1(col1 int primary key, col2
varchar(30))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_prepare1 values(100,'venu')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_prepare1 values(200,'MySQL')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_prepare(hstmt,"insert into t_prepare1(col1) values(?)");
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER,
- 0,0,&nidata,0,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"SELECT * FROM t_prepare1",SQL_NTS);
- mystmt(hstmt,rc);
-
- myassert(3 == myresult(hstmt));/* unless prepare is supported..*/
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-static void test_diagrec(SQLSMALLINT HandleType,SQLHANDLE Handle,
- SQLSMALLINT RecNumber, SQLSMALLINT BufferLength,
- SQLRETURN return_value_expected)
-{
- SQLRETURN rc;
- SQLCHAR sqlstate[6]={0};
- SQLCHAR message[255]={0};
- SQLINTEGER native_err=0;
- SQLSMALLINT msglen=0;
-
- rc = SQLGetDiagRec(HandleType,Handle,RecNumber,
- (char *)&sqlstate,&native_err,
- (char *)&message,BufferLength,&msglen);
-
- fprintf(stdout,"%d@%s(%d)\n",rc,message,msglen);
- myassert(return_value_expected == rc);
-}
-
-
-DECLARE_TEST(t_diagrec)
-{
- SQLRETURN rc;
-
- fprintf(stdout," ** SQL_HANDLE_STMT ** \n");
-
- rc = SQLExecDirect(hstmt,"DROP TABLE ODBC3_NON_EXISTANTi_TAB",SQL_NTS);
- myassert(rc == SQL_ERROR);
-
- test_diagrec(SQL_HANDLE_STMT,hstmt,2,0,SQL_NO_DATA_FOUND);
- test_diagrec(SQL_HANDLE_STMT,hstmt,1,255,SQL_SUCCESS);
- test_diagrec(SQL_HANDLE_STMT,hstmt,1,0,SQL_SUCCESS_WITH_INFO);
- test_diagrec(SQL_HANDLE_STMT,hstmt,1,10,SQL_SUCCESS_WITH_INFO);
- test_diagrec(SQL_HANDLE_STMT,hstmt,1,-1,SQL_ERROR);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_acc_crash)
-{
- SQLRETURN rc;
- SQLINTEGER id;
- SQLCHAR name[20], data[30];
- SQL_TIMESTAMP_STRUCT ts;
-
- tmysql_exec(hstmt,"drop table if exists t_acc_crash");
- rc = tmysql_exec(hstmt,"create table t_acc_crash(id int(11) not null auto_increment,\
- name char(20),\
- ts date,\
- primary key(id))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_acc_crash(id,name) values(1,'venu')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_acc_crash(name) values('monty')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_acc_crash(name) values('mysql')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtOption(hstmt, SQL_ROWSET_SIZE, 1);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_acc_crash order by id asc");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,2,SQL_C_CHAR,(SQLCHAR *)&name,20,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,3,SQL_C_DATE,&ts,30,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLFetchScroll(hstmt,SQL_FETCH_FIRST,1);
- mystmt(hstmt,rc);
-
- id = 9;
- strcpy(name,"updated");
- ts.year=2010;ts.month=9;ts.day=25;
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_acc_crash order by id desc");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- my_assert(9 == my_fetch_int(hstmt,1));
- my_assert(!strcmp("updated", my_fetch_str(hstmt,data,2)));
- my_assert(!strcmp("2010-09-25", my_fetch_str(hstmt,data,3)));
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_msdev_bug)
-{
- SQLRETURN rc;
- SQLCHAR catalog[30];
- SQLLEN len;
-
- rc = SQLGetConnectOption(hdbc,SQL_CURRENT_QUALIFIER,&catalog);
- mycon(hdbc,rc);
- fprintf(stdout," SQL_CURRENT_QUALIFIER:%s\n",catalog);
-
- rc = SQLGetConnectAttr(hdbc,SQL_ATTR_CURRENT_CATALOG,&catalog,30,&len);
- mycon(hdbc,rc);
- fprintf(stdout," SQL_ATTR_CURRENT_CATRALOG:%s(%d)\n",catalog,len);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_setpos_position)
-{
- SQLRETURN rc;
- SQLINTEGER nData= 500;
- SQLLEN nlen;
- SQLCHAR szData[255]={0};
- SQLUINTEGER pcrow;
-
- tmysql_exec(hstmt,"drop table t_setpos_position");
- rc = tmysql_exec(hstmt,"create table t_setpos_position(col1 int, col2 varchar(30))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_setpos_position values(100,'MySQL1')");
- mystmt(hstmt,rc);
- rc = tmysql_exec(hstmt,"insert into t_setpos_position values(200,'MySQL2')");
- mystmt(hstmt,rc);
- rc = tmysql_exec(hstmt,"insert into t_setpos_position values(300,'MySQL3')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSetCursorName(hstmt,"venu",SQL_NTS);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
- SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
-
- rc = tmysql_exec(hstmt,"select * from t_setpos_position");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout," pcrow:%d\n",pcrow);
- fprintf(stdout," row1:%d,%s\n",nData,szData);
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- nData = 1000;
- strcpy((char *)szData , "updated");
-
- rc = SQLSetPos(hstmt,3,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt_err(hstmt,rc == SQL_ERROR,rc);
-
- rc = SQLSetPos(hstmt,2,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt_err(hstmt,rc == SQL_ERROR,rc);
-
- rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLRowCount(hstmt,&nlen);
- mystmt(hstmt,rc);
-
- fprintf(stdout," rows affected:%d\n",nlen);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_setpos_position");
- mystmt(hstmt,rc);
-
- myresult(hstmt);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"DELETE FROM t_setpos_position WHERE col2 =
'updated'",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLRowCount(hstmt,&nlen);
- mystmt(hstmt,rc);
- fprintf(stdout,"total rows affceted:%d\n",nlen);
- my_assert(nlen == 1);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_setpos_position");
- mystmt(hstmt,rc);
-
- my_assert(2 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_pos_column_ignore)
-{
- SQLRETURN rc;
- SQLHSTMT hstmt1;
- SQLCHAR szData[]="updated";
- SQLINTEGER nData;
- SQLLEN pcbValue, nlen, pcrow;
-
- rc = SQLAllocStmt(hdbc,&hstmt1);
- mycon(hdbc,rc);
-
- tmysql_exec(hstmt,"drop table t_pos_column_ignore");
- rc = tmysql_exec(hstmt,"create table t_pos_column_ignore(col1 int NOT NULL primary
key, col2 varchar(30))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_column_ignore values(10,'venu')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_column_ignore values(100,'MySQL')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
-
- /* ignore all columns */
- rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,&pcbValue);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&pcbValue);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- nData = 99;
- strcpy((char *)szData , "updated");
-
- pcbValue = SQL_COLUMN_IGNORE;
- rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLRowCount(hstmt,&nlen);
- mystmt(hstmt,rc);
-
- fprintf(stdout," rows affected:%d\n",nlen);
- myassert(nlen == 0);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- SQLFreeStmt(hstmt1,SQL_CLOSE);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
- {
- SQLCHAR szData[20];
- my_assert(10 == my_fetch_int(hstmt,1));
- my_assert(!strcmp("venu",my_fetch_str(hstmt,szData,2)));
- }
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- /* ignore only one column */
-
- rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&nData,100,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,2,SQL_C_CHAR,szData,100,&pcbValue);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,&pcrow,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- nData = 99;
- strcpy((char *)szData , "updated");
-
- pcbValue = SQL_COLUMN_IGNORE;
- rc = SQLSetPos(hstmt,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLRowCount(hstmt,&nlen);
- mystmt(hstmt,rc);
-
- fprintf(stdout," rows affected:%d\n",nlen);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- SQLFreeStmt(hstmt1,SQL_CLOSE);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_column_ignore order by col1 asc");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
- {
- SQLCHAR szData[20];
- my_assert(99 == my_fetch_int(hstmt,1));
- my_assert(!strcmp("venu",my_fetch_str(hstmt,szData,2)));
- }
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt1,SQL_DROP);
- mystmt(hstmt1,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_longlong1)
-{
- SQLRETURN rc;
- SQLINTEGER session_id, ctn;
-
- tmysql_exec(hstmt,"drop table t_longlong");
- rc = tmysql_exec(hstmt,"create table t_longlong (\
- session_id bigint not null,\
- ctn bigint not null)");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0);
-
- rc = SQLPrepare(hstmt,"insert into t_longlong values (?,?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_UBIGINT,
- SQL_BIGINT, 20, 0, &session_id, 20, NULL );
-
- rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_UBIGINT,
- SQL_BIGINT, 20, 0, &ctn, 20, NULL );
-
- for (session_id=50; session_id < 100; session_id++)
- {
- ctn += session_id;
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
- }
-
- rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_longlong");
- mystmt(hstmt,rc);
-
- my_assert( 50 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_time)
-{
- SQLRETURN rc;
- SQL_TIME_STRUCT tm;
- SQLCHAR str[20];
-
- tmysql_exec(hstmt,"drop table t_time");
- rc = tmysql_exec(hstmt,"create table t_time(tm time, ts timestamp(14))");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_time values (?,?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_TIME,
- SQL_TIME, 0, 0, &tm, 0, NULL );
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_TIME,
- SQL_TIMESTAMP, 0, 0, &tm, 15, NULL );
- mystmt(hstmt,rc);
-
- tm.hour = 20;
- tm.minute = 59;
- tm.second = 45;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLExecDirect(hstmt,"select tm from t_time",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,100,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"time:%s\n",str);
- my_assert(strcmp(str,"20:59:45")==0);
-
- rc = SQLFetch(hstmt);
- my_assert(rc == SQL_NO_DATA_FOUND);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_numeric)
-{
- SQLRETURN rc;
- SQL_NUMERIC_STRUCT num;
-
- tmysql_exec(hstmt,"drop table t_decimal");
- rc = tmysql_exec(hstmt,"create table t_decimal(d1 decimal(10,6))");
- mystmt(hstmt,rc);
- rc = tmysql_exec(hstmt,"insert into t_decimal values(10.2)");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_decimal values (?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_NUMERIC,
- SQL_DECIMAL, 10, 4, &num, 0, NULL );
- mystmt_r(hstmt,rc);
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLPrepare(hstmt,"insert into t_decimal values (?),(?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG,
- SQL_DECIMAL, 10, 4, &rc, 0, NULL );
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_NUMERIC,
- SQL_DECIMAL, 10, 4, &num, 0, NULL );
- mystmt_r(hstmt,rc);
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
-
- rc = SQLBindCol( hstmt, 1, SQL_C_NUMERIC, &num, 0, NULL );
- mystmt_r(hstmt,rc);
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
- SQLFreeStmt(hstmt, SQL_UNBIND);
-
- rc = SQLExecDirect(hstmt, "select * from t_decimal",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData( hstmt, 1, SQL_C_NUMERIC, &num, 0, NULL );
- mystmt_r(hstmt,rc);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_decimal)
-{
- SQLCHAR str[20],s_data[]="189.4567";
- SQLDOUBLE d_data=189.4567;
- SQLINTEGER i_data=189, l_data=-23;
- SQLRETURN rc;
-
- tmysql_exec(hstmt,"drop table t_decimal");
- rc = tmysql_exec(hstmt,"create table t_decimal(d1 decimal(10,6))");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_decimal values (?),(?),(?),(?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_DOUBLE,
- SQL_DECIMAL, 10, 4, &d_data, 0, NULL );
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG,
- SQL_DECIMAL, 10, 4, &i_data, 0, NULL );
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,
- SQL_DECIMAL, 10, 4, &s_data, 9, NULL );
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter( hstmt, 4, SQL_PARAM_INPUT, SQL_C_LONG,
- SQL_DECIMAL, 10, 4, &l_data, 0, NULL );
- mystmt(hstmt,rc);
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLExecDirect(hstmt,"select d1 from t_decimal",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"decimal(SQL_C_DOUBLE) : %s\n",str);
- my_assert(strncmp(str,"189.4567",8)==0);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"decimal(SQL_C_INTEGER): %s\n",str);
- my_assert(strncmp(str,"189.0000",5)==0);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"decimal(SQL_C_CHAR) : %s\n",str);
- my_assert(strncmp(str,"189.4567",8)==0);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,&str,19,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"decimal(SQL_C_LONG) : %s\n",str);
- my_assert(strncmp(str,"-23.00",6)==0);
-
- rc = SQLFetch(hstmt);
- my_assert(rc == SQL_NO_DATA_FOUND);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_warning)
-{
- SQLRETURN rc;
- SQLCHAR szData[20];
- SQLINTEGER pcbValue;
-
- tmysql_exec(hstmt,"drop table t_warning");
- rc = tmysql_exec(hstmt,"create table t_warning(col2 char(20))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_warning values('venu anuganti')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
-
- /* ignore all columns */
- rc = tmysql_exec(hstmt,"select * from t_warning");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt, rc);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
- mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc);
- fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
- mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc);
- fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
- mystmt_err(hstmt, rc == SQL_SUCCESS_WITH_INFO, rc);
- fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
-
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n",szData,pcbValue);
-
- rc = SQLFetch(hstmt);
- mystmt_err(hstmt, rc == SQL_NO_DATA_FOUND, rc);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_multistep)
-{
- SQLRETURN rc;
- SQLCHAR szData[150];
- SQLLEN pcbValue;
- SQLINTEGER id;
-
- tmysql_exec(hstmt,"drop table t_multistep");
- rc = tmysql_exec(hstmt,"create table t_multistep(col1 int,col2 varchar(200))");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_multistep values(10,'MySQL - Open Source
Database')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_multistep");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
- fprintf(stdout,"id: %ld\n",id);
- myassert(id == 10);
-
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
- myassert(pcbValue == 28);
-
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
- myassert(pcbValue == 28);
-
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
- myassert(pcbValue == 28);
-
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,szData,0,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
- myassert(pcbValue == 28);
-
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"length: %ld\n", pcbValue);
- myassert(pcbValue == 28);
-
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,10,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 28);
- myassert(strcmp(szData,"MySQL - O") == 0);
-
- pcbValue= 0;
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,5,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 19);
- myassert(strcmp(szData,"pen ") == 0);
-
- pcbValue= 0;
- szData[0]='A';
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 15);
- myassert(szData[0] == 'A');
-
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,pcbValue+1,&pcbValue);
- mystmt(hstmt,rc);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 15);
- myassert(strcmp(szData,"Source Database") == 0);
-
- pcbValue= 99;
- szData[0]='A';
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,szData,0,&pcbValue);
- myassert(rc == SQL_SUCCESS_WITH_INFO);
- fprintf(stdout,"data : %s (%ld)\n",szData,pcbValue);
- myassert(pcbValue == 0);
- myassert(szData[0] == 'A');
-
-
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA_FOUND);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-}
-
-
-DECLARE_TEST(t_zerolength)
-{
- SQLRETURN rc;
- SQLCHAR szData[100], bData[100], bData1[100];
- SQLLEN pcbValue,pcbValue1,pcbValue2;
-
- tmysql_exec(hstmt,"drop table t_zerolength");
- rc = tmysql_exec(hstmt,"create table t_zerolength(str varchar(20), bin varbinary(20),
blb blob)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_zerolength values('','','')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_zerolength values('venu','mysql','monty')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_KEYSET_DRIVEN,
0);
-
- rc = tmysql_exec(hstmt,"select * from t_zerolength");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- pcbValue= pcbValue1= 99;
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"length: %d\n", pcbValue);
- myassert(pcbValue == 0);
-
- bData[0]=bData[1]='z';
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"length: %d\n", pcbValue1);
- myassert(pcbValue1 == 0);
- myassert(bData[0] == 'z');
- myassert(bData[1] == 'z');
-
- bData1[0]=bData1[1]='z';
- rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"length: %d\n", pcbValue2);
- myassert(pcbValue2 == 0);
- myassert(bData1[0] == 'z');
- myassert(bData1[1] == 'z');
-
- pcbValue= pcbValue1= 99;
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 0);
- myassert(szData[0] == '\0');
-
- bData[0]=bData[1]='z';
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
- myassert(pcbValue1 == 0);
- myassert(bData[0]== '\0');
-
- bData1[0]=bData1[1]='z';
- rc = SQLGetData(hstmt,3,SQL_C_CHAR,bData1,1,&pcbValue2);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", bData1, pcbValue2);
- myassert(pcbValue2 == 0);
- myassert(bData1[0] == '\0');
- myassert(bData1[1] == 'z');
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- pcbValue= pcbValue1= 99;
- szData[0]= bData[0]= 'z';
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,0,&pcbValue);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"length: %d\n", pcbValue);
- myassert(pcbValue == 4);
- myassert(szData[0] == 'z');
-
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,0,&pcbValue1);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"length: %d\n", pcbValue1);
- myassert(pcbValue1 == 5);
- myassert(bData[0] == 'z');
-
- bData[0]=bData1[1]='z';
- rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,0,&pcbValue2);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"length: %d\n", pcbValue2);
- myassert(pcbValue2 == 5);
-
- pcbValue= pcbValue1= 99;
- szData[0]= szData[1]= bData[0]= bData[1]= 'z';
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,1,&pcbValue);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData,pcbValue);
- myassert(pcbValue == 4);
- myassert(szData[0] == '\0');
-
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,1,&pcbValue1);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data; %s, length: %d\n", bData, pcbValue1);
- myassert(pcbValue1 == 5);
- myassert(bData[0] == 'm');
-
- bData[0]=bData1[1]='z';
- rc = SQLGetData(hstmt,3,SQL_C_BINARY,bData1,1,&pcbValue2);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"length: %d\n", pcbValue2);
- myassert(pcbValue2 == 5);
- myassert(bData1[0] == 'm');
- myassert(bData1[1] == 'z');
-
- pcbValue= pcbValue1= 99;
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,4,&pcbValue);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 4);
- myassert(strcmp(szData,"ven")==0);
-
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,4,&pcbValue1);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
- myassert(pcbValue1 == 5);
- myassert(strncmp(bData,"mysq",4)==0);
-
- pcbValue= pcbValue1= 99;
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,szData,5,&pcbValue);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 4);
- myassert(strcmp(szData,"venu")==0);
-
- rc = SQLGetData(hstmt,2,SQL_C_BINARY,bData,5,&pcbValue1);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", bData, pcbValue1);
- myassert(pcbValue1 == 5);
- myassert(strncmp(bData,"mysql",5)==0);
-
- szData[0]= 'z';
- rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,0,&pcbValue);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 5 || pcbValue == 10);
- myassert(szData[0] == 'z');
-
-#if TO_BE_FIXED_IN_DRIVER
- szData[0]=szData[1]='z';
- rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,1,&pcbValue);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 10);
- myassert(szData[0] == 'm');
- myassert(szData[1] == 'z');
-
- rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,4,&pcbValue);
- mystmt_err(hstmt,rc == SQL_SUCCESS_WITH_INFO,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 10);
- myassert(strncmp(szData,"mont",4) == 0);
-
- rc = SQLGetData(hstmt,3,SQL_C_CHAR,szData,5,&pcbValue);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s, length: %d\n", szData, pcbValue);
- myassert(pcbValue == 10);
- myassert(strncmp(szData,"monty",5) == 0);
-#endif
-
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA_FOUND);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_pos_datetime_delete)
-{
- SQLRETURN rc;
- SQLHSTMT hstmt1;
- SQLINTEGER int_data;
- SQLLEN row_count, cur_type;
-
- rc = SQLAllocStmt(hdbc,&hstmt1);
- mycon(hdbc,rc);
-
- tmysql_exec(hstmt,"drop table t_pos_delete");
- rc = tmysql_exec(hstmt,"create table t_pos_delete(id int not null default '0',\
- name varchar(20) NOT NULL default
'',\
- created datetime NOT NULL default
'2000-01-01')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete values(1,'venu','2003-02-10
14:45:39')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete(name) values('')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(2)");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_delete");
- mystmt(hstmt,rc);
-
- my_assert(3 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
- SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_TRY_UNIQUE);
-
- SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
- SQLSetStmtOption(hstmt1,SQL_SIMULATE_CURSOR,SQL_SC_TRY_UNIQUE);
-
- rc = SQLSetCursorName(hstmt,"venu_cur",8);
- mystmt(hstmt,rc);
-
- rc = SQLGetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, &cur_type, 0, NULL);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_delete");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&int_data,0,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"current_row: %d\n", int_data);
- myassert(int_data == 1);
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
- mystmt(hstmt1,rc);
-
- rc = SQLRowCount(hstmt1,&row_count);
- mystmt(hstmt1,rc);
- fprintf(stdout, "rows affected: %d\n", row_count);
- myassert(row_count == 1);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"current_row: %d\n", int_data);
- if (cur_type == SQL_CURSOR_DYNAMIC)
- myassert(int_data == 2);
- else
- myassert(int_data == 0);
-
- /*rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- mystmt(hstmt,rc);*/
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
- mystmt(hstmt1,rc);
-
- rc = SQLRowCount(hstmt1,&row_count);
- mystmt(hstmt1,rc);
- fprintf(stdout, "rows affected: %d\n", row_count);
- myassert(row_count == 1);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
- SQLFreeStmt(hstmt1,SQL_CLOSE);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_delete");
- mystmt(hstmt,rc);
-
- my_assert(1 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- if (cur_type == SQL_CURSOR_DYNAMIC)
- verify_col_data(hstmt,"t_pos_delete","id","0");
- else
- verify_col_data(hstmt,"t_pos_delete","id","2");
-
- rc = SQLFreeStmt(hstmt1,SQL_DROP);
- mystmt(hstmt1,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_pos_datetime_delete1)
-{
- SQLRETURN rc;
- SQLHSTMT hstmt1;
- SQLINTEGER int_data;
- SQLLEN row_count, cur_type;
-
- rc = SQLAllocStmt(hdbc,&hstmt1);
- mycon(hdbc,rc);
-
- tmysql_exec(hstmt,"drop table t_pos_delete");
- rc = tmysql_exec(hstmt,"create table t_pos_delete(id int not null default '0',\
- name varchar(20) NOT NULL default
'',\
- created datetime NOT NULL default
'2000-01-01')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete values(1,'venu','2003-02-10
14:45:39')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete(name) values('')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(2)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(3)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(4)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"insert into t_pos_delete(id) values(5)");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_delete");
- mystmt(hstmt,rc);
-
- my_assert(6 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
- SQLSetStmtOption(hstmt,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
-
- SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
- SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_DYNAMIC, 0);
- SQLSetStmtOption(hstmt1,SQL_SIMULATE_CURSOR,SQL_SC_NON_UNIQUE);
-
- rc = SQLSetCursorName(hstmt,"venu_cur",8);
- mystmt(hstmt,rc);
-
- rc = SQLGetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, &cur_type, 0, NULL);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_delete");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&int_data,0,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,3,NULL,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"current_row: %d\n", int_data);
- myassert(int_data == 2);
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
- mystmt(hstmt1,rc);
-
- rc = SQLRowCount(hstmt1,&row_count);
- mystmt(hstmt1,rc);
- fprintf(stdout, "rows affected: %d\n", row_count);
- myassert(row_count == 1);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"current_row: %d\n", int_data);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- mystmt(hstmt,rc);
- fprintf(stdout,"current_row: %d\n", int_data);
-
- /*rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- mystmt(hstmt,rc);*/
-
- rc = SQLSetPos(hstmt,1,SQL_POSITION,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt1,"DELETE FROM t_pos_delete WHERE CURRENT OF
venu_cur",SQL_NTS);
- mystmt(hstmt1,rc);
-
- rc = SQLRowCount(hstmt1,&row_count);
- mystmt(hstmt1,rc);
- fprintf(stdout, "rows affected: %d\n", row_count);
- myassert(row_count == 1);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
- SQLFreeStmt(hstmt1,SQL_CLOSE);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_pos_delete");
- mystmt(hstmt,rc);
-
- my_assert(4 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt1,SQL_DROP);
- mystmt(hstmt1,rc);
-
- return OK;
-}
-
-
-#define TEST_ODBC_TEXT_LEN 3000
-DECLARE_TEST(t_text_fetch)
-{
- SQLRETURN rc;
- SQLINTEGER i;
- SQLLEN row_count, length;
- SQLCHAR data[TEST_ODBC_TEXT_LEN+1];
-
- SQLExecDirect(hstmt,"drop table t_text_fetch",SQL_NTS);
- rc = SQLExecDirect(hstmt,"create table t_text_fetch(t1 tinytext, \
- t2 text, \
- t3 mediumtext, \
- t4 longtext)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_text_fetch values(?,?,?,?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
- 0,0,(char *)data, TEST_ODBC_TEXT_LEN/3, NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
- 0,0,(char *)data, TEST_ODBC_TEXT_LEN/2, NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
- 0,0,(char *)data,
- (SQLINTEGER)(TEST_ODBC_TEXT_LEN/1.5), NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
- 0,0,(char *)data, TEST_ODBC_TEXT_LEN-1, NULL);
- mystmt(hstmt,rc);
-
- memset(data,'A',TEST_ODBC_TEXT_LEN);
- data[TEST_ODBC_TEXT_LEN]='\0';
-
- for (i=0; i < 10; i++)
- {
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
- }
-
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"SELECT * FROM t_text_fetch",SQL_NTS);
- mystmt(hstmt,rc);
-
- row_count= 0;
- rc = SQLFetch(hstmt);
- while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
- {
- fprintf(stdout,"row '%d' (lengths: \n", row_count);
- rc = SQLGetData(hstmt,1,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
- mystmt(hstmt,rc);
- fprintf(stdout,"%d", length);
- myassert(length == 255);
-
- rc = SQLGetData(hstmt,2,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
- mystmt(hstmt,rc);
- fprintf(stdout,",%d", length);
- myassert(length == TEST_ODBC_TEXT_LEN/2);
-
- rc = SQLGetData(hstmt,3,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
- mystmt(hstmt,rc);
- fprintf(stdout,",%d", length);
- myassert(length == (SQLINTEGER)(TEST_ODBC_TEXT_LEN/1.5));
-
- rc = SQLGetData(hstmt,4,SQL_C_CHAR,(char *)data,TEST_ODBC_TEXT_LEN,&length);
- mystmt(hstmt,rc);
- fprintf(stdout,",%d)", length);
- myassert(length == TEST_ODBC_TEXT_LEN-1);
- row_count++;
-
- rc = SQLFetch(hstmt);
- }
- fprintf(stdout,"total rows: %d\n", row_count);
- myassert(row_count == i);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"DROP TABLE t_text_fetch",SQL_NTS);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-/* To test SQLColumns misc case */
-DECLARE_TEST(t_columns)
-{
- SQLSMALLINT NumPrecRadix, DataType, Nullable, DecimalDigits;
- SQLLEN cbColumnSize, cbDecimalDigits, cbNumPrecRadix,
- cbDatabaseName, cbDataType, cbNullable;
- SQLRETURN rc;
- SQLUINTEGER ColumnSize, i;
- SQLUINTEGER ColumnCount= 7;
- SQLCHAR ColumnName[MAX_NAME_LEN], DatabaseName[MAX_NAME_LEN];
- SQLINTEGER Values[7][5][2]=
- {
- { {5,2}, {6,4}, {0,2}, {10,2}, {1,2}},
- { {1,2}, {5,4}, {0,-1}, {10,-1}, {1,2}},
- { {12,2}, {20,4}, {0,-1}, {10,-1}, {0,2}},
- { {3,2}, {10,4}, {2,2}, {10,2}, {1,2}},
- { {-6,2}, {4,4}, {0,2}, {10,2}, {0,2}},
- { {4,2}, {11,4}, {0,2}, {10,2}, {0,2}},
- { {-6,2}, {4,4}, {0,2}, {10,2}, {0,2}}
- };
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
- SQLExecDirect(hstmt,"DROP TABLE test_column",SQL_NTS);
-
- rc = SQLExecDirect(hstmt,"CREATE TABLE test_column(col0 smallint, \
- col1 char(5),\
- col2 varchar(20) not null,\
- col3 decimal(10,2),\
- col4 tinyint not null,\
- col5 integer primary key,\
- col6 tinyint not null unique
auto_increment)",SQL_NTS);
- mystmt(hstmt,rc);
-
- mystmt(hstmt,rc);
-
- rc= SQLSetStmtAttr(hstmt, SQL_ATTR_METADATA_ID,
- (SQLPOINTER)SQL_FALSE, SQL_IS_UINTEGER);
- mystmt(hstmt,rc);
-
- SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0);
-
- rc= SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG,(SQLCHAR *)DatabaseName,
- MAX_NAME_LEN, &cbDatabaseName);/* Current Catalog */
- mycon(hdbc,rc);
-
- for (i=0; i< ColumnCount; i++)
- {
- sprintf(ColumnName,"col%d",i);
-
- rc= SQLColumns(hstmt,
- (SQLCHAR *)DatabaseName, (SQLUSMALLINT)cbDatabaseName,
- SQL_NULL_HANDLE, 0,
- (SQLCHAR *)"test_column", SQL_NTS,
- (SQLCHAR *)ColumnName, SQL_NTS);
- mystmt(hstmt,rc);
-
- /* 5 -- Data type */
- rc= SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType);
- mystmt(hstmt,rc);
-
- /* 7 -- Column Size */
- rc= SQLBindCol(hstmt, 7, SQL_C_ULONG, &ColumnSize, 0, &cbColumnSize);
- mystmt(hstmt,rc);
-
- /* 9 -- Decimal Digits */
- rc= SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0,
&cbDecimalDigits);
- mystmt(hstmt,rc);
-
- /* 10 -- Num Prec Radix */
- rc= SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);
- mystmt(hstmt,rc);
-
- /* 11 -- Nullable */
- rc= SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable);
- mystmt(hstmt,rc);
-
- rc= SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"Column %s:\n", ColumnName);
- fprintf(stdout,"\t DataType = %d(%d)\n", DataType, cbDataType);
- fprintf(stdout,"\t ColumnSize = %d(%d)\n", ColumnSize, cbColumnSize);
- fprintf(stdout,"\t DecimalDigits= %d(%d)\n", DecimalDigits, cbDecimalDigits);
- fprintf(stdout,"\t NumPrecRadix = %d(%d)\n", NumPrecRadix, cbNumPrecRadix);
- fprintf(stdout,"\t Nullable = %s(%d)\n\n",
- Nullable == SQL_NO_NULLS ? "NO": "YES", cbNullable);
-
- myassert(DataType == Values[i][0][0]);
- myassert(cbDataType == Values[i][0][1]);
-
- myassert(ColumnSize == Values[i][1][0]);
- myassert(cbColumnSize == Values[i][1][1]);
-
- myassert(DecimalDigits == Values[i][2][0]);
- myassert(cbDecimalDigits == Values[i][2][1]);
-
- myassert(NumPrecRadix == Values[i][3][0]);
- myassert(cbNumPrecRadix == Values[i][3][1]);
-
- myassert(Nullable == Values[i][4][0]);
- myassert(cbNullable == Values[i][4][1]);
-
- rc= SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
- }
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"DROP TABLE test_column",SQL_NTS);
- mystmt(hstmt,rc);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- return OK;
-}
-
-
-/* To test a convertion type */
-DECLARE_TEST(t_convert_type)
-{
- SQLRETURN rc;
- SQLSMALLINT SqlType, DateType;
- SQLCHAR ColName[MAX_NAME_LEN];
- SQLCHAR DbVersion[MAX_NAME_LEN];
- SQLINTEGER OdbcVersion;
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLGetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,&OdbcVersion,0,NULL);
- myenv(henv,rc);
-
- fprintf(stdout,"odbc version:\n");
- if (OdbcVersion == SQL_OV_ODBC2)
- {
- fprintf(stdout," SQL_OV_ODBC2");
- DateType= SQL_DATE;
- }
- else
- {
- fprintf(stdout," SQL_OV_ODBC3");
- DateType= SQL_TYPE_DATE;
- }
-
- rc = SQLGetInfo(hdbc,SQL_DBMS_VER,(SQLCHAR *)&DbVersion,MAX_NAME_LEN,NULL);
- mycon(hdbc,rc);
-
- SQLExecDirect(hstmt,"DROP TABLE t_convert",SQL_NTS);
-
- rc = SQLExecDirect(hstmt,"CREATE TABLE t_convert(col0 integer, \
- col1 date,\
- col2 char(10))",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(10,'2002-10-24','venu')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(20,'2002-10-23','venu1')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(30,'2002-10-25','venu2')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"INSERT INTO t_convert
VALUES(40,'2002-10-24','venu3')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"SELECT MAX(col0) FROM t_convert",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"MAX(col0): %d\n", SqlType);
- myassert(SqlType == SQL_INTEGER);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"SELECT MAX(col1) FROM t_convert",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"MAX(col1): %d\n", SqlType);
- myassert(SqlType == DateType);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"SELECT MAX(col2) FROM t_convert",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"MAX(col0): %d\n", SqlType);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- if (strncmp(DbVersion,"4.",2) >= 0)
- {
- rc = SQLExecDirect(hstmt,"SELECT CAST(MAX(col1) AS DATE) AS col1 FROM
t_convert",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"CAST(MAX(col1) AS DATE): %d\n", SqlType);
- myassert(SqlType == DateType);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"SELECT CONVERT(MAX(col1),DATE) AS col1 FROM
t_convert",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"CONVERT(MAX(col1),DATE): %d\n", SqlType);
- myassert(SqlType == DateType);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"SELECT CAST(MAX(col1) AS CHAR) AS col1 FROM
t_convert",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLDescribeCol(hstmt,1,(SQLCHAR
*)&ColName,MAX_NAME_LEN,NULL,&SqlType,NULL,NULL,NULL);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"CAST(MAX(col1) AS CHAR): %d\n", SqlType);
- myassert(SqlType == SQL_VARCHAR || SqlType == SQL_LONGVARCHAR);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
- }
-
- rc = SQLExecDirect(hstmt,"DROP TABLE t_convert",SQL_NTS);
- mystmt(hstmt,rc);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- return OK;
-}
-
-/* Test the bug when two stmts are used with the don't cache results */
-DECLARE_TEST(t_cache_bug)
-{
- SQLRETURN rc;
- SQLHENV henv1;
- SQLHDBC hdbc1;
- SQLHSTMT hstmt11, hstmt12;
- SQLCHAR conn[MAX_NAME_LEN];
-
- sprintf(conn,"DSN=%s;USER=%s;PASSWORD=%s;OPTION=1048579",
- mydsn,myuid,mypwd);
- if (mysock != NULL)
- {
- strcat(conn, ";SOCKET=");
- strcat(conn, mysock);
- }
- mydrvconnect(&henv1,&hdbc1,&hstmt11,conn);
-
- tmysql_exec(hstmt11,"drop table t_cache");
- rc = tmysql_exec(hstmt11,"create table t_cache(id int)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(1)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(2)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(3)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(4)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(5)");
- mystmt(hstmt11,rc);
-
- rc = SQLExecDirect(hstmt11,"select * from t_cache",SQL_NTS);
- mystmt(hstmt11,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt11,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt11,rc);
-
- rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt12);
- mycon(hdbc1,rc);
-
- rc = SQLColumns(hstmt12,test_db,SQL_NTS,
- NULL,0,"t_cache",SQL_NTS,
- NULL,0);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt12);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt11,rc);
-
- rc = SQLFetch(hstmt12);
- myassert(rc == SQL_NO_DATA);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt12,rc);
-
- rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt12);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt11);
- myassert(rc == SQL_NO_DATA);
-
- rc = SQLFreeStmt(hstmt11, SQL_DROP);
- mystmt(hstmt11,rc);
-
- rc = SQLDisconnect(hdbc1);
- mycon(hdbc1,rc);
-
- rc = SQLFreeConnect(hdbc1);
- mycon(hdbc1,rc);
-
- rc = SQLFreeEnv(henv1);
- myenv(henv1,rc);
-
- return OK;
-}
-
-
-/* Test the bug when two stmts are used with the don't cache results */
-DECLARE_TEST(t_non_cache_bug)
-{
- SQLRETURN rc;
- SQLHENV henv1;
- SQLHDBC hdbc1;
- SQLHSTMT hstmt11, hstmt12;
- SQLCHAR conn[MAX_NAME_LEN];
-
- sprintf(conn,"DSN=%s;USER=%s;PASSWORD=%s;OPTION=3",
- mydsn,myuid,mypwd);
- if (mysock != NULL)
- {
- strcat(conn, ";SOCKET=");
- strcat(conn, mysock);
- }
- mydrvconnect(&henv1,&hdbc1,&hstmt11,conn);
-
- tmysql_exec(hstmt11,"drop table t_cache");
- rc = tmysql_exec(hstmt11,"create table t_cache(id int)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(1)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(2)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(3)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(4)");
- mystmt(hstmt11,rc);
-
- rc = tmysql_exec(hstmt11,"insert into t_cache values(5)");
- mystmt(hstmt11,rc);
-
- rc = SQLExecDirect(hstmt11,"select * from t_cache",SQL_NTS);
- mystmt(hstmt11,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt11,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt11,rc);
-
- rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt12);
- mycon(hdbc1,rc);
-
- rc = SQLColumns(hstmt12,test_db,SQL_NTS,
- NULL,0,"t_cache",SQL_NTS,
- NULL,0);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt12);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt11,rc);
-
- rc = SQLFetch(hstmt12);
- myassert(rc == SQL_NO_DATA);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt12,rc);
-
- rc = SQLFreeHandle(SQL_HANDLE_STMT,hstmt12);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt11);
- mystmt(hstmt12,rc);
-
- rc = SQLFetch(hstmt11);
- myassert(rc == SQL_NO_DATA);
-
- rc = SQLFreeStmt(hstmt11, SQL_DROP);
- mystmt(hstmt11,rc);
-
- rc = SQLDisconnect(hdbc1);
- mycon(hdbc1,rc);
-
- rc = SQLFreeConnect(hdbc1);
- mycon(hdbc1,rc);
-
- rc = SQLFreeEnv(henv1);
- myenv(henv1,rc);
-
- return OK;
-}
-
-
-/* Test the bug when blob size > 8k */
-DECLARE_TEST(t_blob_bug)
-{
- SQLRETURN rc;
- SQLCHAR *data;
- SQLINTEGER i;
- SQLLEN length;
- const SQLINTEGER max_blob_size=1024*100;
-
- SQLExecDirect(hstmt,"drop table t_blob",SQL_NTS);
- rc = SQLExecDirect(hstmt,"create table t_blob(blb long varbinary)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_blob values(?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- if (!(data = (SQLCHAR *)calloc(max_blob_size,sizeof(SQLCHAR))))
- {
- SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt,SQL_CLOSE);
- return;
- }
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARBINARY,
- 0,0,data,0,&length);
- mystmt(hstmt,rc);
-
- memset(data,'X',max_blob_size);
-
- fprintf(stdout,"inserting %d rows\n\n", max_blob_size / 1024);
- for (length=1024; length <= max_blob_size; length+= 1024)
- {
- fprintf(stdout,"\r %d", length/1024);
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
- }
-
- SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"SELECT length(blb) FROM t_blob",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&length,0,NULL);
- mystmt(hstmt,rc);
-
- for (i= 1; i <= max_blob_size/1024; i++)
- {
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"row %d length: %d\n", i, length);
- myassert(length == i * 1024);
- }
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA);
-
- free(data);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- return OK;
-}
-
-
-/* Test the bug SQLTables */
-typedef struct t_table_bug
-{
- SQLCHAR szColName[MAX_NAME_LEN];
- SQLSMALLINT pcbColName;
- SQLSMALLINT pfSqlType;
- SQLUINTEGER pcbColDef;
- SQLSMALLINT pibScale;
- SQLSMALLINT pfNullable;
-} t_describe_col;
-
-
-t_describe_col t_tables_bug_data[5] =
-{
- {"TABLE_CAT", 9, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
- {"TABLE_SCHEM",11, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
- {"TABLE_NAME", 10, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
- {"TABLE_TYPE", 10, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
- {"REMARKS", 7, SQL_VARCHAR, MYSQL_NAME_LEN, 0, SQL_NULLABLE},
-};
-
-
-DECLARE_TEST(t_tables_bug)
-{
- SQLRETURN rc;
- SQLSMALLINT i, ColumnCount, pcbColName, pfSqlType, pibScale, pfNullable;
- SQLUINTEGER pcbColDef;
- SQLCHAR szColName[MAX_NAME_LEN];
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLTables(hstmt,NULL,0,NULL,0,NULL,0,"'TABLE'",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLNumResultCols(hstmt,&ColumnCount);
- mystmt(hstmt,rc);
-
- fprintf(stdout, "total columns in SQLTables: %d\n", ColumnCount);
- myassert(ColumnCount == 5);
-
- for (i= 1; i <= ColumnCount; i++)
- {
- rc = SQLDescribeCol(hstmt, (SQLUSMALLINT)i,
- szColName,MAX_NAME_LEN,&pcbColName,
- &pfSqlType,&pcbColDef,&pibScale,&pfNullable);
- mystmt(hstmt,rc);
-
- fprintf(stdout, "Column Number'%d':\n", i);
- fprintf(stdout, "\t Column Name : %s\n", szColName);
- fprintf(stdout, "\t NameLengh : %d\n", pcbColName);
- fprintf(stdout, "\t DataType : %d\n", pfSqlType);
- fprintf(stdout, "\t ColumnSize : %d\n", pcbColDef);
- fprintf(stdout, "\t DecimalDigits : %d\n", pibScale);
- fprintf(stdout, "\t Nullable : %d\n", pfNullable);
-
- myassert(strcmp(t_tables_bug_data[i-1].szColName,szColName) == 0);
- myassert(t_tables_bug_data[i-1].pcbColName == pcbColName);
- myassert(t_tables_bug_data[i-1].pfSqlType == pfSqlType);
- myassert(t_tables_bug_data[i-1].pcbColDef == pcbColDef);
- myassert(t_tables_bug_data[i-1].pibScale == pibScale);
- myassert(t_tables_bug_data[i-1].pfNullable == pfNullable);
- }
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- return OK;
-}
-
-
-/* Test for a simple SQLPutData and SQLParamData handling for longtext */
-DECLARE_TEST(t_putdata)
-{
- SQLRETURN rc;
- SQLLEN pcbLength;
- SQLINTEGER c1;
- SQLCHAR data[255];
- SQLPOINTER token;
-
- SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS);
- rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
- SQL_INTEGER,0,0,&c1,0,NULL);
-
- rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,
- SQL_LONGVARCHAR,0,0,
- (SQLPOINTER)1,0,&pcbLength);
-
- pcbLength = SQL_LEN_DATA_AT_EXEC(0);
-
- c1 = 10;
- rc = SQLExecute(hstmt);
- myassert(rc == SQL_NEED_DATA);
-
- rc = SQLParamData(hstmt, &token);
- myassert(rc == SQL_NEED_DATA);
-
- strcpy(data,"mysql ab");
- rc = SQLPutData(hstmt,data,6);
- mystmt(hstmt,rc);
-
- strcpy(data,"- the open source database company");
- rc = SQLPutData(hstmt,data,strlen(data));
- mystmt(hstmt,rc);
-
- rc = SQLParamData(hstmt, &token);
- mystmt(hstmt,rc);
-
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- pcbLength= 0;
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"mysql - the open source database company")==0);
- myassert(pcbLength == 40);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- return OK;
-}
-
-/* Test for a simple SQLPutData and SQLParamData handling for longtext */
-DECLARE_TEST(t_putdata1)
-{
- SQLRETURN rc;
- SQLLEN pcbLength;
- SQLINTEGER c1;
- SQLCHAR data[255];
- SQLPOINTER token;
-
- SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS);
- rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_putdata values(10,'venu')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"update t_putdata set c2= ? where c1 = ?",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,
- SQL_LONGVARCHAR,0,0,
- (SQLPOINTER)1,0,&pcbLength);
-
- rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_LONG,
- SQL_INTEGER,0,0,&c1,0,NULL);
-
- pcbLength = SQL_LEN_DATA_AT_EXEC(0);
-
- c1 = 10;
- rc = SQLExecute(hstmt);
- myassert(rc == SQL_NEED_DATA);
-
- rc = SQLParamData(hstmt, &token);
- myassert(rc == SQL_NEED_DATA);
-
- strcpy(data,"mysql ab");
- rc = SQLPutData(hstmt,data,6);
- mystmt(hstmt,rc);
-
- strcpy(data,"- the open source database company");
- rc = SQLPutData(hstmt,data,strlen(data));
- mystmt(hstmt,rc);
-
- rc = SQLParamData(hstmt, &token);
- mystmt(hstmt,rc);
-
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"select c2 from t_putdata where c1= 10",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- pcbLength= 0;
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"mysql - the open source database company")==0);
- myassert(pcbLength == 40);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- return OK;
-}
-
-
-/* Test for a simple SQLPutData and SQLParamData handling for longtext */
-DECLARE_TEST(t_putdata2)
-{
- SQLRETURN rc;
- SQLLEN pcbLength;
- SQLINTEGER c1;
- SQLCHAR data[255];
- SQLPOINTER token;
-
- SQLExecDirect(hstmt,"drop table t_putdata",SQL_NTS);
- rc = SQLExecDirect(hstmt,"create table t_putdata(c1 int, c2 long varchar, c3 long
varchar)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_putdata values(?,?,?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,
- SQL_INTEGER,0,0,&c1,0,NULL);
-
- rc = SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,
- SQL_LONGVARCHAR,0,0,
- (SQLPOINTER)1,0,&pcbLength);
-
- rc = SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,
- SQL_LONGVARCHAR,0,0,
- (SQLPOINTER)1,0,&pcbLength);
-
- pcbLength = SQL_LEN_DATA_AT_EXEC(0);
-
- c1 = 10;
- rc = SQLExecute(hstmt);
- myassert(rc == SQL_NEED_DATA);
-
- rc = SQLParamData(hstmt, &token);
- myassert(rc == SQL_NEED_DATA);
-
- strcpy(data,"mysql ab");
- rc = SQLPutData(hstmt,data,6);
- mystmt(hstmt,rc);
-
- strcpy(data,"- the open source database company");
- rc = SQLPutData(hstmt,data,strlen(data));
- mystmt(hstmt,rc);
-
- rc = SQLParamData(hstmt, &token);
- myassert(rc == SQL_NEED_DATA);
-
- strcpy(data,"MySQL AB");
- rc = SQLPutData(hstmt,data, 8);
- mystmt(hstmt,rc);
-
- rc = SQLParamData(hstmt, &token);
- mystmt(hstmt,rc);
-
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"select c2,c3 from t_putdata where c1= 10",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- pcbLength= 0;
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &pcbLength);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"mysql - the open source database company")==0);
- myassert(pcbLength == 40);
-
- pcbLength= 0;
- rc = SQLGetData(hstmt, 2, SQL_C_CHAR, data, sizeof(data), &pcbLength);
- mystmt(hstmt,rc);
- fprintf(stdout,"data: %s(%d)\n", data, pcbLength);
- myassert(strcmp(data,"MySQL AB")==0);
- myassert(pcbLength == 8);
-
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- return OK;
-}
-
-
-/* Test for a simple time struct */
-DECLARE_TEST(t_time1)
-{
- SQLRETURN rc;
- SQL_TIME_STRUCT tt;
- SQLCHAR data[30];
- SQLLEN length;
-
- SQLExecDirect(hstmt,"drop table t_time",SQL_NTS);
- rc = SQLExecDirect(hstmt,"create table t_time(t time, t1 timestamp, t2 datetime, t3
date)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_time(t) values(?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_TYPE_TIME,
- SQL_TIME,0,0,&tt,0,NULL);
-
-
- tt.hour= 00;
- tt.minute= 00;
- tt.second= 03;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 01;
- tt.minute= 00;
- tt.second= 00;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 19;
- tt.minute= 00;
- tt.second= 00;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 01;
- tt.minute= 01;
- tt.second= 00;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 01;
- tt.minute= 00;
- tt.second= 01;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 00;
- tt.minute= 01;
- tt.second= 00;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 00;
- tt.minute= 11;
- tt.second= 12;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 01;
- tt.minute= 01;
- tt.second= 01;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 00;
- tt.minute= 00;
- tt.second= 00;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- tt.hour= 10;
- tt.minute= 11;
- tt.second= 12;
-
- rc = SQLExecute(hstmt);
- mystmt(hstmt, rc);
-
- SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"select t from t_time",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"00:00:03")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"01:00:00")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"19:00:00")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"01:01:00")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"01:00:01")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"00:01:00")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"00:11:12")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"01:01:01")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
-
- myassert(strcmp(data,"00:00:00")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_CHAR, data, sizeof(data), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %s(%d)\n", data, length);
- myassert(strcmp(data,"10:11:12")==0);
- myassert(length == 8);
-
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_time(t1) values('2003-05-12
10:11:12')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"select t1 from t_time", SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %d:%d:%d(%d)\n", tt.hour, tt.minute, tt.second, length);
-
- myassert(tt.hour == 10 && tt.minute == 11 && tt.second == 12);
- myassert(length == sizeof(SQL_TIME_STRUCT));
-
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_time(t2) values('03-12-28
05:59:59')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"select t2 from t_time", SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %d:%d:%d(%d)\n", tt.hour, tt.minute, tt.second, length);
- myassert(tt.hour == 05 && tt.minute == 59 && tt.second == 59);
- myassert(length == sizeof(SQL_TIME_STRUCT));
-
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLExecDirect(hstmt,"delete from t_time",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_time(t3) values('2003-05-12
10:11:12')",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"select t3 from t_time", SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- rc = SQLGetData(hstmt, 1, SQL_C_TIME, &tt, sizeof(tt), &length);
- mystmt(hstmt,rc);
- fprintf(stdout,"time: %d:%d:%d(%d)\n", tt.hour, tt.minute, tt.second, length);
- myassert(tt.hour == 00 || tt.minute == 00 || tt.second == 00);
- myassert(length == sizeof(SQL_TIME_STRUCT));
-
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA);
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- return OK;
-}
-
-
-/* test for SQL_ATTR_ROW_ARRAY_SIZE */
-DECLARE_TEST(t_row_array_size)
-{
- SQLRETURN rc;
- SQLINTEGER i, iarray[15];
- SQLLEN nrows;
- const int max_rows=9;
-
- SQLExecDirect(hstmt,"drop table t_row_array_size",SQL_NTS);
-
- rc = SQLExecDirect(hstmt,"create table t_row_array_size(id int)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLPrepare(hstmt,"insert into t_row_array_size values(?)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_ULONG,
- SQL_INTEGER,0,0,&i,0,NULL);
- mystmt(hstmt,rc);
-
- for( i = 1; i <= max_rows; i++ )
- {
- rc = SQLExecute(hstmt);
- mystmt(hstmt,rc);
- }
-
- SQLFreeStmt(hstmt,SQL_RESET_PARAMS);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- /* set row_size as 2 */
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)2,SQL_IS_UINTEGER);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,&nrows,SQL_IS_POINTER);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"select * from t_row_array_size",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&iarray,0,NULL);
- mystmt(hstmt,rc);
-
- /* row 1-2 */
- rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
- mystmt(hstmt,rc);
- my_assert(nrows == 2);
- my_assert(iarray[0]==1);
- my_assert(iarray[1]==2);
-
- /* row 3-4 */
- rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
- mystmt(hstmt,rc);
- my_assert(nrows == 2);
- my_assert(iarray[0]==3);
- my_assert(iarray[1]==4);
-
- /* row 5-6 */
- rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,1);/* 1 */
- mystmt(hstmt,rc);
- my_assert(nrows == 2);
- my_assert(iarray[0]==5);
- my_assert(iarray[1]==6);
-
- /* row 7-8 */
- rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
- mystmt(hstmt,rc);
- my_assert(nrows == 2);
- my_assert(iarray[0]==7);
- my_assert(iarray[1]==8);
-
- /* row 9 */
- rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
- mystmt(hstmt,rc);
- my_assert(nrows == 1);
- my_assert(iarray[0]==9);
-
- rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
- mystmt_err(hstmt,rc==SQL_NO_DATA_FOUND,rc);
-
- SQLFreeStmt(hstmt,SQL_UNBIND);
- SQLFreeStmt(hstmt,SQL_CLOSE);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)1,0);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt,SQL_ATTR_ROWS_FETCHED_PTR,(SQLPOINTER)0,SQL_IS_POINTER);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_empty_str_bug)
-{
- SQLRETURN rc;
- SQLINTEGER id;
- SQLLEN name_len, desc_len;
- SQLCHAR name[20], desc[20];
-
- tmysql_exec(hstmt,"drop table t_empty_str_bug");
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"CREATE TABLE t_empty_str_bug(Id int NOT NULL,\
- Name varchar(10) default NULL, \
- Description varchar(10) default
NULL, \
- PRIMARY KEY (Id))");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLSetCursorName(hstmt,"venu",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_empty_str_bug");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_LONG,&id,0,NULL);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,2,SQL_C_CHAR,&name,100,&name_len);
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,3,SQL_C_CHAR,&desc,100,&desc_len);
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_NEXT,1,NULL,NULL);
- myassert(rc == SQL_NO_DATA_FOUND);
-
- id= 10;
- strcpy(name,"MySQL AB");name_len= SQL_NTS;
- strcpy(desc,"");desc_len= SQL_COLUMN_IGNORE;
-
- rc = SQLSetPos(hstmt,1,SQL_ADD,SQL_LOCK_NO_CHANGE);
- mystmt(hstmt,rc);
-
- rc = SQLRowCount(hstmt,&name_len);
- mystmt(hstmt,rc);
-
- fprintf(stdout," rows affected:%d\n",name_len);
- myassert(name_len == 1);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_empty_str_bug");
- mystmt(hstmt,rc);
-
- my_assert( 1 == myresult(hstmt));
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"select * from t_empty_str_bug");
- mystmt(hstmt,rc);
-
- rc = SQLExtendedFetch(hstmt,SQL_FETCH_ABSOLUTE,1,NULL,NULL);
- mystmt(hstmt,rc);
-
- name[0]='\0';
- my_assert(10 == my_fetch_int(hstmt,1));
- my_assert(!strcmp((const char *)"MySQL AB",my_fetch_str(hstmt,name,2)));
- my_assert(!strcmp((const char *)"MySQL AB",my_fetch_str(hstmt,name,3))); /* NULL */
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_current_catalog)
-{
- SQLCHAR cur_db[255], db[255];
- SQLRETURN rc;
- SQLUINTEGER len;
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, 255, &len);
- mycon(hdbc,rc);
- fprintf(stdout,"current_catalog: %s (%ld)\n", db, len);
- myassert(strcmp(db, "test") == 0 || strlen("test") == len);
-
- rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, SQL_NTS);
- mycon(hdbc,rc);
-
- SQLExecDirect(hstmt, "DROP DATABASE t_odbc_test_cur_catalog", SQL_NTS);
-
- strcpy(cur_db, "t_odbc_test_cur_catalog");
- rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS);
- mycon_r(hdbc,rc);
-
- rc = SQLExecDirect(hstmt, "CREATE DATABASE t_odbc_test_cur_catalog", SQL_NTS);
- mystmt(hstmt,rc);
-
- strcpy(cur_db, "t_odbc_test_cur_catalog");
- rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS);
- mycon(hdbc,rc);
-
- rc = SQLGetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)db, 255, &len);
- mycon(hdbc,rc);
- fprintf(stdout,"current_catalog: %s (%ld)\n", db, len);
- myassert(strcmp(cur_db, db) == 0 || strlen(cur_db) == len);
-
- strcpy(cur_db, "t_odbc_test_cur_catalog-test-12455");
- rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, SQL_NTS);
- mycon_r(hdbc,rc);
-
- rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)cur_db, len);
- mycon(hdbc,rc);
-
- /* reset for further tests */
- rc = SQLSetConnectAttr(hdbc, SQL_ATTR_CURRENT_CATALOG, (char *)test_db, SQL_NTS);
- mycon(hdbc,rc);
-
- rc = SQLExecDirect(hstmt, "DROP DATABASE t_odbc_test_cur_catalog", SQL_NTS);
- mycon(hstmt,rc);
-
- return OK;
-}
-
-
-DECLARE_TEST(t_rows_fetched_ptr1)
-{
- SQLRETURN rc;
- SQLLEN rowsFetched, rowsSize;
- SQLINTEGER i;
-
- SQLExecDirect(hstmt,"drop table t_rows_fetched_ptr",SQL_NTS);
-
- rc = SQLExecDirect(hstmt,"create table t_rows_fetched_ptr(a int)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(0)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(1)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(2)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(3)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(4)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"insert into t_rows_fetched_ptr values(5)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rowsSize= 1;
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
- mystmt(hstmt,rc);
-
- i= 0;
- rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
- while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
- {
- fprintf(stdout,"total rows fetched: %ld\n", rowsFetched);
- myassert(rowsFetched == rowsSize);
- i++; rowsFetched= 0;
- rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
- }
- myassert( i == 6);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rowsSize= 2;
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
- mystmt(hstmt,rc);
-
- i= 0;
- rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
- while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
- {
- fprintf(stdout,"total rows fetched: %ld\n", rowsFetched);
- myassert(rowsFetched == rowsSize);
- i++;rowsFetched= 0;
- rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
- }
- myassert( i == 3);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rowsSize= 3;
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
- mystmt(hstmt,rc);
-
- i= 0;
- rc = SQLFetchScroll(hstmt,SQL_FETCH_NEXT,0);
- while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
- {
- printMessage("total rows fetched: %ld\n", rowsFetched);
- myassert(rowsFetched == rowsSize);
- i++;rowsFetched= 0;
- rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0);
- }
- myassert( i == 2);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rowsSize= 4;
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)rowsSize, 0);
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &rowsFetched, 0);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt, "SELECT * FROM t_rows_fetched_ptr",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- printMessage("total rows fetched: %ld\n", rowsFetched);
- myassert(rowsFetched == rowsSize);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
-
- printMessage("total rows fetched: %ld\n", rowsFetched);
- myassert(rowsFetched == 2);
-
- rc = SQLFetch(hstmt);
- myassert(rc == SQL_NO_DATA);
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, 0);/* reset */
- mystmt(hstmt,rc);
-
- rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, NULL, 0);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-static void desc_col_check(SQLHSTMT hstmt,
- SQLUSMALLINT icol,
- const char *name,
- SQLSMALLINT sql_type,
- SQLUINTEGER col_def,
- SQLUINTEGER col_def1,
- SQLSMALLINT scale,
- SQLSMALLINT nullable)
-{
- SQLRETURN rc;
- SQLSMALLINT pcbColName, pfSqlType, pibScale, pfNullable;
- SQLUINTEGER pcbColDef;
- SQLCHAR szColName[MAX_NAME_LEN];
-
- rc = SQLDescribeCol(hstmt, icol,
- szColName,MAX_NAME_LEN,&pcbColName,
- &pfSqlType,&pcbColDef,&pibScale,&pfNullable);
- mystmt(hstmt,rc);
-
- fprintf(stdout, "\n\n Column Number'%d':", icol);
-
- fprintf(stdout, "\t Column Name : %s\n", szColName);
- fprintf(stdout, "\t NameLengh : %d\n", pcbColName);
- fprintf(stdout, "\t DataType : %d\n", pfSqlType);
- fprintf(stdout, "\t ColumnSize : %d\n", pcbColDef);
- fprintf(stdout, "\t DecimalDigits : %d\n", pibScale);
- fprintf(stdout, "\t Nullable : %d\n", pfNullable);
-
- myassert(strcmp(name,szColName) == 0);
- myassert(sql_type == pfSqlType);
- myassert(col_def == pcbColDef || col_def1 == pcbColDef);
- myassert(scale == pibScale);
- myassert(nullable == pfNullable);
-}
-
-
-/* To test SQLDescribeCol */
-DECLARE_TEST(t_desc_col)
-{
- SQLRETURN rc;
- SQLSMALLINT ColumnCount;
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- SQLExecDirect(hstmt,"DROP TABLE t_desc_col",SQL_NTS);
-
- rc = SQLExecDirect(hstmt,"CREATE TABLE t_desc_col(c1 integer, \
- c2 binary(2) NOT NULL,\
- c3 char(1), \
- c4 varchar(5),\
- c5 decimal(10,3) NOT NULL,\
- c6 tinyint,\
- c7 smallint,\
- c8 numeric(4,2),\
- c9 real,\
- c10 float(5),\
- c11 bigint NOT NULL,\
- c12 varbinary(12),\
- c13 char(20) NOT NULL,\
- c14 float(10,3),\
- c15 tinytext,\
- c16 text,\
- c17 mediumtext,\
- c18 longtext,\
- c19 tinyblob,\
- c20 blob,\
- c21 mediumblob,\
- c22 longblob,\
- c23 tinyblob)",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLExecDirect(hstmt,"SELECT * FROM t_desc_col",SQL_NTS);
- mystmt(hstmt,rc);
-
- rc = SQLNumResultCols(hstmt, &ColumnCount);
- mystmt(hstmt,rc);
-
- fprintf(stdout,"total columns: %d\n", ColumnCount);
- my_assert(ColumnCount == 23);
-
- desc_col_check(hstmt, 1, "c1", SQL_INTEGER, 10, 11, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 2, "c2", SQL_BINARY, 2, 2, 0, SQL_NO_NULLS);
- desc_col_check(hstmt, 3, "c3", SQL_CHAR, 1, 1, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 4, "c4", SQL_VARCHAR, 5, 5, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 5, "c5", SQL_DECIMAL, 10, 10, 3, SQL_NO_NULLS);
- desc_col_check(hstmt, 6, "c6", SQL_TINYINT, 3, 4, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 7, "c7", SQL_SMALLINT, 5, 6, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 8, "c8", SQL_DECIMAL, 4, 4, 2, SQL_NULLABLE);
- desc_col_check(hstmt, 9, "c9", SQL_DOUBLE, 22, 24, 31, SQL_NULLABLE);
- desc_col_check(hstmt, 10, "c10", SQL_REAL, 12, 24, 31, SQL_NULLABLE);
- desc_col_check(hstmt, 11, "c11", SQL_BIGINT, 19, 19, 0, SQL_NO_NULLS);
- desc_col_check(hstmt, 12, "c12", SQL_VARBINARY, 12, 12, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 13, "c13", SQL_CHAR, 20, 20, 0, SQL_NO_NULLS);
- desc_col_check(hstmt, 14, "c14", SQL_REAL, 10, 24, 3, SQL_NULLABLE);
- desc_col_check(hstmt, 15, "c15", SQL_LONGVARCHAR, 255, 255, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 16, "c16", SQL_LONGVARCHAR, 65535, 65535, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 17, "c17", SQL_LONGVARCHAR, 16777215, 16777215, 0,
SQL_NULLABLE);
- desc_col_check(hstmt, 18, "c18", SQL_LONGVARCHAR, 4294967295 , 16777215 , 0,
SQL_NULLABLE);
- desc_col_check(hstmt, 19, "c19", SQL_LONGVARBINARY, 255, 255, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 20, "c20", SQL_LONGVARBINARY, 65535, 65535, 0, SQL_NULLABLE);
- desc_col_check(hstmt, 21, "c21", SQL_LONGVARBINARY, 16777215, 16777215, 0,
SQL_NULLABLE);
- desc_col_check(hstmt, 22, "c22", SQL_LONGVARBINARY, 4294967295 , 16777215 , 0,
SQL_NULLABLE);
- desc_col_check(hstmt, 23, "c23", SQL_LONGVARBINARY, 255, 5, 0, SQL_NULLABLE);
-
- SQLFreeStmt(hstmt,SQL_CLOSE);
-}
-
-
-/* Test for a simple SQLPutData and SQLParamData handling bug #1316 */
-DECLARE_TEST(t_putdata3)
-{
- char buffer[]= "MySQL - The worlds's most popular open source database";
- SQLRETURN rc;
- const int MAX_PART_SIZE = 5;
-
- char *pdata= 0, data[50];
- int dynData;
- int commonLen= 20;
-
- SQLINTEGER id, id1, id2, id3, resId;
- SQLINTEGER resUTimeSec;
- SQLINTEGER resUTimeMSec;
- SQLINTEGER resDataLen;
- SQLLEN resData;
-
- SQLExecDirect(hstmt,"drop table t_putdata3",SQL_NTS);
- rc = SQLExecDirect(hstmt,"CREATE TABLE t_putdata3 ( id INT, id1 INT, \
- id2 INT, id3 INT, pdata blob);",SQL_NTS);
- mystmt(hstmt,rc);
-
- dynData = 1;
-
- rc = SQLPrepare(hstmt, "INSERT INTO t_putdata3 VALUES ( ?, ?, ?, ?, ? )", SQL_NTS);
- mystmt(hstmt,rc);
-
- id= 1, id1= 2, id2= 3, id3= 4;
- resId = 0;
- resUTimeSec = 0;
- resUTimeMSec = 0;
- resDataLen = 0;
- resData = SQL_LEN_DATA_AT_EXEC(0);
-
- rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG,
- SQL_INTEGER, 0, 0, &id, 0, &resId);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG,
- SQL_INTEGER, 0, 0, &id1, 0, &resUTimeSec);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG,
- SQL_INTEGER, 0, 0, &id2, 0, &resUTimeMSec);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_SLONG,
- SQL_INTEGER, 0, 0, &id3, 0,
- &resDataLen);
- mystmt(hstmt,rc);
-
- rc = SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT,
- SQL_C_BINARY, SQL_LONGVARBINARY, 10, 10,
- dynData ? (SQLPOINTER)5 :
- pdata, 0, &resData);
- mystmt(hstmt,rc);
-
- rc = SQLExecute(hstmt);
- if (rc == SQL_NEED_DATA)
- {
- int parameter;
- if (SQLParamData(hstmt,(void**)¶meter) == SQL_NEED_DATA &&
parameter == 5)
- {
- int len = 0;
- int partsize;
-
- /* storing long data by parts */
- while (len < commonLen)
- {
- partsize = commonLen - len;
- if (partsize > MAX_PART_SIZE)
- partsize = MAX_PART_SIZE;
-
- rc = SQLPutData(hstmt, buffer+len, partsize);
- mystmt(hstmt,rc);
- len += partsize;
- }
- if (SQLParamData(hstmt,(void**)¶meter) == SQL_ERROR)
- {
-
- }
- }
- } /* end if (rc == SQL_NEED_DATA) */
-
- SQLFreeStmt(hstmt, SQL_UNBIND);
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- if (mysql_min_version(hdbc, "4.0", 3))
- {
- rc = tmysql_exec(hstmt,"select id, id1, id2, id3, convert(pdata,char) from
t_putdata3");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
-
- my_assert(1 == my_fetch_int(hstmt,1));
- my_assert(2 == my_fetch_int(hstmt,2));
- my_assert(3 == my_fetch_int(hstmt,3));
- my_assert(4 == my_fetch_int(hstmt,4));
-
- my_assert(strncmp(buffer, my_fetch_str(hstmt,data,5), commonLen) == 0);
- }
- else
- {
- rc = tmysql_exec(hstmt,"select id, id1, id2, id3, pdata from t_putdata3");
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
-
- my_assert(1 == my_fetch_int(hstmt,1));
- my_assert(2 == my_fetch_int(hstmt,2));
- my_assert(3 == my_fetch_int(hstmt,3));
- my_assert(4 == my_fetch_int(hstmt,4));
- my_assert(strncmp("4D7953514C202D2054686520776F726C64732773",
- my_fetch_str(hstmt,data,5), commonLen) == 0);
- }
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- /*
- output:
-
- ######################################
- t_putdata3
- ######################################
- my_fetch_int: 1
- my_fetch_int: 2
- my_fetch_int: 3
- my_fetch_int: 4
- my_fetch_str: MySQL - The worlds's(20)
- */
-
- return OK;
-}
-
-
-/* Test for misc CONVERT bug #1082 */
-DECLARE_TEST(t_convert)
-{
- SQLRETURN rc;
- SQLLEN data_len;
- SQLCHAR data[50];
-
- tmysql_exec(hstmt,"drop table t_convert");
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = tmysql_exec(hstmt,"CREATE TABLE t_convert(testing tinytext)");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"INSERT INTO t_convert VALUES('record1')");
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"INSERT INTO t_convert VALUES('record2')");
- mystmt(hstmt,rc);
-
- rc = SQLTransact(NULL,hdbc,SQL_COMMIT);
- mycon(hdbc,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- rc = tmysql_exec(hstmt,"SELECT CONCAT(testing, '-must be string') FROM t_convert
ORDER BY RAND()");
- mystmt(hstmt,rc);
-
- rc = SQLBindCol(hstmt,1,SQL_C_CHAR, &data, 100, &data_len);
- mystmt(hstmt,rc);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
- myassert(strcmp(data,"record1-must be string") == 0 ||
- strcmp(data,"record2-must be string") == 0);
-
- rc = SQLFetch(hstmt);
- mystmt(hstmt,rc);
- myassert(strcmp(data,"record1-must be string") == 0 ||
- strcmp(data,"record2-must be string") == 0);
-
- rc = SQLFetch(hstmt);
- myassert( rc == SQL_NO_DATA);
-
- rc = SQLFreeStmt(hstmt,SQL_UNBIND);
- mystmt(hstmt,rc);
-
- rc = SQLFreeStmt(hstmt,SQL_CLOSE);
- mystmt(hstmt,rc);
-
- return OK;
-}
-
-
-BEGIN_TESTS
- ADD_TEST(t_setpos_del_all)
- ADD_TEST(t_setpos_upd_decimal)
- ADD_TEST(tmysql_specialcols)
- ADD_TEST(t_max_select)
- ADD_TEST(t_getcursor)
- ADD_TEST(t_getcursor1)
- ADD_TEST(t_gettypeinfo)
- ADD_TEST(t_getinfo)
- ADD_TEST(t_stmt_attr_status)
- ADD_TEST(t_max_rows)
- ADD_TEST(t_prepare)
- ADD_TEST(t_prepare1)
- ADD_TEST(t_diagrec)
- ADD_TEST(t_acc_crash)
- ADD_TEST(t_msdev_bug)
- ADD_TEST(t_setpos_position)
- ADD_TEST(t_pos_column_ignore)
- ADD_TEST(t_longlong1)
- ADD_TEST(t_time)
- ADD_TEST(t_numeric)
- ADD_TEST(t_decimal)
- ADD_TEST(t_warning)
- ADD_TEST(t_multistep)
- ADD_TEST(t_zerolength)
- ADD_TEST(t_pos_datetime_delete)
- ADD_TEST(t_pos_datetime_delete1)
- ADD_TEST(t_text_fetch)
- ADD_TEST(t_columns)
- ADD_TEST(t_convert_type)
- ADD_TEST(t_cache_bug)
- ADD_TEST(t_non_cache_bug)
- ADD_TEST(t_blob_bug)
- ADD_TEST(t_tables_bug)
- ADD_TEST(t_putdata)
- ADD_TEST(t_putdata1)
- ADD_TEST(t_putdata2)
- ADD_TEST(t_time1)
- ADD_TEST(t_row_array_size)
- ADD_TEST(t_empty_str_bug)
- ADD_TEST(t_current_catalog)
- ADD_TEST(t_rows_fetched_ptr1)
- ADD_TEST(t_desc_col)
- ADD_TEST(t_putdata3)
- ADD_TEST(t_convert)
-END_TESTS
-
-
-RUN_TESTS
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r298 - trunk/test | jwinstead | 6 Apr |