Drupal Comment Notify (опять)
Drupal закричал мне, что у меня все устарело, нужно срочно апгредиться. Ну, как он любит. Поапгрейдил, в том числе и Comment Notify до версии 1.2, про натягивание которого на Postgresql я уже писал.
Поапгрейдив, имею вопрос: а что, в MySQL у поля написано NOT NULL, то там самостоятельно появится еще и DEFAULT ...? Потому что я не верю, что автор Comment Notify его совсем не тестирует, однако в нем:
- В таблице заводится крайне полезное поле, позволяющее не слать повторные нотификации если комментарий редактировался. Но оно NOT NULL и без DEFAULT.
- Вставка в эту таблицу делается без инициализации данного поля.
Патчить можно или сам модуль или процедуру инсталляции/апгрейда. Точнее, без правки .install никак не обойтись, поэтому вот минимальный патч, который превращает Comment Notify 1.2 в работающий под Postgresql (про MySQL ничего не знаю, не проверял):
comment-notify-1.2-install.diff.gz
Если вы переезжаете с Comment Subscribe, то нужно выполнить еще две SQL-команды (чтобы уже разосланные нотификации не рассылались повторно):
UPDATE comment_notify set notified=1; UPDATE comment_notify set notify=1 where cid in (SELECT cid FROM z_com mentsubscribe WHERE subscribe > 0);
Comments
Проверил на дефолтных настройках. Оказывается, ага, и даже w
Проверил на дефолтных настройках. Оказывается, ага, и даже warnings не дает. Все-таки правильно я делаю, что strictы включаю по максмуму :) Проверено на 4.1.22, думаю что на 5 без стриктов та же редика.
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table test1(f int not null);
Query OK, 0 rows affected (0.11 sec)
mysql> insert into test1 values();
Query OK, 1 row affected (0.01 sec)
mysql> show warnings;
Empty set (0.08 sec)
mysql> select * from test1\G
*************************** 1. row ***************************
f: 0
1 row in set (0.00 sec)
Офигеть. А для строковых полей умолчание какое? Главное, ка
Офигеть. А для строковых полей умолчание какое?
Главное, какой смысл в таком NOT NULL?
> А для строковых полей умолчание какое? Пустая строка. >ка
> А для строковых полей умолчание какое?
Пустая строка.
>какой смысл в таком NOT NULL?
Видимо, когда-то давно разработчики mysql решили, что NOT NULL это "запретить значение NULL для данного поля". О причинах такого решения остается только догадываться:)
Ну, в общем, да, MySQL прописывает дефолты для NOT NULL поле
Ну, в общем, да, MySQL прописывает дефолты для NOT NULL полей. Хорошо это, или плохо, вопрос отдельный и довольно специябельный.
А что в нем специябельного? NOT NULL, помимо прочего, подраз
А что в нем специябельного? NOT NULL, помимо прочего, подразумевает, что пользователь должен задать значение.
NOT NULL DEFAULT ... - с моей точки зрения, поведение довольно неумное. Впрочем, если этот DEFAULT потом можно убрать, то жить можно.
Это сильно упрощает жизнь при апгрейдах. Когда старый код вс
Это сильно упрощает жизнь при апгрейдах. Когда старый код все-таки может записать в таблицу с добавленными колонками. А не падать и заставлять всех всё править.
Если есть такая потребность - ну пиши DEFAULT явно. Или не с
Если есть такая потребность - ну пиши DEFAULT явно. Или не ставь NOT NULL
Ставить неявно DEFAUL - диверсия.
Но, конечно, это все сползает к дискуссии об use strict. В том смысле, что в скриптах на экран я use strict не пишу, но как только переползаем некоторый размер - пишу и правлю все объявления. Что не мешает программы на полстранички и на С++ писать.
Забавно то, что в большинстве hook_schema (определении полей
Забавно то, что в большинстве hook_schema (определении полей таблиц) поля типа text идут not null и без default. В 7ке наверно будет работать какое-то умолчание...
В этом нет ничего страшного, пока в эти поля пишут. MySQL по
В этом нет ничего страшного, пока в эти поля пишут. MySQL поставил default, PgSQL - нет, ну и что.
Но наверное в генераторе схемы для постгреса нужно явно ставить default если есть not null, иначе эти грабли будут больно биться.