Hi Heikki,
The query doesn't crash anymore, but the ORDER BY doesn't work at all (I
tested it on a table with data).
How-to-repeat :
INSERT INTO threadhardwarefr13 (pseudo,date,numreponse) VALUES
('kytine','2002-09-18 20:37:31','1360'),('joce','2002-09-18
20:42:20','1361'),('kytine','2002-09-18 20:46:32','1362');
mysql> SELECT LOWER(pseudo),date,numreponse FROM threadhardwarefr13 WHERE
numeropost='0' ORDER BY numreponse DESC LIMIT 0,3;
+---------------+---------------------+------------+
| LOWER(pseudo) | date | numreponse |
+---------------+---------------------+------------+
| kytine | 2002-09-18 20:37:31 | 1360 |
| joce | 2002-09-18 20:42:20 | 1361 |
| kytine | 2002-09-18 20:46:32 | 1362 |
+---------------+---------------------+------------+
3 rows in set (0.00 sec)
mysql> SELECT LOWER(pseudo),date,numreponse FROM threadhardwarefr13 WHERE
numeropost='0' ORDER BY numreponse ASC LIMIT 0,3;
+---------------+---------------------+------------+
| LOWER(pseudo) | date | numreponse |
+---------------+---------------------+------------+
| kytine | 2002-09-18 20:37:31 | 1360 |
| joce | 2002-09-18 20:42:20 | 1361 |
| kytine | 2002-09-18 20:46:32 | 1362 |
+---------------+---------------------+------------+
3 rows in set (0.00 sec)
Regards,
Jocelyn
----- Original Message -----
From: "Heikki Tuuri" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Wednesday, September 25, 2002 7:09 PM
Subject: Re: InnoDB: Assertion failure in file ha_innodb.cc line 2180...
> Jeremy, Jocelyn,
>
> can you try the following this patch?
>
> The flag which bans MySQL using a descending cursor to calculate
>
> column LIKE 'jhghj%' ORDER BY column DESC
>
> queries was apparently put to the wrong place in ha_innodb.h. The
assertion
> I had added to 4.0.4 revealed this hidden bug.
>
> The patch fixes also the crash submitted by Jocelyn Fournier earlier
today:
> ...
> CREATE TABLE `threadhardwarefr13` (
> `numeropost` mediumint(8) unsigned NOT NULL default '0',
> `numreponse` int(10) unsigned NOT NULL auto_increment,
> `pseudo` varchar(35) NOT NULL default '',
> `date` datetime NOT NULL default '0000-00-00 00:00:00',
> PRIMARY KEY (`numeropost`,`numreponse`),
> UNIQUE KEY `numreponse` (`numreponse`),
> KEY `pseudo` (`pseudo`,`numeropost`)
> ) TYPE=InnoDB;
>
> SELECT LOWER(pseudo),date FROM threadhardwarefr13 WHERE
numeropost='166498'
> ORDER BY numreponse DESC LIMIT 0,3;
>
> -> assertion failure at line 2180 of ha_innodb.cc
> ...
>
> I have to check why MySQL uses that flag in Jocelyn's query. It does not
> have a LIKE 'gggg%' clause.
>
> Thank you for the bug reports,
>
> Heikki
>
>
> ChangeSet
> 1.1317 02/09/25 19:02:46 [EMAIL PROTECTED] +2 -0
> ha_innodb.cc, ha_innodb.h:
> Move to the right place the flag which bans use of
HA_READ_PREFIX_LAST;
> add
> diagnostics and remove the assertion on line 2180 of ha_innodb.cc
>
> sql/ha_innodb.cc
> 1.110 02/09/25 19:02:06 [EMAIL PROTECTED] +6 -1
> Move to the right place the flag which bans use of
HA_READ_PREFIX_LAST;
> add
> diagnostics and remove the assertion on line 2180 of ha_innodb.cc
>
> sql/ha_innodb.h
> 1.44 02/09/25 19:02:03 [EMAIL PROTECTED] +2 -1
> Move to the right place the flag which bans use of
HA_READ_PREFIX_LAST;
> add
> diagnostics and remove the assertion on line 2180 of ha_innodb.cc
>
> # This is a BitKeeper patch. What follows are the unified diffs for the
> # set of deltas contained in the patch. The rest of the patch, the part
> # that BitKeeper cares about, is below these diffs.
> # User: heikki
> # Host: hundin.mysql.fi
> # Root: /home/heikki/mysql-4.0
>
> --- 1.109/sql/ha_innodb.cc Tue Sep 24 17:11:56 2002
> +++ 1.110/sql/ha_innodb.cc Wed Sep 25 19:02:06 2002
> @@ -2179,7 +2179,12 @@
> case HA_READ_AFTER_KEY: return(PAGE_CUR_G);
> case HA_READ_BEFORE_KEY: return(PAGE_CUR_L);
> case HA_READ_PREFIX: return(PAGE_CUR_GE);
> - case HA_READ_PREFIX_LAST: ut_a(0); return(PAGE_CUR_LE);
> + case HA_READ_PREFIX_LAST:
> + ut_print_timestamp(stderr);
> + fprintf(stderr,
> + " InnoDB: Warning: Using HA_READ_PREFIX_LAST\n");
> + return(PAGE_CUR_LE);
> +
> /* InnoDB does not yet support ..PREFIX_LAST!
> We have to add a new search flag
> PAGE_CUR_LE_OR_PREFIX to InnoDB. */
>
> --- 1.43/sql/ha_innodb.h Fri Sep 20 23:26:10 2002
> +++ 1.44/sql/ha_innodb.h Wed Sep 25 19:02:03 2002
> @@ -82,6 +82,7 @@
> HA_PRIMARY_KEY_IN_READ_INDEX |
> HA_DROP_BEFORE_CREATE |
> HA_NO_PREFIX_CHAR_KEYS |
> + HA_NOT_READ_PREFIX_LAST |
> HA_TABLE_SCAN_ON_INDEX),
> last_dup_key((uint) -1),
> start_of_scan(0)
> @@ -96,7 +97,7 @@
> ulong index_flags(uint idx) const
> {
> return (HA_READ_NEXT | HA_READ_PREV | HA_READ_ORDER |
> - HA_KEY_READ_ONLY | HA_NOT_READ_PREFIX_LAST);
> + HA_KEY_READ_ONLY);
> }
> uint max_record_length() const { return HA_MAX_REC_LENGTH; }
> uint max_keys() const { return MAX_KEY; }
>
>
> ----- Original Message -----
> From: "Jeremy Zawodny" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
> Sent: Wednesday, September 25, 2002 6:19 PM
> Subject: InnoDB: Assertion failure in file ha_innodb.cc line 2180...
>
>
> > Heikki and others,
> >
> > One of my slaves is dying frequently. It runs MySQL 4.0.4 (pulled
> > yesterday) on FreeBSD. I'm getting an assertion failure on line 2180,
> > which appears to be:
> >
> > case HA_READ_PREFIX_LAST: ut_a(0); return(PAGE_CUR_LE);
> >
> > What can I do to help debug this?
> >
> > Thanks,
> >
> > Jeremy
> > --
> > Jeremy D. Zawodny | Perl, Web, MySQL, Linux Magazine, Yahoo!
> > <[EMAIL PROTECTED]> | http://jeremy.zawodny.com/
> >
> > MySQL 3.23.51: up 50 days, processed 1,063,578,875 queries (244/sec.
avg)
>
>
>
>
>
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php