summaryrefslogtreecommitdiff
path: root/tests/client_test.c
diff options
context:
space:
mode:
authorunknown <venu@myvenu.com>2003-01-23 22:39:07 -0800
committerunknown <venu@myvenu.com>2003-01-23 22:39:07 -0800
commit7f6e7b1d04ce4d157669cbd19886c4028379954e (patch)
tree0513f85c30a2e9171a0c10f6f31bc73077a6f6c7 /tests/client_test.c
parent99773f6a0a27024ba31edce6e090b14017a04dda (diff)
downloadmariadb-git-7f6e7b1d04ce4d157669cbd19886c4028379954e.tar.gz
Add DATE,TIME and TS tests - MYSQL_TIME handling
Diffstat (limited to 'tests/client_test.c')
-rw-r--r--tests/client_test.c295
1 files changed, 274 insertions, 21 deletions
diff --git a/tests/client_test.c b/tests/client_test.c
index 943123ab713..f77fc964a96 100644
--- a/tests/client_test.c
+++ b/tests/client_test.c
@@ -365,8 +365,9 @@ uint my_process_stmt_result(MYSQL_STMT *stmt)
if (!(result= mysql_prepare_result(stmt)))
{
- while (!mysql_fetch(stmt));
- return 0;
+ while (!mysql_fetch(stmt))
+ row_count++;
+ return row_count;
}
field_count= mysql_num_fields(result);
@@ -400,7 +401,10 @@ uint my_process_stmt_result(MYSQL_STMT *stmt)
if (is_null[i])
fprintf(stdout, " %-*s |", (int) field->max_length, "NULL");
else if (length[i] == 0)
+ {
data[i][0]='\0'; /* unmodified buffer */
+ fprintf(stdout, " %*s |", (int) field->max_length, data[i]);
+ }
else if (IS_NUM(field->type))
fprintf(stdout, " %*s |", (int) field->max_length, data[i]);
else
@@ -2903,14 +2907,14 @@ static void test_fetch_date()
myassert(year == 2010);
myassert(y_length == 4);
- myassert(strcmp(dt,"2010-07-10")==0);
- myassert(dt_length == 10);
+ myassert(strcmp(dt,"2010-07-10 00:00:00")==0);
+ myassert(dt_length == 19);
myassert(ts_4[0] == '\0');
myassert(ts4_length == 0);
- myassert(strcmp(ts_6,"1999-12-29")==0);
- myassert(ts6_length == 10);
+ myassert(strcmp(ts_6,"1999-12-29 00:00:00")==0);
+ myassert(ts6_length == 19);
rc = mysql_fetch(stmt);
myassert(rc == MYSQL_NO_DATA);
@@ -3146,7 +3150,6 @@ static void test_prepare_ext()
int rc;
char *sql;
int nData=1;
- MYSQL_RES *result;
char tData=1;
short sData=10;
longlong bData=20;
@@ -3248,16 +3251,16 @@ static void test_prepare_ext()
rc = mysql_commit(mysql);
myquery(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(rc);
+ stmt = mysql_prepare(mysql,"SELECT c1,c2,c3,c4,c5,c6 FROM test_prepare_ext",100);
+ mystmt_init(stmt);
/* get the result */
- result = mysql_store_result(mysql);
- mytest(result);
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
- myassert(nData == my_process_result_set(result));
- mysql_free_result(result);
+ myassert(nData == (int)my_process_stmt_result(stmt));
+
+ mysql_stmt_close(stmt);
}
@@ -4695,6 +4698,254 @@ static void test_subselect()
#endif
}
+/*
+ Generalized conversion routine to handle DATE, TIME and DATETIME
+ conversion using MYSQL_TIME structure
+*/
+static void test_bind_date_conv(uint row_count)
+{
+ MYSQL_STMT *stmt;
+ uint rc, i, count= row_count;
+ ulong length[4];
+ MYSQL_BIND bind[4];
+ my_bool is_null[4]={0};
+ MYSQL_TIME tm[4];
+ ulong second_part;
+ uint year, month, day, hour, minute, sec;
+
+ stmt = mysql_prepare(mysql,"INSERT INTO test_date VALUES(?,?,?,?)", 100);
+ mystmt_init(stmt);
+
+ verify_param_count(stmt, 4);
+
+ bind[0].buffer_type= MYSQL_TYPE_TIMESTAMP;
+ bind[1].buffer_type= MYSQL_TYPE_TIME;
+ bind[2].buffer_type= MYSQL_TYPE_DATETIME;
+ bind[3].buffer_type= MYSQL_TYPE_DATE;
+
+ second_part= 0;
+
+ year=2000;
+ month=01;
+ day=10;
+
+ hour=11;
+ minute=16;
+ sec= 20;
+
+ for (i= 0; i < (int) array_elements(bind); i++)
+ {
+ bind[i].buffer= (char *) &tm[i];
+ bind[i].is_null= &is_null[i];
+ bind[i].length= &length[i];
+ bind[i].buffer_length= 30;
+ length[i]=20;
+ }
+
+ rc = mysql_bind_param(stmt, bind);
+ mystmt(stmt,rc);
+
+ for (count= 0; count < row_count; count++)
+ {
+ for (i= 0; i < (int) array_elements(bind); i++)
+ {
+ tm[i].neg= 0;
+ tm[i].second_part= second_part+count;
+ tm[i].year= year+count;
+ tm[i].month= month+count;
+ tm[i].day= day+count;
+ tm[i].hour= hour+count;
+ tm[i].minute= minute+count;
+ tm[i].second= sec+count;
+ }
+ rc = mysql_execute(stmt);
+ mystmt(stmt, rc);
+ }
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ mysql_stmt_close(stmt);
+
+ myassert(row_count == my_stmt_result("SELECT * FROM test_date",50));
+
+ stmt = mysql_prepare(mysql,"SELECT * FROM test_date",50);
+ myquery(rc);
+
+ 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);
+
+ for (count=0; count < row_count; count++)
+ {
+ rc = mysql_fetch(stmt);
+ mystmt(stmt,rc);
+
+ fprintf(stdout, "\n");
+ for (i= 0; i < array_elements(bind); i++)
+ {
+ fprintf(stdout, "\n");
+ fprintf(stdout,"time[%d]: %02d-%02d-%02d %02d:%02d:%02d.%02lu",
+ i, tm[i].year, tm[i].month, tm[i].day,
+ tm[i].hour, tm[i].minute, tm[i].second,
+ tm[i].second_part);
+
+ myassert(tm[i].year == 0 || tm[i].year == year+count);
+ myassert(tm[i].month == 0 || tm[i].month == month+count);
+ myassert(tm[i].day == 0 || tm[i].day == day+count);
+
+ myassert(tm[i].hour == 0 || tm[i].hour == hour+count);
+ /*
+ minute causes problems from date<->time, don't assert, instead
+ validate separatly in another routine
+ */
+ /*myassert(tm[i].minute == 0 || tm[i].minute == minute+count);
+ myassert(tm[i].second == 0 || tm[i].second == sec+count);*/
+
+ myassert(tm[i].second_part == 0 || tm[i].second_part == second_part+count);
+ }
+ }
+ rc = mysql_fetch(stmt);
+ myassert(rc == MYSQL_NO_DATA);
+
+ mysql_stmt_close(stmt);
+}
+
+/*
+ Test DATE, TIME, DATETIME and TS with MYSQL_TIME conversion
+*/
+
+static void test_date()
+{
+ int rc;
+
+ myheader("test_date");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_date");
+ myquery(rc);
+
+ rc= mysql_query(mysql,"CREATE TABLE test_date(c1 TIMESTAMP(14), \
+ c2 TIME,\
+ c3 DATETIME,\
+ c4 DATE)");
+
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ test_bind_date_conv(5);
+}
+
+/*
+ Test all time types to DATE and DATE to all types
+*/
+
+static void test_date_date()
+{
+ int rc;
+
+ myheader("test_date_date");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_date");
+ myquery(rc);
+
+ rc= mysql_query(mysql,"CREATE TABLE test_date(c1 DATE, \
+ c2 DATE,\
+ c3 DATE,\
+ c4 DATE)");
+
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ test_bind_date_conv(3);
+}
+
+/*
+ Test all time types to TIME and TIME to all types
+*/
+
+static void test_date_time()
+{
+ int rc;
+
+ myheader("test_date_time");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_date");
+ myquery(rc);
+
+ rc= mysql_query(mysql,"CREATE TABLE test_date(c1 TIME, \
+ c2 TIME,\
+ c3 TIME,\
+ c4 TIME)");
+
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ test_bind_date_conv(3);
+}
+
+/*
+ Test all time types to TIMESTAMP and TIMESTAMP to all types
+*/
+
+static void test_date_ts()
+{
+ int rc;
+
+ myheader("test_date_ts");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_date");
+ myquery(rc);
+
+ rc= mysql_query(mysql,"CREATE TABLE test_date(c1 TIMESTAMP(10), \
+ c2 TIMESTAMP(14),\
+ c3 TIMESTAMP,\
+ c4 TIMESTAMP(6))");
+
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ test_bind_date_conv(2);
+}
+
+/*
+ Test all time types to DATETIME and DATETIME to all types
+*/
+
+static void test_date_dt()
+{
+ int rc;
+
+ myheader("test_date_dt");
+
+ rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_date");
+ myquery(rc);
+
+ rc= mysql_query(mysql,"CREATE TABLE test_date(c1 datetime, \
+ c2 datetime,\
+ c3 datetime,\
+ c4 date)");
+
+ myquery(rc);
+
+ rc = mysql_commit(mysql);
+ myquery(rc);
+
+ test_bind_date_conv(2);
+}
+
static struct my_option myctest_long_options[] =
{
@@ -4815,7 +5066,6 @@ int main(int argc, char **argv)
/* Start of tests */
test_count= 0;
- 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 */
@@ -4835,6 +5085,7 @@ int main(int argc, char **argv)
test_select_prepare(); /* prepare select - protocol_prep debug */
test_select(); /* simple select test */
test_select_version(); /* select with variables */
+ test_select_simple(); /* simple select prepare */
test_set_variable(); /* set variable prepare */
#if NOT_USED
/*
@@ -4853,10 +5104,8 @@ int main(int argc, char **argv)
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 */
@@ -4886,18 +5135,22 @@ int main(int argc, char **argv)
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_stmt_close(); */ /* mysql_stmt_close() test -- hangs */
test_prepare_field_result(); /* prepare meta info */
- test_multi_stmt(); /* multi stmt test */
+ test_multi_stmt(); /* multi stmt test -TODO*/
+ test_multi_query(); /* test multi query execution */
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 */
+ test_subselect(); /* test subselect prepare -TODO*/
+ test_date(); /* test the MYSQL_TIME conversion */
+ test_date_date(); /* test conversion from DATE to all */
+ test_date_time(); /* test conversion from TIME to all */
+ test_date_ts() ; /* test conversion from TIMESTAMP to all */
+ test_date_dt() ; /* test conversion from DATETIME to all */
/* End of tests */
}