summaryrefslogtreecommitdiff
path: root/tests/client_test.c
diff options
context:
space:
mode:
authorunknown <venu@myvenu.com>2003-01-18 12:58:19 -0800
committerunknown <venu@myvenu.com>2003-01-18 12:58:19 -0800
commita39279069898a2e98b8f7f636e3745b6b65bac53 (patch)
tree80e8cf552874bbfd24c612b0a9d917c0b1807ed0 /tests/client_test.c
parentb3f58a1b1bed6edf765a9f96587923450f097f34 (diff)
downloadmariadb-git-a39279069898a2e98b8f7f636e3745b6b65bac53.tar.gz
Few more tests + store_result fix
Diffstat (limited to 'tests/client_test.c')
-rw-r--r--tests/client_test.c827
1 files changed, 747 insertions, 80 deletions
diff --git a/tests/client_test.c b/tests/client_test.c
index 6f7473cf4b5..1e88bc2d681 100644
--- a/tests/client_test.c
+++ b/tests/client_test.c
@@ -160,6 +160,7 @@ myassert(stmt == 0);\
*********************************************************/
static void client_connect()
{
+ int rc;
char buff[255];
myheader("client_connect");
@@ -180,21 +181,27 @@ static void client_connect()
/* set AUTOCOMMIT to ON*/
mysql_autocommit(mysql, true);
sprintf(buff,"CREATE DATABASE IF NOT EXISTS %s", current_db);
- mysql_query(mysql, buff);
+ rc = mysql_query(mysql, buff);
+ myquery(rc);
sprintf(buff,"USE %s", current_db);
- mysql_query(mysql, buff);
+ rc = mysql_query(mysql, buff);
+ myquery(rc);
}
/********************************************************
* close the connection *
*********************************************************/
static void client_disconnect()
-{
+{
+ myheader("client_disconnect");
+
if (mysql)
{
char buff[255];
+ fprintf(stdout, "\n droping the test database '%s'", current_db);
sprintf(buff,"DROP DATABASE IF EXISTS %s", current_db);
mysql_query(mysql, buff);
+ fprintf(stdout, "\n closing the connection\n");
mysql_close(mysql);
}
}
@@ -378,6 +385,9 @@ uint my_process_stmt_result(MYSQL_STMT *stmt)
rc= mysql_bind_result(stmt,buffer);
mystmt(stmt,rc);
+ rc= mysql_stmt_store_result(stmt);
+ mystmt(stmt,rc);
+
mysql_field_seek(result, 0);
while (mysql_fetch(stmt) == 0)
{
@@ -417,6 +427,7 @@ uint my_stmt_result(const char *query, unsigned long length)
uint row_count;
int rc;
+ fprintf(stdout,"\n\n %s \n", query);
stmt= mysql_prepare(mysql,query,length);
mystmt_init(stmt);
@@ -550,6 +561,41 @@ static void client_use_result()
mysql_free_result(result);
}
+/*
+ Separate thread query to test some cases
+*/
+static my_bool thread_query(char *query)
+{
+ MYSQL *l_mysql;
+ my_bool error;
+
+ error= 0;
+ fprintf(stdout,"\n in thread_query(%s)", query);
+ if(!(l_mysql = mysql_init(NULL)))
+ {
+ myerror("mysql_init() failed");
+ return 1;
+ }
+ if (!(mysql_real_connect(l_mysql,opt_host,opt_user,
+ opt_password, current_db, opt_port,
+ opt_unix_socket, 0)))
+ {
+ myerror("connection failed");
+ error= 1;
+ goto end;
+ }
+ if (mysql_query(l_mysql,(char *)query))
+ {
+ fprintf(stderr,"Query failed (%s)\n",mysql_error(l_mysql));
+ error= 1;
+ goto end;
+ }
+ mysql_commit(l_mysql);
+end:
+ mysql_close(l_mysql);
+ return error;
+}
+
/********************************************************
* query processing *
@@ -919,15 +965,15 @@ static void test_prepare()
MYSQL_STMT *stmt;
int rc;
char query[200];
- int int_data;
- char str_data[50];
- char tiny_data;
- short small_data;
- longlong big_data;
- double real_data;
- double double_data;
- MYSQL_RES *result;
- MYSQL_BIND bind[8];
+ int int_data, o_int_data;
+ char str_data[50], data[50];
+ char tiny_data, o_tiny_data;
+ short small_data, o_small_data;
+ longlong big_data, o_big_data;
+ float real_data, o_real_data;
+ double double_data, o_double_data;
+ long length[7], len;
+ MYSQL_BIND bind[7];
myheader("test_prepare");
@@ -956,11 +1002,11 @@ static void test_prepare()
/* tinyint */
bind[0].buffer_type=FIELD_TYPE_TINY;
- bind[0].buffer=(gptr)&tiny_data;
+ bind[0].buffer= (gptr)&tiny_data;
/* string */
bind[1].buffer_type=FIELD_TYPE_STRING;
- bind[1].buffer=str_data;
- bind[1].buffer_length=sizeof(str_data);
+ bind[1].buffer= (gptr)str_data;
+ bind[1].length= &bind[1].buffer_length;
/* integer */
bind[2].buffer_type=FIELD_TYPE_LONG;
bind[2].buffer= (gptr)&int_data;
@@ -971,7 +1017,7 @@ static void test_prepare()
bind[4].buffer_type=FIELD_TYPE_LONGLONG;
bind[4].buffer= (gptr)&big_data;
/* float */
- bind[5].buffer_type=FIELD_TYPE_DOUBLE;
+ bind[5].buffer_type=FIELD_TYPE_FLOAT;
bind[5].buffer= (gptr)&real_data;
/* double */
bind[6].buffer_type=FIELD_TYPE_DOUBLE;
@@ -1006,15 +1052,77 @@ static void test_prepare()
myquery(rc);
/* test the results now, only one row should exists */
- rc = mysql_query(mysql,"SELECT * FROM my_prepare");
- myquery(rc);
+ myassert(tiny_data == (int) my_stmt_result("SELECT * FROM my_prepare",50));
+
+ stmt = mysql_prepare(mysql,"SELECT * FROM my_prepare",50);
+ mystmt_init(stmt);
+
+ for (int_data= 0; int_data < 7; int_data++)
+ bind[int_data].length= &length[int_data];
+
+ rc = mysql_bind_result(stmt, bind);
+ mystmt(stmt, rc);
/* get the result */
- result = mysql_store_result(mysql);
- mytest(result);
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ o_int_data = 320;
+ o_small_data = 1867;
+ o_big_data = 1000;
+ o_real_data = 2;
+ o_double_data = 6578.001;
- myassert((int)tiny_data == my_process_result_set(result));
- mysql_free_result(result);
+ /* now, execute the prepared statement to insert 10 records.. */
+ for (o_tiny_data=0; o_tiny_data < 100; o_tiny_data++)
+ {
+ len = sprintf(data,"MySQL%d",o_int_data);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt, rc);
+
+ fprintf(stdout, "\n tiny : %d (%ld)", tiny_data,length[0]);
+ fprintf(stdout, "\n short : %d (%ld)", small_data,length[3]);
+ fprintf(stdout, "\n int : %d (%ld)", int_data,length[2]);
+ fprintf(stdout, "\n big : %lld (%ld)", big_data,length[4]);
+
+ fprintf(stdout, "\n float : %f (%ld)", real_data,length[5]);
+ fprintf(stdout, "\n double : %f (%ld)", double_data,length[6]);
+
+ fprintf(stdout, "\n str : %s (%ld)", str_data, length[1]);
+
+ myassert(tiny_data == o_tiny_data);
+ myassert(length[0] == 1);
+
+ myassert(int_data == o_int_data);
+ myassert(length[2] == 4);
+
+ myassert(small_data == o_small_data);
+ myassert(length[3] == 2);
+
+ myassert(big_data == o_big_data);
+ myassert(length[4] == 8);
+
+ myassert(real_data == o_real_data);
+ myassert(length[5] == 4);
+
+ myassert(double_data == o_double_data);
+ myassert(length[6] == 8);
+
+ myassert(strcmp(data,str_data) == 0);
+ myassert(length[1] == len);
+
+ o_int_data += 25;
+ o_small_data += 10;
+ o_big_data += 100;
+ o_real_data += 1;
+ o_double_data += 10.09;
+ }
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ mysql_stmt_close(stmt);
}
@@ -1403,6 +1511,8 @@ static void test_select_prepare()
mystmt(stmt,rc);
my_process_stmt_result(stmt);
+
+ mysql_stmt_close(stmt);
}
/********************************************************
@@ -1481,7 +1591,6 @@ static void test_select_show()
{
MYSQL_STMT *stmt;
int rc;
- MYSQL_RES *result;
myheader("test_select_show");
@@ -1496,12 +1605,7 @@ static void test_select_show()
rc = mysql_execute(stmt);
mystmt(stmt, rc);
- /* get the result */
- result = mysql_store_result(mysql);
- mytest(result);
-
- my_process_result_set(result);
- mysql_free_result(result);
+ my_process_stmt_result(stmt);
mysql_stmt_close(stmt);
}
@@ -4359,7 +4463,7 @@ static void test_select_meta()
field= mysql_fetch_field(result);
mytest_r(field);
-
+n
mysql_free_result(result);
mysql_stmt_close(stmt);
}
@@ -4447,6 +4551,88 @@ static void test_func_fields()
/* Multiple stmts .. */
static void test_multi_stmt()
{
+#if TO_BE_FIXED_IN_SERVER
+ MYSQL_STMT *stmt, *stmt1;
+ int rc, id;
+ long length;
+ char name[50]={0};
+ MYSQL_BIND bind[2];
+
+ myheader("test_multi_stmt");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_multi_table");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"CREATE TABLE test_multi_table(id int, name char(20))");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_multi_table values(10,'mysql')");
+ myquery(rc);
+
+ stmt = mysql_prepare(mysql, "SELECT * FROM test_multi_table WHERE id = ?", 100);
+ mystmt_init(stmt);
+
+ verify_param_count(stmt,1);
+
+ init_bind(bind);
+
+ bind[0].buffer_type = MYSQL_TYPE_SHORT;
+ bind[0].buffer = (void *)&id;
+
+ bind[1].buffer_type = MYSQL_TYPE_STRING;
+ bind[1].buffer = (void *)&name;
+ bind[1].length = &length;;
+
+ rc = mysql_bind_param(stmt, bind);
+ mystmt(stmt, rc);
+
+ rc = mysql_bind_result(stmt, bind);
+ mystmt(stmt, rc);
+
+ id = 10;
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ id = 999;
+ rc = mysql_fetch(stmt);
+ mystmt(stmt, rc);
+
+ fprintf(stdout, "\n int_data: %d", id);
+ fprintf(stdout, "\n str_data: %s(%d)", name, length);
+ myassert(id == 10);
+ myassert(strcmp(name,"mysql")==0);
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ /* alter the table schema now */
+ stmt1 = mysql_prepare(mysql,"DELETE FROM test_multi_table WHERE id = ? AND name=?",100);
+ mystmt_init(stmt1);
+
+ verify_param_count(stmt1,2);
+
+ rc = mysql_bind_param(stmt1, bind);
+ mystmt(stmt1, rc);
+
+ rc = mysql_execute(stmt1);
+ mystmt(stmt1, rc);
+
+ rc = (int)mysql_stmt_affected_rows(stmt1);
+ fprintf(stdout,"\n total rows affected(delete): %d", rc);
+ myassert(rc == 1);
+
+ mysql_stmt_close(stmt1);
+
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ myassert(0 == my_stmt_result("SELECT * FROM test_multi_table",50));
+
+ mysql_stmt_close(stmt);
+#endif
}
/********************************************************
@@ -4598,6 +4784,476 @@ static void test_manual_sample()
fprintf(stdout, "Success !!!");
}
+/********************************************************
+* to test alter table scenario in the middle of prepare *
+*********************************************************/
+static void test_prepare_alter()
+{
+ MYSQL_STMT *stmt;
+ int rc, id;
+ long length;
+ MYSQL_BIND bind[1];
+
+ myheader("test_prepare_alter");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_alter");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"CREATE TABLE test_prep_alter(id int, name char(20))");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_prep_alter values(10,'venu'),(20,'mysql')");
+ myquery(rc);
+
+ stmt = mysql_prepare(mysql, "INSERT INTO test_prep_alter VALUES(?,'monty')", 100);
+ mystmt_init(stmt);
+
+ verify_param_count(stmt,1);
+
+ init_bind(bind);
+
+ bind[0].buffer_type= MYSQL_TYPE_SHORT;
+ bind[0].length= (long *)&length;
+ bind[0].buffer= (void *)&id;
+
+ rc = mysql_bind_param(stmt, bind);
+ mystmt(stmt, rc);
+
+ id = 30; length= 0;
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ if (thread_query((char *)"ALTER TABLE test_prep_alter change id id_new varchar(20)"))
+ exit(0);
+
+ length = MYSQL_NULL_DATA;
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ myassert(4 == my_stmt_result("SELECT * FROM test_prep_alter",50));
+
+ mysql_stmt_close(stmt);
+}
+
+/********************************************************
+* to test the support of multi-query executions *
+*********************************************************/
+static void test_multi_query()
+{
+ MYSQL *l_mysql, *org_mysql;
+ MYSQL_RES *result;
+ int rc;
+
+ const char *query= "DROP TABLE IF EXISTS test_multi_tab;\
+ CREATE TABLE test_multi_tab(id int,name char(20));\
+ INSERT INTO test_multi_tab(id) VALUES(10),(20);\
+ INSERT INTO test_multi_tab VALUES(20,'insert;comma');\
+ SELECT * FROM test_multi_tab;\
+ UPDATE test_multi_tab SET unknown_col=100 WHERE id=100;\
+ UPDATE test_multi_tab SET name='new;name' WHERE id=20;\
+ DELETE FROM test_multi_tab WHERE name='new;name';\
+ SELECT * FROM test_multi_tab;\
+ DELETE FROM test_multi_tab WHERE id=10;\
+ SELECT * FROM test_multi_tab";
+ uint count, rows[10]={0,2,1,3,0,2,2,1,1,0};
+
+ myheader("test_multi_query");
+
+ rc = mysql_query(mysql, query); /* syntax error */
+ myquery_r(rc);
+
+ if(!(l_mysql = mysql_init(NULL)))
+ {
+ fprintf(stdout,"\n mysql_init() failed");
+ exit(1);
+ }
+ if (!(mysql_real_connect(l_mysql,opt_host,opt_user,
+ opt_password, current_db, opt_port,
+ opt_unix_socket, CLIENT_MULTI_QUERIES))) /* enable multi queries */
+ {
+ fprintf(stdout,"\n connection failed(%s)", mysql_error(l_mysql));
+ exit(1);
+ }
+ org_mysql= mysql;
+ mysql= l_mysql;
+
+ rc = mysql_query(mysql, query);
+ myquery(rc);
+
+ count= 0;
+ while(mysql_more_results(mysql) && count < sizeof(rows)/sizeof(uint))
+ {
+ fprintf(stdout,"\n query %d", count);
+ if ((rc= mysql_next_result(mysql)))
+ fprintf(stdout, "\n\t failed(%s)", mysql_error(mysql));
+ else
+ fprintf(stdout,"\n\t affected rows: %lld", mysql_affected_rows(mysql));
+ if ((result= mysql_store_result(mysql)))
+ my_process_result_set(result);
+ if (!rc)
+ myassert(rows[count] == (uint)mysql_affected_rows(mysql));
+ count++;
+ }
+ mysql= org_mysql;
+}
+
+/********************************************************
+* to test simple bind store result *
+*********************************************************/
+static void test_store_result()
+{
+ MYSQL_STMT *stmt;
+ int rc;
+ const char query[100];
+ int nData, length, length1;
+ char szData[100];
+ MYSQL_BIND bind[2];
+
+ myheader("test_store_result");
+
+ init_bind(bind);
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_store_result");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"CREATE TABLE test_store_result(col1 int ,col2 varchar(50))");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_store_result VALUES(10,'venu'),(20,'mysql')");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_store_result(col2) VALUES('monty')");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ /* fetch */
+
+ bind[0].buffer_type=FIELD_TYPE_LONG;
+ bind[0].buffer= (gptr) &nData; /* integer data */
+ bind[0].length= (long *)&length;
+ bind[1].buffer_type=FIELD_TYPE_STRING;
+ bind[1].buffer=szData; /* string data */
+ bind[1].buffer_length=sizeof(szData);
+ bind[1].length=(long *)&length1;
+
+ strcpy((char *)query , "SELECT * FROM test_store_result");
+ stmt = mysql_prepare(mysql, query, strlen(query));
+ mystmt_init(stmt);
+
+ rc = mysql_bind_result(stmt,bind);
+ mystmt(stmt, rc);
+
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_stmt_store_result(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout,"\n row 1: %d,%s(%d)",nData, szData, length1);
+ myassert(nData == 10);
+ myassert(strcmp(szData,"venu")==0);
+ myassert(length1 == 4);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout,"\n row 2: %d,%s(%d)",nData, szData, length1);
+ myassert(nData == 20);
+ myassert(strcmp(szData,"mysql")==0);
+ myassert(length1 == 5);
+
+ length=99;
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ if (length == MYSQL_NULL_DATA)
+ fprintf(stdout,"\n row 3: NULL,%s(%d)", szData, length1);
+ else
+ fprintf(stdout,"\n row 3: %d,%s(%d)", nData, szData, length1);
+ myassert(length == MYSQL_NULL_DATA);
+ myassert(strcmp(szData,"monty")==0);
+ myassert(length1 == 5);
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_stmt_store_result(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout,"\n row 1: %d,%s(%d)",nData, szData, length1);
+ myassert(nData == 10);
+ myassert(strcmp(szData,"venu")==0);
+ myassert(length1 == 4);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout,"\n row 2: %d,%s(%d)",nData, szData, length1);
+ myassert(nData == 20);
+ myassert(strcmp(szData,"mysql")==0);
+ myassert(length1 == 5);
+
+ length=99;
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ if (length == MYSQL_NULL_DATA)
+ fprintf(stdout,"\n row 3: NULL,%s(%d)", szData, length1);
+ else
+ fprintf(stdout,"\n row 3: %d,%s(%d)", nData, szData, length1);
+ myassert(length == MYSQL_NULL_DATA);
+ myassert(strcmp(szData,"monty")==0);
+ myassert(length1 == 5);
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ mysql_stmt_close(stmt);
+}
+
+/********************************************************
+* to test simple bind store result *
+*********************************************************/
+static void test_store_result1()
+{
+ MYSQL_STMT *stmt;
+ int rc;
+
+ myheader("test_store_result1");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_store_result");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"CREATE TABLE test_store_result(col1 int ,col2 varchar(50))");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_store_result VALUES(10,'venu'),(20,'mysql')");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_store_result(col2) VALUES('monty')");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ stmt = mysql_prepare(mysql,"SELECT * FROM test_store_result",100);
+ mystmt_init(stmt);
+
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_stmt_store_result(stmt);
+ mystmt(stmt, rc);
+
+ rc = 0;
+ while (mysql_fetch(stmt) != MYSQL_NO_DATA)
+ rc++;
+ fprintf(stdout, "\n total rows: %d", rc);
+ myassert(rc == 3);
+
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_stmt_store_result(stmt);
+ mystmt(stmt, rc);
+
+ rc = 0;
+ while (mysql_fetch(stmt) != MYSQL_NO_DATA)
+ rc++;
+ fprintf(stdout, "\n total rows: %d", rc);
+ myassert(rc == 3);
+
+ mysql_stmt_close(stmt);
+}
+
+/********************************************************
+* to test simple bind store result *
+*********************************************************/
+static void test_store_result2()
+{
+ MYSQL_STMT *stmt;
+ int rc;
+ int nData;
+ long length;
+ MYSQL_BIND bind[1];
+
+ myheader("test_store_result2");
+
+ init_bind(bind);
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_store_result");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"CREATE TABLE test_store_result(col1 int ,col2 varchar(50))");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_store_result VALUES(10,'venu'),(20,'mysql')");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_store_result(col2) VALUES('monty')");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ /* fetch */
+
+ bind[0].buffer_type=FIELD_TYPE_LONG;
+ bind[0].buffer= (gptr) &nData; /* integer data */
+ bind[0].length= &length;
+
+ strcpy((char *)query , "SELECT col1 FROM test_store_result where col1= ?");
+ stmt = mysql_prepare(mysql, query, strlen(query));
+ mystmt_init(stmt);
+
+ rc = mysql_bind_param(stmt,bind);
+ mystmt(stmt, rc);
+
+ rc = mysql_bind_result(stmt,bind);
+ mystmt(stmt, rc);
+
+ nData = 10; length= 0;
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ nData = 0;
+ rc = mysql_stmt_store_result(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout,"\n row 1: %d",nData);
+ myassert(nData == 10);
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ nData = 20;
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ nData = 0;
+ rc = mysql_stmt_store_result(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout,"\n row 1: %d",nData);
+ myassert(nData == 20);
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ mysql_stmt_close(stmt);
+}
+
+/********************************************************
+* to test simple subselect prepare *
+*********************************************************/
+static void test_subselect()
+{
+#if TO_BE_FIXED_IN_SERVER
+ MYSQL_STMT *stmt;
+ int rc;
+ int id;
+ long length;
+ MYSQL_BIND bind[1];
+
+ myheader("test_subselect");
+
+ init_bind(bind);
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_sub1");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_sub2");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"CREATE TABLE test_sub1(id int)");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"CREATE TABLE test_sub2(id int, id1 int)");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_sub1 values(2)");
+ myquery(rc);
+
+ rc = mysql_query(mysql,"INSERT INTO test_sub2 VALUES(1,7),(2,7)");
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ /* fetch */
+
+ bind[0].buffer_type=FIELD_TYPE_LONG;
+ bind[0].buffer= (gptr) &id;
+ bind[0].length= &length;
+
+ strcpy((char *)query , "SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=?)");
+ myassert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=8)",100));
+ myassert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=7)",100));
+ stmt = mysql_prepare(mysql, query, strlen(query));
+ mystmt_init(stmt);
+
+ rc = mysql_bind_param(stmt,bind);
+ mystmt(stmt, rc);
+
+ rc = mysql_bind_result(stmt,bind);
+ mystmt(stmt, rc);
+
+ id = 7;
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout,"\n row 1: %d(%ld)",id, length);
+ myassert(id == 1);
+
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ mysql_stmt_close(stmt);
+#endif
+}
+
static struct my_option myctest_long_options[] =
{
@@ -4631,7 +5287,7 @@ static void usage(void)
puts(" By Monty & Venu \n");
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,");
puts("and you are welcome to modify and redistribute it under the GPL license\n");
- puts(" Copyright (C) 1995-2002 MySQL AB ");
+ puts(" Copyright (C) 1995-2003 MySQL AB ");
puts("-----------------------------------------------------------------------\n");
fprintf(stdout,"usage: %s [OPTIONS]\n\n", my_progname);
fprintf(stdout,"\
@@ -4707,7 +5363,11 @@ int main(int argc, char **argv)
get_options(argc,argv);
client_connect(); /* connect to server */
- client_query(); /* simple client query test */
+
+ /* Start of tests */
+ test_multi_query();
+ test_select_show(); /* test show syntax */
+ test_prepare_alter(); /* change table schema in middle of prepare */
test_manual_sample(); /* sample in the manual */
test_bind_result(); /* result bind test */
test_fetch_null(); /* to fetch null data */
@@ -4721,65 +5381,72 @@ int main(int argc, char **argv)
test_fetch_double(); /* to fetch double to all types */
test_bind_result_ext(); /* result bind test - extension */
test_bind_result_ext1(); /* result bind test - extension */
- test_select_direct(); /* direct select - protocol_simple debug */
+ test_select_direct(); /* direct select - protocol_simple debug */
test_select_prepare(); /* prepare select - protocol_prep debug */
test_select_direct(); /* direct select - protocol_simple debug */
test_select(); /* simple select test */
test_select_version(); /* select with variables */
- test_set_variable(); /* set variable prepare */
+ test_set_variable(); /* set variable prepare */
#if NOT_USED
- test_select_meta(); /* select param meta information */
- test_update_meta(); /* update param meta information */
- test_insert_meta(); /* insert param meta information */
+ test_select_meta(); /* select param meta information */
+ test_update_meta(); /* update param meta information */
+ test_insert_meta(); /* insert param meta information */
#endif
- test_simple_update(); /* simple update test */
- test_func_fields(); /* test for new 4.1 MYSQL_FIELD members */
- test_long_data(); /* test for sending text data in chunks */
- test_insert(); /* simple insert test - prepare */
- test_set_variable(); /* prepare with set variables */
- test_tran_innodb(); /* test for mysql_commit(), rollback() and autocommit() */
- test_select_show(); /* prepare - show test */
- test_null(); /* test null data handling */
- test_simple_update(); /* simple prepare - update */
- test_prepare_noparam();/* prepare without parameters */
- test_select(); /* simple prepare-select */
- test_insert(); /* prepare with insert */
- test_bind_result(); /* result bind test */
- test_long_data(); /* long data handling in pieces */
- test_prepare_simple();/* simple prepare */
- test_prepare(); /* prepare test */
- test_null(); /* test null data handling */
- test_debug_example(); /* some debugging case */
- test_update(); /* prepare-update test */
- test_simple_update(); /* simple prepare with update */
- test_long_data(); /* long data handling in pieces */
- test_simple_delete(); /* prepare with delete */
- test_field_names(); /* test for field names */
- test_double_compare();/* float comparision */
- client_query(); /* simple client query test */
- client_store_result();/* usage of mysql_store_result() */
- client_use_result(); /* usage of mysql_use_result() */
- test_tran_bdb(); /* transaction test on BDB table type */
- test_tran_innodb(); /* transaction test on InnoDB table type */
- test_prepare_ext(); /* test prepare with all types conversion -- TODO */
- test_prepare_syntax();/* syntax check for prepares */
+ test_simple_update(); /* simple update test */
+ test_func_fields(); /* test for new 4.1 MYSQL_FIELD members */
+ test_long_data(); /* test for sending text data in chunks */
+ test_insert(); /* simple insert test - prepare */
+ test_set_variable(); /* prepare with set variables */
+ test_tran_innodb(); /* test for mysql_commit(), rollback() and autocommit() */
+ test_select_show(); /* prepare - show test */
+ test_null(); /* test null data handling */
+ test_simple_update(); /* simple prepare - update */
+ test_prepare_noparam(); /* prepare without parameters */
+ test_select(); /* simple prepare-select */
+ test_insert(); /* prepare with insert */
+ test_bind_result(); /* result bind test */
+ test_long_data(); /* long data handling in pieces */
+ test_prepare_simple(); /* simple prepare */
+ test_prepare(); /* prepare test */
+ test_null(); /* test null data handling */
+ test_debug_example(); /* some debugging case */
+ test_update(); /* prepare-update test */
+ test_simple_update(); /* simple prepare with update */
+ test_long_data(); /* long data handling in pieces */
+ test_simple_delete(); /* prepare with delete */
+ test_field_names(); /* test for field names */
+ test_double_compare(); /* float comparision */
+ client_query(); /* simple client query test */
+ client_store_result(); /* usage of mysql_store_result() */
+ client_use_result(); /* usage of mysql_use_result() */
+ test_tran_bdb(); /* transaction test on BDB table type */
+ test_tran_innodb(); /* transaction test on InnoDB table type */
+ test_prepare_ext(); /* test prepare with all types conversion -- TODO */
+ test_prepare_syntax(); /* syntax check for prepares */
test_prepare_field_result(); /* prepare meta info */
test_prepare_resultset(); /* prepare meta info test */
- test_field_names(); /* test for field names */
- test_field_flags(); /* test to help .NET provider team */
- test_long_data_str(); /* long data handling */
- test_long_data_str1();/* yet another long data handling */
- test_long_data_bin(); /* long binary insertion */
- test_warnings(); /* show warnings test */
- test_errors(); /* show errors test */
- test_select_simple(); /* simple select prepare */
+ test_field_names(); /* test for field names */
+ test_field_flags(); /* test to help .NET provider team */
+ test_long_data_str(); /* long data handling */
+ test_long_data_str1(); /* yet another long data handling */
+ test_long_data_bin(); /* long binary insertion */
+ test_warnings(); /* show warnings test */
+ test_errors(); /* show errors test */
+ test_select_simple(); /* simple select prepare */
test_prepare_resultset();/* prepare meta info test */
- test_func_fields(); /* FUNCTION field info */
+ test_func_fields(); /* FUNCTION field info */
/*test_stmt_close(); */ /* mysql_stmt_close() test -- hangs */
test_prepare_field_result(); /* prepare meta info */
- test_multi_stmt(); /* multi stmt test */
- client_disconnect(); /* disconnect from server */
-
+ test_multi_stmt(); /* multi stmt test */
+ test_store_result(); /* test the store_result */
+ test_store_result1(); /* test store result without buffers */
+ test_store_result2(); /* test store result for misc case */
+ test_multi_stmt(); /* test multi stmt */
+ test_subselect(); /* test subselect prepare */
+ test_multi_query(); /* test multi query exec */
+ /* End of tests */
+
+ client_disconnect(); /* disconnect from server */
fprintf(stdout,"\n\nSUCCESS !!!\n");
return(0);
}