"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-го достаточно только нового сервера.

   Достаточно ? :)

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



--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить