|
Зависание 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 |
|
|
start [/forum/topic.php?fid=40&msg=39285003&tid=1562028]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 167ms |
0 / 0 |