Size: a a a

2021 March 03

AP

Anton Petrusevich in Modern::Perl
Vyacheslav Olkhovchenkov
дебаг придумали трусы
как и тесты
источник

AP

Anton Petrusevich in Modern::Perl
basiliscos
ну удачи тебе с дебагом тогда )
я часто пользуюсь объектами на основе массивов. не могу сказать чтобы прямо уж так страдаю то
источник

a

allter in Modern::Perl
Коллеги, а я что-то путаю, или в каких-то версиях Carp longmess и shortmess были перепутаны?
Сейчас попробовал на perlbanjo - перепутаны во всех версиях perl. Но я уверен, что на какой-то из инсталляций они были правильные (т.е. longmess выдаёт стектрейс, а shortmess - только того, кто вызвал текущую процедуру)..

https://perlbanjo.com/7341a2a72f
источник

VG

Vadim Goncharov in Modern::Perl
чего это? вроде longmess всегда трейс выводил
источник

a

allter in Modern::Perl
allter
Коллеги, а я что-то путаю, или в каких-то версиях Carp longmess и shortmess были перепутаны?
Сейчас попробовал на perlbanjo - перепутаны во всех версиях perl. Но я уверен, что на какой-то из инсталляций они были правильные (т.е. longmess выдаёт стектрейс, а shortmess - только того, кто вызвал текущую процедуру)..

https://perlbanjo.com/7341a2a72f
А, они обе выдают стектрейс, но shortmess ещё выводит строку, где сам варнинг. Это очень странно.
https://perlbanjo.com/ee3a7d69c4
источник

a

allter in Modern::Perl
allter
А, они обе выдают стектрейс, но shortmess ещё выводит строку, где сам варнинг. Это очень странно.
https://perlbanjo.com/ee3a7d69c4
Т.е. странно то, что про shortmess написано, что он выводит как carp и croak.


А я всегда считал, что croak выводит только непосредственного вызывающего.
Да и в доке про него написано: die of errors (from perspective of caller)

Меня глючит, или ЧЯДНТ?

Вот ещё пример:
https://perlbanjo.com/e5b4051578
источник

a

allter in Modern::Perl
allter
Т.е. странно то, что про shortmess написано, что он выводит как carp и croak.


А я всегда считал, что croak выводит только непосредственного вызывающего.
Да и в доке про него написано: die of errors (from perspective of caller)

Меня глючит, или ЧЯДНТ?

Вот ещё пример:
https://perlbanjo.com/e5b4051578
Понял, что я делал не так: в пакете main всегда выводится стектрейс (немного отличающийся). Что бы выводило как в доке надо вызывать Carp::XXX из другого пакета.
источник

a

allter in Modern::Perl
allter
Понял, что я делал не так: в пакете main всегда выводится стектрейс (немного отличающийся). Что бы выводило как в доке надо вызывать Carp::XXX из другого пакета.
источник
2021 March 04

И

Игорь in Modern::Perl
Коллеги, я тут в профилировщик влез на тяжелом запросе и не могу понять результаты между fetchrow_hashref и fetchall_arrayref. Может кто-нибудь хоть немного пояснить?

Скрипт запускаю так:
DBI_PROFILE='!Statement:!MethodName' ./test.pl

Внутри коннект к БД, подготовка запроса через prepare, бинд параметров через bind_param, вызов execute и забирание данных через:
- в первом случае через fetchrow_hashref
- во втором через fetchall_arrayref

fetchrow_hashref выдал:
DBI::Profile: 20.823761s 99.16% (472 calls) test.pl
...
'fetchrow_hashref' =>
       20.056480s / 438 = 0.045791s avg (first 0.046413s, min 0.045140s, max 0.049244s)
...

fetchall_arrayref выдал:
DBI::Profile: 20.903715s 99.54% (35 calls) test.pl:
...
'fetchall_arrayref' =>
       20.317747s
   'finish' =>
       0.000001s
'
...

Почему профилировщик показывает на fetchrow_hashref 438 вызовов и они по времени такие-же как 1 вызов для fetchall_arrayref?
источник

W

Warstone in Modern::Perl
Потому что и там и тут идет конвертация из Си мира в Перл. И оно съедает.
источник

W

Warstone in Modern::Perl
База какая?
источник

W

Warstone in Modern::Perl
Так как для некоторых баз есть оптимизации.
источник

И

Игорь in Modern::Perl
Oracle
источник

И

Игорь in Modern::Perl
Warstone
Потому что и там и тут идет конвертация из Си мира в Перл. И оно съедает.
Под капотом fetchall также делает кучу fetchrow или нет? Не могу найти этого в документации.

Нашел только:
$tbl_ary_ref = $sth->fetchall_arrayref;
$tbl_ary_ref = $sth->fetchall_arrayref( $slice );
$tbl_ary_ref = $sth->fetchall_arrayref( $slice, $max_rows  );
...
If $slice is an array reference, fetchall_arrayref uses "fetchrow_arrayref" to fetch each row as an array ref.

А если у меня вызов fetchall_arrayref() или fetchall_arrayref({}). Это же уже не ссылка на массив. Не должно быть "uses "fetchrow_arrayref" to fetch each row as an array ref".

Я думал, что под капотом это аналоги оракловых режимов выборки результата(курсора) single fetch и multi fetch.

У меня БД далеко от приложения и по идее, если бы fetchall_arrayref использовал multi fetch, то fetchall был бы намного быстрее чем fetchrow.
источник

W

Warstone in Modern::Perl
Про конкретно Oracle не знаю, но вообще там обычно сначала все забирается в локальный кеш, а потом из него создаются perl объекты.
источник

W

Warstone in Modern::Perl
Драйвер DBD что?
источник

R

Roman in Modern::Perl
Не знаю, кто-то кроме MySQL поддерживает серверное хранение результата запроса?
источник

VG

Vadim Goncharov in Modern::Perl
оракл же :)
источник

R

Roman in Modern::Perl
давно с ним не работал, не помню такого
источник

И

Игорь in Modern::Perl
Warstone
Драйвер DBD что?
Это используется: https://metacpan.org/pod/DBD::Oracle

use DBI;
use DBD::Oracle qw(:ora_types);
источник