powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Асинхронное API для клиента
54 сообщений из 54, показаны все 3 страниц
Асинхронное API для клиента
    #40133763
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гугл не помог. Существуют ли в природе? Если нет, то планируется ли?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133767
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не существует. В пределах официального проекта не планируется.

Как ты его себе представляешь и зачем? Просто несколько коннектов в разных
потоках не помогут?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133770
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как раз ради того, чтобы не делать по коннекту на поток. С асинхронным API возможно работать с кучей соединений даже в одном потоке. А если ещё и язык поддерживает асинхронные операции, то использование такого API почти ничем не отличается от использования обычного API.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133773
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenС асинхронным API возможно работать с кучей соединений даже в одном потоке. А
если ещё и язык поддерживает асинхронные операции, то использование такого API
почти ничем не отличается от использования обычного API.

Совершенно отличается. Одна только "неприкосновенность буферов до реального
выполнения операции" способна сорвать крышу каждому первому дельфину.

Когда ты последний раз работал с реально асинхронным вводом-выводом, например?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133775
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про неприкосновенность буферов не понял.
Последний раз работал на этой неделе. Просто задействовал асинхронное api для файловых операций. Оно работает из коробки и не требует выдающихся умений у программиста )
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133789
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Не существует. В пределах официального проекта не планируется.

Как ты его себе представляешь и зачем? Просто несколько коннектов в разных
потоках не помогут?..


Видимо, речь идёт о совместимости с асинхронными конструкциями async / await некоторых современных языков программирования.
Наверняка такие библиотеки имеются. Как у них организована асинхронность обращений к FB - это другой вопрос. В простейшем случае могут создавать отдельный поток на каждое обращение к БД, чтобы не блокировать главный поток.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133803
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ArtDen
А если ещё и язык поддерживает асинхронные операции, то использование такого API почти ничем не отличается от использования обычного API.


Сегодня выспался и понял, что вчера ночью неправильно написал. Хотел написать "использование высокоуровневой обёртки вокруг такого API почти ничем не отличается от использования обычного высокоуровнего API"

Т.е. в итоге программист уже использует что-то вроде
Код: plaintext
1.
2.
3.
4.
db = connect(blabla).await
tr = db.create_transaction().await
st = tr.execute("select blabla").await
row = st.fetch().await
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133807
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ArtDen

Т.е. в итоге программист уже использует что-то вроде


а какой профит? сервер же не будет всё это делать параллельно.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133811
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компилятор такие конструкции компилириует таким образом, что на при ожидании await рантайм переключит выполнение этого потока на другую задачу, которая уже завершила свою асинхронную операцию (вышла из await) и готова продолжать выполнение. Таким образом всё выполняется как-бы параллельно. В реальности используется не один поток, а больше (обычно по количеству ядер или кратно в несколько раз) и поэтому без создания 100500 потоков можно работать с большим количеством задач и соединений к базе (десятки тысяч). Подобную возможность завезли уже в кучу языков. Даже в C++ добавили в последнем стандарте.

Но это обсуждение уже выходит за рамки моего вопроса. Ответ был получен. Всем спасибо )
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133818
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenпри ожидании await рантайм переключит выполнение этого потока на другую задачу,
которая уже завершила свою асинхронную операцию (вышла из await) и готова
продолжать выполнение.

Какая это задача? В твоём примере таких не наблюдается, всё выполняется строго
последовательно, полностью синхронно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133819
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я показал просто пример использования API. В реальном приложении будет что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
asynch task1:
    db = connect_db(blabla).await
    tr = db.create_transaction().await
    st = tr.execute("select blabla").await
    row = st.fetch().await

asynch task2:
    db = connect_db(blabla).await
    tr = db.create_transaction().await
    st = tr.execute("select blabla").await
    row = st.fetch().await

asynch task3:
    file = open(filename).await
    file_data = file.read_all().await

asynch task4:
   socket = connect_socket(blabla).await

asynch task5:

... и так далее

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

