|
Зависание Prepare
|
|||
---|---|---|---|
#18+
У нас в базе, в BLOB полях, хрянятся SQL (DML) запросы. Соответственно, когда в процессе разработки, начинают меняться метаданные, эти запросы могут перестать выполняться. Поэтому был придуман такой финт: перед выкладыванием базы в тестирование, для всех этих запросов делается prepare и, если возникает ошибка, то идет останов всего процесса, с уведомлением, где именно ошибка. Все это реализовано в виде UDF, на вход которой, подается имя базы. Она внутри открывает свой коннект к указанной базе, вытягивает все запросы и делает им prepare. Код, примерно, такой Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Я менял сортировку в qrySQLs. Все равно на первом запросе (уже другом) - зависание. Также было замечено, что если до вызова UDF сделать, в том же коннекте, prepare какого-нибудь запроса, то зависания нет. Все вылечилось после Backup/Restore базы, но хотелось бы понять, что это вообще было? С уважением, Vasilisk ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2016, 23:58 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_, и какой только ерунды не выдумают... Почему это обязательно должно делаться в UDF? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 00:45 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов ДенисПочему это обязательно должно делаться в UDF?В этом обсуждении сказано почему ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 01:33 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов Дениси какой только ерунды не выдумают... Почему это обязательно должно делаться в UDF? hvladТы не трынди о чём не знаешь.hvlad похоже хотел это вам написать, но что-то его отвлекло и он написал это мне: 19489421 . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:02 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb user, нет он написал это тому кому хотел. Вот он ещё один любитель внутри UDF коннекты делать. Да ещё с помощью Delphi компонент. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:10 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_В этом обсуждении сказано почему ничего внятного про UDF в том обсуждении не нашел. IBEScript - сколько угодно. а UDF - это через ж. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:32 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
kdvничего внятного про UDF в том обсуждении не нашел. IBEScript - сколько угодно. а UDF - это через ж.В IBEScript нет Prepare. Только Execute ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:39 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_ В IBEScript нет Prepare. Только Execute и что? Написать свою утилиту для проверки запросов не так уж сложно. Зачем это в UDF пихать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:43 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_, программа, которой дают БД, выбирают таблицу, и столбец для prepare (хоть варчар, хоть блоб), которая делает prepare и пишет лог по успеху неуспеху - пишется не более чем за 30-60 минут. кроме того, я не понимаю, почему вместо ответа в 15-20 слов "udf сделана потому что", или вместо ссылки на конкретное сообщение, где дается такой же ответ, надо давать ссылку на всю эту переписку. Где лично я сразу спросил почему нельзя приложение написать, и сказал то же самое про "зад" и "udf" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:44 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов ДенисЗачем это в UDF пихать?Чтобы все это вставить в один скрипт по очистке базы ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:47 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_, это не ответ. Скрипт тоже может делать приложение. В чём сокральный смысл пихать невпихуемое делать это именно в UDF? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 15:49 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов Денисэто не ответ. - У меня не заводится машина, что делать? - А зачем Вы купили машину? - Чтобы быстро попадать из точки А в точку Б - Это не ответ. Пешком тоже можно легко попадать куда угодно. И бензин покупать не нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:01 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов ДенисВот он ещё один любитель внутри UDF коннекты делать. Да ещё с помощью Delphi компонент. Расскажите поподробней, почему по-вашему в виндовой dll нельзя делать вызовы к другой виндовой dll? А особенно с помощью Delphi компонент. Давайте чисто технически, почему нельзя, какой конкретно код в FB накладывает такие ограничения на разработчиков UDF? Я наивно полагал что могу взять и из UDF или UDR присоединиться например к FB4 и мне за это ничего не будет. Верней я полагал что разработчики FB сделают юзерам правильно, и оно просто будет работать. Не будет: CORE-5123 . Юзерам придётся наступить, прийти в трекер, увидеть что тикет уже висит, задаться вопросом "а какого хрена эта банальщина не исправлена", дальше возможно прийти на sql.ru и увидеть как некто Симонов Денис глумится над такими же "недалёкими" разработчиками. А когда они узнают что глумящийся - это человек из команды FB, которая собственно и создала багу, то что они сделают? Покрутят у виска. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:18 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb user, Ничего - кроме того что любые непредсказыемые баги и задержки в UDF могут обрушить весь сервер и/или испортить БД а вот отдельное приложение этого не может Особенно будет красиво если UDF вытащит скрипт, который ее дропнет :-) PS. почему это нельзя сделать просто на SP + Execute Statement ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:27 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb user, из UDR делать коннект к другой БД (может даже и не Firebird) вполне нормально, из UDF нет. Тем более посмотри на то как он это делает. Ладно бы ещё через Firebird API, так нет засунем в UDF половину VCL библиотеки. И дело даже не в том возможно это принципиально или нет. А в том что это проктостоматологическое решение. С чего ты взял что CORE-5123 к костылям автора имеет хоть какое-то отношение? fb userА когда они узнают что глумящийся - это человек из команды FB, которая собственно и создала багу, то что они сделают? Я не имею никакого отношение к разработке FB. Да документирую SQL, обсуждаю некоторые фичи, но не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:32 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
AriochPS. почему это нельзя сделать просто на SP + Execute Statement ? Есть табличка: Код: sql 1.
Человек как я понимаю хочет чего-то такого: Код: sql 1. 2. 3. 4. 5. 6. 7.
Какой код предлагаете вы? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:41 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb userЧеловек как я понимаю хочет чего-то такого:Именно! Причем, меня вполне устроит если PREPARE_SQL() будет кидать исключение, а не возвращать код ошибки. Но это не важно ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:46 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Ariochлюбые непредсказыемые баги и задержки в UDF могут обрушить весь сервер и/или испортить БДЭто в концепции UDF присутствует изначально. И не важно, сделано это с помощью делфи и фибов или с помощю udf написанной на обероне и вызывающей ShellExecute или еще как посмешнее. Архитектурно, да, хочется плакать кровью от такого подхода. Но формально разницы между пустой UDF и UDF выполняющей коннект к какой-то базе нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:46 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb user, предположим что UDF написана без бага. Код: sql 1. 2. 3. 4. 5. 6. 7.
сколько раз произойдёт CONNECT/DISCONNECT пока будет выполняться сей блок? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:47 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов Дениссколько раз произойдёт CONNECT/DISCONNECT пока будет выполняться сей блок? _Vasilisk_Все это реализовано в виде UDF, на вход которой, подается имя базы. Она внутри открывает свой коннект к указанной базе, вытягивает все запросы и делает им prepareОтвет: один. Сейчас у меня в UDF передается не SQL, а только путь к базе. Как сделать prepare штатными средствами БД или IBExpert - мне так никто и не сказал ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:52 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_, один? А мне казалось столько у тебя записей вернёт запрос SELECT ID, SQL FROM SQLS. Ты проверял что один? Трейсом например. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:54 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов Денис, извиняюсь, запрос то не твой, а fb_user ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:55 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_, в любом случае этому не место в UDF. _Vasilisk_Как сделать prepare штатными средствами БД с помощью SQL или PSQL никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 16:59 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb userAriochPS. почему это нельзя сделать просто на SP + Execute Statement ? Есть табличка: Код: sql 1.
Человек как я понимаю хочет чего-то такого: Код: sql 1. 2. 3. 4. 5. 6. 7.
Какой код предлагаете вы? Код: sql 1. 2.
По вкусу - логгирование, перехват исключений, autonomous transaction и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:10 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Arioch, это будет работать ужасно. Даже если транзакции с модифицирующими запросами будут откачены, то сами запросы могут быть довольно тяжёлыми. Предлагаешь их выполнять? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:14 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Arioch Код: sql 1. 2.
12874261 , 12874351 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:21 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов Денисfb user, предположим что UDF написана без бага. Код: sql 1. 2. 3. 4. 5. 6. 7.
сколько раз произойдёт CONNECT/DISCONNECT пока будет выполняться сей блок? Столько сколько закодит разработчик. А вот такое вообще не понятно взлетит или нет, потому как код FB будет путать свои и чужие dll ( CORE-5123 ). Плюс ещё возможно и потому что не умеет выгружаться полностью ( CORE-5299 ) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:22 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_, да что ты всё к UDF привязываешься. Сделать консольное приложение которое будет подключаться 1 раз, считывать все твои запросы, препарировать их и выкидываю лог неудач дело одного дня максимум. А с UDF ты ещё долго будешь гадать на кофейной гуще. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:27 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_, а что толку тебе препарировать вызов процедуры без её реального выполнения ? проверить что совпадает количество параметров - и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:32 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов Денис, Вы очень резки сегодня. Давайте всё же подумаем о компромиссах! Сделаем таки UDF, которая запустит консольное приложение... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:33 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Arioch, я сама доброта. Вот если бы тут появился Dimitry Sibiryakov или МП... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 17:40 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов ДенисВот если бы тут появился Dimitry Sibiryakov или МП... Да они бы сразу показали разработчикам FB где у них не правильно. Это вы всё стесняетесь видеть ясно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 18:03 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов Денисда что ты всё к UDF привязываешьсяУже писал_Vasilisk_Чтобы все это вставить в один скрипт по очистке базы Симонов ДенисА с UDF ты ещё долго будешь гадать на кофейной гуще.UDF после Backup/Restore отлично заработала. Повторюсь - это была единственная проблема, за все пять лет использования механизма. Проблема решена. Мне было интересно, подскажет ли кто в чем была причина. Вот и все Ariochа что толку тебе препарировать вызов процедуры без её реального выполнения ? проверить что совпадает количество параметров - и всё.Вот именно! Проверить количество параметров в процедурах, проверить имена полей в SELECT/UPDATE запросах... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 18:10 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb userДавайте чисто технически, почему нельзя, какой конкретно код в FB накладывает такие ограничения на разработчиков UDF? Да все можно. Понятно - udf написана чтобы можно было ее вызывать в sql из каких-то других скриптовых языков. Но раз она написана на Дельфи, то зачем нужен вот этот анус - можно же этот кусок кода udf использовать прямо из программы на Дельфи, и не иметь проблем ни с разрядностью udf, ни с будущей совместимостью, ни с какими-то потенциальными багами сервера, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 19:58 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_Чтобы все это вставить в один скрипт по очистке базы в смысле - не сделать список запросов для исправления в соответствии с новыми метаданными, а тупо этот список грохнуть, что-ли? Мне казалось, что описываемая проблема имеет только один тип решения - ручное исправление. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 20:02 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
kdv_Vasilisk_Чтобы все это вставить в один скрипт по очистке базы в смысле - не сделать список запросов для исправления в соответствии с новыми метаданными, а тупо этот список грохнуть, что-ли? Мне казалось, что описываемая проблема имеет только один тип решения - ручное исправление.в смысле есть скрипт, который прогоняется на девелоперской базе перед выкладыванием ее на тестирование. Этот скрипт оччищает таблицы, сбрасывает значения генераторов, заносит дефолтные данные и т.д. В этом же скрипте воткнута проверка таблицы запросов. При обнаружении ошибки скрипт сообщает о ней и останавливается ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 21:26 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
_Vasilisk_есть скрипт А интерпретатор этого скрипта команду SHELL сосем не понимает?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 21:46 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb user, кстати твои ссылки на тикеты в трекере здесь совсем не в тему. У ТС вообще Interbase. Он не имеет ничего общего с плагинной архитектурой тройки, линковкой fbclient и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 22:15 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Симонов ДенисУ ТС вообще Interbase. Да не, ТС бы нас давно поправил. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 22:29 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovА интерпретатор этого скрипта команду SHELL сосем не понимает?..Это мысль. Есть ibec_Exec и, вроде, он позволяет парсить выхлоп ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 22:55 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb userТС бы нас давно поправил.IB. Но в чем поправлять? Не было предложено ни одного решения. Вот Сибиряков натолкнул на мысль ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 22:58 |
|
Зависание Prepare
|
|||
---|---|---|---|
#18+
fb user, почитай тот топик _Vasilisk_Симонов ДенисПочему это обязательно должно делаться в UDF?В этом обсуждении сказано почему ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 22:59 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562028]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 183ms |
0 / 0 |