Commit db7e7cbe authored by knielsen@mysql.com's avatar knielsen@mysql.com

Merge bk-internal:/home/bk/mysql-5.0

into  mysql.com:/usr/local/mysql/tmpbuild
parents 246690cb 4b913614
...@@ -165,7 +165,6 @@ static my_bool sp_protocol= 0, sp_protocol_enabled= 0; ...@@ -165,7 +165,6 @@ static my_bool sp_protocol= 0, sp_protocol_enabled= 0;
static my_bool view_protocol= 0, view_protocol_enabled= 0; static my_bool view_protocol= 0, view_protocol_enabled= 0;
static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0; static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0;
static int parsing_disabled= 0; static int parsing_disabled= 0;
static uint start_lineno, *lineno;
const char *manager_user="root",*manager_host=0; const char *manager_user="root",*manager_host=0;
char *manager_pass=0; char *manager_pass=0;
int manager_port=MYSQL_MANAGER_PORT; int manager_port=MYSQL_MANAGER_PORT;
...@@ -180,13 +179,14 @@ typedef struct ...@@ -180,13 +179,14 @@ typedef struct
{ {
FILE* file; FILE* file;
const char *file_name; const char *file_name;
uint lineno; /* Current line in file */
} test_file; } test_file;
static test_file file_stack[MAX_INCLUDE_DEPTH]; static test_file file_stack[MAX_INCLUDE_DEPTH];
static test_file* cur_file; static test_file* cur_file;
static test_file* file_stack_end; static test_file* file_stack_end;
uint start_lineno; /* Start line of query */
static uint lineno_stack[MAX_INCLUDE_DEPTH];
static char TMPDIR[FN_REFLEN]; static char TMPDIR[FN_REFLEN];
static char delimiter[MAX_DELIMITER]= DEFAULT_DELIMITER; static char delimiter[MAX_DELIMITER]= DEFAULT_DELIMITER;
static uint delimiter_length= 1; static uint delimiter_length= 1;
...@@ -662,7 +662,7 @@ static void verbose_msg(const char *fmt, ...) ...@@ -662,7 +662,7 @@ static void verbose_msg(const char *fmt, ...)
va_start(args, fmt); va_start(args, fmt);
fprintf(stderr, "mysqltest: "); fprintf(stderr, "mysqltest: ");
if (start_lineno > 0) if (start_lineno != 0)
fprintf(stderr, "At line %u: ", start_lineno); fprintf(stderr, "At line %u: ", start_lineno);
vfprintf(stderr, fmt, args); vfprintf(stderr, fmt, args);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
...@@ -900,7 +900,7 @@ int open_file(const char *name) ...@@ -900,7 +900,7 @@ int open_file(const char *name)
die("Could not open file %s", buff); die("Could not open file %s", buff);
} }
cur_file->file_name= my_strdup(buff, MYF(MY_FAE)); cur_file->file_name= my_strdup(buff, MYF(MY_FAE));
*++lineno=1; cur_file->lineno=1;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
...@@ -1205,6 +1205,7 @@ int var_query_set(VAR* var, const char *query, const char** query_end) ...@@ -1205,6 +1205,7 @@ int var_query_set(VAR* var, const char *query, const char** query_end)
{ {
if (row[0]) if (row[0])
{ {
#ifdef NOT_YET
/* Add to <var_name>_<col_name> */ /* Add to <var_name>_<col_name> */
uint j; uint j;
char var_col_name[MAX_VAR_NAME]; char var_col_name[MAX_VAR_NAME];
...@@ -1218,7 +1219,7 @@ int var_query_set(VAR* var, const char *query, const char** query_end) ...@@ -1218,7 +1219,7 @@ int var_query_set(VAR* var, const char *query, const char** query_end)
} }
var_set(var_col_name, var_col_name + length, var_set(var_col_name, var_col_name + length,
row[i], row[i] + lengths[i]); row[i], row[i] + lengths[i]);
#endif
/* Add column to tab separated string */ /* Add column to tab separated string */
dynstr_append_mem(&result, row[i], lengths[i]); dynstr_append_mem(&result, row[i], lengths[i]);
} }
...@@ -2496,7 +2497,7 @@ int read_line(char *buf, int size) ...@@ -2496,7 +2497,7 @@ int read_line(char *buf, int size)
DBUG_ENTER("read_line"); DBUG_ENTER("read_line");
LINT_INIT(quote); LINT_INIT(quote);
start_lineno= *lineno; start_lineno= cur_file->lineno;
for (; p < buf_end ;) for (; p < buf_end ;)
{ {
no_save= 0; no_save= 0;
...@@ -2511,28 +2512,25 @@ int read_line(char *buf, int size) ...@@ -2511,28 +2512,25 @@ int read_line(char *buf, int size)
} }
my_free((gptr)cur_file->file_name, MYF(MY_ALLOW_ZERO_PTR)); my_free((gptr)cur_file->file_name, MYF(MY_ALLOW_ZERO_PTR));
cur_file->file_name= 0; cur_file->file_name= 0;
lineno--;
start_lineno= *lineno;
if (cur_file == file_stack) if (cur_file == file_stack)
{ {
/* We're back at the first file, check if /* We're back at the first file, check if
all { have matching } all { have matching }
*/ */
if (cur_block != block_stack) if (cur_block != block_stack)
{
start_lineno= *(lineno+1);
die("Missing end of block"); die("Missing end of block");
}
DBUG_PRINT("info", ("end of file")); DBUG_PRINT("info", ("end of file"));
DBUG_RETURN(1); DBUG_RETURN(1);
} }
cur_file--; cur_file--;
start_lineno= cur_file->lineno;
continue; continue;
} }
/* Line counting is independent of state */ /* Line counting is independent of state */
if (c == '\n') if (c == '\n')
(*lineno)++; cur_file->lineno++;
switch(state) { switch(state) {
case R_NORMAL: case R_NORMAL:
...@@ -2561,14 +2559,15 @@ int read_line(char *buf, int size) ...@@ -2561,14 +2559,15 @@ int read_line(char *buf, int size)
break; break;
case R_LINE_START: case R_LINE_START:
/* Only accept start of comment if this is the first line in query */ /* Only accept start of comment if this is the first line in query */
if ((*lineno == start_lineno) && (c == '#' || c == '-' || parsing_disabled)) if ((cur_file->lineno == start_lineno) &&
(c == '#' || c == '-' || parsing_disabled))
{ {
state = R_COMMENT; state = R_COMMENT;
} }
else if (my_isspace(charset_info, c)) else if (my_isspace(charset_info, c))
{ {
if (c == '\n') if (c == '\n')
start_lineno= *lineno; /* Query hasn't started yet */ start_lineno= cur_file->lineno; /* Query hasn't started yet */
no_save= 1; no_save= 1;
} }
else if (c == '}') else if (c == '}')
...@@ -2670,7 +2669,6 @@ int read_line(char *buf, int size) ...@@ -2670,7 +2669,6 @@ int read_line(char *buf, int size)
The advantage with this approach is to be able to execute commands The advantage with this approach is to be able to execute commands
terminated by new line '\n' regardless how many "delimiter" it contain. terminated by new line '\n' regardless how many "delimiter" it contain.
If query starts with @<file_name> this will specify a file to ....
*/ */
static char read_query_buf[MAX_QUERY]; static char read_query_buf[MAX_QUERY];
...@@ -2894,6 +2892,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -2894,6 +2892,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(0)))) my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(0))))
die("Could not open %s: errno = %d", buff, errno); die("Could not open %s: errno = %d", buff, errno);
cur_file->file_name= my_strdup(buff, MYF(MY_FAE)); cur_file->file_name= my_strdup(buff, MYF(MY_FAE));
cur_file->lineno= 1;
break; break;
} }
case 'm': case 'm':
...@@ -4281,25 +4280,30 @@ int main(int argc, char **argv) ...@@ -4281,25 +4280,30 @@ int main(int argc, char **argv)
save_file[0]=0; save_file[0]=0;
TMPDIR[0]=0; TMPDIR[0]=0;
/* Init cons */
memset(cons, 0, sizeof(cons)); memset(cons, 0, sizeof(cons));
cons_end = cons + MAX_CONS; cons_end = cons + MAX_CONS;
next_con = cons + 1; next_con = cons + 1;
cur_con = cons; cur_con = cons;
/* Init file stack */
memset(file_stack, 0, sizeof(file_stack)); memset(file_stack, 0, sizeof(file_stack));
memset(&master_pos, 0, sizeof(master_pos));
file_stack_end= file_stack + MAX_INCLUDE_DEPTH - 1; file_stack_end= file_stack + MAX_INCLUDE_DEPTH - 1;
cur_file= file_stack; cur_file= file_stack;
lineno = lineno_stack;
my_init_dynamic_array(&q_lines, sizeof(struct st_query*), INIT_Q_LINES,
INIT_Q_LINES);
/* Init block stack */
memset(block_stack, 0, sizeof(block_stack)); memset(block_stack, 0, sizeof(block_stack));
block_stack_end= block_stack + BLOCK_STACK_DEPTH - 1; block_stack_end= block_stack + BLOCK_STACK_DEPTH - 1;
cur_block= block_stack; cur_block= block_stack;
cur_block->ok= TRUE; /* Outer block should always be executed */ cur_block->ok= TRUE; /* Outer block should always be executed */
cur_block->cmd= cmd_none; cur_block->cmd= cmd_none;
my_init_dynamic_array(&q_lines, sizeof(struct st_query*), INIT_Q_LINES,
INIT_Q_LINES);
memset(&master_pos, 0, sizeof(master_pos));
init_dynamic_string(&ds_res, "", 0, 65536); init_dynamic_string(&ds_res, "", 0, 65536);
parse_args(argc, argv); parse_args(argc, argv);
...@@ -4312,8 +4316,8 @@ int main(int argc, char **argv) ...@@ -4312,8 +4316,8 @@ int main(int argc, char **argv)
{ {
cur_file->file= stdin; cur_file->file= stdin;
cur_file->file_name= my_strdup("<stdin>", MYF(MY_WME)); cur_file->file_name= my_strdup("<stdin>", MYF(MY_WME));
cur_file->lineno= 1;
} }
*lineno=1;
#ifndef EMBEDDED_LIBRARY #ifndef EMBEDDED_LIBRARY
if (manager_host) if (manager_host)
init_manager(); init_manager();
...@@ -4608,6 +4612,8 @@ int main(int argc, char **argv) ...@@ -4608,6 +4612,8 @@ int main(int argc, char **argv)
parser.current_line += current_line_inc; parser.current_line += current_line_inc;
} }
start_lineno= 0;
/* /*
The whole test has been executed _sucessfully_ The whole test has been executed _sucessfully_
Time to compare result or save it to record file Time to compare result or save it to record file
......
...@@ -149,7 +149,7 @@ hello ...@@ -149,7 +149,7 @@ hello
mysqltest: At line 1: End of line junk detected: "6" mysqltest: At line 1: End of line junk detected: "6"
mysqltest: At line 1: End of line junk detected: "6" mysqltest: At line 1: End of line junk detected: "6"
mysqltest: At line 1: Missing delimiter mysqltest: At line 1: Missing delimiter
mysqltest: End of line junk detected: "sleep 7 mysqltest: At line 1: End of line junk detected: "sleep 7
# Another comment # Another comment
" "
mysqltest: At line 1: Extra delimiter ";" found mysqltest: At line 1: Extra delimiter ";" found
...@@ -222,25 +222,6 @@ mysqltest: At line 1: Missing arguments to let ...@@ -222,25 +222,6 @@ mysqltest: At line 1: Missing arguments to let
mysqltest: At line 1: Missing variable name in let mysqltest: At line 1: Missing variable name in let
mysqltest: At line 1: Variable name in =hi does not start with '$' mysqltest: At line 1: Variable name in =hi does not start with '$'
mysqltest: At line 1: Missing assignment operator in let mysqltest: At line 1: Missing assignment operator in let
var1
hi 1 hi there
hi
1
hi there
var2
2
var2 again
2
2
var3 two columns with same name
1 2 3
2
2
3
mysqltest: At line 1: Missing file name in source mysqltest: At line 1: Missing file name in source
mysqltest: At line 1: Could not open file ./non_existingFile mysqltest: At line 1: Could not open file ./non_existingFile
mysqltest: In included file "./var/tmp/recursive.sql": At line 1: Source directives are nesting too deep mysqltest: In included file "./var/tmp/recursive.sql": At line 1: Source directives are nesting too deep
......
...@@ -543,7 +543,7 @@ echo $novar1; ...@@ -543,7 +543,7 @@ echo $novar1;
# Test to assign let from query # Test to assign let from query
# let $<var_name>=`<query>`; # let $<var_name>=`<query>`;
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
--disable_parsing
echo var1; echo var1;
let $var1= `select "hi" as "Col", 1 as "Column1", "hi there" as Col3`; let $var1= `select "hi" as "Col", 1 as "Column1", "hi there" as Col3`;
echo $var1; echo $var1;
...@@ -574,7 +574,7 @@ echo $var3_var3; ...@@ -574,7 +574,7 @@ echo $var3_var3;
#echo failing query in let; #echo failing query in let;
#--error 1 #--error 1
#--exec echo "let $var2= `failing query;`" | $MYSQL_TEST 2>&1 #--exec echo "let $var2= `failing query;`" | $MYSQL_TEST 2>&1
--enable_parsing
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# Test source command # Test source command
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment