2002-06-14 02:28:25 +02:00
|
|
|
/***************************************************************************
|
|
|
|
client_test.c - description
|
|
|
|
-------------------------
|
|
|
|
begin : Sun Feb 3 2002
|
2003-01-10 03:32:08 +01:00
|
|
|
copyright : (C) MySQL AB 1995-2003, www.mysql.com
|
2002-06-14 02:28:25 +02:00
|
|
|
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>
|
|
|
|
|
|
|
|
/* mysql client headers */
|
|
|
|
#include <my_sys.h>
|
|
|
|
#include <mysql.h>
|
|
|
|
#include <my_getopt.h>
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
#include <assert.h>
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
#ifndef true
|
|
|
|
#define true 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef false
|
|
|
|
#define false 0
|
|
|
|
#endif
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
#ifndef bzero
|
|
|
|
#define bzero(A,B) memset(A,0,B)
|
|
|
|
#endif
|
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
/* set default options */
|
2002-11-23 03:30:55 +01:00
|
|
|
static char *opt_db=0;
|
|
|
|
static char *opt_user=0;
|
|
|
|
static char *opt_password=0;
|
2002-06-14 02:36:15 +02:00
|
|
|
static char *opt_host=0;
|
|
|
|
static char *opt_unix_socket=0;
|
2003-01-04 08:38:47 +01:00
|
|
|
static unsigned int opt_port;
|
2002-06-14 02:36:15 +02:00
|
|
|
static my_bool tty_password=0;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
static MYSQL *mysql=0;
|
2003-01-04 08:38:47 +01:00
|
|
|
static char query[255];
|
|
|
|
static char current_db[]= "client_test_db";
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
#define myheader(str) { fprintf(stdout,"\n\n#######################\n"); \
|
|
|
|
fprintf(stdout,"%s",str); \
|
|
|
|
fprintf(stdout,"\n#######################\n"); \
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
#define init_bind(x) (bzero(x,sizeof(x)))
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
#ifndef mysql_param_result
|
|
|
|
#define mysql_param_result mysql_prepare_result
|
|
|
|
#endif
|
|
|
|
|
|
|
|
static void print_error(const char *msg)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2002-11-23 03:30:55 +01:00
|
|
|
if (mysql)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2003-01-04 08:38:47 +01:00
|
|
|
if (mysql->server_version)
|
|
|
|
fprintf(stderr,"\n [MySQL-%s]",mysql->server_version);
|
|
|
|
else
|
|
|
|
fprintf(stderr,"\n [MySQL]");
|
2003-01-08 03:53:46 +01:00
|
|
|
fprintf(stderr,"[%d] %s\n",mysql_errno(mysql),mysql_error(mysql));
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2003-01-04 08:38:47 +01:00
|
|
|
else if(msg) fprintf(stderr, " [MySQL] %s\n", msg);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
static void print_st_error(MYSQL_STMT *stmt, const char *msg)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2002-11-23 03:30:55 +01:00
|
|
|
if (stmt)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2003-01-04 08:38:47 +01:00
|
|
|
if (stmt->mysql && stmt->mysql->server_version)
|
|
|
|
fprintf(stderr,"\n [MySQL-%s]",stmt->mysql->server_version);
|
|
|
|
else
|
|
|
|
fprintf(stderr,"\n [MySQL]");
|
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
fprintf(stderr,"[%d] %s\n",mysql_stmt_errno(stmt),
|
|
|
|
mysql_stmt_error(stmt));
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2003-01-04 08:38:47 +01:00
|
|
|
else if(msg) fprintf(stderr, " [MySQL] %s\n", msg);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2003-01-04 08:38:47 +01:00
|
|
|
static void client_disconnect();
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
#define myerror(msg) print_error(msg)
|
2002-06-14 02:36:15 +02:00
|
|
|
#define mysterror(stmt, msg) print_st_error(stmt, msg)
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
#define myassert(exp) assert(exp)
|
|
|
|
#define myassert_r(exp) assert(!(exp))
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
#define myquery(r) \
|
2002-06-14 02:28:25 +02:00
|
|
|
{ \
|
2003-01-04 08:38:47 +01:00
|
|
|
if( r || r == -1) \
|
2002-11-23 03:30:55 +01:00
|
|
|
myerror(NULL); \
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(r == 0); \
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
#define myquery_r(r) \
|
2002-06-14 02:28:25 +02:00
|
|
|
{ \
|
2003-01-04 08:38:47 +01:00
|
|
|
if( r || r == -1) \
|
2002-11-23 03:30:55 +01:00
|
|
|
myerror(NULL); \
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert_r(r == 0); \
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#define mystmt(stmt,r) \
|
|
|
|
{ \
|
2003-01-04 08:38:47 +01:00
|
|
|
if( r || r == -1) \
|
2002-06-14 02:28:25 +02:00
|
|
|
mysterror(stmt,NULL); \
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(r == 0);\
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
#define mystmt_r(stmt,r) \
|
2002-06-14 02:28:25 +02:00
|
|
|
{ \
|
2003-01-04 08:38:47 +01:00
|
|
|
if( r || r == -1) \
|
|
|
|
mysterror(stmt,NULL); \
|
|
|
|
myassert_r(r == 0);\
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
#define mystmt_init(stmt) \
|
2002-06-14 02:28:25 +02:00
|
|
|
{ \
|
2003-01-04 08:38:47 +01:00
|
|
|
if( stmt == 0) \
|
2002-11-23 03:30:55 +01:00
|
|
|
myerror(NULL); \
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(stmt != 0); \
|
|
|
|
}
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
#define mystmt_init_r(stmt) \
|
2002-06-14 02:28:25 +02:00
|
|
|
{ \
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(stmt == 0);\
|
|
|
|
}
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
#define mytest(x) if(!x) {myerror(NULL);myassert(true);}
|
|
|
|
#define mytest_r(x) if(x) {myerror(NULL);myassert(true);}
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
#define PREPARE(A,B) mysql_prepare(A,B,strlen(B))
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/********************************************************
|
|
|
|
* connect to the server *
|
|
|
|
*********************************************************/
|
2002-11-23 03:30:55 +01:00
|
|
|
static void client_connect()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2003-01-18 21:58:19 +01:00
|
|
|
int rc;
|
2003-01-04 08:38:47 +01:00
|
|
|
char buff[255];
|
2002-06-14 02:28:25 +02:00
|
|
|
myheader("client_connect");
|
|
|
|
|
2003-01-19 01:24:02 +01:00
|
|
|
if (!(mysql = mysql_init(NULL)))
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2002-11-23 03:30:55 +01:00
|
|
|
myerror("mysql_init() failed");
|
2002-06-14 02:28:25 +02:00
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
if (!(mysql_real_connect(mysql,opt_host,opt_user,
|
2002-11-23 03:30:55 +01:00
|
|
|
opt_password, opt_db ? opt_db:"test", opt_port,
|
2002-06-14 02:36:15 +02:00
|
|
|
opt_unix_socket, 0)))
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2003-01-04 08:38:47 +01:00
|
|
|
myerror("connection failed");
|
|
|
|
mysql_close(mysql);
|
2002-06-14 02:28:25 +02:00
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* set AUTOCOMMIT to ON*/
|
|
|
|
mysql_autocommit(mysql, true);
|
2003-01-04 08:38:47 +01:00
|
|
|
sprintf(buff,"CREATE DATABASE IF NOT EXISTS %s", current_db);
|
2003-01-18 21:58:19 +01:00
|
|
|
rc = mysql_query(mysql, buff);
|
|
|
|
myquery(rc);
|
2003-01-04 08:38:47 +01:00
|
|
|
sprintf(buff,"USE %s", current_db);
|
2003-01-18 21:58:19 +01:00
|
|
|
rc = mysql_query(mysql, buff);
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* close the connection *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void client_disconnect()
|
2003-01-18 21:58:19 +01:00
|
|
|
{
|
|
|
|
myheader("client_disconnect");
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
if (mysql)
|
|
|
|
{
|
|
|
|
char buff[255];
|
2003-01-18 21:58:19 +01:00
|
|
|
fprintf(stdout, "\n droping the test database '%s'", current_db);
|
2003-01-04 08:38:47 +01:00
|
|
|
sprintf(buff,"DROP DATABASE IF EXISTS %s", current_db);
|
|
|
|
mysql_query(mysql, buff);
|
2003-01-18 21:58:19 +01:00
|
|
|
fprintf(stdout, "\n closing the connection\n");
|
2003-01-04 08:38:47 +01:00
|
|
|
mysql_close(mysql);
|
|
|
|
}
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* query processing *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void client_query()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
myheader("client_query");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS myclient_test");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE myclient_test(id int primary key auto_increment,\
|
|
|
|
name varchar(20))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE myclient_test(id int, name varchar(20))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery_r(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('mysql')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('monty')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('venu')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('deleted')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO myclient_test(name) VALUES('deleted')");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_query(mysql,"UPDATE myclient_test SET name='updated' WHERE name='deleted'");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_query(mysql,"UPDATE myclient_test SET id=3 WHERE name='updated'");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery_r(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* print dashes *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void my_print_dashes(MYSQL_RES *result)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
unsigned int i,j;
|
|
|
|
|
|
|
|
mysql_field_seek(result,0);
|
|
|
|
fputc('\t',stdout);
|
|
|
|
fputc('+', stdout);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
for(i=0; i< mysql_num_fields(result); i++)
|
|
|
|
{
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
for(j=0; j < field->max_length+2; j++)
|
2002-11-23 03:30:55 +01:00
|
|
|
fputc('-',stdout);
|
2002-06-14 02:28:25 +02:00
|
|
|
fputc('+',stdout);
|
|
|
|
}
|
|
|
|
fputc('\n',stdout);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* print resultset metadata information *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void my_print_result_metadata(MYSQL_RES *result)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
unsigned int i,j;
|
|
|
|
unsigned int field_count;
|
|
|
|
|
|
|
|
mysql_field_seek(result,0);
|
2002-11-23 03:30:55 +01:00
|
|
|
fputc('\n', stdout);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
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);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_field_seek(result,0);
|
|
|
|
for(i=0; i< field_count; i++)
|
|
|
|
{
|
|
|
|
field = mysql_fetch_field(result);
|
2002-10-02 12:33:08 +02:00
|
|
|
fprintf(stdout, " %-*s |",(int) field->max_length, field->name);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
fputc('\n', stdout);
|
|
|
|
my_print_dashes(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* process the result set *
|
|
|
|
*********************************************************/
|
2002-11-23 03:30:55 +01:00
|
|
|
int my_process_result_set(MYSQL_RES *result)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_ROW row;
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
unsigned int i;
|
|
|
|
unsigned int row_count=0;
|
2003-01-04 08:38:47 +01:00
|
|
|
|
|
|
|
if (!result)
|
|
|
|
return 0;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
my_print_result_metadata(result);
|
|
|
|
|
|
|
|
while((row = mysql_fetch_row(result)) != NULL)
|
2002-11-23 03:30:55 +01:00
|
|
|
{
|
2002-06-14 02:28:25 +02:00
|
|
|
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)
|
2002-10-02 12:33:08 +02:00
|
|
|
fprintf(stdout, " %-*s |", (int) field->max_length, "NULL");
|
2002-06-14 02:28:25 +02:00
|
|
|
else if (IS_NUM(field->type))
|
2002-10-02 12:33:08 +02:00
|
|
|
fprintf(stdout, " %*s |", (int) field->max_length, row[i]);
|
2002-06-14 02:28:25 +02:00
|
|
|
else
|
2002-10-02 12:33:08 +02:00
|
|
|
fprintf(stdout, " %-*s |", (int) field->max_length, row[i]);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
fputc('\t',stdout);
|
|
|
|
fputc('\n',stdout);
|
|
|
|
row_count++;
|
|
|
|
}
|
|
|
|
my_print_dashes(result);
|
|
|
|
|
|
|
|
if (mysql_errno(mysql) != 0)
|
2003-01-08 03:53:46 +01:00
|
|
|
fprintf(stderr, "\n\tmysql_fetch_row() failed\n");
|
2002-11-23 03:30:55 +01:00
|
|
|
else
|
2003-01-08 03:53:46 +01:00
|
|
|
fprintf(stdout,"\n\t%d %s returned\n", row_count,
|
|
|
|
row_count == 1 ? "row" : "rows");
|
|
|
|
return row_count;
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
/********************************************************
|
|
|
|
* process the stmt result set *
|
|
|
|
*********************************************************/
|
|
|
|
uint my_process_stmt_result(MYSQL_STMT *stmt)
|
2002-11-23 03:30:55 +01:00
|
|
|
{
|
2003-01-04 08:38:47 +01:00
|
|
|
int field_count;
|
|
|
|
uint row_count= 0;
|
|
|
|
MYSQL_BIND buffer[50];
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
char data[50][255];
|
|
|
|
long length[50];
|
|
|
|
int rc, i;
|
|
|
|
|
|
|
|
if (!(result= mysql_prepare_result(stmt)))
|
|
|
|
{
|
|
|
|
while (!mysql_fetch(stmt));
|
|
|
|
return 0;
|
|
|
|
}
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-10 03:32:08 +01:00
|
|
|
field_count= mysql_num_fields(result);
|
2003-01-04 08:38:47 +01:00
|
|
|
for(i=0; i < field_count; i++)
|
|
|
|
{
|
|
|
|
buffer[i].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
buffer[i].buffer_length=50;
|
|
|
|
buffer[i].length=(long *)&length[i];
|
|
|
|
buffer[i].buffer=(gptr)data[i];
|
|
|
|
}
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
my_print_result_metadata(result);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc= mysql_bind_result(stmt,buffer);
|
|
|
|
mystmt(stmt,rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-18 21:58:19 +01:00
|
|
|
rc= mysql_stmt_store_result(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
mysql_field_seek(result, 0);
|
|
|
|
while (mysql_fetch(stmt) == 0)
|
|
|
|
{
|
|
|
|
fputc('\t',stdout);
|
|
|
|
fputc('|',stdout);
|
2003-01-08 03:53:46 +01:00
|
|
|
|
|
|
|
mysql_field_seek(result,0);
|
2003-01-04 08:38:47 +01:00
|
|
|
for (i=0; i < field_count; i++)
|
|
|
|
{
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
if(length[i] == MYSQL_NULL_DATA)
|
|
|
|
fprintf(stdout, " %-*s |", (int) field->max_length, "NULL");
|
2003-01-10 03:32:08 +01:00
|
|
|
else if (length[i] == 0)
|
|
|
|
data[i][0]='\0'; /* unmodified buffer */
|
2003-01-04 08:38:47 +01:00
|
|
|
else if (IS_NUM(field->type))
|
|
|
|
fprintf(stdout, " %*s |", (int) field->max_length, data[i]);
|
|
|
|
else
|
|
|
|
fprintf(stdout, " %-*s |", (int) field->max_length, data[i]);
|
|
|
|
}
|
|
|
|
fputc('\t',stdout);
|
|
|
|
fputc('\n',stdout);
|
|
|
|
row_count++;
|
|
|
|
}
|
|
|
|
my_print_dashes(result);
|
2003-01-08 03:53:46 +01:00
|
|
|
fprintf(stdout,"\n\t%d %s returned\n", row_count,
|
|
|
|
row_count == 1 ? "row" : "rows");
|
2003-01-04 08:38:47 +01:00
|
|
|
mysql_free_result(result);
|
2003-01-08 03:53:46 +01:00
|
|
|
return row_count;
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* process the stmt result set *
|
|
|
|
*********************************************************/
|
|
|
|
uint my_stmt_result(const char *query, unsigned long length)
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
uint row_count;
|
|
|
|
int rc;
|
|
|
|
|
2003-01-18 21:58:19 +01:00
|
|
|
fprintf(stdout,"\n\n %s \n", query);
|
2003-01-08 03:53:46 +01:00
|
|
|
stmt= mysql_prepare(mysql,query,length);
|
|
|
|
mystmt_init(stmt);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
row_count= my_process_stmt_result(stmt);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
return row_count;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
Utility function to verify a particular column data
|
|
|
|
*/
|
|
|
|
static void verify_col_data(const char *table, const char *col,
|
|
|
|
const char *exp_data)
|
|
|
|
{
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_ROW row;
|
|
|
|
char query[255];
|
|
|
|
int rc, field= 1;
|
|
|
|
|
|
|
|
if (table && col)
|
|
|
|
{
|
|
|
|
sprintf(query, "SELECT %s FROM %s LIMIT 1", col, table);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n %s", query);
|
|
|
|
rc = mysql_query(mysql, query);
|
|
|
|
myquery(rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
field= 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
result = mysql_use_result(mysql);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
if (!(row= mysql_fetch_row(result)) || !row[field])
|
|
|
|
{
|
|
|
|
fprintf(stdout,"\n *** ERROR: FAILED TO GET THE RESULT ***");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
fprintf(stdout,"\n obtained: `%s` (expected: `%s`)",
|
|
|
|
row[field], exp_data);
|
|
|
|
myassert(strcmp(row[field],exp_data) == 0);
|
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
Utility function to verify the field members
|
|
|
|
*/
|
|
|
|
|
|
|
|
static void verify_prepare_field(MYSQL_RES *result,
|
|
|
|
unsigned int no,const char *name, const char *org_name,
|
|
|
|
enum enum_field_types type, const char *table,
|
|
|
|
const char *org_table, const char *db)
|
|
|
|
{
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
|
|
|
|
if (!(field= mysql_fetch_field_direct(result,no)))
|
|
|
|
{
|
|
|
|
fprintf(stdout,"\n *** ERROR: FAILED TO GET THE RESULT ***");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
fprintf(stdout,"\n field[%d]:", no);
|
|
|
|
fprintf(stdout,"\n name :`%s`\t(expected: `%s`)", field->name, name);
|
|
|
|
fprintf(stdout,"\n org_name :`%s`\t(expected: `%s`)", field->org_name, org_name);
|
|
|
|
fprintf(stdout,"\n type :`%d`\t(expected: `%d`)", field->type, type);
|
|
|
|
fprintf(stdout,"\n table :`%s`\t(expected: `%s`)", field->table, table);
|
|
|
|
fprintf(stdout,"\n org_table:`%s`\t(expected: `%s`)", field->org_table, org_table);
|
|
|
|
fprintf(stdout,"\n database :`%s`\t(expected: `%s`)", field->db, db);
|
|
|
|
fprintf(stdout,"\n");
|
|
|
|
myassert(strcmp(field->name,name) == 0);
|
|
|
|
myassert(strcmp(field->org_name,org_name) == 0);
|
|
|
|
myassert(field->type == type);
|
|
|
|
myassert(strcmp(field->table,table) == 0);
|
|
|
|
myassert(strcmp(field->org_table,org_table) == 0);
|
|
|
|
myassert(strcmp(field->db,db) == 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
Utility function to verify the parameter count
|
|
|
|
*/
|
|
|
|
static void verify_param_count(MYSQL_STMT *stmt, long exp_count)
|
|
|
|
{
|
|
|
|
long param_count= mysql_param_count(stmt);
|
|
|
|
fprintf(stdout,"\n total parameters in stmt: %ld (expected: %ld)",
|
|
|
|
param_count, exp_count);
|
|
|
|
myassert(param_count == exp_count);
|
2002-11-23 03:30:55 +01:00
|
|
|
}
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/********************************************************
|
|
|
|
* store result processing *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void client_store_result()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_RES *result;
|
|
|
|
int rc;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
myheader("client_store_result");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql, "SELECT * FROM myclient_test");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
2003-01-04 08:38:47 +01:00
|
|
|
* fetch the results
|
2002-06-14 02:28:25 +02:00
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void client_use_result()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_RES *result;
|
|
|
|
int rc;
|
|
|
|
myheader("client_use_result");
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
rc = mysql_query(mysql, "SELECT * FROM myclient_test");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* get the result */
|
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
2003-01-18 21:58:19 +01:00
|
|
|
/*
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* query processing *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_debug_example()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
|
|
|
|
myheader("test_debug_example");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_debug_example");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_debug_example(id int primary key auto_increment,\
|
|
|
|
name varchar(20),xxx int)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_debug_example(name) VALUES('mysql')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"UPDATE test_debug_example SET name='updated' WHERE name='deleted'");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_debug_example where name='mysql'");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE test_debug_example");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test autocommit feature *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_tran_bdb()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_ROW row;
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
myheader("test_tran_bdb");
|
|
|
|
|
|
|
|
/* set AUTOCOMMIT to OFF */
|
|
|
|
rc = mysql_autocommit(mysql, false);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_demo_transaction");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* 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");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert a row and commit the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(10,'venu')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* now insert the second row, and rollback the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(20,'mysql')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_rollback(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* delete first row, and rollback it */
|
|
|
|
rc = mysql_query(mysql,"DELETE FROM my_demo_transaction WHERE col1 = 10");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_rollback(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
row = mysql_fetch_row(result);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(row);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
row = mysql_fetch_row(result);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest_r(row);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
mysql_free_result(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_autocommit(mysql,true);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test autocommit feature *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_tran_innodb()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_ROW row;
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
myheader("test_tran_innodb");
|
|
|
|
|
|
|
|
/* set AUTOCOMMIT to OFF */
|
|
|
|
rc = mysql_autocommit(mysql, false);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_demo_transaction");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* 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");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert a row and commit the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(10,'venu')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* now insert the second row, and rollback the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO my_demo_transaction VALUES(20,'mysql')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_rollback(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* delete first row, and rollback it */
|
|
|
|
rc = mysql_query(mysql,"DELETE FROM my_demo_transaction WHERE col1 = 10");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_rollback(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM my_demo_transaction");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
row = mysql_fetch_row(result);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(row);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
row = mysql_fetch_row(result);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest_r(row);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
mysql_free_result(result);
|
2002-11-23 03:30:55 +01:00
|
|
|
mysql_autocommit(mysql,true);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2002-10-02 12:33:08 +02:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/********************************************************
|
2002-10-02 12:33:08 +02:00
|
|
|
To test simple prepares of all DML statements
|
2002-06-14 02:28:25 +02:00
|
|
|
*********************************************************/
|
2002-10-02 12:33:08 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_prepare_simple()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_prepare_simple");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_simple");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prepare_simple(id int, name varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* alter table */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"ALTER TABLE test_prepare_simple ADD new char(20)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,0);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* insert */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_prepare_simple VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* update */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"UPDATE test_prepare_simple SET id=? WHERE id=? AND name= ?");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,3);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* delete */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"DELETE FROM test_prepare_simple WHERE id=10");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,0);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* delete */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"DELETE FROM test_prepare_simple WHERE id=?");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt_r(stmt, rc);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* select */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"SELECT * FROM test_prepare_simple WHERE id=? AND name= ?");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple prepare field results *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_prepare_field_result()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
MYSQL_RES *result;
|
2002-10-02 12:33:08 +02:00
|
|
|
int rc,param_count;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_prepare_field_result");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_field_result");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prepare_field_result(int_c int, \
|
|
|
|
var_c varchar(50), ts_c timestamp(14),\
|
|
|
|
char_c char(3), date_c date,extra tinyint)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert */
|
2003-01-04 08:38:47 +01:00
|
|
|
strcpy(query,"SELECT int_c,var_c,date_c as date,ts_c,char_c FROM \
|
|
|
|
test_prepare_field_result as t1 WHERE int_c=?");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
result = mysql_prepare_result(stmt);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
my_print_result_metadata(result);
|
|
|
|
|
|
|
|
fprintf(stdout,"\n\n field attributes:\n");
|
|
|
|
verify_prepare_field(result,0,"int_c","int_c",MYSQL_TYPE_LONG,
|
|
|
|
"t1","test_prepare_field_result",current_db);
|
|
|
|
verify_prepare_field(result,1,"var_c","var_c",MYSQL_TYPE_VAR_STRING,
|
|
|
|
"t1","test_prepare_field_result",current_db);
|
|
|
|
verify_prepare_field(result,2,"date","date_c",MYSQL_TYPE_DATE,
|
|
|
|
"t1","test_prepare_field_result",current_db);
|
|
|
|
verify_prepare_field(result,3,"ts_c","ts_c",MYSQL_TYPE_TIMESTAMP,
|
|
|
|
"t1","test_prepare_field_result",current_db);
|
|
|
|
verify_prepare_field(result,4,"char_c","char_c",MYSQL_TYPE_STRING,
|
|
|
|
"t1","test_prepare_field_result",current_db);
|
|
|
|
|
|
|
|
param_count= mysql_num_fields(result);
|
|
|
|
fprintf(stdout,"\n\n total fields: `%d` (expected: `5`)", param_count);
|
|
|
|
myassert(param_count == 5);
|
|
|
|
mysql_stmt_close(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple prepare field results *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_prepare_syntax()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2002-10-02 12:33:08 +02:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_prepare_syntax");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_syntax");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prepare_syntax(id int, name varchar(50), extra int)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_prepare_syntax VALUES(?");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init_r(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"SELECT id,name FROM test_prepare_syntax WHERE id=? AND WHERE");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init_r(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple prepare *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_prepare()
|
2002-11-23 03:30:55 +01:00
|
|
|
{
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
char query[200];
|
2003-01-18 21:58:19 +01:00
|
|
|
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];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_prepare");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql, true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_prepare");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE my_prepare(col1 tinyint,\
|
2003-01-04 08:38:47 +01:00
|
|
|
col2 varchar(15), col3 int,\
|
2002-06-14 02:28:25 +02:00
|
|
|
col4 smallint, col5 bigint, \
|
|
|
|
col6 float, col7 double )");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert by prepare */
|
|
|
|
strcpy(query,"INSERT INTO my_prepare VALUES(?,?,?,?,?,?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,7);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* tinyint */
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_TINY;
|
2003-01-18 21:58:19 +01:00
|
|
|
bind[0].buffer= (gptr)&tiny_data;
|
2002-06-14 02:28:25 +02:00
|
|
|
/* string */
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_STRING;
|
2003-01-18 21:58:19 +01:00
|
|
|
bind[1].buffer= (gptr)str_data;
|
|
|
|
bind[1].length= &bind[1].buffer_length;
|
2002-06-14 02:28:25 +02:00
|
|
|
/* integer */
|
|
|
|
bind[2].buffer_type=FIELD_TYPE_LONG;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[2].buffer= (gptr)&int_data;
|
2002-06-14 02:28:25 +02:00
|
|
|
/* short */
|
|
|
|
bind[3].buffer_type=FIELD_TYPE_SHORT;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[3].buffer= (gptr)&small_data;
|
2002-06-14 02:28:25 +02:00
|
|
|
/* bigint */
|
|
|
|
bind[4].buffer_type=FIELD_TYPE_LONGLONG;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[4].buffer= (gptr)&big_data;
|
2002-06-14 02:28:25 +02:00
|
|
|
/* float */
|
2003-01-18 21:58:19 +01:00
|
|
|
bind[5].buffer_type=FIELD_TYPE_FLOAT;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[5].buffer= (gptr)&real_data;
|
2002-06-14 02:28:25 +02:00
|
|
|
/* double */
|
|
|
|
bind[6].buffer_type=FIELD_TYPE_DOUBLE;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[6].buffer= (gptr)&double_data;
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
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);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
2003-01-18 21:58:19 +01:00
|
|
|
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);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
2003-01-18 21:58:19 +01:00
|
|
|
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;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-18 21:58:19 +01:00
|
|
|
/* 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);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test double comparision *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_double_compare()
|
2002-11-23 03:30:55 +01:00
|
|
|
{
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
char query[200],real_data[10], tiny_data;
|
|
|
|
double double_data;
|
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[3];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_double_compare");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql, true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_double_compare");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_double_compare(col1 tinyint,\
|
|
|
|
col2 float, col3 double )");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_double_compare VALUES(1,10.2,34.5)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
strcpy(query, "UPDATE test_double_compare SET col1=100 WHERE col1 = ? AND col2 = ? AND COL3 = ?");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql,query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,3);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* tinyint */
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_TINY;
|
|
|
|
bind[0].buffer=(gptr)&tiny_data;
|
|
|
|
/* string->float */
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_STRING;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[1].buffer= (gptr)&real_data;
|
|
|
|
bind[1].buffer_length=10;
|
2002-06-14 02:28:25 +02:00
|
|
|
/* double */
|
|
|
|
bind[2].buffer_type=FIELD_TYPE_DOUBLE;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[2].buffer= (gptr)&double_data;
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
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);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n total affected rows:%d",rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_double_compare");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert((int)tiny_data == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple null *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_null()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
int nData=1;
|
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_null");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-11-23 03:30:55 +01:00
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_null");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_null(col1 int,col2 varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert by prepare, wrong column name */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_null(col3,col2) VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init_r(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_null(col1,col2) VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
bind[0].is_null=1;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[0].buffer_type=MYSQL_TYPE_NULL;
|
|
|
|
bind[1]=bind[0]; /* string data */
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
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);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_null");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(nData == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
2003-01-04 08:38:47 +01:00
|
|
|
* to test fetch null *
|
2002-06-14 02:28:25 +02:00
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_fetch_null()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
const char query[100];
|
2003-01-04 08:38:47 +01:00
|
|
|
int length[11], i, nData;
|
|
|
|
MYSQL_BIND bind[11];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myheader("test_fetch_null");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_fetch_null");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_fetch_null(col1 tinyint, col2 smallint, \
|
|
|
|
col3 int, col4 bigint, \
|
|
|
|
col5 float, col6 double, \
|
|
|
|
col7 date, col8 time, \
|
|
|
|
col9 varbinary(10), \
|
|
|
|
col10 varchar(50),\
|
|
|
|
col11 char(20))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_fetch_null(col11) VALUES(1000),(88),(389789)");
|
2003-01-04 08:38:47 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
/* fetch */
|
2003-01-08 03:53:46 +01:00
|
|
|
for (i=0; i <= 10; i++)
|
2003-01-04 08:38:47 +01:00
|
|
|
{
|
|
|
|
bind[i].buffer_type=FIELD_TYPE_LONG;
|
|
|
|
length[i]=99;
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
2003-01-08 03:53:46 +01:00
|
|
|
bind[i-1].buffer=(gptr)&nData;
|
2003-01-04 08:38:47 +01:00
|
|
|
|
|
|
|
strcpy((char *)query , "SELECT * FROM test_fetch_null");
|
2003-01-08 03:53:46 +01:00
|
|
|
|
|
|
|
myassert(3 == my_stmt_result(query,50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql, query, 50);
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_bind_result(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
rc= 0;
|
|
|
|
while (mysql_fetch(stmt) != MYSQL_NO_DATA)
|
2003-01-04 08:38:47 +01:00
|
|
|
{
|
2003-01-08 03:53:46 +01:00
|
|
|
rc++;
|
|
|
|
for (i=0; i < 10; i++)
|
|
|
|
{
|
|
|
|
fprintf(stdout, "\n data[%d] : %s", i,
|
|
|
|
length[i] == MYSQL_NULL_DATA ? "NULL" : "NOT NULL");
|
|
|
|
myassert(length[i] == MYSQL_NULL_DATA);
|
|
|
|
}
|
|
|
|
fprintf(stdout, "\n data[%d]: %d", i, nData);
|
|
|
|
myassert(nData == 1000 || nData == 88 || nData == 389789);
|
|
|
|
myassert(length[i] == 4);
|
2003-01-04 08:38:47 +01:00
|
|
|
}
|
2003-01-08 03:53:46 +01:00
|
|
|
myassert(rc == 3);
|
2002-11-23 03:30:55 +01:00
|
|
|
mysql_stmt_close(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
}
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
/********************************************************
|
|
|
|
* to test simple select *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_select_version()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
const char query[100];
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myheader("test_select_version");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
strcpy((char *)query , "SELECT @@version");
|
|
|
|
stmt = PREPARE(mysql, query);
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,0);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
my_process_stmt_result(stmt);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple select *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_select_simple()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
|
|
|
const char query[100];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myheader("test_select_simple");
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
/* insert by prepare */
|
|
|
|
strcpy((char *)query, "SHOW TABLES FROM mysql");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,0);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
my_process_stmt_result(stmt);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple select to debug *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_select_direct()
|
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
|
|
|
|
myheader("test_select_direct");
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_select");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_select(id int, id1 tinyint, \
|
|
|
|
id2 float, \
|
|
|
|
id3 double, \
|
|
|
|
name varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert a row and commit the transaction */
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_select VALUES(10,5,2.3,4.5,'venu')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_select");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
2003-01-04 08:38:47 +01:00
|
|
|
* to test simple select with prepare *
|
2002-06-14 02:28:25 +02:00
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_select_prepare()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc, count;
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myheader("test_select_prepare");
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_select");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_select(id int, name varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
/* insert a row and commit the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_select VALUES(10,'venu')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_select",50);
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt,rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
count= my_process_stmt_result(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"DROP TABLE test_select");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_select(id tinyint, id1 int, \
|
|
|
|
id2 float, id3 float, \
|
|
|
|
name varchar(50))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
/* insert a row and commit the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_select(id,id1,id2,name) VALUES(10,5,2.3,'venu')");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_select",25);
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
my_process_stmt_result(stmt);
|
2003-01-18 21:58:19 +01:00
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple select *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_select()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
char szData[25];
|
|
|
|
int nData=1;
|
|
|
|
MYSQL_BIND bind[2];
|
|
|
|
|
|
|
|
myheader("test_select");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_autocommit(mysql,true);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_select");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_select(id int,name varchar(50))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
/* insert a row and commit the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_select VALUES(10,'venu')");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
/* now insert the second row, and rollback the transaction */
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_select VALUES(20,'mysql')");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
strcpy(query,"SELECT * FROM test_select WHERE id=? AND name=?");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,2);
|
|
|
|
|
|
|
|
/* string data */
|
|
|
|
nData=10;
|
|
|
|
strcpy(szData,(char *)"venu");
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_STRING;
|
|
|
|
bind[1].buffer=szData;
|
|
|
|
bind[1].buffer_length=4;
|
|
|
|
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);
|
|
|
|
|
|
|
|
myassert( 1 == my_process_stmt_result(stmt));
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple select show *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_select_show()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
myheader("test_select_show");
|
|
|
|
|
|
|
|
mysql_autocommit(mysql,true);
|
|
|
|
|
|
|
|
strcpy(query,"SELECT * FROM mysql.host");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,0);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
2003-01-18 21:58:19 +01:00
|
|
|
my_process_stmt_result(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple update *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_simple_update()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
char szData[25];
|
|
|
|
int nData=1;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_BIND bind[2];
|
|
|
|
|
|
|
|
myheader("test_simple_update");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_autocommit(mysql,true);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_update");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_update(col1 int,\
|
|
|
|
col2 varchar(50), col3 int )");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_update VALUES(1,'MySQL',100)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
myassert(1 == mysql_affected_rows(mysql));
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
/* insert by prepare */
|
|
|
|
strcpy(query,"UPDATE test_update SET col2=? WHERE col1=?");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,2);
|
|
|
|
|
|
|
|
nData=1;
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_STRING;
|
|
|
|
bind[0].buffer=szData; /* string data */
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[0].buffer_length=sprintf(szData,"updated-data");
|
2002-06-14 02:28:25 +02:00
|
|
|
bind[1].buffer=(gptr)&nData;
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_LONG;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_param(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == mysql_affected_rows(mysql));
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_update");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple long data handling *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_long_data()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc, int_data;
|
2002-06-14 02:28:25 +02:00
|
|
|
char *data=NullS;
|
2003-01-10 03:32:08 +01:00
|
|
|
long length;
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[3];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
|
|
|
|
myheader("test_long_data");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_long_data(col1 int,\
|
|
|
|
col2 long varchar, col3 long varbinary)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
strcpy(query,"INSERT INTO test_long_data(col1,col2) VALUES(?)");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init_r(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_long_data(col1,col2,col3) VALUES(?,?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,3);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[0].buffer=(char *)&int_data;
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_LONG;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* Non string or binary type, error */
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[1].buffer_type=FIELD_TYPE_LONG;
|
2003-01-10 03:32:08 +01:00
|
|
|
bind[1].length=&length;
|
|
|
|
length= MYSQL_LONG_DATA; /* specify long data suppy during run-time */
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_param(stmt,bind);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_bind_param() returned: %d\n",rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt_r(stmt, rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_STRING;
|
|
|
|
bind[2]=bind[1];
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_param(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
int_data= 999;
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
data = (char *)"Micheal";
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* supply data in pieces */
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_send_long_data(stmt,1,data,7,0);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
/* try to execute mysql_execute() now, it should return
|
|
|
|
MYSQL_NEED_DATA as the long data supply is not yet over
|
2002-06-14 02:28:25 +02:00
|
|
|
*/
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* append data again ..*/
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
/* Indicate end of data */
|
2003-01-04 08:38:47 +01:00
|
|
|
data = (char *)" 'monty' Widenius";
|
2002-11-23 03:30:55 +01:00
|
|
|
rc = mysql_send_long_data(stmt,1,data,17,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_send_long_data(stmt,2,"Venu (venu@mysql.com)",4,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
/* execute */
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
2002-11-23 03:30:55 +01:00
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_long_data");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
2003-01-04 08:38:47 +01:00
|
|
|
|
|
|
|
verify_col_data("test_long_data","col1","999");
|
|
|
|
verify_col_data("test_long_data","col2","Micheal 'monty' Widenius");
|
|
|
|
verify_col_data("test_long_data","col3","Venu");
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test long data (string) handling *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_long_data_str()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc, i;
|
2002-06-14 02:28:25 +02:00
|
|
|
char data[255];
|
2003-01-10 03:32:08 +01:00
|
|
|
long length, length1;
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_long_data_str");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_str");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_long_data_str(id int, longstr long varchar)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_long_data_str VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
bind[0].buffer = (gptr)&length;
|
|
|
|
bind[0].buffer_type = FIELD_TYPE_LONG;
|
|
|
|
|
|
|
|
bind[1].buffer=data; /* string data */
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_STRING;
|
2003-01-10 03:32:08 +01:00
|
|
|
bind[1].length= &length1;
|
|
|
|
length1= MYSQL_LONG_DATA;
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_param(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
length = 10;
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
length = 40;
|
|
|
|
sprintf(data,"MySQL AB");
|
|
|
|
|
|
|
|
/* supply data in pieces */
|
2003-01-04 08:38:47 +01:00
|
|
|
for(i=0; i < 4; i++)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_send_long_data(stmt,1,(char *)data,5,0);
|
|
|
|
mystmt(stmt, rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2003-01-04 08:38:47 +01:00
|
|
|
/* 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);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* Indiate end of data supply */
|
2002-10-02 12:33:08 +02:00
|
|
|
rc = mysql_send_long_data(stmt,1,0,0,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
/* execute */
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_query(mysql,"SELECT LENGTH(longstr), longstr FROM test_long_data_str");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
2003-01-04 08:38:47 +01:00
|
|
|
|
|
|
|
sprintf(data,"%d", i*5);
|
|
|
|
verify_col_data("test_long_data_str","LENGTH(longstr)", data);
|
|
|
|
data[0]='\0';
|
|
|
|
while (i--)
|
|
|
|
sprintf(data,"%s%s", data,"MySQL");
|
|
|
|
verify_col_data("test_long_data_str","longstr", data);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test long data (string) handling *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_long_data_str1()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-10 03:32:08 +01:00
|
|
|
int rc, i;
|
2003-01-04 08:38:47 +01:00
|
|
|
char data[255];
|
2003-01-10 03:32:08 +01:00
|
|
|
long length, length1;
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_long_data_str1");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_str");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_long_data_str(longstr long varchar,blb long varbinary)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_long_data_str VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
bind[0].buffer=data; /* string data */
|
2003-01-10 03:32:08 +01:00
|
|
|
bind[0].length= &length1;
|
2002-06-14 02:28:25 +02:00
|
|
|
bind[0].buffer_type=FIELD_TYPE_STRING;
|
2003-01-10 03:32:08 +01:00
|
|
|
length1= MYSQL_LONG_DATA;
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
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);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
length = sprintf(data,"MySQL AB");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* supply data in pieces */
|
2003-01-04 08:38:47 +01:00
|
|
|
for(i=0; i < 3; i++)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_send_long_data(stmt,0,data,length,0);
|
|
|
|
mystmt(stmt, rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_send_long_data(stmt,1,data,2,0);
|
|
|
|
mystmt(stmt, rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2003-01-04 08:38:47 +01:00
|
|
|
/* 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);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* Indiate end of data supply */
|
2002-10-02 12:33:08 +02:00
|
|
|
rc = mysql_send_long_data(stmt,1,0,0,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-10-02 12:33:08 +02:00
|
|
|
rc = mysql_send_long_data(stmt,0,0,0,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* execute */
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_query(mysql,"SELECT LENGTH(longstr),longstr,LENGTH(blb),blb FROM test_long_data_str");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
2003-01-04 08:38:47 +01:00
|
|
|
|
2003-01-10 03:32:08 +01:00
|
|
|
sprintf(data,"%ld",(long)i*length);
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_col_data("test_long_data_str","length(longstr)",data);
|
|
|
|
|
|
|
|
sprintf(data,"%d",i*2);
|
|
|
|
verify_col_data("test_long_data_str","length(blb)",data);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test long data (binary) handling *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_long_data_bin()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
char data[255];
|
2003-01-10 03:32:08 +01:00
|
|
|
long length, length1;
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_long_data_bin");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_long_data_bin");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_long_data_bin(id int, longbin long varbinary)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_long_data_bin VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
bind[0].buffer = (gptr)&length;
|
|
|
|
bind[0].buffer_type = FIELD_TYPE_LONG;
|
|
|
|
|
|
|
|
bind[1].buffer=data; /* string data */
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_LONG_BLOB;
|
2003-01-10 03:32:08 +01:00
|
|
|
bind[1].length= &length1;
|
|
|
|
length1= MYSQL_LONG_DATA;
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_param(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
length = 10;
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
sprintf(data,"MySQL AB");
|
|
|
|
|
|
|
|
/* supply data in pieces */
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
for(i=0; i < 100; i++)
|
|
|
|
{
|
2002-10-02 12:33:08 +02:00
|
|
|
rc = mysql_send_long_data(stmt,1,(char *)data,4,0);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
|
|
|
}
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
/* try to execute mysql_execute() now, it should return
|
|
|
|
MYSQL_NEED_DATA as the long data supply is not yet over
|
2002-06-14 02:28:25 +02:00
|
|
|
*/
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
|
|
|
myassert(rc == MYSQL_NEED_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Indiate end of data supply */
|
2002-10-02 12:33:08 +02:00
|
|
|
rc = mysql_send_long_data(stmt,1,0,0,1);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
/* execute */
|
|
|
|
rc = mysql_execute(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout," mysql_execute() returned %d\n",rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_query(mysql,"SELECT LENGTH(longbin), longbin FROM test_long_data_bin");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple delete *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_simple_delete()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
char szData[30]={0};
|
|
|
|
int nData=1;
|
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
|
|
|
|
myheader("test_simple_delete");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_simple_delete");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_simple_delete(col1 int,\
|
|
|
|
col2 varchar(50), col3 int )");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_simple_delete VALUES(1,'MySQL',100)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == mysql_affected_rows(mysql));
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert by prepare */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"DELETE FROM test_simple_delete WHERE col1=? AND col2=? AND col3=100");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
nData=1;
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(szData,"MySQL");
|
|
|
|
bind[1].buffer_length = 5;
|
2002-06-14 02:28:25 +02:00
|
|
|
bind[1].buffer_type=FIELD_TYPE_STRING;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[1].buffer=szData; /* string data */
|
2002-06-14 02:28:25 +02:00
|
|
|
bind[0].buffer=(gptr)&nData;
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_LONG;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_param(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == mysql_affected_rows(mysql));
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_simple_delete");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(0 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple update *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_update()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-11-23 03:30:55 +01:00
|
|
|
char szData[25];
|
2002-06-14 02:28:25 +02:00
|
|
|
int nData=1;
|
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_update");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_autocommit(mysql,true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_update");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_update(col1 int primary key auto_increment,\
|
|
|
|
col2 varchar(50), col3 int )");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO test_update(col2,col3) VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* string data */
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_STRING;
|
|
|
|
bind[0].buffer=szData;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[0].buffer_length=sprintf(szData,"inserted-data");
|
2002-06-14 02:28:25 +02:00
|
|
|
bind[1].buffer=(gptr)&nData;
|
|
|
|
bind[1].buffer_type=FIELD_TYPE_LONG;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_param(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
nData=100;
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == mysql_affected_rows(mysql));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"UPDATE test_update SET col2=? WHERE col3=?");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-11-23 03:30:55 +01:00
|
|
|
nData=100;
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_STRING;
|
|
|
|
bind[0].buffer=szData;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[0].buffer_length=sprintf(szData,"updated-data");
|
2002-06-14 02:28:25 +02:00
|
|
|
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);
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == mysql_affected_rows(mysql));
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_update");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple prepare *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_prepare_noparam()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_RES *result;
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myheader("test_prepare_noparam");
|
2002-11-23 03:30:55 +01:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS my_prepare");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE my_prepare(col1 int ,col2 varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* insert by prepare */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,"INSERT INTO my_prepare VALUES(10,'venu')");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,0);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM my_prepare");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(1 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple bind result *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_bind_result()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
const char query[100];
|
2003-01-04 08:38:47 +01:00
|
|
|
int nData, length, length1;
|
2002-06-14 02:28:25 +02:00
|
|
|
char szData[100];
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
myheader("test_bind_result");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
init_bind(bind);
|
2002-11-23 03:30:55 +01:00
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_result(col1 int ,col2 varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_bind_result VALUES(10,'venu')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_bind_result VALUES(20,'MySQL')");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_bind_result(col2) VALUES('monty')");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
/* fetch */
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
bind[0].buffer_type=FIELD_TYPE_LONG;
|
|
|
|
bind[0].buffer= (gptr) &nData; /* integer data */
|
2003-01-04 08:38:47 +01:00
|
|
|
bind[0].length= (long *)&length;
|
2002-06-14 02:28:25 +02:00
|
|
|
bind[1].buffer_type=FIELD_TYPE_STRING;
|
|
|
|
bind[1].buffer=szData; /* string data */
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[1].buffer_length=sizeof(szData);
|
2003-01-04 08:38:47 +01:00
|
|
|
bind[1].length=(long *)&length1;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
strcpy((char *)query , "SELECT * FROM test_bind_result");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_bind_result(stmt,bind);
|
2002-11-23 03:30:55 +01:00
|
|
|
mystmt(stmt, rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
2002-11-23 03:30:55 +01:00
|
|
|
mystmt(stmt, rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n row 1: %d,%s(%d)",nData, szData, length1);
|
|
|
|
myassert(nData == 10);
|
|
|
|
myassert(strcmp(szData,"venu")==0);
|
|
|
|
myassert(length1 == 4);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
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);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/********************************************************
|
2003-01-04 08:38:47 +01:00
|
|
|
* to test ext bind result *
|
2002-06-14 02:28:25 +02:00
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_bind_result_ext()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
|
|
|
const char query[100];
|
|
|
|
uchar t_data;
|
|
|
|
short s_data;
|
|
|
|
int i_data;
|
|
|
|
longlong b_data;
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char szData[20], bData[20];
|
|
|
|
int szLength, bLength;
|
|
|
|
MYSQL_BIND bind[8];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myheader("test_bind_result_ext");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_result(c1 tinyint, c2 smallint, \
|
|
|
|
c3 int, c4 bigint, \
|
|
|
|
c5 float, c6 double, \
|
|
|
|
c7 varbinary(10), \
|
|
|
|
c8 varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_bind_result VALUES(19,2999,3999,4999999,\
|
|
|
|
2345.6,5678.89563,\
|
|
|
|
'venu','mysql')");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
bind[0].buffer_type=MYSQL_TYPE_TINY;
|
|
|
|
bind[0].buffer=(gptr)&t_data;
|
|
|
|
|
|
|
|
bind[1].buffer_type=MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type=MYSQL_TYPE_LONG;
|
|
|
|
|
|
|
|
bind[3].buffer_type=MYSQL_TYPE_LONGLONG;
|
|
|
|
bind[1].buffer=(gptr)&s_data;
|
|
|
|
|
|
|
|
bind[2].buffer=(gptr)&i_data;
|
|
|
|
bind[3].buffer=(gptr)&b_data;
|
|
|
|
|
|
|
|
bind[4].buffer_type=MYSQL_TYPE_FLOAT;
|
|
|
|
bind[4].buffer=(gptr)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type=MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[5].buffer=(gptr)&d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type=MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer=(gptr)&szData;
|
|
|
|
bind[6].length=(long *)&szLength;
|
|
|
|
|
|
|
|
bind[7].buffer_type=MYSQL_TYPE_TINY_BLOB;
|
|
|
|
bind[7].buffer=(gptr)&bData;
|
|
|
|
bind[7].length=(long *)&bLength;
|
|
|
|
|
|
|
|
strcpy((char *)query , "SELECT * FROM test_bind_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_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n data (tiny) : %d", t_data);
|
|
|
|
fprintf(stdout, "\n data (short) : %d", s_data);
|
|
|
|
fprintf(stdout, "\n data (int) : %d", i_data);
|
|
|
|
fprintf(stdout, "\n data (big) : %lld", b_data);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n data (float) : %f", f_data);
|
|
|
|
fprintf(stdout, "\n data (double) : %f", d_data);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n data (str) : %s(%d)", szData, szLength);
|
|
|
|
fprintf(stdout, "\n data (bin) : %s(%d)", bData, bLength);
|
|
|
|
|
|
|
|
|
|
|
|
myassert(t_data == 19);
|
|
|
|
myassert(s_data == 2999);
|
|
|
|
myassert(i_data == 3999);
|
|
|
|
myassert(b_data == 4999999);
|
|
|
|
/*myassert(f_data == 2345.60);*/
|
|
|
|
/*myassert(d_data == 5678.89563);*/
|
|
|
|
myassert(strcmp(szData,"venu")==0);
|
|
|
|
myassert(strcmp(bData,"mysql")==0);
|
|
|
|
myassert(szLength == 4);
|
|
|
|
myassert(bLength == 5);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test ext bind result *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_bind_result_ext1()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
const char query[100];
|
|
|
|
char t_data[20];
|
|
|
|
float s_data;
|
|
|
|
short i_data;
|
|
|
|
short b_data;
|
|
|
|
int f_data;
|
|
|
|
long bData;
|
|
|
|
long length[11];
|
|
|
|
char d_data[20];
|
|
|
|
double szData;
|
|
|
|
MYSQL_BIND bind[8];
|
|
|
|
|
|
|
|
myheader("test_bind_result_ext1");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_result(c1 tinyint, c2 smallint, \
|
|
|
|
c3 int, c4 bigint, \
|
|
|
|
c5 float, c6 double, \
|
|
|
|
c7 varbinary(10), \
|
|
|
|
c8 varchar(10))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_bind_result VALUES(120,2999,3999,54,\
|
|
|
|
2.6,58.89,\
|
|
|
|
'206','6.7')");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
bind[0].buffer_type=MYSQL_TYPE_STRING;
|
|
|
|
bind[0].buffer=(gptr)t_data;
|
|
|
|
|
|
|
|
for (rc=0; rc <= 7; rc++)
|
|
|
|
bind[rc].length= &length[rc];
|
|
|
|
|
|
|
|
bind[1].buffer_type=MYSQL_TYPE_FLOAT;
|
|
|
|
bind[1].buffer=(gptr)&s_data;
|
|
|
|
|
|
|
|
bind[2].buffer_type=MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer=(gptr)&i_data;
|
|
|
|
|
|
|
|
bind[3].buffer_type=MYSQL_TYPE_TINY;
|
|
|
|
bind[3].buffer=(gptr)&b_data;
|
|
|
|
|
|
|
|
bind[4].buffer_type=MYSQL_TYPE_LONG;
|
|
|
|
bind[4].buffer=(gptr)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type=MYSQL_TYPE_STRING;
|
|
|
|
bind[5].buffer=(gptr)d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type=MYSQL_TYPE_LONG;
|
|
|
|
bind[6].buffer=(gptr)&bData;
|
|
|
|
|
|
|
|
bind[7].buffer_type=MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[7].buffer=(gptr)&szData;
|
|
|
|
|
|
|
|
strcpy((char *)query , "SELECT * FROM test_bind_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_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n data (tiny) : %s(%ld)", t_data, length[0]);
|
|
|
|
fprintf(stdout, "\n data (short) : %f(%ld)", s_data, length[1]);
|
|
|
|
fprintf(stdout, "\n data (int) : %d(%ld)", i_data, length[2]);
|
|
|
|
fprintf(stdout, "\n data (big) : %d(%ld)", b_data, length[3]);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n data (float) : %d(%ld)", f_data, length[4]);
|
|
|
|
fprintf(stdout, "\n data (double) : %s(%ld)", d_data, length[5]);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n data (bin) : %ld(%ld)", bData, length[6]);
|
|
|
|
fprintf(stdout, "\n data (str) : %g(%ld)", szData, length[7]);
|
|
|
|
|
|
|
|
myassert(strcmp(t_data,"120")==0);
|
|
|
|
myassert(i_data == 3999);
|
|
|
|
myassert(f_data == 2);
|
|
|
|
myassert(strcmp(d_data,"58.89")==0);
|
|
|
|
|
|
|
|
myassert(length[0] == 3);
|
|
|
|
myassert(length[1] == 4);
|
|
|
|
myassert(length[2] == 2);
|
|
|
|
myassert(length[3] == 1);
|
|
|
|
myassert(length[4] == 4);
|
|
|
|
myassert(length[5] == 5);
|
|
|
|
myassert(length[6] == 4);
|
|
|
|
myassert(length[7] == 8);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test fetching of date, time and ts *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_date()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, year;
|
|
|
|
char date[25], time[25], ts[25], ts_4[15], ts_6[20], dt[20];
|
|
|
|
int d_length, t_length, ts_length, ts4_length, ts6_length,
|
|
|
|
dt_length, y_length;
|
|
|
|
|
|
|
|
MYSQL_BIND bind[3];
|
|
|
|
|
|
|
|
myheader("test_fetch_date");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_result");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_result(c1 date, c2 time, \
|
|
|
|
c3 timestamp(14), \
|
|
|
|
c4 year, \
|
|
|
|
c5 datetime, \
|
|
|
|
c6 timestamp(4), \
|
|
|
|
c7 timestamp(6))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"INSERT INTO test_bind_result VALUES('2002-01-02',\
|
|
|
|
'12:49:00',\
|
|
|
|
'2002-01-02 17:46:59', \
|
|
|
|
2010,\
|
|
|
|
'2010-07-10', \
|
|
|
|
'2020','1999-12-29')");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
bind[0].buffer_type=MYSQL_TYPE_STRING;
|
|
|
|
bind[1]=bind[2]=bind[0];
|
|
|
|
|
|
|
|
bind[0].buffer=(gptr)&date;
|
|
|
|
bind[0].length=(long *)&d_length;
|
|
|
|
|
|
|
|
bind[1].buffer=(gptr)&time;
|
|
|
|
bind[1].length=(long *)&t_length;
|
|
|
|
|
|
|
|
bind[2].buffer=(gptr)&ts;
|
|
|
|
bind[2].length=(long *)&ts_length;
|
|
|
|
|
|
|
|
bind[3].buffer_type=MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer=(gptr)&year;
|
|
|
|
bind[3].length=(long *)&y_length;
|
|
|
|
|
|
|
|
bind[4].buffer_type=MYSQL_TYPE_STRING;
|
|
|
|
bind[4].buffer=(gptr)&dt;
|
|
|
|
bind[4].length=(long *)&dt_length;
|
|
|
|
|
|
|
|
bind[5].buffer_type=MYSQL_TYPE_STRING;
|
|
|
|
bind[5].buffer=(gptr)&ts_4;
|
|
|
|
bind[5].length=(long *)&ts4_length;
|
|
|
|
|
|
|
|
bind[6].buffer_type=MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer=(gptr)&ts_6;
|
|
|
|
bind[6].length=(long *)&ts6_length;
|
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_result",50));
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
stmt = mysql_prepare(mysql, "SELECT * FROM test_bind_result", 50);
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt,bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
2003-01-08 03:53:46 +01:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
ts_4[0]='\0';
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n date : %s(%d)", date, d_length);
|
|
|
|
fprintf(stdout, "\n time : %s(%d)", time, t_length);
|
|
|
|
fprintf(stdout, "\n ts : %s(%d)", ts, ts_length);
|
|
|
|
fprintf(stdout, "\n year : %d(%d)", year, y_length);
|
|
|
|
fprintf(stdout, "\n dt : %s(%d)", dt, dt_length);
|
|
|
|
fprintf(stdout, "\n ts(4) : %s(%d)", ts_4, ts4_length);
|
|
|
|
fprintf(stdout, "\n ts(6) : %s(%d)", ts_6, ts6_length);
|
|
|
|
|
|
|
|
myassert(strcmp(date,"2002-01-02")==0);
|
|
|
|
myassert(d_length == 10);
|
|
|
|
|
|
|
|
myassert(strcmp(time,"12:49:00")==0);
|
2003-01-08 03:53:46 +01:00
|
|
|
myassert(t_length == 8);
|
2003-01-04 08:38:47 +01:00
|
|
|
|
|
|
|
myassert(strcmp(ts,"2002-01-02 17:46:59")==0);
|
|
|
|
myassert(ts_length == 19);
|
|
|
|
|
|
|
|
myassert(year == 2010);
|
|
|
|
myassert(y_length == 4);
|
|
|
|
|
|
|
|
myassert(strcmp(dt,"2010-07-10")==0);
|
|
|
|
myassert(dt_length == 10);
|
|
|
|
|
|
|
|
myassert(ts_4[0] == '\0');
|
|
|
|
myassert(ts4_length == 0);
|
|
|
|
|
|
|
|
myassert(strcmp(ts_6,"1999-12-29")==0);
|
|
|
|
myassert(ts6_length == 10);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
/********************************************************
|
|
|
|
* to test fetching of str to all types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_str()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, i, round, bit;
|
|
|
|
long data[10], length[10];
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char s_data[10];
|
|
|
|
MYSQL_BIND bind[7];
|
|
|
|
|
|
|
|
myheader("test_fetch_str");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_str");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_str(c1 char(10),\
|
|
|
|
c2 char(10),\
|
|
|
|
c3 char(20),\
|
|
|
|
c4 char(20),\
|
|
|
|
c5 char(30),\
|
|
|
|
c6 char(40),\
|
|
|
|
c7 char(20))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"INSERT INTO test_bind_str VALUES(?,?,?,?,?,?,?)",100);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_param_count(stmt, 7);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
data[i]= round+i+1;
|
|
|
|
round= (round +10)*10;
|
|
|
|
}
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_str",50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_str",50);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_TINY;
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
|
|
|
|
|
|
|
|
bind[4].buffer_type= MYSQL_TYPE_FLOAT;
|
|
|
|
bind[4].buffer= (void *)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[5].buffer= (void *)&d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer= (void *)&s_data;
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt, bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]);
|
|
|
|
fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]);
|
|
|
|
fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]);
|
|
|
|
fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]);
|
|
|
|
fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]);
|
|
|
|
fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]);
|
|
|
|
fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
bit= 1;
|
|
|
|
|
|
|
|
for (i=0; i < 4; i++)
|
|
|
|
{
|
|
|
|
myassert(data[i] == round+i+1);
|
|
|
|
myassert(length[i] == bit);
|
|
|
|
round= (round+10)*10;
|
|
|
|
bit<<= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FLOAT */
|
|
|
|
myassert((int)f_data == round+1+i);
|
|
|
|
myassert(length[4] == 4);
|
|
|
|
|
|
|
|
/* DOUBLE */
|
|
|
|
round= (round+10)*10;
|
|
|
|
myassert((int)d_data == round+2+i);
|
|
|
|
myassert(length[5] == 8);
|
|
|
|
|
|
|
|
/* CHAR */
|
|
|
|
round= (round+10)*10;
|
|
|
|
{
|
|
|
|
char buff[20];
|
|
|
|
int len= sprintf(buff,"%d", round+3+i);
|
|
|
|
myassert(strcmp(s_data,buff)==0);
|
|
|
|
myassert(length[6] == len);
|
|
|
|
}
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test fetching of long to all types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_long()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, i, round, bit;
|
|
|
|
long data[10], length[10];
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char s_data[10];
|
|
|
|
MYSQL_BIND bind[7];
|
|
|
|
|
|
|
|
myheader("test_fetch_long");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_long(c1 int unsigned,\
|
|
|
|
c2 int unsigned,\
|
|
|
|
c3 int,\
|
|
|
|
c4 int,\
|
|
|
|
c5 int,\
|
|
|
|
c6 int unsigned,\
|
|
|
|
c7 int)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"INSERT INTO test_bind_long VALUES(?,?,?,?,?,?,?)",100);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_param_count(stmt, 7);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
data[i]= round+i+1;
|
|
|
|
round= (round +10)*10;
|
|
|
|
}
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_long",50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_TINY;
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
|
|
|
|
|
|
|
|
bind[4].buffer_type= MYSQL_TYPE_FLOAT;
|
|
|
|
bind[4].buffer= (void *)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[5].buffer= (void *)&d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer= (void *)&s_data;
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt, bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]);
|
|
|
|
fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]);
|
|
|
|
fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]);
|
|
|
|
fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]);
|
|
|
|
fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]);
|
|
|
|
fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]);
|
|
|
|
fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
bit= 1;
|
|
|
|
|
|
|
|
for (i=0; i < 4; i++)
|
|
|
|
{
|
|
|
|
myassert(data[i] == round+i+1);
|
|
|
|
myassert(length[i] == bit);
|
|
|
|
round= (round+10)*10;
|
|
|
|
bit<<= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FLOAT */
|
|
|
|
myassert((int)f_data == round+1+i);
|
|
|
|
myassert(length[4] == 4);
|
|
|
|
|
|
|
|
/* DOUBLE */
|
|
|
|
round= (round+10)*10;
|
|
|
|
myassert((int)d_data == round+2+i);
|
|
|
|
myassert(length[5] == 8);
|
|
|
|
|
|
|
|
/* CHAR */
|
|
|
|
round= (round+10)*10;
|
|
|
|
{
|
|
|
|
char buff[20];
|
|
|
|
int len= sprintf(buff,"%d", round+3+i);
|
|
|
|
myassert(strcmp(s_data,buff)==0);
|
|
|
|
myassert(length[6] == len);
|
|
|
|
}
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test fetching of short to all types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_short()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, i, round, bit;
|
|
|
|
long data[10], length[10];
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char s_data[10];
|
|
|
|
MYSQL_BIND bind[7];
|
|
|
|
|
|
|
|
myheader("test_fetch_short");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_long(c1 smallint unsigned,\
|
|
|
|
c2 smallint,\
|
|
|
|
c3 smallint unsigned,\
|
|
|
|
c4 smallint,\
|
|
|
|
c5 smallint,\
|
|
|
|
c6 smallint,\
|
|
|
|
c7 smallint unsigned)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"INSERT INTO test_bind_long VALUES(?,?,?,?,?,?,?)",100);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_param_count(stmt, 7);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
data[i]= round+i+1;
|
|
|
|
round= (round +10)*2;
|
|
|
|
}
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_long",50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_TINY;
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
|
|
|
|
|
|
|
|
bind[4].buffer_type= MYSQL_TYPE_FLOAT;
|
|
|
|
bind[4].buffer= (void *)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[5].buffer= (void *)&d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer= (void *)&s_data;
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt, bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]);
|
|
|
|
fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]);
|
|
|
|
fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]);
|
|
|
|
fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]);
|
|
|
|
fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]);
|
|
|
|
fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]);
|
|
|
|
fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
bit= 1;
|
|
|
|
|
|
|
|
for (i=0; i < 4; i++)
|
|
|
|
{
|
|
|
|
myassert(data[i] == round+i+1);
|
|
|
|
myassert(length[i] == bit);
|
|
|
|
round= (round+10)*2;
|
|
|
|
bit<<= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FLOAT */
|
|
|
|
myassert((int)f_data == round+1+i);
|
|
|
|
myassert(length[4] == 4);
|
|
|
|
|
|
|
|
/* DOUBLE */
|
|
|
|
round= (round+10)*2;
|
|
|
|
myassert((int)d_data == round+2+i);
|
|
|
|
myassert(length[5] == 8);
|
|
|
|
|
|
|
|
/* CHAR */
|
|
|
|
round= (round+10)*2;
|
|
|
|
{
|
|
|
|
char buff[20];
|
|
|
|
int len= sprintf(buff,"%d", round+3+i);
|
|
|
|
myassert(strcmp(s_data,buff)==0);
|
|
|
|
myassert(length[6] == len);
|
|
|
|
}
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test fetching of tiny to all types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_tiny()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, i, bit;
|
|
|
|
long data[10], length[10];
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char s_data[10];
|
|
|
|
MYSQL_BIND bind[7];
|
|
|
|
|
|
|
|
myheader("test_fetch_tiny");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_long(c1 tinyint unsigned,\
|
|
|
|
c2 tinyint,\
|
|
|
|
c3 tinyint unsigned,\
|
|
|
|
c4 tinyint,\
|
|
|
|
c5 tinyint,\
|
|
|
|
c6 tinyint,\
|
|
|
|
c7 tinyint unsigned)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"INSERT INTO test_bind_long VALUES(?,?,?,?,?,?,?)",100);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_param_count(stmt, 7);
|
|
|
|
|
|
|
|
rc= 10;
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
data[i]= rc+i;
|
|
|
|
rc+= 10;
|
|
|
|
}
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_long",50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_TINY;
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
|
|
|
|
|
|
|
|
bind[4].buffer_type= MYSQL_TYPE_FLOAT;
|
|
|
|
bind[4].buffer= (void *)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[5].buffer= (void *)&d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer= (void *)&s_data;
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt, bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]);
|
|
|
|
fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]);
|
|
|
|
fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]);
|
|
|
|
fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]);
|
|
|
|
fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]);
|
|
|
|
fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]);
|
|
|
|
fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]);
|
|
|
|
|
|
|
|
bit= 1;
|
|
|
|
rc= 10;
|
|
|
|
for (i=0; i < 4; i++)
|
|
|
|
{
|
|
|
|
myassert(data[i] == rc+i);
|
|
|
|
myassert(length[i] == bit);
|
|
|
|
bit<<= 1;
|
|
|
|
rc+= 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FLOAT */
|
|
|
|
rc+= i;
|
|
|
|
myassert((int)f_data == rc);
|
|
|
|
myassert(length[4] == 4);
|
|
|
|
|
|
|
|
/* DOUBLE */
|
|
|
|
rc+= 11;
|
|
|
|
myassert((int)d_data == rc);
|
|
|
|
myassert(length[5] == 8);
|
|
|
|
|
|
|
|
/* CHAR */
|
|
|
|
rc+= 11;
|
|
|
|
{
|
|
|
|
char buff[20];
|
|
|
|
int len= sprintf(buff,"%d", rc);
|
|
|
|
myassert(strcmp(s_data,buff)==0);
|
|
|
|
myassert(length[6] == len);
|
|
|
|
}
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test fetching of longlong to all types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_bigint()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, i, round, bit;
|
|
|
|
long data[10], length[10];
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char s_data[10];
|
|
|
|
MYSQL_BIND bind[7];
|
|
|
|
|
|
|
|
myheader("test_fetch_bigint");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_long(c1 bigint,\
|
|
|
|
c2 bigint,\
|
|
|
|
c3 bigint unsigned,\
|
|
|
|
c4 bigint unsigned,\
|
|
|
|
c5 bigint unsigned,\
|
|
|
|
c6 bigint unsigned,\
|
|
|
|
c7 bigint unsigned)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"INSERT INTO test_bind_long VALUES(?,?,?,?,?,?,?)",100);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_param_count(stmt, 7);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
data[i]= round+i+1;
|
|
|
|
round= (round +10)*10;
|
|
|
|
}
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_long",50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_TINY;
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
|
|
|
|
|
|
|
|
bind[4].buffer_type= MYSQL_TYPE_FLOAT;
|
|
|
|
bind[4].buffer= (void *)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[5].buffer= (void *)&d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer= (void *)&s_data;
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt, bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]);
|
|
|
|
fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]);
|
|
|
|
fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]);
|
|
|
|
fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]);
|
|
|
|
fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]);
|
|
|
|
fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]);
|
|
|
|
fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
bit= 1;
|
|
|
|
|
|
|
|
for (i=0; i < 4; i++)
|
|
|
|
{
|
|
|
|
myassert(data[i] == round+i+1);
|
|
|
|
myassert(length[i] == bit);
|
|
|
|
round= (round+10)*10;
|
|
|
|
bit<<= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FLOAT */
|
|
|
|
myassert((int)f_data == round+1+i);
|
|
|
|
myassert(length[4] == 4);
|
|
|
|
|
|
|
|
/* DOUBLE */
|
|
|
|
round= (round+10)*10;
|
|
|
|
myassert((int)d_data == round+2+i);
|
|
|
|
myassert(length[5] == 8);
|
|
|
|
|
|
|
|
/* CHAR */
|
|
|
|
round= (round+10)*10;
|
|
|
|
{
|
|
|
|
char buff[20];
|
|
|
|
int len= sprintf(buff,"%d", round+3+i);
|
|
|
|
myassert(strcmp(s_data,buff)==0);
|
|
|
|
myassert(length[6] == len);
|
|
|
|
}
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test fetching of float to all types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_float()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, i, round, bit;
|
|
|
|
long data[10], length[10];
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char s_data[10];
|
|
|
|
MYSQL_BIND bind[7];
|
|
|
|
|
|
|
|
myheader("test_fetch_float");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_long(c1 float(3),\
|
|
|
|
c2 float,\
|
|
|
|
c3 float unsigned,\
|
|
|
|
c4 float,\
|
|
|
|
c5 float,\
|
|
|
|
c6 float,\
|
|
|
|
c7 float(10) unsigned)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"INSERT INTO test_bind_long VALUES(?,?,?,?,?,?,?)",100);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_param_count(stmt, 7);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
data[i]= round+i+1;
|
|
|
|
round= (round +10)*2;
|
|
|
|
}
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_long",50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_TINY;
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
|
|
|
|
|
|
|
|
bind[4].buffer_type= MYSQL_TYPE_FLOAT;
|
|
|
|
bind[4].buffer= (void *)&f_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[5].buffer= (void *)&d_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
bind[6].buffer= (void *)&s_data;
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt, bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]);
|
|
|
|
fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]);
|
|
|
|
fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]);
|
|
|
|
fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]);
|
|
|
|
fprintf(stdout, "\n float : %f(%ld)", f_data, length[4]);
|
|
|
|
fprintf(stdout, "\n double : %g(%ld)", d_data, length[5]);
|
|
|
|
fprintf(stdout, "\n char : %s(%ld)", s_data, length[6]);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
bit= 1;
|
|
|
|
|
|
|
|
for (i=0; i < 4; i++)
|
|
|
|
{
|
|
|
|
myassert(data[i] == round+i+1);
|
|
|
|
myassert(length[i] == bit);
|
|
|
|
round= (round+10)*2;
|
|
|
|
bit<<= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FLOAT */
|
|
|
|
myassert((int)f_data == round+1+i);
|
|
|
|
myassert(length[4] == 4);
|
|
|
|
|
|
|
|
/* DOUBLE */
|
|
|
|
round= (round+10)*2;
|
|
|
|
myassert((int)d_data == round+2+i);
|
|
|
|
myassert(length[5] == 8);
|
|
|
|
|
|
|
|
/* CHAR */
|
|
|
|
round= (round+10)*2;
|
|
|
|
{
|
|
|
|
char buff[20];
|
|
|
|
int len= sprintf(buff,"%d", round+3+i);
|
|
|
|
myassert(strcmp(s_data,buff)==0);
|
|
|
|
myassert(length[6] == len);
|
|
|
|
}
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test fetching of double to all types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_fetch_double()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, i, round, bit;
|
|
|
|
long data[10], length[10];
|
|
|
|
float f_data;
|
|
|
|
double d_data;
|
|
|
|
char s_data[10];
|
|
|
|
MYSQL_BIND bind[7];
|
|
|
|
|
|
|
|
myheader("test_fetch_double");
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_bind_long");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_bind_long(c1 double(5,2),\
|
|
|
|
c2 double unsigned,\
|
|
|
|
c3 double unsigned,\
|
|
|
|
c4 double unsigned,\
|
|
|
|
c5 double unsigned,\
|
|
|
|
c6 double unsigned,\
|
|
|
|
c7 double unsigned)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"INSERT INTO test_bind_long VALUES(?,?,?,?,?,?,?)",100);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_param_count(stmt, 7);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
data[i]= round+i+1;
|
|
|
|
round= (round +10)*10;
|
|
|
|
}
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
myassert(1 == my_stmt_result("SELECT * FROM test_bind_long",50));
|
|
|
|
|
|
|
|
stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_long",50);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
for (i=0; i < 7; i++)
|
|
|
|
{
|
|
|
|
bind[i].buffer= (void *)&data[i];
|
|
|
|
bind[i].length= (long *)&length[i];
|
|
|
|
}
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_TINY;
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
|
|
|
|
|
|
|
|
bind[4].buffer_type= MYSQL_TYPE_STRING;
|
|
|
|
bind[4].buffer= (void *)&s_data;
|
|
|
|
|
|
|
|
bind[5].buffer_type= MYSQL_TYPE_FLOAT;
|
|
|
|
bind[5].buffer= (void *)&f_data;
|
|
|
|
|
|
|
|
bind[6].buffer_type= MYSQL_TYPE_DOUBLE;
|
|
|
|
bind[6].buffer= (void *)&d_data;
|
|
|
|
|
|
|
|
rc = mysql_bind_result(stmt, bind);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n tiny : %ld(%ld)", data[0], length[0]);
|
|
|
|
fprintf(stdout, "\n short : %ld(%ld)", data[1], length[1]);
|
|
|
|
fprintf(stdout, "\n int : %ld(%ld)", data[2], length[2]);
|
|
|
|
fprintf(stdout, "\n longlong : %ld(%ld)", data[3], length[3]);
|
|
|
|
fprintf(stdout, "\n float : %f(%ld)", f_data, length[5]);
|
|
|
|
fprintf(stdout, "\n double : %g(%ld)", d_data, length[6]);
|
|
|
|
fprintf(stdout, "\n char : %s(%ld)", s_data, length[4]);
|
|
|
|
|
|
|
|
round= 0;
|
|
|
|
bit= 1;
|
|
|
|
|
|
|
|
for (i=0; i < 4; i++)
|
|
|
|
{
|
|
|
|
myassert(data[i] == round+i+1);
|
|
|
|
myassert(length[i] == bit);
|
|
|
|
round= (round+10)*10;
|
|
|
|
bit<<= 1;
|
|
|
|
}
|
|
|
|
/* CHAR */
|
|
|
|
{
|
|
|
|
char buff[20];
|
|
|
|
int len= sprintf(buff,"%d", round+1+i);
|
|
|
|
myassert(strcmp(s_data,buff)==0);
|
|
|
|
myassert(length[4] == len);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FLOAT */
|
|
|
|
round= (round+10)*10;
|
|
|
|
myassert((int)f_data == round+2+i);
|
|
|
|
myassert(length[5] == 4);
|
|
|
|
|
|
|
|
/* DOUBLE */
|
|
|
|
round= (round+10)*10;
|
|
|
|
myassert((int)d_data == round+3+i);
|
|
|
|
myassert(length[6] == 8);
|
|
|
|
|
|
|
|
rc = mysql_fetch(stmt);
|
|
|
|
myassert(rc == MYSQL_NO_DATA);
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
2003-01-04 08:38:47 +01:00
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple prepare with all possible types *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_prepare_ext()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
char *sql;
|
|
|
|
int nData=1;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
char tData=1;
|
|
|
|
short sData=10;
|
|
|
|
longlong bData=20;
|
|
|
|
MYSQL_BIND bind_int[6];
|
|
|
|
|
|
|
|
myheader("test_prepare_ext");
|
|
|
|
|
|
|
|
init_bind(bind_int);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_ext");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
sql = (char *)"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,\
|
2002-06-14 02:28:25 +02:00
|
|
|
c25 blob,\
|
|
|
|
c26 text,\
|
|
|
|
c27 mediumblob,\
|
|
|
|
c28 mediumtext,\
|
|
|
|
c29 longblob,\
|
|
|
|
c30 longtext,\
|
|
|
|
c31 enum('one','two','three'),\
|
|
|
|
c32 set('monday','tuesday','wednesday'))";
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
rc = mysql_query(mysql,sql);
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert by prepare - all integers */
|
2002-11-23 03:30:55 +01:00
|
|
|
strcpy(query,(char *)"INSERT INTO test_prepare_ext(c1,c2,c3,c4,c5,c6) VALUES(?,?,?,?,?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql,query, strlen(query));
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,6);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/*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;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
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);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT c1,c2,c3,c4,c5,c6 FROM test_prepare_ext");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(nData == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test real and alias names *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_field_names()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
|
|
|
myheader("test_field_names");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n %d,%d,%d",MYSQL_TYPE_DECIMAL,MYSQL_TYPE_NEWDATE,MYSQL_TYPE_ENUM);
|
2002-11-23 03:30:55 +01:00
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_field_names1");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_field_names2");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_field_names1(id int,name varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_field_names2(id int,name varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* with table name included with true column name */
|
|
|
|
rc = mysql_query(mysql,"SELECT id as 'id-alias' FROM test_field_names1");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(0 == my_process_result_set(result));
|
2002-11-23 03:30:55 +01:00
|
|
|
mysql_free_result(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* 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");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert(0 == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test warnings *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_warnings()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_warnings");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"SHOW WARNINGS");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test errors *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_errors()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
|
|
|
|
myheader("test_errors");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"SHOW ERRORS");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
my_process_result_set(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple prepare-insert *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_insert()
|
2002-11-23 03:30:55 +01:00
|
|
|
{
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc, length;
|
2002-06-14 02:28:25 +02:00
|
|
|
char query[200];
|
|
|
|
char str_data[50];
|
|
|
|
char tiny_data;
|
|
|
|
MYSQL_RES *result;
|
2002-11-23 03:30:55 +01:00
|
|
|
MYSQL_BIND bind[2];
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_insert");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_autocommit(mysql, true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_insert");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prep_insert(col1 tinyint,\
|
|
|
|
col2 varchar(50))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* insert by prepare */
|
2002-06-14 02:36:15 +02:00
|
|
|
bzero(bind, sizeof(bind));
|
2002-06-14 02:28:25 +02:00
|
|
|
strcpy(query,"INSERT INTO test_prep_insert VALUES(?,?)");
|
2002-10-02 12:33:08 +02:00
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
2003-01-04 08:38:47 +01:00
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,2);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* 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;
|
2002-11-23 03:30:55 +01:00
|
|
|
bind[1].length=(long *)&length;
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
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++)
|
|
|
|
{
|
2002-11-23 03:30:55 +01:00
|
|
|
length = sprintf(str_data,"MySQL%d",tiny_data);
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_execute(stmt);
|
|
|
|
mystmt(stmt, rc);
|
|
|
|
}
|
|
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
/* now fetch the results ..*/
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/* test the results now, only one row should exists */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_prep_insert");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* get the result */
|
|
|
|
result = mysql_store_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
myassert((int)tiny_data == my_process_result_set(result));
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test simple prepare-resultset info *
|
|
|
|
*********************************************************/
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_prepare_resultset()
|
2002-11-23 03:30:55 +01:00
|
|
|
{
|
2002-06-14 02:28:25 +02:00
|
|
|
MYSQL_STMT *stmt;
|
2003-01-04 08:38:47 +01:00
|
|
|
int rc;
|
2002-06-14 02:28:25 +02:00
|
|
|
char query[200];
|
|
|
|
MYSQL_RES *result;
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_prepare_resultset");
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_autocommit(mysql, true);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prepare_resultset");
|
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prepare_resultset(id int,\
|
|
|
|
name varchar(50),extra double)");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
strcpy(query,"SELECT * FROM test_prepare_resultset");
|
|
|
|
stmt = PREPARE(mysql, query);
|
|
|
|
mystmt_init(stmt);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
verify_param_count(stmt,0);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
result = mysql_prepare_result(stmt);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
|
|
|
my_print_result_metadata(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* to test field flags (verify .NET provider) *
|
|
|
|
*********************************************************/
|
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
static void test_field_flags()
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
myheader("test_field_flags");
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_field_flags");
|
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
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))");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
/* with table name included with true column name */
|
|
|
|
rc = mysql_query(mysql,"SELECT * FROM test_field_flags");
|
2002-11-23 03:30:55 +01:00
|
|
|
myquery(rc);
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
result = mysql_use_result(mysql);
|
2002-11-23 03:30:55 +01:00
|
|
|
mytest(result);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
mysql_field_seek(result,0);
|
|
|
|
fputc('\n', stdout);
|
|
|
|
|
|
|
|
for(i=0; i< mysql_num_fields(result); i++)
|
|
|
|
{
|
|
|
|
field = mysql_fetch_field(result);
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n field:%d",i);
|
2002-06-14 02:28:25 +02:00
|
|
|
if(field->flags & NOT_NULL_FLAG)
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n NOT_NULL_FLAG");
|
2002-06-14 02:28:25 +02:00
|
|
|
if(field->flags & PRI_KEY_FLAG)
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n PRI_KEY_FLAG");
|
2002-06-14 02:28:25 +02:00
|
|
|
if(field->flags & UNIQUE_KEY_FLAG)
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n UNIQUE_KEY_FLAG");
|
2002-06-14 02:28:25 +02:00
|
|
|
if(field->flags & MULTIPLE_KEY_FLAG)
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n MULTIPLE_KEY_FLAG");
|
2002-06-14 02:28:25 +02:00
|
|
|
if(field->flags & AUTO_INCREMENT_FLAG)
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n AUTO_INCREMENT_FLAG");
|
|
|
|
|
|
|
|
}
|
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-04 08:38:47 +01:00
|
|
|
/**************************************************************
|
|
|
|
* Test mysql_stmt_close for open stmts *
|
|
|
|
**************************************************************/
|
|
|
|
static void test_stmt_close()
|
|
|
|
{
|
|
|
|
MYSQL *lmysql;
|
|
|
|
MYSQL_STMT *stmt1, *stmt2, *stmt3, *stmt_x;
|
|
|
|
MYSQL_BIND param[1];
|
|
|
|
MYSQL_RES *result;
|
|
|
|
char query[100];
|
|
|
|
unsigned int count;
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
myheader("test_stmt_close");
|
|
|
|
|
|
|
|
init_bind(param);
|
|
|
|
if(!(lmysql = mysql_init(NULL)))
|
|
|
|
{
|
|
|
|
myerror("mysql_init() failed");
|
|
|
|
exit(0);
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2003-01-04 08:38:47 +01:00
|
|
|
if (!(mysql_real_connect(lmysql,opt_host,opt_user,
|
|
|
|
opt_password, opt_db ? opt_db:"inter_client_test_db", opt_port,
|
|
|
|
opt_unix_socket, 0)))
|
|
|
|
{
|
|
|
|
myerror("connection failed");
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
if (opt_db)
|
|
|
|
strcpy(current_db,opt_db);
|
|
|
|
|
|
|
|
/* set AUTOCOMMIT to ON*/
|
|
|
|
mysql_autocommit(lmysql, true);
|
|
|
|
mysql_query(lmysql,"DROP TABLE IF EXISTS test_stmt_close");
|
|
|
|
mysql_query(lmysql,"CREATE TABLE test_stmt_close(id int)");
|
|
|
|
|
|
|
|
strcpy(query,"ALTER TABLE test_stmt_close ADD name varchar(20)");
|
|
|
|
stmt1= PREPARE(lmysql, query);
|
|
|
|
mystmt_init(stmt1);
|
|
|
|
count= mysql_param_count(stmt1);
|
|
|
|
fprintf(stdout,"\n total params in alter: %d", count);
|
|
|
|
myassert(count == 0);
|
|
|
|
strcpy(query,"INSERT INTO test_stmt_close(id) VALUES(?)");
|
|
|
|
stmt_x= PREPARE(mysql, query);
|
|
|
|
mystmt_init(stmt_x);
|
|
|
|
count= mysql_param_count(stmt_x);
|
|
|
|
fprintf(stdout,"\n total params in insert: %d", count);
|
|
|
|
myassert(count == 1);
|
|
|
|
strcpy(query,"UPDATE test_stmt_close SET id=? WHERE id=?");
|
|
|
|
stmt3= PREPARE(lmysql, query);
|
|
|
|
mystmt_init(stmt3);
|
|
|
|
count= mysql_param_count(stmt3);
|
|
|
|
fprintf(stdout,"\n total params in update: %d", count);
|
|
|
|
myassert(count == 2);
|
|
|
|
strcpy(query,"SELECT * FROM test_stmt_close WHERE id=?");
|
|
|
|
stmt2= PREPARE(lmysql, query);
|
|
|
|
mystmt_init(stmt2);
|
|
|
|
count= mysql_param_count(stmt2);
|
|
|
|
fprintf(stdout,"\n total params in select: %d", count);
|
|
|
|
myassert(count == 1);
|
|
|
|
|
|
|
|
rc= mysql_stmt_close(stmt1);
|
|
|
|
fprintf(stdout,"\n mysql_close_stmt(1) returned: %d", rc);
|
|
|
|
myassert(rc == 0);
|
|
|
|
mysql_close(lmysql); /* it should free all stmts */
|
|
|
|
#if NOT_VALID
|
|
|
|
rc= mysql_stmt_close(stmt3);
|
|
|
|
fprintf(stdout,"\n mysql_close_stmt(3) returned: %d", rc);
|
|
|
|
myassert( rc == 1);
|
|
|
|
rc= mysql_stmt_close(stmt2);
|
|
|
|
fprintf(stdout,"\n mysql_close_stmt(2) returned: %d", rc);
|
|
|
|
myassert( rc == 1);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
count= 100;
|
|
|
|
param[0].buffer=(gptr)&count;
|
|
|
|
param[0].buffer_type=MYSQL_TYPE_LONG;
|
|
|
|
rc = mysql_bind_param(stmt_x, param);
|
|
|
|
mystmt(stmt_x, rc);
|
|
|
|
rc = mysql_execute(stmt_x);
|
|
|
|
mystmt(stmt_x, rc);
|
|
|
|
|
|
|
|
rc= (ulong)mysql_affected_rows(stmt_x->mysql);
|
|
|
|
fprintf(stdout,"\n total rows affected: %d", rc);
|
|
|
|
myassert (rc == 1);
|
|
|
|
|
|
|
|
rc= mysql_stmt_close(stmt_x);
|
|
|
|
fprintf(stdout,"\n mysql_close_stmt(x) returned: %d", rc);
|
|
|
|
myassert( rc == 0);
|
|
|
|
|
|
|
|
/*verify_col_data("test_stmt_close", "id", "100");*/
|
|
|
|
rc = mysql_query(mysql,"SELECT id FROM test_stmt_close");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
result = mysql_store_result(mysql);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
myassert(1 == my_process_result_set(result));
|
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* To test simple set-variable prepare *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_set_variable()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc, select_limit=88;
|
|
|
|
char query[200];
|
|
|
|
MYSQL_BIND bind[1];
|
|
|
|
MYSQL_RES *result;
|
|
|
|
|
|
|
|
|
|
|
|
myheader("test_set_variable");
|
|
|
|
|
|
|
|
rc = mysql_autocommit(mysql, true);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
strcpy(query,"SET GLOBAL delayed_insert_limit=?");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,1);
|
|
|
|
|
|
|
|
result= mysql_param_result(stmt);
|
|
|
|
mytest_r(result);
|
|
|
|
|
|
|
|
init_bind(bind);
|
|
|
|
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[0].buffer=(gptr)&select_limit;
|
|
|
|
|
|
|
|
rc = mysql_bind_param(stmt, bind);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
rc= mysql_execute(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
mysql_store_result(mysql);
|
|
|
|
|
|
|
|
strcpy(query,"show variables like 'delayed_insert_limit'");
|
|
|
|
rc = mysql_query(mysql,query);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_col_data(NullS, NullS, "88");
|
|
|
|
|
|
|
|
#if TO_BE_FIXED
|
|
|
|
|
|
|
|
select_limit= 100;/* reset to default */
|
|
|
|
rc= mysql_execute(stmt);
|
|
|
|
mystmt(stmt,rc);
|
|
|
|
|
|
|
|
mysql_store_result(mysql);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,query);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
verify_col_data(NullS, NullS, "100");
|
|
|
|
#endif
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
#if NOT_USED
|
|
|
|
/* Insert meta info .. */
|
|
|
|
static void test_insert_meta()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
char query[200];
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
|
|
|
|
myheader("test_insert_meta");
|
|
|
|
|
|
|
|
rc = mysql_autocommit(mysql, true);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_insert");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prep_insert(col1 tinyint,\
|
|
|
|
col2 varchar(50), col3 varchar(30))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
strcpy(query,"INSERT INTO test_prep_insert VALUES(10,'venu1','test')");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,0);
|
|
|
|
|
|
|
|
result= mysql_param_result(stmt);
|
|
|
|
mytest_r(result);
|
|
|
|
|
|
|
|
strcpy(query,"INSERT INTO test_prep_insert VALUES(?,'venu',?)");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,2);
|
|
|
|
|
|
|
|
result= mysql_param_result(stmt);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
my_print_result_metadata(result);
|
|
|
|
|
|
|
|
mysql_field_seek(result, 0);
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout, "\n obtained: `%s` (expected: `%s`)", field->name, "col1");
|
|
|
|
myassert(strcmp(field->name,"col1")==0);
|
|
|
|
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout, "\n obtained: `%s` (expected: `%s`)", field->name, "col3");
|
|
|
|
myassert(strcmp(field->name,"col3")==0);
|
|
|
|
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest_r(field);
|
|
|
|
|
|
|
|
mysql_free_result(result);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Update meta info .. */
|
|
|
|
static void test_update_meta()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
char query[200];
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
|
|
|
|
myheader("test_update_meta");
|
|
|
|
|
|
|
|
rc = mysql_autocommit(mysql, true);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_update");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prep_update(col1 tinyint,\
|
|
|
|
col2 varchar(50), col3 varchar(30))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
strcpy(query,"UPDATE test_prep_update SET col1=10, col2='venu1' WHERE col3='test'");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,0);
|
|
|
|
|
|
|
|
result= mysql_param_result(stmt);
|
|
|
|
mytest_r(result);
|
|
|
|
|
|
|
|
strcpy(query,"UPDATE test_prep_update SET col1=?, col2='venu' WHERE col3=?");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,2);
|
|
|
|
|
|
|
|
result= mysql_param_result(stmt);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
my_print_result_metadata(result);
|
|
|
|
|
|
|
|
mysql_field_seek(result, 0);
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout, "\n col obtained: `%s` (expected: `%s`)", field->name, "col1");
|
|
|
|
fprintf(stdout, "\n tab obtained: `%s` (expected: `%s`)", field->table, "test_prep_update");
|
|
|
|
myassert(strcmp(field->name,"col1")==0);
|
|
|
|
myassert(strcmp(field->table,"test_prep_update")==0);
|
|
|
|
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout, "\n col obtained: `%s` (expected: `%s`)", field->name, "col3");
|
|
|
|
fprintf(stdout, "\n tab obtained: `%s` (expected: `%s`)", field->table, "test_prep_update");
|
|
|
|
myassert(strcmp(field->name,"col3")==0);
|
|
|
|
myassert(strcmp(field->table,"test_prep_update")==0);
|
|
|
|
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest_r(field);
|
|
|
|
|
|
|
|
mysql_free_result(result);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Select meta info .. */
|
|
|
|
static void test_select_meta()
|
|
|
|
{
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
int rc;
|
|
|
|
char query[200];
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
|
|
|
|
myheader("test_select_meta");
|
|
|
|
|
|
|
|
rc = mysql_autocommit(mysql, true);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_prep_select");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_prep_select(col1 tinyint,\
|
|
|
|
col2 varchar(50), col3 varchar(30))");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
strcpy(query,"SELECT * FROM test_prep_select WHERE col1=10");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,0);
|
|
|
|
|
|
|
|
result= mysql_param_result(stmt);
|
|
|
|
mytest_r(result);
|
|
|
|
|
|
|
|
strcpy(query,"SELECT col1, col3 from test_prep_select WHERE col1=? AND col3='test' AND col2= ?");
|
|
|
|
stmt = mysql_prepare(mysql, query, strlen(query));
|
|
|
|
mystmt_init(stmt);
|
|
|
|
|
|
|
|
verify_param_count(stmt,2);
|
|
|
|
|
|
|
|
result= mysql_param_result(stmt);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
my_print_result_metadata(result);
|
|
|
|
|
|
|
|
mysql_field_seek(result, 0);
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout, "\n col obtained: `%s` (expected: `%s`)", field->name, "col1");
|
|
|
|
fprintf(stdout, "\n tab obtained: `%s` (expected: `%s`)", field->table, "test_prep_select");
|
|
|
|
myassert(strcmp(field->name,"col1")==0);
|
|
|
|
myassert(strcmp(field->table,"test_prep_select")==0);
|
|
|
|
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout, "\n col obtained: `%s` (expected: `%s`)", field->name, "col2");
|
|
|
|
fprintf(stdout, "\n tab obtained: `%s` (expected: `%s`)", field->table, "test_prep_select");
|
|
|
|
myassert(strcmp(field->name,"col2")==0);
|
|
|
|
myassert(strcmp(field->table,"test_prep_select")==0);
|
|
|
|
|
|
|
|
field= mysql_fetch_field(result);
|
|
|
|
mytest_r(field);
|
2003-01-18 21:58:19 +01:00
|
|
|
n
|
2003-01-04 08:38:47 +01:00
|
|
|
mysql_free_result(result);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Test FUNCTION field info / DATE_FORMAT() table_name . */
|
|
|
|
static void test_func_fields()
|
|
|
|
{
|
|
|
|
int rc;
|
|
|
|
MYSQL_RES *result;
|
|
|
|
MYSQL_FIELD *field;
|
|
|
|
|
|
|
|
myheader("test_func_fields");
|
|
|
|
|
|
|
|
rc = mysql_autocommit(mysql, true);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_dateformat");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_commit(mysql);
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql,"CREATE TABLE test_dateformat(id int, \
|
|
|
|
ts timestamp)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql, "INSERT INTO test_dateformat(id) values(10)");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
rc = mysql_query(mysql, "SELECT ts FROM test_dateformat");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
result = mysql_store_result(mysql);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout,"\n table name: `%s` (expected: `%s`)", field->table,
|
|
|
|
"test_dateformat");
|
|
|
|
myassert(strcmp(field->table, "test_dateformat")==0);
|
|
|
|
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
mytest_r(field); /* no more fields */
|
|
|
|
|
|
|
|
mysql_free_result(result);
|
|
|
|
|
|
|
|
/* DATE_FORMAT */
|
|
|
|
rc = mysql_query(mysql, "SELECT DATE_FORMAT(ts,'%Y') AS 'venu' FROM test_dateformat");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
result = mysql_store_result(mysql);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout,"\n table name: `%s` (expected: `%s`)", field->table, "");
|
|
|
|
myassert(field->table[0] == '\0');
|
|
|
|
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
mytest_r(field); /* no more fields */
|
|
|
|
|
|
|
|
mysql_free_result(result);
|
|
|
|
|
|
|
|
/* FIELD ALIAS TEST */
|
|
|
|
rc = mysql_query(mysql, "SELECT DATE_FORMAT(ts,'%Y') AS 'YEAR' FROM test_dateformat");
|
|
|
|
myquery(rc);
|
|
|
|
|
|
|
|
result = mysql_store_result(mysql);
|
|
|
|
mytest(result);
|
|
|
|
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
mytest(field);
|
|
|
|
fprintf(stdout,"\n field name: `%s` (expected: `%s`)", field->name, "YEAR");
|
|
|
|
fprintf(stdout,"\n field org name: `%s` (expected: `%s`)",field->org_name,"");
|
|
|
|
myassert(strcmp(field->name, "YEAR")==0);
|
|
|
|
myassert(field->org_name[0] == '\0');
|
|
|
|
|
|
|
|
field = mysql_fetch_field(result);
|
|
|
|
mytest_r(field); /* no more fields */
|
|
|
|
|
2002-06-14 02:28:25 +02:00
|
|
|
mysql_free_result(result);
|
|
|
|
}
|
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
/* Multiple stmts .. */
|
|
|
|
static void test_multi_stmt()
|
|
|
|
{
|
2003-01-18 21:58:19 +01:00
|
|
|
#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
|
2003-01-08 03:53:46 +01:00
|
|
|
}
|
|
|
|
|
2003-01-10 03:32:08 +01:00
|
|
|
/********************************************************
|
|
|
|
* to test simple sample - manual *
|
|
|
|
*********************************************************/
|
|
|
|
static void test_manual_sample()
|
|
|
|
{
|
|
|
|
unsigned int param_count;
|
|
|
|
MYSQL_BIND bind[3];
|
|
|
|
MYSQL_STMT *stmt;
|
|
|
|
short small_data;
|
|
|
|
int int_data;
|
|
|
|
char str_data[50], query[255];
|
|
|
|
long length;
|
|
|
|
ulonglong affected_rows;
|
|
|
|
|
|
|
|
myheader("test_manual_sample");
|
|
|
|
|
|
|
|
/*
|
|
|
|
Sample which is incorporated directly in the manual under Prepared
|
|
|
|
statements section (Example from mysql_execute()
|
|
|
|
*/
|
|
|
|
|
|
|
|
mysql_autocommit(mysql, 1);
|
|
|
|
if (mysql_query(mysql,"DROP TABLE IF EXISTS test_table"))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n drop table failed");
|
|
|
|
fprintf(stderr, "\n %s", mysql_error(mysql));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
if (mysql_query(mysql,"CREATE TABLE test_table(col1 int, col2 varchar(50), \
|
|
|
|
col3 smallint,\
|
|
|
|
col4 timestamp(14))"))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n create table failed");
|
|
|
|
fprintf(stderr, "\n %s", mysql_error(mysql));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Prepare a insert query with 3 parameters */
|
|
|
|
strcpy(query, "INSERT INTO test_table(col1,col2,col3) values(?,?,?)");
|
|
|
|
if(!(stmt = mysql_prepare(mysql,query,strlen(query))))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n prepare, insert failed");
|
|
|
|
fprintf(stderr, "\n %s", mysql_error(mysql));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
fprintf(stdout, "\n prepare, insert successful");
|
|
|
|
|
|
|
|
/* Get the parameter count from the statement */
|
|
|
|
param_count= mysql_param_count(stmt);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n total parameters in insert: %d", param_count);
|
|
|
|
if (param_count != 3) /* validate parameter count */
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n invalid parameter count returned by MySQL");
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Bind the data for the parameters */
|
|
|
|
|
|
|
|
/* INTEGER PART */
|
|
|
|
memset(bind,0,sizeof(bind));
|
|
|
|
bind[0].buffer_type= MYSQL_TYPE_LONG;
|
|
|
|
bind[0].buffer= (void *)&int_data;
|
|
|
|
|
|
|
|
/* STRING PART */
|
|
|
|
bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
|
|
|
|
bind[1].buffer= (void *)str_data;
|
|
|
|
bind[1].buffer_length= sizeof(str_data);
|
|
|
|
|
|
|
|
/* SMALLINT PART */
|
|
|
|
bind[2].buffer_type= MYSQL_TYPE_SHORT;
|
|
|
|
bind[2].buffer= (void *)&small_data;
|
|
|
|
bind[2].length= (long *)&length;
|
|
|
|
|
|
|
|
/* Bind the buffers */
|
|
|
|
if (mysql_bind_param(stmt, bind))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n param bind failed");
|
|
|
|
fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Specify the data */
|
|
|
|
int_data= 10; /* integer */
|
|
|
|
strcpy(str_data,"MySQL"); /* string */
|
|
|
|
/* INSERT SMALLINT data as NULL */
|
|
|
|
length= MYSQL_NULL_DATA;
|
|
|
|
|
|
|
|
/* Execute the insert statement - 1*/
|
|
|
|
if (mysql_execute(stmt))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n execute 1 failed");
|
|
|
|
fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get the total rows affected */
|
|
|
|
affected_rows= mysql_stmt_affected_rows(stmt);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n total affected rows: %lld", affected_rows);
|
|
|
|
if (affected_rows != 1) /* validate affected rows */
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n invalid affected rows by MySQL");
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Re-execute the insert, by changing the values */
|
|
|
|
int_data= 1000;
|
|
|
|
strcpy(str_data,"The most popular open source database");
|
|
|
|
small_data= 1000; /* smallint */
|
|
|
|
length= 0;
|
|
|
|
|
|
|
|
/* Execute the insert statement - 2*/
|
|
|
|
if (mysql_execute(stmt))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n execute 2 failed");
|
|
|
|
fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get the total rows affected */
|
|
|
|
affected_rows= mysql_stmt_affected_rows(stmt);
|
|
|
|
|
|
|
|
fprintf(stdout, "\n total affected rows: %lld", affected_rows);
|
|
|
|
if (affected_rows != 1) /* validate affected rows */
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n invalid affected rows by MySQL");
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Close the statement */
|
|
|
|
if (mysql_stmt_close(stmt))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n failed while closing the statement");
|
|
|
|
fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
myassert(2 == my_stmt_result("SELECT * FROM test_table",50));
|
|
|
|
|
|
|
|
/* DROP THE TABLE */
|
|
|
|
if (mysql_query(mysql,"DROP TABLE test_table"))
|
|
|
|
{
|
|
|
|
fprintf(stderr, "\n drop table failed");
|
|
|
|
fprintf(stderr, "\n %s", mysql_error(mysql));
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
fprintf(stdout, "Success !!!");
|
|
|
|
}
|
|
|
|
|
2003-01-18 21:58:19 +01:00
|
|
|
/********************************************************
|
|
|
|
* 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
|
|
|
|
}
|
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
static struct my_option myctest_long_options[] =
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2002-06-14 02:36:15 +02:00
|
|
|
{"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
|
|
|
|
0, 0, 0, 0, 0},
|
|
|
|
{"database", 'D', "Database to use", (gptr*) &opt_db, (gptr*) &opt_db,
|
|
|
|
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
2002-11-23 03:30:55 +01:00
|
|
|
{"host", 'h', "Connect to host", (gptr*) &opt_host, (gptr*) &opt_host, 0, GET_STR_ALLOC,
|
2002-06-14 02:36:15 +02:00
|
|
|
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
|
|
|
{"password", 'p',
|
|
|
|
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
|
|
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
2002-11-23 03:30:55 +01:00
|
|
|
#ifndef DONT_ALLOW_USER_CHANGE
|
2002-06-14 02:36:15 +02:00
|
|
|
{"user", 'u', "User for login if not current user", (gptr*) &opt_user,
|
2002-11-23 03:30:55 +01:00
|
|
|
(gptr*) &opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
|
|
|
#endif
|
2002-06-14 02:36:15 +02:00
|
|
|
{"port", 'P', "Port number to use for connection", (gptr*) &opt_port,
|
|
|
|
(gptr*) &opt_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
|
|
|
{"socket", 'S', "Socket file to use for connection", (gptr*) &opt_unix_socket,
|
2002-11-23 03:30:55 +01:00
|
|
|
(gptr*) &opt_unix_socket, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
2002-06-14 02:36:15 +02:00
|
|
|
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
2002-06-14 02:28:25 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
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");
|
2003-01-18 21:58:19 +01:00
|
|
|
puts(" Copyright (C) 1995-2003 MySQL AB ");
|
2002-06-14 02:28:25 +02:00
|
|
|
puts("-----------------------------------------------------------------------\n");
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"usage: %s [OPTIONS]\n\n", my_progname);
|
|
|
|
fprintf(stdout,"\
|
2002-06-14 02:28:25 +02:00
|
|
|
-?, --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__
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\
|
2002-06-14 02:28:25 +02:00
|
|
|
-W, --pipe Use named pipes to connect to server.\n");
|
|
|
|
#endif
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\
|
2002-06-14 02:28:25 +02:00
|
|
|
-P, --port=... Port number to use for connection.\n\
|
|
|
|
-S, --socket=... Socket file to use for connection.\n");
|
|
|
|
#ifndef DONT_ALLOW_USER_CHANGE
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\
|
2002-06-14 02:28:25 +02:00
|
|
|
-u, --user=# User for login if not current user.\n");
|
|
|
|
#endif
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"*********************************************************************\n");
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
static my_bool
|
|
|
|
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|
|
|
char *argument)
|
2002-06-14 02:28:25 +02:00
|
|
|
{
|
2002-06-14 02:36:15 +02:00
|
|
|
switch (optid) {
|
|
|
|
case 'p':
|
|
|
|
if (argument)
|
|
|
|
{
|
2002-11-23 03:30:55 +01:00
|
|
|
char *start=argument;
|
2002-06-14 02:36:15 +02:00
|
|
|
my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR));
|
|
|
|
opt_password= my_strdup(argument, MYF(MY_FAE));
|
|
|
|
while (*argument) *argument++= 'x'; /* Destroy argument */
|
2002-11-23 03:30:55 +01:00
|
|
|
if (*start)
|
|
|
|
start[1]=0;
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2002-06-14 02:36:15 +02:00
|
|
|
else
|
|
|
|
tty_password= 1;
|
|
|
|
break;
|
|
|
|
case '?':
|
|
|
|
case 'I': /* Info */
|
2002-06-14 02:28:25 +02:00
|
|
|
usage();
|
2002-11-23 03:30:55 +01:00
|
|
|
exit(0);
|
2002-06-14 02:36:15 +02:00
|
|
|
break;
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
2002-06-14 02:36:15 +02:00
|
|
|
return 0;
|
2002-06-14 02:28:25 +02:00
|
|
|
}
|
|
|
|
|
2002-06-14 02:36:15 +02:00
|
|
|
static const char *load_default_groups[]= { "client",0 };
|
|
|
|
|
|
|
|
static void get_options(int argc, char **argv)
|
|
|
|
{
|
|
|
|
int ho_error;
|
|
|
|
|
|
|
|
load_defaults("my",load_default_groups,&argc,&argv);
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
if ((ho_error=handle_options(&argc,&argv, myctest_long_options,
|
2002-06-14 02:36:15 +02:00
|
|
|
get_one_option)))
|
|
|
|
exit(ho_error);
|
|
|
|
|
2002-11-23 03:30:55 +01:00
|
|
|
/*free_defaults(argv);*/
|
2002-06-14 02:36:15 +02:00
|
|
|
if (tty_password)
|
|
|
|
opt_password=get_tty_password(NullS);
|
|
|
|
return;
|
|
|
|
}
|
2002-06-14 02:28:25 +02:00
|
|
|
|
|
|
|
/********************************************************
|
|
|
|
* main routine *
|
|
|
|
*********************************************************/
|
2002-06-14 02:36:15 +02:00
|
|
|
int main(int argc, char **argv)
|
2002-11-23 03:30:55 +01:00
|
|
|
{
|
2002-06-14 02:28:25 +02:00
|
|
|
MY_INIT(argv[0]);
|
2002-11-23 03:30:55 +01:00
|
|
|
get_options(argc,argv);
|
2002-06-14 02:28:25 +02:00
|
|
|
|
2003-01-08 03:53:46 +01:00
|
|
|
client_connect(); /* connect to server */
|
2003-01-18 21:58:19 +01:00
|
|
|
|
|
|
|
/* Start of tests */
|
|
|
|
test_multi_query();
|
|
|
|
test_select_show(); /* test show syntax */
|
|
|
|
test_prepare_alter(); /* change table schema in middle of prepare */
|
2003-01-10 03:32:08 +01:00
|
|
|
test_manual_sample(); /* sample in the manual */
|
2003-01-04 08:38:47 +01:00
|
|
|
test_bind_result(); /* result bind test */
|
|
|
|
test_fetch_null(); /* to fetch null data */
|
2003-01-08 03:53:46 +01:00
|
|
|
test_fetch_date(); /* to fetch date,time and timestamp */
|
|
|
|
test_fetch_str(); /* to fetch string to all types */
|
|
|
|
test_fetch_long(); /* to fetch long to all types */
|
|
|
|
test_fetch_short(); /* to fetch short to all types */
|
|
|
|
test_fetch_tiny(); /* to fetch tiny to all types */
|
|
|
|
test_fetch_bigint(); /* to fetch bigint to all types */
|
|
|
|
test_fetch_float(); /* to fetch float to all types */
|
|
|
|
test_fetch_double(); /* to fetch double to all types */
|
2003-01-04 08:38:47 +01:00
|
|
|
test_bind_result_ext(); /* result bind test - extension */
|
|
|
|
test_bind_result_ext1(); /* result bind test - extension */
|
2003-01-18 21:58:19 +01:00
|
|
|
test_select_direct(); /* direct select - protocol_simple debug */
|
2003-01-04 08:38:47 +01:00
|
|
|
test_select_prepare(); /* prepare select - protocol_prep debug */
|
2003-01-10 03:32:08 +01:00
|
|
|
test_select_direct(); /* direct select - protocol_simple debug */
|
|
|
|
test_select(); /* simple select test */
|
|
|
|
test_select_version(); /* select with variables */
|
2003-01-18 21:58:19 +01:00
|
|
|
test_set_variable(); /* set variable prepare */
|
2003-01-04 08:38:47 +01:00
|
|
|
#if NOT_USED
|
2003-01-18 21:58:19 +01:00
|
|
|
test_select_meta(); /* select param meta information */
|
|
|
|
test_update_meta(); /* update param meta information */
|
|
|
|
test_insert_meta(); /* insert param meta information */
|
2003-01-04 08:38:47 +01:00
|
|
|
#endif
|
2003-01-18 21:58:19 +01:00
|
|
|
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 */
|
2003-01-04 08:38:47 +01:00
|
|
|
test_prepare_field_result(); /* prepare meta info */
|
2003-01-08 03:53:46 +01:00
|
|
|
test_prepare_resultset(); /* prepare meta info test */
|
2003-01-18 21:58:19 +01:00
|
|
|
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 */
|
2003-01-04 08:38:47 +01:00
|
|
|
test_prepare_resultset();/* prepare meta info test */
|
2003-01-18 21:58:19 +01:00
|
|
|
test_func_fields(); /* FUNCTION field info */
|
2003-01-04 08:38:47 +01:00
|
|
|
/*test_stmt_close(); */ /* mysql_stmt_close() test -- hangs */
|
|
|
|
test_prepare_field_result(); /* prepare meta info */
|
2003-01-18 21:58:19 +01:00
|
|
|
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 */
|
2003-01-04 08:38:47 +01:00
|
|
|
fprintf(stdout,"\n\nSUCCESS !!!\n");
|
2002-06-14 02:28:25 +02:00
|
|
|
return(0);
|
|
|
|
}
|
2002-06-14 02:36:15 +02:00
|
|
|
|