fixing problems found by Crud.t

This commit is contained in:
JT Smith 2008-09-20 05:17:26 +00:00
parent b3ac535f9a
commit d9fffbdf7a

View file

@ -61,7 +61,7 @@ sub create {
$clause = "where ".$dbh->quote_identifier($sequenceKey)."=?"; $clause = "where ".$dbh->quote_identifier($sequenceKey)."=?";
push @params, $data->{$sequenceKey}; push @params, $data->{$sequenceKey};
} }
my $sequenceNumber = $db->getScalar("select max(sequenceNumber) from ".$dbh->quote_identifier($tableName)." $clause", \@params); my $sequenceNumber = $db->quickScalar("select max(sequenceNumber) from ".$dbh->quote_identifier($tableName)." $clause", \@params);
$sequenceNumber++; $sequenceNumber++;
# create object # create object
@ -87,15 +87,19 @@ sub crud_createTable {
my ($class, $session) = @_; my ($class, $session) = @_;
my $db = $session->db; my $db = $session->db;
my $dbh = $db->dbh; my $dbh = $db->dbh;
$db->write('create table '.$dbh->quote_identifier($class->crud_getTableName).' ( my $tableName = $class->crud_getTableName;
$db->write('create table '.$dbh->quote_identifier($tableName).' (
'.$dbh->quote_identifier($class->crud_getTableKey).' varchar(22) binary not null primary key, '.$dbh->quote_identifier($class->crud_getTableKey).' varchar(22) binary not null primary key,
sequenceNumber int not null default 1, sequenceNumber int not null default 1,
dateCreated datetime, dateCreated datetime,
lastUpdated datetime lastUpdated datetime
)'); )');
$class->crud_updateTable($session); $class->crud_updateTable($session);
$db->write('alter table '.dbh->quote_identifier($class->crud_getTableName).' my $sequenceKey = $class->crud_getSequenceKey;
add index '.$dbh->quote_identifier($class->crud_getTableKey).' ('.$dbh->quote_identifier($class->crud_getTableKey).')'); if ($sequenceKey) {
$db->write('alter table '.dbh->quote_identifier($tableName).'
add index '.$dbh->quote_identifier($sequenceKey).' ('.$dbh->quote_identifier($sequenceKey).')');
}
return 1; return 1;
} }
@ -110,7 +114,7 @@ B<NOTE:> When you subclass WebGUI::Crud, note the properties you're defining in
Returns a hash reference that looks like this: Returns a hash reference that looks like this:
{ {
tableName => 'unamed_crud_table', tableName => 'unnamed_crud_table',
tableKey => 'id', tableKey => 'id',
sequenceKey => '', sequenceKey => '',
properties => {}, properties => {},
@ -150,7 +154,7 @@ sub crud_definition {
my $class = shift; my $class = shift;
tie my %properties, 'Tie::IxHash'; tie my %properties, 'Tie::IxHash';
my %definition = ( my %definition = (
tableName => 'unamed_crud_table', tableName => 'unnamed_crud_table',
tableKey => 'id', tableKey => 'id',
sequenceKey => '', sequenceKey => '',
properties => \%properties, properties => \%properties,
@ -174,7 +178,7 @@ sub crud_dropTable {
my ($class, $session) = @_; my ($class, $session) = @_;
my $db = $session->db; my $db = $session->db;
my $dbh = $db->dbh; my $dbh = $db->dbh;
$db->write("drop table ".$dbh->quote_identifier($class->crud_getTableName).""); $db->write("drop table ".$dbh->quote_identifier($class->crud_getTableName));
return 1; return 1;
} }
@ -255,6 +259,10 @@ sub crud_updateTable {
my %tableFields = (); my %tableFields = ();
my $sth = $db->read("DESCRIBE ".$tableName); my $sth = $db->read("DESCRIBE ".$tableName);
while (my ($col, $type) = $sth->array) { while (my ($col, $type) = $sth->array) {
next if ($col eq $class->crud_getTableKey);
next if ($col eq 'lastUpdated');
next if ($col eq 'dateCreated');
next if ($col eq 'sequenceNumber');
$tableFields{$col} = $type; $tableFields{$col} = $type;
} }
@ -350,11 +358,11 @@ sub get {
# return a specific property # return a specific property
if (defined $name) { if (defined $name) {
return $self->objectData->{$name}; return $objectData{id $self}{$name};
} }
# return a copy of all properties # return a copy of all properties
my %copy = %{$self->objectData}; my %copy = %{$objectData{id $self}};
return \%copy; return \%copy;
} }
@ -481,7 +489,7 @@ Returns a guid, this object's unique identifier.
sub getId { sub getId {
my $self = shift; my $self = shift;
return $self->objectData->{$self->crud_getTableKey}; return $objectData{id $self}{$self->crud_getTableKey};
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------