[jifty-devel] user-defined data types

Edgar Whipple jifty at misterwhipple.com
Wed Feb 21 22:35:51 EST 2007

I don't see anything in the jifty-devel archives about user-defined data
types. Has there been any discussion?

They wouldn't necessarily have to be supported in the database engine,
although that might be useful. I can think of a couple of ways to do it
at the model-declaration level.

1. Use a simple string for the repeated column attributes.

2. Define a subclass of Jifty::DBI::Column, the instances of which carry
the repeated attributes.

3. Define a separate subclass of Jifty::DBI::Column for each
user-defined type.

Here are some guesses about how they might be used.


package MyJiftyApp::Model::MyModel1;
use Jifty::DBI::Schema;

# setting up nos. 1 and 2. 
# These would probably be in a separate package
my $ud_type_string = qq(
    type => 'text',
    max_length => 128,
    render_as => 'Text',
    mandatory => '',
my $ud_type_object 
    = Jifty::DBI::Column::UserDefined::Concrete
        ->new( {type => 'text', @etcetera} )

use MyJiftyApp::Record schema {

    # 1. example of using type definition string
    column firstname =>
        label is 'Firstname',
        since '0.0.1',
        ud_type is $ud_type_string;

    # 2. example of concrete Column subclass
    column surname =>
        label is 'Surname',
        since '0.0.1'
        ud_type is $ud_type_object;

    # 3. example of abstract Column subclass
    column middlename =>
        based_on MyJiftyApp::UserType::MyUserType1,
        label is 'Middle',
        since '0.0.1';


package MyJiftyApp::UserTypes::MyUserType1;
use Jifty::DBI::Column::UserDefined::Abstract;
### and then goodness knows what goes here.


Each of these involves adding the indicated keyword to
Jifty::DBI::Schema. We might also want a 'not' keyword, e.g. 'is not
mandatory' in the model overrides 'is mandatory' in the reusable column


PS These are just top-of-my-head scribbles, so don't judge too harshly. 

ln -s /dev/null ~/.sig

More information about the jifty-devel mailing list