2003-01-21 21:07:59 +02:00
/* Copyright (C) 2003 MySQL AB
2002-06-13 17:28:25 -07:00
2003-01-21 21:07:59 +02:00
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 program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA */
2002-06-13 17:28:25 -07:00
/***************************************************************************
2003-01-21 21:07:59 +02:00
This is a test sample to test the new features in MySQL client - server
2004-02-29 14:30:44 +01:00
protocol
2002-06-13 17:28:25 -07:00
2003-01-21 21:07:59 +02:00
Main author : venu ( venu @ mysql . com )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2002-06-13 17:28:25 -07:00
2003-01-21 21:07:59 +02:00
# include <my_global.h>
2002-06-13 17:28:25 -07:00
# include <my_sys.h>
# include <mysql.h>
# include <my_getopt.h>
2003-01-21 21:07:59 +02:00
# include <m_string.h>
2003-01-03 23:38:47 -08:00
# include <assert.h>
2003-02-04 18:54:14 -08:00
# define MAX_TEST_QUERY_LENGTH 300 /* MAX QUERY BUFFER LENGTH */
2002-06-13 17:36:15 -07:00
/* set default options */
2004-06-04 18:38:18 +04:00
static char * opt_db = 0 ;
static char * opt_user = 0 ;
static char * opt_password = 0 ;
static char * opt_host = 0 ;
static char * opt_unix_socket = 0 ;
2003-01-03 23:38:47 -08:00
static unsigned int opt_port ;
2004-06-04 18:38:18 +04:00
static my_bool tty_password = 0 ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
static MYSQL * mysql = 0 ;
static char query [ MAX_TEST_QUERY_LENGTH ] ;
2003-01-03 23:38:47 -08:00
static char current_db [ ] = " client_test_db " ;
2003-01-22 01:30:13 -08:00
static unsigned int test_count = 0 ;
static unsigned int opt_count = 0 ;
static unsigned int iter_count = 0 ;
2002-11-22 18:30:55 -08:00
2003-01-30 14:33:49 -08:00
static time_t start_time , end_time ;
static double total_time ;
2004-06-04 18:38:18 +04:00
const char * default_dbug_option = " d:t:o,/tmp/client_test.trace " ;
2004-04-30 14:02:17 +03:00
2003-01-22 01:30:13 -08:00
# define myheader(str) \
{ \
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \n ##################################### \n " ) ; \
fprintf ( stdout , " %d of (%d/%d): %s " , test_count + + , iter_count , \
2003-01-22 01:30:13 -08:00
opt_count , str ) ; \
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n ##################################### \n " ) ; \
2003-01-22 01:30:13 -08:00
}
# define myheader_r(str) \
{ \
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \n ##################################### \n " ) ; \
fprintf ( stdout , " %s " , str ) ; \
fprintf ( stdout , " \n ##################################### \n " ) ; \
2003-01-22 01:30:13 -08:00
}
2002-06-13 17:28:25 -07:00
2003-02-24 17:05:03 -08:00
static void print_error ( const char * msg ) ;
static void print_st_error ( MYSQL_STMT * stmt , const char * msg ) ;
2003-01-03 23:38:47 -08:00
static void client_disconnect ( ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
# define myerror(msg) print_error(msg)
2002-06-13 17:36:15 -07:00
# define mysterror(stmt, msg) print_st_error(stmt, msg)
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
# define myquery(r) \
2002-06-13 17:28:25 -07:00
{ \
2003-01-21 21:07:59 +02:00
if ( r ) \
2002-11-22 18:30:55 -08:00
myerror ( NULL ) ; \
2003-11-19 17:31:57 +02:00
assert ( r = = 0 ) ; \
2002-06-13 17:28:25 -07:00
}
2002-11-22 18:30:55 -08:00
# define myquery_r(r) \
2002-06-13 17:28:25 -07:00
{ \
2003-01-21 21:07:59 +02:00
if ( r ) \
2002-11-22 18:30:55 -08:00
myerror ( NULL ) ; \
2003-11-19 17:31:57 +02:00
assert ( r ! = 0 ) ; \
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
# define check_execute(stmt, r) \
2002-06-13 17:28:25 -07:00
{ \
2003-01-21 21:07:59 +02:00
if ( r ) \
2004-06-04 18:38:18 +04:00
mysterror ( stmt , NULL ) ; \
2003-11-19 17:31:57 +02:00
assert ( r = = 0 ) ; \
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
# define check_execute_r(stmt, r) \
2002-06-13 17:28:25 -07:00
{ \
2003-01-21 21:07:59 +02:00
if ( r ) \
2004-06-04 18:38:18 +04:00
mysterror ( stmt , NULL ) ; \
2003-11-19 17:31:57 +02:00
assert ( r ! = 0 ) ; \
2002-06-13 17:28:25 -07:00
}
2004-04-30 14:02:17 +03:00
# define check_stmt(stmt) \
2002-06-13 17:28:25 -07:00
{ \
2003-01-21 21:07:59 +02:00
if ( stmt = = 0 ) \
2002-11-22 18:30:55 -08:00
myerror ( NULL ) ; \
2003-11-19 17:31:57 +02:00
assert ( stmt ! = 0 ) ; \
2003-01-03 23:38:47 -08:00
}
2002-06-13 17:28:25 -07:00
2004-04-30 14:02:17 +03:00
# define check_stmt_r(stmt) \
2002-06-13 17:28:25 -07:00
{ \
2003-02-04 18:54:14 -08:00
if ( stmt = = 0 ) \
myerror ( NULL ) ; \
2003-11-19 17:31:57 +02:00
assert ( stmt = = 0 ) ; \
2004-06-04 18:38:18 +04:00
}
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
# define mytest(x) if (!x) {myerror(NULL);assert(TRUE);}
# define mytest_r(x) if (x) {myerror(NULL);assert(TRUE);}
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Print the error message */
2003-02-24 17:05:03 -08:00
static void print_error ( const char * msg )
2004-06-04 18:38:18 +04:00
{
2003-02-24 17:05:03 -08:00
if ( mysql & & mysql_errno ( mysql ) )
{
if ( mysql - > server_version )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n [MySQL-%s] " , mysql - > server_version ) ;
2003-02-24 17:05:03 -08:00
else
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n [MySQL] " ) ;
fprintf ( stdout , " [%d] %s \n " , mysql_errno ( mysql ) , mysql_error ( mysql ) ) ;
2003-02-24 17:05:03 -08:00
}
else if ( msg ) fprintf ( stderr , " [MySQL] %s \n " , msg ) ;
}
2004-06-04 18:38:18 +04:00
2003-02-24 17:05:03 -08:00
static void print_st_error ( MYSQL_STMT * stmt , const char * msg )
2004-06-04 18:38:18 +04:00
{
2003-02-24 17:05:03 -08:00
if ( stmt & & mysql_stmt_errno ( stmt ) )
{
if ( stmt - > mysql & & stmt - > mysql - > server_version )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n [MySQL-%s] " , stmt - > mysql - > server_version ) ;
2003-02-24 17:05:03 -08:00
else
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n [MySQL] " ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " [%d] %s \n " , mysql_stmt_errno ( stmt ) ,
2003-02-24 17:05:03 -08:00
mysql_stmt_error ( stmt ) ) ;
}
2004-06-04 18:38:18 +04:00
else if ( msg )
fprintf ( stderr , " [MySQL] %s \n " , msg ) ;
2003-02-24 17:05:03 -08:00
}
2004-06-04 18:38:18 +04:00
2004-02-11 12:32:47 +01:00
/*
This is to be what mysql_query ( ) is for mysql_real_query ( ) , for
2004-06-04 18:38:18 +04:00
mysql_simple_prepare ( ) : a variant without the ' length ' parameter .
2004-02-11 12:32:47 +01:00
*/
2004-06-04 18:38:18 +04:00
2004-02-11 12:32:47 +01:00
MYSQL_STMT * STDCALL
mysql_simple_prepare ( MYSQL * mysql , const char * query )
{
2004-03-23 14:26:54 +02:00
MYSQL_STMT * stmt = mysql_stmt_init ( mysql ) ;
2004-05-06 22:44:00 +04:00
if ( stmt & & mysql_stmt_prepare ( stmt , query , strlen ( query ) ) )
{
mysql_stmt_close ( stmt ) ;
2004-03-23 14:26:54 +02:00
return 0 ;
2004-05-06 22:44:00 +04:00
}
2004-03-23 14:26:54 +02:00
return stmt ;
2004-02-11 12:32:47 +01:00
}
2004-06-04 18:38:18 +04:00
/* Connect to the server */
2002-11-22 18:30:55 -08:00
static void client_connect ( )
2002-06-13 17:28:25 -07:00
{
2003-01-18 12:58:19 -08:00
int rc ;
2004-06-04 18:38:18 +04:00
myheader_r ( " client_connect " ) ;
2002-06-13 17:28:25 -07:00
2004-06-22 23:07:08 +04:00
fprintf ( stdout , " \n Establishing a connection to '%s' ... " ,
opt_host ? opt_host : " " ) ;
2004-06-04 18:38:18 +04:00
if ( ! ( mysql = mysql_init ( NULL ) ) )
{
2003-06-08 09:11:14 -07:00
myerror ( " mysql_init() failed " ) ;
2002-06-13 17:28:25 -07:00
exit ( 0 ) ;
}
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_real_connect ( mysql , opt_host , opt_user ,
2003-02-04 18:54:14 -08:00
opt_password , opt_db ? opt_db : " test " , opt_port ,
opt_unix_socket , 0 ) ) )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
myerror ( " connection failed " ) ;
2003-01-03 23:38:47 -08:00
mysql_close ( mysql ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n Check the connection options using --help or -? \n " ) ;
2002-06-13 17:28:25 -07:00
exit ( 0 ) ;
2004-06-04 18:38:18 +04:00
}
fprintf ( stdout , " OK " ) ;
2002-06-13 17:28:25 -07:00
/* set AUTOCOMMIT to ON*/
2003-01-21 21:07:59 +02:00
mysql_autocommit ( mysql , TRUE ) ;
2004-06-04 18:38:18 +04:00
2003-01-27 10:54:45 -08:00
fprintf ( stdout , " \n Creating a test database '%s' ... " , current_db ) ;
2004-06-04 18:38:18 +04:00
strxmov ( query , " CREATE DATABASE IF NOT EXISTS " , current_db , NullS ) ;
rc = mysql_query ( mysql , query ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strxmov ( query , " USE " , current_db , NullS ) ;
rc = mysql_query ( mysql , query ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " OK " ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Close the connection */
2003-01-03 23:38:47 -08:00
static void client_disconnect ( )
2004-06-04 18:38:18 +04:00
{
myheader_r ( " client_disconnect " ) ;
2003-01-18 12:58:19 -08:00
2003-01-03 23:38:47 -08:00
if ( mysql )
{
2003-01-27 10:54:45 -08:00
fprintf ( stdout , " \n droping the test database '%s' ... " , current_db ) ;
2004-06-04 18:38:18 +04:00
strxmov ( query , " DROP DATABASE IF EXISTS " , current_db , NullS ) ;
2003-02-04 18:54:14 -08:00
mysql_query ( mysql , query ) ;
2003-01-27 10:54:45 -08:00
fprintf ( stdout , " OK " ) ;
2004-06-04 18:38:18 +04:00
2003-01-27 10:54:45 -08:00
fprintf ( stdout , " \n closing the connection ... " ) ;
2003-01-03 23:38:47 -08:00
mysql_close ( mysql ) ;
2003-01-27 10:54:45 -08:00
fprintf ( stdout , " OK \n " ) ;
2003-01-03 23:38:47 -08:00
}
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Query processing */
2003-01-03 23:38:47 -08:00
static void client_query ( )
2002-06-13 17:28:25 -07:00
{
int rc ;
myheader ( " client_query " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS myclient_test " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE myclient_test( "
" id int primary key auto_increment, "
" name varchar(20)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE myclient_test(id int, name varchar(20)) " ) ;
2002-11-22 18:30:55 -08:00
myquery_r ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO myclient_test(name) VALUES('mysql') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO myclient_test(name) VALUES('monty') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO myclient_test(name) VALUES('venu') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO myclient_test(name) VALUES('deleted') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO myclient_test(name) VALUES('deleted') " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " UPDATE myclient_test SET name= 'updated' "
" WHERE name= 'deleted' " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " UPDATE myclient_test SET id= 3 WHERE name= 'updated' " ) ;
2002-11-22 18:30:55 -08:00
myquery_r ( rc ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Print dashes */
2003-01-03 23:38:47 -08:00
static void my_print_dashes ( MYSQL_RES * result )
2002-06-13 17:28:25 -07:00
{
MYSQL_FIELD * field ;
2004-06-04 18:38:18 +04:00
unsigned int i , j ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
mysql_field_seek ( result , 0 ) ;
fputc ( ' \t ' , stdout ) ;
2002-06-13 17:28:25 -07:00
fputc ( ' + ' , stdout ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < mysql_num_fields ( result ) ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
for ( j = 0 ; j < field - > max_length + 2 ; j + + )
fputc ( ' - ' , stdout ) ;
fputc ( ' + ' , stdout ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
fputc ( ' \n ' , stdout ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Print resultset metadata information */
2003-01-03 23:38:47 -08:00
static void my_print_result_metadata ( MYSQL_RES * result )
2002-06-13 17:28:25 -07:00
{
MYSQL_FIELD * field ;
2004-06-04 18:38:18 +04:00
unsigned int i , j ;
2002-06-13 17:28:25 -07:00
unsigned int field_count ;
2004-06-04 18:38:18 +04:00
mysql_field_seek ( result , 0 ) ;
2002-11-22 18:30:55 -08:00
fputc ( ' \n ' , stdout ) ;
2003-01-28 09:24:27 -08:00
fputc ( ' \n ' , stdout ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
field_count = mysql_num_fields ( result ) ;
for ( i = 0 ; i < field_count ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
j = strlen ( field - > name ) ;
2003-01-21 21:07:59 +02:00
if ( j < field - > max_length )
2004-06-04 18:38:18 +04:00
j = field - > max_length ;
2003-01-21 21:07:59 +02:00
if ( j < 4 & & ! IS_NOT_NULL ( field - > flags ) )
2004-06-04 18:38:18 +04:00
j = 4 ;
field - > max_length = j ;
2002-06-13 17:28:25 -07:00
}
my_print_dashes ( result ) ;
2004-06-04 18:38:18 +04:00
fputc ( ' \t ' , stdout ) ;
2002-06-13 17:28:25 -07:00
fputc ( ' | ' , stdout ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
mysql_field_seek ( result , 0 ) ;
for ( i = 0 ; i < field_count ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
fprintf ( stdout , " %-*s | " , ( int ) field - > max_length , field - > name ) ;
2002-06-13 17:28:25 -07:00
}
fputc ( ' \n ' , stdout ) ;
my_print_dashes ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Process the result set */
2002-11-22 18:30:55 -08:00
int my_process_result_set ( MYSQL_RES * result )
2002-06-13 17:28:25 -07:00
{
MYSQL_ROW row ;
MYSQL_FIELD * field ;
unsigned int i ;
2004-06-04 18:38:18 +04:00
unsigned int row_count = 0 ;
2003-01-03 23:38:47 -08:00
if ( ! result )
return 0 ;
2002-06-13 17:28:25 -07:00
my_print_result_metadata ( result ) ;
2004-06-04 18:38:18 +04:00
while ( ( row = mysql_fetch_row ( result ) ) ! = NULL )
2002-11-22 18:30:55 -08:00
{
2004-06-04 18:38:18 +04:00
mysql_field_seek ( result , 0 ) ;
fputc ( ' \t ' , stdout ) ;
fputc ( ' | ' , stdout ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < mysql_num_fields ( result ) ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-21 21:07:59 +02:00
if ( row [ i ] = = NULL )
2002-10-02 13:33:08 +03:00
fprintf ( stdout , " %-*s | " , ( int ) field - > max_length , " NULL " ) ;
2002-06-13 17:28:25 -07:00
else if ( IS_NUM ( field - > type ) )
2002-10-02 13:33:08 +03:00
fprintf ( stdout , " %*s | " , ( int ) field - > max_length , row [ i ] ) ;
2002-06-13 17:28:25 -07:00
else
2002-10-02 13:33:08 +03:00
fprintf ( stdout , " %-*s | " , ( int ) field - > max_length , row [ i ] ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
fputc ( ' \t ' , stdout ) ;
fputc ( ' \n ' , stdout ) ;
2002-06-13 17:28:25 -07:00
row_count + + ;
}
2004-06-04 18:38:18 +04:00
if ( row_count )
2003-02-04 18:54:14 -08:00
my_print_dashes ( result ) ;
2002-06-13 17:28:25 -07:00
if ( mysql_errno ( mysql ) ! = 0 )
2003-01-07 18:53:46 -08:00
fprintf ( stderr , " \n \t mysql_fetch_row() failed \n " ) ;
2002-11-22 18:30:55 -08:00
else
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \t %d %s returned \n " , row_count ,
2003-01-07 18:53:46 -08:00
row_count = = 1 ? " row " : " rows " ) ;
return row_count ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
int my_process_result ( MYSQL * mysql )
{
MYSQL_RES * result ;
int row_count ;
2004-06-04 18:38:18 +04:00
if ( ! ( result = mysql_store_result ( mysql ) ) )
2003-05-21 01:15:04 -07:00
return 0 ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
row_count = my_process_result_set ( result ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
mysql_free_result ( result ) ;
return row_count ;
}
2004-06-04 18:38:18 +04:00
/* Process the statement result set */
2003-02-04 18:54:14 -08:00
# define MAX_RES_FIELDS 50
# define MAX_FIELD_DATA_SIZE 255
2003-01-03 23:38:47 -08:00
uint my_process_stmt_result ( MYSQL_STMT * stmt )
2002-11-22 18:30:55 -08:00
{
2003-01-03 23:38:47 -08:00
int field_count ;
uint row_count = 0 ;
2003-02-04 18:54:14 -08:00
MYSQL_BIND buffer [ MAX_RES_FIELDS ] ;
2003-01-03 23:38:47 -08:00
MYSQL_FIELD * field ;
MYSQL_RES * result ;
2003-02-04 18:54:14 -08:00
char data [ MAX_RES_FIELDS ] [ MAX_FIELD_DATA_SIZE ] ;
ulong length [ MAX_RES_FIELDS ] ;
my_bool is_null [ MAX_RES_FIELDS ] ;
2003-01-03 23:38:47 -08:00
int rc , i ;
2004-06-04 18:38:18 +04:00
if ( ! ( result = mysql_stmt_result_metadata ( stmt ) ) ) /* No meta info */
2003-01-03 23:38:47 -08:00
{
2004-06-04 18:38:18 +04:00
while ( ! mysql_stmt_fetch ( stmt ) )
2003-01-23 22:39:07 -08:00
row_count + + ;
return row_count ;
2003-01-03 23:38:47 -08:00
}
2004-06-04 18:38:18 +04:00
2003-02-04 18:54:14 -08:00
field_count = min ( mysql_num_fields ( result ) , MAX_RES_FIELDS ) ;
2004-06-04 18:38:18 +04:00
bzero ( ( char * ) buffer , sizeof ( buffer ) ) ;
bzero ( ( char * ) length , sizeof ( length ) ) ;
bzero ( ( char * ) is_null , sizeof ( is_null ) ) ;
for ( i = 0 ; i < field_count ; i + + )
2003-01-03 23:38:47 -08:00
{
buffer [ i ] . buffer_type = MYSQL_TYPE_STRING ;
2003-02-04 18:54:14 -08:00
buffer [ i ] . buffer_length = MAX_FIELD_DATA_SIZE ;
buffer [ i ] . length = & length [ i ] ;
2004-06-25 17:04:33 +04:00
buffer [ i ] . buffer = ( void * ) data [ i ] ;
2003-01-21 21:07:59 +02:00
buffer [ i ] . is_null = & is_null [ i ] ;
2003-01-03 23:38:47 -08:00
}
my_print_result_metadata ( result ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , buffer ) ;
check_execute ( stmt , rc ) ;
2002-11-22 18:30:55 -08:00
2003-01-18 12:58:19 -08:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
mysql_field_seek ( result , 0 ) ;
while ( mysql_stmt_fetch ( stmt ) = = 0 )
{
fputc ( ' \t ' , stdout ) ;
fputc ( ' | ' , stdout ) ;
mysql_field_seek ( result , 0 ) ;
for ( i = 0 ; i < field_count ; i + + )
2003-01-03 23:38:47 -08:00
{
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-21 21:07:59 +02:00
if ( is_null [ i ] )
2003-01-03 23:38:47 -08:00
fprintf ( stdout , " %-*s | " , ( int ) field - > max_length , " NULL " ) ;
2003-01-09 18:32:08 -08:00
else if ( length [ i ] = = 0 )
2003-01-23 22:39:07 -08:00
{
2004-06-04 18:38:18 +04:00
data [ i ] [ 0 ] = ' \0 ' ; /* unmodified buffer */
2003-01-23 22:39:07 -08:00
fprintf ( stdout , " %*s | " , ( int ) field - > max_length , data [ i ] ) ;
}
2003-01-03 23:38:47 -08: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 ] ) ;
}
2004-06-04 18:38:18 +04:00
fputc ( ' \t ' , stdout ) ;
fputc ( ' \n ' , stdout ) ;
2003-01-03 23:38:47 -08:00
row_count + + ;
}
2003-02-04 18:54:14 -08:00
if ( row_count )
my_print_dashes ( result ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \t %d %s returned \n " , row_count ,
2003-01-07 18:53:46 -08:00
row_count = = 1 ? " row " : " rows " ) ;
2003-01-03 23:38:47 -08:00
mysql_free_result ( result ) ;
2003-01-07 18:53:46 -08:00
return row_count ;
}
2004-06-04 18:38:18 +04:00
/* Prepare statement, execute, and process result set for given query */
2004-02-11 12:32:47 +01:00
uint my_stmt_result ( const char * buff )
2003-01-07 18:53:46 -08:00
{
MYSQL_STMT * stmt ;
uint row_count ;
int rc ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \n %s " , buff ) ;
stmt = mysql_simple_prepare ( mysql , buff ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-07 18:53:46 -08:00
row_count = my_process_stmt_result ( stmt ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
return row_count ;
}
2004-06-04 18:38:18 +04:00
/* Utility function to verify a particular column data */
static void verify_col_data ( const char * table , const char * col ,
2003-01-03 23:38:47 -08:00
const char * exp_data )
{
MYSQL_RES * result ;
MYSQL_ROW row ;
int rc , field = 1 ;
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
if ( table & & col )
{
2004-06-04 18:38:18 +04:00
strxmov ( query , " SELECT " , col , " FROM " , table , " LIMIT 1 " , NullS ) ;
fprintf ( stdout , " \n %s " , query ) ;
rc = mysql_query ( mysql , query ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2002-11-22 18:30:55 -08:00
2003-01-03 23:38:47 -08:00
field = 0 ;
}
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2003-01-03 23:38:47 -08:00
mytest ( result ) ;
if ( ! ( row = mysql_fetch_row ( result ) ) | | ! row [ field ] )
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n *** ERROR: FAILED TO GET THE RESULT *** " ) ;
2003-01-03 23:38:47 -08:00
exit ( 1 ) ;
}
2004-06-04 18:38:18 +04:00
if ( strcmp ( row [ field ] , exp_data ) )
2004-04-30 14:02:17 +03:00
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n obtained: `%s` (expected: `%s`) " ,
row [ field ] , exp_data ) ;
2004-04-30 14:02:17 +03:00
assert ( 0 ) ;
}
2003-01-03 23:38:47 -08:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* 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 ,
2003-06-08 09:11:14 -07:00
unsigned long length , const char * def )
2003-01-03 23:38:47 -08:00
{
MYSQL_FIELD * field ;
2004-06-04 18:38:18 +04:00
if ( ! ( field = mysql_fetch_field_direct ( result , no ) ) )
2003-01-03 23:38:47 -08:00
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n *** ERROR: FAILED TO GET THE RESULT *** " ) ;
2003-01-03 23:38:47 -08:00
exit ( 1 ) ;
}
2004-06-04 18:38:18 +04:00
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 length :`%ld` \t (expected: `%ld`) " ,
field - > length , length ) ;
fprintf ( stdout , " \n maxlength:`%ld` " , field - > max_length ) ;
fprintf ( stdout , " \n charsetnr:`%d` " , field - > charsetnr ) ;
fprintf ( stdout , " \n default :`%s` \t (expected: `%s`) " ,
field - > def ? field - > def : " (null) " , def ? def : " (null) " ) ;
fprintf ( stdout , " \n " ) ;
assert ( strcmp ( field - > name , name ) = = 0 ) ;
assert ( strcmp ( field - > org_name , org_name ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( field - > type = = type ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > table , table ) = = 0 ) ;
assert ( strcmp ( field - > org_table , org_table ) = = 0 ) ;
assert ( strcmp ( field - > db , db ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( field - > length = = length ) ;
2003-06-08 09:11:14 -07:00
if ( def )
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > def , def ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
}
2004-06-04 18:38:18 +04:00
/* Utility function to verify the parameter count */
2003-01-03 23:38:47 -08:00
static void verify_param_count ( MYSQL_STMT * stmt , long exp_count )
{
2004-06-04 18:38:18 +04:00
long param_count = mysql_stmt_param_count ( stmt ) ;
fprintf ( stdout , " \n total parameters in stmt: `%ld` (expected: `%ld`) " ,
2003-01-03 23:38:47 -08:00
param_count , exp_count ) ;
2003-11-19 17:31:57 +02:00
assert ( param_count = = exp_count ) ;
2002-11-22 18:30:55 -08:00
}
2004-06-04 18:38:18 +04:00
/* Utility function to verify the total affected rows */
2003-02-04 18:54:14 -08:00
static void verify_st_affected_rows ( MYSQL_STMT * stmt , ulonglong exp_count )
{
ulonglong affected_rows = mysql_stmt_affected_rows ( stmt ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total affected rows: `%lld` (expected: `%lld`) " ,
2003-02-04 18:54:14 -08:00
affected_rows , exp_count ) ;
2003-11-19 17:31:57 +02:00
assert ( affected_rows = = exp_count ) ;
2003-02-04 18:54:14 -08:00
}
2004-06-04 18:38:18 +04:00
/* Utility function to verify the total affected rows */
2003-02-04 18:54:14 -08:00
static void verify_affected_rows ( ulonglong exp_count )
{
ulonglong affected_rows = mysql_affected_rows ( mysql ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total affected rows: `%lld` (expected: `%lld`) " ,
2003-02-04 18:54:14 -08:00
affected_rows , exp_count ) ;
2003-11-19 17:31:57 +02:00
assert ( affected_rows = = exp_count ) ;
2003-02-04 18:54:14 -08:00
}
2004-06-04 18:38:18 +04:00
/* Utility function to verify the total fields count */
2003-02-04 18:54:14 -08:00
static void verify_field_count ( MYSQL_RES * result , uint exp_count )
{
uint field_count = mysql_num_fields ( result ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total fields in the result set: `%d` (expected: `%d`) " ,
2003-02-04 18:54:14 -08:00
field_count , exp_count ) ;
2003-11-19 17:31:57 +02:00
assert ( field_count = = exp_count ) ;
2003-02-04 18:54:14 -08:00
}
2004-06-04 18:38:18 +04:00
/* Utility function to execute a query using prepare-execute */
2003-02-24 17:05:03 -08:00
static void execute_prepare_query ( const char * query , ulonglong exp_count )
{
MYSQL_STMT * stmt ;
ulonglong affected_rows ;
int rc ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
myquery ( rc ) ;
2003-02-24 17:05:03 -08:00
affected_rows = mysql_stmt_affected_rows ( stmt ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total affected rows: `%lld` (expected: `%lld`) " ,
2003-02-24 17:05:03 -08:00
affected_rows , exp_count ) ;
2003-11-19 17:31:57 +02:00
assert ( affected_rows = = exp_count ) ;
2003-02-24 17:05:03 -08:00
mysql_stmt_close ( stmt ) ;
}
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
/* Store result processing */
2003-01-03 23:38:47 -08:00
static void client_store_result ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_RES * result ;
int rc ;
2002-11-22 18:30:55 -08:00
2002-06-13 17:28:25 -07:00
myheader ( " client_store_result " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM myclient_test " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
my_process_result_set ( result ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Fetch the results */
2003-01-03 23:38:47 -08:00
static void client_use_result ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_RES * result ;
int rc ;
myheader ( " client_use_result " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM myclient_test " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
my_process_result_set ( result ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Separate thread query to test some cases */
2003-01-18 12:58:19 -08:00
static my_bool thread_query ( char * query )
{
MYSQL * l_mysql ;
my_bool error ;
error = 0 ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n in thread_query(%s) " , query ) ;
if ( ! ( l_mysql = mysql_init ( NULL ) ) )
{
2003-01-18 12:58:19 -08:00
myerror ( " mysql_init() failed " ) ;
return 1 ;
}
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_real_connect ( l_mysql , opt_host , opt_user ,
opt_password , current_db , opt_port ,
opt_unix_socket , 0 ) ) )
2003-01-18 12:58:19 -08:00
{
2004-06-04 18:38:18 +04:00
myerror ( " connection failed " ) ;
2003-01-18 12:58:19 -08:00
error = 1 ;
goto end ;
2004-06-04 18:38:18 +04:00
}
if ( mysql_query ( l_mysql , ( char * ) query ) )
2003-01-18 12:58:19 -08:00
{
2004-06-04 18:38:18 +04:00
fprintf ( stderr , " Query failed (%s) \n " , mysql_error ( l_mysql ) ) ;
2003-01-18 12:58:19 -08:00
error = 1 ;
goto end ;
}
mysql_commit ( l_mysql ) ;
end :
mysql_close ( l_mysql ) ;
return error ;
}
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Query processing */
2003-01-03 23:38:47 -08:00
static void test_debug_example ( )
2002-06-13 17:28:25 -07:00
{
int rc ;
MYSQL_RES * result ;
myheader ( " test_debug_example " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_debug_example " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_debug_example( "
" id INT PRIMARY KEY AUTO_INCREMENT, "
" name VARCHAR(20), xxx INT) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_debug_example (name) "
" VALUES ('mysql') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " UPDATE test_debug_example SET name='updated' "
" WHERE name='deleted' " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_debug_example where name='mysql' " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
my_process_result_set ( result ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_debug_example " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test autocommit feature for BDB tables */
2003-01-03 23:38:47 -08:00
static void test_tran_bdb ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_RES * result ;
MYSQL_ROW row ;
int rc ;
myheader ( " test_tran_bdb " ) ;
/* set AUTOCOMMIT to OFF */
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , FALSE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS my_demo_transaction " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* create the table 'mytran_demo' of type BDB' or 'InnoDB' */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE my_demo_transaction( "
" col1 int , col2 varchar(30)) TYPE= BDB " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert a row and commit the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO my_demo_transaction VALUES(10, 'venu') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2003-02-04 18:54:14 -08:00
/* now insert the second row, and rollback the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO my_demo_transaction VALUES(20, 'mysql') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_rollback ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* delete first row, and rollback it */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DELETE FROM my_demo_transaction WHERE col1= 10 " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_rollback ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM my_demo_transaction " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
my_process_result_set ( result ) ;
2003-01-28 09:24:27 -08:00
mysql_free_result ( result ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM my_demo_transaction " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
row = mysql_fetch_row ( result ) ;
2002-11-22 18:30:55 -08:00
mytest ( row ) ;
2004-06-04 18:38:18 +04:00
row = mysql_fetch_row ( result ) ;
2002-11-22 18:30:55 -08:00
mytest_r ( row ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
mysql_free_result ( result ) ;
2004-06-04 18:38:18 +04:00
mysql_autocommit ( mysql , TRUE ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test autocommit feature for InnoDB tables */
2003-01-03 23:38:47 -08:00
static void test_tran_innodb ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_RES * result ;
MYSQL_ROW row ;
int rc ;
myheader ( " test_tran_innodb " ) ;
/* set AUTOCOMMIT to OFF */
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , FALSE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS my_demo_transaction " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* create the table 'mytran_demo' of type BDB' or 'InnoDB' */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE my_demo_transaction(col1 int, "
" col2 varchar(30)) TYPE= InnoDB " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert a row and commit the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO my_demo_transaction VALUES(10, 'venu') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2003-02-04 18:54:14 -08:00
/* now insert the second row, and rollback the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO my_demo_transaction VALUES(20, 'mysql') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_rollback ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* delete first row, and rollback it */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DELETE FROM my_demo_transaction WHERE col1= 10 " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_rollback ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM my_demo_transaction " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
my_process_result_set ( result ) ;
2003-01-28 09:24:27 -08:00
mysql_free_result ( result ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM my_demo_transaction " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
row = mysql_fetch_row ( result ) ;
2002-11-22 18:30:55 -08:00
mytest ( row ) ;
2004-06-04 18:38:18 +04:00
row = mysql_fetch_row ( result ) ;
2002-11-22 18:30:55 -08:00
mytest_r ( row ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
2004-06-04 18:38:18 +04:00
mysql_autocommit ( mysql , TRUE ) ;
2002-06-13 17:28:25 -07:00
}
2002-10-02 13:33:08 +03:00
2004-06-04 18:38:18 +04:00
/* Test simple prepares of all DML statements */
2002-10-02 13:33:08 +03:00
2003-01-03 23:38:47 -08:00
static void test_prepare_simple ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_prepare_simple " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prepare_simple " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prepare_simple( "
" id int, name varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert */
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_prepare_simple VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* update */
2004-06-04 18:38:18 +04:00
strmov ( query , " UPDATE test_prepare_simple SET id=? WHERE id=? AND name= ? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 3 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* delete */
2004-06-04 18:38:18 +04:00
strmov ( query , " DELETE FROM test_prepare_simple WHERE id=10 " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* delete */
2004-06-04 18:38:18 +04:00
strmov ( query , " DELETE FROM test_prepare_simple WHERE id=? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* select */
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT * FROM test_prepare_simple WHERE id=? AND name= ? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test simple prepare field results */
2003-01-03 23:38:47 -08:00
static void test_prepare_field_result ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
MYSQL_RES * result ;
2003-02-04 18:54:14 -08:00
int rc ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_prepare_field_result " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prepare_field_result " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04: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) " ) ;
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert */
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT int_c, var_c, date_c as date, ts_c, char_c FROM "
" test_prepare_field_result as t1 WHERE int_c=? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2003-01-03 23:38:47 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
my_print_result_metadata ( result ) ;
2004-06-04 18:38:18 +04:00
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 , 11 , 0 ) ;
verify_prepare_field ( result , 1 , " var_c " , " var_c " , MYSQL_TYPE_VAR_STRING ,
" t1 " , " test_prepare_field_result " , current_db , 50 , 0 ) ;
verify_prepare_field ( result , 2 , " date " , " date_c " , MYSQL_TYPE_DATE ,
" t1 " , " test_prepare_field_result " , current_db , 10 , 0 ) ;
verify_prepare_field ( result , 3 , " ts_c " , " ts_c " , MYSQL_TYPE_TIMESTAMP ,
" t1 " , " test_prepare_field_result " , current_db , 19 , 0 ) ;
verify_prepare_field ( result , 4 , " char_c " , " char_c " , MYSQL_TYPE_STRING ,
" t1 " , " test_prepare_field_result " , current_db , 3 , 0 ) ;
2003-01-03 23:38:47 -08:00
2003-02-04 18:54:14 -08:00
verify_field_count ( result , 5 ) ;
2003-01-28 09:24:27 -08:00
mysql_free_result ( result ) ;
2003-01-03 23:38:47 -08:00
mysql_stmt_close ( stmt ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test simple prepare field results */
2003-01-03 23:38:47 -08:00
static void test_prepare_syntax ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2002-10-02 13:33:08 +03:00
int rc ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_prepare_syntax " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prepare_syntax " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prepare_syntax( "
" id int, name varchar(50), extra int) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_prepare_syntax VALUES(? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT id, name FROM test_prepare_syntax WHERE id=? AND WHERE " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2002-06-13 17:28:25 -07:00
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test a simple prepare */
2003-01-03 23:38:47 -08:00
static void test_prepare ( )
2002-11-22 18:30:55 -08:00
{
2002-06-13 17:28:25 -07:00
MYSQL_STMT * stmt ;
2003-01-21 21:07:59 +02:00
int rc , i ;
2003-01-18 12:58:19 -08: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 ;
2003-01-21 21:07:59 +02:00
ulong length [ 7 ] , len ;
my_bool is_null [ 7 ] ;
2003-01-18 12:58:19 -08:00
MYSQL_BIND bind [ 7 ] ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_prepare " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS my_prepare " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE my_prepare(col1 tinyint, "
" col2 varchar(15), col3 int, "
" col4 smallint, col5 bigint, "
" col6 float, col7 double ) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert by prepare */
2004-06-04 18:38:18 +04:00
strxmov ( query , " INSERT INTO my_prepare VALUES(?, ?, ?, ?, ?, ?, ?) " , NullS ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 7 ) ;
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
/* tinyint */
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & tiny_data ;
2002-06-13 17:28:25 -07:00
/* string */
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) str_data ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_length = 1000 ; /* Max string length */
2002-06-13 17:28:25 -07:00
/* integer */
2004-06-04 18:38:18 +04:00
bind [ 2 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & int_data ;
2002-06-13 17:28:25 -07:00
/* short */
2004-06-04 18:38:18 +04:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & small_data ;
2002-06-13 17:28:25 -07:00
/* bigint */
2004-06-04 18:38:18 +04:00
bind [ 4 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind [ 4 ] . buffer = ( void * ) & big_data ;
2002-06-13 17:28:25 -07:00
/* float */
2004-06-04 18:38:18 +04:00
bind [ 5 ] . buffer_type = MYSQL_TYPE_FLOAT ;
2004-06-25 17:04:33 +04:00
bind [ 5 ] . buffer = ( void * ) & real_data ;
2002-06-13 17:28:25 -07:00
/* double */
2004-06-04 18:38:18 +04:00
bind [ 6 ] . buffer_type = MYSQL_TYPE_DOUBLE ;
2004-06-25 17:04:33 +04:00
bind [ 6 ] . buffer = ( void * ) & double_data ;
2003-01-21 21:07:59 +02:00
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
{
bind [ i ] . length = & length [ i ] ;
bind [ i ] . is_null = & is_null [ i ] ;
is_null [ i ] = 0 ;
}
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
int_data = 320 ;
small_data = 1867 ;
big_data = 1000 ;
real_data = 2 ;
double_data = 6578.001 ;
2002-06-13 17:28:25 -07:00
/* now, execute the prepared statement to insert 10 records.. */
2004-06-04 18:38:18 +04:00
for ( tiny_data = 0 ; tiny_data < 100 ; tiny_data + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
length [ 1 ] = my_sprintf ( str_data , ( str_data , " MySQL%d " , int_data ) ) ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
int_data + = 25 ;
small_data + = 10 ;
big_data + = 100 ;
real_data + = 1 ;
double_data + = 10.09 ;
}
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-02-11 12:32:47 +01:00
assert ( tiny_data = = ( char ) my_stmt_result ( " SELECT * FROM my_prepare " ) ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM my_prepare " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-11-22 18:30:55 -08:00
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
o_int_data = 320 ;
o_small_data = 1867 ;
o_big_data = 1000 ;
o_real_data = 2 ;
o_double_data = 6578.001 ;
2002-06-13 17:28:25 -07:00
2003-01-18 12:58:19 -08:00
/* now, execute the prepared statement to insert 10 records.. */
2004-06-04 18:38:18 +04:00
for ( o_tiny_data = 0 ; o_tiny_data < 100 ; o_tiny_data + + )
2003-01-18 12:58:19 -08:00
{
2004-06-04 18:38:18 +04:00
len = my_sprintf ( data , ( data , " MySQL%d " , o_int_data ) ) ;
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2003-02-04 18:54:14 -08:00
fprintf ( stdout , " \n " ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \t tiny : %d (%lu) " , tiny_data , length [ 0 ] ) ;
fprintf ( stdout , " \n \t short : %d (%lu) " , small_data , length [ 3 ] ) ;
fprintf ( stdout , " \n \t int : %d (%lu) " , int_data , length [ 2 ] ) ;
fprintf ( stdout , " \n \t big : %lld (%lu) " , big_data , length [ 4 ] ) ;
fprintf ( stdout , " \n \t float : %f (%lu) " , real_data , length [ 5 ] ) ;
fprintf ( stdout , " \n \t double : %f (%lu) " , double_data , length [ 6 ] ) ;
2003-01-18 12:58:19 -08:00
2003-02-04 18:54:14 -08:00
fprintf ( stdout , " \n \t str : %s (%lu) " , str_data , length [ 1 ] ) ;
2003-01-18 12:58:19 -08:00
2003-11-19 17:31:57 +02:00
assert ( tiny_data = = o_tiny_data ) ;
assert ( is_null [ 0 ] = = 0 ) ;
assert ( length [ 0 ] = = 1 ) ;
2003-01-18 12:58:19 -08:00
2003-11-19 17:31:57 +02:00
assert ( int_data = = o_int_data ) ;
assert ( length [ 2 ] = = 4 ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( small_data = = o_small_data ) ;
assert ( length [ 3 ] = = 2 ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( big_data = = o_big_data ) ;
assert ( length [ 4 ] = = 8 ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( real_data = = o_real_data ) ;
assert ( length [ 5 ] = = 4 ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( double_data = = o_double_data ) ;
assert ( length [ 6 ] = = 8 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , str_data ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length [ 1 ] = = len ) ;
2004-06-04 18:38:18 +04:00
2003-01-18 12:58:19 -08:00
o_int_data + = 25 ;
o_small_data + = 10 ;
o_big_data + = 100 ;
o_real_data + = 1 ;
o_double_data + = 10.09 ;
}
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
2002-06-13 17:28:25 -07:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test double comparision */
2003-01-03 23:38:47 -08:00
static void test_double_compare ( )
2002-11-22 18:30:55 -08:00
{
2002-06-13 17:28:25 -07:00
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2003-02-04 18:54:14 -08:00
char real_data [ 10 ] , tiny_data ;
2002-06-13 17:28:25 -07:00
double double_data ;
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 3 ] ;
2004-06-04 18:38:18 +04:00
ulong length [ 3 ] ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_double_compare " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_double_compare " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_double_compare(col1 tinyint, "
" col2 float, col3 double ) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_double_compare "
" VALUES (1, 10.2, 34.5) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
strmov ( query , " UPDATE test_double_compare SET col1=100 "
" WHERE col1 = ? AND col2 = ? AND COL3 = ? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 3 ) ;
/* Always bzero bind array because there can be internal members */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
/* tinyint */
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & tiny_data ;
2003-01-21 21:07:59 +02:00
2002-06-13 17:28:25 -07:00
/* string->float */
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & real_data ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_length = sizeof ( real_data ) ;
2003-01-21 21:07:59 +02:00
bind [ 1 ] . length = & length [ 1 ] ;
2004-06-04 18:38:18 +04:00
length [ 1 ] = 10 ;
2003-01-21 21:07:59 +02:00
2002-06-13 17:28:25 -07:00
/* double */
2004-06-04 18:38:18 +04:00
bind [ 2 ] . buffer_type = MYSQL_TYPE_DOUBLE ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & double_data ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
tiny_data = 1 ;
strmov ( real_data , " 10.2 " ) ;
double_data = 34.5 ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2003-02-04 18:54:14 -08:00
verify_affected_rows ( 0 ) ;
2002-11-22 18:30:55 -08:00
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_double_compare " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( ( int ) tiny_data = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple null */
2003-01-03 23:38:47 -08:00
static void test_null ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2003-01-30 14:33:49 -08:00
uint nData ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2003-01-21 21:07:59 +02:00
my_bool is_null [ 2 ] ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_null " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_null " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_null(col1 int, col2 varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert by prepare, wrong column name */
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_null(col3, col2) VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_null(col1, col2) VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . is_null = & is_null [ 0 ] ;
is_null [ 0 ] = 1 ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] = bind [ 0 ] ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
/* now, execute the prepared statement to insert 10 records.. */
2004-06-04 18:38:18 +04:00
for ( nData = 0 ; nData < 10 ; nData + + )
2003-01-30 14:33:49 -08:00
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-30 14:33:49 -08:00
}
/* Re-bind with MYSQL_TYPE_NULL */
bind [ 0 ] . buffer_type = MYSQL_TYPE_NULL ;
is_null [ 0 ] = 0 ; /* reset */
bind [ 1 ] = bind [ 0 ] ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
for ( nData = 0 ; nData < 10 ; nData + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2003-01-30 14:33:49 -08:00
nData * = 2 ;
2004-02-11 12:32:47 +01:00
assert ( nData = = my_stmt_result ( " SELECT * FROM test_null " ) ) ;
2002-11-22 18:30:55 -08:00
2003-01-30 14:33:49 -08:00
/* Fetch results */
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & nData ; /* this buffer won't be altered */
2003-01-30 14:33:49 -08:00
bind [ 0 ] . length = 0 ;
bind [ 1 ] = bind [ 0 ] ;
bind [ 0 ] . is_null = & is_null [ 0 ] ;
bind [ 1 ] . is_null = & is_null [ 1 ] ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_null " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-30 14:33:49 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-30 14:33:49 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-01-30 14:33:49 -08:00
rc = 0 ;
is_null [ 0 ] = is_null [ 1 ] = 0 ;
2004-06-04 18:38:18 +04:00
while ( mysql_stmt_fetch ( stmt ) ! = MYSQL_NO_DATA )
2003-01-30 14:33:49 -08:00
{
2003-11-19 17:31:57 +02:00
assert ( is_null [ 0 ] ) ;
assert ( is_null [ 1 ] ) ;
2003-01-30 14:33:49 -08:00
rc + + ;
is_null [ 0 ] = is_null [ 1 ] = 0 ;
}
2003-11-19 17:31:57 +02:00
assert ( rc = = ( int ) nData ) ;
2003-01-30 14:33:49 -08:00
mysql_stmt_close ( stmt ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test for NULL as PS parameter (BUG#3367, BUG#3371) */
2004-04-13 00:13:25 +04:00
static void test_ps_null_param ( )
{
MYSQL_STMT * stmt ;
int rc ;
2004-06-04 18:38:18 +04:00
2004-04-13 00:13:25 +04:00
MYSQL_BIND in_bind ;
my_bool in_is_null ;
long int in_long ;
2004-06-04 18:38:18 +04:00
2004-04-13 00:13:25 +04:00
MYSQL_BIND out_bind ;
2004-06-04 18:38:18 +04:00
ulong out_length ;
2004-04-13 00:13:25 +04:00
my_bool out_is_null ;
char out_str_data [ 20 ] ;
2004-06-04 18:38:18 +04:00
const char * queries [ ] = { " select ? " , " select ?+1 " ,
2004-04-13 00:13:25 +04:00
" select col1 from test_ps_nulls where col1 <=> ? " ,
NULL
} ;
const char * * cur_query = queries ;
myheader ( " test_null_ps_param_in_result " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_ps_nulls " ) ;
2004-04-13 00:13:25 +04:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_ps_nulls(col1 int) " ) ;
2004-04-13 00:13:25 +04:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_ps_nulls values (1), (null) " ) ;
2004-04-13 00:13:25 +04:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) & in_bind , sizeof ( in_bind ) ) ;
bzero ( ( char * ) & out_bind , sizeof ( out_bind ) ) ;
2004-04-13 00:13:25 +04:00
in_bind . buffer_type = MYSQL_TYPE_LONG ;
in_bind . is_null = & in_is_null ;
in_bind . length = 0 ;
2004-06-25 17:04:33 +04:00
in_bind . buffer = ( void * ) & in_long ;
2004-04-13 00:13:25 +04:00
in_is_null = 1 ;
in_long = 1 ;
2004-06-04 18:38:18 +04:00
out_bind . buffer_type = MYSQL_TYPE_STRING ;
2004-04-13 00:13:25 +04:00
out_bind . is_null = & out_is_null ;
out_bind . length = & out_length ;
out_bind . buffer = out_str_data ;
2004-06-04 18:38:18 +04:00
out_bind . buffer_length = array_elements ( out_str_data ) ;
2004-04-13 00:13:25 +04:00
/* Execute several queries, all returning NULL in result. */
for ( cur_query = queries ; * cur_query ; cur_query + + )
{
strmov ( query , * cur_query ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:24:06 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
2004-04-13 00:13:25 +04:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , & in_bind ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , & out_bind ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-13 00:13:25 +04:00
assert ( rc ! = MYSQL_NO_DATA ) ;
assert ( out_is_null ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-13 00:13:25 +04:00
assert ( rc = = MYSQL_NO_DATA ) ;
mysql_stmt_close ( stmt ) ;
}
}
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Test fetch null */
2003-01-03 23:38:47 -08:00
static void test_fetch_null ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2003-01-21 21:07:59 +02:00
int i , nData ;
2003-01-03 23:38:47 -08:00
MYSQL_BIND bind [ 11 ] ;
2004-06-04 18:38:18 +04:00
ulong length [ 11 ] ;
2003-01-21 21:07:59 +02:00
my_bool is_null [ 11 ] ;
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
myheader ( " test_fetch_null " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_fetch_null " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
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)) " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_fetch_null (col11) "
" VALUES (1000), (88), (389789) " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
/* fetch */
2003-01-21 21:07:59 +02:00
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
2003-01-03 23:38:47 -08:00
{
2004-06-04 18:38:18 +04:00
bind [ i ] . buffer_type = MYSQL_TYPE_LONG ;
2003-01-21 21:07:59 +02:00
bind [ i ] . is_null = & is_null [ i ] ;
bind [ i ] . length = & length [ i ] ;
2003-01-03 23:38:47 -08:00
}
2004-06-25 17:04:33 +04:00
bind [ i - 1 ] . buffer = ( void * ) & nData ; /* Last column is not null */
2003-01-03 23:38:47 -08:00
2003-01-21 21:07:59 +02:00
strmov ( ( char * ) query , " SELECT * FROM test_fetch_null " ) ;
2003-01-07 18:53:46 -08:00
2004-02-11 12:32:47 +01:00
assert ( 3 = = my_stmt_result ( query ) ) ;
2003-01-07 18:53:46 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-11-22 18:30:55 -08:00
2003-01-07 18:53:46 -08:00
rc = 0 ;
2004-06-04 18:38:18 +04:00
while ( mysql_stmt_fetch ( stmt ) ! = MYSQL_NO_DATA )
2003-01-03 23:38:47 -08:00
{
2003-01-07 18:53:46 -08:00
rc + + ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 10 ; i + + )
2003-01-07 18:53:46 -08:00
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n data[%d] : %s " , i ,
2003-01-21 21:07:59 +02:00
is_null [ i ] ? " NULL " : " NOT NULL " ) ;
2003-11-19 17:31:57 +02:00
assert ( is_null [ i ] ) ;
2003-01-07 18:53:46 -08:00
}
fprintf ( stdout , " \n data[%d]: %d " , i , nData ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 1000 | | nData = = 88 | | nData = = 389789 ) ;
assert ( is_null [ i ] = = 0 ) ;
assert ( length [ i ] = = 4 ) ;
2003-01-03 23:38:47 -08:00
}
2003-11-19 17:31:57 +02:00
assert ( rc = = 3 ) ;
2002-11-22 18:30:55 -08:00
mysql_stmt_close ( stmt ) ;
2003-01-03 23:38:47 -08:00
}
2002-11-22 18:30:55 -08:00
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple select */
2003-01-03 23:38:47 -08:00
static void test_select_version ( )
{
MYSQL_STMT * stmt ;
int rc ;
2002-11-22 18:30:55 -08:00
2003-01-03 23:38:47 -08:00
myheader ( " test_select_version " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT @@version " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
my_process_stmt_result ( stmt ) ;
mysql_stmt_close ( stmt ) ;
}
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Test simple show */
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
static void test_select_show_table ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
int rc , i ;
2002-06-13 17:28:25 -07:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myheader ( " test_select_show_table " ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SHOW TABLES FROM mysql " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2003-01-03 23:38:47 -08:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
for ( i = 1 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
}
2003-01-03 23:38:47 -08:00
my_process_stmt_result ( stmt ) ;
mysql_stmt_close ( stmt ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple select to debug */
2003-01-03 23:38:47 -08:00
static void test_select_direct ( )
{
int rc ;
MYSQL_RES * result ;
myheader ( " test_select_direct " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_select " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_select(id int, id1 tinyint, "
" id2 float, "
" id3 double, "
" name varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert a row and commit the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_select VALUES(10, 5, 2.3, 4.5, 'venu') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_select " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
my_process_result_set ( result ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple select with prepare */
2003-01-03 23:38:47 -08:00
static void test_select_prepare ( )
2002-06-13 17:28:25 -07:00
{
2003-01-28 09:24:27 -08:00
int rc ;
2002-06-13 17:28:25 -07:00
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
myheader ( " test_select_prepare " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_select " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_select(id int, name varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2003-01-03 23:38:47 -08:00
/* insert a row and commit the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_select VALUES(10, 'venu') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_select " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2003-01-28 09:24:27 -08:00
mysql_stmt_close ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_select " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_select(id tinyint, id1 int, "
" id2 float, id3 float, "
" name varchar(50)) " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
/* insert a row and commit the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_select(id, id1, id2, name) VALUES(10, 5, 2.3, 'venu') " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_select " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
2003-01-03 23:38:47 -08:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple select */
2003-01-03 23:38:47 -08:00
static void test_select ( )
{
MYSQL_STMT * stmt ;
int rc ;
char szData [ 25 ] ;
2004-06-04 18:38:18 +04:00
int nData = 1 ;
2003-01-03 23:38:47 -08:00
MYSQL_BIND bind [ 2 ] ;
2003-01-21 21:07:59 +02:00
ulong length [ 2 ] ;
2003-01-03 23:38:47 -08:00
myheader ( " test_select " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_select " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_select(id int, name varchar(50)) " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
/* insert a row and commit the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_select VALUES(10, 'venu') " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2003-09-02 14:37:06 +03:00
/* now insert the second row, and rollback the transaction */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_select VALUES(20, 'mysql') " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT * FROM test_select WHERE id= ? AND name=? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-01-03 23:38:47 -08:00
/* string data */
2004-06-04 18:38:18 +04:00
nData = 10 ;
strmov ( szData , ( char * ) " venu " ) ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) szData ;
2003-01-22 01:30:13 -08:00
bind [ 1 ] . buffer_length = 4 ;
2003-01-21 21:07:59 +02:00
bind [ 1 ] . length = & length [ 1 ] ;
length [ 1 ] = 4 ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & nData ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2003-11-19 17:31:57 +02:00
assert ( my_process_stmt_result ( stmt ) = = 1 ) ;
2003-01-03 23:38:47 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
2004-04-14 01:42:01 +04:00
/*
2004-06-04 18:38:18 +04:00
Test for BUG # 3420 ( " select id1, value1 from t where id= ? or value= ? "
2004-04-14 01:42:01 +04:00
returns all rows in the table )
*/
2004-06-04 18:38:18 +04:00
2004-04-14 01:42:01 +04:00
static void test_ps_conj_select ( )
{
MYSQL_STMT * stmt ;
int rc ;
MYSQL_BIND bind [ 2 ] ;
long int int_data ;
2004-06-04 18:38:18 +04:00
char str_data [ 32 ] ;
2004-04-14 01:42:01 +04:00
unsigned long str_length ;
myheader ( " test_ps_conj_select " ) ;
2004-06-04 18:38:18 +04:00
2004-04-14 01:42:01 +04:00
rc = mysql_query ( mysql , " drop table if exists t1 " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 (id1 int(11) NOT NULL default '0', "
2004-04-14 01:42:01 +04:00
" value2 varchar(100), value1 varchar(100)) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t1 values (1, 'hh', 'hh'), "
" (2, 'hh', 'hh'), (1, 'ii', 'ii'), (2, 'ii', 'ii') " ) ;
2004-04-14 01:42:01 +04:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " select id1, value1 from t1 where id1= ? or value1= ? " ) ;
2004-04-14 01:42:01 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 17:21:06 +04:00
check_stmt ( stmt ) ;
2004-04-14 01:42:01 +04:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-04-14 01:42:01 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & int_data ;
2004-04-14 01:42:01 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_VAR_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) str_data ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_length = array_elements ( str_data ) ;
2004-04-14 01:42:01 +04:00
bind [ 1 ] . length = & str_length ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 17:21:06 +04:00
check_execute ( stmt , rc ) ;
2004-04-14 01:42:01 +04:00
int_data = 1 ;
2004-06-04 18:38:18 +04:00
strcpy ( str_data , " hh " ) ;
2004-04-14 01:42:01 +04:00
str_length = strlen ( str_data ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 17:21:06 +04:00
check_execute ( stmt , rc ) ;
2004-04-14 01:42:01 +04:00
assert ( my_process_stmt_result ( stmt ) = = 3 ) ;
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test BUG#1115 (incorrect string parameter value allocation) */
2003-09-02 14:37:06 +03:00
static void test_bug1115 ( )
{
MYSQL_STMT * stmt ;
int rc ;
MYSQL_BIND bind [ 1 ] ;
ulong length [ 1 ] ;
char szData [ 11 ] ;
myheader ( " test_bug1115 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_select " ) ;
2003-09-02 14:37:06 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_select( \
2003-09-02 14:37:06 +03:00
session_id char ( 9 ) NOT NULL , \
a int ( 8 ) unsigned NOT NULL , \
b int ( 5 ) NOT NULL , \
c int ( 5 ) NOT NULL , \
d datetime NOT NULL ) " );
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_select VALUES "
" ( \" abc \" , 1, 2, 3, 2003-08-30), "
" ( \" abd \" , 1, 2, 3, 2003-08-30), "
" ( \" abf \" , 1, 2, 3, 2003-08-30), "
" ( \" abg \" , 1, 2, 3, 2003-08-30), "
" ( \" abh \" , 1, 2, 3, 2003-08-30), "
" ( \" abj \" , 1, 2, 3, 2003-08-30), "
" ( \" abk \" , 1, 2, 3, 2003-08-30), "
" ( \" abl \" , 1, 2, 3, 2003-08-30), "
" ( \" abq \" , 1, 2, 3, 2003-08-30), "
" ( \" abw \" , 1, 2, 3, 2003-08-30), "
" ( \" abe \" , 1, 2, 3, 2003-08-30), "
" ( \" abr \" , 1, 2, 3, 2003-08-30), "
" ( \" abt \" , 1, 2, 3, 2003-08-30), "
" ( \" aby \" , 1, 2, 3, 2003-08-30), "
" ( \" abu \" , 1, 2, 3, 2003-08-30), "
" ( \" abi \" , 1, 2, 3, 2003-08-30), "
" ( \" abo \" , 1, 2, 3, 2003-08-30), "
" ( \" abp \" , 1, 2, 3, 2003-08-30), "
" ( \" abz \" , 1, 2, 3, 2003-08-30), "
" ( \" abx \" , 1, 2, 3, 2003-08-30) " ) ;
myquery ( rc ) ;
strmov ( query , " SELECT * FROM test_select WHERE session_id= ? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
strmov ( szData , ( char * ) " abc " ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) szData ;
2003-09-02 14:37:06 +03:00
bind [ 0 ] . buffer_length = 10 ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = 3 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 14:37:06 +03:00
2003-11-19 17:31:57 +02:00
assert ( my_process_stmt_result ( stmt ) = = 1 ) ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
strmov ( szData , ( char * ) " venu " ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) szData ;
2003-09-02 14:37:06 +03:00
bind [ 0 ] . buffer_length = 10 ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = 4 ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . is_null = 0 ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 14:37:06 +03:00
2003-11-19 17:31:57 +02:00
assert ( my_process_stmt_result ( stmt ) = = 0 ) ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
strmov ( szData , ( char * ) " abc " ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) szData ;
2003-09-02 14:37:06 +03:00
bind [ 0 ] . buffer_length = 10 ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = 3 ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . is_null = 0 ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 14:37:06 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 14:37:06 +03:00
2003-11-19 17:31:57 +02:00
assert ( my_process_stmt_result ( stmt ) = = 1 ) ;
2003-09-02 14:37:06 +03:00
mysql_stmt_close ( stmt ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test BUG#1180 (optimized away part of WHERE clause) */
2003-09-02 19:56:55 +03:00
static void test_bug1180 ( )
{
MYSQL_STMT * stmt ;
int rc ;
MYSQL_BIND bind [ 1 ] ;
ulong length [ 1 ] ;
char szData [ 11 ] ;
myheader ( " test_select_bug " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_select " ) ;
2003-09-02 19:56:55 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_select(session_id char(9) NOT NULL) " ) ;
2003-09-02 19:56:55 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_select VALUES ( \" abc \" ) " ) ;
2003-09-02 19:56:55 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT * FROM test_select WHERE ?= \" 1111 \" and "
" session_id= \" abc \" " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
strmov ( szData , ( char * ) " abc " ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) szData ;
2003-09-02 19:56:55 +03:00
bind [ 0 ] . buffer_length = 10 ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = 3 ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . is_null = 0 ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 19:56:55 +03:00
2003-11-19 17:31:57 +02:00
assert ( my_process_stmt_result ( stmt ) = = 0 ) ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
strmov ( szData , ( char * ) " 1111 " ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) szData ;
2003-09-02 19:56:55 +03:00
bind [ 0 ] . buffer_length = 10 ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = 4 ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . is_null = 0 ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 19:56:55 +03:00
2003-11-19 17:31:57 +02:00
assert ( my_process_stmt_result ( stmt ) = = 1 ) ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
strmov ( szData , ( char * ) " abc " ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) szData ;
2003-09-02 19:56:55 +03:00
bind [ 0 ] . buffer_length = 10 ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = 3 ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . is_null = 0 ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 19:56:55 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-09-02 19:56:55 +03:00
2003-11-19 17:31:57 +02:00
assert ( my_process_stmt_result ( stmt ) = = 0 ) ;
2003-09-02 19:56:55 +03:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
2003-10-25 17:19:35 +02:00
/*
2004-06-04 18:38:18 +04:00
Test BUG # 1644 ( Insertion of more than 3 NULL columns with parameter
binding fails )
2003-10-25 17:19:35 +02:00
*/
2004-06-04 18:38:18 +04:00
2003-10-25 17:19:35 +02:00
static void test_bug1644 ( )
{
MYSQL_STMT * stmt ;
MYSQL_RES * result ;
MYSQL_ROW row ;
MYSQL_BIND bind [ 4 ] ;
int num ;
my_bool isnull ;
int rc , i ;
myheader ( " test_bug1644 " ) ;
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS foo_dfr " ) ;
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" CREATE TABLE foo_dfr(col1 int, col2 int, col3 int, col4 int); " ) ;
2003-10-25 17:19:35 +02:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO foo_dfr VALUES (?, ?, ?, ? ) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-10-25 17:19:35 +02:00
verify_param_count ( stmt , 4 ) ;
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-10-25 17:19:35 +02:00
num = 22 ;
isnull = 0 ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 4 ; i + + )
2003-10-25 17:19:35 +02:00
{
2004-06-04 18:38:18 +04:00
bind [ i ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ i ] . buffer = ( void * ) & num ;
2003-10-25 17:19:35 +02:00
bind [ i ] . is_null = & isnull ;
}
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-10-25 17:19:35 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-10-25 17:19:35 +02:00
isnull = 1 ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 4 ; i + + )
2003-10-25 17:19:35 +02:00
bind [ i ] . is_null = & isnull ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-10-25 17:19:35 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-10-25 17:19:35 +02:00
isnull = 0 ;
num = 88 ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 4 ; i + + )
2003-10-25 17:19:35 +02:00
bind [ i ] . is_null = & isnull ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-10-25 17:19:35 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-10-25 17:19:35 +02:00
mysql_stmt_close ( stmt ) ;
rc = mysql_query ( mysql , " SELECT * FROM foo_dfr " ) ;
myquery ( rc ) ;
result = mysql_store_result ( mysql ) ;
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 3 = = my_process_result_set ( result ) ) ;
2003-10-25 17:19:35 +02:00
mysql_data_seek ( result , 0 ) ;
row = mysql_fetch_row ( result ) ;
mytest ( row ) ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 4 ; i + + )
2003-10-25 17:19:35 +02:00
{
2003-11-19 17:31:57 +02:00
assert ( strcmp ( row [ i ] , " 22 " ) = = 0 ) ;
2003-10-25 17:19:35 +02:00
}
row = mysql_fetch_row ( result ) ;
mytest ( row ) ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 4 ; i + + )
2003-10-25 17:19:35 +02:00
{
2003-11-19 17:31:57 +02:00
assert ( row [ i ] = = 0 ) ;
2003-10-25 17:19:35 +02:00
}
row = mysql_fetch_row ( result ) ;
mytest ( row ) ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 4 ; i + + )
2003-10-25 17:19:35 +02:00
{
2003-11-19 17:31:57 +02:00
assert ( strcmp ( row [ i ] , " 88 " ) = = 0 ) ;
2003-10-25 17:19:35 +02:00
}
row = mysql_fetch_row ( result ) ;
mytest_r ( row ) ;
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test simple select show */
2003-01-03 23:38:47 -08:00
static void test_select_show ( )
{
MYSQL_STMT * stmt ;
int rc ;
myheader ( " test_select_show " ) ;
2004-06-04 18:38:18 +04:00
mysql_autocommit ( mysql , TRUE ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_show " ) ;
2003-01-30 14:33:49 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_show(id int(4) NOT NULL primary "
" key, name char(2)) " ) ;
2003-01-30 14:33:49 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " show columns from test_show " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-18 12:58:19 -08:00
my_process_stmt_result ( stmt ) ;
2003-01-30 14:33:49 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " show tables from mysql like ? " ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2004-06-04 18:38:18 +04:00
strxmov ( query , " show tables from " , current_db , " like \' test_show \' " , NullS ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-30 14:33:49 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-30 14:33:49 -08:00
my_process_stmt_result ( stmt ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " describe test_show " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-30 14:33:49 -08:00
my_process_stmt_result ( stmt ) ;
2003-01-03 23:38:47 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " show keys from test_show " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-06-04 00:19:09 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2003-06-04 00:19:09 -07:00
mysql_stmt_close ( stmt ) ;
2003-01-03 23:38:47 -08:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple update */
2003-01-03 23:38:47 -08:00
static void test_simple_update ( )
{
MYSQL_STMT * stmt ;
int rc ;
char szData [ 25 ] ;
2004-06-04 18:38:18 +04:00
int nData = 1 ;
2003-01-03 23:38:47 -08:00
MYSQL_RES * result ;
2004-06-04 18:38:18 +04:00
MYSQL_BIND bind [ 2 ] ;
ulong length [ 2 ] ;
2003-01-03 23:38:47 -08:00
myheader ( " test_simple_update " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_update " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_update(col1 int, "
" col2 varchar(50), col3 int ) " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_update VALUES(1, 'MySQL', 100) " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2003-02-04 18:54:14 -08:00
verify_affected_rows ( 1 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
/* insert by prepare */
2004-06-04 18:38:18 +04:00
strmov ( query , " UPDATE test_update SET col2= ? WHERE col1= ? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
nData = 1 ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 0 ] . buffer = szData ; /* string data */
bind [ 0 ] . buffer_length = sizeof ( szData ) ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . length = & length [ 0 ] ;
2004-06-04 18:38:18 +04:00
length [ 0 ] = my_sprintf ( szData , ( szData , " updated-data " ) ) ;
2003-01-21 21:07:59 +02:00
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & nData ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-04 18:54:14 -08:00
verify_affected_rows ( 1 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_update " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test simple long data handling */
2003-01-03 23:38:47 -08:00
static void test_long_data ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc , int_data ;
2004-06-04 18:38:18 +04:00
char * data = NullS ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 3 ] ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_long_data " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_long_data " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_long_data(col1 int, "
" col2 long varchar, col3 long varbinary) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_long_data(col1, col2) VALUES(?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_long_data(col1, col2, col3) VALUES(?, ?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 3 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & int_data ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
bind [ 2 ] = bind [ 1 ] ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
int_data = 999 ;
2004-06-04 18:38:18 +04:00
data = ( char * ) " Michael " ;
2002-06-13 17:28:25 -07:00
/* supply data in pieces */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_send_long_data ( stmt , 1 , data , strlen ( data ) ) ;
data = ( char * ) " 'Monty' Widenius " ;
rc = mysql_stmt_send_long_data ( stmt , 1 , data , strlen ( data ) ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_send_long_data ( stmt , 2 , " Venu (venu@mysql.com) " , 4 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
/* execute */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
fprintf ( stdout , " mysql_stmt_execute() returned %d \n " , rc ) ;
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_long_data " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_col_data ( " test_long_data " , " col1 " , " 999 " ) ;
verify_col_data ( " test_long_data " , " col2 " , " Michael 'Monty' Widenius " ) ;
verify_col_data ( " test_long_data " , " col3 " , " Venu " ) ;
2003-01-28 09:24:27 -08:00
mysql_stmt_close ( stmt ) ;
2002-06-13 17:28:25 -07:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test long data (string) handling */
2003-01-03 23:38:47 -08:00
static void test_long_data_str ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc , i ;
2002-06-13 17:28:25 -07:00
char data [ 255 ] ;
2004-05-19 05:09:10 +03:00
long length ;
2004-06-04 18:38:18 +04:00
ulong length1 ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2003-01-21 21:07:59 +02:00
my_bool is_null [ 2 ] ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_long_data_str " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_long_data_str " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_long_data_str(id int, longstr long varchar) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_long_data_str VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & length ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . is_null = & is_null [ 0 ] ;
2004-06-04 18:38:18 +04:00
is_null [ 0 ] = 0 ;
2003-01-21 21:07:59 +02:00
length = 0 ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer = data ; /* string data */
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2003-01-09 18:32:08 -08:00
bind [ 1 ] . length = & length1 ;
2003-01-21 21:07:59 +02:00
bind [ 1 ] . is_null = & is_null [ 1 ] ;
2004-06-04 18:38:18 +04:00
is_null [ 1 ] = 0 ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
length = 40 ;
strmov ( data , " MySQL AB " ) ;
2002-06-13 17:28:25 -07:00
/* supply data in pieces */
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 4 ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_send_long_data ( stmt , 1 , ( char * ) data , 5 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
}
/* execute */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
fprintf ( stdout , " mysql_stmt_execute() returned %d \n " , rc ) ;
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT LENGTH(longstr), longstr FROM test_long_data_str " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
my_sprintf ( data , ( data , " %d " , i * 5 ) ) ;
verify_col_data ( " test_long_data_str " , " LENGTH(longstr) " , data ) ;
data [ 0 ] = ' \0 ' ;
2003-01-03 23:38:47 -08:00
while ( i - - )
2004-06-04 18:38:18 +04:00
strxmov ( data , data , " MySQL " , NullS ) ;
verify_col_data ( " test_long_data_str " , " longstr " , data ) ;
2004-04-30 14:02:17 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_long_data_str " ) ;
2004-04-30 14:02:17 +03:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test long data (string) handling */
2003-01-03 23:38:47 -08:00
static void test_long_data_str1 ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-09 18:32:08 -08:00
int rc , i ;
2003-01-03 23:38:47 -08:00
char data [ 255 ] ;
2004-05-19 05:09:10 +03:00
long length ;
2004-06-04 18:38:18 +04:00
ulong max_blob_length , blob_length , length1 ;
2004-04-30 14:24:06 +03:00
my_bool true_value ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2004-04-30 14:02:17 +03:00
MYSQL_FIELD * field ;
2002-11-22 18:30:55 -08:00
myheader ( " test_long_data_str1 " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_long_data_str " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_long_data_str(longstr long varchar, blb long varbinary) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_long_data_str VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer = data ; /* string data */
2003-01-21 21:07:59 +02:00
bind [ 0 ] . buffer_length = sizeof ( data ) ;
2003-01-09 18:32:08 -08:00
bind [ 0 ] . length = & length1 ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2003-01-21 21:07:59 +02:00
length1 = 0 ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
bind [ 1 ] = bind [ 0 ] ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_BLOB ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
length = my_sprintf ( data , ( data , " MySQL AB " ) ) ;
2002-06-13 17:28:25 -07:00
/* supply data in pieces */
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 3 ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_send_long_data ( stmt , 0 , data , length ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_send_long_data ( stmt , 1 , data , 2 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
}
2002-11-22 18:30:55 -08:00
2002-06-13 17:28:25 -07:00
/* execute */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
fprintf ( stdout , " mysql_stmt_execute() returned %d \n " , rc ) ;
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT LENGTH(longstr), longstr, LENGTH(blb), blb FROM test_long_data_str " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2004-04-30 14:02:17 +03:00
mysql_field_seek ( result , 1 ) ;
field = mysql_fetch_field ( result ) ;
max_blob_length = field - > max_length ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
my_sprintf ( data , ( data , " %ld " , ( long ) i * length ) ) ;
verify_col_data ( " test_long_data_str " , " length(longstr) " , data ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
my_sprintf ( data , ( data , " %d " , i * 2 ) ) ;
verify_col_data ( " test_long_data_str " , " length(blb) " , data ) ;
2004-04-30 14:02:17 +03:00
/* Test length of field->max_length */
stmt = mysql_simple_prepare ( mysql , " SELECT * from test_long_data_str " ) ;
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-04-30 14:02:17 +03:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
2004-04-30 14:02:17 +03:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2004-04-30 14:02:17 +03:00
field = mysql_fetch_fields ( result ) ;
2004-04-30 14:24:06 +03:00
/* First test what happens if STMT_ATTR_UPDATE_MAX_LENGTH is not used */
DBUG_ASSERT ( field - > max_length = = 0 ) ;
mysql_free_result ( result ) ;
/* Enable updating of field->max_length */
true_value = 1 ;
mysql_stmt_attr_set ( stmt , STMT_ATTR_UPDATE_MAX_LENGTH , ( void * ) & true_value ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-04-30 14:24:06 +03:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
2004-04-30 14:24:06 +03:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2004-04-30 14:24:06 +03:00
field = mysql_fetch_fields ( result ) ;
2004-04-30 14:02:17 +03:00
DBUG_ASSERT ( field - > max_length = = max_blob_length ) ;
/* Fetch results into a data buffer that is smaller than data */
bzero ( ( char * ) bind , sizeof ( * bind ) ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_BLOB ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & data ; /* this buffer won't be altered */
2004-04-30 14:02:17 +03:00
bind [ 0 ] . buffer_length = 16 ;
bind [ 0 ] . length = & blob_length ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
data [ 16 ] = 0 ;
2004-06-04 18:38:18 +04:00
DBUG_ASSERT ( ( mysql_stmt_fetch ( stmt ) = = 0 ) ) ;
2004-04-30 14:02:17 +03:00
DBUG_ASSERT ( strlen ( data ) = = 16 ) ;
DBUG_ASSERT ( blob_length = = max_blob_length ) ;
/* Fetch all data */
bzero ( ( char * ) ( bind + 1 ) , sizeof ( * bind ) ) ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_BLOB ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & data ; /* this buffer won't be altered */
2004-04-30 14:02:17 +03:00
bind [ 1 ] . buffer_length = sizeof ( data ) ;
bind [ 1 ] . length = & blob_length ;
bzero ( data , sizeof ( data ) ) ;
mysql_stmt_fetch_column ( stmt , bind + 1 , 0 , 0 ) ;
DBUG_ASSERT ( strlen ( data ) = = max_blob_length ) ;
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
/* Drop created table */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_long_data_str " ) ;
2004-04-30 14:02:17 +03:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test long data (binary) handling */
2003-01-03 23:38:47 -08:00
static void test_long_data_bin ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2002-06-13 17:28:25 -07:00
char data [ 255 ] ;
2003-01-21 21:07:59 +02:00
long length ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_long_data_bin " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_long_data_bin " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_long_data_bin(id int, longbin long varbinary) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_long_data_bin VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & length ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2003-01-21 21:07:59 +02:00
length = 0 ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer = data ; /* string data */
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG_BLOB ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
length = 10 ;
strmov ( data , " MySQL AB " ) ;
2002-06-13 17:28:25 -07:00
/* supply data in pieces */
{
int i ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < 100 ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_send_long_data ( stmt , 1 , ( char * ) data , 4 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
}
}
/* execute */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
fprintf ( stdout , " mysql_stmt_execute() returned %d \n " , rc ) ;
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT LENGTH(longbin), longbin FROM test_long_data_bin " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test simple delete */
2003-01-03 23:38:47 -08:00
static void test_simple_delete ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2004-06-04 18:38:18 +04:00
char szData [ 30 ] = { 0 } ;
int nData = 1 ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2003-01-21 21:07:59 +02:00
ulong length [ 2 ] ;
2002-11-22 18:30:55 -08:00
myheader ( " test_simple_delete " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_simple_delete " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_simple_delete(col1 int, \
2002-06-13 17:28:25 -07:00
col2 varchar ( 50 ) , col3 int ) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_simple_delete VALUES(1, 'MySQL', 100) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2003-02-04 18:54:14 -08:00
verify_affected_rows ( 1 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert by prepare */
2004-06-04 18:38:18 +04:00
strmov ( query , " DELETE FROM test_simple_delete WHERE col1= ? AND col2= ? AND col3= 100 " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
nData = 1 ;
strmov ( szData , " MySQL " ) ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 1 ] . buffer = szData ; /* string data */
bind [ 1 ] . buffer_length = sizeof ( szData ) ;
2003-01-21 21:07:59 +02:00
bind [ 1 ] . length = & length [ 1 ] ;
length [ 1 ] = 5 ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & nData ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-04 18:54:14 -08:00
verify_affected_rows ( 1 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_simple_delete " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 0 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test simple update */
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
static void test_update ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2002-11-22 18:30:55 -08:00
char szData [ 25 ] ;
2004-06-04 18:38:18 +04:00
int nData = 1 ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2003-01-21 21:07:59 +02:00
ulong length [ 2 ] ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_update " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_update " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-05 03:09:53 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_update( "
" col1 int primary key auto_increment, "
" col2 varchar(50), col3 int ) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_update(col2, col3) VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
/* string data */
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 0 ] . buffer = szData ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . buffer_length = sizeof ( szData ) ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = my_sprintf ( szData , ( szData , " inserted-data " ) ) ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & nData ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
nData = 100 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-11-22 18:30:55 -08:00
2003-02-04 18:54:14 -08:00
verify_affected_rows ( 1 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " UPDATE test_update SET col2= ? WHERE col3= ? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
nData = 100 ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 0 ] . buffer = szData ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . buffer_length = sizeof ( szData ) ;
bind [ 0 ] . length = & length [ 0 ] ;
length [ 0 ] = my_sprintf ( szData , ( szData , " updated-data " ) ) ;
2002-06-13 17:28:25 -07:00
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & nData ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-04 18:54:14 -08:00
verify_affected_rows ( 1 ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_update " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test prepare without parameters */
2003-01-03 23:38:47 -08:00
static void test_prepare_noparam ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2003-01-03 23:38:47 -08:00
myheader ( " test_prepare_noparam " ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS my_prepare " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-05 03:09:53 +04:00
rc = mysql_query ( mysql , " CREATE TABLE my_prepare(col1 int, col2 varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert by prepare */
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO my_prepare VALUES(10, 'venu') " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM my_prepare " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test simple bind result */
2003-01-03 23:38:47 -08:00
static void test_bind_result ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
int rc ;
2003-01-21 21:07:59 +02:00
int nData ;
2004-06-04 18:38:18 +04:00
ulong length , length1 ;
2002-06-13 17:28:25 -07:00
char szData [ 100 ] ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2003-01-21 21:07:59 +02:00
my_bool is_null [ 2 ] ;
2002-06-13 17:28:25 -07:00
2002-06-13 17:36:15 -07:00
myheader ( " test_bind_result " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_result " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_result(col1 int , col2 varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_bind_result VALUES(10, 'venu') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_bind_result VALUES(20, 'MySQL') " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_bind_result(col2) VALUES('monty') " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
/* fetch */
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & nData ; /* integer data */
2003-01-21 21:07:59 +02:00
bind [ 0 ] . is_null = & is_null [ 0 ] ;
bind [ 0 ] . length = 0 ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 1 ] . buffer = szData ; /* string data */
bind [ 1 ] . buffer_length = sizeof ( szData ) ;
2003-01-21 21:07:59 +02:00
bind [ 1 ] . length = & length1 ;
bind [ 1 ] . is_null = & is_null [ 1 ] ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_bind_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %d, %s(%lu) " , nData , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 10 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " venu " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 4 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 2: %d, %s(%lu) " , nData , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 20 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " MySQL " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 5 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
length = 99 ;
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-21 21:07:59 +02:00
if ( is_null [ 0 ] )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 3: NULL, %s(%lu) " , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( is_null [ 0 ] ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " monty " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 5 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
}
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
/* Test ext bind result */
2003-01-03 23:38:47 -08:00
static void test_bind_result_ext ( )
2002-06-13 17:28:25 -07:00
{
MYSQL_STMT * stmt ;
2003-01-21 21:07:59 +02:00
int rc , i ;
2003-01-03 23:38:47 -08:00
uchar t_data ;
short s_data ;
int i_data ;
longlong b_data ;
float f_data ;
double d_data ;
char szData [ 20 ] , bData [ 20 ] ;
2003-01-21 21:07:59 +02:00
ulong szLength , bLength ;
2003-01-03 23:38:47 -08:00
MYSQL_BIND bind [ 8 ] ;
2004-06-04 18:38:18 +04:00
ulong length [ 8 ] ;
2003-01-21 21:07:59 +02:00
my_bool is_null [ 8 ] ;
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
myheader ( " test_bind_result_ext " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_result " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-05 03:09:53 +04:00
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-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-05 03:09:53 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_bind_result "
" VALUES (19, 2999, 3999, 4999999, "
" 2345.6, 5678.89563, 'venu', 'mysql') " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2003-01-21 21:07:59 +02:00
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
{
bind [ i ] . length = & length [ i ] ;
bind [ i ] . is_null = & is_null [ i ] ;
}
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & t_data ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_SHORT ;
bind [ 2 ] . buffer_type = MYSQL_TYPE_LONG ;
bind [ 3 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & s_data ;
2003-01-03 23:38:47 -08:00
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & i_data ;
bind [ 3 ] . buffer = ( void * ) & b_data ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 4 ] . buffer_type = MYSQL_TYPE_FLOAT ;
2004-06-25 17:04:33 +04:00
bind [ 4 ] . buffer = ( void * ) & f_data ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 5 ] . buffer_type = MYSQL_TYPE_DOUBLE ;
2004-06-25 17:04:33 +04:00
bind [ 5 ] . buffer = ( void * ) & d_data ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 6 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 6 ] . buffer = ( void * ) szData ;
2003-01-21 21:07:59 +02:00
bind [ 6 ] . buffer_length = sizeof ( szData ) ;
bind [ 6 ] . length = & szLength ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 7 ] . buffer_type = MYSQL_TYPE_TINY_BLOB ;
2004-06-25 17:04:33 +04:00
bind [ 7 ] . buffer = ( void * ) & bData ;
2003-01-21 21:07:59 +02:00
bind [ 7 ] . length = & bLength ;
bind [ 7 ] . buffer_length = sizeof ( bData ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_bind_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
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 ) ;
2003-01-21 21:07:59 +02:00
fprintf ( stdout , " \n data (str) : %s(%lu) " , szData , szLength ) ;
2004-03-05 16:55:09 +03:00
bData [ bLength ] = ' \0 ' ; /* bData is binary */
2003-01-21 21:07:59 +02:00
fprintf ( stdout , " \n data (bin) : %s(%lu) " , bData , bLength ) ;
2003-01-03 23:38:47 -08:00
2003-11-19 17:31:57 +02:00
assert ( t_data = = 19 ) ;
assert ( s_data = = 2999 ) ;
assert ( i_data = = 3999 ) ;
assert ( b_data = = 4999999 ) ;
/*assert(f_data == 2345.60);*/
/*assert(d_data == 5678.89563);*/
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " venu " ) = = 0 ) ;
assert ( strncmp ( bData , " mysql " , 5 ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( szLength = = 4 ) ;
assert ( bLength = = 5 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-03 23:38:47 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test ext bind result */
2003-01-03 23:38:47 -08:00
static void test_bind_result_ext1 ( )
{
MYSQL_STMT * stmt ;
2004-06-04 18:38:18 +04:00
uint i ;
2003-01-03 23:38:47 -08:00
int rc ;
char t_data [ 20 ] ;
float s_data ;
short i_data ;
2003-02-04 18:54:14 -08:00
uchar b_data ;
2003-01-03 23:38:47 -08:00
int f_data ;
long bData ;
char d_data [ 20 ] ;
double szData ;
MYSQL_BIND bind [ 8 ] ;
2003-01-21 21:07:59 +02:00
ulong length [ 8 ] ;
my_bool is_null [ 8 ] ;
2003-01-03 23:38:47 -08:00
myheader ( " test_bind_result_ext1 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_result " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_result(c1 tinyint, c2 smallint, \
2003-01-03 23:38:47 -08:00
c3 int , c4 bigint , \
c5 float , c6 double , \
c7 varbinary ( 10 ) , \
c8 varchar ( 10 ) ) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_bind_result VALUES(120, 2999, 3999, 54, \
2.6 , 58.89 , \
' 206 ' , ' 6.7 ' ) " );
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) t_data ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . buffer_length = sizeof ( t_data ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_FLOAT ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & s_data ;
2003-10-25 15:53:41 +02:00
bind [ 1 ] . buffer_length = 0 ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 2 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & i_data ;
2003-10-25 15:53:41 +02:00
bind [ 2 ] . buffer_length = 0 ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & b_data ;
2003-10-25 15:53:41 +02:00
bind [ 3 ] . buffer_length = 0 ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 4 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 4 ] . buffer = ( void * ) & f_data ;
2003-10-25 15:53:41 +02:00
bind [ 4 ] . buffer_length = 0 ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 5 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 5 ] . buffer = ( void * ) d_data ;
2003-10-25 15:53:41 +02:00
bind [ 5 ] . buffer_length = sizeof ( d_data ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 6 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 6 ] . buffer = ( void * ) & bData ;
2003-10-25 15:53:41 +02:00
bind [ 6 ] . buffer_length = 0 ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 7 ] . buffer_type = MYSQL_TYPE_DOUBLE ;
2004-06-25 17:04:33 +04:00
bind [ 7 ] . buffer = ( void * ) & szData ;
2003-10-25 15:53:41 +02:00
bind [ 7 ] . buffer_length = 0 ;
2003-01-03 23:38:47 -08:00
2003-01-21 21:07:59 +02:00
for ( i = 0 ; i < array_elements ( bind ) ; i + + )
{
bind [ i ] . is_null = & is_null [ i ] ;
bind [ i ] . length = & length [ i ] ;
}
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_bind_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-21 21:07:59 +02:00
fprintf ( stdout , " \n data (tiny) : %s(%lu) " , t_data , length [ 0 ] ) ;
fprintf ( stdout , " \n data (short) : %f(%lu) " , s_data , length [ 1 ] ) ;
fprintf ( stdout , " \n data (int) : %d(%lu) " , i_data , length [ 2 ] ) ;
fprintf ( stdout , " \n data (big) : %d(%lu) " , b_data , length [ 3 ] ) ;
2003-01-03 23:38:47 -08:00
2003-01-21 21:07:59 +02:00
fprintf ( stdout , " \n data (float) : %d(%lu) " , f_data , length [ 4 ] ) ;
fprintf ( stdout , " \n data (double) : %s(%lu) " , d_data , length [ 5 ] ) ;
2003-01-03 23:38:47 -08:00
2003-01-21 21:07:59 +02:00
fprintf ( stdout , " \n data (bin) : %ld(%lu) " , bData , length [ 6 ] ) ;
fprintf ( stdout , " \n data (str) : %g(%lu) " , szData , length [ 7 ] ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
assert ( strcmp ( t_data , " 120 " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( i_data = = 3999 ) ;
assert ( f_data = = 2 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( d_data , " 58.89 " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( b_data = = 54 ) ;
assert ( length [ 0 ] = = 3 ) ;
assert ( length [ 1 ] = = 4 ) ;
assert ( length [ 2 ] = = 2 ) ;
assert ( length [ 3 ] = = 1 ) ;
assert ( length [ 4 ] = = 4 ) ;
assert ( length [ 5 ] = = 5 ) ;
assert ( length [ 6 ] = = 4 ) ;
assert ( length [ 7 ] = = 8 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-03 23:38:47 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Generalized fetch conversion routine for all basic types */
2003-01-22 01:30:13 -08:00
static void bind_fetch ( int row_count )
2004-06-04 18:38:18 +04:00
{
2003-01-22 01:30:13 -08:00
MYSQL_STMT * stmt ;
int rc , i , count = row_count ;
long data [ 10 ] ;
2004-06-22 23:07:08 +04:00
int8 i8_data ;
int16 i16_data ;
int32 i32_data ;
longlong i64_data ;
2003-01-22 01:30:13 -08:00
float f_data ;
double d_data ;
char s_data [ 10 ] ;
2004-06-04 18:38:18 +04:00
ulong length [ 10 ] ;
2003-01-22 01:30:13 -08:00
MYSQL_BIND bind [ 7 ] ;
2004-06-04 18:38:18 +04:00
my_bool is_null [ 7 ] ;
2003-01-22 01:30:13 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " INSERT INTO test_bind_fetch VALUES "
" (?, ?, ?, ?, ?, ?, ?) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-22 01:30:13 -08:00
verify_param_count ( stmt , 7 ) ;
2004-06-04 18:38:18 +04:00
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-01-22 01:30:13 -08:00
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
2004-06-04 18:38:18 +04:00
{
2003-01-22 01:30:13 -08:00
bind [ i ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ i ] . buffer = ( void * ) & data [ i ] ;
2004-06-04 18:38:18 +04:00
}
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
while ( count - - )
{
rc = 10 + count ;
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
2004-06-04 18:38:18 +04:00
{
2003-01-22 01:30:13 -08:00
data [ i ] = rc + i ;
rc + = 12 ;
}
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
}
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-22 01:30:13 -08:00
myquery ( rc ) ;
mysql_stmt_close ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( row_count = = ( int )
2004-02-11 12:32:47 +01:00
my_stmt_result ( " SELECT * FROM test_bind_fetch " ) ) ;
2003-01-22 01:30:13 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_bind_fetch " ) ;
2003-01-22 01:30:13 -08:00
myquery ( rc ) ;
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
{
2004-06-25 17:04:33 +04:00
bind [ i ] . buffer = ( void * ) & data [ i ] ;
2003-01-22 01:30:13 -08:00
bind [ i ] . length = & length [ i ] ;
bind [ i ] . is_null = & is_null [ i ] ;
}
bind [ 0 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & i8_data ;
2004-06-22 23:07:08 +04:00
2003-01-22 01:30:13 -08:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & i16_data ;
2004-06-22 23:07:08 +04:00
2003-01-22 01:30:13 -08:00
bind [ 2 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & i32_data ;
2004-06-22 23:07:08 +04:00
2003-01-22 01:30:13 -08:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & i64_data ;
2003-01-22 01:30:13 -08:00
bind [ 4 ] . buffer_type = MYSQL_TYPE_FLOAT ;
2004-06-25 17:04:33 +04:00
bind [ 4 ] . buffer = ( void * ) & f_data ;
2003-01-22 01:30:13 -08:00
bind [ 5 ] . buffer_type = MYSQL_TYPE_DOUBLE ;
2004-06-25 17:04:33 +04:00
bind [ 5 ] . buffer = ( void * ) & d_data ;
2003-01-22 01:30:13 -08:00
bind [ 6 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 6 ] . buffer = ( void * ) & s_data ;
2003-01-22 01:30:13 -08:00
bind [ 6 ] . buffer_length = sizeof ( s_data ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
while ( row_count - - )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
fprintf ( stdout , " \n " ) ;
2004-06-22 23:07:08 +04:00
fprintf ( stdout , " \n tiny : %ld(%lu) " , ( ulong ) i8_data , length [ 0 ] ) ;
fprintf ( stdout , " \n short : %ld(%lu) " , ( ulong ) i16_data , length [ 1 ] ) ;
fprintf ( stdout , " \n int : %ld(%lu) " , ( ulong ) i32_data , length [ 2 ] ) ;
fprintf ( stdout , " \n longlong : %ld(%lu) " , ( ulong ) i64_data , length [ 3 ] ) ;
2003-01-22 01:30:13 -08:00
fprintf ( stdout , " \n float : %f(%lu) " , f_data , length [ 4 ] ) ;
fprintf ( stdout , " \n double : %g(%lu) " , d_data , length [ 5 ] ) ;
fprintf ( stdout , " \n char : %s(%lu) " , s_data , length [ 6 ] ) ;
rc = 10 + row_count ;
2004-06-22 23:07:08 +04:00
/* TINY */
assert ( ( int ) i8_data = = rc ) ;
assert ( length [ 0 ] = = 1 ) ;
rc + = 13 ;
/* SHORT */
assert ( ( int ) i16_data = = rc ) ;
assert ( length [ 1 ] = = 2 ) ;
rc + = 13 ;
/* LONG */
assert ( ( int ) i32_data = = rc ) ;
assert ( length [ 2 ] = = 4 ) ;
rc + = 13 ;
/* LONGLONG */
assert ( ( int ) i64_data = = rc ) ;
assert ( length [ 3 ] = = 8 ) ;
rc + = 13 ;
2003-01-22 01:30:13 -08:00
/* FLOAT */
2003-11-19 17:31:57 +02:00
assert ( ( int ) f_data = = rc ) ;
assert ( length [ 4 ] = = 4 ) ;
2004-06-22 23:07:08 +04:00
rc + = 13 ;
2003-01-22 01:30:13 -08:00
/* DOUBLE */
2003-11-19 17:31:57 +02:00
assert ( ( int ) d_data = = rc ) ;
assert ( length [ 5 ] = = 8 ) ;
2004-06-22 23:07:08 +04:00
rc + = 13 ;
2003-01-22 01:30:13 -08:00
/* CHAR */
{
char buff [ 20 ] ;
long len = my_sprintf ( buff , ( buff , " %d " , rc ) ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( s_data , buff ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length [ 6 ] = = ( ulong ) len ) ;
2003-01-22 01:30:13 -08:00
}
}
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-22 01:30:13 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test fetching of date, time and ts */
2003-01-03 23:38:47 -08:00
static void test_fetch_date ( )
{
MYSQL_STMT * stmt ;
2004-06-04 18:38:18 +04:00
uint i ;
2003-01-03 23:38:47 -08:00
int rc , year ;
char date [ 25 ] , time [ 25 ] , ts [ 25 ] , ts_4 [ 15 ] , ts_6 [ 20 ] , dt [ 20 ] ;
2004-06-04 18:38:18 +04:00
ulong d_length , t_length , ts_length , ts4_length , ts6_length ,
2003-01-03 23:38:47 -08:00
dt_length , y_length ;
2003-01-21 21:07:59 +02:00
MYSQL_BIND bind [ 8 ] ;
my_bool is_null [ 8 ] ;
2004-06-04 18:38:18 +04:00
ulong length [ 8 ] ;
2003-01-03 23:38:47 -08:00
myheader ( " test_fetch_date " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_result " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_result(c1 date, c2 time, \
2003-01-03 23:38:47 -08:00
c3 timestamp ( 14 ) , \
c4 year , \
c5 datetime , \
c6 timestamp ( 4 ) , \
c7 timestamp ( 6 ) ) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_bind_result VALUES('2002-01-02', \
' 12 : 49 : 00 ' , \
2003-01-03 23:38:47 -08:00
' 2002 - 01 - 02 17 : 46 : 59 ' , \
2004-06-04 18:38:18 +04:00
2010 , \
2003-01-03 23:38:47 -08:00
' 2010 - 07 - 10 ' , \
2004-06-04 18:38:18 +04:00
' 2020 ' , ' 1999 - 12 - 29 ' ) " );
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2003-01-21 21:07:59 +02:00
for ( i = 0 ; i < array_elements ( bind ) ; i + + )
{
bind [ i ] . is_null = & is_null [ i ] ;
bind [ i ] . length = & length [ i ] ;
}
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 1 ] = bind [ 2 ] = bind [ 0 ] ;
2003-01-03 23:38:47 -08:00
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & date ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . buffer_length = sizeof ( date ) ;
bind [ 0 ] . length = & d_length ;
2003-01-03 23:38:47 -08:00
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & time ;
2003-01-21 21:07:59 +02:00
bind [ 1 ] . buffer_length = sizeof ( time ) ;
bind [ 1 ] . length = & t_length ;
2003-01-03 23:38:47 -08:00
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & ts ;
2003-01-21 21:07:59 +02:00
bind [ 2 ] . buffer_length = sizeof ( ts ) ;
bind [ 2 ] . length = & ts_length ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & year ;
2003-01-21 21:07:59 +02:00
bind [ 3 ] . length = & y_length ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 4 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 4 ] . buffer = ( void * ) & dt ;
2003-01-21 21:07:59 +02:00
bind [ 4 ] . buffer_length = sizeof ( dt ) ;
bind [ 4 ] . length = & dt_length ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 5 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 5 ] . buffer = ( void * ) & ts_4 ;
2003-01-21 21:07:59 +02:00
bind [ 5 ] . buffer_length = sizeof ( ts_4 ) ;
bind [ 5 ] . length = & ts4_length ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
bind [ 6 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 6 ] . buffer = ( void * ) & ts_6 ;
2003-01-21 21:07:59 +02:00
bind [ 6 ] . buffer_length = sizeof ( ts_6 ) ;
bind [ 6 ] . length = & ts6_length ;
2003-01-03 23:38:47 -08:00
2004-02-11 12:32:47 +01:00
assert ( 1 = = my_stmt_result ( " SELECT * FROM test_bind_result " ) ) ;
2003-01-07 18:53:46 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_bind_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
ts_4 [ 0 ] = ' \0 ' ;
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-21 21:07:59 +02:00
fprintf ( stdout , " \n date : %s(%lu) " , date , d_length ) ;
fprintf ( stdout , " \n time : %s(%lu) " , time , t_length ) ;
fprintf ( stdout , " \n ts : %s(%lu) " , ts , ts_length ) ;
fprintf ( stdout , " \n year : %d(%lu) " , year , y_length ) ;
fprintf ( stdout , " \n dt : %s(%lu) " , dt , dt_length ) ;
fprintf ( stdout , " \n ts(4) : %s(%lu) " , ts_4 , ts4_length ) ;
fprintf ( stdout , " \n ts(6) : %s(%lu) " , ts_6 , ts6_length ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
assert ( strcmp ( date , " 2002-01-02 " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( d_length = = 10 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
assert ( strcmp ( time , " 12:49:00 " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( t_length = = 8 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
assert ( strcmp ( ts , " 2002-01-02 17:46:59 " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( ts_length = = 19 ) ;
2003-01-03 23:38:47 -08:00
2003-11-19 17:31:57 +02:00
assert ( year = = 2010 ) ;
assert ( y_length = = 4 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( dt , " 2010-07-10 00:00:00 " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( dt_length = = 19 ) ;
2003-01-03 23:38:47 -08:00
2003-11-19 17:31:57 +02:00
assert ( ts_4 [ 0 ] = = ' \0 ' ) ;
assert ( ts4_length = = 0 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
assert ( strcmp ( ts_6 , " 1999-12-29 00:00:00 " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( ts6_length = = 19 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-03 23:38:47 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test fetching of str to all types */
2003-01-07 18:53:46 -08:00
static void test_fetch_str ( )
{
2003-01-22 01:30:13 -08:00
int rc ;
2003-01-07 18:53:46 -08:00
myheader ( " test_fetch_str " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_fetch " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_fetch(c1 char(10), \
c2 char ( 10 ) , \
c3 char ( 20 ) , \
c4 char ( 20 ) , \
c5 char ( 30 ) , \
c6 char ( 40 ) , \
2003-01-07 18:53:46 -08:00
c7 char ( 20 ) ) " ) ;
myquery ( rc ) ;
2003-01-22 01:30:13 -08:00
bind_fetch ( 3 ) ;
2003-01-07 18:53:46 -08:00
}
2004-06-04 18:38:18 +04:00
/* Test fetching of long to all types */
2003-01-07 18:53:46 -08:00
static void test_fetch_long ( )
{
2003-01-22 01:30:13 -08:00
int rc ;
2003-01-07 18:53:46 -08:00
myheader ( " test_fetch_long " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_fetch " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_fetch(c1 int unsigned, \
c2 int unsigned , \
c3 int , \
c4 int , \
c5 int , \
c6 int unsigned , \
2003-01-07 18:53:46 -08:00
c7 int ) " );
myquery ( rc ) ;
2003-01-22 01:30:13 -08:00
bind_fetch ( 4 ) ;
2003-01-07 18:53:46 -08:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test fetching of short to all types */
2003-01-07 18:53:46 -08:00
static void test_fetch_short ( )
{
2003-01-22 01:30:13 -08:00
int rc ;
2003-01-07 18:53:46 -08:00
myheader ( " test_fetch_short " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_fetch " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_fetch(c1 smallint unsigned, \
c2 smallint , \
c3 smallint unsigned , \
c4 smallint , \
c5 smallint , \
c6 smallint , \
2003-01-07 18:53:46 -08:00
c7 smallint unsigned ) " );
myquery ( rc ) ;
2003-01-22 01:30:13 -08:00
bind_fetch ( 5 ) ;
}
2003-01-07 18:53:46 -08:00
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test fetching of tiny to all types */
2003-01-07 18:53:46 -08:00
static void test_fetch_tiny ( )
{
2003-01-22 01:30:13 -08:00
int rc ;
2003-01-07 18:53:46 -08:00
myheader ( " test_fetch_tiny " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_fetch " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_fetch(c1 tinyint unsigned, \
c2 tinyint , \
c3 tinyint unsigned , \
c4 tinyint , \
c5 tinyint , \
c6 tinyint , \
2003-01-07 18:53:46 -08:00
c7 tinyint unsigned ) " );
myquery ( rc ) ;
2003-01-22 01:30:13 -08:00
bind_fetch ( 3 ) ;
2003-01-07 18:53:46 -08:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test fetching of longlong to all types */
2003-01-07 18:53:46 -08:00
static void test_fetch_bigint ( )
{
2003-01-22 01:30:13 -08:00
int rc ;
2003-01-07 18:53:46 -08:00
myheader ( " test_fetch_bigint " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_fetch " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_fetch(c1 bigint, \
c2 bigint , \
c3 bigint unsigned , \
c4 bigint unsigned , \
c5 bigint unsigned , \
c6 bigint unsigned , \
2003-01-07 18:53:46 -08:00
c7 bigint unsigned ) " );
myquery ( rc ) ;
2003-01-22 01:30:13 -08:00
bind_fetch ( 2 ) ;
2003-01-07 18:53:46 -08:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test fetching of float to all types */
2003-01-07 18:53:46 -08:00
static void test_fetch_float ( )
{
2003-01-22 01:30:13 -08:00
int rc ;
2003-01-07 18:53:46 -08:00
myheader ( " test_fetch_float " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_fetch " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_fetch(c1 float(3), \
c2 float , \
c3 float unsigned , \
c4 float , \
c5 float , \
c6 float , \
2003-01-07 18:53:46 -08:00
c7 float ( 10 ) unsigned ) " ) ;
myquery ( rc ) ;
2003-01-22 01:30:13 -08:00
bind_fetch ( 2 ) ;
2003-01-07 18:53:46 -08:00
}
2004-06-04 18:38:18 +04:00
/* Test fetching of double to all types */
2003-01-07 18:53:46 -08:00
static void test_fetch_double ( )
{
2003-01-22 01:30:13 -08:00
int rc ;
2003-01-07 18:53:46 -08:00
myheader ( " test_fetch_double " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bind_fetch " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bind_fetch(c1 double(5, 2), "
" c2 double unsigned, c3 double unsigned, "
" c4 double unsigned, c5 double unsigned, "
" c6 double unsigned, c7 double unsigned) " ) ;
2003-01-07 18:53:46 -08:00
myquery ( rc ) ;
2003-01-22 01:30:13 -08:00
bind_fetch ( 3 ) ;
2003-01-07 18:53:46 -08:00
}
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
/* Test simple prepare with all possible types */
2003-01-03 23:38:47 -08:00
static void test_prepare_ext ( )
{
MYSQL_STMT * stmt ;
int rc ;
char * sql ;
2004-06-04 18:38:18 +04:00
int nData = 1 ;
char tData = 1 ;
short sData = 10 ;
longlong bData = 20 ;
2003-01-21 21:07:59 +02:00
MYSQL_BIND bind [ 6 ] ;
2003-01-03 23:38:47 -08:00
myheader ( " test_prepare_ext " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prepare_ext " ) ;
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 , \
c25 blob , \
c26 text , \
c27 mediumblob , \
c28 mediumtext , \
c29 longblob , \
c30 longtext , \
c31 enum ( ' one ' , ' two ' , ' three ' ) , \
c32 set ( ' monday ' , ' tuesday ' , ' wednesday ' ) ) " ;
rc = mysql_query ( mysql , sql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert by prepare - all integers */
2004-06-04 18:38:18 +04:00
strmov ( query , ( char * ) " INSERT INTO test_prepare_ext(c1, c2, c3, c4, c5, c6) VALUES(?, ?, ?, ?, ?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 6 ) ;
/* Always bzero all members of bind parameter */
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
/*tinyint*/
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & tData ;
2002-06-13 17:28:25 -07:00
/*smallint*/
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & sData ;
2002-06-13 17:28:25 -07:00
/*mediumint*/
2004-06-04 18:38:18 +04:00
bind [ 2 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & nData ;
2002-06-13 17:28:25 -07:00
/*int*/
2004-06-04 18:38:18 +04:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & nData ;
2002-06-13 17:28:25 -07:00
/*integer*/
2004-06-04 18:38:18 +04:00
bind [ 4 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 4 ] . buffer = ( void * ) & nData ;
2002-06-13 17:28:25 -07:00
/*bigint*/
2004-06-04 18:38:18 +04:00
bind [ 5 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind [ 5 ] . buffer = ( void * ) & bData ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
/*
* integer to integer
*/
2004-06-04 18:38:18 +04:00
for ( nData = 0 ; nData < 10 ; nData + + , tData + + , sData + + , bData + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
}
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT c1, c2, c3, c4, c5, c6 "
" FROM test_prepare_ext " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-11-22 18:30:55 -08:00
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( nData = = ( int ) my_process_stmt_result ( stmt ) ) ;
2003-01-23 22:39:07 -08:00
mysql_stmt_close ( stmt ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test real and alias names */
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
static void test_field_names ( )
2002-06-13 17:28:25 -07:00
{
int rc ;
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
myheader ( " test_field_names " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n %d, %d, %d " , MYSQL_TYPE_DECIMAL , MYSQL_TYPE_NEWDATE , MYSQL_TYPE_ENUM ) ;
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_field_names1 " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_field_names2 " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_field_names1(id int, name varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_field_names2(id int, name varchar(50)) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2003-01-21 21:07:59 +02:00
/* with table name included with TRUE column name */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT id as 'id-alias' FROM test_field_names1 " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 0 = = my_process_result_set ( result ) ) ;
2002-11-22 18:30:55 -08:00
mysql_free_result ( result ) ;
2002-06-13 17:28:25 -07:00
2003-01-21 21:07:59 +02:00
/* with table name included with TRUE column name */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT t1.id as 'id-alias', test_field_names2.name FROM test_field_names1 t1, test_field_names2 " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 0 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test warnings */
2003-01-03 23:38:47 -08:00
static void test_warnings ( )
2002-06-13 17:28:25 -07:00
{
int rc ;
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
myheader ( " test_warnings " ) ;
2003-02-04 18:54:14 -08:00
mysql_query ( mysql , " DROP TABLE if exists test_non_exists " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE if exists test_non_exists " ) ;
2003-02-04 18:54:14 -08:00
myquery ( rc ) ;
fprintf ( stdout , " \n total warnings: %d " , mysql_warning_count ( mysql ) ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SHOW WARNINGS " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test errors */
2003-01-03 23:38:47 -08:00
static void test_errors ( )
2002-06-13 17:28:25 -07:00
{
int rc ;
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
myheader ( " test_errors " ) ;
2003-02-04 18:54:14 -08:00
mysql_query ( mysql , " DROP TABLE if exists test_non_exists " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_non_exists " ) ;
2003-02-04 18:54:14 -08:00
myquery_r ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SHOW ERRORS " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
my_process_result_set ( result ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test simple prepare-insert */
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
static void test_insert ( )
2002-11-22 18:30:55 -08:00
{
2002-06-13 17:28:25 -07:00
MYSQL_STMT * stmt ;
2003-01-21 21:07:59 +02:00
int rc ;
2002-06-13 17:28:25 -07:00
char str_data [ 50 ] ;
char tiny_data ;
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
MYSQL_BIND bind [ 2 ] ;
2004-06-04 18:38:18 +04:00
ulong length ;
2002-06-13 17:28:25 -07:00
2002-11-22 18:30:55 -08:00
myheader ( " test_insert " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prep_insert " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prep_insert(col1 tinyint, \
2002-06-13 17:28:25 -07:00
col2 varchar ( 50 ) ) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* insert by prepare */
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql ,
" INSERT INTO test_prep_insert VALUES(?, ?) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2002-06-13 17:28:25 -07:00
/* tinyint */
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & tiny_data ;
2003-01-21 21:07:59 +02:00
2002-06-13 17:28:25 -07:00
/* string */
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 1 ] . buffer = str_data ;
bind [ 1 ] . buffer_length = sizeof ( str_data ) ; ;
2003-02-04 18:54:14 -08:00
bind [ 1 ] . length = & length ;
2002-11-22 18:30:55 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
/* now, execute the prepared statement to insert 10 records.. */
2004-06-04 18:38:18 +04:00
for ( tiny_data = 0 ; tiny_data < 3 ; tiny_data + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
length = my_sprintf ( str_data , ( str_data , " MySQL%d " , tiny_data ) ) ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2002-06-13 17:28:25 -07:00
}
mysql_stmt_close ( stmt ) ;
/* now fetch the results ..*/
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* test the results now, only one row should exists */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_prep_insert " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
/* get the result */
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2003-11-19 17:31:57 +02:00
assert ( ( int ) tiny_data = = my_process_result_set ( result ) ) ;
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test simple prepare-resultset info */
2003-01-03 23:38:47 -08:00
static void test_prepare_resultset ( )
2002-11-22 18:30:55 -08:00
{
2002-06-13 17:28:25 -07:00
MYSQL_STMT * stmt ;
2003-01-03 23:38:47 -08:00
int rc ;
2002-06-13 17:28:25 -07:00
MYSQL_RES * result ;
2002-11-22 18:30:55 -08:00
myheader ( " test_prepare_resultset " ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prepare_resultset " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prepare_resultset(id int, \
name varchar ( 50 ) , extra double ) " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_prepare_resultset " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
my_print_result_metadata ( result ) ;
2004-03-05 16:55:09 +03:00
mysql_free_result ( result ) ;
2002-06-13 17:28:25 -07:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test field flags (verify .NET provider) */
2002-06-13 17:28:25 -07:00
2003-01-03 23:38:47 -08:00
static void test_field_flags ( )
2002-06-13 17:28:25 -07:00
{
int rc ;
MYSQL_RES * result ;
MYSQL_FIELD * field ;
unsigned int i ;
2002-11-22 18:30:55 -08:00
myheader ( " test_field_flags " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_field_flags " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04: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-22 18:30:55 -08:00
myquery ( rc ) ;
2002-06-13 17:28:25 -07:00
2003-01-21 21:07:59 +02:00
/* with table name included with TRUE column name */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_field_flags " ) ;
2002-11-22 18:30:55 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_use_result ( mysql ) ;
2002-11-22 18:30:55 -08:00
mytest ( result ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
mysql_field_seek ( result , 0 ) ;
fputc ( ' \n ' , stdout ) ;
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < mysql_num_fields ( result ) ; i + + )
2002-06-13 17:28:25 -07:00
{
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
fprintf ( stdout , " \n field:%d " , i ) ;
2003-01-21 21:07:59 +02:00
if ( field - > flags & NOT_NULL_FLAG )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n NOT_NULL_FLAG " ) ;
2003-01-21 21:07:59 +02:00
if ( field - > flags & PRI_KEY_FLAG )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n PRI_KEY_FLAG " ) ;
2003-01-21 21:07:59 +02:00
if ( field - > flags & UNIQUE_KEY_FLAG )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n UNIQUE_KEY_FLAG " ) ;
2003-01-21 21:07:59 +02:00
if ( field - > flags & MULTIPLE_KEY_FLAG )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n MULTIPLE_KEY_FLAG " ) ;
2003-01-21 21:07:59 +02:00
if ( field - > flags & AUTO_INCREMENT_FLAG )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n AUTO_INCREMENT_FLAG " ) ;
2003-01-03 23:38:47 -08:00
}
mysql_free_result ( result ) ;
}
2002-06-13 17:28:25 -07:00
2004-06-04 18:38:18 +04:00
/* Test mysql_stmt_close for open stmts */
2003-01-03 23:38:47 -08:00
static void test_stmt_close ( )
{
MYSQL * lmysql ;
MYSQL_STMT * stmt1 , * stmt2 , * stmt3 , * stmt_x ;
2003-01-21 21:07:59 +02:00
MYSQL_BIND bind [ 1 ] ;
2003-01-03 23:38:47 -08:00
MYSQL_RES * result ;
unsigned int count ;
int rc ;
2004-06-04 18:38:18 +04:00
myheader ( " test_stmt_close " ) ;
2003-01-03 23:38:47 -08:00
2003-01-27 10:54:45 -08:00
fprintf ( stdout , " \n Establishing a test connection ... " ) ;
2004-06-04 18:38:18 +04:00
if ( ! ( lmysql = mysql_init ( NULL ) ) )
{
2003-07-21 00:13:22 -07:00
myerror ( " mysql_init() failed " ) ;
2003-01-03 23:38:47 -08:00
exit ( 0 ) ;
2002-06-13 17:28:25 -07:00
}
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_real_connect ( lmysql , opt_host , opt_user ,
opt_password , current_db , opt_port ,
opt_unix_socket , 0 ) ) )
2003-01-03 23:38:47 -08:00
{
myerror ( " connection failed " ) ;
exit ( 0 ) ;
2004-06-04 18:38:18 +04:00
}
fprintf ( stdout , " OK " ) ;
2003-01-03 23:38:47 -08:00
/* set AUTOCOMMIT to ON*/
2003-01-21 21:07:59 +02:00
mysql_autocommit ( lmysql , TRUE ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( lmysql , " DROP TABLE IF EXISTS test_stmt_close " ) ;
2003-01-27 10:54:45 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( lmysql , " CREATE TABLE test_stmt_close(id int) " ) ;
2003-01-27 10:54:45 -08:00
myquery ( rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
strmov ( query , " DO \" nothing \" " ) ;
2004-02-11 12:32:47 +01:00
stmt1 = mysql_simple_prepare ( lmysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt1 ) ;
2004-06-04 18:38:18 +04:00
2003-01-27 10:54:45 -08:00
verify_param_count ( stmt1 , 0 ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_stmt_close(id) VALUES(?) " ) ;
2004-02-11 12:32:47 +01:00
stmt_x = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_x ) ;
2003-01-27 10:54:45 -08:00
verify_param_count ( stmt_x , 1 ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " UPDATE test_stmt_close SET id= ? WHERE id= ? " ) ;
2004-02-11 12:32:47 +01:00
stmt3 = mysql_simple_prepare ( lmysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt3 ) ;
2004-06-04 18:38:18 +04:00
2003-01-27 10:54:45 -08:00
verify_param_count ( stmt3 , 2 ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT * FROM test_stmt_close WHERE id= ? " ) ;
2004-02-11 12:32:47 +01:00
stmt2 = mysql_simple_prepare ( lmysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt2 ) ;
2003-01-27 10:54:45 -08:00
verify_param_count ( stmt2 , 1 ) ;
2003-01-03 23:38:47 -08:00
rc = mysql_stmt_close ( stmt1 ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n mysql_close_stmt(1) returned: %d " , rc ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = 0 ) ;
2004-06-04 18:38:18 +04:00
2004-03-05 16:55:09 +03:00
/*
Originally we were going to close all statements automatically in
mysql_close ( ) . This proved to not work well - users weren ' t able to
close statements by hand once mysql_close ( ) had been called .
Now mysql_close ( ) doesn ' t free any statements , so this test doesn ' t
2004-06-04 18:38:18 +04:00
serve its original designation any more .
2004-03-05 16:55:09 +03:00
Here we free stmt2 and stmt3 by hande to avoid memory leaks .
*/
mysql_stmt_close ( stmt2 ) ;
mysql_stmt_close ( stmt3 ) ;
mysql_close ( lmysql ) ;
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & count ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2003-01-03 23:38:47 -08:00
count = 100 ;
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt_x , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_x , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_x ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_x , rc ) ;
2003-01-03 23:38:47 -08:00
2003-02-04 18:54:14 -08:00
verify_st_affected_rows ( stmt_x , 1 ) ;
2003-01-03 23:38:47 -08:00
rc = mysql_stmt_close ( stmt_x ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n mysql_close_stmt(x) returned: %d " , rc ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = 0 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT id FROM test_stmt_close " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-01-03 23:38:47 -08:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2003-01-03 23:38:47 -08:00
mysql_free_result ( result ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple set-variable prepare */
2003-01-03 23:38:47 -08:00
static void test_set_variable ( )
{
2003-01-30 00:41:14 -08:00
MYSQL_STMT * stmt , * stmt1 ;
int rc ;
int set_count , def_count , get_count ;
ulong length ;
char var [ NAME_LEN + 1 ] ;
MYSQL_BIND set_bind [ 1 ] , get_bind [ 2 ] ;
2003-01-03 23:38:47 -08:00
myheader ( " test_set_variable " ) ;
2003-01-30 00:41:14 -08:00
mysql_autocommit ( mysql , TRUE ) ;
2004-06-04 18:38:18 +04:00
stmt1 = mysql_simple_prepare ( mysql , " show variables like 'max_error_count' " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt1 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) get_bind , sizeof ( get_bind ) ) ;
2003-01-30 00:41:14 -08:00
get_bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
get_bind [ 0 ] . buffer = ( void * ) var ;
2003-01-30 00:41:14 -08:00
get_bind [ 0 ] . length = & length ;
get_bind [ 0 ] . buffer_length = ( int ) NAME_LEN ;
length = NAME_LEN ;
2003-01-03 23:38:47 -08:00
2003-01-30 00:41:14 -08:00
get_bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
get_bind [ 1 ] . buffer = ( void * ) & get_count ;
2003-01-30 00:41:14 -08:00
get_bind [ 1 ] . is_null = 0 ;
get_bind [ 1 ] . length = 0 ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt1 , get_bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-30 00:41:14 -08:00
fprintf ( stdout , " \n max_error_count(default): %d " , get_count ) ;
def_count = get_count ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
assert ( strcmp ( var , " max_error_count " ) = = 0 ) ;
rc = mysql_stmt_fetch ( stmt1 ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " set max_error_count= ? " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-30 00:41:14 -08:00
2004-06-04 18:38:18 +04:00
bzero ( ( char * ) set_bind , sizeof ( set_bind ) ) ;
2003-01-30 00:41:14 -08:00
set_bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
set_bind [ 0 ] . buffer = ( void * ) & set_count ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , set_bind ) ;
check_execute ( stmt , rc ) ;
2003-01-30 00:41:14 -08:00
set_count = 31 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-30 00:41:14 -08:00
mysql_commit ( mysql ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-30 00:41:14 -08:00
fprintf ( stdout , " \n max_error_count : %d " , get_count ) ;
2003-11-19 17:31:57 +02:00
assert ( get_count = = set_count ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt1 ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-06-04 18:38:18 +04:00
2003-01-30 00:41:14 -08:00
/* restore back to default */
set_count = def_count ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2003-01-03 23:38:47 -08:00
2003-01-30 00:41:14 -08:00
fprintf ( stdout , " \n max_error_count(default): %d " , get_count ) ;
2003-11-19 17:31:57 +02:00
assert ( get_count = = set_count ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt1 ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
mysql_stmt_close ( stmt ) ;
2003-01-30 00:41:14 -08:00
mysql_stmt_close ( stmt1 ) ;
2003-01-03 23:38:47 -08:00
}
2003-01-21 21:07:59 +02:00
2003-01-03 23:38:47 -08:00
# if NOT_USED
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
/* Insert meta info .. */
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
static void test_insert_meta ( )
{
MYSQL_STMT * stmt ;
int rc ;
MYSQL_RES * result ;
MYSQL_FIELD * field ;
myheader ( " test_insert_meta " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prep_insert " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prep_insert(col1 tinyint, \
2003-01-03 23:38:47 -08:00
col2 varchar ( 50 ) , col3 varchar ( 30 ) ) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_prep_insert VALUES(10, 'venu1', 'test') " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2003-01-03 23:38:47 -08:00
result = mysql_param_result ( stmt ) ;
mytest_r ( result ) ;
2003-01-28 09:24:27 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_prep_insert VALUES(?, 'venu', ?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2003-01-03 23:38:47 -08:00
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 " ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > name , " col1 " ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
field = mysql_fetch_field ( result ) ;
mytest ( field ) ;
fprintf ( stdout , " \n obtained: `%s` (expected: `%s`) " , field - > name , " col3 " ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > name , " col3 " ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
field = mysql_fetch_field ( result ) ;
mytest_r ( field ) ;
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
/* Update meta info .. */
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
static void test_update_meta ( )
{
MYSQL_STMT * stmt ;
int rc ;
MYSQL_RES * result ;
MYSQL_FIELD * field ;
myheader ( " test_update_meta " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prep_update " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prep_update(col1 tinyint, \
2003-01-03 23:38:47 -08:00
col2 varchar ( 50 ) , col3 varchar ( 30 ) ) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " UPDATE test_prep_update SET col1=10, col2='venu1' WHERE col3='test' " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2003-01-03 23:38:47 -08:00
result = mysql_param_result ( stmt ) ;
mytest_r ( result ) ;
2003-01-28 09:24:27 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " UPDATE test_prep_update SET col1=?, col2='venu' WHERE col3=? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2003-01-03 23:38:47 -08:00
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 " ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > name , " col1 " ) = = 0 ) ;
assert ( strcmp ( field - > table , " test_prep_update " ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
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 " ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > name , " col3 " ) = = 0 ) ;
assert ( strcmp ( field - > table , " test_prep_update " ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
field = mysql_fetch_field ( result ) ;
mytest_r ( field ) ;
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
/* Select meta info .. */
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
static void test_select_meta ( )
{
MYSQL_STMT * stmt ;
int rc ;
MYSQL_RES * result ;
MYSQL_FIELD * field ;
myheader ( " test_select_meta " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prep_select " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prep_select(col1 tinyint, \
2003-01-03 23:38:47 -08:00
col2 varchar ( 50 ) , col3 varchar ( 30 ) ) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT * FROM test_prep_select WHERE col1=10 " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 0 ) ;
2003-01-03 23:38:47 -08:00
result = mysql_param_result ( stmt ) ;
mytest_r ( result ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " SELECT col1, col3 from test_prep_select WHERE col1=? AND col3='test' AND col2= ? " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 2 ) ;
2003-01-03 23:38:47 -08:00
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 " ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > name , " col1 " ) = = 0 ) ;
assert ( strcmp ( field - > table , " test_prep_select " ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
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 " ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > name , " col2 " ) = = 0 ) ;
assert ( strcmp ( field - > table , " test_prep_select " ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
field = mysql_fetch_field ( result ) ;
mytest_r ( field ) ;
2003-01-28 09:24:27 -08:00
2003-01-03 23:38:47 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
}
# endif
2003-01-21 21:07:59 +02:00
2003-01-03 23:38:47 -08:00
/* Test FUNCTION field info / DATE_FORMAT() table_name . */
2004-06-04 18:38:18 +04:00
2003-01-03 23:38:47 -08:00
static void test_func_fields ( )
{
int rc ;
MYSQL_RES * result ;
MYSQL_FIELD * field ;
myheader ( " test_func_fields " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_autocommit ( mysql , TRUE ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_dateformat " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_dateformat(id int, \
2003-01-03 23:38:47 -08:00
ts timestamp ) " );
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_dateformat(id) values(10) " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT ts FROM test_dateformat " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-01-03 23:38:47 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-03 23:38:47 -08:00
mytest ( field ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n table name: `%s` (expected: `%s`) " , field - > table ,
2003-01-03 23:38:47 -08:00
" test_dateformat " ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( field - > table , " test_dateformat " ) = = 0 ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-03 23:38:47 -08:00
mytest_r ( field ) ; /* no more fields */
mysql_free_result ( result ) ;
/* DATE_FORMAT */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT DATE_FORMAT(ts, '%Y') AS 'venu' FROM test_dateformat " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-01-03 23:38:47 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-03 23:38:47 -08:00
mytest ( field ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n table name: `%s` (expected: `%s`) " , field - > table , " " ) ;
2003-11-19 17:31:57 +02:00
assert ( field - > table [ 0 ] = = ' \0 ' ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-03 23:38:47 -08:00
mytest_r ( field ) ; /* no more fields */
mysql_free_result ( result ) ;
/* FIELD ALIAS TEST */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT DATE_FORMAT(ts, '%Y') AS 'YEAR' FROM test_dateformat " ) ;
2003-01-03 23:38:47 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-01-03 23:38:47 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-03 23:38:47 -08:00
mytest ( field ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n field name: `%s` (expected: `%s`) " , field - > name , " YEAR " ) ;
fprintf ( stdout , " \n field org name: `%s` (expected: `%s`) " , field - > org_name , " " ) ;
assert ( strcmp ( field - > name , " YEAR " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( field - > org_name [ 0 ] = = ' \0 ' ) ;
2003-01-03 23:38:47 -08:00
2004-06-04 18:38:18 +04:00
field = mysql_fetch_field ( result ) ;
2003-01-03 23:38:47 -08:00
mytest_r ( field ) ; /* no more fields */
2002-06-13 17:28:25 -07:00
mysql_free_result ( result ) ;
}
2003-01-21 21:07:59 +02:00
2003-01-07 18:53:46 -08:00
/* Multiple stmts .. */
2004-06-04 18:38:18 +04:00
2003-01-07 18:53:46 -08:00
static void test_multi_stmt ( )
{
2003-01-30 00:41:14 -08:00
MYSQL_STMT * stmt , * stmt1 , * stmt2 ;
2004-06-22 23:07:08 +04:00
int rc ;
ulong id ;
2003-01-30 00:41:14 -08:00
char name [ 50 ] ;
2003-01-18 12:58:19 -08:00
MYSQL_BIND bind [ 2 ] ;
2003-01-21 21:07:59 +02:00
ulong length [ 2 ] ;
my_bool is_null [ 2 ] ;
2003-01-18 12:58:19 -08:00
myheader ( " test_multi_stmt " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_multi_table " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_multi_table(id int, name char(20)) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_multi_table values(10, 'mysql') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_multi_table "
" WHERE id= ? " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
stmt2 = mysql_simple_prepare ( mysql , " UPDATE test_multi_table "
" SET name='updated' WHERE id=10 " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt2 ) ;
2003-01-30 00:41:14 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-01-18 12:58:19 -08:00
2004-06-22 23:07:08 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & id ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . is_null = & is_null [ 0 ] ;
2003-01-30 00:41:14 -08:00
bind [ 0 ] . length = & length [ 0 ] ;
is_null [ 0 ] = 0 ;
length [ 0 ] = 0 ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) name ;
2003-10-25 15:53:41 +02:00
bind [ 1 ] . buffer_length = sizeof ( name ) ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . length = & length [ 1 ] ;
2003-01-30 00:41:14 -08:00
bind [ 1 ] . is_null = & is_null [ 1 ] ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
id = 10 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
id = 999 ;
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-22 23:07:08 +04:00
fprintf ( stdout , " \n int_data: %lu(%lu) " , id , length [ 0 ] ) ;
2003-01-30 00:41:14 -08:00
fprintf ( stdout , " \n str_data: %s(%lu) " , name , length [ 1 ] ) ;
2003-11-19 17:31:57 +02:00
assert ( id = = 10 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( name , " mysql " ) = = 0 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
/* alter the table schema now */
2004-06-04 18:38:18 +04:00
stmt1 = mysql_simple_prepare ( mysql , " DELETE FROM test_multi_table "
" WHERE id= ? AND name=? " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt1 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt1 , 2 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt1 , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt2 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt2 , rc ) ;
2003-01-30 00:41:14 -08:00
2003-02-04 18:54:14 -08:00
verify_st_affected_rows ( stmt2 , 1 ) ;
2003-01-30 00:41:14 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-30 00:41:14 -08:00
2004-06-22 23:07:08 +04:00
fprintf ( stdout , " \n int_data: %lu(%lu) " , id , length [ 0 ] ) ;
2003-01-30 00:41:14 -08:00
fprintf ( stdout , " \n str_data: %s(%lu) " , name , length [ 1 ] ) ;
2003-11-19 17:31:57 +02:00
assert ( id = = 10 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( name , " updated " ) = = 0 ) ;
2003-01-30 00:41:14 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt1 , rc ) ;
2003-01-18 12:58:19 -08:00
2003-02-04 18:54:14 -08:00
verify_st_affected_rows ( stmt1 , 1 ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt1 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
2004-02-11 12:32:47 +01:00
assert ( 0 = = my_stmt_result ( " SELECT * FROM test_multi_table " ) ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
2003-01-30 00:41:14 -08:00
mysql_stmt_close ( stmt2 ) ;
2003-01-07 18:53:46 -08:00
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple sample - manual */
2003-01-09 18:32:08 -08:00
static void test_manual_sample ( )
{
unsigned int param_count ;
MYSQL_STMT * stmt ;
short small_data ;
2003-02-04 18:54:14 -08:00
int int_data ;
char str_data [ 50 ] ;
2003-01-09 18:32:08 -08:00
ulonglong affected_rows ;
2003-01-21 21:07:59 +02:00
MYSQL_BIND bind [ 3 ] ;
2003-02-04 18:54:14 -08:00
my_bool is_null ;
2003-01-09 18:32:08 -08:00
myheader ( " test_manual_sample " ) ;
/*
2004-06-04 18:38:18 +04:00
Sample which is incorporated directly in the manual under Prepared
statements section ( Example from mysql_stmt_execute ( )
2003-01-09 18:32:08 -08:00
*/
mysql_autocommit ( mysql , 1 ) ;
2004-06-04 18:38:18 +04:00
if ( mysql_query ( mysql , " DROP TABLE IF EXISTS test_table " ) )
2003-01-09 18:32:08 -08:00
{
fprintf ( stderr , " \n drop table failed " ) ;
fprintf ( stderr , " \n %s " , mysql_error ( mysql ) ) ;
exit ( 0 ) ;
}
2004-06-04 18:38:18 +04:00
if ( mysql_query ( mysql , " CREATE TABLE test_table(col1 int, col2 varchar(50), \
col3 smallint , \
2003-01-09 18:32:08 -08:00
col4 timestamp ( 14 ) ) " ))
{
fprintf ( stderr , " \n create table failed " ) ;
fprintf ( stderr , " \n %s " , mysql_error ( mysql ) ) ;
exit ( 0 ) ;
}
2004-06-04 18:38:18 +04:00
2003-01-09 18:32:08 -08:00
/* Prepare a insert query with 3 parameters */
2004-06-04 18:38:18 +04:00
strmov ( query , " INSERT INTO test_table(col1, col2, col3) values(?, ?, ?) " ) ;
if ( ! ( stmt = mysql_simple_prepare ( mysql , query ) ) )
2003-01-09 18:32:08 -08:00
{
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 */
2004-06-04 18:38:18 +04:00
param_count = mysql_stmt_param_count ( stmt ) ;
2003-01-09 18:32:08 -08:00
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 */
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-01-09 18:32:08 -08:00
/* INTEGER PART */
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & int_data ;
2003-01-21 21:07:59 +02:00
2003-01-09 18:32:08 -08:00
/* STRING PART */
bind [ 1 ] . buffer_type = MYSQL_TYPE_VAR_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) str_data ;
2003-01-09 18:32:08 -08:00
bind [ 1 ] . buffer_length = sizeof ( str_data ) ;
2004-06-04 18:38:18 +04:00
2003-01-09 18:32:08 -08:00
/* SMALLINT PART */
bind [ 2 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & small_data ;
2003-02-04 18:54:14 -08:00
bind [ 2 ] . is_null = & is_null ;
is_null = 0 ;
2003-01-09 18:32:08 -08:00
/* Bind the buffers */
2004-06-04 18:38:18 +04:00
if ( mysql_stmt_bind_param ( stmt , bind ) )
2003-01-09 18:32:08 -08:00
{
fprintf ( stderr , " \n param bind failed " ) ;
fprintf ( stderr , " \n %s " , mysql_stmt_error ( stmt ) ) ;
exit ( 0 ) ;
}
/* Specify the data */
int_data = 10 ; /* integer */
2004-06-04 18:38:18 +04:00
strmov ( str_data , " MySQL " ) ; /* string */
2003-01-09 18:32:08 -08:00
/* INSERT SMALLINT data as NULL */
2003-02-04 18:54:14 -08:00
is_null = 1 ;
2003-01-09 18:32:08 -08:00
/* Execute the insert statement - 1*/
2004-06-04 18:38:18 +04:00
if ( mysql_stmt_execute ( stmt ) )
2003-01-09 18:32:08 -08:00
{
fprintf ( stderr , " \n execute 1 failed " ) ;
fprintf ( stderr , " \n %s " , mysql_stmt_error ( stmt ) ) ;
exit ( 0 ) ;
}
2004-06-04 18:38:18 +04:00
/* Get the total rows affected */
2003-01-09 18:32:08 -08:00
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 */
2004-06-04 18:38:18 +04:00
int_data = 1000 ;
strmov ( str_data , " The most popular open source database " ) ;
2003-01-09 18:32:08 -08:00
small_data = 1000 ; /* smallint */
2003-02-04 18:54:14 -08:00
is_null = 0 ; /* reset */
2003-01-09 18:32:08 -08:00
/* Execute the insert statement - 2*/
2004-06-04 18:38:18 +04:00
if ( mysql_stmt_execute ( stmt ) )
2003-01-09 18:32:08 -08:00
{
fprintf ( stderr , " \n execute 2 failed " ) ;
fprintf ( stderr , " \n %s " , mysql_stmt_error ( stmt ) ) ;
exit ( 0 ) ;
}
2004-06-04 18:38:18 +04:00
/* Get the total rows affected */
2003-01-09 18:32:08 -08:00
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 ) ;
}
2004-02-11 12:32:47 +01:00
assert ( 2 = = my_stmt_result ( " SELECT * FROM test_table " ) ) ;
2003-01-09 18:32:08 -08:00
/* DROP THE TABLE */
2004-06-04 18:38:18 +04:00
if ( mysql_query ( mysql , " DROP TABLE test_table " ) )
2003-01-09 18:32:08 -08:00
{
fprintf ( stderr , " \n drop table failed " ) ;
fprintf ( stderr , " \n %s " , mysql_error ( mysql ) ) ;
exit ( 0 ) ;
}
fprintf ( stdout , " Success !!! " ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test alter table scenario in the middle of prepare */
2003-01-18 12:58:19 -08:00
static void test_prepare_alter ( )
{
MYSQL_STMT * stmt ;
int rc , id ;
long length ;
MYSQL_BIND bind [ 1 ] ;
2003-01-21 21:07:59 +02:00
my_bool is_null ;
2003-01-18 12:58:19 -08:00
myheader ( " test_prepare_alter " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_prep_alter " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_prep_alter(id int, name char(20)) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_prep_alter values(10, 'venu'), (20, 'mysql') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " INSERT INTO test_prep_alter VALUES(?, 'monty') " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-01-18 12:58:19 -08:00
2003-10-25 15:53:41 +02:00
is_null = 0 ;
2003-01-18 12:58:19 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & id ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . is_null = & is_null ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
id = 30 ;
length = 0 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
if ( thread_query ( ( char * ) " ALTER TABLE test_prep_alter change id id_new varchar(20) " ) )
exit ( 0 ) ;
2004-06-04 18:38:18 +04:00
is_null = 1 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-02-11 12:32:47 +01:00
assert ( 4 = = my_stmt_result ( " SELECT * FROM test_prep_alter " ) ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test the support of multi-statement executions */
2003-11-19 17:31:57 +02:00
static void test_multi_statements ( )
2003-01-18 12:58:19 -08:00
{
2003-11-19 17:31:57 +02:00
MYSQL * mysql_local ;
2003-01-18 12:58:19 -08:00
MYSQL_RES * result ;
int rc ;
2004-06-04 18:38:18 +04:00
const char * query = " \
2003-11-19 17:31:57 +02:00
DROP TABLE IF EXISTS test_multi_tab ; \
2004-06-04 18:38:18 +04:00
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 ' ) ; \
2003-11-19 17:31:57 +02:00
SELECT * FROM test_multi_tab ; \
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 ; \
DROP TABLE test_multi_tab ; \
select 1 ; \
DROP TABLE IF EXISTS test_multi_tab " ;
uint count , exp_value ;
uint rows [ ] = { 0 , 0 , 2 , 1 , 3 , 2 , 2 , 1 , 1 , 0 , 0 , 1 , 0 } ;
myheader ( " test_multi_statements " ) ;
2003-01-18 12:58:19 -08:00
2003-11-19 17:31:57 +02:00
/*
First test that we get an error for multi statements
( Becasue default connection is not opened with CLIENT_MULTI_STATEMENTS )
*/
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , query ) ; /* syntax error */
2003-01-18 12:58:19 -08:00
myquery_r ( rc ) ;
2003-11-19 17:31:57 +02:00
assert ( - 1 = = mysql_next_result ( mysql ) ) ;
assert ( 0 = = mysql_more_results ( mysql ) ) ;
2003-01-30 14:33:49 -08:00
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_local = mysql_init ( NULL ) ) )
{
fprintf ( stdout , " \n mysql_init() failed " ) ;
2003-01-18 12:58:19 -08:00
exit ( 1 ) ;
}
2003-11-19 17:31:57 +02:00
/* Create connection that supprot multi statements */
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_real_connect ( mysql_local , opt_host , opt_user ,
opt_password , current_db , opt_port ,
opt_unix_socket , CLIENT_MULTI_STATEMENTS ) ) )
2003-01-18 12:58:19 -08:00
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n connection failed(%s) " , mysql_error ( mysql_local ) ) ;
2003-01-18 12:58:19 -08:00
exit ( 1 ) ;
2003-11-19 17:31:57 +02:00
}
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql_local , query ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
for ( count = 0 ; count < array_elements ( rows ) ; count + + )
2003-01-18 12:58:19 -08:00
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n Query %d: " , count ) ;
2003-11-19 17:31:57 +02:00
if ( ( result = mysql_store_result ( mysql_local ) ) )
2004-03-05 16:55:09 +03:00
{
2003-11-19 17:31:57 +02:00
my_process_result_set ( result ) ;
2004-03-05 16:55:09 +03:00
mysql_free_result ( result ) ;
}
2003-11-19 17:31:57 +02:00
else
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " OK, %lld row(s) affected, %d warning(s) \n " ,
mysql_affected_rows ( mysql_local ) ,
mysql_warning_count ( mysql_local ) ) ;
2003-11-19 17:31:57 +02:00
exp_value = ( uint ) mysql_affected_rows ( mysql_local ) ;
if ( rows [ count ] ! = exp_value )
2003-01-31 00:35:06 -08:00
{
2003-11-19 17:31:57 +02:00
fprintf ( stdout , " row %d had affected rows: %d, should be %d \n " ,
2004-06-04 18:38:18 +04:00
count , exp_value , rows [ count ] ) ;
2003-11-19 17:31:57 +02:00
exit ( 1 ) ;
}
if ( count ! = array_elements ( rows ) - 1 )
{
if ( ! ( rc = mysql_more_results ( mysql_local ) ) )
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout ,
" mysql_more_result returned wrong value: %d for row %d \n " ,
rc , count ) ;
exit ( 1 ) ;
2003-11-19 17:31:57 +02:00
}
if ( ( rc = mysql_next_result ( mysql_local ) ) )
{
2004-06-04 18:38:18 +04:00
exp_value = mysql_errno ( mysql_local ) ;
2003-11-19 17:31:57 +02:00
2004-06-04 18:38:18 +04:00
exit ( 1 ) ;
2003-11-19 17:31:57 +02:00
}
2003-01-31 00:35:06 -08:00
}
2003-01-18 12:58:19 -08:00
else
2003-01-31 00:35:06 -08:00
{
2003-11-19 17:31:57 +02:00
assert ( mysql_more_results ( mysql_local ) = = 0 ) ;
assert ( mysql_next_result ( mysql_local ) = = - 1 ) ;
2003-01-31 00:35:06 -08:00
}
2003-01-18 12:58:19 -08:00
}
2003-11-19 17:31:57 +02:00
/* check that errors abort multi statements */
rc = mysql_query ( mysql_local , " select 1+1+a;select 1+1 " ) ;
myquery_r ( rc ) ;
assert ( mysql_more_results ( mysql_local ) = = 0 ) ;
assert ( mysql_next_result ( mysql_local ) = = - 1 ) ;
rc = mysql_query ( mysql_local , " select 1+1;select 1+1+a;select 1 " ) ;
myquery ( rc ) ;
result = mysql_store_result ( mysql_local ) ;
mytest ( result ) ;
mysql_free_result ( result ) ;
assert ( mysql_more_results ( mysql_local ) = = 1 ) ;
assert ( mysql_next_result ( mysql_local ) > 0 ) ;
/*
Ensure that we can now do a simple query ( this checks that the server is
not trying to send us the results for the last ' select 1 '
*/
rc = mysql_query ( mysql_local , " select 1+1+1 " ) ;
myquery ( rc ) ;
result = mysql_store_result ( mysql_local ) ;
mytest ( result ) ;
my_process_result_set ( result ) ;
mysql_free_result ( result ) ;
mysql_close ( mysql_local ) ;
2003-01-18 12:58:19 -08:00
}
2004-06-04 18:38:18 +04:00
/*
Check that Prepared statement cannot contain several
SQL statements
*/
2004-04-27 03:44:41 +04:00
static void test_prepare_multi_statements ( )
{
MYSQL * mysql_local ;
MYSQL_STMT * stmt ;
myheader ( " test_prepare_multi_statements " ) ;
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_local = mysql_init ( NULL ) ) )
{
fprintf ( stdout , " \n mysql_init() failed " ) ;
2004-04-27 03:44:41 +04:00
exit ( 1 ) ;
}
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_real_connect ( mysql_local , opt_host , opt_user ,
2004-04-27 03:44:41 +04:00
opt_password , current_db , opt_port ,
opt_unix_socket , CLIENT_MULTI_STATEMENTS ) ) )
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n connection failed(%s) " , mysql_error ( mysql_local ) ) ;
2004-04-27 03:44:41 +04:00
exit ( 1 ) ;
}
strmov ( query , " select 1; select 'another value' " ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql_local , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2004-04-27 03:44:41 +04:00
mysql_close ( mysql_local ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple bind store result */
2003-01-18 12:58:19 -08:00
static void test_store_result ( )
{
MYSQL_STMT * stmt ;
int rc ;
2003-01-21 21:07:59 +02:00
long nData ;
2003-01-18 12:58:19 -08:00
char szData [ 100 ] ;
MYSQL_BIND bind [ 2 ] ;
2004-06-04 18:38:18 +04:00
ulong length , length1 ;
2003-01-21 21:07:59 +02:00
my_bool is_null [ 2 ] ;
2003-01-18 12:58:19 -08:00
myheader ( " test_store_result " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_store_result " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_store_result(col1 int , col2 varchar(50)) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_store_result VALUES(10, 'venu'), (20, 'mysql') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_store_result(col2) VALUES('monty') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
/* fetch */
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & nData ; /* integer data */
2003-01-21 21:07:59 +02:00
bind [ 0 ] . length = & length ;
2003-01-22 01:30:13 -08:00
bind [ 0 ] . is_null = & is_null [ 0 ] ;
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
length = 0 ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 1 ] . buffer = szData ; /* string data */
bind [ 1 ] . buffer_length = sizeof ( szData ) ;
2003-01-21 21:07:59 +02:00
bind [ 1 ] . length = & length1 ;
bind [ 1 ] . is_null = & is_null [ 1 ] ;
length1 = 0 ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_store_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %ld, %s(%lu) " , nData , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 10 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " venu " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 4 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 2: %ld, %s(%lu) " , nData , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 20 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " mysql " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 5 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
length = 99 ;
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
if ( is_null [ 0 ] )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 3: NULL, %s(%lu) " , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( is_null [ 0 ] ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " monty " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 5 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %ld, %s(%lu) " , nData , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 10 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " venu " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 4 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 2: %ld, %s(%lu) " , nData , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 20 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " mysql " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 5 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
length = 99 ;
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-22 01:30:13 -08:00
if ( is_null [ 0 ] )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 3: NULL, %s(%lu) " , szData , length1 ) ;
2003-11-19 17:31:57 +02:00
assert ( is_null [ 0 ] ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( szData , " monty " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length1 = = 5 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple bind store result */
2003-01-18 12:58:19 -08:00
static void test_store_result1 ( )
{
MYSQL_STMT * stmt ;
int rc ;
myheader ( " test_store_result1 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_store_result " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_store_result(col1 int , col2 varchar(50)) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_store_result VALUES(10, 'venu'), (20, 'mysql') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_store_result(col2) VALUES('monty') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_store_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = 0 ;
while ( mysql_stmt_fetch ( stmt ) ! = MYSQL_NO_DATA )
2003-01-18 12:58:19 -08:00
rc + + ;
fprintf ( stdout , " \n total rows: %d " , rc ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = 3 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = 0 ;
while ( mysql_stmt_fetch ( stmt ) ! = MYSQL_NO_DATA )
2003-01-18 12:58:19 -08:00
rc + + ;
fprintf ( stdout , " \n total rows: %d " , rc ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = 3 ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Another test for bind and store result */
2003-01-18 12:58:19 -08:00
static void test_store_result2 ( )
{
MYSQL_STMT * stmt ;
int rc ;
int nData ;
2004-05-19 05:09:10 +03:00
ulong length ;
2003-01-18 12:58:19 -08:00
MYSQL_BIND bind [ 1 ] ;
myheader ( " test_store_result2 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_store_result " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_store_result(col1 int , col2 varchar(50)) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_store_result VALUES(10, 'venu'), (20, 'mysql') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_store_result(col2) VALUES('monty') " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & nData ; /* integer data */
2003-01-18 12:58:19 -08:00
bind [ 0 ] . length = & length ;
2003-01-21 21:07:59 +02:00
bind [ 0 ] . is_null = 0 ;
2003-01-18 12:58:19 -08:00
2003-01-21 21:07:59 +02:00
strmov ( ( char * ) query , " SELECT col1 FROM test_store_result where col1= ? " ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
nData = 10 ; length = 0 ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
nData = 0 ;
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %d " , nData ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 10 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
nData = 20 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
nData = 0 ;
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %d " , nData ) ;
2003-11-19 17:31:57 +02:00
assert ( nData = = 20 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
}
2003-01-21 21:07:59 +02:00
2004-06-04 18:38:18 +04:00
/* Test simple subselect prepare */
2003-01-18 12:58:19 -08:00
static void test_subselect ( )
{
2003-05-21 01:15:04 -07:00
2003-01-18 12:58:19 -08:00
MYSQL_STMT * stmt ;
2003-05-21 01:15:04 -07:00
int rc , id ;
2003-01-18 12:58:19 -08:00
MYSQL_BIND bind [ 1 ] ;
myheader ( " test_subselect " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_sub1 " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_sub2 " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_sub1(id int) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_sub2(id int, id1 int) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_sub1 values(2) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_sub2 VALUES(1, 7), (2, 7) " ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-18 12:58:19 -08:00
myquery ( rc ) ;
/* fetch */
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & id ;
2003-02-15 15:01:04 -08:00
bind [ 0 ] . length = 0 ;
2003-02-04 18:54:14 -08:00
bind [ 0 ] . is_null = 0 ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " INSERT INTO test_sub2(id) SELECT * FROM test_sub1 WHERE id= ? " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
id = 2 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
verify_st_affected_rows ( stmt , 1 ) ;
2004-06-04 18:38:18 +04:00
id = 9 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
verify_st_affected_rows ( stmt , 0 ) ;
mysql_stmt_close ( stmt ) ;
2004-02-11 12:32:47 +01:00
assert ( 3 = = my_stmt_result ( " SELECT * FROM test_sub2 " ) ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
strmov ( ( char * ) query , " SELECT ROW(1, 7) IN (select id, id1 from test_sub2 WHERE id1= ?) " ) ;
assert ( 1 = = my_stmt_result ( " SELECT ROW(1, 7) IN (select id, id1 from test_sub2 WHERE id1= 8) " ) ) ;
assert ( 1 = = my_stmt_result ( " SELECT ROW(1, 7) IN (select id, id1 from test_sub2 WHERE id1= 7) " ) ) ;
2003-02-04 18:54:14 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
id = 7 ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %d " , id ) ;
2003-11-19 17:31:57 +02:00
assert ( id = = 1 ) ;
2003-01-18 12:58:19 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-06-04 18:38:18 +04:00
2003-02-04 18:54:14 -08:00
id = 8 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-04 18:54:14 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-04 18:54:14 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %d " , id ) ;
2003-11-19 17:31:57 +02:00
assert ( id = = 0 ) ;
2003-02-04 18:54:14 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-18 12:58:19 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
2003-01-23 22:39:07 -08:00
/*
Generalized conversion routine to handle DATE , TIME and DATETIME
conversion using MYSQL_TIME structure
*/
2004-06-04 18:38:18 +04:00
2003-01-23 22:39:07 -08:00
static void test_bind_date_conv ( uint row_count )
2004-06-04 18:38:18 +04:00
{
2003-02-04 18:54:14 -08:00
MYSQL_STMT * stmt = 0 ;
2003-01-23 22:39:07 -08:00
uint rc , i , count = row_count ;
2004-06-04 18:38:18 +04:00
ulong length [ 4 ] ;
2003-01-23 22:39:07 -08:00
MYSQL_BIND bind [ 4 ] ;
2004-06-04 18:38:18 +04:00
my_bool is_null [ 4 ] = { 0 } ;
MYSQL_TIME tm [ 4 ] ;
2003-01-23 22:39:07 -08:00
ulong second_part ;
uint year , month , day , hour , minute , sec ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " INSERT INTO test_date VALUES(?, ?, ?, ?) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-23 22:39:07 -08:00
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 4 ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-01-23 22:39:07 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_TIMESTAMP ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_TIME ;
bind [ 2 ] . buffer_type = MYSQL_TYPE_DATETIME ;
bind [ 3 ] . buffer_type = MYSQL_TYPE_DATE ;
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
2004-06-04 18:38:18 +04:00
{
2004-06-25 17:04:33 +04:00
bind [ i ] . buffer = ( void * ) & tm [ i ] ;
2003-01-23 22:39:07 -08:00
bind [ i ] . is_null = & is_null [ i ] ;
bind [ i ] . length = & length [ i ] ;
bind [ i ] . buffer_length = 30 ;
2004-06-04 18:38:18 +04:00
length [ i ] = 20 ;
}
second_part = 0 ;
year = 2000 ;
month = 01 ;
day = 10 ;
hour = 11 ;
minute = 16 ;
sec = 20 ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-01-23 22:39:07 -08:00
for ( count = 0 ; count < row_count ; count + + )
2004-06-04 18:38:18 +04:00
{
2003-01-23 22:39:07 -08:00
for ( i = 0 ; i < ( int ) array_elements ( bind ) ; i + + )
{
2004-06-04 18:38:18 +04:00
tm [ i ] . neg = 0 ;
2003-01-23 22:39:07 -08:00
tm [ i ] . second_part = second_part + count ;
2004-05-25 02:03:49 +04:00
if ( bind [ i ] . buffer_type ! = MYSQL_TYPE_TIME )
{
tm [ i ] . year = year + count ;
tm [ i ] . month = month + count ;
tm [ i ] . day = day + count ;
}
else
tm [ i ] . year = tm [ i ] . month = tm [ i ] . day = 0 ;
if ( bind [ i ] . buffer_type ! = MYSQL_TYPE_DATE )
{
tm [ i ] . hour = hour + count ;
tm [ i ] . minute = minute + count ;
tm [ i ] . second = sec + count ;
}
else
2004-06-04 18:38:18 +04:00
tm [ i ] . hour = tm [ i ] . minute = tm [ i ] . second = 0 ;
}
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-23 22:39:07 -08:00
}
2004-06-04 18:38:18 +04:00
rc = mysql_commit ( mysql ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
mysql_stmt_close ( stmt ) ;
2004-02-11 12:32:47 +01:00
assert ( row_count = = my_stmt_result ( " SELECT * FROM test_date " ) ) ;
2003-01-23 22:39:07 -08:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_date " ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-23 22:39:07 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-23 22:39:07 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-23 22:39:07 -08:00
2004-06-04 18:38:18 +04:00
for ( count = 0 ; count < row_count ; count + + )
2003-01-23 22:39:07 -08:00
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-23 22:39:07 -08:00
fprintf ( stdout , " \n " ) ;
for ( i = 0 ; i < array_elements ( bind ) ; i + + )
2004-06-04 18:38:18 +04:00
{
2003-01-23 22:39:07 -08:00
fprintf ( stdout , " \n " ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " time[%d]: %02d-%02d-%02d %02d:%02d:%02d.%02lu " ,
i , tm [ i ] . year , tm [ i ] . month , tm [ i ] . day ,
2003-01-23 22:39:07 -08:00
tm [ i ] . hour , tm [ i ] . minute , tm [ i ] . second ,
2004-06-04 18:38:18 +04:00
tm [ i ] . second_part ) ;
2003-01-23 22:39:07 -08:00
2003-11-19 17:31:57 +02:00
assert ( tm [ i ] . year = = 0 | | tm [ i ] . year = = year + count ) ;
assert ( tm [ i ] . month = = 0 | | tm [ i ] . month = = month + count ) ;
assert ( tm [ i ] . day = = 0 | | tm [ i ] . day = = day + count ) ;
2003-01-23 22:39:07 -08:00
2003-11-19 17:31:57 +02:00
assert ( tm [ i ] . hour = = 0 | | tm [ i ] . hour = = hour + count ) ;
2004-06-04 18:38:18 +04:00
/*
2003-01-23 22:39:07 -08:00
minute causes problems from date < - > time , don ' t assert , instead
validate separatly in another routine
*/
2003-11-19 17:31:57 +02:00
/*assert(tm[i].minute == 0 || tm[i].minute == minute+count);
assert ( tm [ i ] . second = = 0 | | tm [ i ] . second = = sec + count ) ; */
2003-01-23 22:39:07 -08:00
2003-11-19 17:31:57 +02:00
assert ( tm [ i ] . second_part = = 0 | | tm [ i ] . second_part = = second_part + count ) ;
2003-01-23 22:39:07 -08:00
}
}
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-01-23 22:39:07 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test DATE, TIME, DATETIME and TS with MYSQL_TIME conversion */
2003-01-23 22:39:07 -08:00
static void test_date ( )
{
int rc ;
myheader ( " test_date " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_date " ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_date(c1 TIMESTAMP(14), \
c2 TIME , \
c3 DATETIME , \
2003-01-23 22:39:07 -08:00
c4 DATE ) " );
myquery ( rc ) ;
test_bind_date_conv ( 5 ) ;
}
2004-06-04 18:38:18 +04:00
/* Test all time types to DATE and DATE to all types */
2003-01-23 22:39:07 -08:00
static void test_date_date ( )
{
int rc ;
myheader ( " test_date_date " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_date " ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_date(c1 DATE, \
c2 DATE , \
c3 DATE , \
2003-01-23 22:39:07 -08:00
c4 DATE ) " );
myquery ( rc ) ;
test_bind_date_conv ( 3 ) ;
}
2004-06-04 18:38:18 +04:00
/* Test all time types to TIME and TIME to all types */
2003-01-23 22:39:07 -08:00
static void test_date_time ( )
{
int rc ;
myheader ( " test_date_time " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_date " ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_date(c1 TIME, \
c2 TIME , \
c3 TIME , \
2003-01-23 22:39:07 -08:00
c4 TIME ) " );
myquery ( rc ) ;
test_bind_date_conv ( 3 ) ;
}
2004-06-04 18:38:18 +04:00
/* Test all time types to TIMESTAMP and TIMESTAMP to all types */
2003-01-23 22:39:07 -08:00
static void test_date_ts ( )
{
int rc ;
myheader ( " test_date_ts " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_date " ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_date(c1 TIMESTAMP(10), \
c2 TIMESTAMP ( 14 ) , \
c3 TIMESTAMP , \
2003-01-23 22:39:07 -08:00
c4 TIMESTAMP ( 6 ) ) " ) ;
myquery ( rc ) ;
test_bind_date_conv ( 2 ) ;
}
2004-06-04 18:38:18 +04:00
/* Test all time types to DATETIME and DATETIME to all types */
2003-01-23 22:39:07 -08:00
static void test_date_dt ( )
{
2004-06-04 18:38:18 +04:00
int rc ;
2003-01-23 22:39:07 -08:00
myheader ( " test_date_dt " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_date " ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_date(c1 datetime, "
" c2 datetime, c3 datetime, c4 date) " ) ;
2003-01-23 22:39:07 -08:00
myquery ( rc ) ;
test_bind_date_conv ( 2 ) ;
}
2004-06-04 18:38:18 +04:00
/* Misc tests to keep pure coverage happy */
2003-01-24 03:17:26 -08:00
static void test_pure_coverage ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
int rc ;
ulong length ;
2004-06-04 18:38:18 +04:00
2003-01-24 03:17:26 -08:00
myheader ( " test_pure_coverage " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_pure " ) ;
2003-01-24 03:17:26 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_pure(c1 int, c2 varchar(20)) " ) ;
2003-01-24 03:17:26 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " insert into test_pure(c67788) values(10) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2004-06-04 18:38:18 +04:00
2004-02-10 16:58:20 +03:00
/* Query without params and result should allow to bind 0 arrays */
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " insert into test_pure(c2) values(10) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , ( MYSQL_BIND * ) 0 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-25 22:52:45 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , ( MYSQL_BIND * ) 0 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-01-25 22:52:45 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " insert into test_pure(c2) values(?) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-24 03:17:26 -08:00
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-01-24 03:17:26 -08:00
bind [ 0 ] . length = & length ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . buffer_length = 0 ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_GEOMETRY ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:24:06 +03:00
check_execute_r ( stmt , rc ) ; /* unsupported buffer type */
2004-06-04 18:38:18 +04:00
2003-01-24 03:17:26 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_pure " ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
2003-01-30 00:41:14 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_GEOMETRY ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:24:06 +03:00
check_execute_r ( stmt , rc ) ; /* unsupported buffer type */
2003-01-25 22:52:45 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute_r ( stmt , rc ) ; /* commands out of sync */
2003-01-24 03:17:26 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
mysql_query ( mysql , " DROP TABLE test_pure " ) ;
2003-01-24 03:17:26 -08:00
}
2004-06-04 18:38:18 +04:00
/* Test for string buffer fetch */
2003-01-24 03:17:26 -08:00
static void test_buffers ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
int rc ;
ulong length ;
my_bool is_null ;
char buffer [ 20 ] ;
2004-06-04 18:38:18 +04:00
2003-01-24 03:17:26 -08:00
myheader ( " test_buffers " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_buffer " ) ;
2003-01-24 03:17:26 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_buffer(str varchar(20)) " ) ;
2003-01-24 03:17:26 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into test_buffer values('MySQL') \
, ( ' Database ' ) , ( ' Open - Source ' ) , ( ' Popular ' ) " );
2003-01-24 03:17:26 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select str from test_buffer " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
2004-06-04 18:38:18 +04:00
bzero ( buffer , 20 ) ; /* Avoid overruns in printf() */
2003-10-25 17:19:35 +02:00
2003-01-24 03:17:26 -08:00
bind [ 0 ] . length = & length ;
bind [ 0 ] . is_null = & is_null ;
bind [ 0 ] . buffer_length = 1 ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) buffer ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
2004-06-04 18:38:18 +04:00
buffer [ 1 ] = ' X ' ;
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
fprintf ( stdout , " \n data: %s (%lu) " , buffer , length ) ;
2003-11-19 17:31:57 +02:00
assert ( buffer [ 0 ] = = ' M ' ) ;
assert ( buffer [ 1 ] = = ' X ' ) ;
assert ( length = = 5 ) ;
2003-01-24 03:17:26 -08:00
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_length = 8 ;
rc = mysql_stmt_bind_result ( stmt , bind ) ; /* re-bind */
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
fprintf ( stdout , " \n data: %s (%lu) " , buffer , length ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( buffer , " Database " , 8 ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 8 ) ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_length = 12 ;
rc = mysql_stmt_bind_result ( stmt , bind ) ; /* re-bind */
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
fprintf ( stdout , " \n data: %s (%lu) " , buffer , length ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( buffer , " Open-Source " ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 11 ) ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_length = 6 ;
rc = mysql_stmt_bind_result ( stmt , bind ) ; /* re-bind */
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-24 03:17:26 -08:00
fprintf ( stdout , " \n data: %s (%lu) " , buffer , length ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( buffer , " Popula " , 6 ) = = 0 ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 7 ) ;
2004-06-04 18:38:18 +04:00
2003-01-24 03:17:26 -08:00
mysql_stmt_close ( stmt ) ;
}
2003-01-07 18:53:46 -08:00
2004-06-04 18:38:18 +04:00
/* Test the direct query execution in the middle of open stmts */
2003-01-31 13:43:38 -08:00
static void test_open_direct ( )
{
MYSQL_STMT * stmt ;
MYSQL_RES * result ;
int rc ;
2004-06-04 18:38:18 +04:00
2003-01-31 13:43:38 -08:00
myheader ( " test_open_direct " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_open_direct " ) ;
2003-01-31 13:43:38 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_open_direct(id int, name char(6)) " ) ;
2003-01-31 13:43:38 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " INSERT INTO test_open_direct values(10, 'mysql') " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_open_direct " ) ;
2003-01-31 13:43:38 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-01-31 13:43:38 -08:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 0 = = my_process_result_set ( result ) ) ;
2004-03-05 16:55:09 +03:00
mysql_free_result ( result ) ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 13:43:38 -08:00
2003-02-04 18:54:14 -08:00
verify_st_affected_rows ( stmt , 1 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_open_direct " ) ;
2003-01-31 13:43:38 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-01-31 13:43:38 -08:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2004-03-05 16:55:09 +03:00
mysql_free_result ( result ) ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 13:43:38 -08:00
2003-02-04 18:54:14 -08:00
verify_st_affected_rows ( stmt , 1 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT * FROM test_open_direct " ) ;
2003-01-31 13:43:38 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-01-31 13:43:38 -08:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 2 = = my_process_result_set ( result ) ) ;
2004-03-05 16:55:09 +03:00
mysql_free_result ( result ) ;
2003-01-31 13:43:38 -08:00
mysql_stmt_close ( stmt ) ;
2003-01-31 15:20:03 -08:00
/* run a direct query in the middle of a fetch */
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_open_direct " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_open_direct(id) VALUES(20) " ) ;
2003-01-31 15:20:03 -08:00
myquery_r ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_close ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_open_direct(id) VALUES(20) " ) ;
2003-01-31 15:20:03 -08:00
myquery ( rc ) ;
/* run a direct query with store result */
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_open_direct " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 15:20:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table test_open_direct " ) ;
2003-01-31 15:20:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_close ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 13:43:38 -08:00
}
2004-06-04 18:38:18 +04:00
/* Test fetch without prior bound buffers */
2003-01-31 13:43:38 -08:00
static void test_fetch_nobuffs ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 4 ] ;
char str [ 4 ] [ 50 ] ;
int rc ;
myheader ( " test_fetch_nobuffs " ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT DATABASE(), CURRENT_USER(), \
2004-02-11 12:32:47 +01:00
CURRENT_DATE ( ) , CURRENT_TIME ( ) " );
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = 0 ;
while ( mysql_stmt_fetch ( stmt ) ! = MYSQL_NO_DATA )
2003-01-31 13:43:38 -08:00
rc + + ;
2003-02-04 18:54:14 -08:00
fprintf ( stdout , " \n total rows : %d " , rc ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = 1 ) ;
2003-01-31 13:43:38 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) str [ 0 ] ;
2003-01-31 13:43:38 -08:00
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = 0 ;
bind [ 0 ] . buffer_length = sizeof ( str [ 0 ] ) ;
bind [ 1 ] = bind [ 2 ] = bind [ 3 ] = bind [ 0 ] ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) str [ 1 ] ;
bind [ 2 ] . buffer = ( void * ) str [ 2 ] ;
bind [ 3 ] . buffer = ( void * ) str [ 3 ] ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-01-31 13:43:38 -08:00
2004-06-04 18:38:18 +04:00
rc = 0 ;
while ( mysql_stmt_fetch ( stmt ) ! = MYSQL_NO_DATA )
2003-01-31 13:43:38 -08:00
{
rc + + ;
2003-01-31 15:20:03 -08:00
fprintf ( stdout , " \n CURRENT_DATABASE(): %s " , str [ 0 ] ) ;
fprintf ( stdout , " \n CURRENT_USER() : %s " , str [ 1 ] ) ;
fprintf ( stdout , " \n CURRENT_DATE() : %s " , str [ 2 ] ) ;
fprintf ( stdout , " \n CURRENT_TIME() : %s " , str [ 3 ] ) ;
2003-01-31 13:43:38 -08:00
}
2003-02-04 18:54:14 -08:00
fprintf ( stdout , " \n total rows : %d " , rc ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = 1 ) ;
2003-01-31 13:43:38 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test a misc bug */
2003-02-04 18:54:14 -08:00
static void test_ushort_bug ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 4 ] ;
ushort short_value ;
ulong long_value ;
ulong s_length , l_length , ll_length , t_length ;
ulonglong longlong_value ;
int rc ;
uchar tiny_value ;
myheader ( " test_ushort_bug " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_ushort " ) ;
2003-02-04 18:54:14 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_ushort(a smallint unsigned, \
2003-02-04 18:54:14 -08:00
b smallint unsigned , \
c smallint unsigned , \
d smallint unsigned ) " );
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_ushort VALUES(35999, 35999, 35999, 200) " ) ;
2003-02-04 18:54:14 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_ushort " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-04 18:54:14 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-04 18:54:14 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & short_value ;
2003-02-04 18:54:14 -08:00
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & s_length ;
2004-06-04 18:38:18 +04:00
2003-02-04 18:54:14 -08:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & long_value ;
2003-02-04 18:54:14 -08:00
bind [ 1 ] . is_null = 0 ;
bind [ 1 ] . length = & l_length ;
bind [ 2 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & longlong_value ;
2003-02-04 18:54:14 -08:00
bind [ 2 ] . is_null = 0 ;
bind [ 2 ] . length = & ll_length ;
2004-06-04 18:38:18 +04:00
2003-02-04 18:54:14 -08:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & tiny_value ;
2003-02-04 18:54:14 -08:00
bind [ 3 ] . is_null = 0 ;
bind [ 3 ] . length = & t_length ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-04 18:54:14 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n ushort : %d (%ld) " , short_value , s_length ) ;
fprintf ( stdout , " \n ulong : %ld (%ld) " , long_value , l_length ) ;
fprintf ( stdout , " \n longlong : %lld (%ld) " , longlong_value , ll_length ) ;
fprintf ( stdout , " \n tinyint : %d (%ld) " , tiny_value , t_length ) ;
2003-11-19 17:31:57 +02:00
assert ( short_value = = 35999 ) ;
assert ( s_length = = 2 ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( long_value = = 35999 ) ;
assert ( l_length = = 4 ) ;
2003-02-04 18:54:14 -08:00
2003-11-19 17:31:57 +02:00
assert ( longlong_value = = 35999 ) ;
assert ( ll_length = = 8 ) ;
2003-02-04 18:54:14 -08:00
2003-11-19 17:31:57 +02:00
assert ( tiny_value = = 200 ) ;
assert ( t_length = = 1 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-02-04 18:54:14 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test a misc smallint-signed conversion bug */
2003-02-05 12:21:01 -08:00
static void test_sshort_bug ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 4 ] ;
short short_value ;
long long_value ;
ulong s_length , l_length , ll_length , t_length ;
ulonglong longlong_value ;
int rc ;
uchar tiny_value ;
myheader ( " test_sshort_bug " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_sshort " ) ;
2003-02-05 12:21:01 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_sshort(a smallint signed, \
2003-02-05 12:21:01 -08:00
b smallint signed , \
c smallint unsigned , \
d smallint unsigned ) " );
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_sshort VALUES(-5999, -5999, 35999, 200) " ) ;
2003-02-05 12:21:01 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_sshort " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-05 12:21:01 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-05 12:21:01 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & short_value ;
2003-02-05 12:21:01 -08:00
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & s_length ;
2004-06-04 18:38:18 +04:00
2003-02-05 12:21:01 -08:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & long_value ;
2003-02-05 12:21:01 -08:00
bind [ 1 ] . is_null = 0 ;
bind [ 1 ] . length = & l_length ;
bind [ 2 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & longlong_value ;
2003-02-05 12:21:01 -08:00
bind [ 2 ] . is_null = 0 ;
bind [ 2 ] . length = & ll_length ;
2004-06-04 18:38:18 +04:00
2003-02-05 12:21:01 -08:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & tiny_value ;
2003-02-05 12:21:01 -08:00
bind [ 3 ] . is_null = 0 ;
bind [ 3 ] . length = & t_length ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-05 12:21:01 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n sshort : %d (%ld) " , short_value , s_length ) ;
fprintf ( stdout , " \n slong : %ld (%ld) " , long_value , l_length ) ;
fprintf ( stdout , " \n longlong : %lld (%ld) " , longlong_value , ll_length ) ;
fprintf ( stdout , " \n tinyint : %d (%ld) " , tiny_value , t_length ) ;
2003-11-19 17:31:57 +02:00
assert ( short_value = = - 5999 ) ;
assert ( s_length = = 2 ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( long_value = = - 5999 ) ;
assert ( l_length = = 4 ) ;
2003-02-05 12:21:01 -08:00
2003-11-19 17:31:57 +02:00
assert ( longlong_value = = 35999 ) ;
assert ( ll_length = = 8 ) ;
2003-02-05 12:21:01 -08:00
2003-11-19 17:31:57 +02:00
assert ( tiny_value = = 200 ) ;
assert ( t_length = = 1 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-02-05 12:21:01 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test a misc tinyint-signed conversion bug */
2003-02-05 12:21:01 -08:00
static void test_stiny_bug ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 4 ] ;
short short_value ;
long long_value ;
ulong s_length , l_length , ll_length , t_length ;
ulonglong longlong_value ;
int rc ;
uchar tiny_value ;
myheader ( " test_stiny_bug " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_stiny " ) ;
2003-02-05 12:21:01 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_stiny(a tinyint signed, \
2003-02-05 12:21:01 -08:00
b tinyint signed , \
c tinyint unsigned , \
d tinyint unsigned ) " );
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_stiny VALUES(-128, -127, 255, 0) " ) ;
2003-02-05 12:21:01 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_stiny " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-05 12:21:01 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-05 12:21:01 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & short_value ;
2003-02-05 12:21:01 -08:00
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & s_length ;
2004-06-04 18:38:18 +04:00
2003-02-05 12:21:01 -08:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & long_value ;
2003-02-05 12:21:01 -08:00
bind [ 1 ] . is_null = 0 ;
bind [ 1 ] . length = & l_length ;
bind [ 2 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & longlong_value ;
2003-02-05 12:21:01 -08:00
bind [ 2 ] . is_null = 0 ;
bind [ 2 ] . length = & ll_length ;
2004-06-04 18:38:18 +04:00
2003-02-05 12:21:01 -08:00
bind [ 3 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) & tiny_value ;
2003-02-05 12:21:01 -08:00
bind [ 3 ] . is_null = 0 ;
bind [ 3 ] . length = & t_length ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-02-05 12:21:01 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n sshort : %d (%ld) " , short_value , s_length ) ;
fprintf ( stdout , " \n slong : %ld (%ld) " , long_value , l_length ) ;
fprintf ( stdout , " \n longlong : %lld (%ld) " , longlong_value , ll_length ) ;
fprintf ( stdout , " \n tinyint : %d (%ld) " , tiny_value , t_length ) ;
2003-11-19 17:31:57 +02:00
assert ( short_value = = - 128 ) ;
assert ( s_length = = 2 ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( long_value = = - 127 ) ;
assert ( l_length = = 4 ) ;
2003-02-05 12:21:01 -08:00
2003-11-19 17:31:57 +02:00
assert ( longlong_value = = 255 ) ;
assert ( ll_length = = 8 ) ;
2003-02-05 12:21:01 -08:00
2003-11-19 17:31:57 +02:00
assert ( tiny_value = = 0 ) ;
assert ( t_length = = 1 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-02-05 12:21:01 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test misc field information, bug: #74 */
2003-02-15 15:01:04 -08:00
static void test_field_misc ( )
{
MYSQL_STMT * stmt ;
MYSQL_RES * result ;
MYSQL_BIND bind [ 1 ] ;
char table_type [ NAME_LEN ] ;
ulong type_length ;
int rc ;
myheader ( " test_field_misc " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SELECT @@autocommit " ) ;
2003-02-15 15:01:04 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-02-15 15:01:04 -08:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 ,
" @@autocommit " , " " , /* field and its org name */
2003-02-15 15:01:04 -08:00
MYSQL_TYPE_LONGLONG , /* field type */
" " , " " , /* table and its org name */
2004-06-04 18:38:18 +04:00
" " , 1 , 0 ) ; /* db name, length(its bool flag)*/
2003-02-15 15:01:04 -08:00
mysql_free_result ( result ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT @@autocommit " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
result = mysql_stmt_result_metadata ( stmt ) ;
2003-02-15 15:01:04 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 ,
" @@autocommit " , " " , /* field and its org name */
2003-02-15 15:01:04 -08:00
MYSQL_TYPE_LONGLONG , /* field type */
" " , " " , /* table and its org name */
2004-06-04 18:38:18 +04:00
" " , 1 , 0 ) ; /* db name, length(its bool flag)*/
2003-02-15 15:01:04 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT @@table_type " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 0 ] . buffer = table_type ;
bind [ 0 ] . length = & type_length ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . buffer_length = NAME_LEN ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
fprintf ( stdout , " \n default table type: %s(%ld) " , table_type , type_length ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-02-15 15:01:04 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT @@table_type " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2003-02-15 15:01:04 -08:00
mytest ( result ) ;
2004-06-06 02:27:05 +04:00
assert ( mysql_stmt_field_count ( stmt ) = = mysql_num_fields ( result ) ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 ,
" @@table_type " , " " , /* field and its org name */
2003-02-15 15:01:04 -08:00
MYSQL_TYPE_STRING , /* field type */
" " , " " , /* table and its org name */
2004-06-04 18:38:18 +04:00
" " , type_length * 3 , 0 ) ; /* db name, length */
2003-02-15 15:01:04 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT @@max_error_count " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2003-02-15 15:01:04 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 ,
" @@max_error_count " , " " , /* field and its org name */
2003-02-15 15:01:04 -08:00
MYSQL_TYPE_LONGLONG , /* field type */
" " , " " , /* table and its org name */
2004-06-04 18:38:18 +04:00
" " , 10 , 0 ) ; /* db name, length */
2003-02-15 15:01:04 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT @@max_allowed_packet " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-15 15:01:04 -08:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2003-02-15 15:01:04 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-15 15:01:04 -08:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 ,
" @@max_allowed_packet " , " " , /* field and its org name */
2003-02-15 15:01:04 -08:00
MYSQL_TYPE_LONGLONG , /* field type */
" " , " " , /* table and its org name */
2004-06-04 18:38:18 +04:00
" " , 10 , 0 ) ; /* db name, length */
2003-02-15 15:01:04 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT @@sql_warnings " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2003-02-15 15:13:58 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-15 15:13:58 -08:00
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 ,
" @@sql_warnings " , " " , /* field and its org name */
2003-02-15 15:13:58 -08:00
MYSQL_TYPE_LONGLONG , /* field type */
" " , " " , /* table and its org name */
2004-06-04 18:38:18 +04:00
" " , 1 , 0 ) ; /* db name, length */
2003-02-15 15:13:58 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
2003-02-15 15:01:04 -08:00
}
2003-02-24 17:05:03 -08:00
/*
2004-06-04 18:38:18 +04:00
Test SET OPTION feature with prepare stmts
2003-03-04 14:22:30 -08:00
bug # 85 ( reported by mark @ mysql . com )
2003-02-24 17:05:03 -08:00
*/
2004-06-04 18:38:18 +04:00
2003-02-24 17:05:03 -08:00
static void test_set_option ( )
{
MYSQL_STMT * stmt ;
MYSQL_RES * result ;
int rc ;
myheader ( " test_set_option " ) ;
mysql_autocommit ( mysql , TRUE ) ;
/* LIMIT the rows count to 2 */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SET OPTION SQL_SELECT_LIMIT= 2 " ) ;
myquery ( rc ) ;
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_limit " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_limit(a tinyint) " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_limit VALUES(10), (20), (30), (40) " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n with SQL_SELECT_LIMIT= 2 (direct) " ) ;
rc = mysql_query ( mysql , " SELECT * FROM test_limit " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-02-24 17:05:03 -08:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 2 = = my_process_result_set ( result ) ) ;
2003-02-24 17:05:03 -08:00
mysql_free_result ( result ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n with SQL_SELECT_LIMIT=2 (prepare) " ) ;
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_limit " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-24 17:05:03 -08:00
2003-11-19 17:31:57 +02:00
assert ( 2 = = my_process_stmt_result ( stmt ) ) ;
2003-02-24 17:05:03 -08:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
/* RESET the LIMIT the rows count to 0 */
fprintf ( stdout , " \n with SQL_SELECT_LIMIT=DEFAULT (prepare) " ) ;
rc = mysql_query ( mysql , " SET OPTION SQL_SELECT_LIMIT=DEFAULT " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_limit " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-24 17:05:03 -08:00
2003-11-19 17:31:57 +02:00
assert ( 4 = = my_process_stmt_result ( stmt ) ) ;
2003-02-24 17:05:03 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
2003-02-24 17:05:03 -08:00
/*
2004-06-04 18:38:18 +04:00
Test a misc GRANT option
2003-03-04 14:22:30 -08:00
bug # 89 ( reported by mark @ mysql . com )
2003-02-24 17:05:03 -08:00
*/
2004-06-04 18:38:18 +04:00
2003-02-24 17:05:03 -08:00
static void test_prepare_grant ( )
{
int rc ;
myheader ( " test_prepare_grant " ) ;
mysql_autocommit ( mysql , TRUE ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_grant " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_grant(a tinyint primary key auto_increment) " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strxmov ( query , " GRANT INSERT, UPDATE, SELECT ON " , current_db ,
2003-02-24 17:05:03 -08:00
" .test_grant TO 'test_grant'@ " ,
opt_host ? opt_host : " 'localhost' " , NullS ) ;
2004-06-04 18:38:18 +04:00
if ( mysql_query ( mysql , query ) )
2003-02-24 17:05:03 -08:00
{
myerror ( " GRANT failed " ) ;
2004-06-04 18:38:18 +04:00
/*
If server started with - - skip - grant - tables , skip this test , else
2003-02-24 17:05:03 -08:00
exit to indicate an error
2004-06-04 18:38:18 +04:00
ER_UNKNOWN_COM_ERROR = 1047
*/
if ( mysql_errno ( mysql ) ! = 1047 )
exit ( 0 ) ;
2003-02-24 17:05:03 -08:00
}
else
{
MYSQL * org_mysql = mysql , * lmysql ;
MYSQL_STMT * stmt ;
2004-06-04 18:38:18 +04:00
2003-02-24 17:05:03 -08:00
fprintf ( stdout , " \n Establishing a test connection ... " ) ;
2004-06-04 18:38:18 +04:00
if ( ! ( lmysql = mysql_init ( NULL ) ) )
{
2003-07-21 00:13:22 -07:00
myerror ( " mysql_init() failed " ) ;
2003-02-24 17:05:03 -08:00
exit ( 0 ) ;
}
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_real_connect ( lmysql , opt_host , " test_grant " ,
" " , current_db , opt_port ,
opt_unix_socket , 0 ) ) )
2003-02-24 17:05:03 -08:00
{
2004-06-04 18:38:18 +04:00
myerror ( " connection failed " ) ;
2003-02-24 17:05:03 -08:00
mysql_close ( lmysql ) ;
exit ( 0 ) ;
2004-06-04 18:38:18 +04:00
}
fprintf ( stdout , " OK " ) ;
2003-02-24 17:05:03 -08:00
mysql = lmysql ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_grant VALUES(NULL) " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_grant(a) VALUES(NULL) " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
execute_prepare_query ( " INSERT INTO test_grant(a) VALUES(NULL) " , 1 ) ;
execute_prepare_query ( " INSERT INTO test_grant VALUES(NULL) " , 1 ) ;
execute_prepare_query ( " UPDATE test_grant SET a=9 WHERE a=1 " , 1 ) ;
2004-02-11 12:32:47 +01:00
assert ( 4 = = my_stmt_result ( " SELECT a FROM test_grant " ) ) ;
/* Both DELETE expected to fail as user does not have DELETE privs */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DELETE FROM test_grant " ) ;
2003-02-24 17:05:03 -08:00
myquery_r ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " DELETE FROM test_grant " ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2004-06-04 18:38:18 +04:00
2004-02-11 12:32:47 +01:00
assert ( 4 = = my_stmt_result ( " SELECT * FROM test_grant " ) ) ;
2004-06-04 18:38:18 +04:00
mysql_close ( lmysql ) ;
2003-02-24 17:05:03 -08:00
mysql = org_mysql ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " delete from mysql.user where User='test_grant' " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = mysql_affected_rows ( mysql ) ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " delete from mysql.tables_priv where User='test_grant' " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = mysql_affected_rows ( mysql ) ) ;
2003-05-21 01:15:04 -07:00
2003-02-24 17:05:03 -08:00
}
}
/*
2004-06-04 18:38:18 +04:00
Test a crash when invalid / corrupted . frm is used in the
2003-03-04 14:22:30 -08:00
SHOW TABLE STATUS
bug # 93 ( reported by serg @ mysql . com ) .
2003-02-24 17:05:03 -08:00
*/
2004-06-04 18:38:18 +04:00
2003-02-24 17:05:03 -08:00
static void test_frm_bug ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 2 ] ;
MYSQL_RES * result ;
MYSQL_ROW row ;
FILE * test_file ;
char data_dir [ NAME_LEN ] ;
char test_frm [ 255 ] ;
int rc ;
myheader ( " test_frm_bug " ) ;
mysql_autocommit ( mysql , TRUE ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_frm_bug " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " flush tables " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " show variables like 'datadir' " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-24 17:05:03 -08:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
bind [ 0 ] . buffer = data_dir ;
bind [ 0 ] . buffer_length = NAME_LEN ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = 0 ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] = bind [ 0 ] ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n data directory: %s " , data_dir ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
strxmov ( test_frm , data_dir , " / " , current_db , " / " , " test_frm_bug.frm " , NullS ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n test_frm: %s " , test_frm ) ;
2003-02-24 17:05:03 -08:00
if ( ! ( test_file = my_fopen ( test_frm , ( int ) ( O_RDWR | O_CREAT ) , MYF ( MY_WME ) ) ) )
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n ERROR: my_fopen failed for '%s' " , test_frm ) ;
fprintf ( stdout , " \n test cancelled " ) ;
return ;
2003-02-24 17:05:03 -08:00
}
2004-06-04 18:38:18 +04:00
fprintf ( test_file , " this is a junk file for test " ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SHOW TABLE STATUS like 'test_frm_bug' " ) ;
2003-02-24 17:05:03 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-02-24 17:05:03 -08:00
mytest ( result ) ; /* It can't be NULL */
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result_set ( result ) ) ;
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
mysql_data_seek ( result , 0 ) ;
2003-02-24 17:05:03 -08:00
row = mysql_fetch_row ( result ) ;
mytest ( row ) ;
2004-06-24 20:08:42 +04:00
fprintf ( stdout , " \n Comment: %s " , row [ 17 ] ) ;
assert ( row [ 17 ] ! = 0 ) ;
2003-02-24 17:05:03 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
my_fclose ( test_file , MYF ( 0 ) ) ;
mysql_query ( mysql , " drop table if exists test_frm_bug " ) ;
2003-02-24 17:05:03 -08:00
}
2004-06-04 18:38:18 +04:00
/* Test DECIMAL conversion */
2003-03-04 14:22:30 -08:00
static void test_decimal_bug ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
2004-02-29 14:30:44 +01:00
char data [ 30 ] ;
2003-03-04 14:22:30 -08:00
int rc ;
my_bool is_null ;
myheader ( " test_decimal_bug " ) ;
mysql_autocommit ( mysql , TRUE ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_decimal_bug " ) ;
2003-03-04 14:22:30 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table test_decimal_bug(c1 decimal(10, 2)) " ) ;
2003-03-04 14:22:30 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into test_decimal_bug value(8), (10.22), (5.61) " ) ;
2003-03-04 14:22:30 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select c1 from test_decimal_bug where c1= ? " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-02-29 14:30:44 +01:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) data ;
2004-02-29 14:30:44 +01:00
bind [ 0 ] . buffer_length = 25 ;
2003-03-04 14:22:30 -08:00
bind [ 0 ] . is_null = & is_null ;
2004-06-04 18:38:18 +04:00
is_null = 0 ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-02-29 14:30:44 +01:00
strcpy ( data , " 8.0 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
data [ 0 ] = 0 ;
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-02-29 14:30:44 +01:00
fprintf ( stdout , " \n data: %s " , data ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , " 8.00 " ) = = 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-03-04 14:22:30 -08:00
2004-02-29 14:30:44 +01:00
strcpy ( data , " 5.61 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
data [ 0 ] = 0 ;
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-02-29 14:30:44 +01:00
fprintf ( stdout , " \n data: %s " , data ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , " 5.61 " ) = = 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-03-04 14:22:30 -08:00
is_null = 1 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-03-04 14:22:30 -08:00
2004-02-29 14:30:44 +01:00
strcpy ( data , " 10.22 " ) ; is_null = 0 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
data [ 0 ] = 0 ;
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-02-29 14:30:44 +01:00
fprintf ( stdout , " \n data: %s " , data ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , " 10.22 " ) = = 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-03-04 14:22:30 -08:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test EXPLAIN bug (#115, reported by mark@mysql.com & georg@php.net). */
2003-03-04 14:22:30 -08:00
static void test_explain_bug ( )
{
MYSQL_STMT * stmt ;
MYSQL_RES * result ;
int rc ;
myheader ( " test_explain_bug " ) ;
2004-06-04 18:38:18 +04:00
mysql_autocommit ( mysql , TRUE ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_explain " ) ;
2003-03-04 14:22:30 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_explain(id int, name char(2)) " ) ;
2003-03-04 14:22:30 -08:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " explain test_explain " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
assert ( 2 = = my_process_stmt_result ( stmt ) ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2003-03-04 14:22:30 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total fields in the result: %d " ,
2003-03-04 14:22:30 -08:00
mysql_num_fields ( result ) ) ;
2003-11-19 17:31:57 +02:00
assert ( 6 = = mysql_num_fields ( result ) ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 , " Field " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , NAME_LEN , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 1 , " Type " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , 40 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 2 , " Null " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , 1 , 0 ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 3 , " Key " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , 3 , 0 ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 4 , " Default " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , NAME_LEN , 0 ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 5 , " Extra " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , 20 , 0 ) ;
2003-03-04 14:22:30 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " explain select id, name FROM test_explain " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
result = mysql_stmt_result_metadata ( stmt ) ;
2003-03-04 14:22:30 -08:00
mytest ( result ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total fields in the result: %d " ,
2003-03-04 14:22:30 -08:00
mysql_num_fields ( result ) ) ;
2003-11-19 17:31:57 +02:00
assert ( 10 = = mysql_num_fields ( result ) ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 , " id " , " " , MYSQL_TYPE_LONGLONG ,
" " , " " , " " , 3 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 1 , " select_type " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , 19 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 2 , " table " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , NAME_LEN , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 3 , " type " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , 10 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 4 , " possible_keys " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , NAME_LEN * 64 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 5 , " key " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , NAME_LEN , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 6 , " key_len " , " " , MYSQL_TYPE_LONGLONG ,
" " , " " , " " , 3 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 7 , " ref " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , NAME_LEN * 16 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 8 , " rows " , " " , MYSQL_TYPE_LONGLONG ,
" " , " " , " " , 10 , 0 ) ;
2003-03-04 14:22:30 -08:00
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 9 , " Extra " , " " , MYSQL_TYPE_VAR_STRING ,
" " , " " , " " , 255 , 0 ) ;
2003-03-04 14:22:30 -08:00
mysql_free_result ( result ) ;
mysql_stmt_close ( stmt ) ;
}
2003-11-19 17:31:57 +02:00
# ifdef NOT_YET_WORKING
2003-05-21 01:15:04 -07:00
/*
2004-06-04 18:38:18 +04:00
Test math functions .
Bug # 148 ( reported by salle @ mysql . com ) .
2003-05-21 01:15:04 -07:00
*/
2003-11-19 17:31:57 +02:00
# define myerrno(n) check_errcode(n)
static void check_errcode ( const unsigned int err )
2004-06-04 18:38:18 +04:00
{
2003-11-19 17:31:57 +02:00
if ( mysql - > server_version )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n [MySQL-%s] " , mysql - > server_version ) ;
2003-11-19 17:31:57 +02:00
else
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n [MySQL] " ) ;
fprintf ( stdout , " [%d] %s \n " , mysql_errno ( mysql ) , mysql_error ( mysql ) ) ;
2003-11-19 17:31:57 +02:00
assert ( mysql_errno ( mysql ) = = err ) ;
}
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
static void test_drop_temp ( )
{
int rc ;
myheader ( " test_drop_temp " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP DATABASE IF EXISTS test_drop_temp_db " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE DATABASE test_drop_temp_db " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_drop_temp_db.t1(c1 int, c2 char(1)) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " delete from mysql.db where Db='test_drop_temp_db' " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " delete from mysql.db where Db='test_drop_temp_db' " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strxmov ( query , " GRANT SELECT, USAGE, DROP ON test_drop_temp_db.* TO test_temp@ " ,
2003-05-21 01:15:04 -07:00
opt_host ? opt_host : " localhost " , NullS ) ;
2004-06-04 18:38:18 +04:00
if ( mysql_query ( mysql , query ) )
2003-05-21 01:15:04 -07:00
{
myerror ( " GRANT failed " ) ;
2004-06-04 18:38:18 +04:00
/*
2003-05-21 01:15:04 -07:00
If server started with - - skip - grant - tables , skip this test , else
exit to indicate an error
2004-06-04 18:38:18 +04:00
ER_UNKNOWN_COM_ERROR = 1047
*/
if ( mysql_errno ( mysql ) ! = 1047 )
exit ( 0 ) ;
2003-05-21 01:15:04 -07:00
}
else
{
MYSQL * org_mysql = mysql , * lmysql ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n Establishing a test connection ... " ) ;
2004-06-04 18:38:18 +04:00
if ( ! ( lmysql = mysql_init ( NULL ) ) )
{
2003-07-21 00:13:22 -07:00
myerror ( " mysql_init() failed " ) ;
2003-05-21 01:15:04 -07:00
exit ( 0 ) ;
}
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " flush privileges " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
if ( ! ( mysql_real_connect ( lmysql , opt_host ? opt_host : " localhost " , " test_temp " ,
" " , " test_drop_temp_db " , opt_port ,
opt_unix_socket , 0 ) ) )
2003-05-21 01:15:04 -07:00
{
mysql = lmysql ;
2004-06-04 18:38:18 +04:00
myerror ( " connection failed " ) ;
2003-05-21 01:15:04 -07:00
mysql_close ( lmysql ) ;
exit ( 0 ) ;
2004-06-04 18:38:18 +04:00
}
fprintf ( stdout , " OK " ) ;
2003-05-21 01:15:04 -07:00
mysql = lmysql ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO t1 VALUES(10, 'C') " ) ;
2003-05-21 01:15:04 -07:00
myerrno ( ( uint ) 1142 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
2003-05-21 01:15:04 -07:00
myerrno ( ( uint ) 1142 ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
mysql = org_mysql ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TEMPORARY TABLE test_drop_temp_db.t1(c1 int) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TEMPORARY TABLE test_drop_temp_db.t2 LIKE test_drop_temp_db.t1 " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
mysql = lmysql ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE t1, t2 " ) ;
2003-05-21 01:15:04 -07:00
myquery_r ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TEMPORARY TABLE t1 " ) ;
2003-05-21 01:15:04 -07:00
myquery_r ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TEMPORARY TABLE t2 " ) ;
2003-05-21 01:15:04 -07:00
myquery_r ( rc ) ;
2004-06-04 18:38:18 +04:00
mysql_close ( lmysql ) ;
2003-05-21 01:15:04 -07:00
mysql = org_mysql ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop database test_drop_temp_db " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = mysql_affected_rows ( mysql ) ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " delete from mysql.user where User='test_temp' " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = mysql_affected_rows ( mysql ) ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " delete from mysql.tables_priv where User='test_temp' " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = mysql_affected_rows ( mysql ) ) ;
2003-05-21 01:15:04 -07:00
}
}
2003-11-19 17:31:57 +02:00
# endif
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
/* Test warnings for cuted rows */
2003-05-21 01:15:04 -07:00
static void test_cuted_rows ( )
{
int rc , count ;
MYSQL_RES * result ;
myheader ( " test_cuted_rows " ) ;
2004-06-04 18:38:18 +04:00
mysql_query ( mysql , " DROP TABLE if exists t1 " ) ;
2003-05-21 01:15:04 -07:00
mysql_query ( mysql , " DROP TABLE if exists t2 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1(c1 tinyint) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t2(c1 int not null) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO t1 values(10), (NULL), (NULL) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
count = mysql_warning_count ( mysql ) ;
fprintf ( stdout , " \n total warnings: %d " , count ) ;
2003-11-19 17:31:57 +02:00
assert ( count = = 0 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO t2 SELECT * FROM t1 " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
count = mysql_warning_count ( mysql ) ;
fprintf ( stdout , " \n total warnings: %d " , count ) ;
2003-11-19 17:31:57 +02:00
assert ( count = = 2 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SHOW WARNINGS " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-05-21 01:15:04 -07:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 2 = = my_process_result_set ( result ) ) ;
2003-05-21 01:15:04 -07:00
mysql_free_result ( result ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO t1 VALUES('junk'), (876789) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
count = mysql_warning_count ( mysql ) ;
fprintf ( stdout , " \n total warnings: %d " , count ) ;
2003-11-19 17:31:57 +02:00
assert ( count = = 2 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SHOW WARNINGS " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_store_result ( mysql ) ;
2003-05-21 01:15:04 -07:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 2 = = my_process_result_set ( result ) ) ;
2003-05-21 01:15:04 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test update/binary logs */
2003-05-21 01:15:04 -07:00
static void test_logs ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 2 ] ;
char data [ 255 ] ;
ulong length ;
int rc ;
short id ;
myheader ( " test_logs " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_logs " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_logs(id smallint, name varchar(20)) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strmov ( ( char * ) data , " INSERT INTO test_logs VALUES(?, ?) " ) ;
stmt = mysql_simple_prepare ( mysql , data ) ;
check_stmt ( stmt ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & id ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & data ;
2003-05-21 01:15:04 -07:00
bind [ 1 ] . buffer_length = 255 ;
bind [ 1 ] . length = & length ;
id = 9876 ;
2004-06-04 18:38:18 +04:00
length = ( ulong ) ( strmov ( ( char * ) data , " MySQL - Open Source Database " ) - data ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
strmov ( ( char * ) data , " ' " ) ;
length = 1 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
strmov ( ( char * ) data , " \" " ) ;
length = 1 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
length = ( ulong ) ( strmov ( ( char * ) data , " my \' sql \' " ) - data ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
length = ( ulong ) ( strmov ( ( char * ) data , " my \" sql \" " ) - data ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
strmov ( ( char * ) data , " INSERT INTO test_logs VALUES(20, 'mysql') " ) ;
stmt = mysql_simple_prepare ( mysql , data ) ;
check_stmt ( stmt ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
strmov ( ( char * ) data , " SELECT * FROM test_logs WHERE id=? " ) ;
stmt = mysql_simple_prepare ( mysql , data ) ;
check_stmt ( stmt ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
bind [ 1 ] . buffer_length = 255 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n id : %d " , id ) ;
fprintf ( stdout , " \n name : %s(%ld) " , data , length ) ;
2004-06-04 18:38:18 +04:00
assert ( id = = 9876 ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 19 ) ; /* Due to VARCHAR(20) */
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , " MySQL - Open Source " ) = = 0 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n name : %s(%ld) " , data , length ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 1 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , " ' " ) = = 0 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n name : %s(%ld) " , data , length ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 1 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , " \" " ) = = 0 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n name : %s(%ld) " , data , length ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 7 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( data , " my \' sql \' " ) = = 0 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n name : %s(%ld) " , data , length ) ;
2003-11-19 17:31:57 +02:00
assert ( length = = 7 ) ;
2004-06-04 18:38:18 +04:00
/*assert(strcmp(data, "my\"sql\"") == 0); */
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_logs " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
}
2004-06-04 18:38:18 +04:00
/* Test 'n' statements create and close */
2003-05-21 01:15:04 -07:00
static void test_nstmts ( )
{
MYSQL_STMT * stmt ;
char query [ 255 ] ;
int rc ;
static uint i , total_stmts = 2000 ;
MYSQL_BIND bind [ 1 ] ;
myheader ( " test_nstmts " ) ;
2004-06-04 18:38:18 +04:00
mysql_autocommit ( mysql , TRUE ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_nstmts " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_nstmts(id int) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & i ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-04 18:38:18 +04:00
for ( i = 0 ; i < total_stmts ; i + + )
2003-05-21 01:15:04 -07:00
{
fprintf ( stdout , " \r stmt: %d " , i ) ;
2004-06-04 18:38:18 +04:00
strmov ( query , " insert into test_nstmts values(?) " ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select count(*) from test_nstmts " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
i = 0 ;
rc = mysql_stmt_bind_result ( stmt , bind ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n total rows: %d " , i ) ;
2003-11-19 17:31:57 +02:00
assert ( i = = total_stmts ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_nstmts " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
}
2004-06-04 18:38:18 +04:00
/* Test stmt seek() functions */
2003-05-21 01:15:04 -07:00
static void test_fetch_seek ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 3 ] ;
MYSQL_ROW_OFFSET row ;
int rc ;
long c1 ;
char c2 [ 11 ] , c3 [ 20 ] ;
myheader ( " test_fetch_seek " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_seek " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table test_seek(c1 int primary key auto_increment, c2 char(10), c3 timestamp(14)) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into test_seek(c2) values('venu'), ('mysql'), ('open'), ('source') " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_seek " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & c1 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_length = 0 ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = 0 ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) c2 ;
2003-05-21 01:15:04 -07:00
bind [ 1 ] . buffer_length = sizeof ( c2 ) ;
bind [ 1 ] . is_null = 0 ;
bind [ 1 ] . length = 0 ;
bind [ 2 ] = bind [ 1 ] ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) c3 ;
2003-05-21 01:15:04 -07:00
bind [ 2 ] . buffer_length = sizeof ( c3 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 0: %ld, %s, %s " , c1 , c2 , c3 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
row = mysql_stmt_row_tell ( stmt ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
row = mysql_stmt_row_seek ( stmt , row ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 2: %ld, %s, %s " , c1 , c2 , c3 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
row = mysql_stmt_row_seek ( stmt , row ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 2: %ld, %s, %s " , c1 , c2 , c3 ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_data_seek ( stmt , 0 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 0: %ld, %s, %s " , c1 , c2 , c3 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test mysql_stmt_fetch_column() with offset */
2003-05-21 01:15:04 -07:00
static void test_fetch_offset ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
char data [ 11 ] ;
ulong length ;
int rc ;
my_bool is_null ;
myheader ( " test_fetch_offset " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_column " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table test_column(a char(10)) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into test_column values('abcdefghij'), (null) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_column " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) data ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_length = 11 ;
bind [ 0 ] . is_null = & is_null ;
bind [ 0 ] . length = & length ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute_r ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
check_execute ( stmt , rc ) ;
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
data [ 0 ] = ' \0 ' ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 1: %s (%ld) " , data , length ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( data , " abcd " , 4 ) = = 0 & & length = = 10 ) ;
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 5 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 1: %s (%ld) " , data , length ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( data , " fg " , 2 ) = = 0 & & length = = 10 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 9 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 0: %s (%ld) " , data , length ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( data , " j " , 1 ) = = 0 & & length = = 10 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
is_null = 0 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2003-11-19 17:31:57 +02:00
assert ( is_null = = 1 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 1 , 0 ) ;
check_execute_r ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test mysql_stmt_fetch_column() */
2003-05-21 01:15:04 -07:00
static void test_fetch_column ( )
{
MYSQL_STMT * stmt ;
2003-10-25 15:53:41 +02:00
MYSQL_BIND bind [ 2 ] ;
char c2 [ 20 ] , bc2 [ 20 ] ;
ulong l1 , l2 , bl1 , bl2 ;
int rc , c1 , bc1 ;
2003-03-04 14:22:30 -08:00
2003-05-21 01:15:04 -07:00
myheader ( " test_fetch_column " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_column " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table test_column(c1 int primary key auto_increment, c2 char(10)) " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into test_column(c2) values('venu'), ('mysql') " ) ;
2003-05-21 01:15:04 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_column order by c2 desc " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-05-21 01:15:04 -07:00
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & bc1 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_length = 0 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . is_null = 0 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . length = & bl1 ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) bc2 ;
2003-10-25 15:53:41 +02:00
bind [ 1 ] . buffer_length = 7 ;
bind [ 1 ] . is_null = 0 ;
bind [ 1 ] . length = & bl2 ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 1 , 0 ) ; /* No-op at this point */
check_execute_r ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 0: %d, %s " , bc1 , bc2 ) ;
2003-10-25 15:53:41 +02:00
2003-05-21 01:15:04 -07:00
c2 [ 0 ] = ' \0 ' ; l2 = 0 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) c2 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_length = 7 ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & l2 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 1 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 1: %s(%ld) " , c2 , l2 ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( c2 , " venu " , 4 ) = = 0 & & l2 = = 4 ) ;
2003-05-21 01:15:04 -07:00
c2 [ 0 ] = ' \0 ' ; l2 = 0 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 1 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 1: %s(%ld) " , c2 , l2 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( c2 , " venu " ) = = 0 & & l2 = = 4 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
c1 = 0 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & c1 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_length = 0 ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & l1 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 0: %d(%ld) " , c1 , l1 ) ;
2003-11-19 17:31:57 +02:00
assert ( c1 = = 1 & & l1 = = 4 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n row 1: %d, %s " , bc1 , bc2 ) ;
2003-10-25 15:53:41 +02:00
c2 [ 0 ] = ' \0 ' ; l2 = 0 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) c2 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_length = 7 ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & l2 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 1 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 1: %s(%ld) " , c2 , l2 ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( c2 , " mysq " , 4 ) = = 0 & & l2 = = 5 ) ;
2003-05-21 01:15:04 -07:00
c2 [ 0 ] = ' \0 ' ; l2 = 0 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 1 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 1: %si(%ld) " , c2 , l2 ) ;
2004-06-04 18:38:18 +04:00
assert ( strcmp ( c2 , " mysql " ) = = 0 & & l2 = = 5 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
c1 = 0 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & c1 ;
2003-05-21 01:15:04 -07:00
bind [ 0 ] . buffer_length = 0 ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & l1 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
fprintf ( stdout , " \n col 0: %d(%ld) " , c1 , l1 ) ;
2003-11-19 17:31:57 +02:00
assert ( c1 = = 2 & & l1 = = 4 ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-05-21 01:15:04 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 1 , 0 ) ;
check_execute_r ( stmt , rc ) ;
2003-05-21 01:15:04 -07:00
mysql_stmt_close ( stmt ) ;
}
2003-02-24 17:05:03 -08:00
2004-06-04 18:38:18 +04:00
/* Test mysql_list_fields() */
2003-06-04 00:19:09 -07:00
static void test_list_fields ( )
{
MYSQL_RES * result ;
int rc ;
myheader ( " test_list_fields " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_list_fields " ) ;
2003-06-04 00:19:09 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table test_list_fields(c1 int primary key auto_increment, c2 char(10) default 'mysql') " ) ;
2003-06-04 00:19:09 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
result = mysql_list_fields ( mysql , " test_list_fields " , NULL ) ;
2003-06-04 00:19:09 -07:00
mytest ( result ) ;
2003-11-19 17:31:57 +02:00
assert ( 0 = = my_process_result_set ( result ) ) ;
2004-06-04 18:38:18 +04:00
verify_prepare_field ( result , 0 , " c1 " , " c1 " , MYSQL_TYPE_LONG ,
" test_list_fields " , " test_list_fields " , current_db , 11 , " 0 " ) ;
verify_prepare_field ( result , 1 , " c2 " , " c2 " , MYSQL_TYPE_STRING ,
" test_list_fields " , " test_list_fields " , current_db , 10 , " mysql " ) ;
2003-06-08 09:11:14 -07:00
2003-06-04 00:19:09 -07:00
mysql_free_result ( result ) ;
}
2004-06-04 18:38:18 +04:00
/* Test a memory ovverun bug */
2003-06-04 00:19:09 -07:00
static void test_mem_overun ( )
{
char buffer [ 10000 ] , field [ 10 ] ;
MYSQL_STMT * stmt ;
MYSQL_RES * field_res ;
2004-06-04 18:38:18 +04:00
int rc , i , length ;
2003-06-04 00:19:09 -07:00
myheader ( " test_mem_overun " ) ;
/*
2004-06-04 18:38:18 +04:00
Test a memory ovverun bug when a table had 1000 fields with
2003-06-04 00:19:09 -07:00
a row of data
*/
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists t_mem_overun " ) ;
2003-06-04 00:19:09 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strxmov ( buffer , " create table t_mem_overun( " , NullS ) ;
for ( i = 0 ; i < 1000 ; i + + )
2003-06-04 00:19:09 -07:00
{
2004-06-04 18:38:18 +04:00
sprintf ( field , " c%d int " , i ) ;
strxmov ( buffer , buffer , field , " , " , NullS ) ;
2003-06-04 00:19:09 -07:00
}
2004-06-04 18:38:18 +04:00
length = strlen ( buffer ) ;
buffer [ length - 2 ] = ' ) ' ;
buffer [ - - length ] = ' \0 ' ;
rc = mysql_real_query ( mysql , buffer , length ) ;
2003-06-04 00:19:09 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
strxmov ( buffer , " insert into t_mem_overun values( " , NullS ) ;
for ( i = 0 ; i < 1000 ; i + + )
2003-06-04 00:19:09 -07:00
{
2004-06-04 18:38:18 +04:00
strxmov ( buffer , buffer , " 1, " , NullS ) ;
2003-06-04 00:19:09 -07:00
}
2004-06-04 18:38:18 +04:00
length = strlen ( buffer ) ;
buffer [ length - 2 ] = ' ) ' ;
buffer [ - - length ] = ' \0 ' ;
rc = mysql_real_query ( mysql , buffer , length ) ;
2003-06-04 00:19:09 -07:00
myquery ( rc ) ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " select * from t_mem_overun " ) ;
2003-07-21 00:13:22 -07:00
myquery ( rc ) ;
2003-11-19 17:31:57 +02:00
assert ( 1 = = my_process_result ( mysql ) ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from t_mem_overun " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
field_res = mysql_stmt_result_metadata ( stmt ) ;
2003-06-04 00:19:09 -07:00
mytest ( field_res ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total fields : %d " , mysql_num_fields ( field_res ) ) ;
2003-11-19 17:31:57 +02:00
assert ( 1000 = = mysql_num_fields ( field_res ) ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-04 00:19:09 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2003-06-04 00:19:09 -07:00
2004-03-05 16:55:09 +03:00
mysql_free_result ( field_res ) ;
2003-06-04 00:19:09 -07:00
mysql_stmt_close ( stmt ) ;
}
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
/* Test mysql_stmt_free_result() */
2003-06-08 09:11:14 -07:00
static void test_free_result ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
char c2 [ 5 ] ;
2003-10-25 15:53:41 +02:00
ulong bl1 , l2 ;
int rc , c1 , bc1 ;
2003-06-08 09:11:14 -07:00
myheader ( " test_free_result " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_free_result " ) ;
2003-06-08 09:11:14 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table test_free_result( "
" c1 int primary key auto_increment) " ) ;
2003-06-08 09:11:14 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into test_free_result values(), (), () " ) ;
2003-06-08 09:11:14 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_free_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-06-08 09:11:14 -07:00
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & bc1 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_length = 0 ;
2003-06-08 09:11:14 -07:00
bind [ 0 ] . is_null = 0 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . length = & bl1 ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2003-10-25 15:53:41 +02:00
c2 [ 0 ] = ' \0 ' ; l2 = 0 ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) c2 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_length = 7 ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & l2 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
fprintf ( stdout , " \n col 0: %s(%ld) " , c2 , l2 ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( c2 , " 1 " , 1 ) = = 0 & & l2 = = 1 ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
c1 = 0 , l2 = 0 ;
2003-06-08 09:11:14 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & c1 ;
2003-06-08 09:11:14 -07:00
bind [ 0 ] . buffer_length = 0 ;
bind [ 0 ] . is_null = 0 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . length = & l2 ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
fprintf ( stdout , " \n col 0: %d(%ld) " , c1 , l2 ) ;
2004-06-04 18:38:18 +04:00
assert ( c1 = = 2 & & l2 = = 4 ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table test_free_result " ) ;
2003-06-08 09:11:14 -07:00
myquery_r ( rc ) ; /* error should be, COMMANDS OUT OF SYNC */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_free_result ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table test_free_result " ) ;
2003-06-08 09:11:14 -07:00
myquery ( rc ) ; /* should be successful */
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test mysql_stmt_store_result() */
2003-06-08 09:11:14 -07:00
static void test_free_store_result ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
char c2 [ 5 ] ;
2003-10-25 15:53:41 +02:00
ulong bl1 , l2 ;
int rc , c1 , bc1 ;
2003-06-08 09:11:14 -07:00
myheader ( " test_free_store_result " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table if exists test_free_result " ) ;
2003-06-08 09:11:14 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table test_free_result(c1 int primary key auto_increment) " ) ;
2003-06-08 09:11:14 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into test_free_result values(), (), () " ) ;
2003-06-08 09:11:14 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " select * from test_free_result " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-06-08 09:11:14 -07:00
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & bc1 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_length = 0 ;
2003-06-08 09:11:14 -07:00
bind [ 0 ] . is_null = 0 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . length = & bl1 ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_store_result ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2003-10-25 15:53:41 +02:00
c2 [ 0 ] = ' \0 ' ; l2 = 0 ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) c2 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . buffer_length = 7 ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = & l2 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
fprintf ( stdout , " \n col 1: %s(%ld) " , c2 , l2 ) ;
2004-06-04 18:38:18 +04:00
assert ( strncmp ( c2 , " 1 " , 1 ) = = 0 & & l2 = = 1 ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
c1 = 0 , l2 = 0 ;
2003-06-08 09:11:14 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & c1 ;
2003-06-08 09:11:14 -07:00
bind [ 0 ] . buffer_length = 0 ;
bind [ 0 ] . is_null = 0 ;
2003-10-25 15:53:41 +02:00
bind [ 0 ] . length = & l2 ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch_column ( stmt , bind , 0 , 0 ) ;
check_execute ( stmt , rc ) ;
2003-10-25 15:53:41 +02:00
fprintf ( stdout , " \n col 0: %d(%ld) " , c1 , l2 ) ;
2003-11-19 17:31:57 +02:00
assert ( c1 = = 2 & & l2 = = 4 ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_free_result ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-08 09:11:14 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table test_free_result " ) ;
myquery ( rc ) ;
2003-06-08 09:11:14 -07:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test SQLmode */
2003-06-24 10:43:57 -07:00
static void test_sqlmode ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 2 ] ;
char c1 [ 5 ] , c2 [ 5 ] ;
int rc ;
myheader ( " test_sqlmode " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_piping " ) ;
2003-06-24 10:43:57 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_piping(name varchar(10)) " ) ;
2003-06-24 10:43:57 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2003-06-24 10:43:57 -07:00
/* PIPES_AS_CONCAT */
2004-06-04 18:38:18 +04:00
strcpy ( query , " SET SQL_MODE= \" PIPES_AS_CONCAT \" " ) ;
fprintf ( stdout , " \n With %s " , query ) ;
rc = mysql_query ( mysql , query ) ;
2003-06-24 10:43:57 -07:00
myquery ( rc ) ;
strcpy ( query , " INSERT INTO test_piping VALUES(?||?) " ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n query: %s " , query ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total parameters: %ld " , mysql_stmt_param_count ( stmt ) ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-06-24 10:43:57 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) c1 ;
2003-06-24 10:43:57 -07:00
bind [ 0 ] . buffer_length = 2 ;
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) c2 ;
2003-06-24 10:43:57 -07:00
bind [ 1 ] . buffer_length = 3 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
strcpy ( c1 , " My " ) ; strcpy ( c2 , " SQL " ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_col_data ( " test_piping " , " name " , " MySQL " ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DELETE FROM test_piping " ) ;
2003-06-24 10:43:57 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2003-06-24 10:43:57 -07:00
strcpy ( query , " SELECT connection_id () " ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n query: %s " , query ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt_r ( stmt ) ;
2003-06-24 10:43:57 -07:00
/* ANSI */
2004-06-04 18:38:18 +04:00
strcpy ( query , " SET SQL_MODE= \" ANSI \" " ) ;
fprintf ( stdout , " \n With %s " , query ) ;
rc = mysql_query ( mysql , query ) ;
2003-06-24 10:43:57 -07:00
myquery ( rc ) ;
strcpy ( query , " INSERT INTO test_piping VALUES(?||?) " ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n query: %s " , query ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n total parameters: %ld " , mysql_stmt_param_count ( stmt ) ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
strcpy ( c1 , " My " ) ; strcpy ( c2 , " SQL " ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_col_data ( " test_piping " , " name " , " MySQL " ) ;
2003-06-24 10:43:57 -07:00
/* ANSI mode spaces ... */
strcpy ( query , " SELECT connection_id () " ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n query: %s " , query ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n returned 1 row \n " ) ;
2003-06-24 10:43:57 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
2003-06-24 10:43:57 -07:00
/* IGNORE SPACE MODE */
2004-06-04 18:38:18 +04:00
strcpy ( query , " SET SQL_MODE= \" IGNORE_SPACE \" " ) ;
fprintf ( stdout , " \n With %s " , query ) ;
rc = mysql_query ( mysql , query ) ;
2003-06-24 10:43:57 -07:00
myquery ( rc ) ;
strcpy ( query , " SELECT connection_id () " ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n query: %s " , query ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2003-11-19 17:31:57 +02:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n returned 1 row " ) ;
2003-06-24 10:43:57 -07:00
mysql_stmt_close ( stmt ) ;
}
2004-06-04 18:38:18 +04:00
/* Test for timestamp handling */
2003-07-21 00:13:22 -07:00
static void test_ts ( )
{
MYSQL_STMT * stmt ;
2003-07-30 02:01:53 -07:00
MYSQL_BIND bind [ 6 ] ;
2003-07-21 00:13:22 -07:00
MYSQL_TIME ts ;
2003-07-30 02:01:53 -07:00
MYSQL_RES * prep_res ;
2003-07-21 00:13:22 -07:00
char strts [ 30 ] ;
2004-05-19 05:09:10 +03:00
ulong length ;
2003-07-30 02:01:53 -07:00
int rc , field_count ;
char name ;
2003-07-21 00:13:22 -07:00
myheader ( " test_ts " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_ts " ) ;
2003-07-21 00:13:22 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_ts(a DATE, b TIME, c TIMESTAMP) " ) ;
2003-07-21 00:13:22 -07:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " INSERT INTO test_ts VALUES(?, ?, ?), (?, ?, ?) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-07-21 00:13:22 -07:00
ts . year = 2003 ;
ts . month = 07 ;
ts . day = 12 ;
ts . hour = 21 ;
ts . minute = 07 ;
ts . second = 46 ;
2004-03-05 16:55:09 +03:00
ts . second_part = 0 ;
2004-06-04 18:38:18 +04:00
length = ( long ) ( strmov ( strts , " 2003-07-12 21:07:46 " ) - strts ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-07-21 00:13:22 -07:00
2003-07-30 02:01:53 -07:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_TIMESTAMP ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & ts ;
2003-07-30 02:01:53 -07:00
bind [ 0 ] . buffer_length = sizeof ( ts ) ;
2003-07-21 00:13:22 -07:00
2003-07-30 02:01:53 -07:00
bind [ 2 ] = bind [ 1 ] = bind [ 0 ] ;
bind [ 3 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 3 ] . buffer = ( void * ) strts ;
2003-07-30 02:01:53 -07:00
bind [ 3 ] . buffer_length = sizeof ( strts ) ;
bind [ 3 ] . length = & length ;
bind [ 5 ] = bind [ 4 ] = bind [ 3 ] ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-07-21 00:13:22 -07:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_col_data ( " test_ts " , " a " , " 2003-07-12 " ) ;
verify_col_data ( " test_ts " , " b " , " 21:07:46 " ) ;
verify_col_data ( " test_ts " , " c " , " 2003-07-12 21:07:46 " ) ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT * FROM test_ts " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
prep_res = mysql_stmt_result_metadata ( stmt ) ;
2003-07-30 02:01:53 -07:00
mytest ( prep_res ) ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
assert ( 2 = = my_process_stmt_result ( stmt ) ) ;
2003-07-30 02:01:53 -07:00
field_count = mysql_num_fields ( prep_res ) ;
2003-07-21 00:13:22 -07:00
2003-07-30 02:01:53 -07:00
mysql_free_result ( prep_res ) ;
mysql_stmt_close ( stmt ) ;
2003-07-21 00:13:22 -07:00
2003-07-30 02:01:53 -07:00
for ( name = ' a ' ; field_count - - ; name + + )
{
int row_count = 0 ;
2003-07-21 00:13:22 -07:00
2004-06-04 18:38:18 +04:00
sprintf ( query , " SELECT a, b, c FROM test_ts WHERE %c=? " , name ) ;
2003-07-30 02:01:53 -07:00
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n %s " , query ) ;
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-07-30 02:01:53 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2003-07-30 02:01:53 -07:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-07-30 02:01:53 -07:00
2004-06-04 18:38:18 +04:00
while ( mysql_stmt_fetch ( stmt ) = = 0 )
2003-07-30 02:01:53 -07:00
row_count + + ;
fprintf ( stdout , " \n returned '%d' rows " , row_count ) ;
2003-11-19 17:31:57 +02:00
assert ( row_count = = 2 ) ;
2003-07-30 02:01:53 -07:00
mysql_stmt_close ( stmt ) ;
}
2003-07-21 00:13:22 -07:00
}
2004-06-04 18:38:18 +04:00
/* Test for bug #1500. */
2003-12-08 13:30:14 +03:00
2003-11-23 00:48:18 +03:00
static void test_bug1500 ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 3 ] ;
int rc ;
2004-06-04 18:38:18 +04:00
long int_data [ 3 ] = { 2 , 3 , 4 } ;
2003-11-26 20:23:28 +03:00
const char * data ;
2003-11-23 00:48:18 +03:00
myheader ( " test_bug1500 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bg1500 " ) ;
2003-11-23 00:48:18 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bg1500 (i INT) " ) ;
2003-11-23 00:48:18 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO test_bg1500 VALUES (1), (2) " ) ;
2003-11-23 00:48:18 +03:00
myquery ( rc ) ;
rc = mysql_commit ( mysql ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT i FROM test_bg1500 WHERE i IN (?, ?, ?) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 3 ) ;
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2003-11-23 00:48:18 +03:00
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) int_data ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2003-11-23 00:48:18 +03:00
bind [ 2 ] = bind [ 1 ] = bind [ 0 ] ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) ( int_data + 1 ) ;
bind [ 2 ] . buffer = ( void * ) ( int_data + 2 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-11-23 00:48:18 +03:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_bg1500 " ) ;
2003-11-23 00:48:18 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_bg1500 (s VARCHAR(25), FULLTEXT(s)) " ) ;
2003-11-23 00:48:18 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2003-11-23 00:48:18 +03:00
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" INSERT INTO test_bg1500 VALUES ('Gravedigger'), ('Greed'), ('Hollow Dogs') " ) ;
2003-11-23 00:48:18 +03:00
myquery ( rc ) ;
rc = mysql_commit ( mysql ) ;
myquery ( rc ) ;
2004-02-11 12:32:47 +01:00
stmt = mysql_simple_prepare ( mysql ,
" SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (?) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
2003-11-23 00:48:18 +03:00
data = " Dogs " ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) data ;
2003-11-23 00:48:18 +03:00
bind [ 0 ] . buffer_length = strlen ( data ) ;
bind [ 0 ] . is_null = 0 ;
bind [ 0 ] . length = 0 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-11-23 00:48:18 +03:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
2004-06-04 18:38:18 +04:00
/*
FIXME If we comment out next string server will crash too : (
2003-11-23 00:48:18 +03:00
This is another manifestation of bug # 1663
*/
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
2003-11-23 00:48:18 +03:00
/* This should work too */
2004-02-11 12:32:47 +01:00
stmt = mysql_simple_prepare ( mysql ,
2004-06-04 18:38:18 +04:00
" SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (CONCAT(?, 'digger')) " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
verify_param_count ( stmt , 1 ) ;
2003-11-23 00:48:18 +03:00
data = " Grave " ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) data ;
2003-11-23 00:48:18 +03:00
bind [ 0 ] . buffer_length = strlen ( data ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2003-11-23 00:48:18 +03:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
mysql_stmt_close ( stmt ) ;
}
2003-06-24 10:43:57 -07:00
2004-06-04 18:38:18 +04:00
2003-11-25 17:41:12 +03:00
static void test_bug1946 ( )
{
MYSQL_STMT * stmt ;
int rc ;
2003-11-26 15:22:30 +01:00
const char * query = " INSERT INTO prepare_command VALUES (?) " ;
2003-11-25 17:41:12 +03:00
myheader ( " test_bug1946 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS prepare_command " ) ;
2003-11-25 17:41:12 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE prepare_command(ID INT) " ) ;
2003-11-25 17:41:12 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2003-11-25 17:41:12 +03:00
rc = mysql_real_query ( mysql , query , strlen ( query ) ) ;
assert ( rc ! = 0 ) ;
fprintf ( stdout , " Got error (as expected): \n " ) ;
myerror ( NULL ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE prepare_command " ) ;
2003-11-25 17:41:12 +03:00
}
2004-06-04 18:38:18 +04:00
2004-02-11 12:32:47 +01:00
static void test_parse_error_and_bad_length ( )
{
MYSQL_STMT * stmt ;
int rc ;
/* check that we get 4 syntax errors over the 4 calls */
myheader ( " test_parse_error_and_bad_length " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " SHOW DATABAAAA " ) ;
2004-02-11 12:32:47 +01:00
assert ( rc ) ;
fprintf ( stdout , " Got error (as expected): '%s' \n " , mysql_error ( mysql ) ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_real_query ( mysql , " SHOW DATABASES " , 100 ) ;
2004-02-11 12:32:47 +01:00
assert ( rc ) ;
fprintf ( stdout , " Got error (as expected): '%s' \n " , mysql_error ( mysql ) ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SHOW DATABAAAA " ) ;
2004-02-11 12:32:47 +01:00
assert ( ! stmt ) ;
fprintf ( stdout , " Got error (as expected): '%s' \n " , mysql_error ( mysql ) ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_stmt_init ( mysql ) ;
assert ( stmt ) ;
assert ( mysql_stmt_prepare ( stmt , " SHOW DATABASES " , 100 ) ! = 0 ) ;
fprintf ( stdout , " Got error (as expected): '%s' \n " , mysql_stmt_error ( stmt ) ) ;
mysql_stmt_close ( stmt ) ;
2004-02-11 12:32:47 +01:00
}
2003-11-25 17:41:12 +03:00
2004-02-12 11:12:16 +02:00
2004-02-06 16:03:09 +03:00
static void test_bug2247 ( )
{
MYSQL_STMT * stmt ;
MYSQL_RES * res ;
int rc ;
int i ;
const char * create = " CREATE TABLE bug2247(id INT UNIQUE AUTO_INCREMENT) " ;
const char * insert = " INSERT INTO bug2247 VALUES (NULL) " ;
const char * select = " SELECT id FROM bug2247 " ;
const char * update = " UPDATE bug2247 SET id=id+10 " ;
const char * drop = " DROP TABLE IF EXISTS bug2247 " ;
ulonglong exp_count ;
enum { NUM_ROWS = 5 } ;
myheader ( " test_bug2247 " ) ;
2004-06-04 18:38:18 +04:00
2004-02-06 16:03:09 +03:00
fprintf ( stdout , " \n Checking if stmt_affected_rows is not affected by \n "
" mysql_query ... " ) ;
/* create table and insert few rows */
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , drop ) ;
2004-02-06 16:03:09 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-02-06 16:03:09 +03:00
rc = mysql_query ( mysql , create ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , insert ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-02-06 16:03:09 +03:00
for ( i = 0 ; i < NUM_ROWS ; + + i )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-02-06 16:03:09 +03:00
}
exp_count = mysql_stmt_affected_rows ( stmt ) ;
assert ( exp_count = = 1 ) ;
rc = mysql_query ( mysql , select ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
/*
2004-02-06 16:03:09 +03:00
mysql_store_result overwrites mysql - > affected_rows . Check that
mysql_stmt_affected_rows ( ) returns the same value , whereas
mysql_affected_rows ( ) value is correct .
*/
res = mysql_store_result ( mysql ) ;
mytest ( res ) ;
assert ( mysql_affected_rows ( mysql ) = = NUM_ROWS ) ;
assert ( exp_count = = mysql_stmt_affected_rows ( stmt ) ) ;
2004-06-04 18:38:18 +04:00
2004-02-06 16:03:09 +03:00
rc = mysql_query ( mysql , update ) ;
myquery ( rc ) ;
assert ( mysql_affected_rows ( mysql ) = = NUM_ROWS ) ;
assert ( exp_count = = mysql_stmt_affected_rows ( stmt ) ) ;
mysql_free_result ( res ) ;
mysql_stmt_close ( stmt ) ;
/* check that mysql_stmt_store_result modifies mysql_stmt_affected_rows */
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , select ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-02-06 16:03:09 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-02-06 16:03:09 +03:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-02-06 16:03:09 +03:00
exp_count = mysql_stmt_affected_rows ( stmt ) ;
assert ( exp_count = = NUM_ROWS ) ;
rc = mysql_query ( mysql , insert ) ;
myquery ( rc ) ;
assert ( mysql_affected_rows ( mysql ) = = 1 ) ;
assert ( mysql_stmt_affected_rows ( stmt ) = = exp_count ) ;
2004-06-04 18:38:18 +04:00
2004-02-06 16:03:09 +03:00
mysql_stmt_close ( stmt ) ;
fprintf ( stdout , " OK " ) ;
}
2004-02-14 13:31:39 +02:00
2004-02-08 20:14:13 +02:00
static void test_subqueries ( )
{
MYSQL_STMT * stmt ;
int rc , i ;
2004-06-04 18:38:18 +04:00
const char * query = " SELECT (SELECT SUM(a+b) FROM t2 where t1.b=t2.b GROUP BY t1.a LIMIT 1) as scalar_s, exists (select 1 from t2 where t2.a/2=t1.a) as exists_s, a in (select a+3 from t2) as in_s, (a-1, b-1) in (select a, b from t2) as in_row_s FROM t1, (select a x, b y from t2) tt WHERE x=a " ;
2004-02-08 20:14:13 +02:00
myheader ( " test_subquery " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2 " ) ;
2004-02-08 20:14:13 +02:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1 (a int , b int); " ) ;
2004-02-08 20:14:13 +02:00
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t1 values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5); " ) ;
2004-02-08 20:14:13 +02:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t2 select * from t1; " ) ;
2004-02-08 20:14:13 +02:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-02-08 20:14:13 +02:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-02-08 20:14:13 +02:00
assert ( 5 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE t1, t2 " ) ;
2004-02-08 20:14:13 +02:00
myquery ( rc ) ;
}
static void test_bad_union ( )
{
MYSQL_STMT * stmt ;
const char * query = " SELECT 1, 2 union SELECT 1 " ;
myheader ( " test_bad_union " ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-02-08 20:14:13 +02:00
assert ( stmt = = 0 ) ;
2004-06-04 18:38:18 +04:00
myerror ( NULL ) ;
2004-02-08 20:14:13 +02:00
}
2004-06-04 18:38:18 +04:00
2004-02-08 20:57:14 +02:00
static void test_distinct ( )
{
MYSQL_STMT * stmt ;
int rc , i ;
2004-06-04 18:38:18 +04:00
const char * query =
2004-02-12 18:50:00 +02:00
" SELECT 2+count(distinct b), group_concat(a) FROM t1 group by a " ;
2004-02-08 20:57:14 +02:00
myheader ( " test_subquery " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
2004-02-08 20:57:14 +02:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1 (a int , b int); " ) ;
2004-02-08 20:57:14 +02:00
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t1 values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), \
( 1 , 10 ) , ( 2 , 20 ) , ( 3 , 30 ) , ( 4 , 40 ) , ( 5 , 50 ) ; " );
2004-02-08 20:57:14 +02:00
myquery ( rc ) ;
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-02-12 18:50:00 +02:00
assert ( 5 = = my_process_stmt_result ( stmt ) ) ;
2004-02-08 20:57:14 +02:00
mysql_stmt_close ( stmt ) ;
}
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
myquery ( rc ) ;
}
2003-11-25 17:41:12 +03:00
2004-06-04 18:38:18 +04:00
2004-02-10 16:58:20 +03:00
/*
2004-06-04 18:38:18 +04:00
Test for bug # 2248 " mysql_fetch without prior mysql_stmt_execute hangs "
2004-02-10 16:58:20 +03:00
*/
static void test_bug2248 ( )
{
MYSQL_STMT * stmt ;
int rc ;
const char * query1 = " SELECT DATABASE() " ;
const char * query2 = " INSERT INTO test_bug2248 VALUES (10) " ;
2004-06-04 18:38:18 +04:00
2004-02-10 16:58:20 +03:00
myheader ( " test_bug2248 " ) ;
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_bug2248 " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-02-10 16:58:20 +03:00
rc = mysql_query ( mysql , " CREATE TABLE test_bug2248 (id int) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query1 ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-02-10 16:58:20 +03:00
/* This should not hang */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute_r ( stmt , rc ) ;
2004-02-10 16:58:20 +03:00
/* And this too */
rc = mysql_stmt_store_result ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute_r ( stmt , rc ) ;
2004-02-10 16:58:20 +03:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query2 ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-02-10 16:58:20 +03:00
/* This too should not hang but should return proper error */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
assert ( rc = = MYSQL_NO_DATA ) ;
2004-02-10 16:58:20 +03:00
/* This too should not hang but should not bark */
rc = mysql_stmt_store_result ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
2004-02-10 16:58:20 +03:00
/* This should return proper error */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
check_execute_r ( stmt , rc ) ;
assert ( rc = = MYSQL_NO_DATA ) ;
2004-02-10 16:58:20 +03:00
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE test_bug2248 " ) ;
2004-02-10 16:58:20 +03:00
myquery ( rc ) ;
}
2004-06-04 18:38:18 +04:00
2004-03-17 14:26:26 +02:00
static void test_subqueries_ref ( )
{
MYSQL_STMT * stmt ;
int rc , i ;
const char * query = " SELECT a as ccc from t1 where a+1=(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) " ;
myheader ( " test_subquery_ref " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
2004-03-17 14:26:26 +02:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1 (a int); " ) ;
2004-03-17 14:26:26 +02:00
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t1 values (1), (2), (3), (4), (5); " ) ;
2004-03-17 14:26:26 +02:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-03-17 14:26:26 +02:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-03-17 14:26:26 +02:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
myquery ( rc ) ;
}
2004-02-10 16:58:20 +03:00
2004-03-23 14:26:54 +02:00
static void test_union ( )
{
MYSQL_STMT * stmt ;
int rc ;
myheader ( " test_union " ) ;
2004-06-04 18:38:18 +04:00
2004-03-23 14:26:54 +02:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2 " ) ;
myquery ( rc ) ;
rc = mysql_query ( mysql ,
" CREATE TABLE t1 "
" (id INTEGER NOT NULL PRIMARY KEY, "
" name VARCHAR(20) NOT NULL) " ) ;
myquery ( rc ) ;
rc = mysql_query ( mysql ,
" INSERT INTO t1 (id, name) VALUES "
" (2, 'Ja'), (3, 'Ede'), "
" (4, 'Haag'), (5, 'Kabul'), "
" (6, 'Almere'), (7, 'Utrecht'), "
" (8, 'Qandahar'), (9, 'Amsterdam'), "
" (10, 'Amersfoort'), (11, 'Constantine') " ) ;
myquery ( rc ) ;
rc = mysql_query ( mysql ,
" CREATE TABLE t2 "
" (id INTEGER NOT NULL PRIMARY KEY, "
" name VARCHAR(20) NOT NULL) " ) ;
myquery ( rc ) ;
rc = mysql_query ( mysql ,
" INSERT INTO t2 (id, name) VALUES "
" (4, 'Guam'), (5, 'Aruba'), "
" (6, 'Angola'), (7, 'Albania'), "
" (8, 'Anguilla'), (9, 'Argentina'), "
" (10, 'Azerbaijan'), (11, 'Afghanistan'), "
" (12, 'Burkina Faso'), (13, 'Faroe Islands') " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-03-23 14:26:54 +02:00
stmt = mysql_simple_prepare ( mysql ,
" SELECT t1.name FROM t1 UNION "
" SELECT t2.name FROM t2 " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-03-23 14:26:54 +02:00
rc = mysql_stmt_execute ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
2004-03-23 14:26:54 +02:00
assert ( 20 = = my_process_stmt_result ( stmt ) ) ;
mysql_stmt_close ( stmt ) ;
rc = mysql_query ( mysql , " DROP TABLE t1, t2 " ) ;
myquery ( rc ) ;
}
2004-06-04 18:38:18 +04:00
2004-03-25 17:42:13 +01:00
static void test_bug3117 ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND buffer ;
longlong lii ;
ulong length ;
my_bool is_null ;
int rc ;
myheader ( " test_bug3117 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
2004-03-25 17:42:13 +01:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1 (id int auto_increment primary key) " ) ;
2004-03-25 17:42:13 +01:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , " SELECT LAST_INSERT_ID() " ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-03-25 17:42:13 +01:00
rc = mysql_query ( mysql , " INSERT INTO t1 VALUES (NULL) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-03-25 17:42:13 +01:00
2004-06-04 18:38:18 +04:00
bzero ( ( char * ) & buffer , sizeof ( buffer ) ) ;
2004-03-25 17:42:13 +01:00
buffer . buffer_type = MYSQL_TYPE_LONGLONG ;
buffer . buffer_length = sizeof ( lii ) ;
2004-06-25 17:04:33 +04:00
buffer . buffer = ( void * ) & lii ;
2004-03-25 17:42:13 +01:00
buffer . length = & length ;
buffer . is_null = & is_null ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_result ( stmt , & buffer ) ;
check_execute ( stmt , rc ) ;
2004-03-25 17:42:13 +01:00
rc = mysql_stmt_store_result ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
2004-03-25 17:42:13 +01:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-03-25 17:42:13 +01:00
assert ( is_null = = 0 & & lii = = 1 ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \t LAST_INSERT_ID()= 1 ok \n " ) ;
2004-03-25 17:42:13 +01:00
rc = mysql_query ( mysql , " INSERT INTO t1 VALUES (NULL) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-03-25 17:42:13 +01:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-03-25 17:42:13 +01:00
assert ( is_null = = 0 & & lii = = 2 ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \t LAST_INSERT_ID()= 2 ok \n " ) ;
2004-03-25 17:42:13 +01:00
mysql_stmt_close ( stmt ) ;
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
myquery ( rc ) ;
}
2004-04-01 03:00:38 +03:00
2004-04-06 00:10:43 +03:00
static void test_join ( )
2004-04-01 03:00:38 +03:00
{
MYSQL_STMT * stmt ;
2004-04-03 17:23:41 +03:00
int rc , i , j ;
2004-06-04 18:38:18 +04:00
const char * query [ ] = { " SELECT * FROM t2 join t1 on (t1.a=t2.a) " ,
" SELECT * FROM t2 natural join t1 " ,
" SELECT * FROM t2 join t1 using(a) " ,
" SELECT * FROM t2 left join t1 on(t1.a=t2.a) " ,
" SELECT * FROM t2 natural left join t1 " ,
" SELECT * FROM t2 left join t1 using(a) " ,
" SELECT * FROM t2 right join t1 on(t1.a=t2.a) " ,
" SELECT * FROM t2 natural right join t1 " ,
" SELECT * FROM t2 right join t1 using(a) " } ;
2004-04-03 17:23:41 +03:00
2004-04-06 00:10:43 +03:00
myheader ( " test_join " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2 " ) ;
2004-04-01 03:00:38 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1 (a int , b int); " ) ;
2004-04-01 03:00:38 +03:00
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t1 values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5); " ) ;
2004-04-01 03:00:38 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t2 (a int , c int); " ) ;
2004-04-01 03:00:38 +03:00
myquery ( rc ) ;
2004-04-03 17:23:41 +03:00
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t2 values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5); " ) ;
2004-04-06 00:10:43 +03:00
myquery ( rc ) ;
2004-04-03 17:23:41 +03:00
for ( j = 0 ; j < 9 ; j + + )
2004-04-01 03:00:38 +03:00
{
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query [ j ] ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-04-03 17:23:41 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-04-03 17:23:41 +03:00
assert ( 5 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
2004-04-01 03:00:38 +03:00
}
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE t1, t2 " ) ;
2004-04-01 03:00:38 +03:00
myquery ( rc ) ;
}
2004-04-03 11:13:51 +03:00
static void test_selecttmp ( )
{
MYSQL_STMT * stmt ;
int rc , i ;
2004-06-04 18:38:18 +04:00
const char * query = " select a, (select count(distinct t1.b) as sum from t1, t2 where t1.a=t2.a and t2.b > 0 and t1.a <= t3.b group by t1.a order by sum limit 1) from t3 " ;
2004-04-03 11:13:51 +03:00
myheader ( " test_select_tmp " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2, t3 " ) ;
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1 (a int , b int); " ) ;
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t2 (a int, b int); " ) ;
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t3 (a int, b int); " ) ;
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t1 values (0, 100), (1, 2), (1, 3), (2, 2), (2, 7), \
( 2 , - 1 ) , ( 3 , 10 ) ; " );
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t2 values (0, 0), (1, 1), (2, 1), (3, 1), (4, 1); " ) ;
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
rc = mysql_query ( mysql ,
2004-06-04 18:38:18 +04:00
" insert into t3 values (3, 3), (2, 2), (1, 1); " ) ;
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-04-03 11:13:51 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-04-03 11:13:51 +03:00
assert ( 3 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE t1, t2, t3 " ) ;
2004-04-03 11:13:51 +03:00
myquery ( rc ) ;
}
2004-04-06 00:10:43 +03:00
static void test_create_drop ( )
{
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
MYSQL_STMT * stmt_create , * stmt_drop , * stmt_select , * stmt_create_select ;
2004-04-06 00:10:43 +03:00
char * query ;
int rc , i ;
myheader ( " test_table_manipulation " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2 " ) ;
2004-04-06 00:10:43 +03:00
myquery ( rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t2 (a int); " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 (a int); " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
rc = mysql_query ( mysql , " insert into t2 values (3), (2), (1); " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-04-06 00:10:43 +03:00
query = ( char * ) " create table t1 (a int) " ;
2004-06-04 18:38:18 +04:00
stmt_create = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_create ) ;
2004-04-06 00:10:43 +03:00
query = ( char * ) " drop table t1 " ;
2004-06-04 18:38:18 +04:00
stmt_drop = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_drop ) ;
2004-04-06 00:10:43 +03:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
query = ( char * ) " select a in (select a from t2) from t1 " ;
2004-06-04 18:38:18 +04:00
stmt_select = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_select ) ;
2004-06-04 18:38:18 +04:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
myquery ( rc ) ;
query = ( char * ) " create table t1 select a from t2 " ;
2004-06-04 18:38:18 +04:00
stmt_create_select = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_create_select ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
2004-04-06 00:10:43 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_create ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_create , rc ) ;
2004-04-06 00:10:43 +03:00
fprintf ( stdout , " created %i \n " , i ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_select ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_select , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
assert ( 0 = = my_process_stmt_result ( stmt_select ) ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_drop ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_drop , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
fprintf ( stdout , " droped %i \n " , i ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_create_select ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_create , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
fprintf ( stdout , " created select %i \n " , i ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_select ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_select , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
assert ( 3 = = my_process_stmt_result ( stmt_select ) ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_drop ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_drop , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
fprintf ( stdout , " droped %i \n " , i ) ;
2004-04-06 00:10:43 +03:00
}
2004-06-04 18:38:18 +04:00
2004-04-06 00:10:43 +03:00
mysql_stmt_close ( stmt_create ) ;
mysql_stmt_close ( stmt_drop ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
mysql_stmt_close ( stmt_select ) ;
mysql_stmt_close ( stmt_create_select ) ;
rc = mysql_query ( mysql , " DROP TABLE t2 " ) ;
myquery ( rc ) ;
2004-04-06 00:10:43 +03:00
}
static void test_rename ( )
{
MYSQL_STMT * stmt ;
const char * query = " rename table t1 to t2, t3 to t4 " ;
int rc ;
myheader ( " test_table_manipulation " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2, t3, t4 " ) ;
2004-04-06 00:10:43 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-04-06 00:10:43 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 (a int) " ) ;
2004-04-06 00:10:43 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute_r ( stmt , rc ) ;
2004-04-06 00:10:43 +03:00
fprintf ( stdout , " rename without t3 \n " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t3 (a int) " ) ;
2004-04-06 00:10:43 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-04-06 00:10:43 +03:00
fprintf ( stdout , " rename with t3 \n " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute_r ( stmt , rc ) ;
2004-04-06 00:10:43 +03:00
fprintf ( stdout , " rename renamed \n " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " rename table t2 to t1, t4 to t3 " ) ;
2004-04-06 00:10:43 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-04-06 00:10:43 +03:00
fprintf ( stdout , " rename reverted \n " ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE t2, t4 " ) ;
2004-04-06 00:10:43 +03:00
myquery ( rc ) ;
}
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
static void test_do_set ( )
{
MYSQL_STMT * stmt_do , * stmt_set ;
char * query ;
int rc , i ;
myheader ( " test_do_set " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 (a int) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
query = ( char * ) " do @var:=(1 in (select * from t1)) " ;
2004-06-04 18:38:18 +04:00
stmt_do = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_do ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
query = ( char * ) " set @var=(1 in (select * from t1)) " ;
2004-06-04 18:38:18 +04:00
stmt_set = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_set ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_do ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_do , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
fprintf ( stdout , " do %i \n " , i ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_set ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_set , rc ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " set %i \n " , i ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
}
2004-06-04 18:38:18 +04:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
mysql_stmt_close ( stmt_do ) ;
mysql_stmt_close ( stmt_set ) ;
}
2004-06-04 18:38:18 +04:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
static void test_multi ( )
{
MYSQL_STMT * stmt_delete , * stmt_update , * stmt_select1 , * stmt_select2 ;
char * query ;
MYSQL_BIND bind [ 1 ] ;
int rc , i ;
2004-05-19 05:09:10 +03:00
long param = 1 ;
ulong length = 1 ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myheader ( " test_multi " ) ;
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & param ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
bind [ 0 ] . length = & length ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2 " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 (a int, b int) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t2 (a int, b int) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t1 values (3, 3), (2, 2), (1, 1) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t2 values (3, 3), (2, 2), (1, 1) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
query = ( char * ) " delete t1, t2 from t1, t2 where t1.a=t2.a and t1.b=10 " ;
stmt_delete = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_delete ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
2004-06-04 18:38:18 +04:00
query = ( char * ) " update t1, t2 set t1.b=10, t2.b=10 where t1.a=t2.a and t1.b=? " ;
stmt_update = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_update ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
query = ( char * ) " select * from t1 " ;
2004-06-04 18:38:18 +04:00
stmt_select1 = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_select1 ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
query = ( char * ) " select * from t2 " ;
2004-06-04 18:38:18 +04:00
stmt_select2 = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_select2 ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt_update , bind ) ;
check_execute ( stmt_update , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_update ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_update , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
fprintf ( stdout , " update %ld \n " , param ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_delete ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_delete , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
fprintf ( stdout , " delete %ld \n " , param ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_select1 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_select1 , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
assert ( ( uint ) ( 3 - param ) = = my_process_stmt_result ( stmt_select1 ) ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_select2 ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_select2 , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
assert ( ( uint ) ( 3 - param ) = = my_process_stmt_result ( stmt_select2 ) ) ;
param + + ;
}
mysql_stmt_close ( stmt_delete ) ;
mysql_stmt_close ( stmt_update ) ;
mysql_stmt_close ( stmt_select1 ) ;
mysql_stmt_close ( stmt_select2 ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table t1, t2 " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
}
static void test_insert_select ( )
{
MYSQL_STMT * stmt_insert , * stmt_select ;
char * query ;
2004-04-08 11:07:37 +03:00
int rc ;
uint i ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myheader ( " test_insert_select " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2 " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 (a int) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t2 (a int) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t2 values (1) " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
query = ( char * ) " insert into t1 select a from t2 " ;
2004-06-04 18:38:18 +04:00
stmt_insert = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_insert ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
query = ( char * ) " select * from t1 " ;
2004-06-04 18:38:18 +04:00
stmt_select = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_select ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_insert ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_insert , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
fprintf ( stdout , " insert %u \n " , i ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt_select ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_select , rc ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
assert ( ( i + 1 ) = = my_process_stmt_result ( stmt_select ) ) ;
}
mysql_stmt_close ( stmt_insert ) ;
mysql_stmt_close ( stmt_select ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table t1, t2 " ) ;
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
myquery ( rc ) ;
}
2004-04-08 11:07:37 +03:00
static void test_bind_nagative ( )
{
MYSQL_STMT * stmt_insert ;
char * query ;
int rc ;
MYSQL_BIND bind [ 1 ] ;
2004-06-04 18:38:18 +04:00
long my_val = 0L ;
ulong my_length = 0L ;
long my_null = 0L ;
2004-04-08 11:07:37 +03:00
myheader ( " test_insert_select " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
2004-04-08 11:07:37 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create temporary table t1 (c1 int unsigned) " ) ;
2004-04-08 11:07:37 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " INSERT INTO t1 VALUES (1), (-1) " ) ;
2004-04-08 11:07:37 +03:00
myquery ( rc ) ;
query = ( char * ) " INSERT INTO t1 VALUES (?) " ;
2004-06-04 18:38:18 +04:00
stmt_insert = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt_insert ) ;
2004-04-08 11:07:37 +03:00
/* bind parameters */
2004-06-04 18:38:18 +04:00
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-04-08 11:07:37 +03:00
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & my_val ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . length = & my_length ;
bind [ 0 ] . is_null = ( char * ) & my_null ;
rc = mysql_stmt_bind_param ( stmt_insert , bind ) ;
check_execute ( stmt_insert , rc ) ;
2004-04-08 11:07:37 +03:00
2004-06-04 18:38:18 +04:00
my_val = - 1 ;
rc = mysql_stmt_execute ( stmt_insert ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt_insert , rc ) ;
2004-04-08 11:07:37 +03:00
mysql_stmt_close ( stmt_insert ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " drop table t1 " ) ;
2004-04-08 11:07:37 +03:00
myquery ( rc ) ;
}
2004-06-04 18:38:18 +04:00
2004-04-08 23:28:47 +03:00
static void test_derived ( )
{
MYSQL_STMT * stmt ;
int rc , i ;
MYSQL_BIND bind [ 1 ] ;
2004-06-04 18:38:18 +04:00
long my_val = 0L ;
ulong my_length = 0L ;
long my_null = 0L ;
2004-04-08 23:28:47 +03:00
const char * query =
" select count(1) from (select f.id from t1 f where f.id=?) as x " ;
myheader ( " test_derived " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
2004-04-08 23:28:47 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 (id int(8), primary key (id)) \
2004-04-08 23:28:47 +03:00
TYPE = InnoDB DEFAULT CHARSET = utf8 " );
myquery ( rc ) ;
rc = mysql_query ( mysql , " insert into t1 values (1) " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-04-08 23:28:47 +03:00
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & my_val ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . length = & my_length ;
bind [ 0 ] . is_null = ( char * ) & my_null ;
2004-04-08 23:28:47 +03:00
my_val = 1 ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2004-04-08 23:28:47 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-04-08 23:28:47 +03:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
myquery ( rc ) ;
}
2004-04-09 10:30:07 +03:00
static void test_xjoin ( )
{
MYSQL_STMT * stmt ;
int rc , i ;
const char * query =
2004-06-04 18:38:18 +04:00
" select t.id, p1.value, n1.value, p2.value, n2.value from t3 t LEFT JOIN t1 p1 ON (p1.id=t.param1_id) LEFT JOIN t2 p2 ON (p2.id=t.param2_id) LEFT JOIN t4 n1 ON (n1.id=p1.name_id) LEFT JOIN t4 n2 ON (n2.id=p2.name_id) where t.id=1 " ;
2004-04-09 10:30:07 +03:00
myheader ( " test_xjoin " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1, t2, t3, t4 " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t3 (id int(8), param1_id int(8), param2_id int(8)) TYPE=InnoDB DEFAULT CHARSET=utf8 " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t1 ( id int(8), name_id int(8), value varchar(10)) TYPE=InnoDB DEFAULT CHARSET=utf8 " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t2 (id int(8), name_id int(8), value varchar(10)) TYPE=InnoDB DEFAULT CHARSET=utf8; " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " create table t4(id int(8), value varchar(10)) TYPE=InnoDB DEFAULT CHARSET=utf8 " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t3 values (1, 1, 1), (2, 2, null) " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t1 values (1, 1, 'aaa'), (2, null, 'bbb') " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t2 values (1, 2, 'ccc') " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " insert into t4 values (1, 'Name1'), (2, null) " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-04-30 14:02:17 +03:00
check_stmt ( stmt ) ;
2004-04-09 10:30:07 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:02:17 +03:00
check_execute ( stmt , rc ) ;
2004-04-09 10:30:07 +03:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE t1, t2, t3, t4 " ) ;
2004-04-09 10:30:07 +03:00
myquery ( rc ) ;
}
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
static void test_bug3035 ( )
{
MYSQL_STMT * stmt ;
int rc ;
2004-05-04 15:02:38 +03:00
MYSQL_BIND bind_array [ 12 ] ;
2004-04-30 03:00:19 +04:00
int8 int8_val ;
uint8 uint8_val ;
int16 int16_val ;
uint16 uint16_val ;
int32 int32_val ;
uint32 uint32_val ;
longlong int64_val ;
ulonglong uint64_val ;
2004-05-04 15:02:38 +03:00
double double_val , udouble_val ;
2004-06-04 18:38:18 +04:00
char longlong_as_string [ 22 ] , ulonglong_as_string [ 22 ] ;
2004-04-30 03:00:19 +04:00
/* mins and maxes */
const int8 int8_min = - 128 ;
const int8 int8_max = 127 ;
const uint8 uint8_min = 0 ;
const uint8 uint8_max = 255 ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
const int16 int16_min = - 32768 ;
const int16 int16_max = 32767 ;
const uint16 uint16_min = 0 ;
const uint16 uint16_max = 65535 ;
const int32 int32_max = 2147483647L ;
const int32 int32_min = - int32_max - 1 ;
const uint32 uint32_min = 0 ;
const uint32 uint32_max = 4294967295U ;
/* it might not work okay everyplace */
2004-05-04 15:02:38 +03:00
const longlong int64_max = LL ( 9223372036854775807 ) ;
2004-04-30 03:00:19 +04:00
const longlong int64_min = - int64_max - 1 ;
const ulonglong uint64_min = 0U ;
2004-05-04 15:02:38 +03:00
const ulonglong uint64_max = ULL ( 18446744073709551615 ) ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
const char * stmt_text ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
myheader ( " test_bug3035 " ) ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
stmt_text = " DROP TABLE IF EXISTS t1 " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
stmt_text = " CREATE TABLE t1 (i8 TINYINT, ui8 TINYINT UNSIGNED, "
" i16 SMALLINT, ui16 SMALLINT UNSIGNED, "
" i32 INT, ui32 INT UNSIGNED, "
" i64 BIGINT, ui64 BIGINT UNSIGNED, "
" id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT) " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
bzero ( bind_array , sizeof ( bind_array ) ) ;
bind_array [ 0 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind_array [ 0 ] . buffer = ( void * ) & int8_val ;
2004-04-30 03:00:19 +04:00
bind_array [ 1 ] . buffer_type = MYSQL_TYPE_TINY ;
2004-06-25 17:04:33 +04:00
bind_array [ 1 ] . buffer = ( void * ) & uint8_val ;
2004-04-30 03:00:19 +04:00
bind_array [ 1 ] . is_unsigned = 1 ;
bind_array [ 2 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind_array [ 2 ] . buffer = ( void * ) & int16_val ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
bind_array [ 3 ] . buffer_type = MYSQL_TYPE_SHORT ;
2004-06-25 17:04:33 +04:00
bind_array [ 3 ] . buffer = ( void * ) & uint16_val ;
2004-04-30 03:00:19 +04:00
bind_array [ 3 ] . is_unsigned = 1 ;
bind_array [ 4 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind_array [ 4 ] . buffer = ( void * ) & int32_val ;
2004-04-30 03:00:19 +04:00
bind_array [ 5 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind_array [ 5 ] . buffer = ( void * ) & uint32_val ;
2004-04-30 03:00:19 +04:00
bind_array [ 5 ] . is_unsigned = 1 ;
bind_array [ 6 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind_array [ 6 ] . buffer = ( void * ) & int64_val ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
bind_array [ 7 ] . buffer_type = MYSQL_TYPE_LONGLONG ;
2004-06-25 17:04:33 +04:00
bind_array [ 7 ] . buffer = ( void * ) & uint64_val ;
2004-04-30 03:00:19 +04:00
bind_array [ 7 ] . is_unsigned = 1 ;
stmt = mysql_stmt_init ( mysql ) ;
2004-04-30 14:24:06 +03:00
check_stmt ( stmt ) ;
2004-04-30 03:00:19 +04:00
stmt_text = " INSERT INTO t1 (i8, ui8, i16, ui16, i32, ui32, i64, ui64) "
" VALUES (?, ?, ?, ?, ?, ?, ?, ?) " ;
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-04-30 03:00:19 +04:00
mysql_stmt_bind_param ( stmt , bind_array ) ;
int8_val = int8_min ;
uint8_val = uint8_min ;
int16_val = int16_min ;
uint16_val = uint16_min ;
int32_val = int32_min ;
uint32_val = uint32_min ;
int64_val = int64_min ;
uint64_val = uint64_min ;
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
int8_val = int8_max ;
uint8_val = uint8_max ;
int16_val = int16_max ;
uint16_val = uint16_max ;
int32_val = int32_max ;
uint32_val = uint32_max ;
int64_val = int64_max ;
uint64_val = uint64_max ;
2004-05-06 13:49:20 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-04-30 03:00:19 +04:00
2004-05-06 13:49:20 +04:00
stmt_text = " SELECT i8, ui8, i16, ui16, i32, ui32, i64, ui64, ui64, "
2004-06-04 18:38:18 +04:00
" cast(ui64 as signed), ui64, cast(ui64 as signed) "
2004-04-30 03:00:19 +04:00
" FROM t1 ORDER BY id ASC " ;
2004-05-06 13:49:20 +04:00
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-04-30 03:00:19 +04:00
2004-05-06 13:49:20 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-04-30 03:00:19 +04:00
2004-05-04 15:02:38 +03:00
bind_array [ 8 ] . buffer_type = MYSQL_TYPE_DOUBLE ;
2004-06-25 17:04:33 +04:00
bind_array [ 8 ] . buffer = ( void * ) & udouble_val ;
2004-05-04 15:02:38 +03:00
bind_array [ 9 ] . buffer_type = MYSQL_TYPE_DOUBLE ;
2004-06-25 17:04:33 +04:00
bind_array [ 9 ] . buffer = ( void * ) & double_val ;
2004-05-04 15:02:38 +03:00
bind_array [ 10 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind_array [ 10 ] . buffer = ( void * ) & ulonglong_as_string ;
2004-05-04 15:02:38 +03:00
bind_array [ 10 ] . buffer_length = sizeof ( ulonglong_as_string ) ;
bind_array [ 11 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind_array [ 11 ] . buffer = ( void * ) & longlong_as_string ;
2004-05-04 15:02:38 +03:00
bind_array [ 11 ] . buffer_length = sizeof ( longlong_as_string ) ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
mysql_stmt_bind_result ( stmt , bind_array ) ;
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-04-30 03:00:19 +04:00
assert ( int8_val = = int8_min ) ;
assert ( uint8_val = = uint8_min ) ;
assert ( int16_val = = int16_min ) ;
assert ( uint16_val = = uint16_min ) ;
assert ( int32_val = = int32_min ) ;
assert ( uint32_val = = uint32_min ) ;
assert ( int64_val = = int64_min ) ;
assert ( uint64_val = = uint64_min ) ;
2004-05-04 15:02:38 +03:00
assert ( double_val = = ( longlong ) uint64_min ) ;
assert ( udouble_val = = ulonglong2double ( uint64_val ) ) ;
assert ( ! strcmp ( longlong_as_string , " 0 " ) ) ;
assert ( ! strcmp ( ulonglong_as_string , " 0 " ) ) ;
2004-04-30 03:00:19 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-04-30 14:24:06 +03:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-04-30 03:00:19 +04:00
assert ( int8_val = = int8_max ) ;
assert ( uint8_val = = uint8_max ) ;
assert ( int16_val = = int16_max ) ;
assert ( uint16_val = = uint16_max ) ;
assert ( int32_val = = int32_max ) ;
assert ( uint32_val = = uint32_max ) ;
assert ( int64_val = = int64_max ) ;
assert ( uint64_val = = uint64_max ) ;
2004-05-04 15:02:38 +03:00
assert ( double_val = = ( longlong ) uint64_val ) ;
assert ( udouble_val = = ulonglong2double ( uint64_val ) ) ;
assert ( ! strcmp ( longlong_as_string , " -1 " ) ) ;
assert ( ! strcmp ( ulonglong_as_string , " 18446744073709551615 " ) ) ;
2004-04-30 03:00:19 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
2004-06-04 18:38:18 +04:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-04-30 03:00:19 +04:00
mysql_stmt_close ( stmt ) ;
stmt_text = " DROP TABLE t1 " ;
mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
}
2004-04-09 10:30:07 +03:00
2004-06-04 18:38:18 +04:00
2004-05-03 13:58:01 +03:00
static void test_union2 ( )
{
MYSQL_STMT * stmt ;
int rc , i ;
myheader ( " test_union2 " ) ;
2004-06-04 18:38:18 +04:00
2004-05-03 13:58:01 +03:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1(col1 INT, \
col2 VARCHAR ( 40 ) , \
col3 SMALLINT , \
2004-05-03 13:58:01 +03:00
col4 TIMESTAMP ) " );
myquery ( rc ) ;
stmt = mysql_simple_prepare ( mysql ,
2004-06-04 18:38:18 +04:00
" select col1 FROM t1 where col1=1 union distinct "
" select col1 FROM t1 where col1=2 " ) ;
2004-05-03 13:58:01 +03:00
check_stmt ( stmt ) ;
for ( i = 0 ; i < 3 ; i + + )
{
rc = mysql_stmt_execute ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
2004-05-03 13:58:01 +03:00
assert ( 0 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
myquery ( rc ) ;
}
2004-05-25 02:03:49 +04:00
2004-05-04 19:08:19 +04:00
/*
2004-06-04 18:38:18 +04:00
This tests for various mysql_stmt_send_long_data bugs described in # 1664
2004-05-04 19:08:19 +04:00
*/
static void test_bug1664 ( )
{
MYSQL_STMT * stmt ;
int rc , int_data ;
const char * data ;
const char * str_data = " Simple string " ;
MYSQL_BIND bind [ 2 ] ;
2004-06-04 18:38:18 +04:00
const char * query = " INSERT INTO test_long_data(col2, col1) VALUES(?, ?) " ;
2004-05-04 19:08:19 +04:00
myheader ( " test_bug1664 " ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS test_long_data " ) ;
2004-05-04 19:08:19 +04:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE test_long_data(col1 int, col2 long varchar) " ) ;
2004-05-04 19:08:19 +04:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
stmt = mysql_stmt_init ( mysql ) ;
2004-05-04 20:02:55 +04:00
check_stmt ( stmt ) ;
2004-05-04 19:08:19 +04:00
rc = mysql_stmt_prepare ( stmt , query , strlen ( query ) ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
verify_param_count ( stmt , 2 ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
bzero ( & bind , sizeof ( bind ) ) ;
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) str_data ;
2004-05-04 19:08:19 +04:00
bind [ 0 ] . buffer_length = strlen ( str_data ) ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & int_data ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_LONG ;
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
int_data = 1 ;
2004-06-04 18:38:18 +04:00
/*
Let us supply empty long_data . This should work and should
2004-05-04 19:08:19 +04:00
not break following execution .
*/
data = " " ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_send_long_data ( stmt , 0 , data , strlen ( data ) ) ;
check_execute ( stmt , rc ) ;
2004-05-04 19:08:19 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
verify_col_data ( " test_long_data " , " col1 " , " 1 " ) ;
verify_col_data ( " test_long_data " , " col2 " , " " ) ;
2004-05-04 19:08:19 +04:00
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " DELETE FROM test_long_data " ) ;
2004-05-04 19:08:19 +04:00
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
/* This should pass OK */
data = ( char * ) " Data " ;
rc = mysql_stmt_send_long_data ( stmt , 0 , data , strlen ( data ) ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-05-04 19:08:19 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
verify_col_data ( " test_long_data " , " col1 " , " 1 " ) ;
verify_col_data ( " test_long_data " , " col2 " , " Data " ) ;
/* clean up */
rc = mysql_query ( mysql , " DELETE FROM test_long_data " ) ;
myquery ( rc ) ;
/*
Now we are changing int parameter and don ' t do anything
2004-06-04 18:38:18 +04:00
with first parameter . Second mysql_stmt_execute ( ) should run
2004-05-04 19:08:19 +04:00
OK treating this first parameter as string parameter .
*/
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
int_data = 2 ;
/* execute */
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
verify_col_data ( " test_long_data " , " col1 " , " 2 " ) ;
verify_col_data ( " test_long_data " , " col2 " , str_data ) ;
/* clean up */
rc = mysql_query ( mysql , " DELETE FROM test_long_data " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
/*
2004-06-04 18:38:18 +04:00
Now we are sending other long data . It should not be
2004-05-04 19:08:19 +04:00
concatened to previous .
*/
data = ( char * ) " SomeOtherData " ;
rc = mysql_stmt_send_long_data ( stmt , 0 , data , strlen ( data ) ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-05-04 19:08:19 +04:00
verify_col_data ( " test_long_data " , " col1 " , " 2 " ) ;
verify_col_data ( " test_long_data " , " col2 " , " SomeOtherData " ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
mysql_stmt_close ( stmt ) ;
/* clean up */
rc = mysql_query ( mysql , " DELETE FROM test_long_data " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
/* Now let us test how mysql_stmt_reset works. */
stmt = mysql_stmt_init ( mysql ) ;
2004-05-04 20:02:55 +04:00
check_stmt ( stmt ) ;
2004-05-04 19:08:19 +04:00
rc = mysql_stmt_prepare ( stmt , query , strlen ( query ) ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
data = ( char * ) " SomeData " ;
rc = mysql_stmt_send_long_data ( stmt , 0 , data , strlen ( data ) ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-05-04 19:08:19 +04:00
rc = mysql_stmt_reset ( stmt ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-05-04 19:08:19 +04:00
rc = mysql_stmt_execute ( stmt ) ;
2004-05-04 20:02:55 +04:00
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
verify_col_data ( " test_long_data " , " col1 " , " 2 " ) ;
verify_col_data ( " test_long_data " , " col2 " , str_data ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
2004-05-04 19:08:19 +04:00
/* Final clean up */
rc = mysql_query ( mysql , " DROP TABLE test_long_data " ) ;
myquery ( rc ) ;
}
2004-05-10 13:29:02 +03:00
static void test_order_param ( )
{
MYSQL_STMT * stmt ;
int rc ;
myheader ( " test_order_param " ) ;
2004-06-04 18:38:18 +04:00
2004-05-10 13:29:02 +03:00
rc = mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
rc = mysql_query ( mysql , " CREATE TABLE t1(a INT, b char(10)) " ) ;
2004-05-10 13:29:02 +03:00
myquery ( rc ) ;
stmt = mysql_simple_prepare ( mysql ,
2004-06-04 18:38:18 +04:00
" select sum(a) + 200, 1 from t1 "
" union distinct "
" select sum(a) + 200, 1 from t1 group by b " ) ;
2004-05-10 13:29:02 +03:00
check_stmt ( stmt ) ;
mysql_stmt_close ( stmt ) ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql ,
" select sum(a) + 200, ? from t1 group by b "
" union distinct "
" select sum(a) + 200, 1 from t1 group by b " ) ;
2004-05-10 13:29:02 +03:00
check_stmt ( stmt ) ;
2004-05-15 11:57:40 +03:00
mysql_stmt_close ( stmt ) ;
2004-05-10 13:29:02 +03:00
2004-05-15 11:57:40 +03:00
stmt = mysql_simple_prepare ( mysql ,
2004-06-04 18:38:18 +04:00
" select sum(a) + 200, ? from t1 "
" union distinct "
" select sum(a) + 200, 1 from t1 group by b " ) ;
2004-05-10 13:29:02 +03:00
check_stmt ( stmt ) ;
mysql_stmt_close ( stmt ) ;
rc = mysql_query ( mysql , " DROP TABLE t1 " ) ;
myquery ( rc ) ;
}
2004-05-20 19:08:34 +03:00
static void test_union_param ( )
{
MYSQL_STMT * stmt ;
char * query ;
int rc , i ;
MYSQL_BIND bind [ 2 ] ;
char my_val [ 4 ] ;
2004-06-04 18:38:18 +04:00
ulong my_length = 3L ;
long my_null = 0L ;
2004-05-20 19:08:34 +03:00
myheader ( " test_union_param " ) ;
strcpy ( my_val , " abc " ) ;
2004-06-04 18:38:18 +04:00
2004-05-20 19:08:34 +03:00
query = ( char * ) " select ? as my_col union distinct select ? " ;
2004-06-04 18:38:18 +04:00
stmt = mysql_simple_prepare ( mysql , query ) ;
2004-05-20 19:08:34 +03:00
check_stmt ( stmt ) ;
2004-06-04 18:38:18 +04:00
/*
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members .
*/
bzero ( ( char * ) bind , sizeof ( bind ) ) ;
2004-05-20 19:08:34 +03:00
/* bind parameters */
2004-06-04 18:38:18 +04:00
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-05-31 14:21:48 +04:00
bind [ 0 ] . buffer = ( char * ) & my_val ;
2004-05-20 19:08:34 +03:00
bind [ 0 ] . buffer_length = 4 ;
bind [ 0 ] . length = & my_length ;
bind [ 0 ] . is_null = ( char * ) & my_null ;
2004-06-04 18:38:18 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-05-31 14:21:48 +04:00
bind [ 1 ] . buffer = ( char * ) & my_val ;
2004-05-20 19:08:34 +03:00
bind [ 1 ] . buffer_length = 4 ;
bind [ 1 ] . length = & my_length ;
bind [ 1 ] . is_null = ( char * ) & my_null ;
2004-06-04 18:38:18 +04:00
rc = mysql_stmt_bind_param ( stmt , bind ) ;
check_execute ( stmt , rc ) ;
2004-05-20 19:08:34 +03:00
for ( i = 0 ; i < 3 ; i + + )
{
rc = mysql_stmt_execute ( stmt ) ;
2004-06-04 18:38:18 +04:00
check_execute ( stmt , rc ) ;
2004-05-20 19:08:34 +03:00
assert ( 1 = = my_process_stmt_result ( stmt ) ) ;
}
mysql_stmt_close ( stmt ) ;
}
2004-05-25 02:03:49 +04:00
static void test_ps_i18n ( )
{
MYSQL_STMT * stmt ;
int rc ;
const char * stmt_text ;
MYSQL_BIND bind_array [ 2 ] ;
const char * koi8 = " <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ;
const char * cp1251 = " <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ;
char buf1 [ 16 ] , buf2 [ 16 ] ;
ulong buf1_len , buf2_len ;
myheader ( " test_ps_i18n " ) ;
stmt_text = " DROP TABLE IF EXISTS t1 " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
/*
Create table with binary columns , set session character set to cp1251 ,
client character set to koi8 , and make sure that there is conversion
2004-06-04 18:38:18 +04:00
on insert and no conversion on select
2004-05-25 02:03:49 +04:00
*/
stmt_text = " CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255)) " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
stmt_text = " SET CHARACTER_SET_CLIENT=koi8r, "
" CHARACTER_SET_CONNECTION=cp1251, "
" CHARACTER_SET_RESULTS=koi8r " ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
bzero ( bind_array , sizeof ( bind_array ) ) ;
bind_array [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind_array [ 0 ] . buffer = ( void * ) koi8 ;
2004-05-25 02:03:49 +04:00
bind_array [ 0 ] . buffer_length = strlen ( koi8 ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
bind_array [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind_array [ 1 ] . buffer = ( void * ) koi8 ;
2004-05-25 02:03:49 +04:00
bind_array [ 1 ] . buffer_length = strlen ( koi8 ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
stmt = mysql_stmt_init ( mysql ) ;
check_stmt ( stmt ) ;
stmt_text = " INSERT INTO t1 (c1, c2) VALUES (?, ?) " ;
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
mysql_stmt_bind_param ( stmt , bind_array ) ;
mysql_stmt_send_long_data ( stmt , 0 , koi8 , strlen ( koi8 ) ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
stmt_text = " SELECT c1, c2 FROM t1 " ;
/* c1 and c2 are binary so no conversion will be done on select */
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
bind_array [ 0 ] . buffer = buf1 ;
bind_array [ 0 ] . buffer_length = sizeof ( buf1 ) ;
bind_array [ 0 ] . length = & buf1_len ;
bind_array [ 1 ] . buffer = buf2 ;
bind_array [ 1 ] . buffer_length = sizeof ( buf2 ) ;
bind_array [ 1 ] . length = & buf2_len ;
mysql_stmt_bind_result ( stmt , bind_array ) ;
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
assert ( buf1_len = = strlen ( cp1251 ) ) ;
assert ( buf2_len = = strlen ( cp1251 ) ) ;
assert ( ! memcmp ( buf1 , cp1251 , buf1_len ) ) ;
assert ( ! memcmp ( buf2 , cp1251 , buf1_len ) ) ;
rc = mysql_stmt_fetch ( stmt ) ;
2004-06-04 18:38:18 +04:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-05-25 02:03:49 +04:00
stmt_text = " DROP TABLE IF EXISTS t1 " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
/*
Now create table with two cp1251 columns , set client character
set to koi8 and supply columns of one row as string and another as
binary data . Binary data must not be converted on insert , and both
columns must be converted to client character set on select .
*/
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
stmt_text = " CREATE TABLE t1 (c1 VARCHAR(255) CHARACTER SET cp1251, "
" c2 VARCHAR(255) CHARACTER SET cp1251) " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
stmt_text = " INSERT INTO t1 (c1, c2) VALUES (?, ?) " ;
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
/* this data must be converted */
bind_array [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind_array [ 0 ] . buffer = ( void * ) koi8 ;
2004-05-25 02:03:49 +04:00
bind_array [ 0 ] . buffer_length = strlen ( koi8 ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
bind_array [ 1 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind_array [ 1 ] . buffer = ( void * ) koi8 ;
2004-05-25 02:03:49 +04:00
bind_array [ 1 ] . buffer_length = strlen ( koi8 ) ;
mysql_stmt_bind_param ( stmt , bind_array ) ;
mysql_stmt_send_long_data ( stmt , 0 , koi8 , strlen ( koi8 ) ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
/* this data must not be converted */
bind_array [ 0 ] . buffer_type = MYSQL_TYPE_BLOB ;
2004-06-25 17:04:33 +04:00
bind_array [ 0 ] . buffer = ( void * ) cp1251 ;
2004-05-25 02:03:49 +04:00
bind_array [ 0 ] . buffer_length = strlen ( cp1251 ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
bind_array [ 1 ] . buffer_type = MYSQL_TYPE_BLOB ;
2004-06-25 17:04:33 +04:00
bind_array [ 1 ] . buffer = ( void * ) cp1251 ;
2004-05-25 02:03:49 +04:00
bind_array [ 1 ] . buffer_length = strlen ( cp1251 ) ;
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
mysql_stmt_bind_param ( stmt , bind_array ) ;
mysql_stmt_send_long_data ( stmt , 0 , cp1251 , strlen ( cp1251 ) ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
/* Fetch data and verify that rows are in koi8 */
2004-06-04 18:38:18 +04:00
2004-05-25 02:03:49 +04:00
stmt_text = " SELECT c1, c2 FROM t1 " ;
/* c1 and c2 are binary so no conversion will be done on select */
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
bind_array [ 0 ] . buffer = buf1 ;
bind_array [ 0 ] . buffer_length = sizeof ( buf1 ) ;
bind_array [ 0 ] . length = & buf1_len ;
bind_array [ 1 ] . buffer = buf2 ;
bind_array [ 1 ] . buffer_length = sizeof ( buf2 ) ;
bind_array [ 1 ] . length = & buf2_len ;
mysql_stmt_bind_result ( stmt , bind_array ) ;
while ( ( rc = mysql_stmt_fetch ( stmt ) ) = = 0 )
{
assert ( buf1_len = = strlen ( koi8 ) ) ;
assert ( buf2_len = = strlen ( koi8 ) ) ;
assert ( ! memcmp ( buf1 , koi8 , buf1_len ) ) ;
assert ( ! memcmp ( buf2 , koi8 , buf1_len ) ) ;
}
2004-06-04 18:38:18 +04:00
assert ( rc = = MYSQL_NO_DATA ) ;
2004-05-25 02:03:49 +04:00
mysql_stmt_close ( stmt ) ;
stmt_text = " DROP TABLE t1 " ;
2004-05-31 14:21:48 +04:00
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
stmt_text = " SET NAMES DEFAULT " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
}
static void test_bug3796 ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
const char * concat_arg0 = " concat_with_ " ;
2004-06-16 11:29:22 +04:00
enum { OUT_BUFF_SIZE = 30 } ;
2004-05-31 14:21:48 +04:00
char out_buff [ OUT_BUFF_SIZE ] ;
char canonical_buff [ OUT_BUFF_SIZE ] ;
ulong out_length ;
const char * stmt_text ;
int rc ;
2004-06-04 18:38:18 +04:00
2004-05-31 14:21:48 +04:00
myheader ( " test_bug3796 " ) ;
/* Create and fill test table */
stmt_text = " DROP TABLE IF EXISTS t1 " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
stmt_text = " CREATE TABLE t1 (a INT, b VARCHAR(30)) " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
2004-06-04 18:38:18 +04:00
stmt_text = " INSERT INTO t1 VALUES(1, 'ONE'), (2, 'TWO') " ;
2004-05-31 14:21:48 +04:00
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
/* Create statement handle and prepare it with select */
2004-06-04 18:38:18 +04:00
stmt = mysql_stmt_init ( mysql ) ;
2004-05-31 14:21:48 +04:00
stmt_text = " SELECT concat(?, b) FROM t1 " ;
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
2004-06-04 18:38:18 +04:00
2004-05-31 14:21:48 +04:00
/* Bind input buffers */
bzero ( bind , sizeof ( bind ) ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_STRING ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) concat_arg0 ;
2004-05-31 14:21:48 +04:00
bind [ 0 ] . buffer_length = strlen ( concat_arg0 ) ;
2004-06-04 18:38:18 +04:00
2004-05-31 14:21:48 +04:00
mysql_stmt_bind_param ( stmt , bind ) ;
/* Execute the select statement */
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) out_buff ;
2004-05-31 14:21:48 +04:00
bind [ 0 ] . buffer_length = OUT_BUFF_SIZE ;
bind [ 0 ] . length = & out_length ;
mysql_stmt_bind_result ( stmt , bind ) ;
rc = mysql_stmt_fetch ( stmt ) ;
printf ( " Concat result: '%s' \n " , out_buff ) ;
check_execute ( stmt , rc ) ;
strcpy ( canonical_buff , concat_arg0 ) ;
strcat ( canonical_buff , " ONE " ) ;
assert ( strlen ( canonical_buff ) = = out_length & &
strncmp ( out_buff , canonical_buff , out_length ) = = 0 ) ;
rc = mysql_stmt_fetch ( stmt ) ;
check_execute ( stmt , rc ) ;
strcpy ( canonical_buff + strlen ( concat_arg0 ) , " TWO " ) ;
assert ( strlen ( canonical_buff ) = = out_length & &
strncmp ( out_buff , canonical_buff , out_length ) = = 0 ) ;
printf ( " Concat result: '%s' \n " , out_buff ) ;
2004-06-04 18:38:18 +04:00
2004-05-31 14:21:48 +04:00
rc = mysql_stmt_fetch ( stmt ) ;
assert ( rc = = MYSQL_NO_DATA ) ;
mysql_stmt_close ( stmt ) ;
stmt_text = " DROP TABLE IF EXISTS t1 " ;
rc = mysql_real_query ( mysql , stmt_text , strlen ( stmt_text ) ) ;
myquery ( rc ) ;
2004-05-25 02:03:49 +04:00
}
2004-06-09 03:21:50 +04:00
static void test_bug4026 ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 2 ] ;
MYSQL_TIME time_in , time_out ;
MYSQL_TIME datetime_in , datetime_out ;
const char * stmt_text ;
int rc ;
myheader ( " test_bug4026 " ) ;
/* Check that microseconds are inserted and selected successfully */
/* Create a statement handle and prepare it with select */
stmt = mysql_stmt_init ( mysql ) ;
stmt_text = " SELECT ?, ? " ;
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
/* Bind input buffers */
bzero ( bind , sizeof ( bind ) ) ;
bzero ( & time_in , sizeof ( time_in ) ) ;
bzero ( & time_out , sizeof ( time_out ) ) ;
bzero ( & datetime_in , sizeof ( datetime_in ) ) ;
bzero ( & datetime_out , sizeof ( datetime_out ) ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_TIME ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & time_in ;
2004-06-09 03:21:50 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_DATETIME ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & datetime_in ;
2004-06-09 03:21:50 +04:00
time_in . hour = 23 ;
time_in . minute = 59 ;
time_in . second = 59 ;
time_in . second_part = 123456 ;
datetime_in = time_in ;
datetime_in . year = 2003 ;
datetime_in . month = 12 ;
datetime_in . day = 31 ;
mysql_stmt_bind_param ( stmt , bind ) ;
/* Execute the select statement */
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & time_out ;
bind [ 1 ] . buffer = ( void * ) & datetime_out ;
2004-06-09 03:21:50 +04:00
mysql_stmt_bind_result ( stmt , bind ) ;
rc = mysql_stmt_fetch ( stmt ) ;
assert ( rc = = 0 ) ;
printf ( " %d:%d:%d.%lu \n " , time_out . hour , time_out . minute , time_out . second ,
time_out . second_part ) ;
printf ( " %d-%d-%d %d:%d:%d.%lu \n " , datetime_out . year , datetime_out . month ,
datetime_out . day , datetime_out . hour ,
datetime_out . minute , datetime_out . second ,
datetime_out . second_part ) ;
assert ( memcmp ( & time_in , & time_out , sizeof ( time_in ) ) = = 0 ) ;
assert ( memcmp ( & datetime_in , & datetime_out , sizeof ( datetime_in ) ) = = 0 ) ;
mysql_stmt_close ( stmt ) ;
}
2004-06-11 13:12:29 +04:00
static void test_bug4079 ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 1 ] ;
const char * stmt_text ;
unsigned long res ;
int rc ;
myheader ( " test_bug4079 " ) ;
/* Create and fill table */
mysql_query ( mysql , " DROP TABLE IF EXISTS t1 " ) ;
mysql_query ( mysql , " CREATE TABLE t1 (a int) " ) ;
mysql_query ( mysql , " INSERT INTO t1 VALUES (1), (2) " ) ;
/* Prepare erroneous statement */
stmt = mysql_stmt_init ( mysql ) ;
stmt_text = " SELECT 1 < (SELECT a FROM t1) " ;
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
/* Execute the select statement */
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
/* Bind input buffers */
bzero ( bind , sizeof ( bind ) ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_LONG ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & res ;
2004-06-11 13:12:29 +04:00
mysql_stmt_bind_result ( stmt , bind ) ;
rc = mysql_stmt_fetch ( stmt ) ;
assert ( rc ! = 0 & & rc ! = MYSQL_NO_DATA ) ;
printf ( " Got error from mysql_stmt_fetch (as expected): \n %s \n " ,
mysql_stmt_error ( stmt ) ) ;
/* buggy version of libmysql hanged up here */
mysql_stmt_close ( stmt ) ;
}
2004-06-22 11:04:41 +04:00
static void test_bug4236 ( )
{
MYSQL_STMT * stmt ;
const char * stmt_text ;
int rc ;
MYSQL_STMT backup ;
myheader ( " test_bug4296 " ) ;
stmt = mysql_stmt_init ( mysql ) ;
/* mysql_stmt_execute() of statement with statement id= 0 crashed server */
stmt_text = " SELECT 1 " ;
/* We need to prepare statement to pass by possible check in libmysql */
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
/* Hack to check that server works OK if statement wasn't found */
backup . stmt_id = stmt - > stmt_id ;
stmt - > stmt_id = 0 ;
rc = mysql_stmt_execute ( stmt ) ;
assert ( rc ) ;
/* Restore original statement id to be able to reprepare it */
stmt - > stmt_id = backup . stmt_id ;
mysql_stmt_close ( stmt ) ;
}
Fix for Bug#4030 "Client side conversion string -> date type doesn't
work (prepared statements)" and after-review fixes:
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- functions str_to_time and str_to_TIME moved to sql-common
- send_data_str now supports MYSQL_TYPE_TIME, MYSQL_TIME_DATE,
MYSQL_TIME_DATETIME types of user input buffers.
- few more comments in the client library
- a test case added.
VC++Files/libmysql/libmysql.dsp:
new file: my_time.c
VC++Files/libmysqld/libmysqld.dsp:
new file: my_time.c
VC++Files/sql/mysqld.dsp:
new file: my_time.c
include/Makefile.am:
- mysql_time.h added to the list of installed client library headers
include/mysql.h:
- declarations for MYSQL_TIME and enum_mysql_timestamp_type moved to
mysql_time.h, which is in shared use of client library and mysys.
libmysql/Makefile.shared:
- my_time.lo added to the list of libmysql objects
libmysql/libmysql.c:
Fix for bug#4030 "Client side conversion string -> date type doesn't work
(prepared statements)" and cleanup.
- added case labels for TIME/DATE/DATETIME types to send_data_str
- comments for read_binary_{date,time,datetime}, fetch_result_*, fetch_results.
libmysqld/Makefile.am:
- my_time.c added
sql-common/Makefile.am:
- my_time.c added to the list of files included into source distribution.
sql/Makefile.am:
my_time.c added to the list of mysqld sources.
sql/field.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item_timefunc.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/mysql_priv.h:
- added typedefs for TIME and timestamp_type
- removed declarations for str_to_time and str_to_TIME (now this functions
reside in mysys)
sql/mysqld.cc:
- log_10_int moved to mysys (it's used by str_to_TIME and str_to_time)
- enum values TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
sql/set_var.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/set_var.h:
- fixed timestamp_type usage to be compatible with typedef.
sql/sql_prepare.cc:
- TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
- embedded library implementation of set_param_{time,date,datetime} is
much simplier now, as MYSQL_TIME is the same as TIME.
sql/sql_yacc.yy:
- s/\<TIMESTAMP_/MYSQL_TIMESTAMP/gc
sql/structs.h:
- declarations for TIME and timestamp_type replaced with typedefs
- str_to_datetime arguments moved to mysys headers
sql/time.cc:
- str_to_time and str_to_TIME moved to mysys
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} as these names are now
exported to client.
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- str_to_TIME_with_warn renamed accordingly
sql/tztime.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
tests/client_test.c:
- a test case for Bug#4030 "Client side conversion string -> date type
doesn't work (prepared statements)"
2004-06-24 19:08:36 +04:00
static void test_bug4030 ( )
{
MYSQL_STMT * stmt ;
MYSQL_BIND bind [ 3 ] ;
MYSQL_TIME time_canonical , time_out ;
MYSQL_TIME date_canonical , date_out ;
MYSQL_TIME datetime_canonical , datetime_out ;
const char * stmt_text ;
int rc ;
myheader ( " test_bug4030 " ) ;
/* Check that microseconds are inserted and selected successfully */
/* Execute a query with time values in prepared mode */
stmt = mysql_stmt_init ( mysql ) ;
stmt_text = " SELECT '23:59:59.123456', '2003-12-31', "
" '2003-12-31 23:59:59.123456' " ;
rc = mysql_stmt_prepare ( stmt , stmt_text , strlen ( stmt_text ) ) ;
check_execute ( stmt , rc ) ;
rc = mysql_stmt_execute ( stmt ) ;
check_execute ( stmt , rc ) ;
/* Bind output buffers */
bzero ( bind , sizeof ( bind ) ) ;
bzero ( & time_canonical , sizeof ( time_canonical ) ) ;
bzero ( & time_out , sizeof ( time_out ) ) ;
bzero ( & date_canonical , sizeof ( date_canonical ) ) ;
bzero ( & date_out , sizeof ( date_out ) ) ;
bzero ( & datetime_canonical , sizeof ( datetime_canonical ) ) ;
bzero ( & datetime_out , sizeof ( datetime_out ) ) ;
bind [ 0 ] . buffer_type = MYSQL_TYPE_TIME ;
2004-06-25 17:04:33 +04:00
bind [ 0 ] . buffer = ( void * ) & time_out ;
Fix for Bug#4030 "Client side conversion string -> date type doesn't
work (prepared statements)" and after-review fixes:
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- functions str_to_time and str_to_TIME moved to sql-common
- send_data_str now supports MYSQL_TYPE_TIME, MYSQL_TIME_DATE,
MYSQL_TIME_DATETIME types of user input buffers.
- few more comments in the client library
- a test case added.
VC++Files/libmysql/libmysql.dsp:
new file: my_time.c
VC++Files/libmysqld/libmysqld.dsp:
new file: my_time.c
VC++Files/sql/mysqld.dsp:
new file: my_time.c
include/Makefile.am:
- mysql_time.h added to the list of installed client library headers
include/mysql.h:
- declarations for MYSQL_TIME and enum_mysql_timestamp_type moved to
mysql_time.h, which is in shared use of client library and mysys.
libmysql/Makefile.shared:
- my_time.lo added to the list of libmysql objects
libmysql/libmysql.c:
Fix for bug#4030 "Client side conversion string -> date type doesn't work
(prepared statements)" and cleanup.
- added case labels for TIME/DATE/DATETIME types to send_data_str
- comments for read_binary_{date,time,datetime}, fetch_result_*, fetch_results.
libmysqld/Makefile.am:
- my_time.c added
sql-common/Makefile.am:
- my_time.c added to the list of files included into source distribution.
sql/Makefile.am:
my_time.c added to the list of mysqld sources.
sql/field.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item_timefunc.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/mysql_priv.h:
- added typedefs for TIME and timestamp_type
- removed declarations for str_to_time and str_to_TIME (now this functions
reside in mysys)
sql/mysqld.cc:
- log_10_int moved to mysys (it's used by str_to_TIME and str_to_time)
- enum values TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
sql/set_var.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/set_var.h:
- fixed timestamp_type usage to be compatible with typedef.
sql/sql_prepare.cc:
- TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
- embedded library implementation of set_param_{time,date,datetime} is
much simplier now, as MYSQL_TIME is the same as TIME.
sql/sql_yacc.yy:
- s/\<TIMESTAMP_/MYSQL_TIMESTAMP/gc
sql/structs.h:
- declarations for TIME and timestamp_type replaced with typedefs
- str_to_datetime arguments moved to mysys headers
sql/time.cc:
- str_to_time and str_to_TIME moved to mysys
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} as these names are now
exported to client.
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- str_to_TIME_with_warn renamed accordingly
sql/tztime.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
tests/client_test.c:
- a test case for Bug#4030 "Client side conversion string -> date type
doesn't work (prepared statements)"
2004-06-24 19:08:36 +04:00
bind [ 1 ] . buffer_type = MYSQL_TYPE_DATE ;
2004-06-25 17:04:33 +04:00
bind [ 1 ] . buffer = ( void * ) & date_out ;
Fix for Bug#4030 "Client side conversion string -> date type doesn't
work (prepared statements)" and after-review fixes:
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- functions str_to_time and str_to_TIME moved to sql-common
- send_data_str now supports MYSQL_TYPE_TIME, MYSQL_TIME_DATE,
MYSQL_TIME_DATETIME types of user input buffers.
- few more comments in the client library
- a test case added.
VC++Files/libmysql/libmysql.dsp:
new file: my_time.c
VC++Files/libmysqld/libmysqld.dsp:
new file: my_time.c
VC++Files/sql/mysqld.dsp:
new file: my_time.c
include/Makefile.am:
- mysql_time.h added to the list of installed client library headers
include/mysql.h:
- declarations for MYSQL_TIME and enum_mysql_timestamp_type moved to
mysql_time.h, which is in shared use of client library and mysys.
libmysql/Makefile.shared:
- my_time.lo added to the list of libmysql objects
libmysql/libmysql.c:
Fix for bug#4030 "Client side conversion string -> date type doesn't work
(prepared statements)" and cleanup.
- added case labels for TIME/DATE/DATETIME types to send_data_str
- comments for read_binary_{date,time,datetime}, fetch_result_*, fetch_results.
libmysqld/Makefile.am:
- my_time.c added
sql-common/Makefile.am:
- my_time.c added to the list of files included into source distribution.
sql/Makefile.am:
my_time.c added to the list of mysqld sources.
sql/field.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item_timefunc.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/mysql_priv.h:
- added typedefs for TIME and timestamp_type
- removed declarations for str_to_time and str_to_TIME (now this functions
reside in mysys)
sql/mysqld.cc:
- log_10_int moved to mysys (it's used by str_to_TIME and str_to_time)
- enum values TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
sql/set_var.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/set_var.h:
- fixed timestamp_type usage to be compatible with typedef.
sql/sql_prepare.cc:
- TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
- embedded library implementation of set_param_{time,date,datetime} is
much simplier now, as MYSQL_TIME is the same as TIME.
sql/sql_yacc.yy:
- s/\<TIMESTAMP_/MYSQL_TIMESTAMP/gc
sql/structs.h:
- declarations for TIME and timestamp_type replaced with typedefs
- str_to_datetime arguments moved to mysys headers
sql/time.cc:
- str_to_time and str_to_TIME moved to mysys
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} as these names are now
exported to client.
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- str_to_TIME_with_warn renamed accordingly
sql/tztime.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
tests/client_test.c:
- a test case for Bug#4030 "Client side conversion string -> date type
doesn't work (prepared statements)"
2004-06-24 19:08:36 +04:00
bind [ 2 ] . buffer_type = MYSQL_TYPE_DATETIME ;
2004-06-25 17:04:33 +04:00
bind [ 2 ] . buffer = ( void * ) & datetime_out ;
Fix for Bug#4030 "Client side conversion string -> date type doesn't
work (prepared statements)" and after-review fixes:
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- functions str_to_time and str_to_TIME moved to sql-common
- send_data_str now supports MYSQL_TYPE_TIME, MYSQL_TIME_DATE,
MYSQL_TIME_DATETIME types of user input buffers.
- few more comments in the client library
- a test case added.
VC++Files/libmysql/libmysql.dsp:
new file: my_time.c
VC++Files/libmysqld/libmysqld.dsp:
new file: my_time.c
VC++Files/sql/mysqld.dsp:
new file: my_time.c
include/Makefile.am:
- mysql_time.h added to the list of installed client library headers
include/mysql.h:
- declarations for MYSQL_TIME and enum_mysql_timestamp_type moved to
mysql_time.h, which is in shared use of client library and mysys.
libmysql/Makefile.shared:
- my_time.lo added to the list of libmysql objects
libmysql/libmysql.c:
Fix for bug#4030 "Client side conversion string -> date type doesn't work
(prepared statements)" and cleanup.
- added case labels for TIME/DATE/DATETIME types to send_data_str
- comments for read_binary_{date,time,datetime}, fetch_result_*, fetch_results.
libmysqld/Makefile.am:
- my_time.c added
sql-common/Makefile.am:
- my_time.c added to the list of files included into source distribution.
sql/Makefile.am:
my_time.c added to the list of mysqld sources.
sql/field.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item_timefunc.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/mysql_priv.h:
- added typedefs for TIME and timestamp_type
- removed declarations for str_to_time and str_to_TIME (now this functions
reside in mysys)
sql/mysqld.cc:
- log_10_int moved to mysys (it's used by str_to_TIME and str_to_time)
- enum values TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
sql/set_var.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/set_var.h:
- fixed timestamp_type usage to be compatible with typedef.
sql/sql_prepare.cc:
- TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
- embedded library implementation of set_param_{time,date,datetime} is
much simplier now, as MYSQL_TIME is the same as TIME.
sql/sql_yacc.yy:
- s/\<TIMESTAMP_/MYSQL_TIMESTAMP/gc
sql/structs.h:
- declarations for TIME and timestamp_type replaced with typedefs
- str_to_datetime arguments moved to mysys headers
sql/time.cc:
- str_to_time and str_to_TIME moved to mysys
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} as these names are now
exported to client.
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- str_to_TIME_with_warn renamed accordingly
sql/tztime.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
tests/client_test.c:
- a test case for Bug#4030 "Client side conversion string -> date type
doesn't work (prepared statements)"
2004-06-24 19:08:36 +04:00
time_canonical . hour = 23 ;
time_canonical . minute = 59 ;
time_canonical . second = 59 ;
time_canonical . second_part = 123456 ;
time_canonical . time_type = MYSQL_TIMESTAMP_TIME ;
date_canonical . year = 2003 ;
date_canonical . month = 12 ;
date_canonical . day = 31 ;
date_canonical . time_type = MYSQL_TIMESTAMP_DATE ;
datetime_canonical = time_canonical ;
datetime_canonical . year = 2003 ;
datetime_canonical . month = 12 ;
datetime_canonical . day = 31 ;
datetime_canonical . time_type = MYSQL_TIMESTAMP_DATETIME ;
mysql_stmt_bind_result ( stmt , bind ) ;
rc = mysql_stmt_fetch ( stmt ) ;
assert ( rc = = 0 ) ;
printf ( " %d:%d:%d.%lu \n " , time_out . hour , time_out . minute , time_out . second ,
time_out . second_part ) ;
printf ( " %d-%d-%d \n " , date_out . year , date_out . month , date_out . day ) ;
printf ( " %d-%d-%d %d:%d:%d.%lu \n " , datetime_out . year , datetime_out . month ,
datetime_out . day , datetime_out . hour ,
datetime_out . minute , datetime_out . second ,
datetime_out . second_part ) ;
assert ( memcmp ( & time_canonical , & time_out , sizeof ( time_out ) ) = = 0 ) ;
assert ( memcmp ( & date_canonical , & date_out , sizeof ( date_out ) ) = = 0 ) ;
assert ( memcmp ( & datetime_canonical , & datetime_out , sizeof ( datetime_out ) ) = = 0 ) ;
mysql_stmt_close ( stmt ) ;
}
2003-02-04 18:54:14 -08:00
/*
Read and parse arguments and MySQL options from my . cnf
*/
static const char * client_test_load_default_groups [ ] = { " client " , 0 } ;
static char * * defaults_argv ;
static struct my_option client_test_long_options [ ] =
2002-06-13 17:28:25 -07:00
{
2002-06-13 17:36:15 -07:00
{ " help " , ' ? ' , " Display this help and exit " , 0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 ,
0 , 0 , 0 , 0 , 0 } ,
2003-01-21 21:07:59 +02:00
{ " database " , ' D ' , " Database to use " , ( char * * ) & opt_db , ( char * * ) & opt_db ,
2002-06-13 17:36:15 -07:00
0 , GET_STR_ALLOC , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2004-04-30 14:02:17 +03:00
{ " debug " , ' # ' , " Output debug log " , ( gptr * ) & default_dbug_option ,
( gptr * ) & default_dbug_option , 0 , GET_STR , OPT_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2003-01-21 21:07:59 +02:00
{ " host " , ' h ' , " Connect to host " , ( char * * ) & opt_host , ( char * * ) & opt_host , 0 , GET_STR_ALLOC ,
2002-06-13 17:36:15 -07: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-22 18:30:55 -08:00
# ifndef DONT_ALLOW_USER_CHANGE
2003-01-21 21:07:59 +02:00
{ " user " , ' u ' , " User for login if not current user " , ( char * * ) & opt_user ,
( char * * ) & opt_user , 0 , GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2002-11-22 18:30:55 -08:00
# endif
2003-01-21 21:07:59 +02:00
{ " port " , ' P ' , " Port number to use for connection " , ( char * * ) & opt_port ,
( char * * ) & opt_port , 0 , GET_UINT , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ " socket " , ' S ' , " Socket file to use for connection " , ( char * * ) & opt_unix_socket ,
( char * * ) & opt_unix_socket , 0 , GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2003-01-22 01:30:13 -08:00
{ " count " , ' t ' , " Number of times test to be executed " , ( char * * ) & opt_count ,
2003-02-04 18:54:14 -08:00
( char * * ) & opt_count , 0 , GET_UINT , REQUIRED_ARG , 1 , 0 , 0 , 0 , 0 , 0 } ,
2002-06-13 17:36:15 -07:00
{ 0 , 0 , 0 , 0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 }
2002-06-13 17:28:25 -07:00
} ;
2003-02-04 18:54:14 -08:00
static void client_test_print_version ( void )
{
fprintf ( stdout , " %s Distrib %s, for %s (%s) \n \n " ,
2004-06-04 18:38:18 +04:00
my_progname , MYSQL_SERVER_VERSION , SYSTEM_TYPE , MACHINE_TYPE ) ;
2003-02-04 18:54:14 -08:00
}
2002-06-13 17:28:25 -07:00
static void usage ( void )
{
/*
* show the usage string when the user asks for this
2004-06-04 18:38:18 +04:00
*/
putc ( ' \n ' , stdout ) ;
2002-06-13 17:28:25 -07:00
puts ( " *********************************************************************** \n " ) ;
puts ( " Test for client-server protocol 4.1 " ) ;
puts ( " By Monty & Venu \n " ) ;
2004-06-04 18:38:18 +04:00
puts ( " This software comes with ABSOLUTELY NO WARRANTY. This is free software, " ) ;
2002-06-13 17:28:25 -07:00
puts ( " and you are welcome to modify and redistribute it under the GPL license \n " ) ;
2003-01-18 12:58:19 -08:00
puts ( " Copyright (C) 1995-2003 MySQL AB " ) ;
2002-06-13 17:28:25 -07:00
puts ( " ----------------------------------------------------------------------- \n " ) ;
2003-02-04 18:54:14 -08:00
client_test_print_version ( ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " Usage: %s [OPTIONS] \n \n " , my_progname ) ;
2003-02-04 18:54:14 -08:00
my_print_help ( client_test_long_options ) ;
print_defaults ( " my " , client_test_load_default_groups ) ;
my_print_variables ( client_test_long_options ) ;
2003-01-31 13:43:38 -08:00
puts ( " *********************************************************************** \n " ) ;
2002-06-13 17:28:25 -07:00
}
2002-06-13 17:36:15 -07:00
static my_bool
get_one_option ( int optid , const struct my_option * opt __attribute__ ( ( unused ) ) ,
2004-06-04 18:38:18 +04:00
char * argument )
2002-06-13 17:28:25 -07:00
{
2002-06-13 17:36:15 -07:00
switch ( optid ) {
2004-04-30 14:02:17 +03:00
case ' # ' :
DBUG_PUSH ( argument ? argument : default_dbug_option ) ;
break ;
2002-06-13 17:36:15 -07:00
case ' p ' :
if ( argument )
{
2002-11-22 18:30:55 -08:00
char * start = argument ;
2002-06-13 17:36:15 -07:00
my_free ( opt_password , MYF ( MY_ALLOW_ZERO_PTR ) ) ;
opt_password = my_strdup ( argument , MYF ( MY_FAE ) ) ;
2004-06-04 18:38:18 +04:00
while ( * argument ) * argument + + = ' x ' ; /* Destroy argument */
2002-11-22 18:30:55 -08:00
if ( * start )
start [ 1 ] = 0 ;
2002-06-13 17:28:25 -07:00
}
2002-06-13 17:36:15 -07:00
else
tty_password = 1 ;
break ;
case ' ? ' :
2004-06-04 18:38:18 +04:00
case ' I ' : /* Info */
2002-06-13 17:28:25 -07:00
usage ( ) ;
2002-11-22 18:30:55 -08:00
exit ( 0 ) ;
2002-06-13 17:36:15 -07:00
break ;
2002-06-13 17:28:25 -07:00
}
2002-06-13 17:36:15 -07:00
return 0 ;
2002-06-13 17:28:25 -07:00
}
2002-06-13 17:36:15 -07:00
static void get_options ( int argc , char * * argv )
{
int ho_error ;
2004-06-04 18:38:18 +04:00
if ( ( ho_error = handle_options ( & argc , & argv , client_test_long_options ,
2003-02-04 18:54:14 -08:00
get_one_option ) ) )
2002-06-13 17:36:15 -07:00
exit ( ho_error ) ;
if ( tty_password )
2004-06-04 18:38:18 +04:00
opt_password = get_tty_password ( NullS ) ;
2002-06-13 17:36:15 -07:00
return ;
}
2002-06-13 17:28:25 -07:00
2003-01-30 14:33:49 -08:00
/*
Print the test output on successful execution before exiting
*/
static void print_test_output ( )
{
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n \n " ) ;
fprintf ( stdout , " All '%d' tests were successful (in '%d' iterations) " ,
2003-02-04 18:54:14 -08:00
test_count - 1 , opt_count ) ;
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " \n Total execution time: %g SECS " , total_time ) ;
2003-01-30 14:33:49 -08:00
if ( opt_count > 1 )
2004-06-04 18:38:18 +04:00
fprintf ( stdout , " (Avg: %g SECS) " , total_time / opt_count ) ;
fprintf ( stdout , " \n \n !!! SUCCESS !!! \n " ) ;
2003-01-30 14:33:49 -08:00
}
2004-06-04 18:38:18 +04:00
/***************************************************************************
main routine
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2002-06-13 17:36:15 -07:00
int main ( int argc , char * * argv )
2004-06-04 18:38:18 +04:00
{
2004-03-05 16:55:09 +03:00
DEBUGGER_OFF ;
2003-01-29 11:38:59 +04:00
MY_INIT ( argv [ 0 ] ) ;
2003-02-04 18:54:14 -08:00
2004-06-04 18:38:18 +04:00
load_defaults ( " my " , client_test_load_default_groups , & argc , & argv ) ;
2003-02-04 18:54:14 -08:00
defaults_argv = argv ;
2004-06-04 18:38:18 +04:00
get_options ( argc , argv ) ;
2003-01-07 18:53:46 -08:00
client_connect ( ) ; /* connect to server */
2004-06-04 18:38:18 +04:00
2003-01-30 14:33:49 -08:00
total_time = 0 ;
2004-06-04 18:38:18 +04:00
for ( iter_count = 1 ; iter_count < = opt_count ; iter_count + + )
2003-01-22 01:30:13 -08:00
{
/* Start of tests */
2003-01-28 09:24:27 -08:00
test_count = 1 ;
2004-06-04 18:38:18 +04:00
2003-01-28 09:24:27 -08:00
start_time = time ( ( time_t * ) 0 ) ;
2004-02-08 20:14:13 +02:00
2003-05-21 01:15:04 -07:00
client_query ( ) ; /* simple client query test */
# if NOT_YET_WORKING
/* Used for internal new development debugging */
2004-06-04 18:38:18 +04:00
test_drop_temp ( ) ; /* Test DROP TEMPORARY TABLE Access checks */
2003-05-21 01:15:04 -07:00
# endif
2004-06-04 18:38:18 +04:00
test_fetch_seek ( ) ; /* Test stmt seek() functions */
2003-06-04 00:19:09 -07:00
test_fetch_nobuffs ( ) ; /* to fecth without prior bound buffers */
2003-01-31 13:43:38 -08:00
test_open_direct ( ) ; /* direct execution in the middle of open stmts */
2003-01-22 01:30:13 -08:00
test_fetch_null ( ) ; /* to fetch null data */
2004-04-13 00:13:25 +04:00
test_ps_null_param ( ) ; /* Fetch value of null parameter */
2004-06-04 18:38:18 +04:00
test_fetch_date ( ) ; /* to fetch date, time and timestamp */
2003-01-22 01:30:13 -08:00
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 */
test_bind_result_ext ( ) ; /* result bind test - extension */
test_bind_result_ext1 ( ) ; /* result bind test - extension */
test_select_direct ( ) ; /* direct select - protocol_simple debug */
test_select_prepare ( ) ; /* prepare select - protocol_prep debug */
test_select ( ) ; /* simple select test */
test_select_version ( ) ; /* select with variables */
2004-04-14 01:42:01 +04:00
test_ps_conj_select ( ) ; /* prepare select with "where a=? or b=?" */
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
test_select_show_table ( ) ; /* simple show prepare */
2003-01-03 23:38:47 -08:00
# if NOT_USED
2004-06-04 18:38:18 +04:00
/*
Enable this tests from 4.1 .1 when mysql_param_result ( ) is
supported
2003-01-22 01:30:13 -08:00
*/
test_select_meta ( ) ; /* select param meta information */
2004-06-04 18:38:18 +04:00
test_update_meta ( ) ; /* update param meta information */
2003-01-22 01:30:13 -08:00
test_insert_meta ( ) ; /* insert param meta information */
2003-01-03 23:38:47 -08:00
# endif
2003-01-22 01:30:13 -08:00
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_select_show ( ) ; /* prepare - show test */
test_prepare_noparam ( ) ; /* prepare without parameters */
2004-06-04 18:38:18 +04:00
test_bind_result ( ) ; /* result bind test */
test_prepare_simple ( ) ; /* simple prepare */
2003-01-22 01:30:13 -08:00
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_simple_delete ( ) ; /* prepare with delete */
2004-06-04 18:38:18 +04:00
test_double_compare ( ) ; /* float comparision */
2003-06-04 00:19:09 -07:00
client_store_result ( ) ; /* usage of mysql_store_result() */
2004-06-04 18:38:18 +04:00
client_use_result ( ) ; /* usage of mysql_use_result() */
2003-01-22 01:30:13 -08:00
test_tran_bdb ( ) ; /* transaction test on BDB table type */
2004-06-04 18:38:18 +04:00
test_tran_innodb ( ) ; /* transaction test on InnoDB table type */
2004-02-12 03:10:26 +02:00
test_prepare_ext ( ) ; /* test prepare with all types
2004-06-04 18:38:18 +04:00
conversion - - TODO */
2003-01-22 01:30:13 -08:00
test_prepare_syntax ( ) ; /* syntax check for prepares */
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_prepare_resultset ( ) ; /* prepare meta info test */
2003-01-27 10:54:45 -08:00
test_stmt_close ( ) ; /* mysql_stmt_close() test -- hangs */
2003-01-22 01:30:13 -08:00
test_prepare_field_result ( ) ; /* prepare meta info */
2003-02-04 18:54:14 -08:00
test_multi_stmt ( ) ; /* multi stmt test */
2004-02-20 15:37:45 +02:00
test_multi_statements ( ) ; /* test multi statement execution */
2004-06-04 18:38:18 +04:00
test_prepare_multi_statements ( ) ; /* check that multi statements are
2004-04-27 03:44:41 +04:00
disabled in PS */
2003-01-22 01:30:13 -08:00
test_store_result ( ) ; /* test the store_result */
test_store_result1 ( ) ; /* test store result without buffers */
test_store_result2 ( ) ; /* test store result for misc case */
2003-01-23 22:39:07 -08:00
test_subselect ( ) ; /* test subselect prepare -TODO*/
test_date ( ) ; /* test the MYSQL_TIME conversion */
test_date_date ( ) ; /* test conversion from DATE to all */
test_date_time ( ) ; /* test conversion from TIME to all */
test_date_ts ( ) ; /* test conversion from TIMESTAMP to all */
test_date_dt ( ) ; /* test conversion from DATETIME to all */
2003-01-24 03:17:26 -08:00
test_prepare_alter ( ) ; /* change table schema in middle of prepare */
test_manual_sample ( ) ; /* sample in the manual */
test_pure_coverage ( ) ; /* keep pure coverage happy */
test_buffers ( ) ; /* misc buffer handling */
2003-02-04 18:54:14 -08:00
test_ushort_bug ( ) ; /* test a simple conv bug from php */
2003-02-05 12:21:01 -08:00
test_sshort_bug ( ) ; /* test a simple conv bug from php */
test_stiny_bug ( ) ; /* test a simple conv bug from php */
2004-06-04 18:38:18 +04:00
test_field_misc ( ) ; /* check the field info for misc case, bug: #74 */
2003-02-24 17:05:03 -08:00
test_set_option ( ) ; /* test the SET OPTION feature, bug #85 */
2004-05-15 17:07:44 +05:00
/*TODO HF: here should be NO_EMBEDDED_ACCESS_CHECKS*/
# ifndef EMBEDDED_LIBRARY
2004-06-04 18:38:18 +04:00
test_prepare_grant ( ) ; /* Test the GRANT command, bug #89 */
2004-05-15 17:07:44 +05:00
# endif
2003-02-24 17:05:03 -08:00
test_frm_bug ( ) ; /* test the crash when .frm is invalid, bug #93 */
2003-03-04 14:22:30 -08:00
test_explain_bug ( ) ; /* test for the EXPLAIN, bug #115 */
test_decimal_bug ( ) ; /* test for the decimal bug */
2003-05-21 01:15:04 -07:00
test_nstmts ( ) ; /* test n statements */
2004-06-04 18:38:18 +04:00
test_logs ( ) ; ; /* Test logs */
test_cuted_rows ( ) ; /* Test for WARNINGS from cuted rows */
test_fetch_offset ( ) ; /* Test mysql_stmt_fetch_column with offset */
test_fetch_column ( ) ; /* Test mysql_stmt_fetch_column */
2003-06-08 09:11:14 -07:00
test_mem_overun ( ) ; /* test DBD ovverun bug */
test_list_fields ( ) ; /* test COM_LIST_FIELDS for DEFAULT */
test_free_result ( ) ; /* test mysql_stmt_free_result() */
2004-06-04 18:38:18 +04:00
test_free_store_result ( ) ; /* test to make sure stmt results are cleared
2003-06-08 09:11:14 -07:00
during stmt_free_result ( ) */
2003-06-24 10:43:57 -07:00
test_sqlmode ( ) ; /* test for SQL_MODE */
2003-07-21 00:13:22 -07:00
test_ts ( ) ; /* test for timestamp BR#819 */
2003-09-02 14:37:06 +03:00
test_bug1115 ( ) ; /* BUG#1115 */
2003-09-02 19:56:55 +03:00
test_bug1180 ( ) ; /* BUG#1180 */
2003-11-23 00:48:18 +03:00
test_bug1500 ( ) ; /* BUG#1500 */
2004-06-04 18:38:18 +04:00
test_bug1644 ( ) ; /* BUG#1644 */
test_bug1946 ( ) ; /* test that placeholders are allowed only in
2003-11-26 20:18:55 +03:00
prepared queries */
2004-06-04 18:38:18 +04:00
test_bug2248 ( ) ; /* BUG#2248 */
2004-02-11 12:32:47 +01:00
test_parse_error_and_bad_length ( ) ; /* test if bad length param in
2004-06-04 18:38:18 +04:00
mysql_stmt_prepare ( ) triggers error */
2004-02-06 16:03:09 +03:00
test_bug2247 ( ) ; /* test that mysql_stmt_affected_rows() returns
2004-06-04 18:38:18 +04:00
number of rows affected by last prepared
2004-02-13 00:50:03 +03:00
statement execution */
2004-06-04 18:38:18 +04:00
test_subqueries ( ) ; /* repeatable subqueries */
2004-02-08 20:14:13 +02:00
test_bad_union ( ) ; /* correct setup of UNION */
2004-06-04 18:38:18 +04:00
test_distinct ( ) ; /* distinct aggregate functions */
2004-03-17 14:26:26 +02:00
test_subqueries_ref ( ) ; /* outer reference in subqueries converted
2004-06-04 18:38:18 +04:00
Item_field - > Item_ref */
test_union ( ) ; /* test union with prepared statements */
test_bug3117 ( ) ; /* BUG#3117: LAST_INSERT_ID() */
test_join ( ) ; /* different kinds of join, BUG#2794 */
test_selecttmp ( ) ; /* temporary table used in select execution */
test_create_drop ( ) ; /* some table manipulation BUG#2811 */
test_rename ( ) ; /* rename test */
test_do_set ( ) ; /* DO & SET commands test BUG#3393 */
test_multi ( ) ; /* test of multi delete & update */
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-08 00:16:17 +03:00
test_insert_select ( ) ; /* test INSERT ... SELECT */
2004-04-08 11:07:37 +03:00
test_bind_nagative ( ) ; /* bind negative to unsigned BUG#3223 */
2004-06-04 18:38:18 +04:00
test_derived ( ) ; /* derived table with parameter BUG#3020 */
test_xjoin ( ) ; /* complex join test */
2004-04-30 03:00:19 +04:00
test_bug3035 ( ) ; /* inserts of INT32_MAX/UINT32_MAX */
2004-06-04 18:38:18 +04:00
test_union2 ( ) ; /* repeatable execution of union (Bug #3577) */
test_bug1664 ( ) ; /* test for bugs in mysql_stmt_send_long_data()
2004-05-04 19:13:18 +04:00
call ( Bug # 1664 ) */
2004-05-25 02:03:49 +04:00
test_union_param ( ) ;
2004-06-04 18:38:18 +04:00
test_order_param ( ) ; /* ORDER BY with parameters in select list
( Bug # 3686 */
2004-05-25 02:03:49 +04:00
test_ps_i18n ( ) ; /* test for i18n support in binary protocol */
2004-05-31 14:21:48 +04:00
test_bug3796 ( ) ; /* test for select concat(?, <string>) */
2004-06-09 03:21:50 +04:00
test_bug4026 ( ) ; /* test microseconds precision of time types */
2004-06-11 13:12:29 +04:00
test_bug4079 ( ) ; /* erroneous subquery in prepared statement */
2004-06-22 11:04:41 +04:00
test_bug4236 ( ) ; /* init -> execute */
Fix for Bug#4030 "Client side conversion string -> date type doesn't
work (prepared statements)" and after-review fixes:
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- functions str_to_time and str_to_TIME moved to sql-common
- send_data_str now supports MYSQL_TYPE_TIME, MYSQL_TIME_DATE,
MYSQL_TIME_DATETIME types of user input buffers.
- few more comments in the client library
- a test case added.
VC++Files/libmysql/libmysql.dsp:
new file: my_time.c
VC++Files/libmysqld/libmysqld.dsp:
new file: my_time.c
VC++Files/sql/mysqld.dsp:
new file: my_time.c
include/Makefile.am:
- mysql_time.h added to the list of installed client library headers
include/mysql.h:
- declarations for MYSQL_TIME and enum_mysql_timestamp_type moved to
mysql_time.h, which is in shared use of client library and mysys.
libmysql/Makefile.shared:
- my_time.lo added to the list of libmysql objects
libmysql/libmysql.c:
Fix for bug#4030 "Client side conversion string -> date type doesn't work
(prepared statements)" and cleanup.
- added case labels for TIME/DATE/DATETIME types to send_data_str
- comments for read_binary_{date,time,datetime}, fetch_result_*, fetch_results.
libmysqld/Makefile.am:
- my_time.c added
sql-common/Makefile.am:
- my_time.c added to the list of files included into source distribution.
sql/Makefile.am:
my_time.c added to the list of mysqld sources.
sql/field.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/item_timefunc.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/mysql_priv.h:
- added typedefs for TIME and timestamp_type
- removed declarations for str_to_time and str_to_TIME (now this functions
reside in mysys)
sql/mysqld.cc:
- log_10_int moved to mysys (it's used by str_to_TIME and str_to_time)
- enum values TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
sql/set_var.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
sql/set_var.h:
- fixed timestamp_type usage to be compatible with typedef.
sql/sql_prepare.cc:
- TIMESTAMP_{TIME,DATE,DATETIME} were renamed to
MYSQL_TIMESTAMP_{TIME,DATE,DATETIME}
- embedded library implementation of set_param_{time,date,datetime} is
much simplier now, as MYSQL_TIME is the same as TIME.
sql/sql_yacc.yy:
- s/\<TIMESTAMP_/MYSQL_TIMESTAMP/gc
sql/structs.h:
- declarations for TIME and timestamp_type replaced with typedefs
- str_to_datetime arguments moved to mysys headers
sql/time.cc:
- str_to_time and str_to_TIME moved to mysys
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} as these names are now
exported to client.
- str_to_TIME renamed to str_to_datetime to pair with str_to_time
- str_to_TIME_with_warn renamed accordingly
sql/tztime.cc:
- TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to
MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...}
tests/client_test.c:
- a test case for Bug#4030 "Client side conversion string -> date type
doesn't work (prepared statements)"
2004-06-24 19:08:36 +04:00
test_bug4030 ( ) ; /* test conversion string -> time types in
libmysql */
2004-06-04 18:38:18 +04:00
/*
XXX : PLEASE RUN THIS PROGRAM UNDER VALGRIND AND VERIFY THAT YOUR TEST
DOESN ' T CONTAIN WARNINGS / ERRORS BEFORE YOU PUSH .
*/
2003-10-27 10:50:18 +01:00
2003-01-28 09:24:27 -08:00
end_time = time ( ( time_t * ) 0 ) ;
total_time + = difftime ( end_time , start_time ) ;
2004-06-04 18:38:18 +04:00
2003-01-22 01:30:13 -08:00
/* End of tests */
}
2004-06-04 18:38:18 +04:00
2003-01-18 12:58:19 -08:00
client_disconnect ( ) ; /* disconnect from server */
2003-02-04 18:54:14 -08:00
free_defaults ( defaults_argv ) ;
2003-01-30 14:33:49 -08:00
print_test_output ( ) ;
2004-03-05 16:55:09 +03:00
my_end ( 0 ) ;
2002-06-13 17:28:25 -07:00
return ( 0 ) ;
}
2004-06-04 18:38:18 +04:00