Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюки с временными таблицами / 21 сообщений из 21, страница 1 из 1
26.05.2018, 16:00
    #39650364
someonesomeone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
глюки с временными таблицами
хотел было использовать новый синтаксис с курсорами, но не тут то было (Firebird 3.0.3)
вот набросал небольшой пример.
как вы думаете каков результат?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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
...
Рейтинг: 0 / 0
26.05.2018, 16:13
    #39650366
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
someonesomeone,

главное неявные курсоры работают стабильно и предсказуемое. А вот явные там какая-то случайная хрень.
Жди пока Влад придёт, ну или сразу пиши в трекер
...
Рейтинг: 0 / 0
26.05.2018, 16:45
    #39650376
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
А в чём собсно суть бага?
С GTT не работает или с
курсорами 0 возвращает?

P.S. Должно быть 4 записи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
26.05.2018, 16:57
    #39650379
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Гаджимурадов Рустам,

там

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  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 записи
...
Рейтинг: 0 / 0
26.05.2018, 17:13
    #39650380
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Если GTT заменить на обычную - корректно работает ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
26.05.2018, 17:23
    #39650383
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Гаджимурадов Рустам,

нет. Походу опять стабильность курсора. Надо бы на снапшоте попробовать, Влад что-то там правил
...
Рейтинг: 0 / 0
26.05.2018, 17:31
    #39650384
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Отбой. В снапшотах 3.0.4.32980 исправлено.
Походу вот это было http://tracker.firebirdsql.org/browse/CORE-5773
...
Рейтинг: 0 / 0
26.05.2018, 21:18
    #39650450
someonesomeone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
что интересно, если удалить последнюю строчку в процедуре, то ничего не выдает
...
Рейтинг: 0 / 0
26.05.2018, 21:32
    #39650452
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
someonesomeoneесли удалить последнюю строчку в процедуре, то ничего не выдает

Всё правильно. Стабильность курсора базируется на относительном счёте сейфпоинтов (минус
один от текущего, минус два от текущего и т.д.). Поэтому она глючит на запросах, которые
не создают нового сейфпоинта. Как Влад выкрутился - понятия не имею. Может, перевёл на
абсолютный счёт по номерам, может ещё что выдумал...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
26.05.2018, 21:49
    #39650458
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
someonesomeone,

когда я проводил эксперимент без последней строчки на 3.0.3 у меня каждый раз разное количество строк было от 1 до 3.
В снапшотах вроде всё правильно работает
...
Рейтинг: 0 / 0
26.05.2018, 22:06
    #39650460
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Симонов Денису меня каждый раз разное количество строк было от 1 до 3.

Это из-за delete в начале.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.10.2018, 19:17
    #39715741
someonesomeone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Вышел Firebird 3.0.4, всех поздравляю!
Правда проблема с курсором обозначенная как http://tracker.firebirdsql.org/browse/CORE-5773
так и осталась, к сожалению.
...
Рейтинг: 0 / 0
10.10.2018, 19:48
    #39715761
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
someonesomeoneПравда проблема с курсором обозначенная как http://tracker.firebirdsql.org/browse/CORE-5773
так и осталась, к сожалению.Да ну
...
Рейтинг: 0 / 0
10.10.2018, 19:57
    #39715767
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
someonesomeone,

что не так? Твой пример работает как ожидается в 3.0.4
...
Рейтинг: 0 / 0
11.10.2018, 10:40
    #39715958
someonesomeone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
ожидается:
1
2
выдает:
<null>

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

:)
...
Рейтинг: 0 / 0
11.10.2018, 10:41
    #39715961
someonesomeone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
это без последней строчки, конечно, забыл сказать
...
Рейтинг: 0 / 0
11.10.2018, 10:43
    #39715963
someonesomeone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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
...
Рейтинг: 0 / 0
11.10.2018, 10:46
    #39715964
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
Этот 21442644 пример выдаёт 4 записи
...
Рейтинг: 0 / 0
11.10.2018, 10:57
    #39715970
someonesomeone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
тысяча извинений, не на том сервере проверял, респект разработчикам!
...
Рейтинг: 0 / 0
11.10.2018, 10:58
    #39715972
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
someonesomeone,

и вот что самое забавное 21701259 выдаёт 2 записи 1 и 2
...
Рейтинг: 0 / 0
11.10.2018, 10:59
    #39715974
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
глюки с временными таблицами
someonesomeone,

бывает
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / глюки с временными таблицами / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]