File Coverage

lib/CellBIS/SQL/Abstract/Util.pm
Criterion Covered Total %
statement 86 89 96.6
branch 20 32 62.5
condition 9 15 60.0
subroutine 8 8 100.0
pod 0 6 0.0
total 123 150 82.0


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