powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка
17 сообщений из 42, страница 2 из 2
Ошибка
    #38733155
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create database 't0.fdb'; commit;
recreate table some_data(id int, x int); commit;
insert into some_data values(1, 100); commit;
set term ^; 
create or alter procedure my_very_clever_sp(a_id int) returns(x int) as 
begin 
    for select x from some_data where id = :a_id into :x do suspend; 
end
^ set term ;^ 
commit;
set term ^; 
create or alter procedure my_very_stupid_sp(a_id int) returns(x int) as 
begin 
    for select x from some_data where id = :a_id into :x do suspend; 
end
^ set term ;^ 
commit;

Query-1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select * from some_data d left join my_very_ clever _sp(d.id) on 1=1;

     ID            X            X
======= ============ ============
      1          100          100

 Query-2: 
select * from some_data d left join my_very_ stupid _sp(d.id) on 1=1;

     ID            X            X
======= ============ ============
      1          100          100

Какой должен быть include_filter в конфиге трейса, чтобы в нём вылезли данные только по query-1 ?
...
Рейтинг: 0 / 0
Ошибка
    #38733157
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov"Ну, вы, блин, даёте..." (с)

CORE-4370 кто заводил?..Когда в трекере мну пишут 'won`t fix', то я иду наилегчайшим путём: забываю про этот тикет. Напрочь.
PS. а иногда и про соседние с ним тоже...
...
Рейтинг: 0 / 0
Ошибка
    #38733159
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Какой должен быть include_filter в конфиге трейса,
Таблоид> чтобы в нём вылезли данные только по query-1 ?

Вестимо, include_filter = %my_very_clever_sp%

Если нужно - можно весь запрос впиндюрить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка
    #38733164
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТаблоид> Какой должен быть include_filter в конфиге трейса,
Таблоид> чтобы в нём вылезли данные только по query-1 ?

Вестимо, include_filter = %my_very_clever_sp% Так. Замечательно.

А теперь создаем конфиг трейса вот с такими раскомментаренными параметрами:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
enabled true
 include_filter = %my_very_clever_sp% 
log_procedure_finish true
log_procedure_start true
max_log_size 9999999999
max_sql_length 16384
print_perf true
print_plan true
time_threshold 0

Затем запускаем трейс, запускаем isql и вводим там:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> select * from some_data d left join my_very_clever_sp(d.id) on 1=1;

          ID            X            X
============ ============ ============
           1          100          100

SQL> select * from some_data d left join my_very_stupid_sp(d.id) on 1=1;

          ID            X            X
============ ============ ============
           1          100          100
И любуемся на трейс:

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Trace session ID 3 started
2014-08-29T21:30:05.2940 (20931:0x7f4392770998) TRACE_INIT
        SESSION_3


2014-08-29T21:30:12.1300 (20931:0x7f4392770998) EXECUTE_PROCEDURE_START
        /var/db/fb25/t0.fdb (ATT_2, SYSDBA:NONE, NONE, <internal>)
                (TRA_19, CONCURRENCY | WAIT | READ_WRITE)

Procedure MY_VERY_CLEVER_SP:
param0 = integer, "1"


2014-08-29T21:30:12.1300 (20931:0x7f4392770998) EXECUTE_PROCEDURE_FINISH
        /var/db/fb25/t0.fdb (ATT_2, SYSDBA:NONE, NONE, <internal>)
                (TRA_19, CONCURRENCY | WAIT | READ_WRITE)

Procedure MY_VERY_CLEVER_SP:
param0 = integer, "1"

      0 ms

2014-08-29T21:30:19.5300 (20931:0x7f4392770998) EXECUTE_PROCEDURE_START
        /var/db/fb25/t0.fdb (ATT_2, SYSDBA:NONE, NONE, <internal>)
                (TRA_19, CONCURRENCY | WAIT | READ_WRITE)

Procedure MY_VERY_ STUPID _SP:
param0 = integer, "1"


2014-08-29T21:30:19.5300 (20931:0x7f4392770998) EXECUTE_PROCEDURE_FINISH
        /var/db/fb25/t0.fdb (ATT_2, SYSDBA:NONE, NONE, <internal>)
                (TRA_19, CONCURRENCY | WAIT | READ_WRITE)

Procedure MY_VERY_ STUPID _SP:
param0 = integer, "1"

      0 ms
...
Рейтинг: 0 / 0
Ошибка
    #38733166
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> И любуемся на трейс:

Попробуй со скобками, я не помню требуются ли они.
Если и со скобками не пашет - баг, в трекер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка
    #38733169
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТаблоид> И любуемся на трейс:

Попробуй со скобками, я не помню требуются ли они.
Если и со скобками не пашет - баг, в трекер.Не пашет.
Пробовал вот так: include_filter = (%my_very_clever_sp%)
И вот эдак тоже: include_filter = %(my_very_clever_sp)%

В трекер заносить - не уверен, нужно ли. Ибо Влад мну говорил как-то, что include / exclude фильтра срабатывают только на жестко прописанные в коде "ключевые слова", набор которых есть: %(SELECT|INSERT|UPDATE|DELETE)%.
Но может, я и путаю опять что-то - не знаю. Пусть Влад вправит моцг.
...
Рейтинг: 0 / 0
Ошибка
    #38733172
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> include / exclude фильтра срабатывают только на жестко прописанные
Таблоид> в коде "ключевые слова"

