Commit 605f3ab5 authored by brian@zim.(none)'s avatar brian@zim.(none)

Merge baker@bk-internal.mysql.com:/home/bk/mysql-5.1-new

into  zim.(none):/home/brian/mysql/archive-5.1
parents b9de3d7f bee896be
...@@ -12351,18 +12351,18 @@ CREATE TABLE `t5` ( ...@@ -12351,18 +12351,18 @@ CREATE TABLE `t5` (
b char(12), b char(12),
PRIMARY KEY (`a`) PRIMARY KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1; ) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (32, "foo"); INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo"); INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (3, "foo"); INSERT INTO t5 VALUES (3, "foo");
ERROR 23000: Can't write; duplicate key in table 't5' ERROR 23000: Can't write; duplicate key in table 't5'
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
SELECT * FROM t5; SELECT * FROM t5;
a b a b
1 foo 1 foo
...@@ -12375,23 +12375,78 @@ a b ...@@ -12375,23 +12375,78 @@ a b
33 foo 33 foo
34 foo 34 foo
35 foo 35 foo
SELECT * FROM t5 WHERE a=3;
a b
3 foo
DROP TABLE t5;
CREATE TABLE `t5` (
`a` int(11) NOT NULL auto_increment,
b char(12),
KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
SELECT * FROM t5;
a b
5 foo
6 foo
7 foo
8 foo
9 foo
32 foo
23 foo
33 foo
34 foo
3 foo
35 foo
OPTIMIZE TABLE t5;
Table Op Msg_type Msg_text
test.t5 optimize status OK
SELECT * FROM t5;
a b
5 foo
6 foo
7 foo
8 foo
9 foo
32 foo
23 foo
33 foo
34 foo
3 foo
35 foo
SELECT * FROM t5 WHERE a=32;
a b
32 foo
SELECT * FROM t5 WHERE a=3;
a b
3 foo
DROP TABLE t5; DROP TABLE t5;
CREATE TABLE `t5` ( CREATE TABLE `t5` (
`a` int(11) NOT NULL auto_increment, `a` int(11) NOT NULL auto_increment,
b char(12), b char(12),
KEY (`a`) KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1; ) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (32, "foo"); INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo"); INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (3, "foo"); INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
SELECT * FROM t5; SELECT * FROM t5;
a b a b
1 foo 1 foo
......
...@@ -1363,20 +1363,48 @@ b char(12), ...@@ -1363,20 +1363,48 @@ b char(12),
PRIMARY KEY (`a`) PRIMARY KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1; ) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (32, "foo"); INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo"); INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
--error 1022 --error 1022
INSERT INTO t5 VALUES (3, "foo"); INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
SELECT * FROM t5; SELECT * FROM t5;
SELECT * FROM t5 WHERE a=3;
DROP TABLE t5;
CREATE TABLE `t5` (
`a` int(11) NOT NULL auto_increment,
b char(12),
KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (NULL, "foo");
SELECT * FROM t5;
OPTIMIZE TABLE t5;
SELECT * FROM t5;
SELECT * FROM t5 WHERE a=32;
SELECT * FROM t5 WHERE a=3;
DROP TABLE t5; DROP TABLE t5;
CREATE TABLE `t5` ( CREATE TABLE `t5` (
...@@ -1385,17 +1413,17 @@ b char(12), ...@@ -1385,17 +1413,17 @@ b char(12),
KEY (`a`) KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1; ) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (32, "foo"); INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo"); INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
INSERT INTO t5 VALUES (3, "foo"); INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (0, "foo"); INSERT INTO t5 VALUES (NULL, "foo");
SELECT * FROM t5; SELECT * FROM t5;
# #
......
...@@ -581,6 +581,10 @@ int ha_archive::create(const char *name, TABLE *table_arg, ...@@ -581,6 +581,10 @@ int ha_archive::create(const char *name, TABLE *table_arg,
int error; int error;
DBUG_ENTER("ha_archive::create"); DBUG_ENTER("ha_archive::create");
auto_increment_value= (create_info->auto_increment_value ?
create_info->auto_increment_value -1 :
(ulonglong) 0);
if ((create_file= my_create(fn_format(name_buff,name,"",ARM, if ((create_file= my_create(fn_format(name_buff,name,"",ARM,
MY_REPLACE_EXT|MY_UNPACK_FILENAME),0, MY_REPLACE_EXT|MY_UNPACK_FILENAME),0,
O_RDWR | O_TRUNC,MYF(MY_WME))) < 0) O_RDWR | O_TRUNC,MYF(MY_WME))) < 0)
...@@ -607,7 +611,7 @@ int ha_archive::create(const char *name, TABLE *table_arg, ...@@ -607,7 +611,7 @@ int ha_archive::create(const char *name, TABLE *table_arg,
} }
} }
write_meta_file(create_file, 0, 0, FALSE); write_meta_file(create_file, 0, auto_increment_value, FALSE);
my_close(create_file,MYF(0)); my_close(create_file,MYF(0));
/* /*
...@@ -834,7 +838,9 @@ int ha_archive::index_read_idx(byte *buf, uint index, const byte *key, ...@@ -834,7 +838,9 @@ int ha_archive::index_read_idx(byte *buf, uint index, const byte *key,
int rc= 0; int rc= 0;
bool found= 0; bool found= 0;
KEY *mkey= &table->s->key_info[index]; KEY *mkey= &table->s->key_info[index];
uint k_offset= mkey->key_part->offset; current_k_offset= mkey->key_part->offset;
current_key= key;
current_key_len= key_len;
DBUG_ENTER("ha_archive::index_read_idx"); DBUG_ENTER("ha_archive::index_read_idx");
...@@ -858,7 +864,7 @@ int ha_archive::index_read_idx(byte *buf, uint index, const byte *key, ...@@ -858,7 +864,7 @@ int ha_archive::index_read_idx(byte *buf, uint index, const byte *key,
while (!(get_row(&archive, buf))) while (!(get_row(&archive, buf)))
{ {
if (!memcmp(key, buf+k_offset, key_len)) if (!memcmp(current_key, buf + current_k_offset, current_key_len))
{ {
found= 1; found= 1;
break; break;
...@@ -872,6 +878,25 @@ error: ...@@ -872,6 +878,25 @@ error:
DBUG_RETURN(rc ? rc : HA_ERR_END_OF_FILE); DBUG_RETURN(rc ? rc : HA_ERR_END_OF_FILE);
} }
int ha_archive::index_next(byte * buf)
{
bool found= 0;
DBUG_ENTER("ha_archive::index_next");
while (!(get_row(&archive, buf)))
{
if (!memcmp(current_key, buf+current_k_offset, current_key_len))
{
found= 1;
break;
}
}
DBUG_RETURN(found ? 0 : HA_ERR_END_OF_FILE);
}
/* /*
All calls that need to scan the table start with this method. If we are told All calls that need to scan the table start with this method. If we are told
that it is a table scan we rewind the file to the beginning, otherwise that it is a table scan we rewind the file to the beginning, otherwise
...@@ -1210,6 +1235,15 @@ THR_LOCK_DATA **ha_archive::store_lock(THD *thd, ...@@ -1210,6 +1235,15 @@ THR_LOCK_DATA **ha_archive::store_lock(THD *thd,
return to; return to;
} }
void ha_archive::update_create_info(HA_CREATE_INFO *create_info)
{
ha_archive::info(HA_STATUS_AUTO | HA_STATUS_CONST);
if (!(create_info->used_fields & HA_CREATE_USED_AUTO))
{
create_info->auto_increment_value=auto_increment_value;
}
}
/* /*
Hints for optimizer, see ha_tina for more information Hints for optimizer, see ha_tina for more information
......
...@@ -58,6 +58,9 @@ class ha_archive: public handler ...@@ -58,6 +58,9 @@ class ha_archive: public handler
ha_rows scan_rows; /* Number of rows left in scan */ ha_rows scan_rows; /* Number of rows left in scan */
bool delayed_insert; /* If the insert is delayed */ bool delayed_insert; /* If the insert is delayed */
bool bulk_insert; /* If we are performing a bulk insert */ bool bulk_insert; /* If we are performing a bulk insert */
const byte *current_key;
uint current_key_len;
uint current_k_offset;
public: public:
ha_archive(TABLE_SHARE *table_arg); ha_archive(TABLE_SHARE *table_arg);
...@@ -85,6 +88,7 @@ public: ...@@ -85,6 +88,7 @@ public:
uint key_len, enum ha_rkey_function find_flag); uint key_len, enum ha_rkey_function find_flag);
virtual int index_read_idx(byte * buf, uint index, const byte * key, virtual int index_read_idx(byte * buf, uint index, const byte * key,
uint key_len, enum ha_rkey_function find_flag); uint key_len, enum ha_rkey_function find_flag);
int index_next(byte * buf);
int open(const char *name, int mode, uint test_if_locked); int open(const char *name, int mode, uint test_if_locked);
int close(void); int close(void);
int write_row(byte * buf); int write_row(byte * buf);
...@@ -104,6 +108,7 @@ public: ...@@ -104,6 +108,7 @@ public:
int write_data_header(azio_stream *file_to_write); int write_data_header(azio_stream *file_to_write);
void position(const byte *record); void position(const byte *record);
void info(uint); void info(uint);
void update_create_info(HA_CREATE_INFO *create_info);
int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info); int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info);
int optimize(THD* thd, HA_CHECK_OPT* check_opt); int optimize(THD* thd, HA_CHECK_OPT* check_opt);
int repair(THD* thd, HA_CHECK_OPT* check_opt); int repair(THD* thd, HA_CHECK_OPT* check_opt);
......
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