File Coverage

lib/SQL/Admin/Driver/Base/Evaluate.pm
Criterion Covered Total %
statement 131 172 76.1
branch 10 18 55.5
condition 3 6 50.0
subroutine 45 61 73.7
pod 0 53 0.0
total 189 310 60.9


line stmt bran cond sub pod time code
1              
2             package SQL::Admin::Driver::Base::Evaluate;
3              
4 2     2   2732 use strict;
  2         4  
  2         81  
5 2     2   11 use warnings;
  2         4  
  2         112  
6              
7             our $VERSION = v0.5.0;
8              
9             ######################################################################
10              
11 2     2   565 use SQL::Admin::Utils qw( refarray refhash );
  2         4  
  2         5824  
12              
13             ######################################################################
14              
15             our $AUTOLOAD;
16             our $WARN_ON_AUTOLOAD = 1;
17              
18             ######################################################################
19             ######################################################################
20             sub new { # ;
21 1     1 0 874 my ($class, %param) = @_;
22              
23 1   33     14 bless \ %param, ref $class || $class;
24             }
25              
26              
27             ######################################################################
28             ######################################################################
29             sub evaluate { # ;
30 10     10 0 1731 my $self = shift;
31 10         18 my $owner = shift;
32              
33 10         55 $self->__process ($owner, $_) for @_;
34              
35 10         144 $owner;
36             }
37              
38              
39             ######################################################################
40             ######################################################################
41             sub __process { # ;
42 15     15   28 my ($self, $owner, $def) = @_;
43              
44 15 50       45 return $def
45             unless ref $def;
46              
47 15 100       54 return [ map $self->__apply ($owner, %$_), @$def ]
48             if refarray $def;
49              
50 12 50       42 return map $self->__call ($owner, $_, $def), keys %$def
51             if refhash $def;
52             }
53              
54              
55             ######################################################################
56             ######################################################################
57             sub __apply { # ;
58 18     18   35 my ($self, $owner, $method, $def) = @_;
59              
60             # print "# >> [APPLY] $method";
61 18         58 $self->$method ($owner, $def);
62             }
63              
64              
65             ######################################################################
66             ######################################################################
67             sub __call { # ;
68 71     71   119 my ($self, $owner, $method, $def) = @_;
69              
70             # print "# >> [CALL ] $method";
71              
72 71 50       205 return unless refhash $def;
73 71 100       198 return unless exists $def->{$method};
74              
75 49         199 $self->$method ($owner, $def->{$method}, $def);
76             }
77              
78              
79             ######################################################################
80             ######################################################################
81              
82             sub create_schema { # ;
83 0     0 0 0 my ($self, $owner, $def) = @_;
84              
85 0         0 my $obj = $owner->add (schema => (name => $def->{schema_identifier}));
86              
87             #my $previous = $owner->default_schema;
88             #$owner->default_schema ($obj);
89             #$self->__process ($owner, $def->{schema_statements});
90             #$owner->default_schema ($previous);
91              
92             ##################################################################
93              
94 0         0 $obj;
95             }
96              
97              
98             ######################################################################
99             ######################################################################
100              
101             sub schema_qualified_name { # ;
102 0     0 0 0 my ($self, $owner, $def) = @_;
103              
104 0         0 %$def,
105             }
106              
107              
108             ######################################################################
109             ######################################################################
110             sub data_type { # ;
111 5     5 0 11 my ($self, $owner, $type, $parent) = @_;
112 5         14 $type = { type => $type };
113              
114 5 100 66     16 if (refhash $parent and defined $parent->{size}) {
115 1         3 $type->{size} = $parent->{size};
116 1 50       14 $type->{scale} = $parent->{scale} if defined $parent->{scale};
117             }
118              
119 5         44 $type;
120             }
121              
122              
123             ######################################################################
124             ######################################################################
125             sub column_name { # ;
126 10     10 0 18 my ($self, $owner, $def) = @_;
127              
128 10         117 $def;
129             }
130              
131              
132             ######################################################################
133             ######################################################################
134             sub column_order { # ;
135 1     1 0 1 my ($self, $owner, $def) = @_;
136              
137 1         10 map uc, grep defined $_, $def;
138             }
139              
140              
141             ######################################################################
142             ######################################################################
143             sub ordered_column_name { # ;
144 3     3 0 4 my ($self, $owner, $def) = @_;
145              
146 3         6 [ grep $_, (
147             $self->__call ($owner, column_name => $def),
148             $self->__call ($owner, column_order => $def),
149             )];
150             }
151              
152              
153             ######################################################################
154             ######################################################################
155             sub ordered_column_names { # ;
156 2     2 0 3 my ($self, $owner, $def) = @_;
157              
158 2         8 [ map $self->ordered_column_name ($owner, $_), @$def ];
159             }
160              
161              
162             ######################################################################
163             ######################################################################
164             sub column_list { # ;
165 5     5 0 9 my ($self, $owner, $def) = @_;
166              
167 5         18 [ map $self->column_name ($owner, $_), @$def ];
168             }
169              
170             ######################################################################
171             ######################################################################
172              
173 0     0 0 0 sub connect_to { # ;
174             }
175              
176              
177             ######################################################################
178             ######################################################################
179 0     0 0 0 sub commit_work { # ;
180             }
181              
182              
183             ######################################################################
184             ######################################################################
185              
186             sub create_sequence { # ;
187 1     1 0 2 my ($self, $owner, $def) = @_;
188              
189 1         3 my $obj = $owner->add (sequence => %{ $def->{sequence_name} });
  1         8  
190 1         6 $self->__call ($obj, sequence_type => $def);
191 1         3 $self->__call ($obj, sequence_options => $def);
192              
193 1         5 $obj;
194             }
195              
196              
197             ######################################################################
198             ######################################################################
199             sub sequence_type { # ;
200 1     1 0 2 my ($self, $owner, $def) = @_;
201              
202 1         6 $owner->type ($def);
203             }
204              
205              
206             ######################################################################
207             ######################################################################
208             sub sequence_options { # ;
209 1     1 0 2 my ($self, $owner, $def) = @_;
210              
211 1         16 $self->__process ($owner, $def);
212             }
213              
214              
215             ######################################################################
216             ######################################################################
217             sub sequence_start_with { # ;
218 1     1 0 2 my ($self, $owner, $def) = @_;
219 1         5 $owner->start_with ($def);
220             }
221              
222              
223             ######################################################################
224             ######################################################################
225             sub sequence_increment_by { # ;
226 1     1 0 2 my ($self, $owner, $def) = @_;
227 1         4 $owner->increment_by ($def);
228             }
229              
230              
231             ######################################################################
232             ######################################################################
233             sub sequence_minvalue { # ;
234 1     1 0 2 my ($self, $owner, $def) = @_;
235 1         5 $owner->minvalue ($def);
236             }
237              
238              
239             ######################################################################
240             ######################################################################
241             sub sequence_maxvalue { # ;
242 1     1 0 3 my ($self, $owner, $def) = @_;
243 1         4 $owner->maxvalue ($def);
244             }
245              
246              
247             ######################################################################
248             ######################################################################
249             sub sequence_cache { # ;
250 1     1 0 2 my ($self, $owner, $def) = @_;
251 1         5 $owner->cache ($def);
252             }
253              
254              
255             ######################################################################
256             ######################################################################
257             sub sequence_owner { # ;
258 0     0 0 0 my ($self, $owner, $def) = @_;
259 0         0 $owner->owner ($def);
260             }
261              
262              
263             ######################################################################
264             ######################################################################
265              
266             sub create_index { # ;
267 2     2 0 3 my ($self, $owner, $def) = @_;
268              
269 2         3 my $obj = $owner->add (index => %{ $def->{index_name} });
  2         16  
270 2         4 $obj->table ($owner->get (table => %{ $def->{table_name} }));
  2         8  
271              
272 2         5 $self->__call ($obj, index_unique => $def);
273 2         5 $self->__call ($obj, index_column_list => $def);
274 2         5 $self->__call ($obj, index_options => $def);
275 2         4 $self->__call ($obj, index_hints => $def);
276              
277 2         9 $obj;
278             }
279              
280              
281             ######################################################################
282             ######################################################################
283             sub index_unique { # ;
284 1     1 0 3 my ($self, $owner, $def) = @_;
285 1         3 $owner->unique ($def);
286             }
287              
288              
289             ######################################################################
290             ######################################################################
291             sub index_column_list { # ;
292 2     2 0 3 my ($self, $owner, $def) = @_;
293              
294 2         6 $owner->column_list (
295             $self->__apply (0, ordered_column_names => $def)
296             );
297             }
298              
299              
300             ######################################################################
301             ######################################################################
302             sub index_options { # ;
303 1     1 0 4 shift->index_hints (@_);
304             }
305              
306              
307             ######################################################################
308             ######################################################################
309             sub index_hints { # ;
310 2     2 0 4 my ($self, $owner, $def) = @_;
311 2         9 while (my @v = each %$def) {
312 2         13 $owner->hint (@v);
313             }
314             }
315              
316              
317             ######################################################################
318             ######################################################################
319              
320             sub create_table { # ;
321 2     2 0 6 my ($self, $owner, $def) = @_;
322              
323 2         5 my $obj = $owner->add (table => %{ $def->{table_name}});
  2         15  
324              
325 2         9 $self->__call ($obj, table_content => $def);
326 2         8 $self->__call ($obj, table_options => $def);
327 2         5 $self->__call ($obj, table_hints => $def);
328              
329 2         11 $obj;
330             }
331              
332              
333             ######################################################################
334             ######################################################################
335             sub table_options { # ;
336 0     0 0 0 shift->table_hints (@_);
337             }
338              
339              
340             ######################################################################
341             ######################################################################
342             sub table_hints { # ;
343 1     1 0 2 my ($self, $owner, $def) = @_;
344 1         8 while (my @v = each %$def) { $owner->hint (@v); }
  2         195  
345             }
346              
347              
348             ######################################################################
349             ######################################################################
350             sub table_content { # ;
351 2     2 0 6 my ($self, $owner, $def) = @_;
352              
353 2         6 $self->__process ($owner, $def);
354             }
355              
356              
357             ######################################################################
358             ######################################################################
359             sub column_definition { # ;
360 5     5 0 8 my ($self, $owner, $def) = @_;
361              
362 5         23 my $obj = $owner->add (column => name => $def->{column_name});
363              
364 5         18 $obj->type ($self->__call (0, data_type => $def));
365 5         25 $self->__call ($obj, not_null => $def);
366 5         9 $self->__call ($obj, column_not_null => $def);
367 5         14 $self->__call ($obj, default_clause => $def);
368 5         10 $self->__call ($obj, autoincrement => $def);
369              
370 5         28 $obj;
371             }
372              
373              
374             ######################################################################
375             ######################################################################
376             sub column_not_null { # ;
377 4     4 0 7 my ($self, $owner, $def) = @_;
378              
379 4         14 $owner->not_null (1);
380             }
381              
382              
383             ######################################################################
384             ######################################################################
385             sub default_clause { # ;
386 2     2 0 5 my ($self, $owner, $def) = @_;
387              
388 2         7 $owner->default ($def);
389             }
390              
391              
392             ######################################################################
393             ######################################################################
394             sub autoincrement { # ;
395 0     0 0 0 my ($self, $owner, $def) = @_;
396              
397 0         0 $owner->autoincrement (1);
398 0         0 while (my @v = each %$def) { $owner->autoincrement_hint (@v); }
  0         0  
399             }
400              
401              
402             ######################################################################
403             ######################################################################
404              
405             sub alter_table { # ;
406 6     6 0 14 my ($self, $owner, $def) = @_;
407              
408 6         9 my $obj = $owner->add (table => %{ $def->{table_name}});
  6         35  
409              
410 6         13 $self->__apply ($obj, %$_) for @{ $def->{alter_table_actions} };
  6         36  
411              
412 6         32 $obj;
413             }
414              
415              
416             ######################################################################
417             ######################################################################
418             sub set_table_hint { # ;
419 2     2 0 4 my ($self, $owner, $def) = @_;
420 2         23 $owner->hint (%$def);
421             }
422              
423              
424             ######################################################################
425             ######################################################################
426              
427              
428             # Value templates
429             sub add_constraint { # ;
430 4     4 0 9 my ($self, $owner, $def) = @_;
431              
432 4         18 $self->__apply ($owner, %$def);
433             }
434              
435              
436             ######################################################################
437             ######################################################################
438             sub primary_key_constraint { # ;
439 2     2 0 4 my ($self, $owner, $def) = @_;
440              
441 2         13 $owner->add (primary_key => (
442             column_list => $self->__call (0, column_list => $def),
443 2         7 (map {(name => $_)} grep $_, $def->{constraint_name}),
444             ));
445             }
446              
447              
448             ######################################################################
449             ######################################################################
450             sub unique_constraint { # ;
451 1     1 0 3 my ($self, $owner, $def) = @_;
452              
453 1         6 $owner->add (unique => (
454             column_list => $self->__call (0, column_list => $def),
455 1         4 (map {(name => $_)} grep $_, $def->{constraint_name}),
456             ));
457             }
458              
459              
460             ######################################################################
461             ######################################################################
462             sub foreign_key_constraint { # ;
463 1     1 0 3 my ($self, $owner, $def) = @_;
464              
465 1         4 $owner->add (foreign_key => (
466             referenced_table => $self->__call ($owner, referenced_table => $def),
467             referencing_column_list => $self->__call (0, referencing_column_list => $def),
468             referenced_column_list => $self->__call (0, referenced_column_list => $def),
469             (map +(update_rule => $_), grep $_, $self->__call (0, update_rule => $def)),
470             (map +(delete_rule => $_), grep $_, $self->__call (0, delete_rule => $def)),
471             (map +(name => $_), grep $_, $def->{constraint_name}),
472             ));
473             }
474              
475              
476             ######################################################################
477             ######################################################################
478             sub referencing_column_list { # ;
479 1     1 0 5 shift->column_list (@_);
480             }
481              
482              
483             ######################################################################
484             ######################################################################
485             sub referenced_column_list { # ;
486 1     1 0 4 shift->column_list (@_);
487             }
488              
489              
490             ######################################################################
491             ######################################################################
492             sub referenced_table { # ;
493 1     1 0 2 my ($self, $owner, $def) = @_;
494              
495 1         4 $owner->catalog->get (table => %$def);
496             }
497              
498              
499             ######################################################################
500             ######################################################################
501             sub update_rule { # ;
502 1     1 0 3 my ($self, $owner, $def) = @_;
503              
504 1         8 $def;
505             }
506              
507              
508             ######################################################################
509             ######################################################################
510             sub delete_rule { # ;
511 1     1 0 3 my ($self, $owner, $def) = @_;
512              
513 1         11 $def;
514             }
515              
516              
517             ######################################################################
518             ######################################################################
519             sub add_column { # ;
520 1     1 0 2 my ($self, $owner, $def) = @_;
521 1         4 $self->__process ($owner, $def);
522             }
523              
524              
525             ######################################################################
526             ######################################################################
527             sub alter_column { # ;
528 0     0 0   my ($self, $owner, $def) = @_;
529 0           my $obj = $owner->add (column => name => $def->{column_name});
530              
531 0           $self->__call ($obj, 'alter_column_set_default', $def);
532 0           $self->__call ($obj, 'alter_column_set_not_null', $def);
533 0           $self->__call ($obj, 'alter_column_drop_default', $def);
534 0           $self->__call ($obj, 'alter_column_drop_not_null', $def);
535              
536 0           $obj;
537             }
538              
539              
540             ######################################################################
541             ######################################################################
542             sub alter_column_set_default { # ;
543 0     0 0   my ($self, $owner, $def) = @_;
544 0           $self->__call ($owner, default_clause => $def);
545             }
546              
547              
548             ######################################################################
549             ######################################################################
550             sub alter_column_drop_default { # ;
551 0     0 0   my ($self, $owner, $def) = @_;
552 0           $owner->default (undef);
553             }
554              
555              
556             ######################################################################
557             ######################################################################
558             sub alter_column_set_not_null { # ;
559 0     0 0   my ($self, $owner, $def) = @_;
560 0           $owner->not_null (1);
561             }
562              
563              
564             ######################################################################
565             ######################################################################
566             sub alter_column_drop_not_null { # ;
567 0     0 0   my ($self, $owner, $def) = @_;
568 0           $owner->not_null (undef);
569             }
570              
571              
572             ######################################################################
573             ######################################################################
574              
575             sub statement_insert { # ;
576 0     0 0   my ($self, $owner, $def) = @_;
577 0           my $obj = $owner->add (table => %{ $def->{table_name}});
  0            
578              
579 0           my $columns = $self->__call ($owner, column_list => $def);
580 0           my $values = $self->__call ($owner, insert_value_list => $def);
581              
582 0 0         my @columns = $columns ? (columns => $columns) : ();
583              
584             #for my $row (@$values) {
585 0           $obj->table_row ({ @columns, values => $values });
586             #}
587             }
588              
589              
590             ######################################################################
591             ######################################################################
592             sub insert_value_list { # ;
593 0     0 0   my ($self, $owner, $def) = @_;
594              
595 0           $def;
596             }
597              
598              
599             ######################################################################
600             ######################################################################
601              
602 0     0     sub DESTROY { # ;
603             }
604              
605              
606             ######################################################################
607             ######################################################################
608             sub AUTOLOAD { # ;
609 0 0   0     warn 'Unhandler method: ' . $AUTOLOAD if $WARN_ON_AUTOLOAD;
610 0           ();
611             }
612              
613              
614             ######################################################################
615             ######################################################################
616              
617             package SQL::Admin::Driver::Base::Evaluate;
618              
619             1;
620              
621             __END__