From: <Sch...@t-...> - 2000-10-24 12:32:03
|
Hi, here is another test, be careful, it will crash the engine. I will have no time the next two weeks to look further into it, so here is what I have found out so far: The test will output the following plan if it lives long enough: PLAN SORT (MERGE (SORT (MG NATURAL)(FM MAINMENU NATURAL) PLAN JOIN (FM S NATURAL1,FM M INDEX (RDB$FOREIGN6)) PLAN ,è÷¿çè*F dsql/dsql.c:get_rsb_item apparently tries to read behind the end of of the explain buffer to get a relation name. I seems to me that there is a missing end in the buffer returned by isc_request_info, but I'm not sure about this. Here is the buffer and my interpretation: 1 BEGIN 2 TYPE 6 SORT 1 BEGIN 2 TYPE 8 BOOLEAN 1 BEGIN 2 TYPE 11 MERGE 2 COUNT 2 1 BEGIN 2 TYPE 6 SORT 1 BEGIN 3 RELATION 2 LENGTH 2 77 M 71 G 2 TYPE 4 SEQUENTIAL 0 END 0 END 1 BEGIN 2 TYPE 6 SORT 1 BEGIN 2 TYPE 9 UNION 2 COUNT 2 1 BEGIN 3 RELATION 11 LENGTH 11 70 F 77 M 32 77 M 65 A 73 I 78 N 77 M 69 E 78 N 85 U 2 TYPE 4 SEQUENTIAL 0 END 1 BEGIN 2 TYPE 5 CROSS 2 COUNT 2 1 BEGIN 3 RELATION 4 LENGTH 4 70 F 77 M 32 83 S 2 TYPE 4 SEQUENTIAL 0 END 1 BEGIN 2 TYPE 8 BOOLEAN 1 BEGIN 3 RELATION 4 LENGTH 4 70 F 77 M 32 77 M 2 TYPE 2 INDEXED 4 INDEX 12 LENGTH 12 82 R 68 D 66 B 36 $ 70 F 79 O 82 R 69 E 73 I 71 G 78 N 54 6 0 END 0 END 0 END 0 END 0 END 0 END 0 END ^here should be another END cheers Frank ----------------------------------- /* ** Name: BUG_117138 ** Series: BUGS ** Meta-Series: ** Dependencies: None ** Description: This test will kill IB ** Expected result: See source ** ** Author: FSG ** Bugs: This test crashes the server. ** Change history: ** */ $ CREATE cf_test.sql create database "WHERE_GDB:cf.gdb"; CREATE DOMAIN D_GLOBAL_ID AS VARCHAR(15) NOT NULL ; CREATE DOMAIN D_LONG_DESC AS VARCHAR(200); CREATE DOMAIN D_GROUP AS INTEGER DEFAULT 0 CHECK ((value is not null)); CREATE DOMAIN D_GLOBAL_REF AS VARCHAR(15); CREATE DOMAIN D_ICON AS SMALLINT CHECK (((value is null) or (value between 0 and 8))); CREATE TABLE KNOWLEDGESTREAMS ( STREAM_ID D_GLOBAL_ID NOT NULL, NAME D_LONG_DESC, CONTENT_GROUPS D_GROUP, CONSTRAINT PK_KNOWLEDGESTREAMS PRIMARY KEY (STREAM_ID) ); CREATE TABLE MAINMENU ( MENU_ID D_GLOBAL_ID NOT NULL, PARENT_ID D_GLOBAL_REF, DESCRIPTION D_LONG_DESC, CONTENT_GROUP D_GROUP NOT NULL, ICON D_ICON, CONSTRAINT PK_MAINMENU PRIMARY KEY (MENU_ID) ); ALTER TABLE MAINMENU ADD CONSTRAINT FK_MAINMENU FOREIGN KEY (PARENT_ID) REFERENCES MAINMENU(MENU_ID) ON DELETE CASCADE ON UPDATE CASCADE; CREATE TABLE MENU_GROUPS ( MENU_ID D_GLOBAL_ID NOT NULL, CONTENT_ID D_GLOBAL_ID NOT NULL ); CREATE INDEX MENU_GROUPS_IDX1 ON MENU_GROUPS (MENU_ID); CREATE INDEX MENU_GROUPS_IDX2 ON MENU_GROUPS (CONTENT_ID); CREATE TABLE STREAMMENU ( STREAM_ID D_GLOBAL_ID NOT NULL, PARENT D_GLOBAL_ID NOT NULL, CONSTRAINT PK_STREAMMENU PRIMARY KEY (PARENT, STREAM_ID) ); ALTER TABLE STREAMMENU ADD CONSTRAINT FK_STREAMMENU_PARENT FOREIGN KEY (PARENT) REFERENCES MAINMENU(MENU_ID) ON DELETE CASCADE; ALTER TABLE STREAMMENU ADD CONSTRAINT FK_STREAMMENU_STREAM_ID FOREIGN KEY (STREAM_ID) REFERENCES KNOWLEDGESTREAMS(STREAM_ID) ON DELETE CASCADE; CREATE VIEW FULLMENU ( CODE, PARENT, DESCRIPTION, LINK, CONTENT_GROUP ) AS select menu_id,parent_id,description,cast(null as varchar(100)),content_group from mainmenu union all select m.stream_id, m.parent, s.name ,cast('/servlets/uk.co.wmeng.intelus.KnowledgeStream?ACTION=DISPLAY&ID=' || s.stream_id as varchar(100)),content_groups from streammenu m join knowledgestreams s on s.stream_id = m.stream_id ; /* And now IB will die and take the TCS with it */ set plan; Select distinct fm.code, fm.Description, fm.link from fullmenu fm join menu_groups mg on fm.code = mg.menu_id; exit; $ ISQL -e -m -input cf_test.sql $ DELETE cf_test.sql $ RUN drop_gdb WHERE_GDB:cf.gdb |