Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Install Beta module via Carton

by chrestomanci (Priest)
on Jan 16, 2015 at 10:06 UTC ( #1113473=perlquestion: print w/replies, xml ) Need Help??

chrestomanci has asked for the wisdom of the Perl Monks concerning the following question:

DBIx::Class unique constraint with limited key length

Greetings wise brothers. I seek your wisdom on how to be confident that all are different without the need to remember every part.

I am working DBIx::Class, and I would like to add a unique constraint of limited key length to a much longer varchar column

My DBIC schema definition code looks like this:

__PACKAGE__->table("classification_rules"); __PACKAGE__->add_columns( "id", { data_type => "integer", is_auto_increment => 1, is_nullable => 0 + }, ... "path", { data_type => "varchar", is_nullable => 0, size => 600 }, ); __PACKAGE__->set_primary_key("id"); __PACKAGE__->add_unique_constraint( ['path'] );

This generates MySQL like this:

CREATE TABLE `classification_rules` ( `id` integer NOT NULL auto_increment, ... `path` text NOT NULL, PRIMARY KEY (`id`), UNIQUE `classification_rules_path` (`path`) ) ENGINE=InnoDB;

The problem is, that when I deploy, MySQL correctly reports that you can not have a unique constraint on a varchar that long without limiting the key length. What I would like to do, is have it generate SQL like UNIQUE `classification_rules_path` (path(250)) but I cannot work out how.

I have already stepped through the add_unique_constraint code in DBIx::Class::ResultSource to try to find an undocumented feature or hook I can use and also added breakpoints in SQL::Translator::Producer::MySQL to try and spot where the SQL is being generated from the other end.

Is there another solution to this? Is there a hook to add literal SQL to the definition for my table?

Thank you.

Replies are listed 'Best First'.
Re: Install Beta module via Carton
by Anonymous Monk on Jan 16, 2015 at 10:27 UTC

    I'm sure this any form of AUTHORID/FILENAME will work like LEEJO/ provided the tarball is on CPAN

    A url will also probably work

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1113473]
Approved by marto
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (8)
As of 2019-11-19 23:05 GMT
Find Nodes?
    Voting Booth?
    Strict and warnings: which comes first?

    Results (96 votes). Check out past polls.