File: Storage.pm

package info (click to toggle)
libtangram-perl 2.10-1.1
  • links: PTS
  • area: main
  • in suites: lenny, squeeze, wheezy
  • size: 1,064 kB
  • ctags: 703
  • sloc: perl: 9,665; makefile: 35
file content (79 lines) | stat: -rw-r--r-- 1,874 bytes parent folder | download | duplicates (6)
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;