Commit c5dcb2cc authored by sasha@mysql.sashanet.com's avatar sasha@mysql.sashanet.com
Browse files

Merge work:/home/bk/mysql-4.0

into mysql.sashanet.com:/reiser-data/mysql-4.0
parents 697978b5 6980a24e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ use test;
drop table if exists t1,t3;
create table t1 (word char(20) not null);
load data infile '../../std_data/words.dat' into table t1;
load data local infile '/home/sasha/bk/mysql-4.0/mysql-test/std_data/words.dat' into table t1;
load data local infile '$MYSQL_TEST_DIR/std_data/words.dat' into table t1;
select * from t1;
word
Aarhus
+42 −22
Original line number Diff line number Diff line
@@ -556,6 +556,8 @@ Log_event* Log_event::read_log_event(const char* buf, int event_len,
    ev  = new Query_log_event(buf, event_len, old_format);
    break;
  case LOAD_EVENT:
    ev = new Create_file_log_event(buf, event_len, old_format);
    break;
  case NEW_LOAD_EVENT:
    ev = new Load_log_event(buf, event_len, old_format);
    break;
@@ -566,7 +568,7 @@ Log_event* Log_event::read_log_event(const char* buf, int event_len,
    ev = new Slave_log_event(buf, event_len);
    break;
  case CREATE_FILE_EVENT:
    ev = new Create_file_log_event(buf, event_len);
    ev = new Create_file_log_event(buf, event_len, old_format);
    break;
  case APPEND_BLOCK_EVENT:
    ev = new Append_block_log_event(buf, event_len);
@@ -959,6 +961,12 @@ char* sql_ex_info::init(char* buf,char* buf_end,bool use_new_format)
  if (use_new_format)
  {
    empty_flags=0;
    /* the code below assumes that buf will not disappear from
       under our feet during the lifetime of the event. This assumption
       holds true in the slave thread if the log is in new format, but is not
       the case when we have old format because we will be reusing net buffer
       to read the actual file before we write out the Create_file event
    */
    if (read_str(buf, buf_end, field_term, field_term_len) ||
	read_str(buf, buf_end, enclosed,   enclosed_len) ||
	read_str(buf, buf_end, line_term,  line_term_len) ||
@@ -970,11 +978,11 @@ char* sql_ex_info::init(char* buf,char* buf_end,bool use_new_format)
  else
  {
    field_term_len= enclosed_len= line_term_len= line_start_len= escaped_len=1;
    *field_term=*buf++;
    *enclosed=	*buf++;
    *line_term= *buf++;
    *line_start=*buf++;
    *escaped=	*buf++;
    field_term = buf++;
    enclosed=	buf++;
    line_term= buf++;
    line_start= buf++;
    escaped=   buf++;
    opt_flags = *buf++;
    empty_flags=*buf++;
    if (empty_flags & FIELD_TERM_EMPTY)
@@ -1095,7 +1103,9 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len,
  db_len = (uint)data_head[L_DB_LEN_OFFSET];
  num_fields = uint4korr(data_head + L_NUM_FIELDS_OFFSET);
	  
  int body_offset = get_data_body_offset();
  int body_offset = (buf[EVENT_TYPE_OFFSET] == LOAD_EVENT) ?
    LOAD_HEADER_LEN + OLD_HEADER_LEN : get_data_body_offset();
  
  if ((int) event_len < body_offset)
    return 1;
  //sql_ex.init() on success returns the pointer to the first byte after
@@ -1117,7 +1127,6 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len,
  table_name  = fields + field_block_len;
  db = table_name + table_name_len + 1;
  fname = db + db_len + 1;
  int type_code = get_type_code();
  fname_len = strlen(fname);
  // null termination is accomplished by the caller doing buf[event_len]=0
  return 0;
@@ -1367,12 +1376,15 @@ int Create_file_log_event::write_base(IO_CACHE* file)
  return res;
}

Create_file_log_event::Create_file_log_event(const char* buf, int len):
  Load_log_event(buf,0,0),fake_base(0),block(0)
Create_file_log_event::Create_file_log_event(const char* buf, int len,
					     bool old_format):
  Load_log_event(buf,0,old_format),fake_base(0),block(0),inited_from_old(0)
{
  int block_offset;
  if (copy_log_event(buf,len,0))
  if (copy_log_event(buf,len,old_format))
    return;
  if (!old_format)
  {
    file_id = uint4korr(buf + LOG_EVENT_HEADER_LEN +
			+ LOAD_HEADER_LEN + CF_FILE_ID_OFFSET);
    block_offset = LOG_EVENT_HEADER_LEN + Load_log_event::get_data_size() +
@@ -1382,6 +1394,12 @@ Create_file_log_event::Create_file_log_event(const char* buf, int len):
    block = (char*)buf + block_offset;
    block_len = len - block_offset;
  }
  else
  {
    sql_ex.force_new_format();
    inited_from_old = 1;
  }
}


#ifdef MYSQL_CLIENT
@@ -1568,6 +1586,7 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli)
  int expected_error,actual_error = 0;
  init_sql_alloc(&thd->mem_root, 8192,0);
  thd->db = rewrite_db((char*)db);
  DBUG_ASSERT(q_len == strlen(query));
  if (db_ok(thd->db, replicate_do_db, replicate_ignore_db))
  {
    thd->query = (char*)query;
@@ -1738,12 +1757,13 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli)
}

int Start_log_event::exec_event(struct st_relay_log_info* rli)
{
  if (!rli->mi->old_format)
{
  close_temporary_tables(thd);
  // if we have old format, load_tmpdir is cleaned up by the I/O thread
  // TODO: cleanup_load_tmpdir() needs to remove only the files associated
  // with the server id that has just started
  if (!rli->mi->old_format)
    cleanup_load_tmpdir();
  }
  return Log_event::exec_event(rli);
}

+7 −4
Original line number Diff line number Diff line
@@ -64,6 +64,8 @@ struct old_sql_ex
    char empty_flags;
  };

#define NUM_LOAD_DELIM_STRS 5


struct sql_ex_info
  {
@@ -153,8 +155,8 @@ struct sql_ex_info
#define L_THREAD_ID_OFFSET   0
#define L_EXEC_TIME_OFFSET   4
#define L_SKIP_LINES_OFFSET  8
#define L_DB_LEN_OFFSET      12
#define L_TBL_LEN_OFFSET     13
#define L_TBL_LEN_OFFSET     12
#define L_DB_LEN_OFFSET      13
#define L_NUM_FIELDS_OFFSET  14
#define L_SQL_EX_OFFSET      18
#define L_DATA_OFFSET    LOAD_HEADER_LEN
@@ -570,6 +572,7 @@ class Create_file_log_event: public Load_log_event
  char* block;
  uint block_len;
  uint file_id;
  bool inited_from_old;
#ifndef MYSQL_CLIENT
  Create_file_log_event(THD* thd, sql_exchange* ex, const char* db_arg,
			const char* table_name_arg,
@@ -578,7 +581,7 @@ class Create_file_log_event: public Load_log_event
			char* block_arg, uint block_len_arg);
#endif  
  
  Create_file_log_event(const char* buf, int event_len);
  Create_file_log_event(const char* buf, int event_len, bool old_format);
  ~Create_file_log_event()
  {
  }
@@ -591,7 +594,7 @@ class Create_file_log_event: public Load_log_event
			  4 + 1 + block_len;}
  int get_data_body_offset() { return fake_base ? LOAD_EVENT_OVERHEAD:
    LOAD_EVENT_OVERHEAD + CREATE_FILE_HEADER_LEN; }
  bool is_valid() { return block != 0; }
  bool is_valid() { return inited_from_old || block != 0; }
  int write_data_header(IO_CACHE* file);
  int write_data_body(IO_CACHE* file);
  int write_base(IO_CACHE* file); // cut out Create_file extentions and
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ char *sql_strmake(const char *str,uint len);
gptr sql_memdup(const void * ptr,unsigned size);
void sql_element_free(void *ptr);
void kill_one_thread(THD *thd, ulong id);
int net_request_file(NET* net, const char* fname);
char* query_table_status(THD *thd,const char *db,const char *table_name);

#define x_free(A)	{ my_free((gptr) (A),MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR)); }
+11 −0
Original line number Diff line number Diff line
@@ -814,3 +814,14 @@ my_net_read(NET *net)
#endif /* HAVE_COMPRESS */
  return len;
}

int net_request_file(NET* net, const char* fname)
{
  char tmp [FN_REFLEN+1],*end;
  DBUG_ENTER("net_request_file");
  tmp[0] = (char) 251;				/* NULL_LENGTH */
  end=strnmov(tmp+1,fname,sizeof(tmp)-2);
  DBUG_RETURN(my_net_write(net,tmp,(uint) (end-tmp)) ||
     net_flush(net));
}
Loading