| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package SQL::OOP::Base; |
|
2
|
19
|
|
|
19
|
|
103
|
use strict; |
|
|
19
|
|
|
|
|
34
|
|
|
|
19
|
|
|
|
|
623
|
|
|
3
|
19
|
|
|
19
|
|
90
|
use warnings; |
|
|
19
|
|
|
|
|
36
|
|
|
|
19
|
|
|
|
|
518
|
|
|
4
|
19
|
|
|
19
|
|
91
|
use Scalar::Util qw(blessed); |
|
|
19
|
|
|
|
|
59
|
|
|
|
19
|
|
|
|
|
1143
|
|
|
5
|
19
|
|
|
19
|
|
458
|
use 5.005; |
|
|
19
|
|
|
|
|
68
|
|
|
|
19
|
|
|
|
|
16745
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $quote_char; |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
sub quote_char { |
|
10
|
1111
|
|
|
1111
|
1
|
1338
|
my ($self, $val) = @_; |
|
11
|
1111
|
100
|
|
|
|
1987
|
if (defined $val) { |
|
12
|
2
|
|
|
|
|
6
|
$self->{quote_char} = $val; |
|
13
|
|
|
|
|
|
|
} |
|
14
|
1111
|
100
|
|
|
|
2354
|
if (! defined $self->{quote_char}) { |
|
15
|
786
|
|
|
|
|
1360
|
$self->{quote_char} = q("); |
|
16
|
|
|
|
|
|
|
} |
|
17
|
1111
|
|
66
|
|
|
3240
|
return $quote_char || $self->{quote_char}; |
|
18
|
|
|
|
|
|
|
} |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
sub escape_code_ref { |
|
21
|
208
|
|
|
208
|
1
|
255
|
my ($self, $val) = @_; |
|
22
|
208
|
50
|
|
|
|
417
|
if (defined $val) { |
|
23
|
0
|
|
|
|
|
0
|
$self->{escape_code_ref} = $val; |
|
24
|
|
|
|
|
|
|
} |
|
25
|
208
|
100
|
|
|
|
468
|
if (! defined $self->{escape_code_ref}) { |
|
26
|
|
|
|
|
|
|
$self->{escape_code_ref} = sub { |
|
27
|
208
|
|
|
208
|
|
298
|
my ($str, $quote_char) = @_; |
|
28
|
208
|
|
|
|
|
713
|
$str =~ s{$quote_char}{$quote_char$quote_char}g; |
|
29
|
208
|
|
|
|
|
386
|
return $str; |
|
30
|
206
|
|
|
|
|
1172
|
}; |
|
31
|
|
|
|
|
|
|
} |
|
32
|
208
|
|
|
|
|
546
|
return $self->{escape_code_ref}; |
|
33
|
|
|
|
|
|
|
} |
|
34
|
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
### --- |
|
36
|
|
|
|
|
|
|
### Constructor |
|
37
|
|
|
|
|
|
|
### --- |
|
38
|
|
|
|
|
|
|
sub new { |
|
39
|
608
|
|
|
608
|
1
|
12464
|
my ($class, $str, $bind_ref) = @_; |
|
40
|
608
|
100
|
100
|
|
|
1806
|
if (ref $str && (ref($str) eq 'CODE')) { |
|
41
|
15
|
|
|
|
|
41
|
$str = $str->(); |
|
42
|
|
|
|
|
|
|
} |
|
43
|
608
|
100
|
66
|
|
|
3138
|
if (blessed($str) && $str->isa(__PACKAGE__)) { |
|
|
|
100
|
|
|
|
|
|
|
44
|
165
|
|
|
|
|
689
|
return $str; |
|
45
|
|
|
|
|
|
|
} elsif ($str) { |
|
46
|
441
|
50
|
66
|
|
|
1084
|
if ($bind_ref && ! ref $bind_ref) { |
|
47
|
0
|
|
|
|
|
0
|
die '$bind_ref must be an Array ref'; |
|
48
|
|
|
|
|
|
|
} |
|
49
|
441
|
|
100
|
|
|
4574
|
return bless { |
|
50
|
|
|
|
|
|
|
str => $str, |
|
51
|
|
|
|
|
|
|
gen => undef, |
|
52
|
|
|
|
|
|
|
bind => ($bind_ref || []) |
|
53
|
|
|
|
|
|
|
}, $class; |
|
54
|
|
|
|
|
|
|
} |
|
55
|
2
|
|
|
|
|
6
|
return; |
|
56
|
|
|
|
|
|
|
} |
|
57
|
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
### --- |
|
59
|
|
|
|
|
|
|
### Get SQL snippet |
|
60
|
|
|
|
|
|
|
### --- |
|
61
|
|
|
|
|
|
|
sub to_string { |
|
62
|
1020
|
|
|
1020
|
1
|
3488
|
my ($self, $prefix) = @_; |
|
63
|
1020
|
|
|
|
|
2374
|
local $SQL::OOP::Base::quote_char = $self->quote_char; |
|
64
|
1020
|
100
|
|
|
|
2158
|
if (! defined $self->{gen}) { |
|
65
|
772
|
|
|
|
|
1932
|
$self->generate; |
|
66
|
|
|
|
|
|
|
} |
|
67
|
1020
|
100
|
100
|
|
|
3836
|
if ($self->{gen} && $prefix) { |
|
68
|
1
|
|
|
|
|
4
|
return $prefix. ' '. $self->{gen}; |
|
69
|
|
|
|
|
|
|
} else { |
|
70
|
1019
|
|
|
|
|
5012
|
return $self->{gen}; |
|
71
|
|
|
|
|
|
|
} |
|
72
|
|
|
|
|
|
|
} |
|
73
|
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
### --- |
|
75
|
|
|
|
|
|
|
### Get SQL snippet with values embedded [EXPERIMENTAL] |
|
76
|
|
|
|
|
|
|
### --- |
|
77
|
|
|
|
|
|
|
sub to_string_embedded { |
|
78
|
2
|
|
|
2
|
1
|
9
|
my ($self, $quote_with) = @_; |
|
79
|
2
|
|
|
|
|
7
|
local $SQL::OOP::Base::quote_char = $self->quote_char; |
|
80
|
2
|
|
100
|
|
|
7
|
$quote_with ||= q{'}; |
|
81
|
2
|
|
|
|
|
5
|
my $format = $self->to_string; |
|
82
|
2
|
|
|
|
|
11
|
$format =~ s{\?}{%s}g; |
|
83
|
|
|
|
|
|
|
return |
|
84
|
2
|
|
|
|
|
3
|
sprintf($format, map {$self->quote($_, $quote_with)} @{[$self->bind]}); |
|
|
2
|
|
|
|
|
8
|
|
|
|
2
|
|
|
|
|
5
|
|
|
85
|
|
|
|
|
|
|
} |
|
86
|
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
### --- |
|
88
|
|
|
|
|
|
|
### Get binded values in array |
|
89
|
|
|
|
|
|
|
### --- |
|
90
|
|
|
|
|
|
|
sub bind { |
|
91
|
128
|
|
|
128
|
1
|
203
|
my ($self) = @_; |
|
92
|
128
|
50
|
|
|
|
277
|
return @{$self->{bind} || []} if (wantarray); |
|
|
128
|
50
|
|
|
|
503
|
|
|
93
|
0
|
0
|
|
|
|
0
|
return scalar @{$self->{bind} || []}; |
|
|
0
|
|
|
|
|
0
|
|
|
94
|
|
|
|
|
|
|
} |
|
95
|
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
### --- |
|
97
|
|
|
|
|
|
|
### initialize generated SQL |
|
98
|
|
|
|
|
|
|
### --- |
|
99
|
|
|
|
|
|
|
sub _init_gen { |
|
100
|
471
|
|
|
471
|
|
588
|
my ($self) = @_; |
|
101
|
471
|
|
|
|
|
1423
|
$self->{gen} = undef; |
|
102
|
|
|
|
|
|
|
} |
|
103
|
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
### --- |
|
105
|
|
|
|
|
|
|
### Generate SQL snippet |
|
106
|
|
|
|
|
|
|
### --- |
|
107
|
|
|
|
|
|
|
sub generate { |
|
108
|
441
|
|
|
441
|
1
|
527
|
my ($self) = @_; |
|
109
|
441
|
|
50
|
|
|
1099
|
$self->{gen} = $self->{str} || ''; |
|
110
|
441
|
|
|
|
|
811
|
return $self; |
|
111
|
|
|
|
|
|
|
} |
|
112
|
|
|
|
|
|
|
|
|
113
|
|
|
|
|
|
|
### --- |
|
114
|
|
|
|
|
|
|
### quote |
|
115
|
|
|
|
|
|
|
### --- |
|
116
|
|
|
|
|
|
|
sub quote { |
|
117
|
208
|
|
|
208
|
1
|
334
|
my ($self, $val, $with) = @_; |
|
118
|
208
|
100
|
|
|
|
445
|
if (! $with) { |
|
119
|
206
|
|
66
|
|
|
429
|
$with = $quote_char || $self->quote_char; |
|
120
|
|
|
|
|
|
|
} |
|
121
|
208
|
50
|
|
|
|
399
|
if (defined $val) { |
|
122
|
208
|
|
|
|
|
543
|
$val = $self->escape_code_ref->($val, $with); |
|
123
|
208
|
|
|
|
|
761
|
return $with. $val. $with; |
|
124
|
|
|
|
|
|
|
} else { |
|
125
|
0
|
|
|
|
|
|
return undef; |
|
126
|
|
|
|
|
|
|
} |
|
127
|
|
|
|
|
|
|
} |
|
128
|
|
|
|
|
|
|
|
|
129
|
|
|
|
|
|
|
1; |
|
130
|
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
__END__ |