[Moscow.pm] Encode: danko gay, все геи - вредители!
Vladimir Timofeev
vovkasm на gmail.com
Ср Окт 19 04:16:07 PDT 2016
Оставлю это здесь, в надежде, что подобных ошибок в будущем будет меньше.
2016-10-19 0:09 GMT+03:00 Ivan Petrov <i.petro.77.00 на gmail.com>:
>
>>> $dbh->>> selectrow_hashref('/* получим юзера */ SELECT * FROM users WHERE id = 1')
>
>> А как вас называет за такое? :D
>
> а что не нравится-то?
> русские коменты в SQL? хотим видеть их в pg_top - разве плохое
> желание?
>
Нормальное желание, делается так:
use 5.024;
use warnings;
use utf8;
use Test::More;
use DBI;
my $dbh = DBI->connect('dbi:Pg:dbname=test', '', '', {
AutoCommit => 1,
RaiseError => 1,
});
$dbh->do('/* Удаляем старую таблицу */ DROP TABLE IF EXISTS sample_test');
$dbh->do('/* Создаём таблицу */ CREATE TABLE sample_test (id
integer, value text)');
$dbh->do('/* Вставляем данные */ INSERT INTO sample_test VALUES
(?,?),(?,?)', undef, 10, 'Привет', 20, 'Медвед');
my $result = $dbh->selectrow_hashref('/* получим данные */ SELECT
* FROM sample_test WHERE id = 10');
is $result->{id}, 10;
is $result->{value}, 'Привет';
$dbh->disconnect;
done_testing;
В логах видим:
LOG: statement: /* Удаляем старую таблицу */ DROP TABLE IF EXISTS sample_test
LOG: statement: /* Создаём таблицу */ CREATE TABLE sample_test (id
integer, value text)
LOG: statement: /* Вставляем данные */ INSERT INTO sample_test VALUES
('10','Привет'),('20','Медвед')
LOG: statement: /* получим данные */ SELECT * FROM sample_test WHERE id = 10
Может уже пофиксили? Perl 5.24.0, DBI 1.636, DBD::Pg 3.5.3
> проблема в том что открытие issue иногда приводит к обратному
> результату.
> вот я наблюдал issue на mojo, про упомянутый utf8.
>
> в Test::More можно написать ok $var, 'тест пройден';
> в Test::Mojo можно БЫЛО написать get_ok($url, 'тест пройден')
> человек открыл багу про json_is($bla, 'тест пройден')
>
> в итоге гей на букву п багу закрыл и сломал get_ok и все прочие _ok.
>
> при этом поскольку этот гей на букву п не русскоязычный то он тупо НЕ
> ПОНИМАЕТ проблему (общались с ним в IM).
>
Судя по комментариям к
- https://github.com/kraih/mojo/pull/997
- https://github.com/kraih/mojo/issues/995
- https://github.com/kraih/mojo/issues/497
- https://github.com/kraih/mojo/issues/430
Автор как раз понимает о чём речь, гораздо лучше, чем топикстартер,
который считает для себя нормальным оскорблять незнакомых людей в
публичной рассылке.
> то есть например
>
> use utf8;
> use open qw(:std :utf8);
>
> $str = 'привет, медвед';
> like $str => qr{при\w+,}, 'тест пройден';
>
> в его гейском (на букву п) виртуальном мире делать не нужно. Юникода в
> данных в коде программы встречаться не должно.
Скорей всего kraih говорил Ивану, что опасно делать`use open qw(:std :utf8)`.
В данном примере это работает, но только потому, что Test::More не
поддерживает юникод, а рекомендация использовать io-layers в
документации к нему, очевидный хак, более того, там это и описано, как
'workaround'.
В своём текущем состоянии Test::More очевидно является той границей,
на которой должна происходить конверсия string<->bytes, поэтому такой
тест скорее должен выглядеть как:
my $str = 'привет, медвед';
like $str => qr{при\w+,}, encode('utf-8','тест пройден');
Но и это не будет работать на 100%, оно будет генерить ворнинг при
завалившихся тестах. В идеальном будущем, кто-то сделает правильно вот
эту работу: https://github.com/Test-More/test-more/pull/422 и тест
будет выглядеть:
use Test::More output => {formatter => 'TAP', encoding => 'utf-8'}
my $str = 'привет, медвед';
like $str => qr{при\w+,}, 'тест пройден';
Но если только ныть и ругаться, ничего такого не произойдёт, как не
произошло до сих пор, максимум, в очередной версии очередного модуля
будут проходить весь цикл ошибок с обработкой юникода, как это делает
сам интерпретатор )
Сделайте Test::More::Unicode, где он? Что-то не вижу )
Вот Монсу понадобился, он сделал Test::More::UTF8, правда только
обёртку вокруг binmode ))
А про Mojolicious так вообще смешно... ну сделайте подкласс
Test::Mojo, да перебейте один метод (и это круто, что там теперь один
такой метод), как вам нравится )
>
> Гею на букву п нужен геморрой питонячий вида
> if 'hello world' == u'hello world':
> сюда никогда не попадаем. що является ППЦ
> ему нужно втащить этот геморрой в perl!
>
Это жизнь... вам придётся различать бинарные данные и строки. В разных
языках и средах это делается по разному, но делается везде. И в Perl
тоже приходится. К сожалению, в Perl это сложнее по многим причинам.
>
> далее становится вопрос что делать-то?
> возможно идти по пути Марка Лемана.
>
> Грустно это все. они заполонили планету, блин
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
--
Vladimir Timofeev <vovkasm на gmail.com>
Подробная информация о списке рассылки Moscow-pm