powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
25 сообщений из 38, страница 1 из 2
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090215
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую знатоков и разработчиков!

Последние пару лет занимаюсь вопросом перехода на 3-ю версию с 1.5. Многое уже прошел. Но вчера выпал в осадок от новой проблемы. И даже не представляю как её обойти.

Проверял на:
WI-V4.0.0.2496 Firebird 4.0
WI-V3.0.7.33374 Firebird 3.0

Тестовая таблица:

Код: plsql
1.
2.
CREATE TABLE TEST (
    FLD INTEGER NOT NULL PRIMARY KEY)



Запускаю в IBExpert-те блок:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
execute block as
declare variable i integer;
begin
  i = 0;
  while (i < 10) do
  begin
    i = i + 1;
    insert into test(fld) values(1);
    when any do begin
    end
  end
end



и получаю удивительный результат:
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090216
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В полуторке всё корректно работало:
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090224
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

в одном случае блок, в другом процедура.

наверняка есть еще масса ньюансов, о которых автор не договаривает
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090258
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

полную статистику посмотри, там должно быть 10 insert и 9 backout.
И это правильно.

1.5 работает не корректно в этом плане.
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090282
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pastor
ggreggory,

в одном случае блок, в другом процедура.

наверняка есть еще масса ньюансов, о которых автор не договаривает


Во-первых, в полуторке не было execute block, поэтому для неё приведен пример с процедурой.
Во-вторых, приведенную процедуру можно запускать и в FB3 и FB4 - результат аналогичный, как и для execute block.
В-третьих, я ничего не договариваю, все исходные данные в исходном топике - таблица+запрос. Можете сами запустить у себя и проверить.

hvlad
ggreggory,

полную статистику посмотри, там должно быть 10 insert и 9 backout.
И это правильно.

1.5 работает не корректно в этом плане.


Допустим, а как отличить backout инсертов от backout-ов update-ов? В реальном, а не тестовом примере могут быть и триггеры, которые делают много чего, и внешние ключи, которые делают каскадные изменения. Вы не когда не получите по формуле 10-9=1 число реально добавленных записей.
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090286
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggoryВы не когда не получите по формуле 10-9=1 число реально добавленных записей.

Для числа реально добавленных записей используется isc_dsql_sql_info(), а не
isc_database_info().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090293
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.08.2021 13:28, Dimitry Sibiryakov пишет:
> Для числа реально добавленных записей используется isc_dsql_sql_info(), а не isc_database_info().

с какой версии?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090295
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

ggreggoryВы не когда не получите по формуле 10-9=1 число реально добавленных записей.

Для числа реально добавленных записей используется isc_dsql_sql_info(), а не
isc_database_info().


Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где???
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090296
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.08.2021 13:48, ggreggory пишет:
> Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где???

ты ж в неё хендл стейтмента передаёшь на вход.

а, ты имеешь в виду раскладку по таблицам...
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090298
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
Допустим, а как отличить backout инсертов от backout-ов update-ов?
Никак. Сам вопрос говорит от непонимании сути происходящих процессов.

ggreggory
Вы не когда не получите по формуле 10-9=1 число реально добавленных записей.
Это говорит о неправильно выбранном инструменте.
Рантайм статистика показывает все действия, выполненные движком, а не их "полезный" результат.
И если 1.5 показывала не всё, то это её проблемы.

Правильный инструмент уже показал ДС тут 22358628
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090299
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
Dimitry Sibiryakov
Для числа реально добавленных записей используется isc_dsql_sql_info(), а не
isc_database_info().


Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где???
А ты что вообще ищешь\хочешь ? И с какой целью ?
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090317
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ggreggory

Рантайм статистика показывает все действия, выполненные движком, а не их "полезный" результат.
И если 1.5 показывала не всё, то это её проблемы.


А зачем мне нужно знать что там делает движок? Для меня движок это чёрный ящик, который как раз и делает полезную работу. И если он предоставляет мне статистику, то эта статистика должна соответствовать проделанной работе. А что для этого пришлось сделать серверу мне не интересно.

hvlad
ggreggory
пропущено...


