Firebird-russian - як зупинити запит

Ідея: оскільки ФБ не дає можливість вказувати пріоритети для
запитів, хоча б дати можливість користувачеві вручну зупиняти
довгограючі запити.

Реалізація: нас стороні клієнта робимо нитка з низьким пріоритетом.
Перед стартом запиту активізуємо її. Нитка вичікує 10 сек і якщо
запит все ще виконується, то виводить на екран вікно з кнопкою
Перервати. Якщо користувач натискає кнопку, то відкривається ще один
конект до бази і в ньому виконується запит

DELETE FROM mon $ statements WHERE mon $ statement_id =: ID

Але, ми не знаємо ID! Handle запиту <> ID запиту.

Видаляти по тексту запиту, його статусу і ID підключення? або є
можливість отримати ID запиту на клієнті?

Open this post in threaded view

Re: Як зупинити запит?


> Ідея: оскільки ФБ не дає можливість вказувати пріоритети для
> Запитів, хоча б дати можливість користувачеві вручну зупиняти
> Довгограючі запити.
>
> Реалізація: нас стороні клієнта робимо нитка з низьким пріоритетом.
> Перед стартом запиту активізуємо її. Нитка вичікує 10 сек і якщо
> Запит все ще виконується, то виводить на екран вікно з кнопкою
> Перервати. Якщо користувач натискає кнопку, то відкривається ще один
> Конект до бази і в ньому виконується запит
>
> DELETE FROM mon $ statements WHERE mon $ statement_id =: ID
>
> Але, ми не знаємо ID! Handle запиту <> ID запиту.
>
> Що робити?
>
> Видаляти по тексту запиту, його статусу і ID підключення? або є
> Можливість отримати ID запиту на клієнті?

Open this post in threaded view

Re: Як зупинити запит?

Для цього доведеться після старту кожної транзакції виконувати
запит до системних таблиць, щоб дізнатися її ID? або ID
транзакції дорівнює її хендлом на клієнті?

Open this post in threaded view

Re: Як зупинити запит?


"Andrei".
>
>>
>> За ID тр-ції
>
> Для цього доведеться після старту кожної транзакції виконувати
> Запит до системних таблиць, щоб дізнатися її ID? або ID
> Транзакції дорівнює її хендлом на клієнті?

SELECT CURRENT_TRANSACTION FROM RDB $ DATABASE

Можливо isc_transaction_info коли-нитка не буде лізти в мережу,
так що я б рекомендував саме його. Ну і сам по собі цей виклик
набагато легше, ніж виконання запиту.

Open this post in threaded view

Re: Як зупинити запит?

ок. видаляємо активний запит в транзакції з відомим ВД. Але, адже в
майбутньому
планується thread safe gds32.dll і тоді в одній транзакції може
виявитися трохи
активних запитів?

Open this post in threaded view

Re: Як зупинити запит?


Активний - завжди тільки один. І "thread safe" gds32.dll тут абсолютно ні при чому.

А щодо майбутнього. в 2.5 вже є зупинка запиту через апі.

Open this post in threaded view

Re: Як зупинити запит?

> Активний - завжди тільки один. І "thread safe" gds32.dll тут абсолютно ні при чому.
>

тобто в рамках одного Конект виконання запитів завжди буде
послідовним?
навіть якщо кілька ниток у додатки?

Open this post in threaded view

Re: Як зупинити запит?


"Andrei".
>> Активний - завжди тільки один. І "thread safe" gds32.dll тут абсолютно ні при чому.
>>
>
> Тобто в рамках одного Конект виконання запитів завжди буде
> Послідовним?
> Навіть якщо кілька ниток у додатки?

Open this post in threaded view

Re: Як зупинити запит?

In reply to this post by Andrei K


Andrei wrote:
> Ідея: оскільки ФБ не дає можливість вказувати пріоритети для
> Запитів, хоча б дати можливість користувачеві вручну зупиняти
> Довгограючі запити.
>
> Що робити?

Чи не пхати на бойову базу неотлаженностью запити?

Схожі статті