1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
package Tangram::Driver::mysql::Storage;
use strict;
use Tangram::Driver::mysql::Expr::Date;
use Tangram::Driver::mysql::Expr::Integer;
use Tangram::Storage;
use vars qw(@ISA);
@ISA = qw( Tangram::Storage );
sub make_id
{
my ($storage, $class_id) = @_;
if ($storage->{layout1}) {
my $table = $storage->{schema}{class_table};
$storage->sql_do("UPDATE $table SET lastObjectId = LAST_INSERT_ID(lastObjectId + 1) WHERE classId = $class_id");
} else {
my $table = $storage->{schema}{control};
$storage->sql_do("UPDATE $table SET mark = LAST_INSERT_ID(mark + 1)");
}
return sprintf "%d%0$storage->{cid_size}d", $storage->sql_selectall_arrayref("SELECT LAST_INSERT_ID()")->[0][0], $class_id;
}
sub tx_start
{
my $storage = shift;
unless (@{ $storage->{tx} }) {
if ( $storage->{no_tx} ) {
$storage->sql_do (q{SELECT GET_LOCK("tx", 10)} ); #}) #cperl-mode--
}
}
$storage->SUPER::tx_start(@_);
}
sub tx_commit
{
my $storage = shift;
$storage->SUPER::tx_commit(@_);
unless (@{ $storage->{tx} }) {
if ( $storage->{no_tx} ) {
$storage->sql_do(q/SELECT RELEASE_LOCK("tx")/)
}
}
}
sub tx_rollback
{
my $storage = shift;
if ( $storage->{no_tx} ) {
$storage->sql_do(q/SELECT RELEASE_LOCK("tx")/);
}
$storage->SUPER::tx_rollback(@_);
}
my %improved_date =
(
'Tangram::Type::TimeAndDate' => 'Tangram::Driver::mysql::Expr::Date',
'Tangram::Type::Date' => 'Tangram::Driver::mysql::Expr::Date',
);
sub expr
{
my $self = shift;
my $type = shift;
my ($expr, @remotes) = @_;
return Tangram::Driver::mysql::Expr::Integer->new($type, $expr, @remotes)
if ref($type) eq 'Tangram::Type::Integer';
my $improved_date = $improved_date{ref($type)};
return $improved_date->new($type, $expr, @remotes)
if $improved_date;
return $type->expr(@_);
}
1;
|