Тоже фигня - средняя температура по больнице. Возвращает общие счётчики - удалили, добавили, изменили, а где???
А ты что вообще ищешь\хочешь ? И с какой целью ?


Конечная цель - портирование кода с 1.5 на 3.0. Много где задействованы счетчики isc_database_info. Чаще всего это выводы информационных сообщений наподобие того, как сделано в IBExpert-е. Сейчас все сообщения будут кривыми, также как и в IBExpert-е они кривые. Но в некоторых местах я встречал и проверки, наподобие: если после запроса кол-во вставок не равно тому-то то "внутренняя ошибка, стоп машина". Проверки это нормально, это повышает надежность работы. Но чтобы понять объем проблемы, надо делать инвентаризацию всего кода на предмет использования счетчиков, на это нужно время.

И неужели вы считаете нормальной выдаваемую программами, тем же IBExpert-ом, статистику???
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090320
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggoryв некоторых местах я встречал и проверки, наподобие: если после запроса кол-во вставок не
равно тому-то то "внутренняя ошибка, стоп машина".

Видимо, человек, их вставивший, был не в курсе, что такие проверки, основанные на
isc_database_info() работают только в однопользовательском режиме. Их не портировать надо,
а выкашивать как саботаж и провокацию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090323
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

а выкашивать как саботаж и провокацию.


Ну не знаю, не знаю... в классике FB1.5 работало, иначе за много лет где-нибудь да у кого-нибудь, да вылезло. Проверки для того и делаются, чтобы вылазить в неожиданных местах.
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090325
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
А зачем мне нужно знать что там делает движок?
Понятия не имею. Но ты используешь именно этот инструмент.

ggreggory
Для меня движок это чёрный ящик, который как раз и делает полезную работу. И если он предоставляет мне статистику, то эта статистика должна соответствовать проделанной работе.
Вот она и соответствует. А в 1.5 не соответствовала.

ggreggory
А что для этого пришлось сделать серверу мне не интересно.
Сам понял - что сказал ? :)

ggreggory
Конечная цель - портирование кода с 1.5 на 3.0. Много где задействованы счетчики isc_database_info.
Используй правильный инструмент. Всё для этого есть.

А что тебе покажет твоя "правильная" программа, если триггер на insert в таблицу запустит действия, приводящие к куче ins\upd\del в той же таблице ?

Всю жизнь для records affected использовался isc_dsql_sql_info() это даже в изначальном IBX было, iirc.

ggreggory
Но чтобы понять объем проблемы, надо делать инвентаризацию всего кода на предмет использования счетчиков, на это нужно время.
Так ты вроде уже не первый год мигрируешь, сколько можно-то ? :)

ggreggory
И неужели вы считаете нормальной выдаваемую программами, тем же IBExpert-ом, статистику???
Конечно.
Просто нужно остыть и разобраться с инструментами.
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090327
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
в классике FB1.5 работало

только в классике оно и могло работать
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090330
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
джентльмены! я конечно дико извиняюсь, но человеку нужно совсем не то, что вы ему хором советуете.
он хочет получить раскладку по таблицам - что, куда, и сколько.
а предлагаемый isc_dsql_sql_info может выдавать только суммарные значения (инсертов, делитов и т.д.)
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090334
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
оно хочет получить раскладку по таблицам - что, куда, и сколько.
Оно ему не надо. Он думает, что надо - но нет :)

Мимопроходящий
а предлагаемый isc_dsql_sql_info может выдавать только суммарные значения (инсертов, делитов и т.д.)
Если нужен контроль, то его нужно осуществлять после каждой отдельной операции, а не в куче.
Если каждая операция - отдельный оператор - всё будет работать.
Если же операция является кучей операторов (например, процедура), то получим контроль кучи операторов, а не то, что хотели.
Если вопрос настолько принципиален, то нужно после каждого оператора в процедуре проверять ROW_COUNT.
Или отказаться от процедур так, где всё так строго и проверять на клиенте records affected.

PS Нет волшебной таблетки (есть только волшебный пендель) - такова селяви
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090335
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийоно хочет получить раскладку по таблицам - что, куда, и сколько.

