Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / cursor и временная таблица / 21 сообщений из 21, страница 1 из 1
12.09.2018, 10:15
    #39701293
slay2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Сервер: LI-V6.3.3.32900 Firebird 3.0

Имеем вот такую временную таблицу:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE GLOBAL TEMPORARY TABLE obj_list (
    id_list    int NOT NULL,
    id_obj    int NOT NULL,
    n  varchar(200)
) ON COMMIT DELETE ROWS;
ALTER TABLE obj_list ADD CONSTRAINT pk_obj_list PRIMARY KEY (id_list, id_obj);



Пробуем запустить:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
execute block
returns (
    name type of column rdb$relation_fields.rdb$field_name)
as
    declare variable id_list int;
    declare variable n type of column rdb$relation_fields.rdb$relation_name;
    declare cur cursor for (
        select
            l.n
        from obj_list l
        where
            l.id_list = :id_list
    );
begin
    id_list = 1;
    n = 'RDB$FIELDS';
    merge into obj_list d
    using (
        select
            row_number() over() as id,
            rf.rdb$field_name as n
        from rdb$RELATION_FIELDS rf
        where
            rf.rdb$relation_name = :n
    ) s
    on d.id_list = :id_list and d.id_obj = s.id
    when not matched then
        insert (id_list, id_obj, n)
        values (:id_list, s.id, s.n);

    --suspend;
    open cur;
    while (true) do begin
        fetch cur into :name;
        if (row_count = 0) then
            break;
        suspend;
    end
    close cur;
end


и получаем пустой набор.

Если убрать комментарий у первого suspend, то все нормально (ну за исключением лишней первой строки)

Баг?
...
Рейтинг: 0 / 0
12.09.2018, 10:34
    #39701305
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
slay2012,

скорее всего да. Какой-то сбой в обеспечении cursor stability. В трекер новым тикетом или коммент напиши к http://tracker.firebirdsql.org/browse/CORE-3362

З.Ы. Откуда такая любовь к явным курсорам? На мой взгляд FOR SELECT в 100 раз удобнее. По крайней мере в приведённом примере ну никак не видна необходимость именно явного курсора.
...
Рейтинг: 0 / 0
12.09.2018, 10:36
    #39701310
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
slay2012,

стоп. Попробуй на текущем снапшоте ибо CORE-5773
...
Рейтинг: 0 / 0
12.09.2018, 11:05
    #39701327
slay2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Симонов ДенисЗ.Ы. Откуда такая любовь к явным курсорам? На мой взгляд FOR SELECT в 100 раз удобнее. По крайней мере в приведённом примере ну никак не видна необходимость именно явного курсора.

Так это минимально воспроизводимый пример. Реальный код намного сложнее и без курсора там тяжело обойтись. Разве что кучей повторных запросов с фильтром нужного

Симонов Денисстоп. Попробуй на текущем снапшоте ибо CORE-5773

Сейчас попробую
...
Рейтинг: 0 / 0
12.09.2018, 11:39
    #39701354
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
slay2012Сервер: LI-V6.3.3.32900 Firebird 3.0
к слову - v6.3.3 - это клиент. А сервер это V3.0.3.32900 Firebird 3.0
...
Рейтинг: 0 / 0
12.09.2018, 12:15
    #39701372
slay2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
kdvк слову - v6.3.3 - это клиент. А сервер это V3.0.3.32900 Firebird 3.0

Это ibexpert так сказал

slay2012Симонов Денисстоп. Попробуй на текущем снапшоте ибо CORE-5773

Сейчас попробую
Проверил - работает
...
Рейтинг: 0 / 0
12.09.2018, 12:45
    #39701403
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
kdvslay2012Сервер: LI-V6.3.3.32900 Firebird 3.0
к слову - v6.3.3 - это клиент. А сервер это V3.0.3.32900 Firebird 3.0Не совсем так.
6.3.X - это номер версии, возвращаемый ф-цией ISC API isc_get_client_version() для "эмуляции" gds32.dll.
Это нужно для того, чтобы обойти идиотскую * проверку наличия ф-ций Services API в IBX.

Никто не мешает тому же IBE пользоваться GetVersionEx() для определения правильного номера версии клиента.

*проверка именно идиотская - т.к., вместо того чтобы проверять наличие нужных ф-ций, - проверяется номер версии
...
Рейтинг: 0 / 0
12.09.2018, 13:07
    #39701420
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
12.09.2018 12:45, hvlad пишет:
> 6.3.X - это номер версии, возвращаемый ф-цией ISC API isc_get_client_version() для "эмуляции" gds32.dll.
> Это нужно для того, чтобы обойти идиотскую^* проверку наличия ф-ций Services API в IBX.
> Никто не мешает тому же IBE пользоваться GetVersionEx() для определения правильного номера версии клиента.
> *проверка именно идиотская - т.к., вместо того чтобы проверять наличие нужных ф-ций, - проверяется номер версии

