Commit c9f5a5cc authored by unknown's avatar unknown

Corrections from code review for auto_increment. Added test cases.


mysql-test/r/archive.result:
  New result file.
mysql-test/t/archive.test:
  Added new tests for indexes. Also accidently updated it so that all "FROM" are now capitalized :)
sql/ha_archive.cc:
  Changed comparision function to compare memory locations. 
  
  Modified function for storing the auto_increment. 
  Removed useless DBUG_PRINT
parent 60d827b6
......@@ -4,13 +4,13 @@ Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL,
Varor_period smallint(4) unsigned DEFAULT '0' NOT NULL
) ENGINE=archive;
INSERT INTO t1 VALUES (9410,9412);
select period from t1;
select period FROM t1;
period
9410
select * from t1;
select * FROM t1;
Period Varor_period
9410 9412
select t1.* from t1;
select t1.* FROM t1;
Period Varor_period
9410 9412
CREATE TABLE t2 (
......@@ -22,13 +22,13 @@ fld4 char(35) DEFAULT '' NOT NULL,
fld5 char(35) DEFAULT '' NOT NULL,
fld6 char(4) DEFAULT '' NOT NULL
) ENGINE=archive;
select t2.fld3 from t2 where companynr = 58 and fld3 like "%imaginable%";
select t2.fld3 FROM t2 where companynr = 58 and fld3 like "%imaginable%";
fld3
imaginable
select fld3 from t2 where fld3 like "%cultivation" ;
select fld3 FROM t2 where fld3 like "%cultivation" ;
fld3
cultivation
select t2.fld3,companynr from t2 where companynr = 57+1 order by fld3;
select t2.fld3,companynr FROM t2 where companynr = 57+1 order by fld3;
fld3 companynr
concoct 58
druggists 58
......@@ -53,7 +53,7 @@ synergy 58
thanking 58
tying 58
unlocks 58
select fld3,companynr from t2 where companynr = 58 order by fld3;
select fld3,companynr FROM t2 where companynr = 58 order by fld3;
fld3 companynr
concoct 58
druggists 58
......@@ -78,7 +78,7 @@ synergy 58
thanking 58
tying 58
unlocks 58
select fld3 from t2 order by fld3 desc limit 10;
select fld3 FROM t2 order by fld3 desc limit 10;
fld3
youthfulness
yelped
......@@ -90,49 +90,49 @@ Winsett
Willy
willed
wildcats
select fld3 from t2 order by fld3 desc limit 5;
select fld3 FROM t2 order by fld3 desc limit 5;
fld3
youthfulness
yelped
Wotan
workers
Witt
select fld3 from t2 order by fld3 desc limit 5,5;
select fld3 FROM t2 order by fld3 desc limit 5,5;
fld3
witchcraft
Winsett
Willy
willed
wildcats
select t2.fld3 from t2 where fld3 = 'honeysuckle';
select t2.fld3 FROM t2 where fld3 = 'honeysuckle';
fld3
honeysuckle
select t2.fld3 from t2 where fld3 LIKE 'honeysuckl_';
select t2.fld3 FROM t2 where fld3 LIKE 'honeysuckl_';
fld3
honeysuckle
select t2.fld3 from t2 where fld3 LIKE 'hon_ysuckl_';
select t2.fld3 FROM t2 where fld3 LIKE 'hon_ysuckl_';
fld3
honeysuckle
select t2.fld3 from t2 where fld3 LIKE 'honeysuckle%';
select t2.fld3 FROM t2 where fld3 LIKE 'honeysuckle%';
fld3
honeysuckle
select t2.fld3 from t2 where fld3 LIKE 'h%le';
select t2.fld3 FROM t2 where fld3 LIKE 'h%le';
fld3
honeysuckle
select t2.fld3 from t2 where fld3 LIKE 'honeysuckle_';
select t2.fld3 FROM t2 where fld3 LIKE 'honeysuckle_';
fld3
select t2.fld3 from t2 where fld3 LIKE 'don_t_find_me_please%';
select t2.fld3 FROM t2 where fld3 LIKE 'don_t_find_me_please%';
fld3
select t2.fld3 from t2 where fld3 >= 'honeysuckle' and fld3 <= 'honoring' order by fld3;
select t2.fld3 FROM t2 where fld3 >= 'honeysuckle' and fld3 <= 'honoring' order by fld3;
fld3
honeysuckle
honoring
select fld1,fld3 from t2 where fld3="Colombo" or fld3 = "nondecreasing" order by fld3;
select fld1,fld3 FROM t2 where fld3="Colombo" or fld3 = "nondecreasing" order by fld3;
fld1 fld3
148504 Colombo
068305 Colombo
000000 nondecreasing
select fld1,fld3 from t2 where companynr = 37 and fld3 like 'f%';
select fld1,fld3 FROM t2 where companynr = 37 and fld3 like 'f%';
fld1 fld3
012001 flanking
013602 foldout
......@@ -165,37 +165,37 @@ fld1 fld3
232102 forgivably
238007 filial
238008 fixedly
select fld3 from t2 where fld3 like "L%" and fld3 = "ok";
select fld3 FROM t2 where fld3 like "L%" and fld3 = "ok";
fld3
select fld3 from t2 where (fld3 like "C%" and fld3 = "Chantilly");
select fld3 FROM t2 where (fld3 like "C%" and fld3 = "Chantilly");
fld3
Chantilly
select fld1,fld3 from t2 where fld1 like "25050%";
select fld1,fld3 FROM t2 where fld1 like "25050%";
fld1 fld3
250501 poisoning
250502 Iraqis
250503 heaving
250504 population
250505 bomb
select fld1,fld3 from t2 where fld1 like "25050_";
select fld1,fld3 FROM t2 where fld1 like "25050_";
fld1 fld3
250501 poisoning
250502 Iraqis
250503 heaving
250504 population
250505 bomb
create table t3 engine=archive select * from t2;
select * from t3 where fld3='bonfire';
create table t3 engine=archive select * FROM t2;
select * FROM t3 where fld3='bonfire';
auto fld1 companynr fld3 fld4 fld5 fld6
1191 068504 00 bonfire corresponds positively
select count(*) from t3;
select count(*) FROM t3;
count(*)
1199
rename table t3 to t4;
select * from t4 where fld3='bonfire';
select * FROM t4 where fld3='bonfire';
auto fld1 companynr fld3 fld4 fld5 fld6
1191 068504 00 bonfire corresponds positively
select count(*) from t4;
select count(*) FROM t4;
count(*)
1199
INSERT INTO t2 VALUES (1,000001,00,'Omaha','teethe','neat','');
......@@ -11130,7 +11130,7 @@ t2 CREATE TABLE `t2` (
`fld4` char(35) NOT NULL default '',
`fld5` char(35) NOT NULL default ''
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
SELECT * from t2;
SELECT * FROM t2;
auto fld1 companynr fld3 fld4 fld5
1 000001 00 Omaha teethe neat
2 011401 37 breaking dreaded Steinberg
......@@ -12346,4 +12346,63 @@ auto fld1 companynr fld3 fld4 fld5
3 011402 37 Romans scholastics jarring
4 011403 37 intercepted audiology tinily
4 011403 37 intercepted audiology tinily
drop table t1, t2, t4;
CREATE TABLE `t5` (
`a` int(11) NOT NULL auto_increment,
b char(12),
PRIMARY KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (3, "foo");
ERROR 23000: Can't write; duplicate key in table 't5'
INSERT INTO t5 VALUES (0, "foo");
SELECT * FROM t5;
a b
1 foo
2 foo
3 foo
4 foo
5 foo
32 foo
23 foo
33 foo
34 foo
35 foo
DROP TABLE t5;
CREATE TABLE `t5` (
`a` int(11) NOT NULL auto_increment,
b char(12),
KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (0, "foo");
SELECT * FROM t5;
a b
1 foo
2 foo
3 foo
4 foo
5 foo
32 foo
23 foo
33 foo
34 foo
3 foo
35 foo
drop table t1, t2, t4, t5;
#
# Simple test for archive example
# Taken from the select test
# Taken FROM the select test
#
-- source include/have_archive.inc
......@@ -15,9 +15,9 @@ CREATE TABLE t1 (
INSERT INTO t1 VALUES (9410,9412);
select period from t1;
select * from t1;
select t1.* from t1;
select period FROM t1;
select * FROM t1;
select t1.* FROM t1;
#
# Create test table
......@@ -1243,64 +1243,64 @@ INSERT INTO t2 VALUES (1193,000000,00,'nondecreasing','implant','thrillingly',''
# Search with a key
#
select t2.fld3 from t2 where companynr = 58 and fld3 like "%imaginable%";
select fld3 from t2 where fld3 like "%cultivation" ;
select t2.fld3 FROM t2 where companynr = 58 and fld3 like "%imaginable%";
select fld3 FROM t2 where fld3 like "%cultivation" ;
#
# Search with a key using sorting and limit the same time
#
select t2.fld3,companynr from t2 where companynr = 57+1 order by fld3;
select fld3,companynr from t2 where companynr = 58 order by fld3;
select t2.fld3,companynr FROM t2 where companynr = 57+1 order by fld3;
select fld3,companynr FROM t2 where companynr = 58 order by fld3;
select fld3 from t2 order by fld3 desc limit 10;
select fld3 from t2 order by fld3 desc limit 5;
select fld3 from t2 order by fld3 desc limit 5,5;
select fld3 FROM t2 order by fld3 desc limit 10;
select fld3 FROM t2 order by fld3 desc limit 5;
select fld3 FROM t2 order by fld3 desc limit 5,5;
#
# Search with a key having a constant with each unique key.
# The table is read directly with read-next on fld3
#
select t2.fld3 from t2 where fld3 = 'honeysuckle';
select t2.fld3 from t2 where fld3 LIKE 'honeysuckl_';
select t2.fld3 from t2 where fld3 LIKE 'hon_ysuckl_';
select t2.fld3 from t2 where fld3 LIKE 'honeysuckle%';
select t2.fld3 from t2 where fld3 LIKE 'h%le';
select t2.fld3 FROM t2 where fld3 = 'honeysuckle';
select t2.fld3 FROM t2 where fld3 LIKE 'honeysuckl_';
select t2.fld3 FROM t2 where fld3 LIKE 'hon_ysuckl_';
select t2.fld3 FROM t2 where fld3 LIKE 'honeysuckle%';
select t2.fld3 FROM t2 where fld3 LIKE 'h%le';
select t2.fld3 from t2 where fld3 LIKE 'honeysuckle_';
select t2.fld3 from t2 where fld3 LIKE 'don_t_find_me_please%';
select t2.fld3 FROM t2 where fld3 LIKE 'honeysuckle_';
select t2.fld3 FROM t2 where fld3 LIKE 'don_t_find_me_please%';
#
# Test sorting with a used key (there is no need for sorting)
#
select t2.fld3 from t2 where fld3 >= 'honeysuckle' and fld3 <= 'honoring' order by fld3;
select fld1,fld3 from t2 where fld3="Colombo" or fld3 = "nondecreasing" order by fld3;
select t2.fld3 FROM t2 where fld3 >= 'honeysuckle' and fld3 <= 'honoring' order by fld3;
select fld1,fld3 FROM t2 where fld3="Colombo" or fld3 = "nondecreasing" order by fld3;
#
# Search with a key with LIKE constant
# If the like starts with a certain letter key will be used.
#
select fld1,fld3 from t2 where companynr = 37 and fld3 like 'f%';
select fld3 from t2 where fld3 like "L%" and fld3 = "ok";
select fld3 from t2 where (fld3 like "C%" and fld3 = "Chantilly");
select fld1,fld3 from t2 where fld1 like "25050%";
select fld1,fld3 from t2 where fld1 like "25050_";
select fld1,fld3 FROM t2 where companynr = 37 and fld3 like 'f%';
select fld3 FROM t2 where fld3 like "L%" and fld3 = "ok";
select fld3 FROM t2 where (fld3 like "C%" and fld3 = "Chantilly");
select fld1,fld3 FROM t2 where fld1 like "25050%";
select fld1,fld3 FROM t2 where fld1 like "25050_";
#
# Test rename of table
#
create table t3 engine=archive select * from t2;
select * from t3 where fld3='bonfire';
select count(*) from t3;
create table t3 engine=archive select * FROM t2;
select * FROM t3 where fld3='bonfire';
select count(*) FROM t3;
# Clean up path in error message
--replace_result $MYSQL_TEST_DIR . /var/master-data/ /
rename table t3 to t4;
select * from t4 where fld3='bonfire';
select count(*) from t4;
select * FROM t4 where fld3='bonfire';
select count(*) FROM t4;
# End of 4.1 tests
......@@ -1351,10 +1351,58 @@ INSERT DELAYED INTO t2 VALUES (4,011403,37,'intercepted','audiology','tinily',''
# Adding test for alter table
ALTER TABLE t2 DROP COLUMN fld6;
SHOW CREATE TABLE t2;
SELECT * from t2;
SELECT * FROM t2;
# Adding tests for autoincrement
# First the simple stuff
CREATE TABLE `t5` (
`a` int(11) NOT NULL auto_increment,
b char(12),
PRIMARY KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
--error 1022
INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (0, "foo");
SELECT * FROM t5;
DROP TABLE t5;
CREATE TABLE `t5` (
`a` int(11) NOT NULL auto_increment,
b char(12),
KEY (`a`)
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (32, "foo");
INSERT INTO t5 VALUES (23, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (0, "foo");
INSERT INTO t5 VALUES (3, "foo");
INSERT INTO t5 VALUES (0, "foo");
SELECT * FROM t5;
#
# Cleanup, test is over
#
drop table t1, t2, t4;
--disable_warnings
drop table t1, t2, t4, t5;
--enable_warnings
......@@ -599,7 +599,6 @@ int ha_archive::create(const char *name, TABLE *table_arg,
{
Field *field= key_part->field;
DBUG_PRINT("info", ("Looking at field index%s", field->field_name));
if (!(field->flags & AUTO_INCREMENT_FLAG))
{
error= -1;
......@@ -720,8 +719,6 @@ int ha_archive::write_row(byte *buf)
KEY *mkey= &table->s->key_info[0]; // We only support one key right now
update_auto_increment();
temp_auto= table->next_number_field->val_int();
DBUG_PRINT("info", ("archive would see %d and %d",
temp_auto, share->auto_increment_value));
/*
Bad news, this will cause a search for the unique value which is very
......@@ -765,13 +762,15 @@ int ha_archive::write_row(byte *buf)
/*
Now we read and check all of the rows.
if (!memcmp(table->next_number_field->ptr, mfield->ptr, mfield->max_length()))
if ((longlong)temp_auto ==
mfield->val_int((char*)(read_buf + mfield->offset())))
*/
Field *mfield= table->next_number_field;
while (!(get_row(&archive, read_buf)))
{
if ((longlong)temp_auto ==
mfield->val_int((char*)(read_buf + mfield->offset())))
if (!memcmp(read_buf + mfield->offset(), table->next_number_field->ptr,
mfield->max_length()))
{
rc= HA_ERR_FOUND_DUPP_KEY;
goto error;
......@@ -780,7 +779,8 @@ int ha_archive::write_row(byte *buf)
}
else
{
auto_increment_value= share->auto_increment_value= temp_auto;
if (temp_auto > share->auto_increment_value)
auto_increment_value= share->auto_increment_value= temp_auto;
}
}
......@@ -802,7 +802,7 @@ int ha_archive::write_row(byte *buf)
ulonglong ha_archive::get_auto_increment()
{
return auto_increment_value= ++share->auto_increment_value;
return share->auto_increment_value + 1;
}
/* Initialized at each key walk (called multiple times unlike rnd_init()) */
......
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