Sequences table. Стартовые значения.

Главные вкладки

Аватар пользователя beliy_snow beliy_snow 20 мая 2008 в 14:14

Прислали посмотреть тестовое задание претендента на должность разработчика. В поясниловке написано установить такие-то такие-то модули, все понятно, бла-бла-бла. Дохожу до установки самого модуля, устанавливаю, ошибка. Лезу в код инсталлера модуля, с виду все понятно:
<?php $sfuser_rid = db_next_id('{role}_rid');
db_query("INSERT INTO {role} (rid, name) VALUES (%d, 'superforum user')", $sfuser_rid);
?>
Вроде разумный код, ошибок не должно быть... А, важное замечание - ставлю на голый друпал, as is из коробки. Так вот, код. Все правильно ведь? Правильно, но ошибка вылазит.

Проблема:

  1. Инсталлер модуля system создает таблицу sequences;
  2. По умолчанию в системе 2 роли пользователей: аноним и зарегистрированный пользователь;
  3. Типы пользователей есть, а записи role_rid в таблице sequences нету.
  4. При "ручном" создании ролей пользователей (через инсталлер модуля) результат работы функции db_next_id('{role}_rid'); некорректный.

Решение:
Сразу после установки Друпала либо создать новую роль пользователя из админки, либо вручную прописать значение role_rid = 2 в таблице sequences.

Или я что-то пропустил?

Комментарии

Аватар пользователя Krotty@drupal.org Krotty@drupal.org 21 мая 2008 в 12:48

Дело в том что автор модуля, который вы используете, перемудрил. В Drupal не используется sequences для ролей.
Добавление роли производится запросом следующего вида db_query("INSERT INTO {role} (name) VALUES ('%s')", $value);
Поле rid установлено как auto_increment и заполняется автоматически.