Accessing meta->_method_ is a mutator.

This commit is contained in:
Colin Kuskie 2010-11-02 18:26:21 -07:00
parent d144cd906d
commit 5c494955c0

View file

@ -18,7 +18,7 @@ package WebGUI::Crud;
use strict; use strict;
use Moose; use Moose;
use Definition::Crud; use WebGUI::Definition::Crud;
use JSON; use JSON;
use Tie::IxHash; use Tie::IxHash;
use Clone qw/clone/; use Clone qw/clone/;
@ -62,7 +62,7 @@ around BUILDARGS => sub {
my $db = $session->db; my $db = $session->db;
# determine sequence # determine sequence
my $sequenceKey = $class->meta->sequenceKey($session); my $sequenceKey = $class->meta->sequenceKey();
my $clause; my $clause;
my @params; my @params;
if ($sequenceKey) { if ($sequenceKey) {
@ -87,7 +87,7 @@ around BUILDARGS => sub {
} }
# retrieve object data # retrieve object data
my $data = $session->db->getRow($class->meta->tableName($session), $tableKey, $identifier); my $data = $session->db->getRow($class->meta->tableName(), $tableKey, $identifier);
if ($data->{$tableKey} eq '') { if ($data->{$tableKey} eq '') {
WebGUI::Error::ObjectNotFound->throw(error=>'no such '.$tableKey, id=>$identifier); WebGUI::Error::ObjectNotFound->throw(error=>'no such '.$tableKey, id=>$identifier);
} }
@ -222,7 +222,7 @@ A reference to a WebGUI::Session.
sub crud_createOrUpdateTable { sub crud_createOrUpdateTable {
my ( $class, $session ) = @_; my ( $class, $session ) = @_;
my $tableName = $class->meta->tableName($session); my $tableName = $class->meta->tableName();
my $tableExists = $session->db->dbh->do("show tables like '$tableName'"); my $tableExists = $session->db->dbh->do("show tables like '$tableName'");
return ( $tableExists ne '0E0' ? $class->crud_updateTable($session) : $class->crud_createTable($session) ); return ( $tableExists ne '0E0' ? $class->crud_updateTable($session) : $class->crud_createTable($session) );
@ -244,7 +244,7 @@ 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;
my $tableName = $class->meta->tableName($session); my $tableName = $class->meta->tableName();
$class->crud_dropTable($session); $class->crud_dropTable($session);
$db->write('create table '.$dbh->quote_identifier($tableName).' ( $db->write('create table '.$dbh->quote_identifier($tableName).' (
'.$dbh->quote_identifier($class->meta->tableKey($session)).' CHAR(22) binary not null primary key, '.$dbh->quote_identifier($class->meta->tableKey($session)).' CHAR(22) binary not null primary key,
@ -253,7 +253,7 @@ sub crud_createTable {
lastUpdated datetime lastUpdated datetime
)'); )');
$class->crud_updateTable($session); $class->crud_updateTable($session);
my $sequenceKey = $class->meta->sequenceKey($session); my $sequenceKey = $class->meta->sequenceKey();
if ($sequenceKey) { if ($sequenceKey) {
$db->write('alter table '.$dbh->quote_identifier($tableName).' $db->write('alter table '.$dbh->quote_identifier($tableName).'
add index '.$dbh->quote_identifier($sequenceKey).' ('.$dbh->quote_identifier($sequenceKey).')'); add index '.$dbh->quote_identifier($sequenceKey).' ('.$dbh->quote_identifier($sequenceKey).')');
@ -349,7 +349,7 @@ sub crud_dropTable {
} }
my $db = $session->db; my $db = $session->db;
my $dbh = $db->dbh; my $dbh = $db->dbh;
$db->write("drop table if exists ".$dbh->quote_identifier($class->meta->tableName($session))); $db->write("drop table if exists ".$dbh->quote_identifier($class->meta->tableName()));
return 1; return 1;
} }
@ -440,12 +440,14 @@ sub crud_updateTable {
} }
my $db = $session->db; my $db = $session->db;
my $dbh = $db->dbh; my $dbh = $db->dbh;
my $tableName = $dbh->quote_identifier($class->meta->tableName($session)); my $tableName = $dbh->quote_identifier($class->meta->tableName());
# find out what fields already exist # find out what fields already exist
my %tableFields = (); my %tableFields = ();
my $sth = $db->read("DESCRIBE ".$tableName); my $sth = $db->read("DESCRIBE ".$tableName);
my $tableKey = $class->meta->tableKey($session); my $tableKey = $class->meta->tableKey();
use Data::Dumper;
warn Dumper ($tableKey);
while (my ($col, $type, $null, $key, $default) = $sth->array) { while (my ($col, $type, $null, $key, $default) = $sth->array) {
next if ($col ~~ [$tableKey, 'lastUpdated', 'dateCreated','sequenceNumber']); next if ($col ~~ [$tableKey, 'lastUpdated', 'dateCreated','sequenceNumber']);
$tableFields{$col} = { $tableFields{$col} = {
@ -522,7 +524,7 @@ Deletes this object from the database. Returns 1 on success.
sub delete { sub delete {
my $self = shift; my $self = shift;
$self->session->db->deleteRow($self->meta->tableName($self->session), $self->meta->tableKey($self->session), $self->getId); $self->session->db->deleteRow($self->meta->tableName(), $self->meta->tableKey(), $self->getId);
$self->reorder; $self->reorder;
return 1; return 1;
} }
@ -537,9 +539,9 @@ Moves this object one position closer to the end of its sequence. If the object
sub demote { sub demote {
my $self = shift; my $self = shift;
my $tableKey = $self->meta->tableKey($self->session); my $tableKey = $self->meta->tableKey();
my $tableName = $self->meta->tableName($self->session); my $tableName = $self->meta->tableName();
my $sequenceKey = $self->meta->sequenceKey($self->session); my $sequenceKey = $self->meta->sequenceKey();
my @params = ($self->get('sequenceNumber') + 1); my @params = ($self->get('sequenceNumber') + 1);
my $db = $self->session->db; my $db = $self->session->db;
my $dbh = $db->dbh; my $dbh = $db->dbh;
@ -690,10 +692,10 @@ sub getAllSql {
# setup # setup
my $dbh = $session->db->dbh; my $dbh = $session->db->dbh;
my $tableName = $class->meta->tableName($session); my $tableName = $class->meta->tableName();
# the base query # the base query
my $sql = "select ".$dbh->quote_identifier($tableName, $class->meta->tableKey($session))." from ".$dbh->quote_identifier($tableName); my $sql = "select ".$dbh->quote_identifier($tableName, $class->meta->tableKey())." from ".$dbh->quote_identifier($tableName);
# process joins # process joins
my @joins; my @joins;
@ -728,7 +730,7 @@ sub getAllSql {
} }
# limit to our sequence # limit to our sequence
my $sequenceKey = $class->meta->sequenceKey($session); my $sequenceKey = $class->meta->sequenceKey();
if (exists $options->{sequenceKeyValue} && $sequenceKey) { if (exists $options->{sequenceKeyValue} && $sequenceKey) {
push @params, $options->{sequenceKeyValue}; push @params, $options->{sequenceKeyValue};
push @where, $dbh->quote_identifier($tableName, $sequenceKey)."=?"; push @where, $dbh->quote_identifier($tableName, $sequenceKey)."=?";
@ -801,9 +803,9 @@ Moves this object one position closer to the beginning of its sequence. If the o
sub promote { sub promote {
my $self = shift; my $self = shift;
my $tableKey = $self->meta->tableKey($self->session); my $tableKey = $self->meta->tableKey();
my $tableName = $self->meta->tableName($self->session); my $tableName = $self->meta->tableName();
my $sequenceKey = $self->meta->sequenceKey($self->session); my $sequenceKey = $self->meta->sequenceKey();
my $sequenceKeyValue = $self->get($sequenceKey); my $sequenceKeyValue = $self->get($sequenceKey);
my @params = ($self->get('sequenceNumber')-1); my @params = ($self->get('sequenceNumber')-1);
my $clause = ''; my $clause = '';
@ -833,6 +835,7 @@ sub promote {
=head2 reorder () =head2 reorder ()
Removes gaps in the sequence. Usually only called by delete(), but may be useful if you randomize a sequence. Removes gaps in the sequence. Usually only called by delete(), but may be useful if you randomize a sequence.
This method will not update the current object.
=cut =cut
@ -863,9 +866,6 @@ sub reorder {
# make the changes # make the changes
$db->beginTransaction; $db->beginTransaction;
while (my ($id) = $current->array) { while (my ($id) = $current->array) {
if ($id eq $self->getId) {
$objectData{id $self} = $i;
}
my @params = ($i, $id); my @params = ($i, $id);
if ($sequenceKey) { if ($sequenceKey) {
push @params, $sequenceKeyValue; push @params, $sequenceKeyValue;