Re: Глюки в рекурсивном запросе

2011-12-12 Пенетрантность Khorsun Vlad

Tonal ...

Наткнулся на такую глючу.
В запросе ниже


   Хорошо бы, чтобы DLL мог выполниться. На новой пустой БД.

--
Хорсун Влад

PS http://tracker.firebirdsql.org/browse/CORE-3683 - не оно ? 





Re: Глюки в рекурсивном запросе

2011-12-12 Пенетрантность Tonal
12.12.2011 21:01, Khorsun Vlad пишет:
 Tonal ...
 Наткнулся на такую глючу.
Хорошо бы, чтобы DLL мог выполниться. На новой пустой БД.
--DDL:
CREATE DOMAIN D_ID AS integer NOT NULL;
CREATE DOMAIN D_ID_OR_NULL AS integer;

CREATE TABLE SYMPTOMS (
  ID D_ID,
  PARENT_ID D_ID_OR_NULL,
  CONSTRAINT PK_SYMPTOMS PRIMARY KEY (ID),
  CONSTRAINT FK_SYMP2SYM_ID FOREIGN KEY (PARENT_ID) REFERENCES SYMPTOMS (ID)
);

--Datas
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('450797', null);
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('450798', '450797');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('450799', '450798');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('450800', '450798');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('450801', '450797');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('450802', '450801');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('450803', '450801');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('645590', '450797');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('645591', '645590');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('645592', '645590');
INSERT INTO SYMPTOMS (ID, PARENT_ID) VALUES ('645593', '645592');

 PS http://tracker.firebirdsql.org/browse/CORE-3683 - не оно ?
Похоже. Только в моём случае создание уникальности по обоим полям не влияет.
Создавал ткую:
alter table SYMPTOMS add constraint UNQ_ID_PARENT unique (ID, PARENT_ID)

-- 
Александр Замараев



Re: Глюки в рекурсивном запросе

2011-12-12 Пенетрантность Tonal
Ещё странность на похожем запросе:
Добавим в корневой подзапрос неименованную вычисляемую колонку
with recursive
SYM as (
  select sr1.ID, sr1.PARENT_ID, count(*) --  Добавили count(*)
  from SYMPTOMS sr1
  group by 1, 2
),
TREE as (
  select 1 as LEV, sp.ID, sp.PARENT_ID
  from SYM sp where sp.ID = 450797
  union all
  select t.LEV + 1, st.ID, st.PARENT_ID
  from SYM st inner join TREE t on st.PARENT_ID = t.ID
)
select
  t.LEV, t.ID
from TREE t

Получаем ошибку:
Message: isc_dsql_prepare failed

SQL Message : -104
Invalid token

Engine Code: 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Invalid command
no column name specified for column number 3 in derived table SP

Ежели колонку проименовать запрос выполнится.
Вроде бы не было ограничений про неименованные вычисляемые поля в
подзапросах.
Или я опять что-то пропустил?

-- 
Александр Замараев



Re: Глюки в рекурсивном запросе

2011-12-12 Пенетрантность Dmitry Yemanov

13.12.2011 8:12, Tonal пишет:


Похоже.


Дык проверь. Скачай последний снапшот 3.0, создай новую базу и выполни 
свой тестовый пример.



--
Дмитрий Еманов