File Coverage

lib/CellBIS/SQL/Abstract/Util.pm
Criterion Covered Total %
statement 90 93 96.7
branch 24 34 70.5
condition 9 15 60.0
subroutine 9 9 100.0
pod 0 7 0.0
total 132 158 83.5


line stmt bran cond sub pod time code
1             package # hide from PAUSE
2             CellBIS::SQL::Abstract::Util;
3              
4 17     17   104 use Mojo::Base -base;
  17         31  
  17         90  
5 17     17   2298 use Mojo::Util 'dumper';
  17         34  
  17         18256  
6              
7             # For "column" with "value" :
8             # ------------------------------------------------------------------------
9             sub col_with_val {
10 3     3 0 16 my $self = shift;
11 3         5 my ($column, $value) = @_;
12              
13 3         5 my @data_col = @{$column};
  3         7  
14 3         4 my @data_val = @{$value};
  3         6  
15             my @data
16 3         8 = map { $data_col[$_] . '=\'' . $data_val[$_] . '\'' } 0 .. $#data_col;
  9         37  
17 3         9 return @data;
18             }
19              
20             # For onjoin clause :
21             # ------------------------------------------------------------------------
22             sub for_onjoin {
23 3     3 0 26 my $self = shift;
24 3         7 my ($options, $table_name) = @_;
25 3         16 my $data = "FROM " . $table_name->[0]->{name};
26              
27 3         6 my %type = %{$options->{typejoin}};
  3         12  
28 3         6 my $join = $options->{join};
29 3         6 my $size_join = @{$join};
  3         5  
30              
31 3         5 my @table_list = @{$table_name};
  3         6  
32 3         5 my %list_table = map { $_->{name} => $_ } @{$table_name};
  6         19  
  3         54  
33 3 100       7 my @get_primaryTbl = grep { $_->{primary} && $_->{primary} == 1 } @table_list;
  6         26  
34 3 50       9 @get_primaryTbl = @get_primaryTbl ? @get_primaryTbl : ($table_list[0]);
35              
36             # Check IF founded primary table :
37 3 50       8 if (@get_primaryTbl) {
38 3         5 my $tbl_name = '';
39 3         4 my $tbl_alias = '';
40 3         5 my $get_table_data = '';
41              
42             # For "FROM TABLE"
43 3         9 $data = "\nFROM $get_primaryTbl[0]->{name}";
44 3 50       7 if (exists $get_primaryTbl[0]->{alias}) {
45 3         11 $data
46             = "\nFROM $get_primaryTbl[0]->{name} AS $get_primaryTbl[0]->{alias}";
47             }
48              
49 3         4 my $i = 0;
50 3         5 my $table_join = '';
51 3         5 my $type_join = '';
52 3         9 while ($i < $size_join) {
53 3         5 my $get_table = $join->[$i];
54 3         8 $tbl_name = $get_table->{name};
55 3         4 $table_join = $get_table->{onjoin};
56 3         6 $get_table_data = $list_table{$tbl_name};
57 3         9 $type_join = $self->type_join($type{$tbl_name});
58              
59 3 50       9 if (exists $get_table_data->{alias}) {
60 3         7 $tbl_alias = $get_table_data->{alias};
61 3         10 $data .= " $type_join $tbl_name AS $tbl_alias ";
62 3 50 33     16 $data .= "\nON " if ($i > 1 or $i <= ($size_join - 1));
63 3         9 $data .= join " = ", @$table_join;
64             }
65             else {
66 0         0 $data .= " $type_join $tbl_name ";
67 0 0 0     0 $data .= 'ON ' if ($i > 1 or $i <= ($size_join - 1));
68 0         0 $data .= join " = ", @$table_join;
69             }
70              
71 3         8 $i++;
72             }
73             }
74 3         11 return $data;
75             }
76              
77             # For create clause query :
78             # ------------------------------------------------------------------------
79             sub create_clause {
80 22     22 0 162 my ($self, $clause) = @_;
81 22         42 my $data = '';
82 22 100       57 if (exists $clause->{'where'}) {
83 17         52 $data .= 'WHERE ' . $clause->{'where'};
84             }
85 22 100 100     87 if (exists $clause->{'orderby'} and not exists $clause->{'groupby'}) {
86 11         26 $data .= ' ORDER BY ' . $clause->{'orderby'};
87             }
88 22 100 100     74 if (exists $clause->{'orderby'} and exists $clause->{'groupby'}) {
89             $data
90             .= ' GROUP BY '
91             . $clause->{'groupby'}
92             . ' ORDER BY '
93 1         5 . $clause->{'orderby'};
94             }
95 22 50 66     70 if (exists $clause->{'order'} and exists $clause->{orderby}) {
96 9         23 $data .= ' ' . (uc $clause->{'order'});
97             }
98 22 100       50 if (exists $clause->{'limit'}) {
99 11         27 $data .= ' LIMIT ' . $clause->{'limit'};
100             }
101 22         53 return $data;
102             }
103              
104             # for Type Join :
105             # ------------------------------------------------------------------------
106             sub type_join {
107 3     3 0 7 my ($self, $type) = @_;
108              
109 3         10 my %data_type = ('left' => "\nLEFT JOIN", 'inner' => "\nINNER JOIN",);
110 3 50       11 return $data_type{$type} if exists $data_type{$type};
111             }
112              
113             # For replace data values "insert" :
114             # ------------------------------------------------------------------------
115             sub data_insert_pre_st {
116 9     9 0 40 my $self = shift;
117 9         14 my ($data_value) = @_;
118              
119 9         11 my @data = @{$data_value};
  9         16  
120             my @value
121 9 100       17 = map { $self->is_sql_function($_) ? $_->[0] : $_ } @data;
  27         37  
122 9 100       13 my @result = map { $self->is_sql_function($_) ? $_->[0] : '?' } @data;
  27         39  
123 9         22 @result = grep (defined, @result);
124 9         37 return [\@result, \@value];
125             }
126              
127             # For replace data values "insert" in no prepare statement :
128             # ------------------------------------------------------------------------
129             sub data_insert {
130 6     6 0 33 my $self = shift;
131 6         10 my ($data_value) = @_;
132              
133 6         7 my @data = @{$data_value};
  6         13  
134             my @result = map {
135 6 50       11 $self->is_sql_function($_) # for match sql function
  19         25  
136             ? $_->[0] # true condition
137             : "'" . $_ . "'" # if not function.
138             } @data;
139 6         17 @result = grep (defined, @result);
140 6         22 return @result;
141             }
142              
143             # For check if function sql
144             sub is_sql_function {
145 80     80 0 123 my ($self, $string) = @_;
146              
147 80 100       205 return ref($string) eq 'ARRAY' ? 1 : 0;
148             }
149              
150             1;