Commit | Line | Data |
4f0f6fff |
1 | package DBM::Deep::SQL::Util; |
2 | |
3 | use strict; |
4 | use warnings FATAL => 'all'; |
5 | |
6 | sub _create { |
7 | my ($obj, $type, $data) = @_; |
8 | if ($type eq 'hash' || $type eq 'array') { |
9 | $obj->_insert( |
10 | 'table' => 'rec_item', |
11 | 'fields' => { |
12 | 'item_type' => $type, |
13 | }, |
14 | ); |
15 | my $id = $obj->_lastid(); |
16 | $obj->_insert( |
17 | 'table' => 'rec_'. $type, |
18 | 'fields' => { |
19 | 'id' => $id, |
20 | }, |
21 | ); |
22 | return $id; |
23 | } |
24 | else { |
25 | $obj->_insert( |
26 | 'table' => 'rec_'. $type, |
27 | 'fields' => $data, |
28 | ); |
29 | return $obj->_lastid(); |
30 | } |
31 | } |
32 | |
33 | sub _lastid { |
34 | my ($obj) = @_; |
35 | my $sth = $obj->{'dbi'}->query('select last_insert_id()'); |
36 | my $q = $sth->fetchall_arrayref(); |
37 | return $q->[0]->[0]; |
38 | } |
39 | |
40 | sub _select { |
41 | my ($obj, @arg) = @_; |
42 | my %prm = @arg; |
43 | my $sth = $obj->{'dbi'}->select(\%prm); |
44 | return $sth->fetchall_arrayref(); |
45 | } |
46 | |
47 | sub _insert { |
48 | my ($obj, @arg) = @_; |
49 | my %prm = @arg; |
50 | return $obj->{'dbi'}->insert(\%prm); |
51 | } |
52 | |
53 | sub _update { |
54 | my ($obj, @arg) = @_; |
55 | my %prm = @arg; |
56 | return $obj->{'dbi'}->update(\%prm); |
57 | } |
58 | |
59 | sub _delete_sql { |
60 | my ($obj, $table, $where) = @_; |
61 | return $obj->{'dbi'}->delete($table, $where); |
62 | } |
63 | |
64 | sub _clone_tree { |
65 | my ($obj, $data) = @_; |
66 | if (ref($data)) { |
67 | if ($data =~ /HASH/) { |
68 | my %nv = (); |
69 | foreach my $k (keys %$data) { |
70 | $nv{$k} = $obj->_clone_tree($data->{$k}); |
71 | } |
72 | return \%nv; |
73 | } |
74 | elsif ($data =~ /ARRAY/) { |
75 | my @nv = (); |
76 | foreach my $i (0..$#{$data}) { |
77 | $nv[$i] = $obj->_clone_tree($data->[$i]); |
78 | } |
79 | return \@nv; |
80 | } |
81 | elsif ($data =~ /SCALAR/) { |
82 | my $nv = $obj->_clone_tree($$data); |
83 | return \$nv; |
84 | } |
85 | } |
86 | else { |
87 | my $nv = $data; |
88 | return $nv; |
89 | } |
90 | } |
91 | |
92 | sub _tiearray { |
93 | my ($obj, $id) = @_; |
94 | my $rec = undef; |
95 | tie(@$rec, 'DBM::Deep::SQL::Array', ( |
96 | 'dbi' => $obj->{'dbi'}, |
97 | 'id' => $id, |
98 | 'prefetch' => $obj->{'prefetch'}, |
99 | )); |
100 | bless $rec, 'DBM::Deep::SQL::Array'; |
101 | return $rec; |
102 | } |
103 | |
104 | sub _tiehash { |
105 | my ($obj, $id) = @_; |
106 | my $rec = undef; |
107 | tie(%$rec, 'DBM::Deep::SQL::Hash', ( |
108 | 'dbi' => $obj->{'dbi'}, |
109 | 'id' => $id, |
110 | 'prefetch' => $obj->{'prefetch'}, |
111 | )); |
112 | bless $rec, 'DBM::Deep::SQL::Hash'; |
113 | return $rec; |
114 | } |
115 | |
116 | 1; |
117 | __END__ |