В сети много инфы для чего нужен и как устроен этот механизм в разных языках и фреймворках
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133820
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё там много котиков и предложений увеличить пенис. Толку-то?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133821
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так node-firebird-driver асинхронный. работает как часы ))
Код: javascript
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.
export const loadRDBFields = async (attachment: Attachment, transaction: Transaction) => {
  const rs = await attachment.executeQuery(transaction, `
    SELECT 
      TRIM(rdb$field_name) AS rdb$field_name,
      CAST(rdb$validation_source AS VARCHAR(255)) AS rdb$validation_source,
      CAST(rdb$computed_source AS VARCHAR(255)) AS rdb$computed_source, 
      CAST(rdb$default_source AS VARCHAR(255)) AS rdb$default_source, 
      rdb$field_length,
      rdb$field_scale,
      rdb$field_type,
      rdb$field_sub_type,
      rdb$system_flag,
      rdb$null_flag,
      rdb$character_length,
      rdb$collation_id,
      rdb$character_set_id,
      rdb$field_precision
    FROM 
      rdb$fields
  `);
  try {
    return (await rs.fetchAsObject<IRDBField>()).reduce( (p, r) => (p[r.RDB$FIELD_NAME] = r, p), {} as IRDBFields);
  } finally {
    await rs.close();
  }
};
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133822
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если он использует синхронное родное API, то он не асинхронный, а только имитирует асинхронность. В node.js без асинхронности никуда, поэтому даже имитация сойдёт.

Но у них там написано: There is also plan to create a socket-based (pure Node.js) driver.

Так что возможно что будет полноценный асинхронный драйвер для ноды

Если родное API не поддерживает асинхронность, то единственный способ сделать асинхронный клиент - это написать сетевой обмен самостоятельно.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133826
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenединственный способ сделать асинхронный клиент - это написать сетевой обмен
самостоятельно.

Создателям драйверов для Явы, Питона и С-шарпа это удалось, так что и остальным
можно брать флаг в руки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133827
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо будет посмотреть их реализацию. Интересно, где описание сетевого обмена брали? Смотрели в исходниках fb или где-то доки есть?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133828
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133829
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.

Сразу замечание. Там не написано как числа передаются: в BE или LE?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133868
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и вызывает вопросы актуальность. Например тут: https://firebirdsql.org/file/documentation/html/en/firebirddocs/wireprotocol/firebird-wire-protocol.html#wireprotocol-databases-attach-attachment
Не верится, что пароль открытым текстом по сети передаётся. Похоже лучше смотреть готовую реализацию
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133895
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

это зависит от плагина аутентификации
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133906
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже до появления SRP пароль не передавался в открытом виде - только его хеш.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133979
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что насчёт BE и LE? Если посмотреть сишарпоский вариант, то там байты для отправки по сети из числа типа int32 получают вот так:
Код: c#
1.
2.
3.
4.
public static byte[] EncodeInt32(int value)
{
	return BitConverter.GetBytes(IPAddress.NetworkToHostOrder(value));
}


(даже тип IPAddress для этого задействовали )) )

Я догадываюсь, то это означает BE, но хочется уточнить )
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40133982
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
А что насчёт BE и LE?


Для локального протокола (XNET) нет преобразования.
Для удалёного (INET) - числа передаются в сетевом порядке (htonl, ntohl)

