Commit 639e35d0 authored by unknown's avatar unknown

Merge gleb.loc:/home/uchum/work/bk/PA/5.1-opt-31036-v

into  gleb.loc:/home/uchum/work/bk/5.1-opt


mysql-test/r/archive.result:
  Auto merged
mysql-test/t/archive.test:
  Auto merged
storage/archive/azio.c:
  Auto merged
parents e2bd6c6b b9ecbb7e
...@@ -12683,3 +12683,7 @@ check table t1 extended; ...@@ -12683,3 +12683,7 @@ check table t1 extended;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK
drop table t1; drop table t1;
CREATE TABLE t1(a VARCHAR(510)) ENGINE = ARCHIVE;
INSERT INTO t1(a) VALUES ('');
SELECT * FROM t1 ORDER BY a;
DROP TABLE t1;
...@@ -1567,3 +1567,25 @@ insert into t1 set a=''; ...@@ -1567,3 +1567,25 @@ insert into t1 set a='';
insert into t1 set a='a'; insert into t1 set a='a';
check table t1 extended; check table t1 extended;
drop table t1; drop table t1;
#
# BUG#31036 - Using order by with archive table crashes server
#
CREATE TABLE t1(a VARCHAR(510)) ENGINE = ARCHIVE;
let $bug31036=41;
--disable_query_log
while($bug31036)
{
INSERT INTO t1(a) VALUES (REPEAT('a', 510));
dec $bug31036;
}
--enable_query_log
INSERT INTO t1(a) VALUES ('');
--disable_result_log
SELECT * FROM t1 ORDER BY a;
--enable_result_log
DROP TABLE t1;
...@@ -681,8 +681,8 @@ my_off_t azseek (s, offset, whence) ...@@ -681,8 +681,8 @@ my_off_t azseek (s, offset, whence)
/* There was a zmemzero here if inbuf was null -Brian */ /* There was a zmemzero here if inbuf was null -Brian */
while (offset > 0) while (offset > 0)
{ {
uInt size = AZ_BUFSIZE_WRITE; uInt size = AZ_BUFSIZE_READ;
if (offset < AZ_BUFSIZE_WRITE) size = (uInt)offset; if (offset < AZ_BUFSIZE_READ) size = (uInt)offset;
size = azwrite(s, s->inbuf, size); size = azwrite(s, s->inbuf, size);
if (size == 0) return -1L; if (size == 0) return -1L;
...@@ -725,11 +725,11 @@ my_off_t azseek (s, offset, whence) ...@@ -725,11 +725,11 @@ my_off_t azseek (s, offset, whence)
} }
while (offset > 0) { while (offset > 0) {
int error; int error;
unsigned int size = AZ_BUFSIZE_READ; unsigned int size = AZ_BUFSIZE_WRITE;
if (offset < AZ_BUFSIZE_READ) size = (int)offset; if (offset < AZ_BUFSIZE_WRITE) size = (int)offset;
size = azread(s, s->outbuf, size, &error); size = azread(s, s->outbuf, size, &error);
if (error <= 0) return -1L; if (error < 0) return -1L;
offset -= size; offset -= size;
} }
return s->out; return s->out;
......
...@@ -1241,8 +1241,8 @@ int ha_archive::rnd_pos(uchar * buf, uchar *pos) ...@@ -1241,8 +1241,8 @@ int ha_archive::rnd_pos(uchar * buf, uchar *pos)
DBUG_ENTER("ha_archive::rnd_pos"); DBUG_ENTER("ha_archive::rnd_pos");
ha_statistic_increment(&SSV::ha_read_rnd_next_count); ha_statistic_increment(&SSV::ha_read_rnd_next_count);
current_position= (my_off_t)my_get_ptr(pos, ref_length); current_position= (my_off_t)my_get_ptr(pos, ref_length);
(void)azseek(&archive, current_position, SEEK_SET); if (azseek(&archive, current_position, SEEK_SET) < 0)
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
DBUG_RETURN(get_row(&archive, buf)); DBUG_RETURN(get_row(&archive, buf));
} }
......
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