diff options
-rw-r--r-- | client/mysql.cc | 6 | ||||
-rw-r--r-- | client/mysqlbinlog.cc | 35 | ||||
-rw-r--r-- | extra/comp_err.c | 2 | ||||
-rw-r--r-- | heap/hp_test2.c | 4 | ||||
-rw-r--r-- | include/my_global.h | 10 | ||||
-rw-r--r-- | isam/test2.c | 4 | ||||
-rw-r--r-- | myisam/mi_test2.c | 4 | ||||
-rw-r--r-- | mysql-test/r/distinct.result | 10 | ||||
-rw-r--r-- | mysql-test/r/order_by.result | 14 | ||||
-rw-r--r-- | mysql-test/r/rpl000009.result | 12 | ||||
-rw-r--r-- | mysql-test/t/rpl000009.test | 18 | ||||
-rw-r--r-- | mysys/default.c | 8 | ||||
-rw-r--r-- | sql/des_key_file.cc | 8 | ||||
-rw-r--r-- | sql/item_strfunc.cc | 34 | ||||
-rw-r--r-- | sql/mysql_priv.h | 4 | ||||
-rw-r--r-- | sql/sql_select.cc | 55 | ||||
-rw-r--r-- | support-files/mysql.server.sh | 2 |
17 files changed, 134 insertions, 96 deletions
diff --git a/client/mysql.cc b/client/mysql.cc index 639e5f450ad..2fa131b854a 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -40,7 +40,7 @@ #include <signal.h> #include <violite.h> -const char *VER= "12.21"; +const char *VER= "12.22"; /* Don't try to make a nice table if the data is too big */ #define MAX_COLUMN_LENGTH 1024 @@ -801,7 +801,9 @@ static int read_lines(bool execute_commands) char *prompt= (char*) (glob_buffer.is_empty() ? construct_prompt() : !in_string ? " -> " : in_string == '\'' ? - " '> " : " \"> "); + " '> " : (in_string == '`' ? + " `> " : + " \"> ")); if (opt_outfile && glob_buffer.is_empty()) fflush(OUTFILE); diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index ac43130b8bc..6eab790857d 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -21,6 +21,7 @@ #include <assert.h> #include "log_event.h" #include "include/my_sys.h" +#include "unistd.h" #define BIN_LOG_HEADER_SIZE 4 #define PROBE_HEADER_LEN (EVENT_LEN_OFFSET+4) @@ -81,9 +82,9 @@ class Load_log_processor bname--; uint blen= ce->fname_len - (bname-ce->fname); - uint full_len= target_dir_name_len + blen; + uint full_len= target_dir_name_len + blen + 9 + 9 + 1; char *tmp; - if (!(tmp= my_malloc(full_len + 9 + 1,MYF(MY_WME))) || + if (!(tmp= my_malloc(full_len,MYF(MY_WME))) || set_dynamic(&file_names,(gptr)&ce,ce->file_id)) { die("Could not construct local filename %s%s",target_dir_name,bname); @@ -96,6 +97,21 @@ class Load_log_processor memcpy(ptr,bname,blen); ptr+= blen; sprintf(ptr,"-%08x",ce->file_id); + ptr+= 9; + + uint version= 0; + for (;;) + { + sprintf(ptr,"-%08x",version); + if (access(tmp,F_OK)) + break; + version++; + if (version>UINT_MAX) + { + die("Could not construct local filename %s%s",target_dir_name,bname); + return 0; + } + } ce->set_fname_outside_temp_buf(tmp,full_len); @@ -169,6 +185,8 @@ public: } Create_file_log_event *grab_event(uint file_id) { + if (file_id >= file_names.elements) + return 0; Create_file_log_event **ptr= (Create_file_log_event**)file_names.buffer + file_id; Create_file_log_event *res= *ptr; @@ -182,8 +200,12 @@ public: } void process(Append_block_log_event *ae) { - if (ae->file_id >= file_names.elements) - { + Create_file_log_event* ce= (ae->file_id < file_names.elements) ? + *((Create_file_log_event**)file_names.buffer + ae->file_id) : 0; + + if (ce) + append_to_file(ce->fname,O_APPEND|O_BINARY|O_WRONLY,ae->block,ae->block_len); + else /* There is no Create_file event (a bad binlog or a big --position). Assuming it's a big --position, we just do nothing and @@ -191,11 +213,6 @@ public: */ fprintf(stderr,"Warning: ignoring Append_block as there is no \ Create_file event for file_id: %u\n",ae->file_id); - return; - } - Create_file_log_event* ce= - *((Create_file_log_event**)file_names.buffer + ae->file_id); - append_to_file(ce->fname,O_APPEND|O_BINARY|O_WRONLY,ae->block,ae->block_len); } }; diff --git a/extra/comp_err.c b/extra/comp_err.c index 8e9c6fc0f0e..bd7e6231908 100644 --- a/extra/comp_err.c +++ b/extra/comp_err.c @@ -109,7 +109,7 @@ int main(int argc,char *argv[]) if (to) fclose(to); if (error) - fprintf(stderr,"Can't uppdate messagefile %s, errno: %d\n",*argv,errno); + fprintf(stderr,"Can't update messagefile %s, errno: %d\n",*argv,errno); exit(error); return(0); diff --git a/heap/hp_test2.c b/heap/hp_test2.c index e2570893519..36016797447 100644 --- a/heap/hp_test2.c +++ b/heap/hp_test2.c @@ -237,12 +237,12 @@ int main(int argc, char *argv[]) { if (my_errno != HA_ERR_FOUND_DUPP_KEY || key3[n3] == 0) { - printf("error: %d; can't uppdate:\nFrom: \"%s\"\nTo: \"%s\"\n", + printf("error: %d; can't update:\nFrom: \"%s\"\nTo: \"%s\"\n", my_errno,record,record2); goto err; } if (verbose) - printf("Double key when tryed to uppdate:\nFrom: \"%s\"\nTo: \"%s\"\n",record,record2); + printf("Double key when tried to update:\nFrom: \"%s\"\nTo: \"%s\"\n",record,record2); } else { diff --git a/include/my_global.h b/include/my_global.h index 9d08977a7cd..59e0c43f18d 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -1105,4 +1105,14 @@ typedef union { #define statistic_add(V,C,L) (V)+=(C) #endif +#ifdef HAVE_OPENSSL +#include <openssl/opensslv.h> +#if OPENSSL_VERSION_NUMBER < 0x0090700f +#define DES_cblock des_cblock +#define DES_key_schedule des_key_schedule +#define DES_set_key_unchecked(k,ks) des_set_key_unchecked((k),*(ks)) +#define DES_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e) des_ede3_cbc_encrypt((i),(o),(l),*(k1),*(k2),*(k3),(iv),(e)) +#endif +#endif + #endif /* my_global_h */ diff --git a/isam/test2.c b/isam/test2.c index c8f97ccdefa..5b09cc8b716 100644 --- a/isam/test2.c +++ b/isam/test2.c @@ -265,12 +265,12 @@ int main(int argc, char *argv[]) { if (my_errno != HA_ERR_FOUND_DUPP_KEY || key3[n3] == 0) { - printf("error: %d; can't uppdate:\nFrom: \"%s\"\nTo: \"%s\"\n", + printf("error: %d; can't update:\nFrom: \"%s\"\nTo: \"%s\"\n", my_errno,read_record,record2); goto err; } if (verbose) - printf("Double key when tryed to uppdate:\nFrom: \"%s\"\nTo: \"%s\"\n",record,record2); + printf("Double key when tried to update:\nFrom: \"%s\"\nTo: \"%s\"\n",record,record2); } else { diff --git a/myisam/mi_test2.c b/myisam/mi_test2.c index e3a2ecfbb1f..2a658ca2054 100644 --- a/myisam/mi_test2.c +++ b/myisam/mi_test2.c @@ -329,12 +329,12 @@ int main(int argc, char *argv[]) { if (my_errno != HA_ERR_FOUND_DUPP_KEY || key3[n3] == 0) { - printf("error: %d; can't uppdate:\nFrom: \"%s\"\nTo: \"%s\"\n", + printf("error: %d; can't update:\nFrom: \"%s\"\nTo: \"%s\"\n", my_errno,read_record,record2); goto err; } if (verbose) - printf("Double key when tryed to uppdate:\nFrom: \"%s\"\nTo: \"%s\"\n",record,record2); + printf("Double key when tried to update:\nFrom: \"%s\"\nTo: \"%s\"\n",record,record2); } else { diff --git a/mysql-test/r/distinct.result b/mysql-test/r/distinct.result index da0c6a5eb72..a0343f13394 100644 --- a/mysql-test/r/distinct.result +++ b/mysql-test/r/distinct.result @@ -173,9 +173,9 @@ INSERT INTO t2 values (1),(2),(3); INSERT INTO t3 VALUES (1,'1'),(2,'2'),(1,'1'),(2,'2'); explain SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a; table type possible_keys key key_len ref rows Extra -t2 index a a 4 NULL 5 Using index; Using temporary -t1 eq_ref PRIMARY PRIMARY 4 t2.a 1 -t3 index a a 5 NULL 5 Using where; Using index +t3 index a a 5 NULL 6 Using index; Using temporary +t2 index a a 4 NULL 5 Using index; Distinct +t1 eq_ref PRIMARY PRIMARY 4 t2.a 1 Using where; Distinct SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a; a 1 @@ -303,9 +303,9 @@ t1 index id id 4 NULL 2 Using index; Using temporary t2 index id id 8 NULL 1 Using index; Distinct t3 index id id 8 NULL 1 Using index; Distinct j_lj_t2 index id id 4 NULL 2 Using where; Using index; Distinct -t2_lj index id id 8 NULL 1 Using where; Using index; Distinct +t2_lj ref id id 4 j_lj_t2.id 1 Using where; Using index; Distinct j_lj_t3 index id id 4 NULL 2 Using where; Using index; Distinct -t3_lj index id id 8 NULL 1 Using where; Using index; Distinct +t3_lj ref id id 4 j_lj_t3.id 1 Using where; Using index; Distinct SELECT DISTINCT t1.id from diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 64fac8af872..58f4972d08f 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -307,17 +307,17 @@ table type possible_keys key key_len ref rows Extra t1 range a a 9 NULL 8 Using where; Using index explain select * from t1 where a = 2 and b >0 order by a desc,b desc; table type possible_keys key key_len ref rows Extra -t1 range a a 9 NULL 4 Using where; Using index +t1 range a a 9 NULL 5 Using where; Using index explain select * from t1 where a = 2 and b is null order by a desc,b desc; table type possible_keys key key_len ref rows Extra t1 ref a a 9 const,const 1 Using where; Using index; Using filesort explain select * from t1 where a = 2 and (b is null or b > 0) order by a desc,b desc; table type possible_keys key key_len ref rows Extra -t1 range a a 9 NULL 5 Using where; Using index +t1 range a a 9 NULL 6 Using where; Using index explain select * from t1 where a = 2 and b > 0 order by a desc,b desc; table type possible_keys key key_len ref rows Extra -t1 range a a 9 NULL 4 Using where; Using index +t1 range a a 9 NULL 5 Using where; Using index explain select * from t1 where a = 2 and b < 2 order by a desc,b desc; table type possible_keys key key_len ref rows Extra t1 range a a 9 NULL 2 Using where; Using index @@ -466,8 +466,8 @@ t2 eq_ref PRIMARY,uid PRIMARY 4 t1.gid 1 t3 eq_ref PRIMARY PRIMARY 2 t2.uid 1 Using where; Using index EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t1.gid,t3.skr; table type possible_keys key key_len ref rows Extra -t1 index PRIMARY PRIMARY 4 NULL 6 Using index -t3 eq_ref PRIMARY PRIMARY 2 t1.gid 1 Using where +t3 ALL PRIMARY NULL NULL NULL 6 Using temporary; Using filesort +t1 eq_ref PRIMARY PRIMARY 4 t3.uid 1 Using where; Using index EXPLAIN SELECT t1.gid, t2.sid, t3.uid from t2, t1, t3 where t2.gid = t1.gid and t2.uid = t3.uid order by t3.uid, t1.gid; table type possible_keys key key_len ref rows Extra t1 index PRIMARY PRIMARY 4 NULL 6 Using index; Using temporary; Using filesort @@ -475,8 +475,8 @@ t2 eq_ref PRIMARY,uid PRIMARY 4 t1.gid 1 t3 eq_ref PRIMARY PRIMARY 2 t2.uid 1 Using where; Using index EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t3.skr,t1.gid; table type possible_keys key key_len ref rows Extra -t1 index PRIMARY PRIMARY 4 NULL 6 Using index; Using temporary; Using filesort -t3 eq_ref PRIMARY PRIMARY 2 t1.gid 1 Using where +t3 ALL PRIMARY NULL NULL NULL 6 Using temporary; Using filesort +t1 eq_ref PRIMARY PRIMARY 4 t3.uid 1 Using where; Using index EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.skr = t3.uid order by t1.gid,t3.skr; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 6 Using temporary; Using filesort diff --git a/mysql-test/r/rpl000009.result b/mysql-test/r/rpl000009.result index 4a8057467f2..569dd301143 100644 --- a/mysql-test/r/rpl000009.result +++ b/mysql-test/r/rpl000009.result @@ -111,22 +111,10 @@ n s 2 two bar 3 three bar 4 four bar -insert into bar.t1 values(10, 'should be there'); -flush tables; -load data from master; -Error on delete of './bar/t1.MYI' (Errcode: 13) -select * from bar.t1; -n s -1 one bar -2 two bar -3 three bar -4 four bar -10 should be there load table bar.t1 from master; Table 't1' already exists drop table bar.t1; load table bar.t1 from master; -start slave; drop database bar; drop database foo; drop database foo; diff --git a/mysql-test/t/rpl000009.test b/mysql-test/t/rpl000009.test index 975cfbf9a65..e019e1fc3a7 100644 --- a/mysql-test/t/rpl000009.test +++ b/mysql-test/t/rpl000009.test @@ -110,13 +110,14 @@ select * from bar.t1; # Check that LOAD DATA FROM MASTER reports the error if it can't drop a # table to be overwritten. -insert into bar.t1 values(10, 'should be there'); -flush tables; -system chmod 500 var/slave-data/bar/; ---error 6 -load data from master; # should fail (errno 13) -system chmod 700 var/slave-data/bar/; -select * from bar.t1; # should contain the row (10, ...) +# DISABLED FOR NOW AS chmod IS NOT PORTABLE ON NON-UNIX +# insert into bar.t1 values(10, 'should be there'); +# flush tables; +# system chmod 500 var/slave-data/bar/; +# --error 6 +# load data from master; # should fail (errno 13) +# system chmod 700 var/slave-data/bar/; +# select * from bar.t1; # should contain the row (10, ...) # Check that LOAD TABLE FROM MASTER fails if the table exists on slave @@ -126,7 +127,8 @@ drop table bar.t1; load table bar.t1 from master; # as LOAD DATA FROM MASTER failed it did not restart slave threads -start slave; +# DISABLED FOR NOW +# start slave; # Now time for cleanup connection master; diff --git a/mysys/default.c b/mysys/default.c index d938bc4435f..0318efeb448 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -387,6 +387,8 @@ static int search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, *ptr++= '='; for ( ; value != value_end; value++) { + if (*value == '\"' || *value == '\'') + continue; if (*value == '\\' && value != value_end-1) { switch(*++value) { @@ -405,6 +407,12 @@ static int search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, case 's': *ptr++= ' '; /* space */ break; + case '\"': + *ptr++= '\"'; + break; + case '\'': + *ptr++= '\''; + break; case '\\': *ptr++= '\\'; break; diff --git a/sql/des_key_file.cc b/sql/des_key_file.cc index 891cf18ee53..619691d183e 100644 --- a/sql/des_key_file.cc +++ b/sql/des_key_file.cc @@ -76,16 +76,16 @@ load_des_key_file(const char *file_name) if (start != end) { - des_cblock ivec; + DES_cblock ivec; bzero((char*) &ivec,sizeof(ivec)); // We make good 24-byte (168 bit) key from given plaintext key with MD5 EVP_BytesToKey(EVP_des_ede3_cbc(),EVP_md5(),NULL, (uchar *) start, (int) (end-start),1, (uchar *) &keyblock, ivec); - des_set_key_unchecked(&keyblock.key1,des_keyschedule[(int)offset].ks1); - des_set_key_unchecked(&keyblock.key2,des_keyschedule[(int)offset].ks2); - des_set_key_unchecked(&keyblock.key3,des_keyschedule[(int)offset].ks3); + DES_set_key_unchecked(&keyblock.key1,&(des_keyschedule[(int)offset].ks1)); + DES_set_key_unchecked(&keyblock.key2,&(des_keyschedule[(int)offset].ks2)); + DES_set_key_unchecked(&keyblock.key3,&(des_keyschedule[(int)offset].ks3)); if (des_default_key == 15) des_default_key= (uint) offset; // use first as def. } diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 8cc3d24f7d9..fe9c8b9e099 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -330,7 +330,7 @@ void Item_func_concat::fix_length_and_dec() String *Item_func_des_encrypt::val_str(String *str) { #ifdef HAVE_OPENSSL - des_cblock ivec; + DES_cblock ivec; struct st_des_keyblock keyblock; struct st_des_keyschedule keyschedule; const char *append_str="********"; @@ -370,9 +370,9 @@ String *Item_func_des_encrypt::val_str(String *str) EVP_BytesToKey(EVP_des_ede3_cbc(),EVP_md5(),NULL, (uchar*) keystr->ptr(), (int) keystr->length(), 1, (uchar*) &keyblock,ivec); - des_set_key_unchecked(&keyblock.key1,keyschedule.ks1); - des_set_key_unchecked(&keyblock.key2,keyschedule.ks2); - des_set_key_unchecked(&keyblock.key3,keyschedule.ks3); + DES_set_key_unchecked(&keyblock.key1,&keyschedule.ks1); + DES_set_key_unchecked(&keyblock.key2,&keyschedule.ks2); + DES_set_key_unchecked(&keyblock.key3,&keyschedule.ks3); } /* @@ -393,12 +393,12 @@ String *Item_func_des_encrypt::val_str(String *str) tmp_value[0]=(char) (128 | key_number); // Real encryption bzero((char*) &ivec,sizeof(ivec)); - des_ede3_cbc_encrypt((const uchar*) (res->ptr()), + DES_ede3_cbc_encrypt((const uchar*) (res->ptr()), (uchar*) (tmp_value.ptr()+1), res_length, - keyschedule.ks1, - keyschedule.ks2, - keyschedule.ks3, + &keyschedule.ks1, + &keyschedule.ks2, + &keyschedule.ks3, &ivec, TRUE); return &tmp_value; @@ -412,8 +412,8 @@ error: String *Item_func_des_decrypt::val_str(String *str) { #ifdef HAVE_OPENSSL - des_key_schedule ks1, ks2, ks3; - des_cblock ivec; + DES_key_schedule ks1, ks2, ks3; + DES_cblock ivec; struct st_des_keyblock keyblock; struct st_des_keyschedule keyschedule; String *res= args[0]->val_str(str); @@ -447,20 +447,20 @@ String *Item_func_des_decrypt::val_str(String *str) (uchar*) keystr->ptr(),(int) keystr->length(), 1,(uchar*) &keyblock,ivec); // Here we set all 64-bit keys (56 effective) one by one - des_set_key_unchecked(&keyblock.key1,keyschedule.ks1); - des_set_key_unchecked(&keyblock.key2,keyschedule.ks2); - des_set_key_unchecked(&keyblock.key3,keyschedule.ks3); + DES_set_key_unchecked(&keyblock.key1,&keyschedule.ks1); + DES_set_key_unchecked(&keyblock.key2,&keyschedule.ks2); + DES_set_key_unchecked(&keyblock.key3,&keyschedule.ks3); } if (tmp_value.alloc(length-1)) goto error; bzero((char*) &ivec,sizeof(ivec)); - des_ede3_cbc_encrypt((const uchar*) res->ptr()+1, + DES_ede3_cbc_encrypt((const uchar*) res->ptr()+1, (uchar*) (tmp_value.ptr()), length-1, - keyschedule.ks1, - keyschedule.ks2, - keyschedule.ks3, + &keyschedule.ks1, + &keyschedule.ks2, + &keyschedule.ks3, &ivec, FALSE); /* Restore old length of key */ if ((tail=(uint) (uchar) tmp_value[length-2]) > 8) diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 22c92a5473b..8024c755a63 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -474,11 +474,11 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length, #include <openssl/des.h> struct st_des_keyblock { - des_cblock key1, key2, key3; + DES_cblock key1, key2, key3; }; struct st_des_keyschedule { - des_key_schedule ks1, ks2, ks3; + DES_key_schedule ks1, ks2, ks3; }; extern char *des_key_file; extern struct st_des_keyschedule des_keyschedule[10]; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index d537dccc5a6..53c41482a36 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1898,7 +1898,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, best=best_time=records=DBL_MAX; KEYUSE *best_key=0; uint best_max_key_part=0; - my_bool found_constrain= 0; + my_bool found_constraint= 0; if (s->keyuse) { /* Use key if possible */ @@ -1979,7 +1979,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, } else { - found_constrain= 1; + found_constraint= 1; /* Check if we found full key */ @@ -2133,12 +2133,28 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, s->table->used_keys && best_key) && !(s->table->force_index && best_key)) { // Check full join + ha_rows rnd_records= s->found_records; /* Estimate cost of reading table. */ - tmp= (double) s->read_time; + tmp= s->table->file->scan_time(); + /* + If there is a restriction on the table, assume that 25% of the + rows can be skipped on next part. + This is to force tables that this table depends on before this + table + */ + if (found_constraint) + rnd_records-= rnd_records/4; + if (s->on_expr) // Can't use join cache { - /* We have to read the whole table for each record */ - tmp*= record_count; + tmp= record_count * + /* We have to read the whole table for each record */ + (tmp + + /* + And we have to skip rows which does not satisfy join + condition for each record. + */ + (s->records - rnd_records)/(double) TIME_FOR_COMPARE); } else { @@ -2146,30 +2162,25 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, tmp*= (1.0 + floor((double) cache_record_length(join,idx) * record_count / (double) thd->variables.join_buff_size)); + /* + We don't make full cartesian product between rows in the scanned + table and existing records because we skip all rows from the + scanned table, which does not satisfy join condition when + we read the table (see flush_cached_records for details). Here we + take into account cost to read and skip these records. + */ + tmp+= (s->records - rnd_records)/(double) TIME_FOR_COMPARE; } /* - We estimate the cost of making full cortesian product between - rows in the scanned table and generated records as - record_count*s->records/TIME_FOR_COMPARE. Taking into account - cost of evaluating WHERE clause for s->found_records is not - necessary because it costs much less than the cost mentioned - above. + We estimate the cost of evaluating WHERE clause for found records + as record_count * rnd_records + TIME_FOR_COMPARE. This cost plus + tmp give us total cost of using TABLE SCAN */ if (best == DBL_MAX || - (tmp + record_count/(double) TIME_FOR_COMPARE*s->records < + (tmp + record_count/(double) TIME_FOR_COMPARE*rnd_records < best + record_count/(double) TIME_FOR_COMPARE*records)) { - /* - If there is a restriction on the table, assume that 25% of the - rows can be skipped on next part. - This is to force tables that this table depends on before this - table - */ - ha_rows rnd_records= s->found_records; - if (found_constrain) - rnd_records-= rnd_records/4; - /* If the table has a range (s->quick is set) make_join_select() will ensure that this will be used diff --git a/support-files/mysql.server.sh b/support-files/mysql.server.sh index 694e6fa8ebb..fe1f0de8477 100644 --- a/support-files/mysql.server.sh +++ b/support-files/mysql.server.sh @@ -178,7 +178,7 @@ case "$mode" in # delete lock for RedHat / SuSE if test -f /var/lock/subsys/mysql then - rm /var/lock/subsys/mysql + rm -f /var/lock/subsys/mysql fi else echo "No mysqld pid file found. Looked for $pid_file." |