diff options
author | unknown <sasha@mysql.sashanet.com> | 2001-10-04 15:46:04 -0600 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2001-10-04 15:46:04 -0600 |
commit | 89055361b9203be1d4e813b00aa5dfbc6e9b0caa (patch) | |
tree | f15f127921d230171bb0ac60a5a854a61af3b185 /sql | |
parent | 5ee900d38a1d20247823ab23a441cbb78ac9942a (diff) | |
parent | 6bede5bed1add70fb5bb442ba70fe029c4c534f7 (diff) | |
download | mariadb-git-89055361b9203be1d4e813b00aa5dfbc6e9b0caa.tar.gz |
Merge
client/mysqltest.c:
Auto merged
include/mysql.h:
Auto merged
include/mysql_com.h:
Auto merged
libmysql/libmysql.c:
Auto merged
libmysqld/libmysqld.c:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
sql/item_func.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
acinclude.m4:
SCCS merged
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item.h | 4 | ||||
-rw-r--r-- | sql/item_cmpfunc.cc | 12 | ||||
-rw-r--r-- | sql/item_cmpfunc.h | 5 | ||||
-rw-r--r-- | sql/item_func.cc | 1 | ||||
-rw-r--r-- | sql/item_func.h | 3 | ||||
-rw-r--r-- | sql/item_sum.cc | 2 | ||||
-rw-r--r-- | sql/log_event.cc | 4 | ||||
-rw-r--r-- | sql/mysql_priv.h | 4 | ||||
-rw-r--r-- | sql/mysqld.cc | 14 | ||||
-rw-r--r-- | sql/net_serv.cc | 50 | ||||
-rw-r--r-- | sql/sql_base.cc | 1 | ||||
-rw-r--r-- | sql/sql_delete.cc | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 34 | ||||
-rw-r--r-- | sql/uniques.cc | 27 |
14 files changed, 61 insertions, 102 deletions
diff --git a/sql/item.h b/sql/item.h index 9ab41af3398..27611a3cce5 100644 --- a/sql/item.h +++ b/sql/item.h @@ -81,6 +81,7 @@ public: virtual void split_sum_func(List<Item> &fields) {} virtual bool get_date(TIME *ltime,bool fuzzydate); virtual bool get_time(TIME *ltime); + virtual bool is_null() { return 0; } }; @@ -130,6 +131,7 @@ public: Field *tmp_table_field() { return result_field; } bool get_date(TIME *ltime,bool fuzzydate); bool get_time(TIME *ltime); + bool is_null() { return field->is_null(); } }; @@ -150,6 +152,7 @@ public: bool send(String *str); bool basic_const_item() const { return 1; } Item *new_item() { return new Item_null(name); } + bool is_null() { return 1; } }; @@ -383,6 +386,7 @@ public: void copy(); table_map used_tables() const { return (table_map) 1L; } bool const_item() const { return 0; } + bool is_null() { return null_value; } }; diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index ac8534916d6..f825b4960c5 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1197,20 +1197,12 @@ longlong Item_cond_or::val_int() longlong Item_func_isnull::val_int() { - if (internal_result_type == REAL_RESULT) - (void) args[0]->val(); - else - (void) args[0]->val_int(); - return (args[0]->null_value) ? 1 : 0; + return args[0]->is_null() ? 1: 0; } longlong Item_func_isnotnull::val_int() { - if (internal_result_type == REAL_RESULT) - (void) args[0]->val(); - else - (void) args[0]->val_int(); - return !(args[0]->null_value) ? 1 : 0; + return args[0]->is_null() ? 0 : 1; } diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 9c9336264f7..9ed3e86d6e8 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -46,6 +46,7 @@ public: virtual enum Functype rev_functype() const { return UNKNOWN_FUNC; } bool have_rev_func() const { return rev_functype() != UNKNOWN_FUNC; } void print(String *str) { Item_func::print_op(str); } + bool is_null() { return test(args[0]->is_null() || args[1]->is_null()); } }; @@ -429,7 +430,6 @@ class Item_func_in :public Item_int_func class Item_func_isnull :public Item_bool_func { - enum Item_result internal_result_type; public: Item_func_isnull(Item *a) :Item_bool_func(a) {} longlong val_int(); @@ -438,7 +438,6 @@ public: { decimals=0; max_length=1; maybe_null=0; Item_func_isnull::update_used_tables(); - internal_result_type=args[0]->result_type(); } const char *func_name() const { return "isnull"; } /* Optimize case of not_null_column IS NULL */ @@ -457,7 +456,6 @@ public: class Item_func_isnotnull :public Item_bool_func { - enum Item_result internal_result_type; public: Item_func_isnotnull(Item *a) :Item_bool_func(a) {} longlong val_int(); @@ -465,7 +463,6 @@ public: void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=0; - internal_result_type=args[0]->result_type(); } const char *func_name() const { return "isnotnull"; } optimize_type select_optimize() const { return OPTIMIZE_NULL; } diff --git a/sql/item_func.cc b/sql/item_func.cc index a20a045f2d7..0ce342d09c8 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -209,7 +209,6 @@ void Item_func::fix_num_length_and_dec() max_length=float_length(decimals); } - String *Item_int_func::val_str(String *str) { longlong nr=val_int(); diff --git a/sql/item_func.h b/sql/item_func.h index ac4c230f312..bd3ef0bf2d7 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -119,6 +119,7 @@ public: { return (null_value=args[0]->get_time(ltime)); } + bool is_null() { (void) val_int(); return null_value; } friend class udf_handler; }; @@ -147,6 +148,7 @@ public: longlong val_int() { return (longlong) val(); } enum Item_result result_type () const { return hybrid_type; } void fix_length_and_dec() { fix_num_length_and_dec(); } + bool is_null() { (void) val(); return null_value; } }; @@ -161,6 +163,7 @@ class Item_num_op :public Item_func enum Item_result result_type () const { return hybrid_type; } void fix_length_and_dec() { fix_num_length_and_dec(); find_num_type(); } void find_num_type(void); + bool is_null() { (void) val(); return null_value; } }; diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 712c0fa308e..431d8b56e6a 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -745,7 +745,7 @@ Item_sum_hybrid::min_max_update_int_field(int offset) (ulonglong) old_nr > (ulonglong) nr : old_nr > nr); /* (cmp_sign > 0 && res) || (!(cmp_sign > 0) && !res) */ - if (cmp_sign > 0 ^ !res) + if ((cmp_sign > 0) ^ (!res)) old_nr=nr; } result_field->set_notnull(); diff --git a/sql/log_event.cc b/sql/log_event.cc index 7183e4caebb..5bd386c7b29 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1513,10 +1513,10 @@ int Query_log_event::exec_event(struct st_master_info* mi) (actual_error = thd->net.last_errno) && expected_error) { const char* errmsg = "Slave: did not get the expected error\ - running query from master - expected: '%s'(%d), got '%s'(%d)"; + running query from master - expected: '%s' (%d), got '%s' (%d)"; sql_print_error(errmsg, ER_SAFE(expected_error), expected_error, - actual_error ? thd->net.last_error:"no error", + actual_error ? thd->net.last_error: "no error", actual_error); thd->query_error = 1; } diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 26b1271c6c5..291ccb8a2d7 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -521,7 +521,7 @@ void sql_print_error(const char *format,...) extern uint32 server_id; extern char *mysql_data_home,server_version[SERVER_VERSION_LENGTH], max_sort_char, mysql_real_data_home[]; -extern my_string mysql_unix_port,mysql_tmpdir; +extern my_string mysql_tmpdir; extern const char *first_keyword, *localhost, *delayed_user; extern ulong refresh_version,flush_version, thread_id,query_id,opened_tables, created_tmp_tables, created_tmp_disk_tables, @@ -535,7 +535,7 @@ extern ulong filesort_merge_passes; extern ulong select_range_check_count, select_range_count, select_scan_count; extern ulong select_full_range_join_count,select_full_join_count, slave_open_temp_tables; -extern uint test_flags,select_errors,mysql_port,ha_open_options; +extern uint test_flags,select_errors,ha_open_options; extern ulong thd_startup_options, slow_launch_threads, slow_launch_time; extern time_t start_time; extern const char *command_name[]; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7ad8e7a8d93..a4421bc139c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1202,13 +1202,13 @@ static sig_handler handle_segfault(int sig) fprintf(stderr,"\ mysqld got signal %d;\n\ This could be because you hit a bug. It is also possible that this binary\n\ -or one of the libraries it was linked agaist is corrupt, improperly built,\n\ +or one of the libraries it was linked against is corrupt, improperly built,\n\ or misconfigured. This error can also be caused by malfunctioning hardware.\n", sig); fprintf(stderr, "\ We will try our best to scrape up some info that will hopefully help diagnose\n\ the problem, but since we have already crashed, something is definitely wrong\n\ -and this may fail\n\n"); +and this may fail.\n\n"); fprintf(stderr, "key_buffer_size=%ld\n", keybuff_size); fprintf(stderr, "record_buffer=%ld\n", my_default_record_cache_size); fprintf(stderr, "sort_buffer=%ld\n", sortbuff_size); @@ -1219,15 +1219,15 @@ and this may fail\n\n"); key_buffer_size + (record_buffer + sort_buffer)*max_connections = %ld K\n\ bytes of memory\n", (keybuff_size + (my_default_record_cache_size + sortbuff_size) * max_connections)/ 1024); - fprintf(stderr, "Hope that's ok, if not, decrease some variables in the equation\n\n"); + fprintf(stderr, "Hope that's ok; if not, decrease some variables in the equation.\n\n"); #if defined(HAVE_LINUXTHREADS) if (sizeof(char*) == 4 && thread_count > UNSAFE_DEFAULT_LINUX_THREADS) { fprintf(stderr, "\ You seem to be running 32-bit Linux and have %d concurrent connections.\n\ -If you have not changed STACK_SIZE in LinuxThreads and build the binary \n\ -yourself, LinuxThreads is quite likely to steal a part of global heap for\n\ +If you have not changed STACK_SIZE in LinuxThreads and built the binary \n\ +yourself, LinuxThreads is quite likely to steal a part of the global heap for\n\ the thread stack. Please read http://www.mysql.com/doc/L/i/Linux.html\n\n", thread_count); } @@ -1251,12 +1251,12 @@ Some pointers may be invalid and cause the dump to abort...\n"); fprintf(stderr, "\n Successfully dumped variables, if you ran with --log, take a look at the\n\ details of what thread %ld did to cause the crash. In some cases of really\n\ -bad corruption, the values shown above may be invalid\n\n", +bad corruption, the values shown above may be invalid.\n\n", thd->thread_id); } fprintf(stderr, "\ The manual page at http://www.mysql.com/doc/C/r/Crashing.html contains\n\ -information that should help you find out what is causing the crash\n"); +information that should help you find out what is causing the crash.\n"); fflush(stderr); #endif /* HAVE_STACKTRACE */ diff --git a/sql/net_serv.cc b/sql/net_serv.cc index 59fee295b60..44e3dd14f80 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -41,7 +41,6 @@ #include <signal.h> #include <errno.h> #include <sys/types.h> -#include <assert.h> #ifdef MYSQL_SERVER ulong max_allowed_packet=65536; @@ -91,7 +90,7 @@ extern ulong mysqld_net_retry_count; typedef my_bool thr_alarm_t; typedef my_bool ALARM; #define thr_alarm_init(A) (*(A))=0 -#define thr_alarm_in_use(A) (*(A)) +#define thr_alarm_in_use(A) (*(A) != 0) #define thr_end_alarm(A) #define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C)) inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused))) @@ -131,7 +130,7 @@ int my_net_init(NET *net, Vio* vio) net->no_send_ok = 0; net->error=0; net->return_errno=0; net->return_status=0; net->timeout=(uint) net_read_timeout; /* Timeout for read */ - net->pkt_nr=0; + net->pkt_nr=net->compress_pkt_nr=0; net->write_pos=net->read_pos = net->buff; net->last_error[0]=0; net->compress=0; net->reading_or_writing=0; @@ -192,7 +191,7 @@ static my_bool net_realloc(NET *net, ulong length) void net_clear(NET *net) { #ifndef EXTRA_DEBUG - int count; // One may get 'unused' warning + int count; /* One may get 'unused' warn */ bool is_blocking=vio_is_blocking(net->vio); if (is_blocking) vio_blocking(net->vio, FALSE); @@ -206,7 +205,7 @@ void net_clear(NET *net) vio_blocking(net->vio, TRUE); } #endif /* EXTRA_DEBUG */ - net->pkt_nr=0; /* Ready for new command */ + net->pkt_nr=net->compress_pkt_nr=0; /* Ready for new command */ net->write_pos=net->buff; } @@ -219,9 +218,12 @@ int net_flush(NET *net) if (net->buff != net->write_pos) { error=net_real_write(net,(char*) net->buff, - (uint) (net->write_pos - net->buff)); + (ulong) (net->write_pos - net->buff)); net->write_pos=net->buff; } + /* Sync packet number if using compression */ + if (net->compress) + net->pkt_nr=net->compress_pkt_nr; DBUG_RETURN(error); } @@ -250,7 +252,7 @@ my_net_write(NET *net,const char *packet,ulong len) { const ulong z_size = MAX_THREE_BYTES; int3store(buff, z_size); - buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); + buff[3]= net->pkt_nr++; if (net_write_buff(net, (char*) buff, NET_HEADER_SIZE) || net_write_buff(net, packet, z_size)) return 1; @@ -259,7 +261,7 @@ my_net_write(NET *net,const char *packet,ulong len) } /* Write last packet */ int3store(buff,len); - buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); + buff[3]= net->pkt_nr++; if (net_write_buff(net,(char*) buff,NET_HEADER_SIZE)) return 1; return net_write_buff(net,packet,len); @@ -277,7 +279,7 @@ my_net_write(NET *net,const char *packet,ulong len) int net_write_command(NET *net,uchar command,const char *packet,ulong len) { - uint length=len+1; /* 1 extra byte for command */ + ulong length=len+1; /* 1 extra byte for command */ uchar buff[NET_HEADER_SIZE+1]; uint header_size=NET_HEADER_SIZE+1; buff[4]=command; /* For first packet */ @@ -289,7 +291,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) do { int3store(buff, MAX_THREE_BYTES); - buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); + buff[3]= net->pkt_nr++; if (net_write_buff(net,(char*) buff, header_size) || net_write_buff(net,packet,len)) return 1; @@ -301,7 +303,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) len=length; /* Data left to be written */ } int3store(buff,length); - buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); + buff[3]= net->pkt_nr++; return test(net_write_buff(net,(char*) buff,header_size) || net_write_buff(net,packet,len) || net_flush(net)); } @@ -314,7 +316,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) static int net_write_buff(NET *net,const char *packet,ulong len) { - uint left_length=(uint) (net->buff_end - net->write_pos); + ulong left_length=(ulong) (net->buff_end - net->write_pos); while (len > left_length) { @@ -340,10 +342,10 @@ net_write_buff(NET *net,const char *packet,ulong len) int net_real_write(NET *net,const char *packet,ulong len) { - int length; + long int length; char *pos,*end; thr_alarm_t alarmed; -#if !defined(__WIN__) +#if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) ALARM alarm_buff; #endif uint retry_count=0; @@ -380,7 +382,7 @@ net_real_write(NET *net,const char *packet,ulong len) } int3store(&b[NET_HEADER_SIZE],complen); int3store(b,len); - b[3]=(uchar) (net->pkt_nr++); + b[3]=(uchar) (net->compress_pkt_nr++); len+= header_length; packet= (char*) b; } @@ -398,7 +400,7 @@ net_real_write(NET *net,const char *packet,ulong len) pos=(char*) packet; end=pos+len; while (pos != end) { - if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0) + if ((long) (length=vio_write(net->vio,pos,(ulong) (end-pos))) <= 0) { my_bool interrupted = vio_should_retry(net->vio); #if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2)) @@ -499,7 +501,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed) { my_bool interrupted = vio_should_retry(net->vio); if (!thr_got_alarm(&alarmed) && interrupted) - { /* Probably in MIT threads */ + { /* Probably in MIT threads */ if (retry_count++ < RETRY_COUNT) continue; } @@ -518,7 +520,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed) This function reallocates the net->buff buffer if necessary. */ -static uint +static ulong my_real_read(NET *net, ulong *complen) { uchar *pos; @@ -629,9 +631,9 @@ my_real_read(NET *net, ulong *complen) if (net->buff[net->where_b] != (uchar) 255) { DBUG_PRINT("error", - ("Packets out of order (Found: %d, expected %d)", + ("Packets out of order (Found: %d, expected %u)", (int) net->buff[net->where_b + 3], - (uint) (uchar) net->pkt_nr)); + net->pkt_nr)); #ifdef EXTRA_DEBUG fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n", (int) net->buff[net->where_b + 3], @@ -644,7 +646,7 @@ my_real_read(NET *net, ulong *complen) #endif goto end; } - net->pkt_nr++; + net->compress_pkt_nr= ++net->pkt_nr; #ifdef HAVE_COMPRESS if (net->compress) { @@ -712,7 +714,7 @@ my_net_read(NET *net) if (len == MAX_THREE_BYTES) { /* First packet of a multi-packet. Concatenate the packets */ - int save_pos = net->where_b; + ulong save_pos = net->where_b; ulong total_length=0; do { @@ -822,8 +824,8 @@ my_net_read(NET *net) net->read_pos= net->buff+ first_packet_offset + NET_HEADER_SIZE; net->buf_length= buf_length; - net->remain_in_buf= buf_length - start_of_packet; - len = ((uint) (start_of_packet - first_packet_offset) - NET_HEADER_SIZE - + net->remain_in_buf= (ulong) (buf_length - start_of_packet); + len = ((ulong) (start_of_packet - first_packet_offset) - NET_HEADER_SIZE - multi_byte_packet); net->save_char= net->read_pos[len]; /* Must be saved */ net->read_pos[len]=0; /* Safeguard for mysql_use_result */ diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 4c012804c3e..595bee99908 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1944,7 +1944,6 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) // TODO: This could be optimized to use hashed names if t2 had a hash for (j=0 ; j < t2->fields ; j++) { - key_map tmp_map; if (!my_strcasecmp(t1->field[i]->field_name, t2->field[j]->field_name)) { diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 00ebef89fa5..1103e5590d8 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -309,7 +309,6 @@ bool multi_delete::send_data(List<Item> &values) continue; table->file->position(table->record[0]); - int rl = table->file->ref_length; if (secure_counter < 0) { @@ -397,7 +396,6 @@ int multi_delete::do_deletes (bool from_send_error) table_being_deleted=table_being_deleted->next, counter++) { TABLE *table = table_being_deleted->table; - int rl = table->file->ref_length; if (tempfiles[counter]->get(table)) { error=1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 893c99efce1..c2bb282a624 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -107,7 +107,6 @@ static uint find_shortest_key(TABLE *table, key_map usable_keys); static bool test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order, ha_rows select_limit, bool no_changes); static int create_sort_index(JOIN_TAB *tab,ORDER *order,ha_rows select_limit); -static bool fix_having(JOIN *join, Item **having); static int remove_duplicates(JOIN *join,TABLE *entry,List<Item> &fields, Item *having); static int remove_dup_with_compare(THD *thd, TABLE *entry, Field **field, @@ -5443,39 +5442,6 @@ err: DBUG_RETURN(-1); } - -/* -** Add the HAVING criteria to table->select -*/ - -static bool fix_having(JOIN *join, Item **having) -{ - (*having)->update_used_tables(); // Some tables may have been const - JOIN_TAB *table=&join->join_tab[join->const_tables]; - table_map used_tables= join->const_table_map | table->table->map; - - Item* sort_table_cond=make_cond_for_table(*having,used_tables,used_tables); - if (sort_table_cond) - { - if (!table->select) - if (!(table->select=new SQL_SELECT)) - return 1; - if (!table->select->cond) - table->select->cond=sort_table_cond; - else // This should never happen - if (!(table->select->cond=new Item_cond_and(table->select->cond, - sort_table_cond))) - return 1; - table->select_cond=table->select->cond; - DBUG_EXECUTE("where",print_where(table->select_cond, - "select and having");); - *having=make_cond_for_table(*having,~ (table_map) 0,~used_tables); - DBUG_EXECUTE("where",print_where(*having,"having after make_cond");); - } - return 0; -} - - /***************************************************************************** ** Remove duplicates from tmp table ** This should be recoded to add a uniuqe index to the table and remove diff --git a/sql/uniques.cc b/sql/uniques.cc index bd3ca6db0d0..fcee97dbb1a 100644 --- a/sql/uniques.cc +++ b/sql/uniques.cc @@ -35,6 +35,19 @@ #include "sql_sort.h" +int unique_write_to_file(gptr key, element_count count, Unique *unique) +{ + return my_b_write(&unique->file, (byte*) key, + unique->tree.size_of_element) ? 1 : 0; +} + +int unique_write_to_ptrs(gptr key, element_count count, Unique *unique) +{ + memcpy(unique->record_pointers, key, unique->tree.size_of_element); + unique->record_pointers+=unique->tree.size_of_element; + return 0; +} + Unique::Unique(qsort_cmp2 comp_func, void * comp_func_fixed_arg, uint size, ulong max_in_memory_size_arg) :max_in_memory_size(max_in_memory_size_arg),elements(0) @@ -73,20 +86,6 @@ bool Unique::flush() } -int unique_write_to_file(gptr key, element_count count, Unique *unique) -{ - return my_b_write(&unique->file, (byte*) key, - unique->tree.size_of_element) ? 1 : 0; -} - -int unique_write_to_ptrs(gptr key, element_count count, Unique *unique) -{ - memcpy(unique->record_pointers, key, unique->tree.size_of_element); - unique->record_pointers+=unique->tree.size_of_element; - return 0; -} - - /* Modify the TABLE element so that when one calls init_records() the rows will be read in priority order. |