Start working on update clause
[dbsrgits/SQL-Abstract-2.0-ish.git] / t / lib / Test / SQL / Abstract / Util.pm
CommitLineData
96bbece0 1package Test::SQL::Abstract::Util;
2
3use strict;
4use warnings;
5
6use Sub::Exporter -setup => {
7 exports => [qw/
8 mk_name
9 mk_value
10 mk_alias
d4656fcf 11 mk_expr
96bbece0 12 field_op_value
13 /],
14 groups => [
15 dumper_sort => sub {
16
17 require Data::Dumper;
18 my $Dump = Data::Dumper->can('Dump');
19
20 no warnings 'redefine';
21
22 *Data::Dumper::Dump = sub {
23 local $Data::Dumper::Sortkeys = sub {
24 my $hash = $_[0];
25 my @keys = sort {
26 my $a_minus = substr($a,0,1) eq '-';
27 my $b_minus = substr($b,0,1) eq '-';
28
29 return $a cmp $b if $a_minus || $b_minus;
30
31 return -1 if $a eq 'op';
32 return 1 if $b eq 'op';
33 return $a cmp $b;
34 } keys %$hash;
35
36 return \@keys;
37 };
38 return $Dump->(@_);
39 };
40 return {};
41 }
42 ],
43};
44
45sub mk_alias {
46 return {
47 -type => 'alias',
48 ident => shift,
49 as => shift,
50 };
51}
52
53sub mk_name {
54 my ($field) = shift;
55 $field = ref $field eq 'HASH'
56 ? $field
57 : ref $field eq 'ARRAY'
58 ? { -type => 'identifier', elements => $field }
59 : { -type => 'identifier', elements => [$field,@_] };
60 return $field;
61}
62
63sub mk_value {
64 return { -type => 'value', value => $_[0] }
65}
66
d4656fcf 67sub mk_expr {
68 my ($op, @args) = @_;
69
70 return {
71 -type => 'expr',
72 op => $op,
73 args => [@args]
74 };
75}
96bbece0 76
77sub field_op_value {
78 my ($field, $op, $value) = @_;
79
80 $field = ref $field eq 'HASH'
81 ? $field
82 : mk_name($field);
83
84 my @value = ref $value eq 'HASH'
85 ? $value
86 : ref $value eq 'ARRAY'
87 ? @$value
88 : mk_value($value);
89
90 return {
91 -type => 'expr',
92 op => $op,
93 args => [
94 $field,
95 @value
96 ]
97 };
98}
99
1001;