PS Смотри src\remote\protocol.cpp и src\common\xdr.cpp
там ответы на 99% вопросов о протоколе.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134097
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad, неподготовленному глазу проще смотреть исходники не fb, а сторонних драйверов, т.к. они заточены только под одну задачу - работа в качестве клиента fb.
Сегодня потратил полдня в попытке понять почему сервер не отвечает на даже первую посылку. Слава богу что по сниферу понял, что тип Buffer надо "добивать" в конце нулями до длины кратной 4 (( А ведь тут об этом вообще не слова. А я поленился посмотреть как это сделано в csharp-ском драйвере, на который сейчас ориентируюсь
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134107
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это базовая спецификация XDR.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134135
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По протоколам непонятно. Будет FB3 работать с 10-м протоколом или нет? Если нет, то какой минимальный протокол указывать для FB3?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134146
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам же и отвечаю: с 10м протоколом 3й FB не работает. Рвёт связь с ответом OP_REJECTED без объяснения причин
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134150
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все современные версии ФБ поддерживают от протокола 10 (включительно) и выше. Так что должно работать. Он тебе прямо на op_connect возвращает op_reject? Если да, то покажи содержимое op_connect.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134154
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если только в таком виде
запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
00 00 00 01 00 00 00 13 00 00 00 03 00 00 00 01 
00 00 00 16 2F 76 61 72 2F 64 61 74 61 62 61 73 
65 73 2F 64 62 31 2E 66 64 62 00 00 00 00 00 01 
00 00 01 31 09 06 53 59 53 44 42 41 08 03 53 72 
70 0A 03 53 72 70 07 FF 00 39 41 41 34 46 30 38 
41 31 39 41 34 31 36 31 30 31 35 43 42 34 36 41 
44 43 35 36 39 34 34 39 34 32 39 32 42 33 35 34 
39 38 44 33 32 36 34 38 46 31 35 38 33 36 33 43 
36 33 36 31 38 37 34 42 41 46 42 43 45 32 43 36 
37 32 45 34 31 37 35 30 35 36 43 38 43 30 31 44 
33 42 46 34 39 44 30 32 43 39 42 42 30 33 32 42 
35 38 44 44 35 36 46 38 44 35 39 37 35 35 43 39 
42 44 30 43 32 36 34 32 39 34 42 43 30 34 37 45 
30 36 34 46 33 42 31 33 37 39 32 36 38 33 35 36 
39 35 42 45 30 33 33 32 30 33 30 39 41 44 44 41 
39 36 38 39 33 30 45 46 41 45 37 45 45 38 34 42 
37 36 31 33 39 35 31 37 46 45 42 35 43 31 30 43 
33 38 35 41 33 44 46 34 34 30 44 42 32 42 39 35 
31 30 32 43 39 36 41 30 31 34 31 32 31 33 39 46 
34 31 44 34 43 33 37 32 41 31 30 38 36 45 32 33 
42 36 44 39 43 43 32 07 03 01 30 37 0B 04 01 00 
00 00 01 05 61 72 74 79 6F 04 08 64 65 6E 69 73 
70 63 32 06 00 00 00 00 00 00 00 0A 00 00 00 01 
00 00 00 00 00 00 00 05 00 00 00 02 

Ответ
Код: plaintext
00 00 00 04 


В запросе указываю плагин аутентификации Srp и список плагинов тоже Srp, шифрование вкл. Если же в запросе перечисляю протоколы с 10 по 17, то сервер отвечает нормально с OP_COND_ACCEPT

FB V3.0.7.33374
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134158
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10-й протокол это функциональность ФБ 1.5. Какое там шифрование или Srp?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134159
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
В запросе указываю плагин аутентификации Srp
... который появился, как бы не в десятой версии протокола.
Или вы считаете, что можно скрестить лучшее из двух миров и ходить к новому серверу со старой версией протокола и новыми плагинами?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134163
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я без понятия когда появился Srp. Гугл не помогает. И вообще по версиям протоколов fb гугл умалчивает. Видимо не знаю по каким словам гуглить ))

Так в какой версии появился Srp?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134164
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
Я без понятия когда появился Srp. Гугл не помогает.
Зато помогает вдумчивое чтение.
Если описаниe протокола , которое вам рекомендовали, прямо во введении указывает, что описывает 10-ю и, частично, 11-ю версии протокола, не содержит ничего про плагины и шифрование, то, вероятно, будет алогично, указывать "какие-то там плагины" в этой версии протокола?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134167
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov , хорошо, что хоть какое-то описание протокола есть. Но в целом оно малополезное и может служить лишь информацией для краткого ознакомления. Но что-то делать по этому описанию не имеет смысла.
В нём про аутентификацию написано только 3 слова: "Buffer User identification". И больше нигде ничего ни слова про это не упоминается. Какие из этого выводы можно делать мне не понятно.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134177
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда можно пошариться по исходникам, обнаружить protocol.h и, типа, с удивлением узнать, что:
Код: plaintext
1.
// Protocol 13 has support for authentication plugins (op_cont_auth).

А если читать примечания к выпуску , то окажется, что: "From version 3 onward, Firebird’s architecture supports plug-ins."
И снова вдумчивое чтение позволяет делать обобщения невиданной глубины.
Сарказм, если что.

P.S.
Вы правда думаете, что существует руководство для начинающих "Как правильно делать собственную реализацию сетевого протокола Firebird"?
Или, всё-таки, надо сопоставить ваши хотелки с тем бюджетом времени, которые вы готовы потратить на ещё одну реализацию?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134192
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно много где рыться и много чего обнаружить, даже то, о чём писал Dimitry Sibiryakov )) Я лишь пытаюсь реализовать хотя бы подключение с аутентификацией по готовым решениям, упрощая всё до как мне кажется необходимого минимума. И соответственно удивляюсь, что с моей точки зрения всё идёт не по плану
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40134303
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Никогда и ничего не доводи до абсурда, ибо человек, желающий трапезовать поздно вечером, рискует трапезовать рано по утру".
Не надо делать априорных предположений там, где у вас нет вообще никакого опыта.
Если получение опыта требует (много) времени - сопоставьте тот бюджет, который вы готовы потратить и тут хотелку, которая вам, типа, нужна.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135052
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточню. Statement можно переиспользовать много раз после op_allocate_statement? Не обязательно каждый раз заново аллоцировать новый statement (и освобождать предыдущий) для выполнения нового запроса?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135073
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135082
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но закрывать курсор (op_free_statement + DSQL_close) перед новым prepare необходимо? Или это не обязательно?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135089
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

