Как указать длину индекса при использовании DBIx :: Class? - PullRequest
0 голосов
/ 28 июля 2011

Я использую DBIx :: Class и использую sqlt_deploy_hook для:

sub {
    my ($self, $sqlt_table) = @_;
    $sqlt_table->add_index(name => 'indexes', fields => [keys %for_indexing]);
}

Некоторые столбцы, которые я хочу индексировать, имеют тип text или varchars> 255 длины.MySQL не любит текстовые индексы, если вы не укажете их длину, например:

index (long_field(996))

Но посмотрите на SQL :: Translator :: Schema :: Table (который имеет метод add_index) и Index,Я не вижу способа указать длину.

add_index(name => 'indexes', fields => ['long_field'])

генерирует этот SQL:

INDEX `indexes` (`long_field`)

и это:

add_index(name => 'indexes', fields => ['long_field(996)'])

генерирует этот SQL:

INDEX `indexes` (`long_field(996)`)

, который не работает, поскольку нет столбца с таким именем.

До сих пор я справлялся с этим, просто не индексируя свои текстовые столбцы.Однако сейчас я пытаюсь использовать DBIx :: Class :: DeploymentHandler, который преобразует мои длинные varchars в текстовые столбцы при «установке», и мне действительно нужно проиндексировать эти столбцы varchar.

Что я могу сделать?

1 Ответ

1 голос
/ 28 июля 2011

Извините, SQL::Translator просто не понимает, как создавать объявления индексов с длинами, что означает, что DBIC deploy и DBICDH также не могут этого делать, поскольку они выполняют свою работу через SQLT.Если вы хотите зайти по irc.perl.org #sql-translator и обсудить, как эта функция будет работать и каков будет интерфейс, ее можно добавить, но в настоящее время это невозможно.

Что касается вашего утверждения о том, чтоDBICDH «конвертирует мои длинные varchars в текстовые столбцы», с этим что-то очень не так;это нежелательное поведение для DBICDH.Пожалуйста, отправьте новый вопрос об этой проблеме, показывая, что вы делаете, или перенесите его на irc.perl.org #dbix-class.

...