Первый раз слышу. И по коду это никак не видно, написано ровно
обратное, там обычная регулярка по всему тексту запросу с пом. Similar.

Таблоид> набор которых есть: %(SELECT|INSERT|UPDATE|DELETE)%.

Тем более чушь какая-то, ибо ключевые слова/операторы
этим коротким списком не ограничиваются. Но подожди
Влада, если сомневаешься, может, он чего подскажем,
может, это вообще только недавно поломали.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка
    #38733176
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустампо коду это никак не видно, написано ровно обратное, там обычная регулярка по всему тексту запросу с пом. Similar.Ну, если бы сиё раньше работало, а теперь вдруг поломалось, то об этом бы кто-нибудь да возопил бы. Здесь или в трекере, неважно.
Но народ безмолствует. А значит, два варианта:
1) никогда и не работало;
2) никто вообще эти include/exclude-фильтра не юзает, "потому и не знают".
...
Рейтинг: 0 / 0
Ошибка
    #38733184
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Ну, если бы сиё раньше работало, а теперь вдруг поломалось,
Таблоид> то об этом бы кто-нибудь да возопил бы. Здесь или в трекере, неважно.

Ну вот ты и возопил.

> 2) никто вообще эти include/exclude-фильтра не юзает, "потому и не знают".

Тоже возможно. Вернее, количество исп. трейс итак не шибко велико,
а среди них фильтры юзающих - ещё сильно меньше должно быть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка
    #38733199
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

Такая феерическая чушь меня даже в отпуске достала...

1. regexp фильтры действуют только на текст твоего запроса , а никак не на имена объектов (процедур, таблиц и т.п.).
2. Ни одного log_statement_XXX у тебя не разрешено.
Далее объяснять ?
...
Рейтинг: 0 / 0
Ошибка
    #38733204
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad> 2. Ни одного log_statement_XXX у тебя не разрешено.

А ларчик просто открывался.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка
    #38733250
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad1. regexp фильтры действуют только на текст твоего запроса , а никак не на имена объектов (процедур, таблиц и т.п.).
2. Ни одного log_statement_XXX у тебя не разрешено.
Далее объяснять ?Да чего ж тут объяснять, всё и так понятно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
set term ^; 
create or alter procedure app_root as 
  declare n int; 
begin 
  select count(*) from my_very_clever_sp(1) into n; 
end
^set term ;^ 
commit;

Далее запускаю трейс с конфигом:
Код: plaintext
1.
2.
include_filter = %my_very_clever_sp%
time_threshold = 0
log_statement_finish true

Ну, и стартую "самую главную процедуру на свете":
Код: plaintext
execute procedure app_root;

Трейс молчит. Потому что вызов my_very_clever_sp прошёл не как statement, а внутри psql-блока app_root.

А ежели вот такой конфиг:
Код: plaintext
1.
2.
3.
include_filter = %my_very_clever_sp%
time_threshold = 0
log_procedure_finish true
log_statement_finish true

- то трейс будет выдавать вызовы и этой, и всех прочих ХП.

Так что да, "ларчик просто открывается": вызовы отследить можно, только если они идут через execute statement, либо вообще с клиента дёргаются.

Если я опять тут феерчушь несу, то покажи конфиг, при котором можно решить эту задачу: регистрировать вызовы только одной ХП, с именем 'my_very_clever_sp', каким бы способом она не вызывалась: напрямую из isql-подсказки, через ES, или же из PSQL-кода.
...
Рейтинг: 0 / 0
Ошибка
    #38733263
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидТак что да, "ларчик просто открывается": вызовы отследить можно, только если они идут через execute statement, либо вообще с клиента дёргаются.
о чем Влад и написал русским по белому

Таблоидможно решить эту задачу: регистрировать вызовы только одной ХП, с именем 'my_very_clever_sp', каким бы способом она не вызывалась: напрямую из isql-подсказки, через ES, или же из PSQL-кода.
через фильтры ее решить нельзя
...
Рейтинг: 0 / 0
Ошибка
    #38733283
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrчерез фильтры ее решить нельзя
Тогда вопрос: какая часть посланного с клиента запроса (EB в данном случае) считается за
"statement" и подвергается фильтрации, а какая - нет? Почему в упомянутом CORE фильтр
работал со строкой внутри ЕВ как ни в чём не бывало, а в примере постом выше - уже не хочет?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка
    #38733299
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

в примере постом выше процедура, а не EB
...
Рейтинг: 0 / 0
Ошибка
    #38733315
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrв примере постом выше процедура, а не EB
Тьфу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка
    #38755117
dimik78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gallemar,
пару раз сталкивался именно с такой ошибкой.
Возникает ввиду использования некоторыми уникумами кода вида:

MyQuery.SQL.Text = Format('execute procedure my_proc(%f), [MyVar]')

где MyVar значение типа float.

Естественно о региональных настройках форматов при этом думают в последнюю очередь.
В случае если в языковых настройках Windows разделителем целой и дробной части стоит запятая,
то в результате при значении параметра, например MyVar = 1.35 на выходе имеем SQL вида:

execute procedure my_proc(1,35)

что естественно не проглатывается сервером.

Решение зависит от возможностей. Если есть доступ к исходникам, то исправить код.
Иначе только менять разделитель целой и дробной части в настройках винды на точку.
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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