обязательно
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135325
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна консультация по op_fetch_response.
1) Может ли сервер прислать ответ с count > 1 (под count имеется ввиду второй параметр)
2) После op_fetch сервер отвечает несколькими op_fetch_response, которые клиент должен вычитывать без отправки доп. команд серверу?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135341
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
получаешь ровно столько же op_fetch_response, в каждом из них msg_count == 1

поправлюсь - можешь получить меньше, если курсор закончился посередине пачки. В последнем op_fetch_response будет msg_count == 0 (признак EOF).
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135342
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, случайно вместо ответа затер предыдущее сообщение :-)

ArtDen
Нужна консультация по op_fetch_response.
1) Может ли сервер прислать ответ с count > 1 (под count имеется ввиду второй параметр)
2) После op_fetch сервер отвечает несколькими op_fetch_response, которые клиент должен вычитывать без отправки доп. команд серверу?

1) Нет. Ты отправляешь op_fetch с msg_count > 0, получаешь ровно столько же op_fetch_response, в каждом из них msg_count == 1.
2) Строго говоря, не обязательно. Просто чтобы обработать ответ на свою доп. команду, тебе все равно придется вычитать все op_fetch_response из буфера. Но если сильно хочется запросить новую пачку записей до вычитывания предыдущих - почему нет.
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135344
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. отправляя op_fetch с msg_count, я гарантированно получаю op_fetch_response в количестве не более чем msg_count (каждое с msg_count == 1) ?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135368
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Повозившись в отладке, я идею понял так: после отправки op_fetch, я всегда вычитываю все ответы op_fetch_response пока не придёт ответ с msg_count = 0. Причём если у последнего ответа status == 100, то данные в курсоре закончились. А если status == 0, то данные ещё есть и их можно запросить через очередной op_fetch

Это правильно?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135393
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, все верно
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135419
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжаю мучать ) Хочу понять, когда стоит вызывать op_free_statement с DSQL_close. Понятно, что после выполнения запроса select точно надо. Но если, например, 1) был op_prepare_statement с select, но до op_execute дело не дошло или 2) было выполнение запроса с insert, update или delete?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135436
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenХочу понять, когда стоит вызывать op_free_statement с DSQL_close.

В соответствующей функции API. В нём по-любому должна быть функция закрытия
курсора. Или ты хочешь делать это автоматически после вытаскивания всего
резалт-сета? Тогда не забудь удостовериться, что он однонаправленный и не FOR
UPDATE. А то нехорошо получится если пользователь захочет с ним что-нибудь
сделать, а ты его уже закрыл...
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135438
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, я имею ввиду в каких случаях надо вызывать op_free_statement с DSQL_close перед повторным op_prepare_statement или op_execute
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135450
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том, когда предыдуший op_execute породил курсор. Для которого, собственно, и
делается "close".

Ты бы эта... Для начала работу обычного ISC API изучил. Оно на протокол
отображается один-к-одному.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40135452
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно и изучить, но спросить проще))
Вроде уже накопал из исходников драйвера для с#, что это надо делать в случае, если тип стейтмента isc_info_sql_stmt_select, isc_info_sql_stmt_select_for_upd или isc_info_sql_stmt_exec_procedure
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40136052
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь понять что из себя представляет тип SQL_D_FLOAT, и если это тот же самый SQL_DOUBLE, то чем он от него отличается, что для него пришлось отдельный тип делать?
...
Рейтинг: 0 / 0
Асинхронное API для клиента
    #40136053
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
Пытаюсь понять что из себя представляет тип SQL_D_FLOAT, и если это тот же самый SQL_DOUBLE, то чем он от него отличается, что для него пришлось отдельный тип делать?
AFAIU, этот тип когда-то использовался для VMS.
Сейчас ты его нигде реально не найдёшь, нет его.
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Асинхронное API для клиента
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (2): Анонимы (2)
Пользователи онлайн (7): Анонимы (5), Yandex Bot, Bing Bot
x
x
Закрыть


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