как прокто-археолог, имеющий "щастье" копаться в этом несомненно выдающемся продукте (жизнедеятельности),
со времён доисторического материализЪма, хочу отметить: оно поддерживало и Services API от IB5.X
(в приснопамятные времена).

а то Services API, совсем не это Services API.

может быть, именно поэтому, хотя и нельзя сказать наверняка... (С)

можно конечно копнуть глубже культурного слоя, дабы удостовериться или опровергнуть наверняка, но лень...

ps: мож таки GetFileVersionInfo(), а не GetVersionEx() ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.09.2018, 13:20
    #39701429
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Мимопроходящий,

Services API до IB6 не было ни публичным, ни документированным.

Мимопроходящиймож таки GetFileVersionInfo(), а не GetVersionEx() ?Да, конечно. Писал по памяти, вспомнил не то - но хоть рядом с тем :)
...
Рейтинг: 0 / 0
12.09.2018, 13:37
    #39701446
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
12.09.2018 13:20, hvlad пишет:
> Services API до IB6 не было ни публичным, ни документированным.

не все животные равны. некоторые равнее. (С)
в те времена и Delphi, и Interbase делал Borland.

царствие ему небесное...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.09.2018, 14:24
    #39701481
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
hvlad6.3.X - это номер версии, возвращаемый ф-цией ISC API isc_get_client_version() для "эмуляции" gds32.dll.
я и говорю - клиент. Я в курсе, почему именно 6, а не 2 или 3.
...
Рейтинг: 0 / 0
12.09.2018, 14:49
    #39701516
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
kdvhvlad6.3.X - это номер версии, возвращаемый ф-цией ISC API isc_get_client_version() для "эмуляции" gds32.dll.
я и говорю - клиент.Посмотри версию клиента тем же проводником :)
...
Рейтинг: 0 / 0
12.09.2018, 16:02
    #39701586
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Понятно когда gds32.dll возвращает 6.3 чтобы прикинуться "настоящим" IB клиентом. Но когда
это же самое делает fbclient.dll, которому прикинуться уже никак...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.09.2018, 16:16
    #39701607
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
12.09.2018 16:02, Dimitry Sibiryakov пишет:
> Понятно когда gds32.dll возвращает 6.3 чтобы прикинуться "настоящим" IB клиентом. Но когда
> это же самое делает fbclient.dll, которому прикинуться уже никак...

ну а вдруг злодей какой переименовал...

кстати, из-за почему в ресурсах VERSIONINFO у fbclient.dll
отсутствует поле OriginalFilename?

я например всегда устанавливаю.
ибо встречаются "хитромудНые" ползатели...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.09.2018, 16:19
    #39701612
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Dimitry Sibiryakov,

предлагаешь 2 версии ddl-ки распространять?
...
Рейтинг: 0 / 0
12.09.2018, 16:25
    #39701620
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Симонов Дениспредлагаешь 2 версии ddl-ки распространять?

Предлагаю прекратить уже распространять gds32.dll.
Но, учитывая любовь разработчиков к костылям, вангую strcmp(GetModuleName(), "gds32.dll").
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.09.2018, 20:14
    #39701729
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Dimitry SibiryakovСимонов Дениспредлагаешь 2 версии ddl-ки распространять?

Предлагаю прекратить уже распространять gds32.dll...
А как же Delphi и их ibx?
...
Рейтинг: 0 / 0
12.09.2018, 20:21
    #39701730
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
IBX, к счастью, уже сдохло. FireDAC использует fbclient.dll.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.09.2018, 20:26
    #39701731
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Dimitry SibiryakovПредлагаю прекратить уже распространять gds32.dll
его давно никто не распространяет. Есть instclient с опцией сгенерить gds32 из fbclient. И соответствующая галка в инсталляторе. Тогда уж надо выкидывать оный instclient.
...
Рейтинг: 0 / 0
12.09.2018, 21:10
    #39701736
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
Dimitry Sibiryakov,

вообще-то не сдохло. Но под новые фичи Firebird они его не затачивают
...
Рейтинг: 0 / 0
12.09.2018, 21:17
    #39701739
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor и временная таблица
dimitrЕсть instclient с опцией сгенерить gds32 из fbclient. И соответствующая галка в
инсталляторе. Тогда уж надо выкидывать оный instclient.

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


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