Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 глюки с временными таблицами  [new]
someonesomeone
Member

Откуда:
Сообщений: 39
глюки с временными таблицами
хотел было использовать новый синтаксис с курсорами, но не тут то было (Firebird 3.0.3)
вот набросал небольшой пример.
как вы думаете каков результат?

create procedure test
returns (id integer)
as
declare gtt_cursor cursor for (select id from gtt_table);
begin
  /*create global temporary table gtt_table(id integer) on commit preserve rows*/
  delete from gtt_table;
  insert into gtt_table(id) values(1);
  insert into gtt_table(id) values(2);

  open gtt_cursor;
  while (true) do
  begin
    fetch gtt_cursor into :id;
    if (row_count = 0) then
      leave;
    suspend;
  end
  close gtt_cursor;

  for select id from gtt_table into :id do suspend;
end
26 май 18, 16:00    [21442644]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
someonesomeone,

главное неявные курсоры работают стабильно и предсказуемое. А вот явные там какая-то случайная хрень.
Жди пока Влад придёт, ну или сразу пиши в трекер
26 май 18, 16:13    [21442652]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59230
А в чём собсно суть бага?
С GTT не работает или с
курсорами 0 возвращает?

P.S. Должно быть 4 записи.

Posted via ActualForum NNTP Server 1.5

26 май 18, 16:45    [21442683]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
Гаджимурадов Рустам,

там

  open gtt_cursor;
  while (true) do
  begin
    fetch gtt_cursor into :id;
    if (row_count = 0) then
      leave;
    suspend;
  end
  close gtt_cursor;


случайную белиберду выдаёт. То 1, то 2, а то и 3 записи
26 май 18, 16:57    [21442701]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59230
Если GTT заменить на обычную - корректно работает ?

Posted via ActualForum NNTP Server 1.5

26 май 18, 17:13    [21442719]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
Гаджимурадов Рустам,

нет. Походу опять стабильность курсора. Надо бы на снапшоте попробовать, Влад что-то там правил
26 май 18, 17:23    [21442726]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
Отбой. В снапшотах 3.0.4.32980 исправлено.
Походу вот это было http://tracker.firebirdsql.org/browse/CORE-5773
26 май 18, 17:31    [21442732]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
someonesomeone
Member

Откуда:
Сообщений: 39
что интересно, если удалить последнюю строчку в процедуре, то ничего не выдает
26 май 18, 21:18    [21443063]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45923

someonesomeone
если удалить последнюю строчку в процедуре, то ничего не выдает

Всё правильно. Стабильность курсора базируется на относительном счёте сейфпоинтов (минус
один от текущего, минус два от текущего и т.д.). Поэтому она глючит на запросах, которые
не создают нового сейфпоинта. Как Влад выкрутился - понятия не имею. Может, перевёл на
абсолютный счёт по номерам, может ещё что выдумал...

Posted via ActualForum NNTP Server 1.5

26 май 18, 21:32    [21443090]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
someonesomeone,

когда я проводил эксперимент без последней строчки на 3.0.3 у меня каждый раз разное количество строк было от 1 до 3.
В снапшотах вроде всё правильно работает
26 май 18, 21:49    [21443121]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45923

Симонов Денис
у меня каждый раз разное количество строк было от 1 до 3.

Это из-за delete в начале.

Posted via ActualForum NNTP Server 1.5

26 май 18, 22:06    [21443158]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
someonesomeone
Member

Откуда:
Сообщений: 39
Вышел Firebird 3.0.4, всех поздравляю!
Правда проблема с курсором обозначенная как [url=]http://tracker.firebirdsql.org/browse/CORE-5773[/url]
так и осталась, к сожалению.
10 окт 18, 19:17    [21700932]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
hvlad
Member

Откуда:
Сообщений: 9954
someonesomeone
Правда проблема с курсором обозначенная как http://tracker.firebirdsql.org/browse/CORE-5773
так и осталась, к сожалению.
Да ну
10 окт 18, 19:48    [21700957]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
someonesomeone,

что не так? Твой пример работает как ожидается в 3.0.4
10 окт 18, 19:57    [21700964]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
someonesomeone
Member

Откуда:
Сообщений: 39
ожидается:
1
2
выдает:
<null>

Даже IBExpert со мной согласен, при отладке ожидает увидеть:
1
2

:)
11 окт 18, 10:40    [21701252]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
someonesomeone
Member

Откуда:
Сообщений: 39
это без последней строчки, конечно, забыл сказать
11 окт 18, 10:41    [21701256]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
someonesomeone
Member

Откуда:
Сообщений: 39
create procedure test
returns (id integer)
as
declare gtt_cursor cursor for (select id from gtt_table);
begin
  /*create global temporary table gtt_table(id integer) on commit preserve rows*/
  delete from gtt_table;
  insert into gtt_table(id) values(1);
  insert into gtt_table(id) values(2);

  open gtt_cursor;
  while (true) do
  begin
    fetch gtt_cursor into :id;
    if (row_count = 0) then
      leave;
    suspend;
  end
  close gtt_cursor;

  -- for select id from gtt_table into :id do suspend;
end
11 окт 18, 10:43    [21701259]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
hvlad
Member

Откуда:
Сообщений: 9954
Этот 21442644 пример выдаёт 4 записи
11 окт 18, 10:46    [21701262]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
someonesomeone
Member

Откуда:
Сообщений: 39
тысяча извинений, не на том сервере проверял, респект разработчикам!
11 окт 18, 10:57    [21701278]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
someonesomeone,

и вот что самое забавное 21701259 выдаёт 2 записи 1 и 2
11 окт 18, 10:58    [21701281]     Ответить | Цитировать Сообщить модератору
 Re: глюки с временными таблицами  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 8642
someonesomeone,

бывает
11 окт 18, 10:59    [21701283]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить