"Karabas Barabas" ...
> Hi Horsun Vlad !
>
> HV> Посмотри сколько вызовов API делается при простом
> HV> IBSQL.ExecQuery - там есть что скомбинировать вместе.
>
> Я возможно глупость сейчас думаю, но нельзя ли в клиентской либе,
> так сказать, предсказывать (или подделывать) ответы сервера на эти
> многочисленные запросы ?
Дабы не порождать слухов и спекуляций, колюсь :
1. создание хендла запроса отложено до использования
этого запроса. Т.е. isc_dsql_allocate_statement
больше не лезет в сеть
2. закрытие запроса отложено до следующего пакета.
Т.е. isc_dsql_free_statement больше не дезет в сеть
3. Аналогично закрытие блоба
4. все вызовы isc_XXX_info теперь передают ответ минимально
необходимой длины, а не полной длины клиентского буфера.
Особенно хорошо это видно при работе со службами - например
IBE выделяет под ответ буфер в 32К и запрашивает результаты
(например статистику или лог бекапа\рестора) построчно.
Теперь будет возвращаться 1..80 байт (примерно), а не 32К
для каждой строки
5. isc_dsql_prepare теперь сразу запрашивает информацию о вх., вых.
пар-рах и о типе стайтмента (раньше запрашивал только о вых.).
Т.е. теперь isc_dsql_describe, isc_dsql_describe_bind и запрос
isc_info_sql_stmt_type как правило не лезут в сеть. В сеть они
полезут, если суммарный объём инф-ции о пар-рах не влазит в 32К.
Т.к. все эти ф-ции используют механизм isc_dsql_info, то см.
предыдущий пункт :)
Для работы первых 3-х пунктов необходимы новые клиент и сервер,
для работы 4-го и 5-го достаточно только нового сервера.
Достаточно ? :)
--
Хорсун Влад
--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---