Hi all,
This may or may not be of use to anyone. One thing I've done is create
a 'datatype generator' which is shorthand for many data types and it's
legible, too. For example, instead of this:
reason => {
type => 'scalar',
length => 255,
default => '',
not_null => 1,
lazy => 1,
},
I can write this:
reason => SCALAR( 255, DEFAULT '', NOT_NULL, LAZY ),
Here's the beginnings of the package (minus POD and a couple of other
business specific things):
package My::Rose::Datatypes;
use strict;
use warnings;
use Exporter::NoWork;
use My::Exceptions 'throw_invalid';
use Scalar::Util qw/looks_like_number reftype/;
BEGIN {
my @types = qw(
date
integer
text
timestamp
);
my %types = ( tinytext => 'text', map { $_ => $_ } @types );
while ( my ( $name, $type ) = each %types ) {
my $function = uc $name;
no strict 'refs';
*$function = sub {
if ( looks_like_number( $_[0] ) ) {
throw_invalid
"Datatype '$name' does not require a numeric length
'$_[0]'";
}
return { type => $type, @_ };
};
}
my @types_with_lengths = qw(
character
scalar
tinyint
varchar
);
my %types_with_lengths = (
char => 'character',
map { $_ => $_ } @types_with_lengths );
while ( my ( $name, $type ) = each %types_with_lengths ) {
my $function = uc $name;
no strict 'refs';
*$function = sub {
my $length = shift;
unless ( looks_like_number($length) ) {
throw_invalid
"Datatype '$name' requires a numeric length, not
'$length'";
}
return { type => $type, length => $length, @_ };
};
}
}
sub ENUM {
my $values = shift;
throw_invalid "First argument to _ENUM must be an array
reference"
unless 'ARRAY' eq reftype $values;
return { type => 'enum', values => $values, @_ };
}
sub DEFAULT($) { return default => shift }
sub LAZY() { return lazy => 1 }
sub NOT_NULL() { return not_null => 1 }
sub PRIMARY_KEY() { return primary_key => 1 }
1;
Anyone see problems with this approach?
Cheers,
Ovid
--
Buy the book -- http://www.oreilly.com/catalog/perlhks/
Perl and CGI -- http://users.easystreet.com/ovid/cgi_course/
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Rose-db-object mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rose-db-object