Это ему надо PerformanceInfo, а оно наружу не торчит, только в трассировке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090337
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наружу торчит в мониторинге. Но это дорого :-)
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090349
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Всю жизнь для records affected использовался isc_dsql_sql_info() это даже в изначальном IBX было, iirc.
залез в исподники IBX.
используется в TIBSQL в property RowsAffected.
как минимум с IBX4.2 (D4/D5).
но как и многое у Джефа, используется таки через "привычный интерфейс".
ну да хрен с ним, с Джефом.
меня интересует другое:
ни в одном API Guide (IB5, IB6, IB XE, IB 2017) нет упоминания isc_info_sql_records.
сильно подозреваю, что это не единичное "белое пятно".
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090358
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Мимопроходящийоно хочет получить раскладку по таблицам - что, куда, и сколько.

Это ему надо PerformanceInfo, а оно наружу не торчит, только в трассировке.Там всё равно будет 10 insert + 9 backout
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090413
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
isc_database_info - это очень крутой инструментарий в 1.5, хоть оказывается и работает нормально только в classic-e (не знал). Например, ты удаляешь запись из таблицы и сразу можешь понять, чего каскадно это удалило-зацепило, сообщить юзеру. А он уж пусть думает, "а может не стоит удалять-то". В полуторке, правда, есть ограничение, кажется максимум 40 таблиц можно получить из статистики. Это мало, но можно добавлять фразу типа "...и где-то что-то ещё изменилось", если видишь, что лимит достигнут.

В таблицах мониторинга тоже backout в одной куче - и добавления, и удаления. Сложили лошадь с коровами - записали в backout. Ценность показателя сомнительна.

hvlad

Если же операция является кучей операторов (например, процедура), то получим контроль кучи операторов, а не то, что хотели.


Да нет тут кучи, нет процедур, зачем? - даже обычный одинарный delete, один-единственный может вызвать кучу изменений, о которых хотелось бы знать. isc_dsql_sql_info тут что мёртвому припарка.

И да, ROW_COUNT - это немного из другой оперы, из PSQL. Вряд ли там детализация нужна.

hvlad

А что тебе покажет твоя "правильная" программа, если триггер на insert в таблицу запустит действия, приводящие к куче ins\upd\del в той же таблице ?


Конечно надо с умом подходить, понимать, где можно это использовать, где нет.
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090415
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
Например, ты удаляешь запись из таблицы и сразу можешь понять, чего каскадно это удалило-зацепило, сообщить юзеру.
Таких извратов я ещё не видел.
А на койчёрт юзеру знать, что было каскадом удалено 100500 записей, а не 300400 ?
А на кой ему знать имена таблиц и полный их перечень ?
А какая ему разница - удалило или обновило ?
А если оно что-то вставило и сразу удалило - юзер тоже должен в этом разбираться ?

ggreggory
Ценность показателя сомнительна.
Для того, кто не понимает что это такое - да сомнительна.

ggreggory
hvladЕсли же операция является кучей операторов (например, процедура), то получим контроль кучи операторов, а не то, что хотели.

Да нет тут кучи, нет процедур, зачем? - даже обычный одинарный delete, один-единственный может вызвать кучу измененийЭто и есть та самая куча, о которой я писал. Не важно, насколько явно она получается.

ggreggory
Конечно надо с умом подходить, понимать, где можно это использовать, где нет.
Не это ли я пытаюсь донести ? :)
...
Рейтинг: 0 / 0
Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
    #40090418
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

+1, я тоже в недоумении. В любой нормальной системе юзер видит совсем не то, как это организовано в виде таблиц в БД и всякого. И ему эта посторонняя информация вообще незачем.
Ну вот вставил он 1 запись, и ему система сообщает - вставилась 1, обновилось 5, и удалилось 3. И ... что??? Это же не он так придумал, а разработчик БД. И разработчику виднее, что и где должно обновляться.

p.s. и вообще я про такую дичь слышу в первый раз. именно про выдачу этой информации в клиентском приложении.
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Беда с isc_database_info или как впихнуть в таблицу 10 уникальных записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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