diff --git a/include/mysql.h b/include/mysql.h index a5d8dc4c5f9..41302191066 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -87,8 +87,8 @@ typedef struct st_mysql_field { char *db; /* Database for table */ char *catalog; /* Catalog for table */ char *def; /* Default value (set by mysql_list_fields) */ - unsigned long length; /* Width of column */ - unsigned long max_length; /* Max width of selected set */ + unsigned long length; /* Width of column (create length) */ + unsigned long max_length; /* Max width for selected set */ unsigned int name_length; unsigned int org_name_length; unsigned int table_length; @@ -120,6 +120,7 @@ typedef unsigned long long my_ulonglong; typedef struct st_mysql_rows { struct st_mysql_rows *next; /* list of rows */ MYSQL_ROW data; + ulong length; } MYSQL_ROWS; typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ @@ -547,11 +548,14 @@ typedef struct st_mysql_bind unsigned long offset; /* offset position for char/binary fetch */ unsigned long internal_length; /* Used if length is 0 */ unsigned int param_number; /* For null count and error messages */ + unsigned int pack_length; /* Internal length for packed data */ my_bool is_unsigned; /* set if integer type is unsigned */ my_bool long_data_used; /* If used with mysql_send_long_data */ my_bool internal_is_null; /* Used if is_null is 0 */ void (*store_param_func)(NET *net, struct st_mysql_bind *param); void (*fetch_result)(struct st_mysql_bind *, unsigned char **row); + void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); } MYSQL_BIND; diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index ac6d6b8777a..83346f46c5e 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -85,6 +85,7 @@ my_bool net_flush(NET *net); #define MAX_LONG_DATA_LENGTH 8192 #define unsigned_field(A) ((A)->flags & UNSIGNED_FLAG) +static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data); static void append_wild(char *to,char *end,const char *wild); sig_handler pipe_sig_handler(int sig); static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to, @@ -2529,10 +2530,6 @@ my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, { switch (attr_type) { case STMT_ATTR_UPDATE_MAX_LENGTH: - /* - Do we need a flags variable for all attributes or a bool for each - attribute? - */ stmt->update_max_length= value ? *(const my_bool*) value : 0; break; default: @@ -2549,7 +2546,7 @@ my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt, switch (attr_type) { case STMT_ATTR_UPDATE_MAX_LENGTH: *(unsigned long *) value= stmt->update_max_length; - break; + break; default: return TRUE; } @@ -3341,6 +3338,43 @@ static void fetch_result_str(MYSQL_BIND *param, uchar **row) } +/* + functions to calculate max lengths for strings during + mysql_stmt_store_result() +*/ + +static void skip_result_fixed(MYSQL_BIND *param, + MYSQL_FIELD *field __attribute__((unused)), + uchar **row) + +{ + (*row)+= param->pack_length; +} + + +static void skip_result_with_length(MYSQL_BIND *param __attribute__((unused)), + MYSQL_FIELD *field __attribute__((unused)), + uchar **row) + +{ + ulong length= net_field_length(row); + (*row)+= length; +} + + +static void skip_result_string(MYSQL_BIND *param __attribute__((unused)), + MYSQL_FIELD *field, + uchar **row) + +{ + ulong length= net_field_length(row); + (*row)+= length; + if (field->max_length < length) + field->max_length= length; +} + + + /* Setup the bind buffers for resultset processing */ @@ -3348,6 +3382,7 @@ static void fetch_result_str(MYSQL_BIND *param, uchar **row) my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) { MYSQL_BIND *param, *end; + MYSQL_FIELD *field; ulong bind_count; uint param_count= 0; DBUG_ENTER("mysql_stmt_bind_result"); @@ -3370,7 +3405,9 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count); - for (param= stmt->bind, end= param+bind_count; param < end ; param++) + for (param= stmt->bind, end= param + bind_count, field= stmt->fields ; + param < end ; + param++, field++) { /* Set param->is_null to point to a dummy variable if it's not set. @@ -3388,15 +3425,18 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) /* Setup data copy functions for the different supported types */ switch (param->buffer_type) { case MYSQL_TYPE_NULL: /* for dummy binds */ + *param->length= 0; break; case MYSQL_TYPE_TINY: param->fetch_result= fetch_result_tinyint; *param->length= 1; break; case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_YEAR: param->fetch_result= fetch_result_short; *param->length= 2; break; + case MYSQL_TYPE_INT24: case MYSQL_TYPE_LONG: param->fetch_result= fetch_result_int32; *param->length= 4; @@ -3445,6 +3485,58 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) param->buffer_type, param_count); DBUG_RETURN(1); } + + /* Setup skip_result functions (to calculate max_length) */ + param->skip_result= skip_result_fixed; + switch (field->type) { + case MYSQL_TYPE_NULL: /* for dummy binds */ + param->pack_length= 0; + break; + case MYSQL_TYPE_TINY: + param->pack_length= 1; + break; + case MYSQL_TYPE_YEAR: + case MYSQL_TYPE_SHORT: + param->pack_length= 2; + break; + case MYSQL_TYPE_INT24: + case MYSQL_TYPE_LONG: + param->pack_length= 4; + break; + case MYSQL_TYPE_LONGLONG: + param->pack_length= 8; + break; + case MYSQL_TYPE_FLOAT: + param->pack_length= 4; + break; + case MYSQL_TYPE_DOUBLE: + param->pack_length= 8; + break; + case MYSQL_TYPE_TIME: + case MYSQL_TYPE_DATE: + case MYSQL_TYPE_DATETIME: + case MYSQL_TYPE_TIMESTAMP: + param->skip_result= skip_result_with_length; + break; + case MYSQL_TYPE_DECIMAL: + case MYSQL_TYPE_ENUM: + case MYSQL_TYPE_SET: + case MYSQL_TYPE_GEOMETRY: + case MYSQL_TYPE_TINY_BLOB: + case MYSQL_TYPE_MEDIUM_BLOB: + case MYSQL_TYPE_LONG_BLOB: + case MYSQL_TYPE_BLOB: + case MYSQL_TYPE_VAR_STRING: + case MYSQL_TYPE_STRING: + param->skip_result= skip_result_string; + break; + default: + strmov(stmt->sqlstate, unknown_sqlstate); + sprintf(stmt->last_error, + ER(stmt->last_errno= CR_UNSUPPORTED_PARAM_TYPE), + field->type, param_count); + DBUG_RETURN(1); + } } stmt->bind_result_done= TRUE; DBUG_RETURN(0); @@ -3458,7 +3550,7 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind) static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) { MYSQL_BIND *bind, *end; - MYSQL_FIELD *field, *field_end; + MYSQL_FIELD *field; uchar *null_ptr, bit; /* Precondition: if stmt->field_count is zero or row is NULL, read_row_* @@ -3478,10 +3570,8 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) bit= 4; /* first 2 bits are reserved */ /* Copy complete row to application buffers */ - for (bind= stmt->bind, end= (MYSQL_BIND *) bind + stmt->field_count, - field= stmt->fields, - field_end= (MYSQL_FIELD *)stmt->fields+stmt->field_count; - bind < end && field < field_end; + for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields ; + bind < end ; bind++, field++) { if (*null_ptr & bit) @@ -3514,6 +3604,7 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row) return 0; } + int cli_unbuffered_fetch(MYSQL *mysql, char **row) { if (packet_error == net_safe_read(mysql)) @@ -3524,6 +3615,7 @@ int cli_unbuffered_fetch(MYSQL *mysql, char **row) return 0; } + /* Fetch and return row data to bound buffers, if any */ @@ -3620,6 +3712,28 @@ int cli_read_binary_rows(MYSQL_STMT *stmt) mysql= mysql->last_used_con; + if (stmt->update_max_length && !stmt->bind_result_done) + { + /* + We must initalize the bind structure to be able to calculate + max_length + */ + MYSQL_BIND *bind, *end; + MYSQL_FIELD *field; + bzero((char*) stmt->bind, sizeof(*stmt->bind)* stmt->field_count); + + for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields; + bind < end ; + bind++, field++) + { + bind->buffer_type= field->type; + bind->buffer_length=1; + } + + mysql_stmt_bind_result(stmt, stmt->bind); + stmt->bind_result_done= 0; /* No normal bind done */ + } + while ((pkt_len= net_safe_read(mysql)) != packet_error) { cp= net->read_pos; @@ -3629,13 +3743,16 @@ int cli_read_binary_rows(MYSQL_STMT *stmt) sizeof(MYSQL_ROWS) + pkt_len - 1))) { set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate); - DBUG_RETURN(1); + goto err; } cur->data= (MYSQL_ROW) (cur+1); *prev_ptr= cur; prev_ptr= &cur->next; memcpy((char *) cur->data, (char *) cp+1, pkt_len-1); - ++result->rows; + cur->length= pkt_len; /* To allow us to do sanity checks */ + result->rows++; + if (stmt->update_max_length) + stmt_update_metadata(stmt, cur); } else { @@ -3647,6 +3764,8 @@ int cli_read_binary_rows(MYSQL_STMT *stmt) } } set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate); + +err: DBUG_RETURN(1); } @@ -3909,6 +4028,49 @@ const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt) DBUG_RETURN(stmt->last_error); } + +/* + Update meta data for statement + + SYNOPSIS + stmt_update_metadata() + stmt Statement handler + row Binary data + + NOTES + Only updates MYSQL_FIELD->max_length for strings + +*/ + +static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data) +{ + MYSQL_BIND *bind, *end; + MYSQL_FIELD *field; + uchar *null_ptr, bit; + uchar *row= (uchar*) data->data; + uchar *row_end= row + data->length; + + null_ptr= row; + row+= (stmt->field_count+9)/8; /* skip null bits */ + bit= 4; /* first 2 bits are reserved */ + + /* Go throw all fields and calculate metadata */ + for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields ; + bind < end ; + bind++, field++) + { + if (!(*null_ptr & bit)) + (*bind->skip_result)(bind, field, &row); + DBUG_ASSERT(row <= row_end); + if (!((bit<<=1) & 255)) + { + bit= 1; /* To next byte */ + null_ptr++; + } + } +} + + /******************************************************************** Transactional APIs *********************************************************************/ diff --git a/mysql-test/ndb/stop_ndbcluster b/mysql-test/ndb/stop_ndbcluster index 09e22cf69c4..e1a98f1de07 100755 --- a/mysql-test/ndb/stop_ndbcluster +++ b/mysql-test/ndb/stop_ndbcluster @@ -22,9 +22,9 @@ done stop_default_ndbcluster() { -if [ ! -f $pidfile ] ; then - exit 0 -fi +#if [ ! -f $pidfile ] ; then +# exit 0 +#fi if [ ! -f $cfgfile ] ; then echo "$cfgfile missing" @@ -43,8 +43,11 @@ echo "all stop" | $exec_mgmtclient sleep 5 -kill `cat $pidfile` -rm $pidfile +if [ -f $pidfile ] ; then + kill `cat $pidfile` + rm $pidfile +fi + } stop_default_ndbcluster diff --git a/mysql-test/r/ndb_index_ordered.result b/mysql-test/r/ndb_index_ordered.result index 46cb74bcf6d..9f24e18c88e 100644 --- a/mysql-test/r/ndb_index_ordered.result +++ b/mysql-test/r/ndb_index_ordered.result @@ -119,3 +119,72 @@ select * from t1 order by a; a b c 4 5 12 drop table t1; +CREATE TABLE t1 ( +a int unsigned NOT NULL PRIMARY KEY, +b int unsigned not null, +c int unsigned not null, +) engine = ndb; +create index a1 on t1 (b, c); +insert into t1 values (1, 2, 13); +insert into t1 values (2,3, 13); +insert into t1 values (3, 4, 12); +insert into t1 values (4, 5, 12); +insert into t1 values (5,6, 12); +insert into t1 values (6,7, 12); +insert into t1 values (7, 2, 1); +insert into t1 values (8,3, 6); +insert into t1 values (9, 4, 12); +insert into t1 values (14, 5, 4); +insert into t1 values (15,5,5); +insert into t1 values (16,5, 6); +insert into t1 values (17,4,4); +insert into t1 values (18,1, 7); +select * from t1 order by a; +a b c +1 2 13 +2 3 13 +3 4 12 +4 5 12 +5 6 12 +6 7 12 +7 2 1 +8 3 6 +9 4 12 +14 5 4 +15 5 5 +16 5 6 +17 4 4 +18 1 7 +select * from t1 where b<=5 order by a; +a b c +1 2 13 +2 3 13 +3 4 12 +4 5 12 +7 2 1 +8 3 6 +9 4 12 +14 5 4 +15 5 5 +16 5 6 +17 4 4 +18 1 7 +select * from t1 where b<=5 and c=0; +a b c +insert into t1 values (19,4, 0); +select * from t1 where b<=5 and c=0; +a b c +19 4 0 +select * from t1 where b=4 and c<=5; +a b c +19 4 0 +17 4 4 +select * from t1 where b<=4 and c<=5 order by a; +a b c +7 2 1 +17 4 4 +19 4 0 +select * from t1 where b<=5 and c=0 or b<=5 and c=2; +a b c +19 4 0 +drop table t1; diff --git a/mysql-test/r/ndb_insert.result b/mysql-test/r/ndb_insert.result new file mode 100644 index 00000000000..93f46c85499 --- /dev/null +++ b/mysql-test/r/ndb_insert.result @@ -0,0 +1,419 @@ +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +pk1 INT NOT NULL PRIMARY KEY, +b INT NOT NULL, +c INT NOT NULL +) ENGINE=ndbcluster; +INSERT INTO t1 VALUES (0, 0, 0); +SELECT * FROM t1; +pk1 b c +0 0 0 +INSERT INTO t1 VALUES +(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), +(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10), +(11,11,11),(12,12,12),(13,13,13),(14,14,14),(15,15,15), +(16,16,16),(17,17,17),(18,18,18),(19,19,19),(20,20,20), +(21,21,21),(22,22,22),(23,23,23),(24,24,24),(25,25,25), +(26,26,26),(27,27,27),(28,28,28),(29,29,29),(30,30,30), +(31,31,31),(32,32,32),(33,33,33),(34,34,34),(35,35,35), +(36,36,36),(37,37,37),(38,38,38),(39,39,39),(40,40,40), +(41,41,41),(42,42,42),(43,43,43),(44,44,44),(45,45,45), +(46,46,46),(47,47,47),(48,48,48),(49,49,49),(50,50,50), +(51,51,51),(52,52,52),(53,53,53),(54,54,54),(55,55,55), +(56,56,56),(57,57,57),(58,58,58),(59,59,59),(60,60,60), +(61,61,61),(62,62,62),(63,63,63),(64,64,64),(65,65,65), +(66,66,66),(67,67,67),(68,68,68),(69,69,69),(70,70,70), +(71,71,71),(72,72,72),(73,73,73),(74,74,74),(75,75,75), +(76,76,76),(77,77,77),(78,78,78),(79,79,79),(80,80,80), +(81,81,81),(82,82,82),(83,83,83),(84,84,84),(85,85,85), +(86,86,86),(87,87,87),(88,88,88),(89,89,89),(90,90,90), +(91,91,91),(92,92,92),(93,93,93),(94,94,94),(95,95,95), +(96,96,96),(97,97,97),(98,98,98),(99,99,99),(100,100,100), +(101,101,101),(102,102,102),(103,103,103),(104,104,104),(105,105,105), +(106,106,106),(107,107,107),(108,108,108),(109,109,109),(110,110,110), +(111,111,111),(112,112,112),(113,113,113),(114,114,114),(115,115,115), +(116,116,116),(117,117,117),(118,118,118),(119,119,119),(120,120,120), +(121,121,121),(122,122,122),(123,123,123),(124,124,124),(125,125,125), +(126,126,126),(127,127,127),(128,128,128),(129,129,129),(130,130,130), +(131,131,131),(132,132,132),(133,133,133),(134,134,134),(135,135,135), +(136,136,136),(137,137,137),(138,138,138),(139,139,139),(140,140,140), +(141,141,141),(142,142,142),(143,143,143),(144,144,144),(145,145,145), +(146,146,146),(147,147,147),(148,148,148),(149,149,149),(150,150,150), +(151,151,151),(152,152,152),(153,153,153),(154,154,154),(155,155,155), +(156,156,156),(157,157,157),(158,158,158),(159,159,159),(160,160,160), +(161,161,161),(162,162,162),(163,163,163),(164,164,164),(165,165,165), +(166,166,166),(167,167,167),(168,168,168),(169,169,169),(170,170,170), +(171,171,171),(172,172,172),(173,173,173),(174,174,174),(175,175,175), +(176,176,176),(177,177,177),(178,178,178),(179,179,179),(180,180,180), +(181,181,181),(182,182,182),(183,183,183),(184,184,184),(185,185,185), +(186,186,186),(187,187,187),(188,188,188),(189,189,189),(190,190,190), +(191,191,191),(192,192,192),(193,193,193),(194,194,194),(195,195,195), +(196,196,196),(197,197,197),(198,198,198),(199,199,199),(200,200,200), +(201,201,201),(202,202,202),(203,203,203),(204,204,204),(205,205,205), +(206,206,206),(207,207,207),(208,208,208),(209,209,209),(210,210,210), +(211,211,211),(212,212,212),(213,213,213),(214,214,214),(215,215,215), +(216,216,216),(217,217,217),(218,218,218),(219,219,219),(220,220,220), +(221,221,221),(222,222,222),(223,223,223),(224,224,224),(225,225,225), +(226,226,226),(227,227,227),(228,228,228),(229,229,229),(230,230,230), +(231,231,231),(232,232,232),(233,233,233),(234,234,234),(235,235,235), +(236,236,236),(237,237,237),(238,238,238),(239,239,239),(240,240,240), +(241,241,241),(242,242,242),(243,243,243),(244,244,244),(245,245,245), +(246,246,246),(247,247,247),(248,248,248),(249,249,249),(250,250,250), +(251,251,251),(252,252,252),(253,253,253),(254,254,254),(255,255,255), +(256,256,256),(257,257,257),(258,258,258),(259,259,259),(260,260,260), +(261,261,261),(262,262,262),(263,263,263),(264,264,264),(265,265,265), +(266,266,266),(267,267,267),(268,268,268),(269,269,269),(270,270,270), +(271,271,271),(272,272,272),(273,273,273),(274,274,274),(275,275,275), +(276,276,276),(277,277,277),(278,278,278),(279,279,279),(280,280,280), +(281,281,281),(282,282,282),(283,283,283),(284,284,284),(285,285,285), +(286,286,286),(287,287,287),(288,288,288),(289,289,289),(290,290,290), +(291,291,291),(292,292,292),(293,293,293),(294,294,294),(295,295,295), +(296,296,296),(297,297,297),(298,298,298),(299,299,299),(300,300,300), +(301,301,301),(302,302,302),(303,303,303),(304,304,304),(305,305,305), +(306,306,306),(307,307,307),(308,308,308),(309,309,309),(310,310,310), +(311,311,311),(312,312,312),(313,313,313),(314,314,314),(315,315,315), +(316,316,316),(317,317,317),(318,318,318),(319,319,319),(320,320,320), +(321,321,321),(322,322,322),(323,323,323),(324,324,324),(325,325,325), +(326,326,326),(327,327,327),(328,328,328),(329,329,329),(330,330,330), +(331,331,331),(332,332,332),(333,333,333),(334,334,334),(335,335,335), +(336,336,336),(337,337,337),(338,338,338),(339,339,339),(340,340,340), +(341,341,341),(342,342,342),(343,343,343),(344,344,344),(345,345,345), +(346,346,346),(347,347,347),(348,348,348),(349,349,349),(350,350,350), +(351,351,351),(352,352,352),(353,353,353),(354,354,354),(355,355,355), +(356,356,356),(357,357,357),(358,358,358),(359,359,359),(360,360,360), +(361,361,361),(362,362,362),(363,363,363),(364,364,364),(365,365,365), +(366,366,366),(367,367,367),(368,368,368),(369,369,369),(370,370,370), +(371,371,371),(372,372,372),(373,373,373),(374,374,374),(375,375,375), +(376,376,376),(377,377,377),(378,378,378),(379,379,379),(380,380,380), +(381,381,381),(382,382,382),(383,383,383),(384,384,384),(385,385,385), +(386,386,386),(387,387,387),(388,388,388),(389,389,389),(390,390,390), +(391,391,391),(392,392,392),(393,393,393),(394,394,394),(395,395,395), +(396,396,396),(397,397,397),(398,398,398),(399,399,399),(400,400,400), +(401,401,401),(402,402,402),(403,403,403),(404,404,404),(405,405,405), +(406,406,406),(407,407,407),(408,408,408),(409,409,409),(410,410,410), +(411,411,411),(412,412,412),(413,413,413),(414,414,414),(415,415,415), +(416,416,416),(417,417,417),(418,418,418),(419,419,419),(420,420,420), +(421,421,421),(422,422,422),(423,423,423),(424,424,424),(425,425,425), +(426,426,426),(427,427,427),(428,428,428),(429,429,429),(430,430,430), +(431,431,431),(432,432,432),(433,433,433),(434,434,434),(435,435,435), +(436,436,436),(437,437,437),(438,438,438),(439,439,439),(440,440,440), +(441,441,441),(442,442,442),(443,443,443),(444,444,444),(445,445,445), +(446,446,446),(447,447,447),(448,448,448),(449,449,449),(450,450,450), +(451,451,451),(452,452,452),(453,453,453),(454,454,454),(455,455,455), +(456,456,456),(457,457,457),(458,458,458),(459,459,459),(460,460,460), +(461,461,461),(462,462,462),(463,463,463),(464,464,464),(465,465,465), +(466,466,466),(467,467,467),(468,468,468),(469,469,469),(470,470,470), +(471,471,471),(472,472,472),(473,473,473),(474,474,474),(475,475,475), +(476,476,476),(477,477,477),(478,478,478),(479,479,479),(480,480,480), +(481,481,481),(482,482,482),(483,483,483),(484,484,484),(485,485,485), +(486,486,486),(487,487,487),(488,488,488),(489,489,489),(490,490,490), +(491,491,491),(492,492,492),(493,493,493),(494,494,494),(495,495,495), +(496,496,496),(497,497,497),(498,498,498),(499,499,499),(500, 500, 500); +SELECT COUNT(*) FROM t1; +COUNT(*) +501 +INSERT INTO t1 VALUES +(501,501,501),(502,502,502),(503,503,503),(504,504,504),(505,505,505), +(506,506,506),(507,507,507),(508,508,508),(509,509,509),(510,510,510), +(511,511,511),(512,512,512),(513,513,513),(514,514,514),(515,515,515), +(516,516,516),(517,517,517),(518,518,518),(519,519,519),(520,520,520), +(521,521,521),(522,522,522),(523,523,523),(524,524,524),(525,525,525), +(526,526,526),(527,527,527),(528,528,528),(529,529,529),(530,530,530), +(531,531,531),(532,532,532),(533,533,533),(534,534,534),(535,535,535), +(536,536,536),(537,537,537),(538,538,538),(539,539,539),(540,540,540), +(541,541,541),(542,542,542),(543,543,543),(544,544,544),(545,545,545), +(546,546,546),(547,547,547),(548,548,548),(549,549,549),(550,550,550), +(551,551,551),(552,552,552),(553,553,553),(554,554,554),(555,555,555), +(556,556,556),(557,557,557),(558,558,558),(559,559,559),(560,560,560), +(561,561,561),(562,562,562),(563,563,563),(564,564,564),(565,565,565), +(566,566,566),(567,567,567),(568,568,568),(569,569,569),(570,570,570), +(571,571,571),(572,572,572),(573,573,573),(574,574,574),(575,575,575), +(576,576,576),(577,577,577),(578,578,578),(579,579,579),(580,580,580), +(581,581,581),(582,582,582),(583,583,583),(584,584,584),(585,585,585), +(586,586,586),(587,587,587),(588,588,588),(589,589,589),(590,590,590), +(591,591,591),(592,592,592),(593,593,593),(594,594,594),(595,595,595), +(596,596,596),(597,597,597),(598,598,598),(599,599,599),(600,600,600), +(601,601,601),(602,602,602),(603,603,603),(604,604,604),(605,605,605), +(606,606,606),(607,607,607),(608,608,608),(609,609,609),(610,610,610), +(611,611,611),(612,612,612),(613,613,613),(614,614,614),(615,615,615), +(616,616,616),(617,617,617),(618,618,618),(619,619,619),(620,620,620), +(621,621,621),(622,622,622),(623,623,623),(624,624,624),(625,625,625), +(626,626,626),(627,627,627),(628,628,628),(629,629,629),(630,630,630), +(631,631,631),(632,632,632),(633,633,633),(634,634,634),(635,635,635), +(636,636,636),(637,637,637),(638,638,638),(639,639,639),(640,640,640), +(641,641,641),(642,642,642),(643,643,643),(644,644,644),(645,645,645), +(646,646,646),(647,647,647),(648,648,648),(649,649,649),(650,650,650), +(651,651,651),(652,652,652),(653,653,653),(654,654,654),(655,655,655), +(656,656,656),(657,657,657),(658,658,658),(659,659,659),(660,660,660), +(661,661,661),(662,662,662),(663,663,663),(664,664,664),(665,665,665), +(666,666,666),(667,667,667),(668,668,668),(669,669,669),(670,670,670), +(671,671,671),(672,672,672),(673,673,673),(674,674,674),(675,675,675), +(676,676,676),(677,677,677),(678,678,678),(679,679,679),(680,680,680), +(681,681,681),(682,682,682),(683,683,683),(684,684,684),(685,685,685), +(686,686,686),(687,687,687),(688,688,688),(689,689,689),(690,690,690), +(691,691,691),(692,692,692),(693,693,693),(694,694,694),(695,695,695), +(696,696,696),(697,697,697),(698,698,698),(699,699,699),(700,700,700), +(701,701,701),(702,702,702),(703,703,703),(704,704,704),(705,705,705), +(706,706,706),(707,707,707),(708,708,708),(709,709,709),(710,710,710), +(711,711,711),(712,712,712),(713,713,713),(714,714,714),(715,715,715), +(716,716,716),(717,717,717),(718,718,718),(719,719,719),(720,720,720), +(721,721,721),(722,722,722),(723,723,723),(724,724,724),(725,725,725), +(726,726,726),(727,727,727),(728,728,728),(729,729,729),(730,730,730), +(731,731,731),(732,732,732),(733,733,733),(734,734,734),(735,735,735), +(736,736,736),(737,737,737),(738,738,738),(739,739,739),(740,740,740), +(741,741,741),(742,742,742),(743,743,743),(744,744,744),(745,745,745), +(746,746,746),(747,747,747),(748,748,748),(749,749,749),(750,750,750), +(751,751,751),(752,752,752),(753,753,753),(754,754,754),(755,755,755), +(756,756,756),(757,757,757),(758,758,758),(759,759,759),(760,760,760), +(761,761,761),(762,762,762),(763,763,763),(764,764,764),(765,765,765), +(766,766,766),(767,767,767),(768,768,768),(769,769,769),(770,770,770), +(771,771,771),(772,772,772),(773,773,773),(774,774,774),(775,775,775), +(776,776,776),(777,777,777),(778,778,778),(779,779,779),(780,780,780), +(781,781,781),(782,782,782),(783,783,783),(784,784,784),(785,785,785), +(786,786,786),(787,787,787),(788,788,788),(789,789,789),(790,790,790), +(791,791,791),(792,792,792),(793,793,793),(794,794,794),(795,795,795), +(796,796,796),(797,797,797),(798,798,798),(799,799,799),(800,800,800), +(801,801,801),(802,802,802),(803,803,803),(804,804,804),(805,805,805), +(806,806,806),(807,807,807),(808,808,808),(809,809,809),(810,810,810), +(811,811,811),(812,812,812),(813,813,813),(814,814,814),(815,815,815), +(816,816,816),(817,817,817),(818,818,818),(819,819,819),(820,820,820), +(821,821,821),(822,822,822),(823,823,823),(824,824,824),(825,825,825), +(826,826,826),(827,827,827),(828,828,828),(829,829,829),(830,830,830), +(831,831,831),(832,832,832),(833,833,833),(834,834,834),(835,835,835), +(836,836,836),(837,837,837),(838,838,838),(839,839,839),(840,840,840), +(841,841,841),(842,842,842),(843,843,843),(844,844,844),(845,845,845), +(846,846,846),(847,847,847),(848,848,848),(849,849,849),(850,850,850), +(851,851,851),(852,852,852),(853,853,853),(854,854,854),(855,855,855), +(856,856,856),(857,857,857),(858,858,858),(859,859,859),(860,860,860), +(861,861,861),(862,862,862),(863,863,863),(864,864,864),(865,865,865), +(866,866,866),(867,867,867),(868,868,868),(869,869,869),(870,870,870), +(871,871,871),(872,872,872),(873,873,873),(874,874,874),(875,875,875), +(876,876,876),(877,877,877),(878,878,878),(879,879,879),(880,880,880), +(881,881,881),(882,882,882),(883,883,883),(884,884,884),(885,885,885), +(886,886,886),(887,887,887),(888,888,888),(889,889,889),(890,890,890), +(891,891,891),(892,892,892),(893,893,893),(894,894,894),(895,895,895), +(896,896,896),(897,897,897),(898,898,898),(899,899,899),(900,900,900), +(901,901,901),(902,902,902),(903,903,903),(904,904,904),(905,905,905), +(906,906,906),(907,907,907),(908,908,908),(909,909,909),(910,910,910), +(911,911,911),(912,912,912),(913,913,913),(914,914,914),(915,915,915), +(916,916,916),(917,917,917),(918,918,918),(919,919,919),(920,920,920), +(921,921,921),(922,922,922),(923,923,923),(924,924,924),(925,925,925), +(926,926,926),(927,927,927),(928,928,928),(929,929,929),(930,930,930), +(931,931,931),(932,932,932),(933,933,933),(934,934,934),(935,935,935), +(936,936,936),(937,937,937),(938,938,938),(939,939,939),(940,940,940), +(941,941,941),(942,942,942),(943,943,943),(944,944,944),(945,945,945), +(946,946,946),(947,947,947),(948,948,948),(949,949,949),(950,950,950), +(951,951,951),(952,952,952),(953,953,953),(954,954,954),(955,955,955), +(956,956,956),(957,957,957),(958,958,958),(959,959,959),(960,960,960), +(961,961,961),(962,962,962),(963,963,963),(964,964,964),(965,965,965), +(966,966,966),(967,967,967),(968,968,968),(969,969,969),(970,970,970), +(971,971,971),(972,972,972),(973,973,973),(974,974,974),(975,975,975), +(976,976,976),(977,977,977),(978,978,978),(979,979,979),(980,980,980), +(981,981,981),(982,982,982),(983,983,983),(984,984,984),(985,985,985), +(986,986,986),(987,987,987),(988,988,988),(989,989,989),(990,990,990), +(991,991,991),(992,992,992),(993,993,993),(994,994,994),(995,995,995), +(996,996,996),(997,997,997),(998,998,998),(999,999,999),(1000,1000,1000), +(1001,1001,1001),(1002,1002,1002),(1003,1003,1003),(1004,1004,1004),(1005,1005,1005), +(1006,1006,1006),(1007,1007,1007),(1008,1008,1008),(1009,1009,1009),(1010,1010,1010), +(1011,1011,1011),(1012,1012,1012),(1013,1013,1013),(1014,1014,1014),(1015,1015,1015), +(1016,1016,1016),(1017,1017,1017),(1018,1018,1018),(1019,1019,1019),(1020,1020,1020), +(1021,1021,1021),(1022,1022,1022),(1023,1023,1023),(1024,1024,1024),(1025,1025,1025), +(1026,1026,1026),(1027,1027,1027),(1028,1028,1028),(1029,1029,1029),(1030,1030,1030), +(1031,1031,1031),(1032,1032,1032),(1033,1033,1033),(1034,1034,1034),(1035,1035,1035), +(1036,1036,1036),(1037,1037,1037),(1038,1038,1038),(1039,1039,1039),(1040,1040,1040), +(1041,1041,1041),(1042,1042,1042),(1043,1043,1043),(1044,1044,1044),(1045,1045,1045), +(1046,1046,1046),(1047,1047,1047),(1048,1048,1048),(1049,1049,1049),(1050,1050,1050), +(1051,1051,1051),(1052,1052,1052),(1053,1053,1053),(1054,1054,1054),(1055,1055,1055), +(1056,1056,1056),(1057,1057,1057),(1058,1058,1058),(1059,1059,1059),(1060,1060,1060), +(1061,1061,1061),(1062,1062,1062),(1063,1063,1063),(1064,1064,1064),(1065,1065,1065), +(1066,1066,1066),(1067,1067,1067),(1068,1068,1068),(1069,1069,1069),(1070,1070,1070), +(1071,1071,1071),(1072,1072,1072),(1073,1073,1073),(1074,1074,1074),(1075,1075,1075), +(1076,1076,1076),(1077,1077,1077),(1078,1078,1078),(1079,1079,1079),(1080,1080,1080), +(1081,1081,1081),(1082,1082,1082),(1083,1083,1083),(1084,1084,1084),(1085,1085,1085), +(1086,1086,1086),(1087,1087,1087),(1088,1088,1088),(1089,1089,1089),(1090,1090,1090), +(1091,1091,1091),(1092,1092,1092),(1093,1093,1093),(1094,1094,1094),(1095,1095,1095), +(1096,1096,1096),(1097,1097,1097),(1098,1098,1098),(1099,1099,1099),(1100,1100,1100), +(1101,1101,1101),(1102,1102,1102),(1103,1103,1103),(1104,1104,1104),(1105,1105,1105), +(1106,1106,1106),(1107,1107,1107),(1108,1108,1108),(1109,1109,1109),(1110,1110,1110), +(1111,1111,1111),(1112,1112,1112),(1113,1113,1113),(1114,1114,1114),(1115,1115,1115), +(1116,1116,1116),(1117,1117,1117),(1118,1118,1118),(1119,1119,1119),(1120,1120,1120), +(1121,1121,1121),(1122,1122,1122),(1123,1123,1123),(1124,1124,1124),(1125,1125,1125), +(1126,1126,1126),(1127,1127,1127),(1128,1128,1128),(1129,1129,1129),(1130,1130,1130), +(1131,1131,1131),(1132,1132,1132),(1133,1133,1133),(1134,1134,1134),(1135,1135,1135), +(1136,1136,1136),(1137,1137,1137),(1138,1138,1138),(1139,1139,1139),(1140,1140,1140), +(1141,1141,1141),(1142,1142,1142),(1143,1143,1143),(1144,1144,1144),(1145,1145,1145), +(1146,1146,1146),(1147,1147,1147),(1148,1148,1148),(1149,1149,1149),(1150,1150,1150), +(1151,1151,1151),(1152,1152,1152),(1153,1153,1153),(1154,1154,1154),(1155,1155,1155), +(1156,1156,1156),(1157,1157,1157),(1158,1158,1158),(1159,1159,1159),(1160,1160,1160), +(1161,1161,1161),(1162,1162,1162),(1163,1163,1163),(1164,1164,1164),(1165,1165,1165), +(1166,1166,1166),(1167,1167,1167),(1168,1168,1168),(1169,1169,1169),(1170,1170,1170), +(1171,1171,1171),(1172,1172,1172),(1173,1173,1173),(1174,1174,1174),(1175,1175,1175), +(1176,1176,1176),(1177,1177,1177),(1178,1178,1178),(1179,1179,1179),(1180,1180,1180), +(1181,1181,1181),(1182,1182,1182),(1183,1183,1183),(1184,1184,1184),(1185,1185,1185), +(1186,1186,1186),(1187,1187,1187),(1188,1188,1188),(1189,1189,1189),(1190,1190,1190), +(1191,1191,1191),(1192,1192,1192),(1193,1193,1193),(1194,1194,1194),(1195,1195,1195), +(1196,1196,1196),(1197,1197,1197),(1198,1198,1198),(1199,1199,1199),(1200,1200,1200), +(1201,1201,1201),(1202,1202,1202),(1203,1203,1203),(1204,1204,1204),(1205,1205,1205), +(1206,1206,1206),(1207,1207,1207),(1208,1208,1208),(1209,1209,1209),(1210,1210,1210), +(1211,1211,1211),(1212,1212,1212),(1213,1213,1213),(1214,1214,1214),(1215,1215,1215), +(1216,1216,1216),(1217,1217,1217),(1218,1218,1218),(1219,1219,1219),(1220,1220,1220), +(1221,1221,1221),(1222,1222,1222),(1223,1223,1223),(1224,1224,1224),(1225,1225,1225), +(1226,1226,1226),(1227,1227,1227),(1228,1228,1228),(1229,1229,1229),(1230,1230,1230), +(1231,1231,1231),(1232,1232,1232),(1233,1233,1233),(1234,1234,1234),(1235,1235,1235), +(1236,1236,1236),(1237,1237,1237),(1238,1238,1238),(1239,1239,1239),(1240,1240,1240), +(1241,1241,1241),(1242,1242,1242),(1243,1243,1243),(1244,1244,1244),(1245,1245,1245), +(1246,1246,1246),(1247,1247,1247),(1248,1248,1248),(1249,1249,1249),(1250,1250,1250), +(1251,1251,1251),(1252,1252,1252),(1253,1253,1253),(1254,1254,1254),(1255,1255,1255), +(1256,1256,1256),(1257,1257,1257),(1258,1258,1258),(1259,1259,1259),(1260,1260,1260), +(1261,1261,1261),(1262,1262,1262),(1263,1263,1263),(1264,1264,1264),(1265,1265,1265), +(1266,1266,1266),(1267,1267,1267),(1268,1268,1268),(1269,1269,1269),(1270,1270,1270), +(1271,1271,1271),(1272,1272,1272),(1273,1273,1273),(1274,1274,1274),(1275,1275,1275), +(1276,1276,1276),(1277,1277,1277),(1278,1278,1278),(1279,1279,1279),(1280,1280,1280), +(1281,1281,1281),(1282,1282,1282),(1283,1283,1283),(1284,1284,1284),(1285,1285,1285), +(1286,1286,1286),(1287,1287,1287),(1288,1288,1288),(1289,1289,1289),(1290,1290,1290), +(1291,1291,1291),(1292,1292,1292),(1293,1293,1293),(1294,1294,1294),(1295,1295,1295), +(1296,1296,1296),(1297,1297,1297),(1298,1298,1298),(1299,1299,1299),(1300,1300,1300), +(1301,1301,1301),(1302,1302,1302),(1303,1303,1303),(1304,1304,1304),(1305,1305,1305), +(1306,1306,1306),(1307,1307,1307),(1308,1308,1308),(1309,1309,1309),(1310,1310,1310), +(1311,1311,1311),(1312,1312,1312),(1313,1313,1313),(1314,1314,1314),(1315,1315,1315), +(1316,1316,1316),(1317,1317,1317),(1318,1318,1318),(1319,1319,1319),(1320,1320,1320), +(1321,1321,1321),(1322,1322,1322),(1323,1323,1323),(1324,1324,1324),(1325,1325,1325), +(1326,1326,1326),(1327,1327,1327),(1328,1328,1328),(1329,1329,1329),(1330,1330,1330), +(1331,1331,1331),(1332,1332,1332),(1333,1333,1333),(1334,1334,1334),(1335,1335,1335), +(1336,1336,1336),(1337,1337,1337),(1338,1338,1338),(1339,1339,1339),(1340,1340,1340), +(1341,1341,1341),(1342,1342,1342),(1343,1343,1343),(1344,1344,1344),(1345,1345,1345), +(1346,1346,1346),(1347,1347,1347),(1348,1348,1348),(1349,1349,1349),(1350,1350,1350), +(1351,1351,1351),(1352,1352,1352),(1353,1353,1353),(1354,1354,1354),(1355,1355,1355), +(1356,1356,1356),(1357,1357,1357),(1358,1358,1358),(1359,1359,1359),(1360,1360,1360), +(1361,1361,1361),(1362,1362,1362),(1363,1363,1363),(1364,1364,1364),(1365,1365,1365), +(1366,1366,1366),(1367,1367,1367),(1368,1368,1368),(1369,1369,1369),(1370,1370,1370), +(1371,1371,1371),(1372,1372,1372),(1373,1373,1373),(1374,1374,1374),(1375,1375,1375), +(1376,1376,1376),(1377,1377,1377),(1378,1378,1378),(1379,1379,1379),(1380,1380,1380), +(1381,1381,1381),(1382,1382,1382),(1383,1383,1383),(1384,1384,1384),(1385,1385,1385), +(1386,1386,1386),(1387,1387,1387),(1388,1388,1388),(1389,1389,1389),(1390,1390,1390), +(1391,1391,1391),(1392,1392,1392),(1393,1393,1393),(1394,1394,1394),(1395,1395,1395), +(1396,1396,1396),(1397,1397,1397),(1398,1398,1398),(1399,1399,1399),(1400,1400,1400), +(1401,1401,1401),(1402,1402,1402),(1403,1403,1403),(1404,1404,1404),(1405,1405,1405), +(1406,1406,1406),(1407,1407,1407),(1408,1408,1408),(1409,1409,1409),(1410,1410,1410), +(1411,1411,1411),(1412,1412,1412),(1413,1413,1413),(1414,1414,1414),(1415,1415,1415), +(1416,1416,1416),(1417,1417,1417),(1418,1418,1418),(1419,1419,1419),(1420,1420,1420), +(1421,1421,1421),(1422,1422,1422),(1423,1423,1423),(1424,1424,1424),(1425,1425,1425), +(1426,1426,1426),(1427,1427,1427),(1428,1428,1428),(1429,1429,1429),(1430,1430,1430), +(1431,1431,1431),(1432,1432,1432),(1433,1433,1433),(1434,1434,1434),(1435,1435,1435), +(1436,1436,1436),(1437,1437,1437),(1438,1438,1438),(1439,1439,1439),(1440,1440,1440), +(1441,1441,1441),(1442,1442,1442),(1443,1443,1443),(1444,1444,1444),(1445,1445,1445), +(1446,1446,1446),(1447,1447,1447),(1448,1448,1448),(1449,1449,1449),(1450,1450,1450), +(1451,1451,1451),(1452,1452,1452),(1453,1453,1453),(1454,1454,1454),(1455,1455,1455), +(1456,1456,1456),(1457,1457,1457),(1458,1458,1458),(1459,1459,1459),(1460,1460,1460), +(1461,1461,1461),(1462,1462,1462),(1463,1463,1463),(1464,1464,1464),(1465,1465,1465), +(1466,1466,1466),(1467,1467,1467),(1468,1468,1468),(1469,1469,1469),(1470,1470,1470), +(1471,1471,1471),(1472,1472,1472),(1473,1473,1473),(1474,1474,1474),(1475,1475,1475), +(1476,1476,1476),(1477,1477,1477),(1478,1478,1478),(1479,1479,1479),(1480,1480,1480), +(1481,1481,1481),(1482,1482,1482),(1483,1483,1483),(1484,1484,1484),(1485,1485,1485), +(1486,1486,1486),(1487,1487,1487),(1488,1488,1488),(1489,1489,1489),(1490,1490,1490), +(1491,1491,1491),(1492,1492,1492),(1493,1493,1493),(1494,1494,1494),(1495,1495,1495), +(1496,1496,1496),(1497,1497,1497),(1498,1498,1498),(1499,1499,1499),(1500,1500,1500), +(1501,1501,1501),(1502,1502,1502),(1503,1503,1503),(1504,1504,1504),(1505,1505,1505), +(1506,1506,1506),(1507,1507,1507),(1508,1508,1508),(1509,1509,1509),(1510,1510,1510), +(1511,1511,1511),(1512,1512,1512),(1513,1513,1513),(1514,1514,1514),(1515,1515,1515), +(1516,1516,1516),(1517,1517,1517),(1518,1518,1518),(1519,1519,1519),(1520,1520,1520), +(1521,1521,1521),(1522,1522,1522),(1523,1523,1523),(1524,1524,1524),(1525,1525,1525), +(1526,1526,1526),(1527,1527,1527),(1528,1528,1528),(1529,1529,1529),(1530,1530,1530), +(1531,1531,1531),(1532,1532,1532),(1533,1533,1533),(1534,1534,1534),(1535,1535,1535), +(1536,1536,1536),(1537,1537,1537),(1538,1538,1538),(1539,1539,1539),(1540,1540,1540), +(1541,1541,1541),(1542,1542,1542),(1543,1543,1543),(1544,1544,1544),(1545,1545,1545), +(1546,1546,1546),(1547,1547,1547),(1548,1548,1548),(1549,1549,1549),(1550,1550,1550), +(1551,1551,1551),(1552,1552,1552),(1553,1553,1553),(1554,1554,1554),(1555,1555,1555), +(1556,1556,1556),(1557,1557,1557),(1558,1558,1558),(1559,1559,1559),(1560,1560,1560), +(1561,1561,1561),(1562,1562,1562),(1563,1563,1563),(1564,1564,1564),(1565,1565,1565), +(1566,1566,1566),(1567,1567,1567),(1568,1568,1568),(1569,1569,1569),(1570,1570,1570), +(1571,1571,1571),(1572,1572,1572),(1573,1573,1573),(1574,1574,1574),(1575,1575,1575), +(1576,1576,1576),(1577,1577,1577),(1578,1578,1578),(1579,1579,1579),(1580,1580,1580), +(1581,1581,1581),(1582,1582,1582),(1583,1583,1583),(1584,1584,1584),(1585,1585,1585), +(1586,1586,1586),(1587,1587,1587),(1588,1588,1588),(1589,1589,1589),(1590,1590,1590), +(1591,1591,1591),(1592,1592,1592),(1593,1593,1593),(1594,1594,1594),(1595,1595,1595), +(1596,1596,1596),(1597,1597,1597),(1598,1598,1598),(1599,1599,1599),(1600,1600,1600), +(1601,1601,1601),(1602,1602,1602),(1603,1603,1603),(1604,1604,1604),(1605,1605,1605), +(1606,1606,1606),(1607,1607,1607),(1608,1608,1608),(1609,1609,1609),(1610,1610,1610), +(1611,1611,1611),(1612,1612,1612),(1613,1613,1613),(1614,1614,1614),(1615,1615,1615), +(1616,1616,1616),(1617,1617,1617),(1618,1618,1618),(1619,1619,1619),(1620,1620,1620), +(1621,1621,1621),(1622,1622,1622),(1623,1623,1623),(1624,1624,1624),(1625,1625,1625), +(1626,1626,1626),(1627,1627,1627),(1628,1628,1628),(1629,1629,1629),(1630,1630,1630), +(1631,1631,1631),(1632,1632,1632),(1633,1633,1633),(1634,1634,1634),(1635,1635,1635), +(1636,1636,1636),(1637,1637,1637),(1638,1638,1638),(1639,1639,1639),(1640,1640,1640), +(1641,1641,1641),(1642,1642,1642),(1643,1643,1643),(1644,1644,1644),(1645,1645,1645), +(1646,1646,1646),(1647,1647,1647),(1648,1648,1648),(1649,1649,1649),(1650,1650,1650), +(1651,1651,1651),(1652,1652,1652),(1653,1653,1653),(1654,1654,1654),(1655,1655,1655), +(1656,1656,1656),(1657,1657,1657),(1658,1658,1658),(1659,1659,1659),(1660,1660,1660), +(1661,1661,1661),(1662,1662,1662),(1663,1663,1663),(1664,1664,1664),(1665,1665,1665), +(1666,1666,1666),(1667,1667,1667),(1668,1668,1668),(1669,1669,1669),(1670,1670,1670), +(1671,1671,1671),(1672,1672,1672),(1673,1673,1673),(1674,1674,1674),(1675,1675,1675), +(1676,1676,1676),(1677,1677,1677),(1678,1678,1678),(1679,1679,1679),(1680,1680,1680), +(1681,1681,1681),(1682,1682,1682),(1683,1683,1683),(1684,1684,1684),(1685,1685,1685), +(1686,1686,1686),(1687,1687,1687),(1688,1688,1688),(1689,1689,1689),(1690,1690,1690), +(1691,1691,1691),(1692,1692,1692),(1693,1693,1693),(1694,1694,1694),(1695,1695,1695), +(1696,1696,1696),(1697,1697,1697),(1698,1698,1698),(1699,1699,1699),(1700,1700,1700), +(1701,1701,1701),(1702,1702,1702),(1703,1703,1703),(1704,1704,1704),(1705,1705,1705), +(1706,1706,1706),(1707,1707,1707),(1708,1708,1708),(1709,1709,1709),(1710,1710,1710), +(1711,1711,1711),(1712,1712,1712),(1713,1713,1713),(1714,1714,1714),(1715,1715,1715), +(1716,1716,1716),(1717,1717,1717),(1718,1718,1718),(1719,1719,1719),(1720,1720,1720), +(1721,1721,1721),(1722,1722,1722),(1723,1723,1723),(1724,1724,1724),(1725,1725,1725), +(1726,1726,1726),(1727,1727,1727),(1728,1728,1728),(1729,1729,1729),(1730,1730,1730), +(1731,1731,1731),(1732,1732,1732),(1733,1733,1733),(1734,1734,1734),(1735,1735,1735), +(1736,1736,1736),(1737,1737,1737),(1738,1738,1738),(1739,1739,1739),(1740,1740,1740), +(1741,1741,1741),(1742,1742,1742),(1743,1743,1743),(1744,1744,1744),(1745,1745,1745), +(1746,1746,1746),(1747,1747,1747),(1748,1748,1748),(1749,1749,1749),(1750,1750,1750), +(1751,1751,1751),(1752,1752,1752),(1753,1753,1753),(1754,1754,1754),(1755,1755,1755), +(1756,1756,1756),(1757,1757,1757),(1758,1758,1758),(1759,1759,1759),(1760,1760,1760), +(1761,1761,1761),(1762,1762,1762),(1763,1763,1763),(1764,1764,1764),(1765,1765,1765), +(1766,1766,1766),(1767,1767,1767),(1768,1768,1768),(1769,1769,1769),(1770,1770,1770), +(1771,1771,1771),(1772,1772,1772),(1773,1773,1773),(1774,1774,1774),(1775,1775,1775), +(1776,1776,1776),(1777,1777,1777),(1778,1778,1778),(1779,1779,1779),(1780,1780,1780), +(1781,1781,1781),(1782,1782,1782),(1783,1783,1783),(1784,1784,1784),(1785,1785,1785), +(1786,1786,1786),(1787,1787,1787),(1788,1788,1788),(1789,1789,1789),(1790,1790,1790), +(1791,1791,1791),(1792,1792,1792),(1793,1793,1793),(1794,1794,1794),(1795,1795,1795), +(1796,1796,1796),(1797,1797,1797),(1798,1798,1798),(1799,1799,1799),(1800,1800,1800), +(1801,1801,1801),(1802,1802,1802),(1803,1803,1803),(1804,1804,1804),(1805,1805,1805), +(1806,1806,1806),(1807,1807,1807),(1808,1808,1808),(1809,1809,1809),(1810,1810,1810), +(1811,1811,1811),(1812,1812,1812),(1813,1813,1813),(1814,1814,1814),(1815,1815,1815), +(1816,1816,1816),(1817,1817,1817),(1818,1818,1818),(1819,1819,1819),(1820,1820,1820), +(1821,1821,1821),(1822,1822,1822),(1823,1823,1823),(1824,1824,1824),(1825,1825,1825), +(1826,1826,1826),(1827,1827,1827),(1828,1828,1828),(1829,1829,1829),(1830,1830,1830), +(1831,1831,1831),(1832,1832,1832),(1833,1833,1833),(1834,1834,1834),(1835,1835,1835), +(1836,1836,1836),(1837,1837,1837),(1838,1838,1838),(1839,1839,1839),(1840,1840,1840), +(1841,1841,1841),(1842,1842,1842),(1843,1843,1843),(1844,1844,1844),(1845,1845,1845), +(1846,1846,1846),(1847,1847,1847),(1848,1848,1848),(1849,1849,1849),(1850,1850,1850), +(1851,1851,1851),(1852,1852,1852),(1853,1853,1853),(1854,1854,1854),(1855,1855,1855), +(1856,1856,1856),(1857,1857,1857),(1858,1858,1858),(1859,1859,1859),(1860,1860,1860), +(1861,1861,1861),(1862,1862,1862),(1863,1863,1863),(1864,1864,1864),(1865,1865,1865), +(1866,1866,1866),(1867,1867,1867),(1868,1868,1868),(1869,1869,1869),(1870,1870,1870), +(1871,1871,1871),(1872,1872,1872),(1873,1873,1873),(1874,1874,1874),(1875,1875,1875), +(1876,1876,1876),(1877,1877,1877),(1878,1878,1878),(1879,1879,1879),(1880,1880,1880), +(1881,1881,1881),(1882,1882,1882),(1883,1883,1883),(1884,1884,1884),(1885,1885,1885), +(1886,1886,1886),(1887,1887,1887),(1888,1888,1888),(1889,1889,1889),(1890,1890,1890), +(1891,1891,1891),(1892,1892,1892),(1893,1893,1893),(1894,1894,1894),(1895,1895,1895), +(1896,1896,1896),(1897,1897,1897),(1898,1898,1898),(1899,1899,1899),(1900,1900,1900), +(1901,1901,1901),(1902,1902,1902),(1903,1903,1903),(1904,1904,1904),(1905,1905,1905), +(1906,1906,1906),(1907,1907,1907),(1908,1908,1908),(1909,1909,1909),(1910,1910,1910), +(1911,1911,1911),(1912,1912,1912),(1913,1913,1913),(1914,1914,1914),(1915,1915,1915), +(1916,1916,1916),(1917,1917,1917),(1918,1918,1918),(1919,1919,1919),(1920,1920,1920), +(1921,1921,1921),(1922,1922,1922),(1923,1923,1923),(1924,1924,1924),(1925,1925,1925), +(1926,1926,1926),(1927,1927,1927),(1928,1928,1928),(1929,1929,1929),(1930,1930,1930), +(1931,1931,1931),(1932,1932,1932),(1933,1933,1933),(1934,1934,1934),(1935,1935,1935), +(1936,1936,1936),(1937,1937,1937),(1938,1938,1938),(1939,1939,1939),(1940,1940,1940), +(1941,1941,1941),(1942,1942,1942),(1943,1943,1943),(1944,1944,1944),(1945,1945,1945), +(1946,1946,1946),(1947,1947,1947),(1948,1948,1948),(1949,1949,1949),(1950,1950,1950), +(1951,1951,1951),(1952,1952,1952),(1953,1953,1953),(1954,1954,1954),(1955,1955,1955), +(1956,1956,1956),(1957,1957,1957),(1958,1958,1958),(1959,1959,1959),(1960,1960,1960), +(1961,1961,1961),(1962,1962,1962),(1963,1963,1963),(1964,1964,1964),(1965,1965,1965), +(1966,1966,1966),(1967,1967,1967),(1968,1968,1968),(1969,1969,1969),(1970,1970,1970), +(1971,1971,1971),(1972,1972,1972),(1973,1973,1973),(1974,1974,1974),(1975,1975,1975), +(1976,1976,1976),(1977,1977,1977),(1978,1978,1978),(1979,1979,1979),(1980,1980,1980), +(1981,1981,1981),(1982,1982,1982),(1983,1983,1983),(1984,1984,1984),(1985,1985,1985), +(1986,1986,1986),(1987,1987,1987),(1988,1988,1988),(1989,1989,1989),(1990,1990,1990), +(1991,1991,1991),(1992,1992,1992),(1993,1993,1993),(1994,1994,1994),(1995,1995,1995), +(1996,1996,1996),(1997,1997,1997),(1998,1998,1998),(1999,1999,1999); +SELECT COUNT(*) FROM t1; +COUNT(*) +2000 +DROP TABLE t1; diff --git a/mysql-test/t/ndb_index_ordered.test b/mysql-test/t/ndb_index_ordered.test index 3392192dee1..c05db318825 100644 --- a/mysql-test/t/ndb_index_ordered.test +++ b/mysql-test/t/ndb_index_ordered.test @@ -32,7 +32,7 @@ select * from t1 where b <= 4 order by b; # Update using ordered index scan # -# MASV update t1 set c = 3 where b = 3; +update t1 set c = 3 where b = 3; select * from t1 order by a; update t1 set c = 10 where b >= 6; select * from t1 order by a; @@ -59,7 +59,7 @@ CREATE TABLE t1 ( insert t1 values(1, 2, 13), (2,3, 13), (3, 4, 12), (4, 5, 12), (5,6, 12), (6,7, 12); -# MASV delete from t1 where b = 3; +delete from t1 where b = 3; select * from t1 order by a; delete from t1 where b >= 6; select * from t1 order by a; @@ -97,11 +97,16 @@ insert into t1 values (14, 5, 4); insert into t1 values (15,5,5); insert into t1 values (16,5, 6); insert into t1 values (17,4,4); +insert into t1 values (18,1, 7); + + select * from t1 order by a; -select * from t1 where b<=5; -#select * from t1 where b<=5 and c=0; -#select * from t1 where b=4 and c<=5; -select * from t1 where b<=4 and c<=5; -# MASV select * from t1 where b<=5 and c=0 or b<=5 and c=2; +select * from t1 where b<=5 order by a; +select * from t1 where b<=5 and c=0; +insert into t1 values (19,4, 0); +select * from t1 where b<=5 and c=0; +select * from t1 where b=4 and c<=5; +select * from t1 where b<=4 and c<=5 order by a; +select * from t1 where b<=5 and c=0 or b<=5 and c=2; drop table t1; diff --git a/mysql-test/t/ndb_insert.test b/mysql-test/t/ndb_insert.test new file mode 100644 index 00000000000..c55a925dca2 --- /dev/null +++ b/mysql-test/t/ndb_insert.test @@ -0,0 +1,433 @@ +-- source include/have_ndb.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +# +# Basic test of INSERT in NDB +# + +# +# Create a normal table with primary key +# +CREATE TABLE t1 ( + pk1 INT NOT NULL PRIMARY KEY, + b INT NOT NULL, + c INT NOT NULL +) ENGINE=ndbcluster; + +INSERT INTO t1 VALUES (0, 0, 0); +SELECT * FROM t1; + +INSERT INTO t1 VALUES +(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), +(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10), +(11,11,11),(12,12,12),(13,13,13),(14,14,14),(15,15,15), +(16,16,16),(17,17,17),(18,18,18),(19,19,19),(20,20,20), +(21,21,21),(22,22,22),(23,23,23),(24,24,24),(25,25,25), +(26,26,26),(27,27,27),(28,28,28),(29,29,29),(30,30,30), +(31,31,31),(32,32,32),(33,33,33),(34,34,34),(35,35,35), +(36,36,36),(37,37,37),(38,38,38),(39,39,39),(40,40,40), +(41,41,41),(42,42,42),(43,43,43),(44,44,44),(45,45,45), +(46,46,46),(47,47,47),(48,48,48),(49,49,49),(50,50,50), +(51,51,51),(52,52,52),(53,53,53),(54,54,54),(55,55,55), +(56,56,56),(57,57,57),(58,58,58),(59,59,59),(60,60,60), +(61,61,61),(62,62,62),(63,63,63),(64,64,64),(65,65,65), +(66,66,66),(67,67,67),(68,68,68),(69,69,69),(70,70,70), +(71,71,71),(72,72,72),(73,73,73),(74,74,74),(75,75,75), +(76,76,76),(77,77,77),(78,78,78),(79,79,79),(80,80,80), +(81,81,81),(82,82,82),(83,83,83),(84,84,84),(85,85,85), +(86,86,86),(87,87,87),(88,88,88),(89,89,89),(90,90,90), +(91,91,91),(92,92,92),(93,93,93),(94,94,94),(95,95,95), +(96,96,96),(97,97,97),(98,98,98),(99,99,99),(100,100,100), +(101,101,101),(102,102,102),(103,103,103),(104,104,104),(105,105,105), +(106,106,106),(107,107,107),(108,108,108),(109,109,109),(110,110,110), +(111,111,111),(112,112,112),(113,113,113),(114,114,114),(115,115,115), +(116,116,116),(117,117,117),(118,118,118),(119,119,119),(120,120,120), +(121,121,121),(122,122,122),(123,123,123),(124,124,124),(125,125,125), +(126,126,126),(127,127,127),(128,128,128),(129,129,129),(130,130,130), +(131,131,131),(132,132,132),(133,133,133),(134,134,134),(135,135,135), +(136,136,136),(137,137,137),(138,138,138),(139,139,139),(140,140,140), +(141,141,141),(142,142,142),(143,143,143),(144,144,144),(145,145,145), +(146,146,146),(147,147,147),(148,148,148),(149,149,149),(150,150,150), +(151,151,151),(152,152,152),(153,153,153),(154,154,154),(155,155,155), +(156,156,156),(157,157,157),(158,158,158),(159,159,159),(160,160,160), +(161,161,161),(162,162,162),(163,163,163),(164,164,164),(165,165,165), +(166,166,166),(167,167,167),(168,168,168),(169,169,169),(170,170,170), +(171,171,171),(172,172,172),(173,173,173),(174,174,174),(175,175,175), +(176,176,176),(177,177,177),(178,178,178),(179,179,179),(180,180,180), +(181,181,181),(182,182,182),(183,183,183),(184,184,184),(185,185,185), +(186,186,186),(187,187,187),(188,188,188),(189,189,189),(190,190,190), +(191,191,191),(192,192,192),(193,193,193),(194,194,194),(195,195,195), +(196,196,196),(197,197,197),(198,198,198),(199,199,199),(200,200,200), +(201,201,201),(202,202,202),(203,203,203),(204,204,204),(205,205,205), +(206,206,206),(207,207,207),(208,208,208),(209,209,209),(210,210,210), +(211,211,211),(212,212,212),(213,213,213),(214,214,214),(215,215,215), +(216,216,216),(217,217,217),(218,218,218),(219,219,219),(220,220,220), +(221,221,221),(222,222,222),(223,223,223),(224,224,224),(225,225,225), +(226,226,226),(227,227,227),(228,228,228),(229,229,229),(230,230,230), +(231,231,231),(232,232,232),(233,233,233),(234,234,234),(235,235,235), +(236,236,236),(237,237,237),(238,238,238),(239,239,239),(240,240,240), +(241,241,241),(242,242,242),(243,243,243),(244,244,244),(245,245,245), +(246,246,246),(247,247,247),(248,248,248),(249,249,249),(250,250,250), +(251,251,251),(252,252,252),(253,253,253),(254,254,254),(255,255,255), +(256,256,256),(257,257,257),(258,258,258),(259,259,259),(260,260,260), +(261,261,261),(262,262,262),(263,263,263),(264,264,264),(265,265,265), +(266,266,266),(267,267,267),(268,268,268),(269,269,269),(270,270,270), +(271,271,271),(272,272,272),(273,273,273),(274,274,274),(275,275,275), +(276,276,276),(277,277,277),(278,278,278),(279,279,279),(280,280,280), +(281,281,281),(282,282,282),(283,283,283),(284,284,284),(285,285,285), +(286,286,286),(287,287,287),(288,288,288),(289,289,289),(290,290,290), +(291,291,291),(292,292,292),(293,293,293),(294,294,294),(295,295,295), +(296,296,296),(297,297,297),(298,298,298),(299,299,299),(300,300,300), +(301,301,301),(302,302,302),(303,303,303),(304,304,304),(305,305,305), +(306,306,306),(307,307,307),(308,308,308),(309,309,309),(310,310,310), +(311,311,311),(312,312,312),(313,313,313),(314,314,314),(315,315,315), +(316,316,316),(317,317,317),(318,318,318),(319,319,319),(320,320,320), +(321,321,321),(322,322,322),(323,323,323),(324,324,324),(325,325,325), +(326,326,326),(327,327,327),(328,328,328),(329,329,329),(330,330,330), +(331,331,331),(332,332,332),(333,333,333),(334,334,334),(335,335,335), +(336,336,336),(337,337,337),(338,338,338),(339,339,339),(340,340,340), +(341,341,341),(342,342,342),(343,343,343),(344,344,344),(345,345,345), +(346,346,346),(347,347,347),(348,348,348),(349,349,349),(350,350,350), +(351,351,351),(352,352,352),(353,353,353),(354,354,354),(355,355,355), +(356,356,356),(357,357,357),(358,358,358),(359,359,359),(360,360,360), +(361,361,361),(362,362,362),(363,363,363),(364,364,364),(365,365,365), +(366,366,366),(367,367,367),(368,368,368),(369,369,369),(370,370,370), +(371,371,371),(372,372,372),(373,373,373),(374,374,374),(375,375,375), +(376,376,376),(377,377,377),(378,378,378),(379,379,379),(380,380,380), +(381,381,381),(382,382,382),(383,383,383),(384,384,384),(385,385,385), +(386,386,386),(387,387,387),(388,388,388),(389,389,389),(390,390,390), +(391,391,391),(392,392,392),(393,393,393),(394,394,394),(395,395,395), +(396,396,396),(397,397,397),(398,398,398),(399,399,399),(400,400,400), +(401,401,401),(402,402,402),(403,403,403),(404,404,404),(405,405,405), +(406,406,406),(407,407,407),(408,408,408),(409,409,409),(410,410,410), +(411,411,411),(412,412,412),(413,413,413),(414,414,414),(415,415,415), +(416,416,416),(417,417,417),(418,418,418),(419,419,419),(420,420,420), +(421,421,421),(422,422,422),(423,423,423),(424,424,424),(425,425,425), +(426,426,426),(427,427,427),(428,428,428),(429,429,429),(430,430,430), +(431,431,431),(432,432,432),(433,433,433),(434,434,434),(435,435,435), +(436,436,436),(437,437,437),(438,438,438),(439,439,439),(440,440,440), +(441,441,441),(442,442,442),(443,443,443),(444,444,444),(445,445,445), +(446,446,446),(447,447,447),(448,448,448),(449,449,449),(450,450,450), +(451,451,451),(452,452,452),(453,453,453),(454,454,454),(455,455,455), +(456,456,456),(457,457,457),(458,458,458),(459,459,459),(460,460,460), +(461,461,461),(462,462,462),(463,463,463),(464,464,464),(465,465,465), +(466,466,466),(467,467,467),(468,468,468),(469,469,469),(470,470,470), +(471,471,471),(472,472,472),(473,473,473),(474,474,474),(475,475,475), +(476,476,476),(477,477,477),(478,478,478),(479,479,479),(480,480,480), +(481,481,481),(482,482,482),(483,483,483),(484,484,484),(485,485,485), +(486,486,486),(487,487,487),(488,488,488),(489,489,489),(490,490,490), +(491,491,491),(492,492,492),(493,493,493),(494,494,494),(495,495,495), +(496,496,496),(497,497,497),(498,498,498),(499,499,499),(500, 500, 500); + +SELECT COUNT(*) FROM t1; + +INSERT INTO t1 VALUES +(501,501,501),(502,502,502),(503,503,503),(504,504,504),(505,505,505), +(506,506,506),(507,507,507),(508,508,508),(509,509,509),(510,510,510), +(511,511,511),(512,512,512),(513,513,513),(514,514,514),(515,515,515), +(516,516,516),(517,517,517),(518,518,518),(519,519,519),(520,520,520), +(521,521,521),(522,522,522),(523,523,523),(524,524,524),(525,525,525), +(526,526,526),(527,527,527),(528,528,528),(529,529,529),(530,530,530), +(531,531,531),(532,532,532),(533,533,533),(534,534,534),(535,535,535), +(536,536,536),(537,537,537),(538,538,538),(539,539,539),(540,540,540), +(541,541,541),(542,542,542),(543,543,543),(544,544,544),(545,545,545), +(546,546,546),(547,547,547),(548,548,548),(549,549,549),(550,550,550), +(551,551,551),(552,552,552),(553,553,553),(554,554,554),(555,555,555), +(556,556,556),(557,557,557),(558,558,558),(559,559,559),(560,560,560), +(561,561,561),(562,562,562),(563,563,563),(564,564,564),(565,565,565), +(566,566,566),(567,567,567),(568,568,568),(569,569,569),(570,570,570), +(571,571,571),(572,572,572),(573,573,573),(574,574,574),(575,575,575), +(576,576,576),(577,577,577),(578,578,578),(579,579,579),(580,580,580), +(581,581,581),(582,582,582),(583,583,583),(584,584,584),(585,585,585), +(586,586,586),(587,587,587),(588,588,588),(589,589,589),(590,590,590), +(591,591,591),(592,592,592),(593,593,593),(594,594,594),(595,595,595), +(596,596,596),(597,597,597),(598,598,598),(599,599,599),(600,600,600), +(601,601,601),(602,602,602),(603,603,603),(604,604,604),(605,605,605), +(606,606,606),(607,607,607),(608,608,608),(609,609,609),(610,610,610), +(611,611,611),(612,612,612),(613,613,613),(614,614,614),(615,615,615), +(616,616,616),(617,617,617),(618,618,618),(619,619,619),(620,620,620), +(621,621,621),(622,622,622),(623,623,623),(624,624,624),(625,625,625), +(626,626,626),(627,627,627),(628,628,628),(629,629,629),(630,630,630), +(631,631,631),(632,632,632),(633,633,633),(634,634,634),(635,635,635), +(636,636,636),(637,637,637),(638,638,638),(639,639,639),(640,640,640), +(641,641,641),(642,642,642),(643,643,643),(644,644,644),(645,645,645), +(646,646,646),(647,647,647),(648,648,648),(649,649,649),(650,650,650), +(651,651,651),(652,652,652),(653,653,653),(654,654,654),(655,655,655), +(656,656,656),(657,657,657),(658,658,658),(659,659,659),(660,660,660), +(661,661,661),(662,662,662),(663,663,663),(664,664,664),(665,665,665), +(666,666,666),(667,667,667),(668,668,668),(669,669,669),(670,670,670), +(671,671,671),(672,672,672),(673,673,673),(674,674,674),(675,675,675), +(676,676,676),(677,677,677),(678,678,678),(679,679,679),(680,680,680), +(681,681,681),(682,682,682),(683,683,683),(684,684,684),(685,685,685), +(686,686,686),(687,687,687),(688,688,688),(689,689,689),(690,690,690), +(691,691,691),(692,692,692),(693,693,693),(694,694,694),(695,695,695), +(696,696,696),(697,697,697),(698,698,698),(699,699,699),(700,700,700), +(701,701,701),(702,702,702),(703,703,703),(704,704,704),(705,705,705), +(706,706,706),(707,707,707),(708,708,708),(709,709,709),(710,710,710), +(711,711,711),(712,712,712),(713,713,713),(714,714,714),(715,715,715), +(716,716,716),(717,717,717),(718,718,718),(719,719,719),(720,720,720), +(721,721,721),(722,722,722),(723,723,723),(724,724,724),(725,725,725), +(726,726,726),(727,727,727),(728,728,728),(729,729,729),(730,730,730), +(731,731,731),(732,732,732),(733,733,733),(734,734,734),(735,735,735), +(736,736,736),(737,737,737),(738,738,738),(739,739,739),(740,740,740), +(741,741,741),(742,742,742),(743,743,743),(744,744,744),(745,745,745), +(746,746,746),(747,747,747),(748,748,748),(749,749,749),(750,750,750), +(751,751,751),(752,752,752),(753,753,753),(754,754,754),(755,755,755), +(756,756,756),(757,757,757),(758,758,758),(759,759,759),(760,760,760), +(761,761,761),(762,762,762),(763,763,763),(764,764,764),(765,765,765), +(766,766,766),(767,767,767),(768,768,768),(769,769,769),(770,770,770), +(771,771,771),(772,772,772),(773,773,773),(774,774,774),(775,775,775), +(776,776,776),(777,777,777),(778,778,778),(779,779,779),(780,780,780), +(781,781,781),(782,782,782),(783,783,783),(784,784,784),(785,785,785), +(786,786,786),(787,787,787),(788,788,788),(789,789,789),(790,790,790), +(791,791,791),(792,792,792),(793,793,793),(794,794,794),(795,795,795), +(796,796,796),(797,797,797),(798,798,798),(799,799,799),(800,800,800), +(801,801,801),(802,802,802),(803,803,803),(804,804,804),(805,805,805), +(806,806,806),(807,807,807),(808,808,808),(809,809,809),(810,810,810), +(811,811,811),(812,812,812),(813,813,813),(814,814,814),(815,815,815), +(816,816,816),(817,817,817),(818,818,818),(819,819,819),(820,820,820), +(821,821,821),(822,822,822),(823,823,823),(824,824,824),(825,825,825), +(826,826,826),(827,827,827),(828,828,828),(829,829,829),(830,830,830), +(831,831,831),(832,832,832),(833,833,833),(834,834,834),(835,835,835), +(836,836,836),(837,837,837),(838,838,838),(839,839,839),(840,840,840), +(841,841,841),(842,842,842),(843,843,843),(844,844,844),(845,845,845), +(846,846,846),(847,847,847),(848,848,848),(849,849,849),(850,850,850), +(851,851,851),(852,852,852),(853,853,853),(854,854,854),(855,855,855), +(856,856,856),(857,857,857),(858,858,858),(859,859,859),(860,860,860), +(861,861,861),(862,862,862),(863,863,863),(864,864,864),(865,865,865), +(866,866,866),(867,867,867),(868,868,868),(869,869,869),(870,870,870), +(871,871,871),(872,872,872),(873,873,873),(874,874,874),(875,875,875), +(876,876,876),(877,877,877),(878,878,878),(879,879,879),(880,880,880), +(881,881,881),(882,882,882),(883,883,883),(884,884,884),(885,885,885), +(886,886,886),(887,887,887),(888,888,888),(889,889,889),(890,890,890), +(891,891,891),(892,892,892),(893,893,893),(894,894,894),(895,895,895), +(896,896,896),(897,897,897),(898,898,898),(899,899,899),(900,900,900), +(901,901,901),(902,902,902),(903,903,903),(904,904,904),(905,905,905), +(906,906,906),(907,907,907),(908,908,908),(909,909,909),(910,910,910), +(911,911,911),(912,912,912),(913,913,913),(914,914,914),(915,915,915), +(916,916,916),(917,917,917),(918,918,918),(919,919,919),(920,920,920), +(921,921,921),(922,922,922),(923,923,923),(924,924,924),(925,925,925), +(926,926,926),(927,927,927),(928,928,928),(929,929,929),(930,930,930), +(931,931,931),(932,932,932),(933,933,933),(934,934,934),(935,935,935), +(936,936,936),(937,937,937),(938,938,938),(939,939,939),(940,940,940), +(941,941,941),(942,942,942),(943,943,943),(944,944,944),(945,945,945), +(946,946,946),(947,947,947),(948,948,948),(949,949,949),(950,950,950), +(951,951,951),(952,952,952),(953,953,953),(954,954,954),(955,955,955), +(956,956,956),(957,957,957),(958,958,958),(959,959,959),(960,960,960), +(961,961,961),(962,962,962),(963,963,963),(964,964,964),(965,965,965), +(966,966,966),(967,967,967),(968,968,968),(969,969,969),(970,970,970), +(971,971,971),(972,972,972),(973,973,973),(974,974,974),(975,975,975), +(976,976,976),(977,977,977),(978,978,978),(979,979,979),(980,980,980), +(981,981,981),(982,982,982),(983,983,983),(984,984,984),(985,985,985), +(986,986,986),(987,987,987),(988,988,988),(989,989,989),(990,990,990), +(991,991,991),(992,992,992),(993,993,993),(994,994,994),(995,995,995), +(996,996,996),(997,997,997),(998,998,998),(999,999,999),(1000,1000,1000), +(1001,1001,1001),(1002,1002,1002),(1003,1003,1003),(1004,1004,1004),(1005,1005,1005), +(1006,1006,1006),(1007,1007,1007),(1008,1008,1008),(1009,1009,1009),(1010,1010,1010), +(1011,1011,1011),(1012,1012,1012),(1013,1013,1013),(1014,1014,1014),(1015,1015,1015), +(1016,1016,1016),(1017,1017,1017),(1018,1018,1018),(1019,1019,1019),(1020,1020,1020), +(1021,1021,1021),(1022,1022,1022),(1023,1023,1023),(1024,1024,1024),(1025,1025,1025), +(1026,1026,1026),(1027,1027,1027),(1028,1028,1028),(1029,1029,1029),(1030,1030,1030), +(1031,1031,1031),(1032,1032,1032),(1033,1033,1033),(1034,1034,1034),(1035,1035,1035), +(1036,1036,1036),(1037,1037,1037),(1038,1038,1038),(1039,1039,1039),(1040,1040,1040), +(1041,1041,1041),(1042,1042,1042),(1043,1043,1043),(1044,1044,1044),(1045,1045,1045), +(1046,1046,1046),(1047,1047,1047),(1048,1048,1048),(1049,1049,1049),(1050,1050,1050), +(1051,1051,1051),(1052,1052,1052),(1053,1053,1053),(1054,1054,1054),(1055,1055,1055), +(1056,1056,1056),(1057,1057,1057),(1058,1058,1058),(1059,1059,1059),(1060,1060,1060), +(1061,1061,1061),(1062,1062,1062),(1063,1063,1063),(1064,1064,1064),(1065,1065,1065), +(1066,1066,1066),(1067,1067,1067),(1068,1068,1068),(1069,1069,1069),(1070,1070,1070), +(1071,1071,1071),(1072,1072,1072),(1073,1073,1073),(1074,1074,1074),(1075,1075,1075), +(1076,1076,1076),(1077,1077,1077),(1078,1078,1078),(1079,1079,1079),(1080,1080,1080), +(1081,1081,1081),(1082,1082,1082),(1083,1083,1083),(1084,1084,1084),(1085,1085,1085), +(1086,1086,1086),(1087,1087,1087),(1088,1088,1088),(1089,1089,1089),(1090,1090,1090), +(1091,1091,1091),(1092,1092,1092),(1093,1093,1093),(1094,1094,1094),(1095,1095,1095), +(1096,1096,1096),(1097,1097,1097),(1098,1098,1098),(1099,1099,1099),(1100,1100,1100), +(1101,1101,1101),(1102,1102,1102),(1103,1103,1103),(1104,1104,1104),(1105,1105,1105), +(1106,1106,1106),(1107,1107,1107),(1108,1108,1108),(1109,1109,1109),(1110,1110,1110), +(1111,1111,1111),(1112,1112,1112),(1113,1113,1113),(1114,1114,1114),(1115,1115,1115), +(1116,1116,1116),(1117,1117,1117),(1118,1118,1118),(1119,1119,1119),(1120,1120,1120), +(1121,1121,1121),(1122,1122,1122),(1123,1123,1123),(1124,1124,1124),(1125,1125,1125), +(1126,1126,1126),(1127,1127,1127),(1128,1128,1128),(1129,1129,1129),(1130,1130,1130), +(1131,1131,1131),(1132,1132,1132),(1133,1133,1133),(1134,1134,1134),(1135,1135,1135), +(1136,1136,1136),(1137,1137,1137),(1138,1138,1138),(1139,1139,1139),(1140,1140,1140), +(1141,1141,1141),(1142,1142,1142),(1143,1143,1143),(1144,1144,1144),(1145,1145,1145), +(1146,1146,1146),(1147,1147,1147),(1148,1148,1148),(1149,1149,1149),(1150,1150,1150), +(1151,1151,1151),(1152,1152,1152),(1153,1153,1153),(1154,1154,1154),(1155,1155,1155), +(1156,1156,1156),(1157,1157,1157),(1158,1158,1158),(1159,1159,1159),(1160,1160,1160), +(1161,1161,1161),(1162,1162,1162),(1163,1163,1163),(1164,1164,1164),(1165,1165,1165), +(1166,1166,1166),(1167,1167,1167),(1168,1168,1168),(1169,1169,1169),(1170,1170,1170), +(1171,1171,1171),(1172,1172,1172),(1173,1173,1173),(1174,1174,1174),(1175,1175,1175), +(1176,1176,1176),(1177,1177,1177),(1178,1178,1178),(1179,1179,1179),(1180,1180,1180), +(1181,1181,1181),(1182,1182,1182),(1183,1183,1183),(1184,1184,1184),(1185,1185,1185), +(1186,1186,1186),(1187,1187,1187),(1188,1188,1188),(1189,1189,1189),(1190,1190,1190), +(1191,1191,1191),(1192,1192,1192),(1193,1193,1193),(1194,1194,1194),(1195,1195,1195), +(1196,1196,1196),(1197,1197,1197),(1198,1198,1198),(1199,1199,1199),(1200,1200,1200), +(1201,1201,1201),(1202,1202,1202),(1203,1203,1203),(1204,1204,1204),(1205,1205,1205), +(1206,1206,1206),(1207,1207,1207),(1208,1208,1208),(1209,1209,1209),(1210,1210,1210), +(1211,1211,1211),(1212,1212,1212),(1213,1213,1213),(1214,1214,1214),(1215,1215,1215), +(1216,1216,1216),(1217,1217,1217),(1218,1218,1218),(1219,1219,1219),(1220,1220,1220), +(1221,1221,1221),(1222,1222,1222),(1223,1223,1223),(1224,1224,1224),(1225,1225,1225), +(1226,1226,1226),(1227,1227,1227),(1228,1228,1228),(1229,1229,1229),(1230,1230,1230), +(1231,1231,1231),(1232,1232,1232),(1233,1233,1233),(1234,1234,1234),(1235,1235,1235), +(1236,1236,1236),(1237,1237,1237),(1238,1238,1238),(1239,1239,1239),(1240,1240,1240), +(1241,1241,1241),(1242,1242,1242),(1243,1243,1243),(1244,1244,1244),(1245,1245,1245), +(1246,1246,1246),(1247,1247,1247),(1248,1248,1248),(1249,1249,1249),(1250,1250,1250), +(1251,1251,1251),(1252,1252,1252),(1253,1253,1253),(1254,1254,1254),(1255,1255,1255), +(1256,1256,1256),(1257,1257,1257),(1258,1258,1258),(1259,1259,1259),(1260,1260,1260), +(1261,1261,1261),(1262,1262,1262),(1263,1263,1263),(1264,1264,1264),(1265,1265,1265), +(1266,1266,1266),(1267,1267,1267),(1268,1268,1268),(1269,1269,1269),(1270,1270,1270), +(1271,1271,1271),(1272,1272,1272),(1273,1273,1273),(1274,1274,1274),(1275,1275,1275), +(1276,1276,1276),(1277,1277,1277),(1278,1278,1278),(1279,1279,1279),(1280,1280,1280), +(1281,1281,1281),(1282,1282,1282),(1283,1283,1283),(1284,1284,1284),(1285,1285,1285), +(1286,1286,1286),(1287,1287,1287),(1288,1288,1288),(1289,1289,1289),(1290,1290,1290), +(1291,1291,1291),(1292,1292,1292),(1293,1293,1293),(1294,1294,1294),(1295,1295,1295), +(1296,1296,1296),(1297,1297,1297),(1298,1298,1298),(1299,1299,1299),(1300,1300,1300), +(1301,1301,1301),(1302,1302,1302),(1303,1303,1303),(1304,1304,1304),(1305,1305,1305), +(1306,1306,1306),(1307,1307,1307),(1308,1308,1308),(1309,1309,1309),(1310,1310,1310), +(1311,1311,1311),(1312,1312,1312),(1313,1313,1313),(1314,1314,1314),(1315,1315,1315), +(1316,1316,1316),(1317,1317,1317),(1318,1318,1318),(1319,1319,1319),(1320,1320,1320), +(1321,1321,1321),(1322,1322,1322),(1323,1323,1323),(1324,1324,1324),(1325,1325,1325), +(1326,1326,1326),(1327,1327,1327),(1328,1328,1328),(1329,1329,1329),(1330,1330,1330), +(1331,1331,1331),(1332,1332,1332),(1333,1333,1333),(1334,1334,1334),(1335,1335,1335), +(1336,1336,1336),(1337,1337,1337),(1338,1338,1338),(1339,1339,1339),(1340,1340,1340), +(1341,1341,1341),(1342,1342,1342),(1343,1343,1343),(1344,1344,1344),(1345,1345,1345), +(1346,1346,1346),(1347,1347,1347),(1348,1348,1348),(1349,1349,1349),(1350,1350,1350), +(1351,1351,1351),(1352,1352,1352),(1353,1353,1353),(1354,1354,1354),(1355,1355,1355), +(1356,1356,1356),(1357,1357,1357),(1358,1358,1358),(1359,1359,1359),(1360,1360,1360), +(1361,1361,1361),(1362,1362,1362),(1363,1363,1363),(1364,1364,1364),(1365,1365,1365), +(1366,1366,1366),(1367,1367,1367),(1368,1368,1368),(1369,1369,1369),(1370,1370,1370), +(1371,1371,1371),(1372,1372,1372),(1373,1373,1373),(1374,1374,1374),(1375,1375,1375), +(1376,1376,1376),(1377,1377,1377),(1378,1378,1378),(1379,1379,1379),(1380,1380,1380), +(1381,1381,1381),(1382,1382,1382),(1383,1383,1383),(1384,1384,1384),(1385,1385,1385), +(1386,1386,1386),(1387,1387,1387),(1388,1388,1388),(1389,1389,1389),(1390,1390,1390), +(1391,1391,1391),(1392,1392,1392),(1393,1393,1393),(1394,1394,1394),(1395,1395,1395), +(1396,1396,1396),(1397,1397,1397),(1398,1398,1398),(1399,1399,1399),(1400,1400,1400), +(1401,1401,1401),(1402,1402,1402),(1403,1403,1403),(1404,1404,1404),(1405,1405,1405), +(1406,1406,1406),(1407,1407,1407),(1408,1408,1408),(1409,1409,1409),(1410,1410,1410), +(1411,1411,1411),(1412,1412,1412),(1413,1413,1413),(1414,1414,1414),(1415,1415,1415), +(1416,1416,1416),(1417,1417,1417),(1418,1418,1418),(1419,1419,1419),(1420,1420,1420), +(1421,1421,1421),(1422,1422,1422),(1423,1423,1423),(1424,1424,1424),(1425,1425,1425), +(1426,1426,1426),(1427,1427,1427),(1428,1428,1428),(1429,1429,1429),(1430,1430,1430), +(1431,1431,1431),(1432,1432,1432),(1433,1433,1433),(1434,1434,1434),(1435,1435,1435), +(1436,1436,1436),(1437,1437,1437),(1438,1438,1438),(1439,1439,1439),(1440,1440,1440), +(1441,1441,1441),(1442,1442,1442),(1443,1443,1443),(1444,1444,1444),(1445,1445,1445), +(1446,1446,1446),(1447,1447,1447),(1448,1448,1448),(1449,1449,1449),(1450,1450,1450), +(1451,1451,1451),(1452,1452,1452),(1453,1453,1453),(1454,1454,1454),(1455,1455,1455), +(1456,1456,1456),(1457,1457,1457),(1458,1458,1458),(1459,1459,1459),(1460,1460,1460), +(1461,1461,1461),(1462,1462,1462),(1463,1463,1463),(1464,1464,1464),(1465,1465,1465), +(1466,1466,1466),(1467,1467,1467),(1468,1468,1468),(1469,1469,1469),(1470,1470,1470), +(1471,1471,1471),(1472,1472,1472),(1473,1473,1473),(1474,1474,1474),(1475,1475,1475), +(1476,1476,1476),(1477,1477,1477),(1478,1478,1478),(1479,1479,1479),(1480,1480,1480), +(1481,1481,1481),(1482,1482,1482),(1483,1483,1483),(1484,1484,1484),(1485,1485,1485), +(1486,1486,1486),(1487,1487,1487),(1488,1488,1488),(1489,1489,1489),(1490,1490,1490), +(1491,1491,1491),(1492,1492,1492),(1493,1493,1493),(1494,1494,1494),(1495,1495,1495), +(1496,1496,1496),(1497,1497,1497),(1498,1498,1498),(1499,1499,1499),(1500,1500,1500), +(1501,1501,1501),(1502,1502,1502),(1503,1503,1503),(1504,1504,1504),(1505,1505,1505), +(1506,1506,1506),(1507,1507,1507),(1508,1508,1508),(1509,1509,1509),(1510,1510,1510), +(1511,1511,1511),(1512,1512,1512),(1513,1513,1513),(1514,1514,1514),(1515,1515,1515), +(1516,1516,1516),(1517,1517,1517),(1518,1518,1518),(1519,1519,1519),(1520,1520,1520), +(1521,1521,1521),(1522,1522,1522),(1523,1523,1523),(1524,1524,1524),(1525,1525,1525), +(1526,1526,1526),(1527,1527,1527),(1528,1528,1528),(1529,1529,1529),(1530,1530,1530), +(1531,1531,1531),(1532,1532,1532),(1533,1533,1533),(1534,1534,1534),(1535,1535,1535), +(1536,1536,1536),(1537,1537,1537),(1538,1538,1538),(1539,1539,1539),(1540,1540,1540), +(1541,1541,1541),(1542,1542,1542),(1543,1543,1543),(1544,1544,1544),(1545,1545,1545), +(1546,1546,1546),(1547,1547,1547),(1548,1548,1548),(1549,1549,1549),(1550,1550,1550), +(1551,1551,1551),(1552,1552,1552),(1553,1553,1553),(1554,1554,1554),(1555,1555,1555), +(1556,1556,1556),(1557,1557,1557),(1558,1558,1558),(1559,1559,1559),(1560,1560,1560), +(1561,1561,1561),(1562,1562,1562),(1563,1563,1563),(1564,1564,1564),(1565,1565,1565), +(1566,1566,1566),(1567,1567,1567),(1568,1568,1568),(1569,1569,1569),(1570,1570,1570), +(1571,1571,1571),(1572,1572,1572),(1573,1573,1573),(1574,1574,1574),(1575,1575,1575), +(1576,1576,1576),(1577,1577,1577),(1578,1578,1578),(1579,1579,1579),(1580,1580,1580), +(1581,1581,1581),(1582,1582,1582),(1583,1583,1583),(1584,1584,1584),(1585,1585,1585), +(1586,1586,1586),(1587,1587,1587),(1588,1588,1588),(1589,1589,1589),(1590,1590,1590), +(1591,1591,1591),(1592,1592,1592),(1593,1593,1593),(1594,1594,1594),(1595,1595,1595), +(1596,1596,1596),(1597,1597,1597),(1598,1598,1598),(1599,1599,1599),(1600,1600,1600), +(1601,1601,1601),(1602,1602,1602),(1603,1603,1603),(1604,1604,1604),(1605,1605,1605), +(1606,1606,1606),(1607,1607,1607),(1608,1608,1608),(1609,1609,1609),(1610,1610,1610), +(1611,1611,1611),(1612,1612,1612),(1613,1613,1613),(1614,1614,1614),(1615,1615,1615), +(1616,1616,1616),(1617,1617,1617),(1618,1618,1618),(1619,1619,1619),(1620,1620,1620), +(1621,1621,1621),(1622,1622,1622),(1623,1623,1623),(1624,1624,1624),(1625,1625,1625), +(1626,1626,1626),(1627,1627,1627),(1628,1628,1628),(1629,1629,1629),(1630,1630,1630), +(1631,1631,1631),(1632,1632,1632),(1633,1633,1633),(1634,1634,1634),(1635,1635,1635), +(1636,1636,1636),(1637,1637,1637),(1638,1638,1638),(1639,1639,1639),(1640,1640,1640), +(1641,1641,1641),(1642,1642,1642),(1643,1643,1643),(1644,1644,1644),(1645,1645,1645), +(1646,1646,1646),(1647,1647,1647),(1648,1648,1648),(1649,1649,1649),(1650,1650,1650), +(1651,1651,1651),(1652,1652,1652),(1653,1653,1653),(1654,1654,1654),(1655,1655,1655), +(1656,1656,1656),(1657,1657,1657),(1658,1658,1658),(1659,1659,1659),(1660,1660,1660), +(1661,1661,1661),(1662,1662,1662),(1663,1663,1663),(1664,1664,1664),(1665,1665,1665), +(1666,1666,1666),(1667,1667,1667),(1668,1668,1668),(1669,1669,1669),(1670,1670,1670), +(1671,1671,1671),(1672,1672,1672),(1673,1673,1673),(1674,1674,1674),(1675,1675,1675), +(1676,1676,1676),(1677,1677,1677),(1678,1678,1678),(1679,1679,1679),(1680,1680,1680), +(1681,1681,1681),(1682,1682,1682),(1683,1683,1683),(1684,1684,1684),(1685,1685,1685), +(1686,1686,1686),(1687,1687,1687),(1688,1688,1688),(1689,1689,1689),(1690,1690,1690), +(1691,1691,1691),(1692,1692,1692),(1693,1693,1693),(1694,1694,1694),(1695,1695,1695), +(1696,1696,1696),(1697,1697,1697),(1698,1698,1698),(1699,1699,1699),(1700,1700,1700), +(1701,1701,1701),(1702,1702,1702),(1703,1703,1703),(1704,1704,1704),(1705,1705,1705), +(1706,1706,1706),(1707,1707,1707),(1708,1708,1708),(1709,1709,1709),(1710,1710,1710), +(1711,1711,1711),(1712,1712,1712),(1713,1713,1713),(1714,1714,1714),(1715,1715,1715), +(1716,1716,1716),(1717,1717,1717),(1718,1718,1718),(1719,1719,1719),(1720,1720,1720), +(1721,1721,1721),(1722,1722,1722),(1723,1723,1723),(1724,1724,1724),(1725,1725,1725), +(1726,1726,1726),(1727,1727,1727),(1728,1728,1728),(1729,1729,1729),(1730,1730,1730), +(1731,1731,1731),(1732,1732,1732),(1733,1733,1733),(1734,1734,1734),(1735,1735,1735), +(1736,1736,1736),(1737,1737,1737),(1738,1738,1738),(1739,1739,1739),(1740,1740,1740), +(1741,1741,1741),(1742,1742,1742),(1743,1743,1743),(1744,1744,1744),(1745,1745,1745), +(1746,1746,1746),(1747,1747,1747),(1748,1748,1748),(1749,1749,1749),(1750,1750,1750), +(1751,1751,1751),(1752,1752,1752),(1753,1753,1753),(1754,1754,1754),(1755,1755,1755), +(1756,1756,1756),(1757,1757,1757),(1758,1758,1758),(1759,1759,1759),(1760,1760,1760), +(1761,1761,1761),(1762,1762,1762),(1763,1763,1763),(1764,1764,1764),(1765,1765,1765), +(1766,1766,1766),(1767,1767,1767),(1768,1768,1768),(1769,1769,1769),(1770,1770,1770), +(1771,1771,1771),(1772,1772,1772),(1773,1773,1773),(1774,1774,1774),(1775,1775,1775), +(1776,1776,1776),(1777,1777,1777),(1778,1778,1778),(1779,1779,1779),(1780,1780,1780), +(1781,1781,1781),(1782,1782,1782),(1783,1783,1783),(1784,1784,1784),(1785,1785,1785), +(1786,1786,1786),(1787,1787,1787),(1788,1788,1788),(1789,1789,1789),(1790,1790,1790), +(1791,1791,1791),(1792,1792,1792),(1793,1793,1793),(1794,1794,1794),(1795,1795,1795), +(1796,1796,1796),(1797,1797,1797),(1798,1798,1798),(1799,1799,1799),(1800,1800,1800), +(1801,1801,1801),(1802,1802,1802),(1803,1803,1803),(1804,1804,1804),(1805,1805,1805), +(1806,1806,1806),(1807,1807,1807),(1808,1808,1808),(1809,1809,1809),(1810,1810,1810), +(1811,1811,1811),(1812,1812,1812),(1813,1813,1813),(1814,1814,1814),(1815,1815,1815), +(1816,1816,1816),(1817,1817,1817),(1818,1818,1818),(1819,1819,1819),(1820,1820,1820), +(1821,1821,1821),(1822,1822,1822),(1823,1823,1823),(1824,1824,1824),(1825,1825,1825), +(1826,1826,1826),(1827,1827,1827),(1828,1828,1828),(1829,1829,1829),(1830,1830,1830), +(1831,1831,1831),(1832,1832,1832),(1833,1833,1833),(1834,1834,1834),(1835,1835,1835), +(1836,1836,1836),(1837,1837,1837),(1838,1838,1838),(1839,1839,1839),(1840,1840,1840), +(1841,1841,1841),(1842,1842,1842),(1843,1843,1843),(1844,1844,1844),(1845,1845,1845), +(1846,1846,1846),(1847,1847,1847),(1848,1848,1848),(1849,1849,1849),(1850,1850,1850), +(1851,1851,1851),(1852,1852,1852),(1853,1853,1853),(1854,1854,1854),(1855,1855,1855), +(1856,1856,1856),(1857,1857,1857),(1858,1858,1858),(1859,1859,1859),(1860,1860,1860), +(1861,1861,1861),(1862,1862,1862),(1863,1863,1863),(1864,1864,1864),(1865,1865,1865), +(1866,1866,1866),(1867,1867,1867),(1868,1868,1868),(1869,1869,1869),(1870,1870,1870), +(1871,1871,1871),(1872,1872,1872),(1873,1873,1873),(1874,1874,1874),(1875,1875,1875), +(1876,1876,1876),(1877,1877,1877),(1878,1878,1878),(1879,1879,1879),(1880,1880,1880), +(1881,1881,1881),(1882,1882,1882),(1883,1883,1883),(1884,1884,1884),(1885,1885,1885), +(1886,1886,1886),(1887,1887,1887),(1888,1888,1888),(1889,1889,1889),(1890,1890,1890), +(1891,1891,1891),(1892,1892,1892),(1893,1893,1893),(1894,1894,1894),(1895,1895,1895), +(1896,1896,1896),(1897,1897,1897),(1898,1898,1898),(1899,1899,1899),(1900,1900,1900), +(1901,1901,1901),(1902,1902,1902),(1903,1903,1903),(1904,1904,1904),(1905,1905,1905), +(1906,1906,1906),(1907,1907,1907),(1908,1908,1908),(1909,1909,1909),(1910,1910,1910), +(1911,1911,1911),(1912,1912,1912),(1913,1913,1913),(1914,1914,1914),(1915,1915,1915), +(1916,1916,1916),(1917,1917,1917),(1918,1918,1918),(1919,1919,1919),(1920,1920,1920), +(1921,1921,1921),(1922,1922,1922),(1923,1923,1923),(1924,1924,1924),(1925,1925,1925), +(1926,1926,1926),(1927,1927,1927),(1928,1928,1928),(1929,1929,1929),(1930,1930,1930), +(1931,1931,1931),(1932,1932,1932),(1933,1933,1933),(1934,1934,1934),(1935,1935,1935), +(1936,1936,1936),(1937,1937,1937),(1938,1938,1938),(1939,1939,1939),(1940,1940,1940), +(1941,1941,1941),(1942,1942,1942),(1943,1943,1943),(1944,1944,1944),(1945,1945,1945), +(1946,1946,1946),(1947,1947,1947),(1948,1948,1948),(1949,1949,1949),(1950,1950,1950), +(1951,1951,1951),(1952,1952,1952),(1953,1953,1953),(1954,1954,1954),(1955,1955,1955), +(1956,1956,1956),(1957,1957,1957),(1958,1958,1958),(1959,1959,1959),(1960,1960,1960), +(1961,1961,1961),(1962,1962,1962),(1963,1963,1963),(1964,1964,1964),(1965,1965,1965), +(1966,1966,1966),(1967,1967,1967),(1968,1968,1968),(1969,1969,1969),(1970,1970,1970), +(1971,1971,1971),(1972,1972,1972),(1973,1973,1973),(1974,1974,1974),(1975,1975,1975), +(1976,1976,1976),(1977,1977,1977),(1978,1978,1978),(1979,1979,1979),(1980,1980,1980), +(1981,1981,1981),(1982,1982,1982),(1983,1983,1983),(1984,1984,1984),(1985,1985,1985), +(1986,1986,1986),(1987,1987,1987),(1988,1988,1988),(1989,1989,1989),(1990,1990,1990), +(1991,1991,1991),(1992,1992,1992),(1993,1993,1993),(1994,1994,1994),(1995,1995,1995), +(1996,1996,1996),(1997,1997,1997),(1998,1998,1998),(1999,1999,1999); + +SELECT COUNT(*) FROM t1; + + + +DROP TABLE t1; diff --git a/scripts/fill_help_tables.sh b/scripts/fill_help_tables.sh index cb5437f7178..a62fe0e0b11 100644 --- a/scripts/fill_help_tables.sh +++ b/scripts/fill_help_tables.sh @@ -45,6 +45,7 @@ use strict; use Getopt::Long; my $insert_portion_size= 15; +my $maximum_line_length= 2040; my $error_prefix= "---- help parsing errors :"; my $path_to_lex_file= "../sql/lex.h"; @@ -166,6 +167,7 @@ sub add_description print_error "double description for $topic_name\n"; } $topics{$topic_name}->{description}= $description; + $topics{$topic_name}->{line_of_description}= $cur_line; add_topic_to_category($topic_name); } @@ -515,21 +517,52 @@ if (scalar(@topic_names)) { my $header= "insert into help_topic ". "(help_topic_id,help_category_id,name,description,example) values "; + my $line_accumulator= $header; + my $lines_in_accumulator= 0; + my $actual_max_line_length= $maximum_line_length-2; # for ";\n" my $topic_name; my $count= 0; foreach $topic_name (@topic_names) { - print_insert_header($count,$header); my $topic= $topics{$topic_name}; - print "($count,"; - print "$topic->{category}->{__id__},"; - print "\"$topic_name\","; - print "\"$topic->{description}\","; - print "\"$topic->{example}\")"; + my $line= "($count,"; + $line.= "$topic->{category}->{__id__},"; + $line.= "\"$topic_name\","; + $line.= "\"$topic->{description}\","; + $line.= "\"$topic->{example}\")"; + if ($lines_in_accumulator <= $insert_portion_size && + length($line) + length($line_accumulator) < $actual_max_line_length) + { + if ($lines_in_accumulator ne 0) + { + $line_accumulator.= ","; + } + $line_accumulator.= $line; + $lines_in_accumulator++; + } + else + { + if (length($line) + length($header) >= $actual_max_line_length) + { + $cur_line= $topics{$topic_name}->{line_of_description}; + print_error "too long record for topic \"$topic_name\" \n". + " please decrease its description or example!\n"; + } + else + { + print "$line_accumulator;\n"; + $line_accumulator= $header.$line; + $lines_in_accumulator= 1; + } + } $topics{$topic_name}->{__id__}= $count; $count++; } - printf ";\n\n"; + if ($lines_in_accumulator ne 0) + { + print "$line_accumulator;\n"; + } + printf "\n"; } my @keywords_names= keys(%keywords); diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 1861e8c52f8..61d173aac05 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -200,15 +200,28 @@ if test "$in_rpm" -eq 0 -a "$windows" -eq 0 then echo "Installing all prepared tables" fi -if ( - $scriptdir/mysql_create_system_tables $create_option $mdata $hostname $windows - if test -n "$fill_help_tables" - then - cat $fill_help_tables - fi -) | eval "$mysqld $defaults $mysqld_opt --bootstrap --skip-grant-tables \ - --basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb $args" +mysqld_install_cmd_line="$mysqld $defaults $mysqld_opt --bootstrap \ +--skip-grant-tables --basedir=$basedir --datadir=$ldata --skip-innodb \ +--skip-bdb $args" +if $scriptdir/mysql_create_system_tables $create_option $mdata $hostname $windows \ + | eval "$mysqld_install_cmd_line" then + if test -n "$fill_help_tables" + then + if test "$in_rpm" -eq 0 -a "$windows" -eq 0 + then + echo "Fill help tables" + fi + if ! (echo "use mysql; + " + cat $fill_help_tables) | eval "$mysqld_install_cmd_line" + then + echo "" + echo "WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!" + echo "The \"HELP\" command might not work properly" + echo "" + fi + fi if test "$in_rpm" = 0 -a "$windows" = 0 then echo "" @@ -250,7 +263,7 @@ then fi exit 0 else - echo "Installation of grant tables failed!" + echo "Installation of system tables failed!" echo echo "Examine the logs in $ldata for more information." echo "You can also try to start the mysqld daemon with:" diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 1530a78d0eb..4b4637e0110 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -682,25 +682,80 @@ inline int ha_ndbcluster::next_result(byte *buf) } +/* + Set bounds for a ordered index scan, use key_range +*/ + +int ha_ndbcluster::set_bounds(NdbOperation *op, + const key_range *key, + int bound) +{ + uint i, tot_len; + byte *key_ptr; + KEY* key_info= table->key_info + active_index; + KEY_PART_INFO* key_part= key_info->key_part; + KEY_PART_INFO* end= key_part+key_info->key_parts; + + DBUG_ENTER("set_bounds"); + DBUG_PRINT("enter", ("bound: %d", bound)); + DBUG_PRINT("enter", ("key_parts: %d", key_info->key_parts)); + DBUG_PRINT("enter", ("key->length: %d", key->length)); + DBUG_PRINT("enter", ("key->flag: %d", key->flag)); + + // Set bounds using key data + tot_len= 0; + key_ptr= (byte *) key->key; + for (; key_part != end; key_part++) + { + Field* field= key_part->field; + uint32 field_len= field->pack_length(); + tot_len+= field_len; + + const char* bounds[]= {"LE", "LT", "GE", "GT", "EQ"}; + DBUG_ASSERT(bound >= 0 && bound <= 4); + DBUG_PRINT("info", ("Set Bound%s on %s", + bounds[bound], + field->field_name)); + DBUG_DUMP("key", (char*)key_ptr, field_len); + + if (op->setBound(field->field_name, + bound, + key_ptr, + field_len) != 0) + ERR_RETURN(op->getNdbError()); + + key_ptr+= field_len; + + if (tot_len >= key->length) + break; + + /* + Only one bound which is not EQ can be set + so if this bound was not EQ, bail out and make + a best effort attempt + */ + if (bound != NdbOperation::BoundEQ) + break; + } + + DBUG_RETURN(0); +} + + /* Read record(s) from NDB using ordered index scan */ -int ha_ndbcluster::ordered_index_scan(const byte *key, uint key_len, - byte *buf, - enum ha_rkey_function find_flag) +int ha_ndbcluster::ordered_index_scan(const key_range *start_key, + const key_range *end_key, + bool sorted, byte* buf) { uint no_fields= table->fields; - uint tot_len, i; + uint i; NdbConnection *trans= m_active_trans; NdbResultSet *cursor= m_active_cursor; NdbScanOperation *op; - const char *bound_str= NULL; const char *index_name; - NdbOperation::BoundType bound_type = NdbOperation::BoundEQ; - bool can_be_handled_by_ndb= FALSE; - byte *key_ptr; - KEY *key_info; THD* thd = current_thd; DBUG_ENTER("ordered_index_scan"); DBUG_PRINT("enter", ("index: %u", active_index)); @@ -712,77 +767,27 @@ int ha_ndbcluster::ordered_index_scan(const byte *key, uint key_len, if (!(cursor= op->readTuples(parallelism))) ERR_RETURN(trans->getNdbError()); m_active_cursor= cursor; - - switch (find_flag) { - case HA_READ_KEY_EXACT: /* Find first record else error */ - bound_str= "HA_READ_KEY_EXACT"; - bound_type= NdbOperation::BoundEQ; - can_be_handled_by_ndb= TRUE; - break; - case HA_READ_KEY_OR_NEXT: /* Record or next record */ - bound_str= "HA_READ_KEY_OR_NEXT"; - bound_type= NdbOperation::BoundLE; - can_be_handled_by_ndb= TRUE; - break; - case HA_READ_KEY_OR_PREV: /* Record or previous */ - bound_str= "HA_READ_KEY_OR_PREV"; - bound_type= NdbOperation::BoundGE; - can_be_handled_by_ndb= TRUE; - break; - case HA_READ_AFTER_KEY: /* Find next rec. after key-record */ - bound_str= "HA_READ_AFTER_KEY"; - bound_type= NdbOperation::BoundLT; - can_be_handled_by_ndb= TRUE; - break; - case HA_READ_BEFORE_KEY: /* Find next rec. before key-record */ - bound_str= "HA_READ_BEFORE_KEY"; - bound_type= NdbOperation::BoundGT; - can_be_handled_by_ndb= TRUE; - break; - case HA_READ_PREFIX: /* Key which as same prefix */ - bound_str= "HA_READ_PREFIX"; - break; - case HA_READ_PREFIX_LAST: /* Last key with the same prefix */ - bound_str= "HA_READ_PREFIX_LAST"; - break; - case HA_READ_PREFIX_LAST_OR_PREV: - /* Last or prev key with the same prefix */ - bound_str= "HA_READ_PREFIX_LAST_OR_PREV"; - break; - default: - bound_str= "UNKNOWN"; - break; - } - DBUG_PRINT("info", ("find_flag: %s, bound_type: %d," - "can_be_handled_by_ndb: %d", - bound_str, bound_type, can_be_handled_by_ndb)); - if (!can_be_handled_by_ndb) + + if (start_key && + set_bounds(op, start_key, + (start_key->flag == HA_READ_KEY_EXACT) ? + NdbOperation::BoundEQ : + (start_key->flag == HA_READ_AFTER_KEY) ? + NdbOperation::BoundLT : + NdbOperation::BoundLE)) DBUG_RETURN(1); + + if (end_key && + (start_key && start_key->flag != HA_READ_KEY_EXACT) && + // MASV Is it a bug that end_key is not 0 + // if start flag is HA_READ_KEY_EXACT - // Set bounds using key data - tot_len= 0; - key_ptr= (byte *) key; - key_info= table->key_info + active_index; - for (i= 0; i < key_info->key_parts; i++) - { - Field* field= key_info->key_part[i].field; - uint32 field_len= field->pack_length(); - DBUG_PRINT("info", ("Set index bound on %s", - field->field_name)); - DBUG_DUMP("key", (char*)key_ptr, field_len); - - if (op->setBound(field->field_name, - bound_type, - key_ptr, - field_len) != 0) - ERR_RETURN(op->getNdbError()); - - key_ptr+= field_len; - tot_len+= field_len; - if (tot_len >= key_len) - break; - } - + set_bounds(op, end_key, + (end_key->flag == HA_READ_AFTER_KEY) ? + NdbOperation::BoundGE : + NdbOperation::BoundGT)) + DBUG_RETURN(1); + // Define attributes to read for (i= 0; i < no_fields; i++) { @@ -1428,9 +1433,13 @@ int ha_ndbcluster::index_read(byte *buf, #endif error= unique_index_read(key, key_len, buf); break; - + case ORDERED_INDEX: - error= ordered_index_scan(key, key_len, buf, find_flag); + key_range start_key; + start_key.key= key; + start_key.length= key_len; + start_key.flag= find_flag; + error= ordered_index_scan(&start_key, 0, false, buf); break; default: @@ -1491,6 +1500,44 @@ int ha_ndbcluster::index_last(byte *buf) } +int ha_ndbcluster::read_range_first(const key_range *start_key, + const key_range *end_key, + bool sorted) +{ + int error= 1; + DBUG_ENTER("ha_ndbcluster::read_range_first"); + + switch (get_index_type(active_index)){ + case PRIMARY_KEY_INDEX: + error= pk_read(start_key->key, start_key->length, + table->record[0]); + break; + + case UNIQUE_INDEX: + error= unique_index_read(start_key->key, start_key->length, + table->record[0]); + break; + + case ORDERED_INDEX: + // Start the ordered index scan and fetch the first row + error= ordered_index_scan(start_key, end_key, sorted, + table->record[0]); + break; + + default: + case UNDEFINED_INDEX: + break; + } + DBUG_RETURN(error); +} + +int ha_ndbcluster::read_range_next(bool eq_range) +{ + DBUG_ENTER("ha_ndbcluster::read_range_next"); + DBUG_RETURN(next_result(table->record[0])); +} + + int ha_ndbcluster::rnd_init(bool scan) { NdbResultSet *cursor= m_active_cursor; diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 13466be9eb2..e524cd8e4b3 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -76,6 +76,11 @@ class ha_ndbcluster: public handler int rnd_next(byte *buf); int rnd_pos(byte *buf, byte *pos); void position(const byte *record); + int read_range_first(const key_range *start_key, + const key_range *end_key, + bool sorted); + int read_range_next(bool eq_range); + void info(uint); int extra(enum ha_extra_function operation); @@ -150,9 +155,9 @@ class ha_ndbcluster: public handler byte *buf); int unique_index_read(const byte *key, uint key_len, byte *buf); - int ordered_index_scan(const byte *key, uint key_len, - byte *buf, - enum ha_rkey_function find_flag); + int ordered_index_scan(const key_range *start_key, + const key_range *end_key, + bool sorted, byte* buf); int full_table_scan(byte * buf); int next_result(byte *buf); #if 0 @@ -175,6 +180,8 @@ class ha_ndbcluster: public handler int get_ndb_value(NdbOperation*, uint fieldnr, byte *field_ptr); int set_primary_key(NdbOperation *op, const byte *key); int set_primary_key(NdbOperation *op); + int set_bounds(NdbOperation *ndb_op, const key_range *key, + int bound); int key_cmp(uint keynr, const byte * old_row, const byte * new_row); void print_results(); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 3a3ebc93f51..a69c048a918 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1095,6 +1095,12 @@ extern "C" pthread_handler_decl(handle_bootstrap,arg) while (fgets(buff, thd->net.max_packet, file)) { uint length=(uint) strlen(buff); + if (buff[length-1]!='\n' && !feof(file)) + { + send_error(thd,ER_NET_PACKET_TOO_LARGE, NullS); + thd->is_fatal_error= 1; + break; + } while (length && (my_isspace(thd->charset(), buff[length-1]) || buff[length-1] == ';')) length--; diff --git a/tests/client_test.c b/tests/client_test.c index 419302d818a..8aaa9983bc9 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -56,6 +56,8 @@ static unsigned int iter_count= 0; static time_t start_time, end_time; static double total_time; +const char *default_dbug_option="d:t:o,/tmp/client_test.trace"; + #define myheader(str) \ { \ fprintf(stdout,"\n\n#####################################\n"); \ @@ -91,28 +93,28 @@ if (r) \ assert(r != 0); \ } -#define mystmt(stmt,r) \ +#define check_execute(stmt,r) \ { \ if (r) \ mysterror(stmt,NULL); \ assert(r == 0);\ } -#define mystmt_r(stmt,r) \ +#define check_execute_r(stmt,r) \ { \ if (r) \ mysterror(stmt,NULL); \ assert(r != 0);\ } -#define mystmt_init(stmt) \ +#define check_stmt(stmt) \ { \ if ( stmt == 0) \ myerror(NULL); \ assert(stmt != 0); \ } -#define mystmt_init_r(stmt) \ +#define check_stmt_r(stmt) \ { \ if (stmt == 0) \ myerror(NULL);\ @@ -430,10 +432,10 @@ uint my_process_stmt_result(MYSQL_STMT *stmt) my_print_result_metadata(result); rc= mysql_bind_result(stmt,buffer); - mystmt(stmt,rc); + check_execute(stmt,rc); rc= mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_field_seek(result, 0); while (mysql_fetch(stmt) == 0) @@ -481,10 +483,10 @@ uint my_stmt_result(const char *buff) fprintf(stdout,"\n\n %s", buff); stmt= mysql_simple_prepare(mysql,buff); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); row_count= my_process_stmt_result(stmt); mysql_stmt_close(stmt); @@ -520,9 +522,12 @@ static void verify_col_data(const char *table, const char *col, fprintf(stdout,"\n *** ERROR: FAILED TO GET THE RESULT ***"); exit(1); } - fprintf(stdout,"\n obtained: `%s` (expected: `%s`)", - row[field], exp_data); - assert(strcmp(row[field],exp_data) == 0); + if (strcmp(row[field],exp_data)) + { + fprintf(stdout,"\n obtained: `%s` (expected: `%s`)", + row[field], exp_data); + assert(0); + } mysql_free_result(result); } @@ -620,7 +625,7 @@ static void execute_prepare_query(const char *query, ulonglong exp_count) int rc; stmt= mysql_simple_prepare(mysql,query); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); myquery(rc); @@ -928,7 +933,7 @@ static void test_prepare_simple() /* insert */ strmov(query,"INSERT INTO test_prepare_simple VALUES(?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); mysql_stmt_close(stmt); @@ -936,7 +941,7 @@ static void test_prepare_simple() /* update */ strmov(query,"UPDATE test_prepare_simple SET id=? WHERE id=? AND name= ?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,3); mysql_stmt_close(stmt); @@ -944,18 +949,18 @@ static void test_prepare_simple() /* delete */ strmov(query,"DELETE FROM test_prepare_simple WHERE id=10"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); /* delete */ strmov(query,"DELETE FROM test_prepare_simple WHERE id=?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); @@ -964,7 +969,7 @@ static void test_prepare_simple() /* select */ strmov(query,"SELECT * FROM test_prepare_simple WHERE id=? AND name= ?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -1002,7 +1007,7 @@ static void test_prepare_field_result() 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); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); @@ -1050,11 +1055,11 @@ static void test_prepare_syntax() strmov(query,"INSERT INTO test_prepare_syntax VALUES(?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init_r(stmt); + check_stmt_r(stmt); strmov(query,"SELECT id,name FROM test_prepare_syntax WHERE id=? AND WHERE"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init_r(stmt); + check_stmt_r(stmt); /* now fetch the results ..*/ rc = mysql_commit(mysql); @@ -1100,7 +1105,7 @@ static void test_prepare() /* insert by prepare */ strxmov(query,"INSERT INTO my_prepare VALUES(?,?,?,?,?,?,?)",NullS); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,7); @@ -1135,7 +1140,7 @@ static void test_prepare() } rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); int_data = 320; small_data = 1867; @@ -1148,7 +1153,7 @@ static void test_prepare() { length[1]= my_sprintf(str_data,(str_data, "MySQL%d",int_data)); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); int_data += 25; small_data += 10; big_data += 100; @@ -1166,14 +1171,14 @@ static void test_prepare() assert(tiny_data == (char) my_stmt_result("SELECT * FROM my_prepare")); stmt = mysql_simple_prepare(mysql,"SELECT * FROM my_prepare"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); /* get the result */ rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); o_int_data = 320; o_small_data = 1867; @@ -1187,7 +1192,7 @@ static void test_prepare() len = my_sprintf(data, (data, "MySQL%d",o_int_data)); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n"); @@ -1271,7 +1276,7 @@ static void test_double_compare() strmov(query, "UPDATE test_double_compare SET col1=100 WHERE col1 = ? AND col2 = ? AND COL3 = ?"); stmt = mysql_simple_prepare(mysql,query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,3); @@ -1301,10 +1306,10 @@ static void test_double_compare() strmov(real_data,"10.2"); double_data = 34.5; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_affected_rows(0); @@ -1352,11 +1357,11 @@ static void test_null() /* insert by prepare, wrong column name */ strmov(query,"INSERT INTO test_null(col3,col2) VALUES(?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init_r(stmt); + check_stmt_r(stmt); strmov(query,"INSERT INTO test_null(col1,col2) VALUES(?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -1367,13 +1372,13 @@ static void test_null() bind[1]=bind[0]; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); /* now, execute the prepared statement to insert 10 records.. */ for (nData=0; nData<10; nData++) { rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } /* Re-bind with MYSQL_TYPE_NULL */ @@ -1382,12 +1387,12 @@ static void test_null() bind[1]= bind[0]; rc = mysql_bind_param(stmt,bind); - mystmt(stmt,rc); + check_execute(stmt,rc); for (nData=0; nData<10; nData++) { rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } mysql_stmt_close(stmt); @@ -1408,13 +1413,13 @@ static void test_null() bind[1].is_null= &is_null[1]; stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_null"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_bind_result(stmt,bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc= 0; is_null[0]= is_null[1]= 0; @@ -1481,15 +1486,15 @@ static void test_ps_null_param() { strmov(query, *cur_query); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); rc = mysql_bind_param(stmt,&in_bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc= mysql_bind_result(stmt,&out_bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc= mysql_fetch(stmt); assert(rc != MYSQL_NO_DATA); assert(out_is_null); @@ -1551,13 +1556,13 @@ static void test_fetch_null() assert(3 == my_stmt_result(query)); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc= 0; while (mysql_fetch(stmt) != MYSQL_NO_DATA) @@ -1590,12 +1595,12 @@ static void test_select_version() myheader("test_select_version"); stmt = mysql_simple_prepare(mysql, "SELECT @@version"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); my_process_stmt_result(stmt); mysql_stmt_close(stmt); @@ -1612,14 +1617,14 @@ static void test_select_show_table() myheader("test_select_show_table"); stmt = mysql_simple_prepare(mysql, "SHOW TABLES FROM mysql"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); for (i= 1; i < 3; i++) { rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } my_process_stmt_result(stmt); @@ -1707,10 +1712,10 @@ static void test_select_prepare() myquery(rc); stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_select"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); mysql_stmt_close(stmt); @@ -1737,10 +1742,10 @@ static void test_select_prepare() myquery(rc); stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_select"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); mysql_stmt_close(stmt); @@ -1792,7 +1797,7 @@ static void test_select() strmov(query,"SELECT * FROM test_select WHERE id=? AND name=?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -1813,10 +1818,10 @@ static void test_select() bind[0].is_null= 0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(my_process_stmt_result(stmt) == 1); @@ -1851,7 +1856,7 @@ session_id char(9) NOT NULL, \ strmov(query,"SELECT * FROM test_select WHERE session_id = ?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); @@ -1864,10 +1869,10 @@ session_id char(9) NOT NULL, \ bind[0].is_null=0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(my_process_stmt_result(stmt) == 1); @@ -1880,10 +1885,10 @@ session_id char(9) NOT NULL, \ bind[0].is_null=0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(my_process_stmt_result(stmt) == 0); @@ -1896,10 +1901,10 @@ session_id char(9) NOT NULL, \ bind[0].is_null=0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(my_process_stmt_result(stmt) == 1); @@ -1929,7 +1934,7 @@ static void test_bug1180() strmov(query,"SELECT * FROM test_select WHERE ?=\"1111\" and session_id = \"abc\""); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); @@ -1942,10 +1947,10 @@ static void test_bug1180() bind[0].is_null=0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(my_process_stmt_result(stmt) == 0); @@ -1958,10 +1963,10 @@ static void test_bug1180() bind[0].is_null=0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(my_process_stmt_result(stmt) == 1); @@ -1974,10 +1979,10 @@ static void test_bug1180() bind[0].is_null=0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(my_process_stmt_result(stmt) == 0); @@ -2009,7 +2014,7 @@ static void test_bug1644() strmov(query, "INSERT INTO foo_dfr VALUES (?,?,?,? )"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt, 4); @@ -2025,20 +2030,20 @@ static void test_bug1644() } rc= mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); isnull= 1; for (i = 0 ; i < 4 ; i++) bind[i].is_null= &isnull; rc= mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); isnull= 0; num= 88; @@ -2046,10 +2051,10 @@ static void test_bug1644() bind[i].is_null= &isnull; rc= mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); @@ -2107,43 +2112,43 @@ static void test_select_show() myquery(rc); stmt = mysql_simple_prepare(mysql, "show columns from test_show"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); my_process_stmt_result(stmt); mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "show tables from mysql like ?"); - mystmt_init_r(stmt); + check_stmt_r(stmt); strxmov(query,"show tables from ", current_db, " like \'test_show\'", NullS); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); my_process_stmt_result(stmt); mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "describe test_show"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); my_process_stmt_result(stmt); mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "show keys from test_show"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(1 == my_process_stmt_result(stmt)); mysql_stmt_close(stmt); @@ -2192,7 +2197,7 @@ static void test_simple_update() /* insert by prepare */ strmov(query,"UPDATE test_update SET col2=? WHERE col1=?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -2211,10 +2216,10 @@ static void test_simple_update() bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_affected_rows(1); mysql_stmt_close(stmt); @@ -2267,11 +2272,11 @@ static void test_long_data() strmov(query,"INSERT INTO test_long_data(col1,col2) VALUES(?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init_r(stmt); + check_stmt_r(stmt); strmov(query,"INSERT INTO test_long_data(col1,col2,col3) VALUES(?,?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,3); @@ -2288,7 +2293,7 @@ static void test_long_data() bind[2]=bind[1]; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); int_data= 999; data = (char *)"Michael"; @@ -2297,14 +2302,14 @@ static void test_long_data() rc = mysql_send_long_data(stmt,1,data,strlen(data)); data = (char *)" 'Monty' Widenius"; rc = mysql_send_long_data(stmt,1,data,strlen(data)); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_send_long_data(stmt,2,"Venu (venu@mysql.com)",4); - mystmt(stmt, rc); + check_execute(stmt, rc); /* execute */ rc = mysql_execute(stmt); fprintf(stdout," mysql_execute() returned %d\n",rc); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_commit(mysql); myquery(rc); @@ -2359,7 +2364,7 @@ static void test_long_data_str() strmov(query,"INSERT INTO test_long_data_str VALUES(?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -2378,7 +2383,7 @@ static void test_long_data_str() bind[1].is_null= &is_null[1]; is_null[1]=0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); length = 40; strmov(data,"MySQL AB"); @@ -2387,12 +2392,12 @@ static void test_long_data_str() for(i=0; i < 4; i++) { rc = mysql_send_long_data(stmt,1,(char *)data,5); - mystmt(stmt, rc); + check_execute(stmt, rc); } /* execute */ rc = mysql_execute(stmt); fprintf(stdout," mysql_execute() returned %d\n",rc); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_stmt_close(stmt); @@ -2416,6 +2421,9 @@ static void test_long_data_str() while (i--) strxmov(data,data,"MySQL",NullS); verify_col_data("test_long_data_str","longstr", data); + + rc = mysql_query(mysql,"DROP TABLE test_long_data_str"); + myquery(rc); } @@ -2428,8 +2436,11 @@ static void test_long_data_str1() int rc, i; char data[255]; long length, length1; + ulong max_blob_length, blob_length; + my_bool true_value; MYSQL_RES *result; MYSQL_BIND bind[2]; + MYSQL_FIELD *field; myheader("test_long_data_str1"); @@ -2450,7 +2461,7 @@ static void test_long_data_str1() strmov(query,"INSERT INTO test_long_data_str VALUES(?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -2465,23 +2476,23 @@ static void test_long_data_str1() bind[1].buffer_type=FIELD_TYPE_BLOB; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); length = my_sprintf(data, (data, "MySQL AB")); /* supply data in pieces */ for (i=0; i < 3; i++) { rc = mysql_send_long_data(stmt,0,data,length); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_send_long_data(stmt,1,data,2); - mystmt(stmt, rc); + check_execute(stmt, rc); } /* execute */ rc = mysql_execute(stmt); fprintf(stdout," mysql_execute() returned %d\n",rc); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_stmt_close(stmt); @@ -2494,6 +2505,11 @@ static void test_long_data_str1() /* get the result */ result = mysql_store_result(mysql); + + mysql_field_seek(result, 1); + field= mysql_fetch_field(result); + max_blob_length= field->max_length; + mytest(result); assert(1 == my_process_result_set(result)); @@ -2504,6 +2520,68 @@ static void test_long_data_str1() my_sprintf(data,(data,"%d",i*2)); verify_col_data("test_long_data_str","length(blb)",data); + + /* Test length of field->max_length */ + stmt= mysql_simple_prepare(mysql, "SELECT * from test_long_data_str"); + check_stmt(stmt); + verify_param_count(stmt,0); + + rc = mysql_execute(stmt); + check_execute(stmt,rc); + + rc= mysql_stmt_store_result(stmt); + check_execute(stmt,rc); + + result= mysql_get_metadata(stmt); + field= mysql_fetch_fields(result); + + /* 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); + rc = mysql_execute(stmt); + check_execute(stmt,rc); + + rc= mysql_stmt_store_result(stmt); + check_execute(stmt,rc); + + result= mysql_get_metadata(stmt); + field= mysql_fetch_fields(result); + + 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; + bind[0].buffer= (char *) &data; /* this buffer won't be altered */ + bind[0].buffer_length= 16; + bind[0].length= &blob_length; + rc= mysql_bind_result(stmt,bind); + data[16]= 0; + + DBUG_ASSERT((mysql_fetch(stmt) == 0)); + 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; + bind[1].buffer= (char *) &data; /* this buffer won't be altered */ + 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 */ + rc = mysql_query(mysql,"DROP TABLE test_long_data_str"); + myquery(rc); } @@ -2539,7 +2617,7 @@ static void test_long_data_bin() strmov(query,"INSERT INTO test_long_data_bin VALUES(?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -2555,7 +2633,7 @@ static void test_long_data_bin() bind[1].length= 0; /* Will not be used */ bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); length = 10; strmov(data,"MySQL AB"); @@ -2566,13 +2644,13 @@ static void test_long_data_bin() for (i=0; i < 100; i++) { rc = mysql_send_long_data(stmt,1,(char *)data,4); - mystmt(stmt, rc); + check_execute(stmt, rc); } } /* execute */ rc = mysql_execute(stmt); fprintf(stdout," mysql_execute() returned %d\n",rc); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_stmt_close(stmt); @@ -2634,7 +2712,7 @@ static void test_simple_delete() /* insert by prepare */ strmov(query,"DELETE FROM test_simple_delete WHERE col1=? AND col2=? AND col3=100"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -2654,10 +2732,10 @@ static void test_simple_delete() bind[0].is_null= 0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_affected_rows(1); @@ -2714,7 +2792,7 @@ static void test_update() strmov(query,"INSERT INTO test_update(col2,col3) VALUES(?,?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -2733,18 +2811,18 @@ static void test_update() bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); nData=100; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_affected_rows(1); mysql_stmt_close(stmt); strmov(query,"UPDATE test_update SET col2=? WHERE col3=?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); nData=100; @@ -2761,10 +2839,10 @@ static void test_update() bind[1].is_null= 0; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_affected_rows(1); mysql_stmt_close(stmt); @@ -2810,12 +2888,12 @@ static void test_prepare_noparam() /* insert by prepare */ strmov(query,"INSERT INTO my_prepare VALUES(10,'venu')"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); @@ -2889,16 +2967,16 @@ static void test_bind_result() bind[1].is_null= &is_null[1]; stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_bind_result"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 1: %d,%s(%lu)",nData, szData, length1); assert(nData == 10); @@ -2906,7 +2984,7 @@ static void test_bind_result() assert(length1 == 4); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 2: %d,%s(%lu)",nData, szData, length1); assert(nData == 20); @@ -2915,7 +2993,7 @@ static void test_bind_result() length=99; rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); if (is_null[0]) fprintf(stdout,"\n row 3: NULL,%s(%lu)", szData, length1); @@ -3010,16 +3088,16 @@ static void test_bind_result_ext() bind[7].buffer_length= sizeof(bData); stmt = mysql_simple_prepare(mysql, "select * from test_bind_result"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n data (tiny) : %d", t_data); fprintf(stdout, "\n data (short) : %d", s_data); @@ -3137,16 +3215,16 @@ static void test_bind_result_ext1() } stmt = mysql_simple_prepare(mysql, "select * from test_bind_result"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n data (tiny) : %s(%lu)", t_data, length[0]); fprintf(stdout, "\n data (short) : %f(%lu)", s_data, length[1]); @@ -3197,7 +3275,7 @@ static void bind_fetch(int row_count) my_bool is_null[7]; stmt = mysql_simple_prepare(mysql,"INSERT INTO test_bind_fetch VALUES(?,?,?,?,?,?,?)"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt, 7); @@ -3209,7 +3287,7 @@ static void bind_fetch(int row_count) bind[i].is_null= 0; } rc = mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); while (count--) { @@ -3220,7 +3298,7 @@ static void bind_fetch(int row_count) rc+= 12; } rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } rc = mysql_commit(mysql); @@ -3257,18 +3335,18 @@ static void bind_fetch(int row_count) bind[6].buffer_length= sizeof(s_data); rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); while (row_count--) { rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n"); fprintf(stdout, "\n tiny : %ld(%lu)", data[0], length[0]); @@ -3402,17 +3480,17 @@ static void test_fetch_date() assert(1 == my_stmt_result("SELECT * FROM test_bind_result")); stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_bind_result"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); ts_4[0]='\0'; rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n date : %s(%lu)", date, d_length); fprintf(stdout, "\n time : %s(%lu)", time, t_length); @@ -3730,7 +3808,7 @@ static void test_prepare_ext() /* insert by prepare - all integers */ strmov(query,(char *)"INSERT INTO test_prepare_ext(c1,c2,c3,c4,c5,c6) VALUES(?,?,?,?,?,?)"); stmt = mysql_simple_prepare(mysql,query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,6); @@ -3766,7 +3844,7 @@ static void test_prepare_ext() } rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); /* * integer to integer @@ -3774,7 +3852,7 @@ static void test_prepare_ext() for (nData=0; nData<10; nData++, tData++, sData++,bData++) { rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } mysql_stmt_close(stmt); @@ -3783,11 +3861,11 @@ static void test_prepare_ext() myquery(rc); stmt = mysql_simple_prepare(mysql,"SELECT c1,c2,c3,c4,c5,c6 FROM test_prepare_ext"); - mystmt_init(stmt); + check_stmt(stmt); /* get the result */ rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(nData == (int)my_process_stmt_result(stmt)); @@ -3929,7 +4007,7 @@ static void test_insert() /* insert by prepare */ stmt = mysql_simple_prepare(mysql, "INSERT INTO test_prep_insert VALUES(?,?)"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -3947,14 +4025,14 @@ static void test_insert() bind[1].length= &length; rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); /* now, execute the prepared statement to insert 10 records.. */ for (tiny_data=0; tiny_data < 3; tiny_data++) { length = my_sprintf(str_data, (str_data, "MySQL%d",tiny_data)); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } mysql_stmt_close(stmt); @@ -4001,7 +4079,7 @@ static void test_prepare_resultset() myquery(rc); stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_prepare_resultset"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); @@ -4114,25 +4192,25 @@ static void test_stmt_close() strmov(query,"DO \"nothing\""); stmt1= mysql_simple_prepare(lmysql, query); - mystmt_init(stmt1); + check_stmt(stmt1); verify_param_count(stmt1, 0); strmov(query,"INSERT INTO test_stmt_close(id) VALUES(?)"); stmt_x= mysql_simple_prepare(mysql, query); - mystmt_init(stmt_x); + check_stmt(stmt_x); verify_param_count(stmt_x, 1); strmov(query,"UPDATE test_stmt_close SET id=? WHERE id=?"); stmt3= mysql_simple_prepare(lmysql, query); - mystmt_init(stmt3); + check_stmt(stmt3); verify_param_count(stmt3, 2); strmov(query,"SELECT * FROM test_stmt_close WHERE id=?"); stmt2= mysql_simple_prepare(lmysql, query); - mystmt_init(stmt2); + check_stmt(stmt2); verify_param_count(stmt2, 1); @@ -4160,10 +4238,10 @@ static void test_stmt_close() bind[0].is_null=0; rc = mysql_bind_param(stmt_x, bind); - mystmt(stmt_x, rc); + check_execute(stmt_x, rc); rc = mysql_execute(stmt_x); - mystmt(stmt_x, rc); + check_execute(stmt_x, rc); verify_st_affected_rows(stmt_x, 1); @@ -4199,7 +4277,7 @@ static void test_set_variable() mysql_autocommit(mysql, TRUE); stmt1 = mysql_simple_prepare(mysql, "show variables like 'max_error_count'"); - mystmt_init(stmt1); + check_stmt(stmt1); get_bind[0].buffer_type= MYSQL_TYPE_STRING; get_bind[0].buffer= (char *)var; @@ -4214,13 +4292,13 @@ static void test_set_variable() get_bind[1].length= 0; rc = mysql_execute(stmt1); - mystmt(stmt1, rc); + check_execute(stmt1, rc); rc = mysql_bind_result(stmt1, get_bind); - mystmt(stmt1, rc); + check_execute(stmt1, rc); rc = mysql_fetch(stmt1); - mystmt(stmt1, rc); + check_execute(stmt1, rc); fprintf(stdout, "\n max_error_count(default): %d", get_count); def_count= get_count; @@ -4230,7 +4308,7 @@ static void test_set_variable() assert(rc == MYSQL_NO_DATA); stmt = mysql_simple_prepare(mysql, "set max_error_count=?"); - mystmt_init(stmt); + check_stmt(stmt); set_bind[0].buffer_type= MYSQL_TYPE_LONG; set_bind[0].buffer= (char *)&set_count; @@ -4238,19 +4316,19 @@ static void test_set_variable() set_bind[0].length= 0; rc = mysql_bind_param(stmt, set_bind); - mystmt(stmt,rc); + check_execute(stmt,rc); set_count= 31; rc= mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_commit(mysql); rc = mysql_execute(stmt1); - mystmt(stmt1, rc); + check_execute(stmt1, rc); rc = mysql_fetch(stmt1); - mystmt(stmt1, rc); + check_execute(stmt1, rc); fprintf(stdout, "\n max_error_count : %d", get_count); assert(get_count == set_count); @@ -4261,13 +4339,13 @@ static void test_set_variable() /* restore back to default */ set_count= def_count; rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt1); - mystmt(stmt1, rc); + check_execute(stmt1, rc); rc = mysql_fetch(stmt1); - mystmt(stmt1, rc); + check_execute(stmt1, rc); fprintf(stdout, "\n max_error_count(default): %d", get_count); assert(get_count == set_count); @@ -4305,7 +4383,7 @@ static void test_insert_meta() strmov(query,"INSERT INTO test_prep_insert VALUES(10,'venu1','test')"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); @@ -4316,7 +4394,7 @@ static void test_insert_meta() strmov(query,"INSERT INTO test_prep_insert VALUES(?,'venu',?)"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -4368,7 +4446,7 @@ static void test_update_meta() strmov(query,"UPDATE test_prep_update SET col1=10, col2='venu1' WHERE col3='test'"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); @@ -4379,7 +4457,7 @@ static void test_update_meta() strmov(query,"UPDATE test_prep_update SET col1=?, col2='venu' WHERE col3=?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -4435,7 +4513,7 @@ static void test_select_meta() strmov(query,"SELECT * FROM test_prep_select WHERE col1=10"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,0); @@ -4444,7 +4522,7 @@ static void test_select_meta() strmov(query,"SELECT col1, col3 from test_prep_select WHERE col1=? AND col3='test' AND col2= ?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,2); @@ -4579,10 +4657,10 @@ static void test_multi_stmt() myquery(rc); stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_multi_table WHERE id = ?"); - mystmt_init(stmt); + check_stmt(stmt); stmt2 = mysql_simple_prepare(mysql, "UPDATE test_multi_table SET name='updated' WHERE id=10"); - mystmt_init(stmt2); + check_stmt(stmt2); verify_param_count(stmt,1); @@ -4601,18 +4679,18 @@ static void test_multi_stmt() bind[1].is_null= &is_null[1]; rc = mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); id = 10; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); id = 999; rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n int_data: %d(%lu)", id, length[0]); fprintf(stdout, "\n str_data: %s(%lu)", name, length[1]); @@ -4624,23 +4702,23 @@ static void test_multi_stmt() /* alter the table schema now */ stmt1 = mysql_simple_prepare(mysql,"DELETE FROM test_multi_table WHERE id = ? AND name=?"); - mystmt_init(stmt1); + check_stmt(stmt1); verify_param_count(stmt1,2); rc = mysql_bind_param(stmt1, bind); - mystmt(stmt1, rc); + check_execute(stmt1, rc); rc = mysql_execute(stmt2); - mystmt(stmt2, rc); + check_execute(stmt2, rc); verify_st_affected_rows(stmt2, 1); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n int_data: %d(%lu)", id, length[0]); fprintf(stdout, "\n str_data: %s(%lu)", name, length[1]); @@ -4651,14 +4729,14 @@ static void test_multi_stmt() assert(rc == MYSQL_NO_DATA); rc = mysql_execute(stmt1); - mystmt(stmt1, rc); + check_execute(stmt1, rc); verify_st_affected_rows(stmt1, 1); mysql_stmt_close(stmt1); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); assert(rc == MYSQL_NO_DATA); @@ -4850,7 +4928,7 @@ static void test_prepare_alter() myquery(rc); stmt = mysql_simple_prepare(mysql, "INSERT INTO test_prep_alter VALUES(?,'monty')"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); @@ -4862,18 +4940,18 @@ static void test_prepare_alter() bind[0].is_null= &is_null; rc = mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); id = 30; length= 0; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); if (thread_query((char *)"ALTER TABLE test_prep_alter change id id_new varchar(20)")) exit(0); is_null=1; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(4 == my_stmt_result("SELECT * FROM test_prep_alter")); @@ -5034,7 +5112,7 @@ static void test_prepare_multi_statements() } strmov(query, "select 1; select 'another value'"); stmt = mysql_simple_prepare(mysql_local,query); - mystmt_init_r(stmt); + check_stmt_r(stmt); mysql_close(mysql_local); } @@ -5089,19 +5167,19 @@ static void test_store_result() length1= 0; stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_store_result"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 1: %ld,%s(%lu)", nData, szData, length1); assert(nData == 10); @@ -5109,7 +5187,7 @@ static void test_store_result() assert(length1 == 4); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 2: %ld,%s(%lu)",nData, szData, length1); assert(nData == 20); @@ -5118,7 +5196,7 @@ static void test_store_result() length=99; rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); if (is_null[0]) fprintf(stdout,"\n row 3: NULL,%s(%lu)", szData, length1); @@ -5130,13 +5208,13 @@ static void test_store_result() assert(rc == MYSQL_NO_DATA); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 1: %ld,%s(%lu)",nData, szData, length1); assert(nData == 10); @@ -5144,7 +5222,7 @@ static void test_store_result() assert(length1 == 4); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 2: %ld,%s(%lu)",nData, szData, length1); assert(nData == 20); @@ -5153,7 +5231,7 @@ static void test_store_result() length=99; rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); if (is_null[0]) fprintf(stdout,"\n row 3: NULL,%s(%lu)", szData, length1); @@ -5200,13 +5278,13 @@ static void test_store_result1() myquery(rc); stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_store_result"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = 0; while (mysql_fetch(stmt) != MYSQL_NO_DATA) @@ -5215,10 +5293,10 @@ static void test_store_result1() assert(rc == 3); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = 0; while (mysql_fetch(stmt) != MYSQL_NO_DATA) @@ -5271,24 +5349,24 @@ static void test_store_result2() strmov((char *)query , "SELECT col1 FROM test_store_result where col1= ?"); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); nData = 10; length= 0; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); nData = 0; rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 1: %d",nData); assert(nData == 10); @@ -5298,14 +5376,14 @@ static void test_store_result2() nData = 20; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); nData = 0; rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 1: %d",nData); assert(nData == 20); @@ -5363,23 +5441,23 @@ static void test_subselect() bind[0].is_null= 0; stmt = mysql_simple_prepare(mysql, "INSERT INTO test_sub2(id) SELECT * FROM test_sub1 WHERE id=?", 100); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); id = 2; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_st_affected_rows(stmt, 1); id = 9; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_st_affected_rows(stmt, 0); @@ -5392,20 +5470,20 @@ static void test_subselect() assert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=7)")); stmt = mysql_simple_prepare(mysql, query, 150); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_param(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_bind_result(stmt,bind); - mystmt(stmt, rc); + check_execute(stmt, rc); id = 7; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 1: %d",id); assert(id == 1); @@ -5415,10 +5493,10 @@ static void test_subselect() id= 8; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n row 1: %d",id); assert(id == 0); @@ -5446,7 +5524,7 @@ static void test_bind_date_conv(uint row_count) uint year, month, day, hour, minute, sec; stmt = mysql_simple_prepare(mysql,"INSERT INTO test_date VALUES(?,?,?,?)"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt, 4); @@ -5475,7 +5553,7 @@ static void test_bind_date_conv(uint row_count) } rc = mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); for (count= 0; count < row_count; count++) { @@ -5491,7 +5569,7 @@ static void test_bind_date_conv(uint row_count) tm[i].second= sec+count; } rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } rc = mysql_commit(mysql); @@ -5505,18 +5583,18 @@ static void test_bind_date_conv(uint row_count) myquery(rc); rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); for (count=0; count < row_count; count++) { rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n"); for (i= 0; i < array_elements(bind); i++) @@ -5697,25 +5775,25 @@ static void test_pure_coverage() myquery(rc); stmt = mysql_simple_prepare(mysql,"insert into test_pure(c67788) values(10)"); - mystmt_init_r(stmt); + check_stmt_r(stmt); /* Query without params and result should allow to bind 0 arrays */ stmt = mysql_simple_prepare(mysql,"insert into test_pure(c2) values(10)"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_param(stmt, (MYSQL_BIND*)0); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_bind_result(stmt, (MYSQL_BIND*)0); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql,"insert into test_pure(c2) values(?)"); - mystmt_init(stmt); + check_stmt(stmt); bind[0].length= &length; bind[0].is_null= 0; @@ -5723,32 +5801,32 @@ static void test_pure_coverage() bind[0].buffer_type= MYSQL_TYPE_GEOMETRY; rc = mysql_bind_param(stmt, bind); - mystmt_r(stmt, rc); /* unsupported buffer type */ + check_execute_r(stmt, rc); /* unsupported buffer type */ bind[0].buffer_type= MYSQL_TYPE_STRING; rc = mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql,"select * from test_pure"); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); bind[0].buffer_type= MYSQL_TYPE_GEOMETRY; rc = mysql_bind_result(stmt, bind); - mystmt_r(stmt, rc); /* unsupported buffer type */ + check_execute_r(stmt, rc); /* unsupported buffer type */ rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt_r(stmt, rc); /* commands out of sync */ + check_execute_r(stmt, rc); /* commands out of sync */ mysql_stmt_close(stmt); @@ -5782,10 +5860,10 @@ static void test_buffers() myquery(rc); stmt = mysql_simple_prepare(mysql,"select str from test_buffer"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); bzero(buffer, 20); /* Avoid overruns in printf() */ @@ -5796,14 +5874,14 @@ static void test_buffers() bind[0].buffer= (char *)buffer; rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); buffer[1]='X'; rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n data: %s (%lu)", buffer, length); assert(buffer[0] == 'M'); assert(buffer[1] == 'X'); @@ -5811,30 +5889,30 @@ static void test_buffers() bind[0].buffer_length=8; rc = mysql_bind_result(stmt, bind);/* re-bind */ - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n data: %s (%lu)", buffer, length); assert(strncmp(buffer,"Database",8) == 0); assert(length == 8); bind[0].buffer_length=12; rc = mysql_bind_result(stmt, bind);/* re-bind */ - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n data: %s (%lu)", buffer, length); assert(strcmp(buffer,"Open-Source") == 0); assert(length == 11); bind[0].buffer_length=6; rc = mysql_bind_result(stmt, bind);/* re-bind */ - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n data: %s (%lu)", buffer, length); assert(strncmp(buffer,"Popula",6) == 0); assert(length == 7); @@ -5860,7 +5938,7 @@ static void test_open_direct() myquery(rc); stmt = mysql_simple_prepare(mysql,"INSERT INTO test_open_direct values(10,'mysql')"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_query(mysql, "SELECT * FROM test_open_direct"); myquery(rc); @@ -5872,7 +5950,7 @@ static void test_open_direct() mysql_free_result(result); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_st_affected_rows(stmt, 1); @@ -5886,7 +5964,7 @@ static void test_open_direct() mysql_free_result(result); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); verify_st_affected_rows(stmt, 1); @@ -5903,41 +5981,41 @@ static void test_open_direct() /* run a direct query in the middle of a fetch */ stmt= mysql_simple_prepare(mysql,"SELECT * FROM test_open_direct"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_query(mysql,"INSERT INTO test_open_direct(id) VALUES(20)"); myquery_r(rc); rc = mysql_stmt_close(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_query(mysql,"INSERT INTO test_open_direct(id) VALUES(20)"); myquery(rc); /* run a direct query with store result */ stmt= mysql_simple_prepare(mysql,"SELECT * FROM test_open_direct"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_query(mysql,"drop table test_open_direct"); myquery(rc); rc = mysql_stmt_close(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } /* @@ -5954,10 +6032,10 @@ static void test_fetch_nobuffs() stmt = mysql_simple_prepare(mysql,"SELECT DATABASE(), CURRENT_USER(), \ CURRENT_DATE(), CURRENT_TIME()"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = 0; while (mysql_fetch(stmt) != MYSQL_NO_DATA) @@ -5977,10 +6055,10 @@ static void test_fetch_nobuffs() bind[3].buffer= (char *)str[3]; rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = 0; while (mysql_fetch(stmt) != MYSQL_NO_DATA) @@ -6027,10 +6105,10 @@ static void test_ushort_bug() stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_ushort"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); bind[0].buffer_type= MYSQL_TYPE_SHORT; bind[0].buffer= (char *)&short_value; @@ -6053,10 +6131,10 @@ static void test_ushort_bug() bind[3].length= &t_length; rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout,"\n ushort : %d (%ld)", short_value, s_length); fprintf(stdout,"\n ulong : %ld (%ld)", long_value, l_length); @@ -6111,10 +6189,10 @@ static void test_sshort_bug() stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_sshort"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); bind[0].buffer_type= MYSQL_TYPE_SHORT; bind[0].buffer= (char *)&short_value; @@ -6137,10 +6215,10 @@ static void test_sshort_bug() bind[3].length= &t_length; rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout,"\n sshort : %d (%ld)", short_value, s_length); fprintf(stdout,"\n slong : %ld (%ld)", long_value, l_length); @@ -6195,10 +6273,10 @@ static void test_stiny_bug() stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_stiny"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); bind[0].buffer_type= MYSQL_TYPE_SHORT; bind[0].buffer= (char *)&short_value; @@ -6221,10 +6299,10 @@ static void test_stiny_bug() bind[3].length= &t_length; rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout,"\n sshort : %d (%ld)", short_value, s_length); fprintf(stdout,"\n slong : %ld (%ld)", long_value, l_length); @@ -6280,10 +6358,10 @@ static void test_field_misc() mysql_free_result(result); stmt = mysql_simple_prepare(mysql,"SELECT @@autocommit"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); result = mysql_get_metadata(stmt); mytest(result); @@ -6300,10 +6378,10 @@ static void test_field_misc() mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "SELECT @@table_type"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); bind[0].buffer_type= MYSQL_TYPE_STRING; bind[0].buffer= table_type; @@ -6312,10 +6390,10 @@ static void test_field_misc() bind[0].buffer_length= NAME_LEN; rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n default table type: %s(%ld)", table_type, type_length); rc = mysql_fetch(stmt); @@ -6324,13 +6402,13 @@ static void test_field_misc() mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "SELECT @@table_type"); - mystmt_init(stmt); + check_stmt(stmt); result = mysql_get_metadata(stmt); mytest(result); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); @@ -6344,13 +6422,13 @@ static void test_field_misc() mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "SELECT @@max_error_count"); - mystmt_init(stmt); + check_stmt(stmt); result = mysql_get_metadata(stmt); mytest(result); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); @@ -6364,13 +6442,13 @@ static void test_field_misc() mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "SELECT @@max_allowed_packet"); - mystmt_init(stmt); + check_stmt(stmt); result = mysql_get_metadata(stmt); mytest(result); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); @@ -6384,13 +6462,13 @@ static void test_field_misc() mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "SELECT @@sql_warnings"); - mystmt_init(stmt); + check_stmt(stmt); result = mysql_get_metadata(stmt); mytest(result); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); @@ -6445,10 +6523,10 @@ static void test_set_option() fprintf(stdout,"\n with SQL_SELECT_LIMIT=2 (prepare)"); stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_limit"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(2 == my_process_stmt_result(stmt)); @@ -6460,10 +6538,10 @@ static void test_set_option() myquery(rc); stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_limit"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(4 == my_process_stmt_result(stmt)); @@ -6544,7 +6622,7 @@ static void test_prepare_grant() myquery_r(rc); stmt= mysql_simple_prepare(mysql,"DELETE FROM test_grant"); - mystmt_init_r(stmt); + check_stmt_r(stmt); assert(4 == my_stmt_result("SELECT * FROM test_grant")); @@ -6590,10 +6668,10 @@ static void test_frm_bug() myquery(rc); stmt = mysql_simple_prepare(mysql, "show variables like 'datadir'"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); bind[0].buffer_type= MYSQL_TYPE_STRING; bind[0].buffer= data_dir; @@ -6603,10 +6681,10 @@ static void test_frm_bug() bind[1]=bind[0]; rc = mysql_bind_result(stmt,bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout,"\n data directory: %s", data_dir); @@ -6673,7 +6751,7 @@ static void test_decimal_bug() myquery(rc); stmt = mysql_simple_prepare(mysql,"select c1 from test_decimal_bug where c1= ?"); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type= MYSQL_TYPE_STRING; bind[0].buffer= (char *)data; @@ -6683,18 +6761,18 @@ static void test_decimal_bug() is_null= 0; rc = mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); strcpy(data, "8.0"); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); data[0]=0; rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n data: %s", data); assert(strcmp(data, "8.00")==0); @@ -6704,14 +6782,14 @@ static void test_decimal_bug() strcpy(data, "5.61"); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); data[0]=0; rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n data: %s", data); assert(strcmp(data, "5.61")==0); @@ -6721,21 +6799,21 @@ static void test_decimal_bug() is_null= 1; rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); assert(rc == MYSQL_NO_DATA); strcpy(data, "10.22"); is_null= 0; rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); data[0]=0; rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n data: %s", data); assert(strcmp(data, "10.22")==0); @@ -6769,10 +6847,10 @@ static void test_explain_bug() myquery(rc); stmt = mysql_simple_prepare(mysql, "explain test_explain"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert( 2 == my_process_stmt_result(stmt)); @@ -6805,10 +6883,10 @@ static void test_explain_bug() mysql_stmt_close(stmt); stmt = mysql_simple_prepare(mysql, "explain select id, name FROM test_explain"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert( 1 == my_process_stmt_result(stmt)); @@ -7060,7 +7138,7 @@ static void test_logs() length= (ulong)(strmov((char *)data,"INSERT INTO test_logs VALUES(?,?)") - data); stmt = mysql_prepare(mysql, data, length); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type= MYSQL_TYPE_SHORT; bind[0].buffer= (char *)&id; @@ -7077,61 +7155,61 @@ static void test_logs() length= (ulong)(strmov((char *)data,"MySQL - Open Source Database")- data); rc = mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); strmov((char *)data, "'"); length= 1; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); strmov((char *)data, "\""); length= 1; rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); length= (ulong)(strmov((char *)data, "my\'sql\'")-data); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); length= (ulong)(strmov((char *)data, "my\"sql\"")-data); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); length= (ulong)(strmov((char *)data,"INSERT INTO test_logs VALUES(20,'mysql')") - data); stmt = mysql_prepare(mysql, data, length); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); length= (ulong)(strmov((char *)data, "SELECT * FROM test_logs WHERE id=?") - data); stmt = mysql_prepare(mysql, data, length); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); bind[1].buffer_length= 255; rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n id : %d", id); fprintf(stdout, "\n name : %s(%ld)", data, length); @@ -7141,7 +7219,7 @@ static void test_logs() assert(strcmp(data,"MySQL - Open Source")==0); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n name : %s(%ld)", data, length); @@ -7149,7 +7227,7 @@ static void test_logs() assert(strcmp(data,"'")==0); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n name : %s(%ld)", data, length); @@ -7157,7 +7235,7 @@ static void test_logs() assert(strcmp(data,"\"")==0); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n name : %s(%ld)", data, length); @@ -7165,7 +7243,7 @@ static void test_logs() assert(strcmp(data,"my\'sql\'")==0); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n name : %s(%ld)", data, length); @@ -7216,29 +7294,29 @@ static void test_nstmts() length = (long)(strmov(query, "insert into test_nstmts values(?)")-query); stmt = mysql_prepare(mysql, query, length); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_param(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_close(stmt); } stmt = mysql_simple_prepare(mysql," select count(*) from test_nstmts"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); i = 0; rc = mysql_bind_result(stmt, bind); - mystmt(stmt, rc); + check_execute(stmt, rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "\n total rows: %d", i); assert( i == total_stmts); @@ -7275,7 +7353,7 @@ static void test_fetch_seek() myquery(rc); stmt = mysql_simple_prepare(mysql,"select * from test_seek"); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type= MYSQL_TYPE_LONG; bind[0].buffer= (char *)&c1; @@ -7294,16 +7372,16 @@ static void test_fetch_seek() bind[2].buffer_length= sizeof(c3); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n row 0: %ld,%s,%s", c1,c2,c3); @@ -7312,32 +7390,32 @@ static void test_fetch_seek() row = mysql_stmt_row_seek(stmt, row); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n row 2: %ld,%s,%s", c1,c2,c3); row = mysql_stmt_row_seek(stmt, row); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n row 2: %ld,%s,%s", c1,c2,c3); mysql_stmt_data_seek(stmt, 0); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n row 0: %ld,%s,%s", c1,c2,c3); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); assert(rc == MYSQL_NO_DATA); @@ -7370,7 +7448,7 @@ static void test_fetch_offset() myquery(rc); stmt = mysql_simple_prepare(mysql,"select * from test_column"); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type= MYSQL_TYPE_STRING; bind[0].buffer= (char *)data; @@ -7379,43 +7457,43 @@ static void test_fetch_offset() bind[0].length= &length; rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch_column(stmt,bind,0,0); - mystmt_r(stmt,rc); + check_execute_r(stmt,rc); rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); data[0]= '\0'; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 1: %s (%ld)", data, length); assert(strncmp(data,"abcd",4) == 0 && length == 10); rc = mysql_fetch_column(stmt,bind,0,5); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 1: %s (%ld)", data, length); assert(strncmp(data,"fg",2) == 0 && length == 10); rc = mysql_fetch_column(stmt,bind,0,9); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 0: %s (%ld)", data, length); assert(strncmp(data,"j",1) == 0 && length == 10); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); is_null= 0; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(is_null == 1); @@ -7423,7 +7501,7 @@ static void test_fetch_offset() assert(rc == MYSQL_NO_DATA); rc = mysql_fetch_column(stmt,bind,1,0); - mystmt_r(stmt,rc); + check_execute_r(stmt,rc); mysql_stmt_close(stmt); } @@ -7450,7 +7528,7 @@ static void test_fetch_column() myquery(rc); stmt = mysql_simple_prepare(mysql,"select * from test_column order by c2 desc"); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type= MYSQL_TYPE_LONG; bind[0].buffer= (char *)&bc1; @@ -7464,19 +7542,19 @@ static void test_fetch_column() bind[1].length= &bl2; rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch_column(stmt,bind,1,0); /* No-op at this point */ - mystmt_r(stmt,rc); + check_execute_r(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n row 0: %d,%s", bc1,bc2); @@ -7488,13 +7566,13 @@ static void test_fetch_column() bind[0].length= &l2; rc = mysql_fetch_column(stmt,bind,1,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 1: %s(%ld)", c2, l2); assert(strncmp(c2,"venu",4)==0 && l2 == 4); c2[0]= '\0'; l2= 0; rc = mysql_fetch_column(stmt,bind,1,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 1: %s(%ld)", c2, l2); assert(strcmp(c2,"venu")==0 && l2 == 4); @@ -7506,12 +7584,12 @@ static void test_fetch_column() bind[0].length= &l1; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 0: %d(%ld)", c1, l1); assert(c1 == 1 && l1 == 4); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n row 1: %d,%s", bc1,bc2); @@ -7523,13 +7601,13 @@ static void test_fetch_column() bind[0].length= &l2; rc = mysql_fetch_column(stmt,bind,1,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 1: %s(%ld)", c2, l2); assert(strncmp(c2,"mysq",4)==0 && l2 == 5); c2[0]= '\0'; l2= 0; rc = mysql_fetch_column(stmt,bind,1,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 1: %si(%ld)", c2, l2); assert(strcmp(c2,"mysql")==0 && l2 == 5); @@ -7541,7 +7619,7 @@ static void test_fetch_column() bind[0].length= &l1; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 0: %d(%ld)", c1, l1); assert(c1 == 2 && l1 == 4); @@ -7549,7 +7627,7 @@ static void test_fetch_column() assert(rc == MYSQL_NO_DATA); rc = mysql_fetch_column(stmt,bind,1,0); - mystmt_r(stmt,rc); + check_execute_r(stmt,rc); mysql_stmt_close(stmt); } @@ -7634,10 +7712,10 @@ static void test_mem_overun() assert(1 == my_process_result(mysql)); stmt = mysql_simple_prepare(mysql, "select * from t_mem_overun"); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); field_res = mysql_get_metadata(stmt); mytest(field_res); @@ -7646,10 +7724,10 @@ static void test_mem_overun() assert( 1000 == mysql_num_fields(field_res)); rc = mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); assert(rc == MYSQL_NO_DATA); @@ -7682,7 +7760,7 @@ static void test_free_result() myquery(rc); stmt = mysql_simple_prepare(mysql,"select * from test_free_result"); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type= MYSQL_TYPE_LONG; bind[0].buffer= (char *)&bc1; @@ -7691,13 +7769,13 @@ static void test_free_result() bind[0].length= &bl1; rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); c2[0]= '\0'; l2= 0; bind[0].buffer_type= MYSQL_TYPE_STRING; @@ -7707,12 +7785,12 @@ static void test_free_result() bind[0].length= &l2; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 0: %s(%ld)", c2, l2); assert(strncmp(c2,"1",1)==0 && l2 == 1); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); c1= 0, l2= 0; bind[0].buffer_type= MYSQL_TYPE_LONG; @@ -7722,7 +7800,7 @@ static void test_free_result() bind[0].length= &l2; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 0: %d(%ld)", c1, l2); assert(c1 == 2 && l2 == 4); @@ -7730,7 +7808,7 @@ static void test_free_result() myquery_r(rc); /* error should be, COMMANDS OUT OF SYNC */ rc = mysql_stmt_free_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_query(mysql,"drop table test_free_result"); myquery(rc); /* should be successful */ @@ -7761,7 +7839,7 @@ static void test_free_store_result() myquery(rc); stmt = mysql_simple_prepare(mysql,"select * from test_free_result"); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type= MYSQL_TYPE_LONG; bind[0].buffer= (char *)&bc1; @@ -7770,16 +7848,16 @@ static void test_free_store_result() bind[0].length= &bl1; rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_bind_result(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); c2[0]= '\0'; l2= 0; bind[0].buffer_type= MYSQL_TYPE_STRING; @@ -7789,12 +7867,12 @@ static void test_free_store_result() bind[0].length= &l2; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 1: %s(%ld)", c2, l2); assert(strncmp(c2,"1",1)==0 && l2 == 1); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); c1= 0, l2= 0; bind[0].buffer_type= MYSQL_TYPE_LONG; @@ -7804,12 +7882,12 @@ static void test_free_store_result() bind[0].length= &l2; rc = mysql_fetch_column(stmt,bind,0,0); - mystmt(stmt,rc); + check_execute(stmt,rc); fprintf(stdout, "\n col 0: %d(%ld)", c1, l2); assert(c1 == 2 && l2 == 4); rc = mysql_stmt_free_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_query(mysql,"drop table test_free_result"); myquery(rc); @@ -7848,7 +7926,7 @@ static void test_sqlmode() strcpy(query, "INSERT INTO test_piping VALUES(?||?)"); fprintf(stdout,"\n query: %s", query); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); fprintf(stdout,"\n total parameters: %ld", mysql_param_count(stmt)); @@ -7865,11 +7943,11 @@ static void test_sqlmode() bind[1].length= 0; rc = mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); strcpy(c1,"My"); strcpy(c2, "SQL"); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_stmt_close(stmt); verify_col_data("test_piping","name","MySQL"); @@ -7880,7 +7958,7 @@ static void test_sqlmode() strcpy(query, "SELECT connection_id ()"); fprintf(stdout,"\n query: %s", query); stmt = mysql_simple_prepare(mysql, query); - mystmt_init_r(stmt); + check_stmt_r(stmt); /* ANSI */ strcpy(query,"SET SQL_MODE=\"ANSI\""); @@ -7891,15 +7969,15 @@ static void test_sqlmode() strcpy(query, "INSERT INTO test_piping VALUES(?||?)"); fprintf(stdout,"\n query: %s", query); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); fprintf(stdout,"\n total parameters: %ld", mysql_param_count(stmt)); rc = mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); strcpy(c1,"My"); strcpy(c2, "SQL"); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_stmt_close(stmt); verify_col_data("test_piping","name","MySQL"); @@ -7908,13 +7986,13 @@ static void test_sqlmode() strcpy(query, "SELECT connection_id ()"); fprintf(stdout,"\n query: %s", query); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); assert(rc == MYSQL_NO_DATA); @@ -7931,13 +8009,13 @@ static void test_sqlmode() strcpy(query, "SELECT connection_id ()"); fprintf(stdout,"\n query: %s", query); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); assert(rc == MYSQL_NO_DATA); @@ -7972,7 +8050,7 @@ static void test_ts() myquery(rc); stmt = mysql_simple_prepare(mysql,"INSERT INTO test_ts VALUES(?,?,?),(?,?,?)"); - mystmt_init(stmt); + check_stmt(stmt); ts.year= 2003; ts.month= 07; @@ -8000,10 +8078,10 @@ static void test_ts() bind[5]= bind[4]= bind[3]; rc = mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); mysql_stmt_close(stmt); @@ -8012,13 +8090,13 @@ static void test_ts() verify_col_data("test_ts","c","2003-07-12 21:07:46"); stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_ts"); - mystmt_init(stmt); + check_stmt(stmt); prep_res = mysql_get_metadata(stmt); mytest(prep_res); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert( 2== my_process_stmt_result(stmt)); field_count= mysql_num_fields(prep_res); @@ -8035,13 +8113,13 @@ static void test_ts() fprintf(stdout,"\n %s", query); stmt = mysql_prepare(mysql, query, length); - mystmt_init(stmt); + check_stmt(stmt); rc = mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); while (mysql_fetch(stmt) == 0) row_count++; @@ -8083,7 +8161,7 @@ static void test_bug1500() myquery(rc); stmt= mysql_simple_prepare(mysql,"SELECT i FROM test_bg1500 WHERE i IN (?,?,?)"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,3); bind[0].buffer= (char *)int_data; @@ -8096,10 +8174,10 @@ static void test_bug1500() bind[2].buffer= (char *)(int_data + 2); rc= mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc= mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); @@ -8121,7 +8199,7 @@ static void test_bug1500() stmt= mysql_simple_prepare(mysql, "SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (?)"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); @@ -8133,10 +8211,10 @@ static void test_bug1500() bind[0].length= 0; rc= mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc= mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); @@ -8149,7 +8227,7 @@ static void test_bug1500() /* This should work too */ stmt= mysql_simple_prepare(mysql, "SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (CONCAT(?,'digger'))"); - mystmt_init(stmt); + check_stmt(stmt); verify_param_count(stmt,1); @@ -8161,10 +8239,10 @@ static void test_bug1500() bind[0].length= 0; rc= mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); rc= mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(1 == my_process_stmt_result(stmt)); @@ -8186,7 +8264,7 @@ static void test_bug1946() myquery(rc); stmt = mysql_simple_prepare(mysql, query); - mystmt_init(stmt); + check_stmt(stmt); rc= mysql_real_query(mysql, query, strlen(query)); assert(rc != 0); fprintf(stdout, "Got error (as expected):\n"); @@ -8246,11 +8324,11 @@ static void test_bug2247() myquery(rc); stmt= mysql_prepare(mysql, insert, strlen(insert)); - mystmt_init(stmt); + check_stmt(stmt); for (i= 0; i < NUM_ROWS; ++i) { rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); } exp_count= mysql_stmt_affected_rows(stmt); assert(exp_count == 1); @@ -8278,12 +8356,12 @@ static void test_bug2247() /* check that mysql_stmt_store_result modifies mysql_stmt_affected_rows */ stmt= mysql_prepare(mysql, select, strlen(select)); - mystmt_init(stmt); + check_stmt(stmt); rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); rc= mysql_stmt_store_result(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); exp_count= mysql_stmt_affected_rows(stmt); assert(exp_count == NUM_ROWS); @@ -8319,11 +8397,11 @@ static void test_subqueries() myquery(rc); stmt= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt); + check_stmt(stmt); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(5 == my_process_stmt_result(stmt)); } mysql_stmt_close(stmt); @@ -8368,9 +8446,9 @@ static void test_distinct() for (i= 0; i < 3; i++) { stmt= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt); + check_stmt(stmt); rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(5 == my_process_stmt_result(stmt)); mysql_stmt_close(stmt); } @@ -8399,23 +8477,23 @@ static void test_bug2248() myquery(rc); stmt= mysql_prepare(mysql, query1, strlen(query1)); - mystmt_init(stmt); + check_stmt(stmt); /* This should not hang */ rc= mysql_fetch(stmt); - mystmt_r(stmt,rc); + check_execute_r(stmt,rc); /* And this too */ rc= mysql_stmt_store_result(stmt); - mystmt_r(stmt,rc); + check_execute_r(stmt,rc); mysql_stmt_close(stmt); stmt= mysql_prepare(mysql, query2, strlen(query2)); - mystmt_init(stmt); + check_stmt(stmt); rc= mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); /* This too should not hang but should return proper error */ rc= mysql_fetch(stmt); @@ -8423,11 +8501,11 @@ static void test_bug2248() /* This too should not hang but should not bark */ rc= mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); /* This should return proper error */ rc= mysql_fetch(stmt); - mystmt_r(stmt,rc); + check_execute_r(stmt,rc); assert(rc==MYSQL_NO_DATA); mysql_stmt_close(stmt); @@ -8455,11 +8533,11 @@ static void test_subqueries_ref() myquery(rc); stmt= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt); + check_stmt(stmt); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(1 == my_process_stmt_result(stmt)); } mysql_stmt_close(stmt); @@ -8509,10 +8587,10 @@ static void test_union() stmt= mysql_simple_prepare(mysql, "SELECT t1.name FROM t1 UNION " "SELECT t2.name FROM t2"); - mystmt_init(stmt); + check_stmt(stmt); rc= mysql_stmt_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); assert(20 == my_process_stmt_result(stmt)); mysql_stmt_close(stmt); @@ -8538,13 +8616,13 @@ static void test_bug3117() myquery(rc); stmt = mysql_simple_prepare(mysql, "SELECT LAST_INSERT_ID()"); - mystmt_init(stmt); + check_stmt(stmt); rc= mysql_query(mysql, "INSERT INTO t1 VALUES (NULL)"); myquery(rc); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); buffer.buffer_type= MYSQL_TYPE_LONGLONG; buffer.buffer_length= sizeof(lii); @@ -8553,13 +8631,13 @@ static void test_bug3117() buffer.is_null= &is_null; rc= mysql_bind_result(stmt, &buffer); - mystmt(stmt,rc); + check_execute(stmt,rc); rc= mysql_stmt_store_result(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(is_null == 0 && lii == 1); fprintf(stdout, "\n\tLAST_INSERT_ID() = 1 ok\n"); @@ -8568,10 +8646,10 @@ static void test_bug3117() myquery(rc); rc = mysql_execute(stmt); - mystmt(stmt,rc); + check_execute(stmt,rc); rc = mysql_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(is_null == 0 && lii == 2); fprintf(stdout, "\tLAST_INSERT_ID() = 2 ok\n"); @@ -8619,11 +8697,11 @@ static void test_join() for (j= 0; j < 9; j++) { stmt= mysql_prepare(mysql, query[j], strlen(query[j])); - mystmt_init(stmt); + check_stmt(stmt); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(5 == my_process_stmt_result(stmt)); } mysql_stmt_close(stmt); @@ -8666,11 +8744,11 @@ static void test_selecttmp() myquery(rc); stmt= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt); + check_stmt(stmt); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(3 == my_process_stmt_result(stmt)); } mysql_stmt_close(stmt); @@ -8701,47 +8779,47 @@ static void test_create_drop() query= (char*)"create table t1 (a int)"; stmt_create= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_create); + check_stmt(stmt_create); query= (char*)"drop table t1"; stmt_drop= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_drop); + check_stmt(stmt_drop); query= (char*)"select a in (select a from t2) from t1"; stmt_select= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_select); + check_stmt(stmt_select); rc= mysql_query(mysql, "DROP TABLE t1"); myquery(rc); query= (char*)"create table t1 select a from t2"; stmt_create_select= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_create_select); + check_stmt(stmt_create_select); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt_create); - mystmt(stmt_create, rc); + check_execute(stmt_create, rc); fprintf(stdout, "created %i\n", i); rc= mysql_execute(stmt_select); - mystmt(stmt_select, rc); + check_execute(stmt_select, rc); assert(0 == my_process_stmt_result(stmt_select)); rc= mysql_execute(stmt_drop); - mystmt(stmt_drop, rc); + check_execute(stmt_drop, rc); fprintf(stdout, "droped %i\n", i); rc= mysql_execute(stmt_create_select); - mystmt(stmt_create, rc); + check_execute(stmt_create, rc); fprintf(stdout, "created select %i\n", i); rc= mysql_execute(stmt_select); - mystmt(stmt_select, rc); + check_execute(stmt_select, rc); assert(3 == my_process_stmt_result(stmt_select)); rc= mysql_execute(stmt_drop); - mystmt(stmt_drop, rc); + check_execute(stmt_drop, rc); fprintf(stdout, "droped %i\n", i); } @@ -8766,31 +8844,31 @@ static void test_rename() myquery(rc); stmt= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt); + check_stmt(stmt); rc= mysql_query(mysql,"create table t1 (a int)"); myquery(rc); rc= mysql_execute(stmt); - mystmt_r(stmt, rc); + check_execute_r(stmt, rc); fprintf(stdout, "rename without t3\n"); rc= mysql_query(mysql,"create table t3 (a int)"); myquery(rc); rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "rename with t3\n"); rc= mysql_execute(stmt); - mystmt_r(stmt, rc); + check_execute_r(stmt, rc); fprintf(stdout, "rename renamed\n"); rc= mysql_query(mysql,"rename table t2 to t1, t4 to t3"); myquery(rc); rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); fprintf(stdout, "rename reverted\n"); mysql_stmt_close(stmt); @@ -8815,19 +8893,19 @@ static void test_do_set() query= (char*)"do @var:=(1 in (select * from t1))"; stmt_do= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_do); + check_stmt(stmt_do); query= (char*)"set @var=(1 in (select * from t1))"; stmt_set= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_set); + check_stmt(stmt_set); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt_do); - mystmt(stmt_do, rc); + check_execute(stmt_do, rc); fprintf(stdout, "do %i\n", i); rc= mysql_execute(stmt_set); - mystmt(stmt_set, rc); + check_execute(stmt_set, rc); fprintf(stdout, "set %i\n", i); } @@ -8867,39 +8945,39 @@ static void test_multi() query= (char*)"delete t1,t2 from t1,t2 where t1.a=t2.a and t1.b=10"; stmt_delete= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_delete); + check_stmt(stmt_delete); query= (char*)"update t1,t2 set t1.b=10,t2.b=10 where t1.a=t2.a and t1.b=?"; stmt_update= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_update); + check_stmt(stmt_update); query= (char*)"select * from t1"; stmt_select1= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_select1); + check_stmt(stmt_select1); query= (char*)"select * from t2"; stmt_select2= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_select2); + check_stmt(stmt_select2); for(i= 0; i < 3; i++) { rc= mysql_bind_param(stmt_update, bind); - mystmt(stmt_update,rc); + check_execute(stmt_update,rc); rc= mysql_execute(stmt_update); - mystmt(stmt_update, rc); + check_execute(stmt_update, rc); fprintf(stdout, "update %ld\n", param); rc= mysql_execute(stmt_delete); - mystmt(stmt_delete, rc); + check_execute(stmt_delete, rc); fprintf(stdout, "delete %ld\n", param); rc= mysql_execute(stmt_select1); - mystmt(stmt_select1, rc); + check_execute(stmt_select1, rc); assert((uint)(3-param) == my_process_stmt_result(stmt_select1)); rc= mysql_execute(stmt_select2); - mystmt(stmt_select2, rc); + check_execute(stmt_select2, rc); assert((uint)(3-param) == my_process_stmt_result(stmt_select2)); param++; @@ -8936,20 +9014,20 @@ static void test_insert_select() query= (char*)"insert into t1 select a from t2"; stmt_insert= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_insert); + check_stmt(stmt_insert); query= (char*)"select * from t1"; stmt_select= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_select); + check_stmt(stmt_select); for(i= 0; i < 3; i++) { rc= mysql_execute(stmt_insert); - mystmt(stmt_insert, rc); + check_execute(stmt_insert, rc); fprintf(stdout, "insert %u\n", i); rc= mysql_execute(stmt_select); - mystmt(stmt_select, rc); + check_execute(stmt_select, rc); assert((i+1) == my_process_stmt_result(stmt_select)); } @@ -8982,7 +9060,7 @@ static void test_bind_nagative() query= (char*)"INSERT INTO t1 VALUES (?)"; stmt_insert= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt_insert); + check_stmt(stmt_insert); /* bind parameters */ bind[0].buffer_type = FIELD_TYPE_LONG; @@ -8991,11 +9069,11 @@ static void test_bind_nagative() bind[0].is_null = (char*)&my_null; rc= mysql_bind_param(stmt_insert, bind); - mystmt(stmt_insert,rc); + check_execute(stmt_insert,rc); my_val = -1; rc= mysql_execute(stmt_insert); - mystmt(stmt_insert, rc); + check_execute(stmt_insert, rc); mysql_stmt_close(stmt_insert); rc= mysql_query(mysql,"drop table t1"); @@ -9026,7 +9104,7 @@ TYPE=InnoDB DEFAULT CHARSET=utf8"); myquery(rc); stmt= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt); + check_stmt(stmt); bind[0].buffer_type = FIELD_TYPE_LONG; bind[0].buffer = (char *)&my_val; @@ -9034,12 +9112,12 @@ TYPE=InnoDB DEFAULT CHARSET=utf8"); bind[0].is_null = (char*)&my_null; my_val= 1; rc= mysql_bind_param(stmt, bind); - mystmt(stmt,rc); + check_execute(stmt,rc); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(1 == my_process_stmt_result(stmt)); } mysql_stmt_close(stmt); @@ -9086,12 +9164,12 @@ static void test_xjoin() myquery(rc); stmt= mysql_prepare(mysql, query, strlen(query)); - mystmt_init(stmt); + check_stmt(stmt); for (i= 0; i < 3; i++) { rc= mysql_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(1 == my_process_stmt_result(stmt)); } mysql_stmt_close(stmt); @@ -9185,13 +9263,12 @@ static void test_bug3035() bind_array[7].is_unsigned= 1; stmt= mysql_stmt_init(mysql); - - mystmt_init(stmt); + check_stmt(stmt); stmt_text= "INSERT INTO t1 (i8, ui8, i16, ui16, i32, ui32, i64, ui64) " "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text)); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_bind_param(stmt, bind_array); @@ -9205,7 +9282,7 @@ static void test_bug3035() uint64_val= uint64_min; rc= mysql_stmt_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); int8_val= int8_max; uint8_val= uint8_max; @@ -9217,21 +9294,21 @@ static void test_bug3035() uint64_val= uint64_max; mysql_stmt_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); stmt_text= "SELECT i8, ui8, i16, ui16, i32, ui32, i64, ui64 " "FROM t1 ORDER BY id ASC"; mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text)); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_execute(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); mysql_stmt_bind_result(stmt, bind_array); rc= mysql_stmt_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(int8_val == int8_min); assert(uint8_val == uint8_min); @@ -9243,7 +9320,7 @@ static void test_bug3035() assert(uint64_val == uint64_min); rc= mysql_stmt_fetch(stmt); - mystmt(stmt, rc); + check_execute(stmt, rc); assert(int8_val == int8_max); assert(uint8_val == uint8_max); @@ -9276,6 +9353,8 @@ static struct my_option client_test_long_options[] = 0, 0, 0, 0, 0}, {"database", 'D', "Database to use", (char **) &opt_db, (char **) &opt_db, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"debug", '#', "Output debug log", (gptr*) &default_dbug_option, + (gptr*) &default_dbug_option, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, {"host", 'h', "Connect to host", (char **) &opt_host, (char **) &opt_host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"password", 'p', @@ -9329,6 +9408,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), char *argument) { switch (optid) { + case '#': + DBUG_PUSH(argument ? argument : default_dbug_option); + break; case 'p': if (argument) {