diff options
author | unknown <venu@myvenu.com> | 2002-06-13 17:28:25 -0700 |
---|---|---|
committer | unknown <venu@myvenu.com> | 2002-06-13 17:28:25 -0700 |
commit | 7fb7a8f210cb38830fe3185735256ab0f284305e (patch) | |
tree | bf1e9c9cce7a996fef38b378e93148f08600cca3 /tests | |
parent | 1fac9fecf7d93e42cefbecef6c1636b03af54955 (diff) | |
download | mariadb-git-7fb7a8f210cb38830fe3185735256ab0f284305e.tar.gz |
client_test.c:
new file
'C' Test case for all prototype changes - Assert based which covers all most all scenarios
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 15 | ||||
-rw-r--r-- | tests/client_test.c | 2539 |
2 files changed, 2553 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index cdb623fa2a0..241caf74465 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -24,7 +24,20 @@ EXTRA_DIST = auto_increment.res auto_increment.tst \ insert_and_repair.pl \ grant.pl grant.res test_delayed_insert.pl \ pmail.pl mail_to_db.pl table_types.pl \ - udf_test udf_test.res + udf_test udf_test.res + +# +# C Test for 4.1 protocol +# +INCLUDES = -I$(srcdir)/../include $(openssl_includes) \ + -I../include -I$(srcdir)/.. -I$(top_srcdir) \ + -I.. +LIBS = @CLIENT_LIBS@ +LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysql/libmysqlclient.la +noinst_PROGRAMS = client_test +client_test_LDADD= $(LDADD) $(CXXLDFLAGS) +client_test_SOURCES= client_test.c +client_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/tests/client_test.c b/tests/client_test.c new file mode 100644 index 00000000000..169ab9556d1 --- /dev/null +++ b/tests/client_test.c @@ -0,0 +1,2539 @@ +/*************************************************************************** + client_test.c - description + ------------------------- + begin : Sun Feb 3 2002 + copyright : (C) MySQL AB 1995-2002, www.mysql.com + author : venu ( venu@mysql.com ) + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +/*************************************************************************** + * * + * This is a test sample to test the new features in MySQL client-server * + * protocol * + * * + ***************************************************************************/ + +#include <my_global.h> + +#if defined(__WIN__) || defined(_WIN32) || defined(_WIN64) +#include <windows.h> +#endif + +/* standrad headers */ +#include <stdio.h> +#include <string.h> + +#include <assert.h> + + +/* mysql client headers */ +#include <my_sys.h> +#include <mysql.h> +#include <my_getopt.h> + +#ifndef true +#define true 1 +#endif + +#ifndef false +#define false 0 +#endif + +static char *opt_db="test", *opt_user="venu", *opt_password="venu"; +static char *opt_host=0, *opt_mysql_unix_port=0; +static uint opt_mysql_port; + +#define myheader(str) { printf("\n\n#######################\n"); \ + printf("%s",str); \ + printf("\n#######################\n"); \ + } + +void print_error(MYSQL *mysql, const char *msg, int line, char *file) +{ + if(mysql) + { + fprintf(stderr,"\n %d@[MySQL]%s\n",line,mysql_error(mysql)); + } + else if(msg) fprintf(stderr, " %d@%s\n", line,msg); +} + +void print_st_error(MYSQL_STMT *stmt, const char *msg, int line, char *file) +{ + if(stmt) + { + fprintf(stderr,"\n %d@[MySQL]%s\n",line, mysql_stmt_error(stmt)); + } + else if(msg) fprintf(stderr, " %d@%s\n", line,msg); +} + +#define myerror(mysql, msg) print_error(mysql, msg, __LINE__, __FILE__) +#define mysterror(stmt, msg) print_st_error(stmt, msg, __LINE__, __FILE__) + +#define myassert(x) if(x) {\ + fprintf(stderr,"ASSERTION FAILED AT %d@%s\n",__LINE__, __FILE__);\ + exit(1);\ +} +#define myassert_r(x) if(!x) {\ + fprintf(stderr,"ASSERTION FAILED AT %d@%s\n",__LINE__, __FILE__);\ + exit(1);\ +} + +#define myquery(mysql,r) \ +if( r != 0) \ +{ \ + myerror(mysql,NULL); \ + myassert(true);\ +} + +#define myquery_r(mysql,r) \ +if( r != 0) \ +{ \ + myerror(mysql,NULL); \ + myassert_r(true);\ +} + +#define mystmt(stmt,r) \ +if( r != 0) \ +{ \ + mysterror(stmt,NULL); \ + myassert(true);\ +} + +#define myxquery(mysql,stmt) \ +if( stmt == 0) \ +{ \ + myerror(mysql,NULL); \ + myassert(true);\ +} + +#define myxquery_r(mysql,stmt) \ +if( stmt == 0) \ +{ \ + myerror(mysql,NULL); \ + myassert_r(true);\ +} \ +else myassert(true); + +#define mystmt_r(stmt,r) \ +if( r != 0) \ +{ \ + mysterror(stmt,NULL); \ + myassert_r(true);\ +} + +#define mytest(mysql,x) if(!x) {myerror(mysql,NULL);myassert(true);} +#define mytest_r(mysql,x) if(x) {myerror(mysql,NULL);myassert(true);} + +/******************************************************** +* connect to the server * +*********************************************************/ +MYSQL *client_connect() +{ + MYSQL *mysql; + + myheader("client_connect"); + + if(!(mysql = mysql_init(NULL))) + { + myerror(NULL, "mysql_init() failed"); + exit(0); + } + if (!(mysql_real_connect(mysql,opt_host,opt_user, + opt_password, opt_db, opt_mysql_port, + opt_mysql_unix_port, 0))) + { + myerror(mysql, "connection failed"); + exit(0); + } + + /* set AUTOCOMMIT to ON*/ + mysql_autocommit(mysql, true); + return(mysql); +} + +/******************************************************** +* close the connection * +*********************************************************/ +void client_disconnect(MYSQL *mysql) +{ + myheader("client_disconnect"); + + mysql_close(mysql); +} + +/******************************************************** +* query processing * +*********************************************************/ +void client_query(MYSQL *mysql) +{ + int rc; + + myheader("client_query"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS myclient_test"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE myclient_test(id int primary key auto_increment,\ + name varchar(20))"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE myclient_test(id int, name varchar(20))"); + myquery_r(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('mysql')"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('monty')"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('venu')"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('deleted')"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"UPDATE myclient_test SET name='updated' WHERE name='deleted'"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"UPDATE myclient_test SET id=3 WHERE name='updated'"); + myquery_r(mysql,rc); +} + +/******************************************************** +* print dashes * +*********************************************************/ +void my_print_dashes(MYSQL_RES *result) +{ + MYSQL_FIELD *field; + unsigned int i,j; + + mysql_field_seek(result,0); + fputc('\t',stdout); + fputc('+', stdout); + + for(i=0; i< mysql_num_fields(result); i++) + { + field = mysql_fetch_field(result); + for(j=0; j < field->max_length+2; j++) + fputc('-',stdout); + fputc('+',stdout); + } + fputc('\n',stdout); +} + +/******************************************************** +* print resultset metadata information * +*********************************************************/ +void my_print_result_metadata(MYSQL_RES *result) +{ + MYSQL_FIELD *field; + unsigned int i,j; + unsigned int field_count; + + mysql_field_seek(result,0); + fputc('\n', stdout); + + field_count = mysql_num_fields(result); + for(i=0; i< field_count; i++) + { + field = mysql_fetch_field(result); + j = strlen(field->name); + if(j < field->max_length) + j = field->max_length; + if(j < 4 && !IS_NOT_NULL(field->flags)) + j = 4; + field->max_length = j; + } + my_print_dashes(result); + fputc('\t',stdout); + fputc('|', stdout); + + mysql_field_seek(result,0); + for(i=0; i< field_count; i++) + { + field = mysql_fetch_field(result); + fprintf(stdout, " %-*s |",field->max_length, field->name); + } + fputc('\n', stdout); + my_print_dashes(result); +} + +/******************************************************** +* process the result set * +*********************************************************/ +int my_process_result_set(MYSQL *mysql, MYSQL_RES *result) +{ + MYSQL_ROW row; + MYSQL_FIELD *field; + unsigned int i; + unsigned int row_count=0; + + my_print_result_metadata(result); + + while((row = mysql_fetch_row(result)) != NULL) + { + mysql_field_seek(result,0); + fputc('\t',stdout); + fputc('|',stdout); + + for(i=0; i< mysql_num_fields(result); i++) + { + field = mysql_fetch_field(result); + if(row[i] == NULL) + fprintf(stdout, " %-*s |", field->max_length, "NULL"); + else if (IS_NUM(field->type)) + fprintf(stdout, " %*s |", field->max_length, row[i]); + else + fprintf(stdout, " %-*s |", field->max_length, row[i]); + } + fputc('\t',stdout); + fputc('\n',stdout); + row_count++; + } + my_print_dashes(result); + + if (mysql_errno(mysql) != 0) + fprintf(stderr, "\n\tmysql_fetch_row() failed\n"); + else + fprintf(stdout,"\n\t%lu rows returned\n", row_count); + return(row_count); +} + +/******************************************************** +* store result processing * +*********************************************************/ +void client_store_result(MYSQL *mysql) +{ + MYSQL_RES *result; + int rc; + + myheader("client_store_result"); + + rc = mysql_query(mysql, "SELECT * FROM myclient_test"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + mysql_free_result(result); +} + +/******************************************************** +* use result processing * +*********************************************************/ +void client_use_result(MYSQL *mysql) +{ + MYSQL_RES *result; + int rc; + myheader("client_use_result"); + + rc = mysql_query(mysql, "SELECT * FROM myclient_test"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_use_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + mysql_free_result(result); +} + + +/******************************************************** +* query processing * +*********************************************************/ +void test_debug_example(MYSQL *mysql) +{ + int rc; + MYSQL_RES *result; + + myheader("test_debug_example"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_debug_example"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_debug_example(id int primary key auto_increment,\ + name varchar(20),xxx int)"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO test_debug_example(name) VALUES('mysql')"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"UPDATE test_debug_example SET name='updated' WHERE name='deleted'"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"SELECT * FROM test_debug_example"); + myquery(mysql,rc); + + result = mysql_use_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + mysql_free_result(result); + + rc = mysql_query(mysql,"DROP TABLE test_debug_example"); + myquery(mysql,rc); +} + +/******************************************************** +* to test autocommit feature * +*********************************************************/ +void test_tran_bdb(MYSQL *mysql) +{ + MYSQL_RES *result; + MYSQL_ROW row; + int rc; + + myheader("test_tran_bdb"); + + /* set AUTOCOMMIT to OFF */ + rc = mysql_autocommit(mysql, false); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_demo_transaction"); + myquery(mysql,rc); + + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* create the table 'mytran_demo' of type BDB' or 'InnoDB' */ + rc = mysql_query(mysql,"CREATE TABLE my_demo_transaction(col1 int ,col2 varchar(30)) TYPE = BDB"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* insert a row and commit the transaction */ + rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(10,'venu')"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* now insert the second row, and rollback the transaction */ + rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(20,'mysql')"); + myquery(mysql,rc); + + rc = mysql_rollback(mysql); + myquery(mysql,rc); + + /* delete first row, and rollback it */ + rc = mysql_query(mysql,"DELETE FROM my_demo_transaction WHERE col1 = 10"); + myquery(mysql,rc); + + rc = mysql_rollback(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_use_result(mysql); + mytest(mysql,result); + + row = mysql_fetch_row(result); + mytest(mysql,row); + + row = mysql_fetch_row(result); + mytest_r(mysql,row); + + mysql_free_result(result); + mysql_autocommit(mysql,true); +} + +/******************************************************** +* to test autocommit feature * +*********************************************************/ +void test_tran_innodb(MYSQL *mysql) +{ + MYSQL_RES *result; + MYSQL_ROW row; + int rc; + + myheader("test_tran_innodb"); + + /* set AUTOCOMMIT to OFF */ + rc = mysql_autocommit(mysql, false); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_demo_transaction"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* create the table 'mytran_demo' of type BDB' or 'InnoDB' */ + rc = mysql_query(mysql,"CREATE TABLE my_demo_transaction(col1 int ,col2 varchar(30)) TYPE = InnoDB"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* insert a row and commit the transaction */ + rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(10,'venu')"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* now insert the second row, and rollback the transaction */ + rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(20,'mysql')"); + myquery(mysql,rc); + + rc = mysql_rollback(mysql); + myquery(mysql,rc); + + /* delete first row, and rollback it */ + rc = mysql_query(mysql,"DELETE FROM my_demo_transaction WHERE col1 = 10"); + myquery(mysql,rc); + + rc = mysql_rollback(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_use_result(mysql); + mytest(mysql,result); + + row = mysql_fetch_row(result); + mytest(mysql,row); + + row = mysql_fetch_row(result); + mytest_r(mysql,row); + + mysql_free_result(result); + mysql_autocommit(mysql,true); +} + +/******************************************************** +* to test simple prepares of all DML statements * +*********************************************************/ +void test_prepare_simple(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count,length; + const char *query; + + myheader("test_prepare_simple"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_simple"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_prepare_simple(id int, name varchar(50))"); + myquery(mysql,rc); + + /* alter table */ + query = "ALTER TABLE test_prepare_simple ADD new char(20)"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout,"\n total parameters in alter:%d\n", param_count); + assert(param_count == 0); + mysql_stmt_close(stmt); + + /* insert */ + query = "INSERT INTO test_prepare_simple VALUES(?,?)"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout,"\n total parameters in insert:%d\n", param_count); + assert(param_count == 2); + mysql_stmt_close(stmt); + + /* update */ + query = "UPDATE test_prepare_simple SET id=? WHERE id=? AND name= ?"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout,"\n total parameters in update:%d\n", param_count); + assert(param_count == 3); + mysql_stmt_close(stmt); + + /* delete */ + query = "DELETE FROM test_prepare_simple WHERE id=10"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout,"\n total parameters in delete:%d\n", param_count); + assert(param_count == 0); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + mysql_stmt_close(stmt); + + /* delete */ + query = "DELETE FROM test_prepare_simple WHERE id=?"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout,"\n total parameters in delete:%d\n", param_count); + assert(param_count == 1); + + rc = mysql_execute(stmt); + mystmt_r(stmt, rc); + mysql_stmt_close(stmt); + + /* select */ + query = "SELECT * FROM test_prepare_simple WHERE id=? AND name= ?"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout,"\n total parameters in select:%d\n", param_count); + assert(param_count == 2); + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); +} + + +/******************************************************** +* to test simple prepare field results * +*********************************************************/ +void test_prepare_field_result(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count,length; + const char *query; + + myheader("test_prepare_field_result"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_field_result"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_prepare_field_result(id int, name varchar(50), extra int)"); + myquery(mysql,rc); + + + /* insert */ + query = "SELECT id,name FROM test_prepare_field_result WHERE id=?"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout,"\n total parameters in insert:%d\n", param_count); + assert(param_count == 1); + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); +} + + +/******************************************************** +* to test simple prepare field results * +*********************************************************/ +void test_prepare_syntax(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,length; + const char *query; + + myheader("test_prepare_syntax"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_syntax"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_prepare_syntax(id int, name varchar(50), extra int)"); + myquery(mysql,rc); + + query = "INSERT INTO test_prepare_syntax VALUES(?"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery_r(mysql,stmt); + + query = "SELECT id,name FROM test_prepare_syntax WHERE id=? AND WHERE"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery_r(mysql,stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); +} + + +/******************************************************** +* to test simple prepare * +*********************************************************/ +void test_prepare(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + char query[200]; + long 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]={0}; + + myheader("test_prepare"); + + rc = mysql_autocommit(mysql, true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_prepare"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE my_prepare(col1 tinyint,\ + col2 varchar(50), col3 int,\ + col4 smallint, col5 bigint, \ + col6 float, col7 double )"); + myquery(mysql,rc); + + /* insert by prepare */ + strcpy(query,"INSERT INTO my_prepare VALUES(?,?,?,?,?,?,?)"); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 7); + + /* tinyint */ + bind[0].buffer_type=FIELD_TYPE_TINY; + bind[0].buffer=(gptr)&tiny_data; + /* string */ + bind[1].buffer_type=FIELD_TYPE_STRING; + bind[1].buffer=str_data; + /* integer */ + bind[2].buffer_type=FIELD_TYPE_LONG; + bind[2].buffer= (gptr)&int_data; + /* short */ + bind[3].buffer_type=FIELD_TYPE_SHORT; + bind[3].buffer= (gptr)&small_data; + /* bigint */ + bind[4].buffer_type=FIELD_TYPE_LONGLONG; + bind[4].buffer= (gptr)&big_data; + /* float */ + bind[5].buffer_type=FIELD_TYPE_DOUBLE; + bind[5].buffer= (gptr)&real_data; + /* double */ + bind[6].buffer_type=FIELD_TYPE_DOUBLE; + bind[6].buffer= (gptr)&double_data; + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + int_data = 320; + small_data = 1867; + big_data = 1000; + real_data = 2; + double_data = 6578.001; + + /* now, execute the prepared statement to insert 10 records.. */ + for (tiny_data=0; tiny_data < 100; tiny_data++) + { + bind[1].buffer_length = sprintf(str_data,"MySQL%d",int_data); + rc = mysql_execute(stmt); + mystmt(stmt, rc); + int_data += 25; + small_data += 10; + big_data += 100; + real_data += 1; + double_data += 10.09; + } + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM my_prepare"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert((int)tiny_data == my_process_result_set(mysql,result)); + mysql_free_result(result); + +} + +/******************************************************** +* to test double comparision * +*********************************************************/ +void test_double_compare(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + char query[200],real_data[10], tiny_data; + double double_data; + MYSQL_RES *result; + MYSQL_BIND bind[3]={0}; + + myheader("test_double_compare"); + + rc = mysql_autocommit(mysql, true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_double_compare"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_double_compare(col1 tinyint,\ + col2 float, col3 double )"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO test_double_compare VALUES(1,10.2,34.5)"); + myquery(mysql,rc); + + strcpy(query, "UPDATE test_double_compare SET col1=100 WHERE col1 = ? AND col2 = ? AND COL3 = ?"); + stmt = mysql_prepare(mysql,query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in update:%d\n", param_count); + + /* tinyint */ + bind[0].buffer_type=FIELD_TYPE_TINY; + bind[0].buffer=(gptr)&tiny_data; + /* string->float */ + bind[1].buffer_type=FIELD_TYPE_STRING; + bind[1].buffer= (gptr)&real_data; + /* double */ + bind[2].buffer_type=FIELD_TYPE_DOUBLE; + bind[2].buffer= (gptr)&double_data; + + tiny_data = 1; + strcpy(real_data,"10.2"); + double_data = 34.5; + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + rc = (int)mysql_affected_rows(mysql); + printf("\n total affected rows:%d",rc); + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM test_double_compare"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert((int)tiny_data == my_process_result_set(mysql,result)); + mysql_free_result(result); + +} + + + + +/******************************************************** +* to test simple null * +*********************************************************/ +void test_null(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + int nData=1; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + myheader("test_null"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_null"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_null(col1 int,col2 varchar(50))"); + myquery(mysql,rc); + + /* insert by prepare, wrong column name */ + query = "INSERT INTO test_null(col3,col2) VALUES(?,?)"; + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery_r(mysql,stmt); + + query = "INSERT INTO test_null(col1,col2) VALUES(?,?)"; + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 2); + + bind[0].is_null=1; + bind[1].is_null=1; /* string data */ + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + /* now, execute the prepared statement to insert 10 records.. */ + for (nData=0; nData<9; nData++) + { + rc = mysql_execute(stmt); + mystmt(stmt, rc); + } + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM test_null"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(nData == my_process_result_set(mysql,result)); + mysql_free_result(result); + +} + + + +/******************************************************** +* to test simple select * +*********************************************************/ +void test_select_simple(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,length; + const char query[100]; + MYSQL_RES *result; + + myheader("test_select_simple"); + + + /* insert by prepare */ + strcpy((char *)query, "SHOW TABLES FROM mysql"); + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + length = mysql_param_count(stmt); + fprintf(stdout," total parameters in select:%d\n", length); + assert(length == 0); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + mysql_free_result(result); + +#if 0 + strcpy((char *)query , "SELECT @@ VERSION"); + length = strlen(query); + rc = mysql_query(mysql,query); + mytest(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + mysql_free_result(result); +#endif +} + + + +/******************************************************** +* to test simple select * +*********************************************************/ +void test_select(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count=0; + const char *query; + char *szData="updated-value"; + int nData=1; + MYSQL_BIND bind[2]={0}; + MYSQL_RES *result; + + + myheader("test_select"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_select"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_select(id int,name varchar(50))"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* insert a row and commit the transaction */ + rc = mysql_query(mysql,"INSERT INTO test_select VALUES(10,'venu')"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* now insert the second row, and rollback the transaction */ + rc = mysql_query(mysql,"INSERT INTO test_select VALUES(20,'mysql')"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + query = "SELECT * FROM test_select WHERE id=? AND name=?"; + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in select:%d\n", param_count); + assert(param_count == 2); + + /* string data */ + nData=10;szData="venu"; + bind[1].buffer_type=FIELD_TYPE_STRING; + bind[1].buffer=szData; + bind[0].buffer=(gptr)&nData; + bind[0].buffer_type=FIELD_TYPE_LONG; + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert( 1 == my_process_result_set(mysql,result)); + mysql_free_result(result); + + mysql_stmt_close(stmt); + + /* bit complicated SELECT */ +} + + + + +/******************************************************** +* to test simple update * +*********************************************************/ +void test_simple_update(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + char *szData="updated-value"; + int nData=1; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + + myheader("test_simple_update"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_update"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_update(col1 int,\ + col2 varchar(50), col3 int )"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO test_update VALUES(1,'MySQL',100)"); + myquery(mysql,rc); + + assert(1 == mysql_affected_rows(mysql)); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* insert by prepare */ + query = "UPDATE test_update SET col2=? WHERE col1=?"; + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in update:%d\n", param_count); + assert(param_count == 2); + + nData=1; + bind[0].buffer_type=FIELD_TYPE_STRING; + bind[0].buffer=szData; /* string data */ + bind[1].buffer=(gptr)&nData; + bind[1].buffer_type=FIELD_TYPE_LONG; + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + assert(1 == mysql_affected_rows(mysql)); + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM test_update"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(1 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + +/******************************************************** +* to test simple long data handling * +*********************************************************/ +void test_long_data(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + char *data=NullS; + int length; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + + myheader("test_long_data"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_long_data(col1 int,\ + col2 long varchar, col3 long varbinary)"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + query = "INSERT INTO test_long_data(col2) VALUES(?)"; + length=strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 1); + + bind[0].buffer=data; /* string data */ + bind[0].is_long_data=1; /* specify long data suppy during run-time */ + + /* Non string or binary type, error */ + bind[0].buffer_type=FIELD_TYPE_LONG; + rc = mysql_bind_param(stmt,bind); + fprintf(stdout,"mysql_bind_param() returned %d\n",rc); + mystmt_r(stmt, rc); + + bind[0].buffer_type=FIELD_TYPE_STRING; + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + + data = "Micheal"; + + /* supply data in pieces */ + rc = mysql_send_long_data(stmt,0,data,7); + mystmt(stmt, rc); + + /* try to execute mysql_execute() now, it should return + MYSQL_NEED_DATA as the long data supply is not yet over + */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + + /* append data again ..*/ + + /* supply data in pieces */ + data = " 'monty' widenius"; + rc = mysql_send_long_data(stmt,0,data,17); + mystmt(stmt, rc); + + /* Indiate end of data supply */ + rc = mysql_send_long_data(stmt,0,0,MYSQL_LONG_DATA_END); + mystmt(stmt, rc); + + /* execute */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + mystmt(stmt,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* now fetch the results ..*/ + rc = mysql_query(mysql,"SELECT col2 FROM test_long_data"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(1 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + +/******************************************************** +* to test long data (string) handling * +*********************************************************/ +void test_long_data_str(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + char data[255]; + int length; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + + myheader("test_long_data_str"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_str"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_long_data_str(id int, longstr long varchar)"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + query = "INSERT INTO test_long_data_str VALUES(?,?)"; + length=strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 2); + + bind[0].buffer = (gptr)&length; + bind[0].buffer_type = FIELD_TYPE_LONG; + + bind[1].buffer=data; /* string data */ + bind[1].is_long_data=1; /* specify long data suppy during run-time */ + bind[1].buffer_type=FIELD_TYPE_STRING; + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + length = 10; + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + + length = 40; + sprintf(data,"MySQL AB"); + + /* supply data in pieces */ + { + int i; + for(i=0; i < 4; i++) + { + rc = mysql_send_long_data(stmt,1,(char *)data,5); + mystmt(stmt, rc); + } + + /* try to execute mysql_execute() now, it should return + MYSQL_NEED_DATA as the long data supply is not yet over + */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + } + + /* Indiate end of data supply */ + rc = mysql_send_long_data(stmt,1,0,MYSQL_LONG_DATA_END); + mystmt(stmt, rc); + + /* execute */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + mystmt(stmt,rc); + + mysql_stmt_close(stmt); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* now fetch the results ..*/ + rc = mysql_query(mysql,"SELECT LENGTH(longstr), longstr FROM test_long_data_str"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(1 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + +/******************************************************** +* to test long data (string) handling * +*********************************************************/ +void test_long_data_str1(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + char *data="MySQL AB"; + int length; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + + myheader("test_long_data_str1"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_str"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_long_data_str(longstr long varchar,blb long varbinary)"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + query = "INSERT INTO test_long_data_str VALUES(?,?)"; + length=strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 2); + + bind[0].buffer=data; /* string data */ + bind[0].is_long_data=1; /* specify long data suppy during run-time */ + bind[0].buffer_type=FIELD_TYPE_STRING; + + bind[1] = bind[0]; + bind[1].buffer_type=FIELD_TYPE_BLOB; + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + length = 10; + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + + length = strlen(data); + + /* supply data in pieces */ + { + int i; + for(i=0; i < 2; i++) + { + rc = mysql_send_long_data(stmt,0,data,length); + mystmt(stmt, rc); + + rc = mysql_send_long_data(stmt,1,data,2); + mystmt(stmt, rc); + } + /* try to execute mysql_execute() now, it should return + MYSQL_NEED_DATA as the long data supply is not yet over + */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + } + + /* Indiate end of data supply */ + rc = mysql_send_long_data(stmt,1,0,MYSQL_LONG_DATA_END); + mystmt(stmt, rc); + + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + + rc = mysql_send_long_data(stmt,0,0,MYSQL_LONG_DATA_END); + mystmt(stmt, rc); + + /* execute */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + mystmt(stmt,rc); + + mysql_stmt_close(stmt); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* now fetch the results ..*/ + rc = mysql_query(mysql,"SELECT LENGTH(longstr),longstr,LENGTH(blb),blb FROM test_long_data_str"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(1 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + +/******************************************************** +* to test long data (binary) handling * +*********************************************************/ +void test_long_data_bin(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + char data[255]; + int length; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + + myheader("test_long_data_bin"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_bin"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_long_data_bin(id int, longbin long varbinary)"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + query = "INSERT INTO test_long_data_bin VALUES(?,?)"; + length=strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 2); + + bind[0].buffer = (gptr)&length; + bind[0].buffer_type = FIELD_TYPE_LONG; + + bind[1].buffer=data; /* string data */ + bind[1].is_long_data=1; /* specify long data suppy during run-time */ + bind[1].buffer_type=FIELD_TYPE_LONG_BLOB; + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + length = 10; + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + + sprintf(data,"MySQL AB"); + + /* supply data in pieces */ + { + int i; + for(i=0; i < 100; i++) + { + rc = mysql_send_long_data(stmt,1,(char *)data,4); + mystmt(stmt, rc); + } + + /* try to execute mysql_execute() now, it should return + MYSQL_NEED_DATA as the long data supply is not yet over + */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + assert(rc == MYSQL_NEED_DATA); + } + + /* Indiate end of data supply */ + rc = mysql_send_long_data(stmt,1,0,MYSQL_LONG_DATA_END); + mystmt(stmt, rc); + + /* execute */ + rc = mysql_execute(stmt); + fprintf(stdout,"mysql_execute() returned %d\n",rc); + mystmt(stmt,rc); + + mysql_stmt_close(stmt); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* now fetch the results ..*/ + rc = mysql_query(mysql,"SELECT LENGTH(longbin), longbin FROM test_long_data_bin"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(1 == my_process_result_set(mysql,result)); + mysql_free_result(result); + free(data); +} + + +/******************************************************** +* to test simple delete * +*********************************************************/ +void test_simple_delete(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + char szData[30]={0}; + int nData=1; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + + myheader("test_simple_delete"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_simple_delete"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_simple_delete(col1 int,\ + col2 varchar(50), col3 int )"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO test_simple_delete VALUES(1,'MySQL',100)"); + myquery(mysql,rc); + + assert(1 == mysql_affected_rows(mysql)); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* insert by prepare */ + query = "DELETE FROM test_simple_delete WHERE col1=? AND col2=? AND col3=100"; + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in delete:%d\n", param_count); + assert(param_count == 2); + + nData=1; + bind[1].buffer_type=FIELD_TYPE_STRING; + bind[1].buffer=szData; /* string data */ + bind[0].buffer=(gptr)&nData; + bind[0].buffer_type=FIELD_TYPE_LONG; + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + strcpy(szData,"MySQL"); + //bind[1].buffer_length = 5; + nData=1; + rc = mysql_execute(stmt); + mystmt(stmt, rc); + assert(1 == mysql_affected_rows(mysql)); + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM test_simple_delete"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(0 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + + +/******************************************************** +* to test simple update * +*********************************************************/ +void test_update(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + const char *query; + char *szData="updated-value"; + int nData=1; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + + myheader("test_update"); + + rc = mysql_autocommit(mysql,true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_update"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_update(col1 int primary key auto_increment,\ + col2 varchar(50), col3 int )"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + query = "INSERT INTO test_update(col2,col3) VALUES(?,?)"; + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 2); + + /* string data */ + szData="inserted-data"; + bind[0].buffer_type=FIELD_TYPE_STRING; + bind[0].buffer=szData; + bind[1].buffer=(gptr)&nData; + bind[1].buffer_type=FIELD_TYPE_LONG; + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + nData=100; + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + assert(1 == mysql_affected_rows(mysql)); + mysql_stmt_close(stmt); + + /* insert by prepare */ + query = "UPDATE test_update SET col2=? WHERE col3=?"; + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in update:%d\n", param_count); + assert(param_count == 2); + nData=100;szData="updated-data"; + + + bind[0].buffer_type=FIELD_TYPE_STRING; + bind[0].buffer=szData; + bind[1].buffer=(gptr)&nData; + bind[1].buffer_type=FIELD_TYPE_LONG; + + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + assert(1 == mysql_affected_rows(mysql)); + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM test_update"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(1 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + +/******************************************************** +* to test simple prepare * +*********************************************************/ +void test_init_prepare(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int length, param_count, rc; + const char *query; + MYSQL_RES *result; + + myheader("test_init_prepare"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_prepare"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE my_prepare(col1 int ,col2 varchar(50))"); + myquery(mysql,rc); + + + /* insert by prepare */ + query = "INSERT INTO my_prepare VALUES(10,'venu')"; + length = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 0); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM my_prepare"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(1 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + +/******************************************************** +* to test simple bind result * +*********************************************************/ +void test_bind_result(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc; + const char query[100]; + int nData; + char szData[100]; + MYSQL_BIND bind[2]={0}; + + myheader("test_bind_result"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_bind_result(col1 int ,col2 varchar(50))"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO test_bind_result VALUES(10,'venu')"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"INSERT INTO test_bind_result VALUES(20,'MySQL')"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* fetch */ + + bind[0].buffer_type=FIELD_TYPE_LONG; + bind[0].buffer= (gptr) &nData; /* integer data */ + bind[1].buffer_type=FIELD_TYPE_STRING; + bind[1].buffer=szData; /* string data */ + + strcpy((char *)query , "SELECT * FROM test_bind_result"); + nData = strlen(query); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + rc = mysql_bind_result(stmt,bind); + mystmt(stmt, rc); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + rc = mysql_fetch(stmt); + mystmt(stmt,rc); + + printf("\n row 1:%d,%s",nData, szData); + assert(nData == 10); + assert(strcmp(szData,"venu")==0); + + rc = mysql_fetch(stmt); + mystmt(stmt,rc); + + printf("\n row 2:%d,%s",nData, szData); + assert(nData == 20); + assert(strcmp(szData,"MySQL")==0); + + rc = mysql_fetch(stmt); + assert(rc == MYSQL_NO_DATA); + + mysql_stmt_close(stmt); +} + +/******************************************************** +* to test simple prepare with all possible types * +*********************************************************/ +void test_prepare_ext(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + char *query; + int nData=1; + MYSQL_RES *result; + char tData=1; + short sData=10; + longlong bData=20; + MYSQL_BIND bind_int[6]={0}; + + + myheader("test_prepare_ext"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_ext"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + query = "CREATE TABLE test_prepare_ext\ + (\ + c1 tinyint,\ + c2 smallint,\ + c3 mediumint,\ + c4 int,\ + c5 integer,\ + c6 bigint,\ + c7 float,\ + c8 double,\ + c9 double precision,\ + c10 real,\ + c11 decimal(7,4),\ + c12 numeric(8,4),\ + c13 date,\ + c14 datetime,\ + c15 timestamp(14),\ + c16 time,\ + c17 year,\ + c18 bit,\ + c19 bool,\ + c20 char,\ + c21 char(10),\ + c22 varchar(30),\ + c23 tinyblob,\ + c24 tinytext,\ + c25 blob,\ + c26 text,\ + c27 mediumblob,\ + c28 mediumtext,\ + c29 longblob,\ + c30 longtext,\ + c31 enum('one','two','three'),\ + c32 set('monday','tuesday','wednesday'))"; + + rc = mysql_query(mysql,query); + myquery(mysql,rc); + + /* insert by prepare - all integers */ + query = "INSERT INTO test_prepare_ext(c1,c2,c3,c4,c5,c6) VALUES(?,?,?,?,?,?)"; + stmt = mysql_prepare(mysql,query); + myquery(mysql,rc); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 6); + + /*tinyint*/ + bind_int[0].buffer_type=FIELD_TYPE_TINY; + bind_int[0].buffer= (void *)&tData; + + /*smallint*/ + bind_int[1].buffer_type=FIELD_TYPE_SHORT; + bind_int[1].buffer= (void *)&sData; + + /*mediumint*/ + bind_int[2].buffer_type=FIELD_TYPE_LONG; + bind_int[2].buffer= (void *)&nData; + + /*int*/ + bind_int[3].buffer_type=FIELD_TYPE_LONG; + bind_int[3].buffer= (void *)&nData; + + /*integer*/ + bind_int[4].buffer_type=FIELD_TYPE_LONG; + bind_int[4].buffer= (void *)&nData; + + /*bigint*/ + bind_int[5].buffer_type=FIELD_TYPE_LONGLONG; + bind_int[5].buffer= (void *)&bData; + + rc = mysql_bind_param(stmt,bind_int); + mystmt(stmt, rc); + + /* + * integer to integer + */ + for (nData=0; nData<10; nData++, tData++, sData++,bData++) + { + rc = mysql_execute(stmt); + mystmt(stmt, rc); + } + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT c1,c2,c3,c4,c5,c6 FROM test_prepare_ext"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(nData == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + + + +/******************************************************** +* to test real and alias names * +*********************************************************/ +void test_field_names(MYSQL *mysql) +{ + int rc; + MYSQL_RES *result; + + myheader("test_field_names"); + + printf("\n%d,%d,%d",MYSQL_TYPE_DECIMAL,MYSQL_TYPE_NEWDATE,MYSQL_TYPE_ENUM); + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_field_names1"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_field_names2"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_field_names1(id int,name varchar(50))"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_field_names2(id int,name varchar(50))"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* with table name included with true column name */ + rc = mysql_query(mysql,"SELECT id as 'id-alias' FROM test_field_names1"); + myquery(mysql,rc); + + result = mysql_use_result(mysql); + mytest(mysql,result); + + assert(0 == my_process_result_set(mysql,result)); + mysql_free_result(result); + + /* with table name included with true column name */ + rc = mysql_query(mysql,"SELECT t1.id as 'id-alias',test_field_names2.name FROM test_field_names1 t1,test_field_names2"); + myquery(mysql,rc); + + result = mysql_use_result(mysql); + mytest(mysql,result); + + assert(0 == my_process_result_set(mysql,result)); + mysql_free_result(result); +} + + +/******************************************************** +* to test multi-query execution * +*********************************************************/ +void test_multi_query(MYSQL *mysql) +{ +#if 0 + int rc; + MYSQL_RES *result; + char *sql; + ulong length; + + myheader("test_multi_query"); + sql = "DROP TABLE IF EXISTS t_multi_query;CREATE TABLE t_multi_query(id int,str char(20));\ + INSERT INTO t_multi_query VALUES(10,'original;');\ + UPDATE t_multi_query SET id=100,str='upd;one' WHERE id = 10;\ + SELECT * FROM t_multi_query"; + + length = strlen(sql); + rc = mysql_multi_query(mysql,sql,length); + myquery(mysql,rc); + + while((result = mysql_next_result(mysql))) + { + my_process_result_set(mysql,result); + mysql_free_result(result); + } +#endif +} + +/******************************************************** +* to test warnings * +*********************************************************/ +void test_warnings(MYSQL *mysql) +{ + int rc; + MYSQL_RES *result; + + myheader("test_warnings"); + + rc = mysql_query(mysql,"USE test"); + myquery(mysql,rc); + + rc = mysql_query(mysql,"SHOW WARNINGS"); + myquery(mysql,rc); + + result = mysql_use_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + mysql_free_result(result); +} + +/******************************************************** +* to test errors * +*********************************************************/ +void test_errors(MYSQL *mysql) +{ + int rc; + MYSQL_RES *result; + + myheader("test_errors"); + + rc = mysql_query(mysql,"SHOW ERRORS"); + myquery(mysql,rc); + + result = mysql_use_result(mysql); + mytest(mysql,result); + + my_process_result_set(mysql,result); + mysql_free_result(result); +} + + + +/******************************************************** +* to test simple prepare-insert * +*********************************************************/ +void test_insert(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + char query[200]; + char str_data[50]; + char tiny_data; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + myheader("test_insert"); + + rc = mysql_autocommit(mysql, true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_insert"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_prep_insert(col1 tinyint,\ + col2 varchar(50))"); + myquery(mysql,rc); + + /* insert by prepare */ + strcpy(query,"INSERT INTO test_prep_insert VALUES(?,?)"); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 2); + + /* tinyint */ + bind[0].buffer_type=FIELD_TYPE_TINY; + bind[0].buffer=(gptr)&tiny_data; + /* string */ + bind[1].buffer_type=FIELD_TYPE_STRING; + bind[1].buffer=str_data; + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + /* now, execute the prepared statement to insert 10 records.. */ + for (tiny_data=0; tiny_data < 3; tiny_data++) + { + bind[1].buffer_length = sprintf(str_data,"MySQL%d",tiny_data); + rc = mysql_execute(stmt); + mystmt(stmt, rc); + } + + mysql_stmt_close(stmt); + + /* now fetch the results ..*/ + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* test the results now, only one row should exists */ + rc = mysql_query(mysql,"SELECT * FROM test_prep_insert"); + myquery(mysql,rc); + + /* get the result */ + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert((int)tiny_data == my_process_result_set(mysql,result)); + mysql_free_result(result); + +} + +/******************************************************** +* to test simple prepare-resultset info * +*********************************************************/ +void test_prepare_resultset(MYSQL *mysql) +{ + MYSQL_STMT *stmt; + int rc,param_count; + char query[200]; + MYSQL_RES *result; + MYSQL_BIND bind[2]={0}; + + myheader("test_prepare_resultset"); + + rc = mysql_autocommit(mysql, true); + myquery(mysql,rc); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_resultset"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_prepare_resultset(id int,\ + name varchar(50),extra double)"); + myquery(mysql,rc); + + /* insert by prepare */ + strcpy(query,"INSERT INTO test_prepare_resultset(id,name) VALUES(?,?)"); + stmt = mysql_prepare(mysql, query); + myxquery(mysql,stmt); + + param_count = mysql_param_count(stmt); + fprintf(stdout," total parameters in insert:%d\n", param_count); + assert(param_count == 2); + + rc = mysql_query(mysql,"SELECT * FROM test_prepare_resultset"); + myquery(mysql,rc); + + /* get the prepared-result */ + result = mysql_prepare_result(stmt); + assert( result != 0); + + my_print_result_metadata(result); + mysql_free_result(result); + + result = mysql_store_result(mysql); + mytest(mysql,result); + + assert(0 == my_process_result_set(mysql,result)); + mysql_free_result(result); + + /* get the prepared-result */ + result = mysql_prepare_result(stmt); + assert( result != 0); + + my_print_result_metadata(result); + mysql_free_result(result); + + + mysql_stmt_close(stmt); +} + +void test_extra() +{ + printf("\n sizeof(sshort):%d",sizeof(signed short)); + printf("\n sizeof(ushort):%d",sizeof(unsigned short)); + printf("\n sizeof(sint):%d",sizeof(signed int)); + printf("\n sizeof(uint):%d",sizeof(unsigned int)); + printf("\n sizeof(slong):%d",sizeof(signed long)); + printf("\n sizeof(ulong):%d",sizeof(unsigned long)); + printf("\n sizeof(float):%d",sizeof(float)); + printf("\n sizeof(double):%d",sizeof(double)); +} + +/******************************************************** +* to test field flags (verify .NET provider) * +*********************************************************/ + +void test_field_flags(MYSQL *mysql) +{ + int rc; + MYSQL_RES *result; + MYSQL_FIELD *field; + unsigned int i; + + + myheader("test_field_flags"); + + rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_field_flags"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + rc = mysql_query(mysql,"CREATE TABLE test_field_flags(id int NOT NULL AUTO_INCREMENT PRIMARY KEY,\ + id1 int NOT NULL,\ + id2 int UNIQUE,\ + id3 int,\ + id4 int NOT NULL,\ + id5 int,\ + KEY(id3,id4))"); + myquery(mysql,rc); + + rc = mysql_commit(mysql); + myquery(mysql,rc); + + /* with table name included with true column name */ + rc = mysql_query(mysql,"SELECT * FROM test_field_flags"); + myquery(mysql,rc); + + result = mysql_use_result(mysql); + mytest(mysql,result); + + mysql_field_seek(result,0); + fputc('\n', stdout); + + for(i=0; i< mysql_num_fields(result); i++) + { + field = mysql_fetch_field(result); + printf("\nfield:%d",i); + if(field->flags & NOT_NULL_FLAG) + printf("\n NOT_NULL_FLAG"); + if(field->flags & PRI_KEY_FLAG) + printf("\n PRI_KEY_FLAG"); + if(field->flags & UNIQUE_KEY_FLAG) + printf("\n UNIQUE_KEY_FLAG"); + if(field->flags & MULTIPLE_KEY_FLAG) + printf("\n MULTIPLE_KEY_FLAG"); + if(field->flags & AUTO_INCREMENT_FLAG) + printf("\n AUTO_INCREMENT_FLAG"); + + } + mysql_free_result(result); +} + +/******************************************************** +* parsing the test arguments * +*********************************************************/ + +static struct my_option long_options[] = +{ + {"help", '?', "Display this help information and exit.", 0, 0, 0, + GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 }, + {"database", 'D', "Initial database after connection.", (gptr*)&opt_db, (gptr*)&opt_db, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + {"host", 'h', "Connect to host", (gptr*)&opt_host, (gptr*)&opt_host, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, +#ifdef __WIN__ + {"pipe", 'W', "Use named pipes to connect to server.", 0, 0, 0, + GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 }, +#endif + {"port", 'P', "Port number to use for connection.", 0, 0, 0, + GET_LONG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + {"socket", 'S', "Socket file to use for connection.", 0, 0, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + {"user", 'u', "User for login if not current user.", (gptr*)&opt_user, (gptr*)&opt_user, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, + {"password", 'p', "Password to use when connecting to server", 0, 0, 0, + GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0 }, + {0, 0, 0, 0} +}; + +static void usage(void) +{ + /* + * show the usage string when the user asks for this + */ + puts("***********************************************************************\n"); + puts(" Test for client-server protocol 4.1"); + 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("-----------------------------------------------------------------------\n"); + printf("usage: %s [OPTIONS]\n\n", my_progname); + printf("\ + -?, --help Display this help message and exit.\n\ + -D --database=... Database name to be used for test.\n\ + -h, --host=... Connect to host.\n\ + -p, --password[=...] Password to use when connecting to server.\n"); +#ifdef __WIN__ + printf("\ + -W, --pipe Use named pipes to connect to server.\n"); +#endif + printf("\ + -P, --port=... Port number to use for connection.\n\ + -S, --socket=... Socket file to use for connection.\n"); +#ifndef DONT_ALLOW_USER_CHANGE + printf("\ + -u, --user=# User for login if not current user.\n"); +#endif + printf("*********************************************************************\n"); +} + + +static void get_options(register int *argc,register char ***argv) +{ + int c,option_index=0; + + while ((c=getopt_long(*argc,*argv,"D:h:p:u::WP:S:V", + long_options, &option_index)) != EOF) + { + switch(c) { + case 'D': + opt_db=optarg; + case 'h': + opt_host=optarg; + break; + case 'W': +#ifdef __WIN__ + opt_mysql_unix_port=MYSQL_NAMEDPIPE; +#endif + break; + case 'P': + opt_mysql_port= (unsigned int) atoi(optarg); + break; + case 'S': + opt_mysql_unix_port= optarg; + break; + case 'u': + opt_user=optarg; + break; + case 'p': + opt_password=optarg; + while (*optarg) *optarg++= 'x'; /* Destroy argument */ + break; + case '?': + usage(); + exit(0); + } + } + (*argc)-=optind; + (*argv)+=optind; + if (*argc != 0) + { + fprintf(stderr,"Too many arguments (%d)\n",*argc); + usage(); + exit(-1); + } + return; +} + + +/******************************************************** +* main routine * +*********************************************************/ +int main(int argc, char *argv[]) +{ + MYSQL *mysql; + + + MY_INIT(argv[0]); + get_options(&argc,&argv); + + mysql = client_connect(); /* connect to server */ + + test_select(mysql); /* simple prepare-select */ + test_insert(mysql); /* prepare with insert */ + test_bind_result(mysql); /* result bind test */ + test_prepare(mysql); /* prepare test */ + test_prepare_simple(mysql);/* simple prepare */ + test_null(mysql); /* test null data handling */ + test_debug_example(mysql); /* some debugging case */ + test_update(mysql); /* prepare-update test */ + test_simple_update(mysql); /* simple prepare with update */ + test_long_data(mysql); /* long data handling in pieces */ + test_simple_delete(mysql); /* prepare with delete */ + test_field_names(mysql); /* test for field names */ + test_double_compare(mysql);/* float comparision */ + client_query(mysql); /* simple client query test */ + client_store_result(mysql);/* usage of mysql_store_result() */ + client_use_result(mysql); /* usage of mysql_use_result() */ + test_tran_bdb(mysql); /* transaction test on BDB table type */ + test_tran_innodb(mysql); /* transaction test on InnoDB table type */ + test_prepare_ext(mysql); /* test prepare with all types conversion -- TODO */ + test_prepare_syntax(mysql);/* syntax check for prepares */ + test_prepare_field_result(mysql); /* prepare meta info */ + test_field_names(mysql); /* test for field names */ + test_field_flags(mysql); /* test to help .NET provider team */ + test_long_data_str(mysql); /* long data handling */ + test_long_data_str1(mysql);/* yet another long data handling */ + test_long_data_bin(mysql); /* long binary insertion */ + test_warnings(mysql); /* show warnings test */ + test_errors(mysql); /* show errors test */ + test_extra(); /* misc case */ + test_select_simple(mysql); /* simple select prepare */ + test_prepare_resultset(mysql);/* prepare meta info test */ + test_multi_query(mysql); /* Not yet supported */ + + + client_disconnect(mysql); /* disconnect from server */ + + fprintf(stdout,"\ndone !!!\n"); + return(0); +} |