(no commit message)
[scpubgit/Q-Branch.git] / t / 08special_ops.t
1 #!/usr/bin/perl\r
2 \r
3 use strict;\r
4 use warnings;\r
5 use Test::More;\r
6 \r
7 use FindBin;\r
8 use lib "$FindBin::Bin";\r
9 use TestSqlAbstract;\r
10 \r
11 plan tests => 2;\r
12 \r
13 use SQL::Abstract;\r
14 \r
15 my $sqlmaker = SQL::Abstract->new(special_ops => [\r
16 \r
17   # special op for MySql MATCH (field) AGAINST(word1, word2, ...)\r
18   {regex => qr/^match$/i, \r
19    handler => sub {\r
20      my ($self, $field, $op, $arg) = @_;\r
21      $arg = [$arg] if not ref $arg;\r
22      my $label         = $self->_quote($field);\r
23      my ($placeholder) = $self->_convert('?');\r
24      my $placeholders  = join ", ", (($placeholder) x @$arg);\r
25      my $sql           = $self->_sqlcase('match') . " ($label) "\r
26                        . $self->_sqlcase('against') . " ($placeholders) ";\r
27      my @bind = $self->_bindtype($field, @$arg);\r
28      return ($sql, @bind);\r
29      }\r
30    },\r
31 \r
32   # special op for Basis+ NATIVE\r
33   {regex => qr/^native$/i, \r
34    handler => sub {\r
35      my ($self, $field, $op, $arg) = @_;\r
36      $arg =~ s/'/''/g;\r
37      my $sql = "NATIVE (' $field $arg ')";\r
38      return ($sql);\r
39      }\r
40    },\r
41 \r
42 ]);\r
43 \r
44 my @tests = (\r
45 \r
46   #1 \r
47   { where => {foo => {-match => 'foo'},\r
48               bar => {-match => [qw/foo bar/]}},\r
49     stmt  => " WHERE ( MATCH (bar) AGAINST (?, ?) AND MATCH (foo) AGAINST (?) )",\r
50     bind  => [qw/foo bar foo/],\r
51   },\r
52 \r
53   #2\r
54   { where => {foo => {-native => "PH IS 'bar'"}},\r
55     stmt  => " WHERE ( NATIVE (' foo PH IS ''bar'' ') )",\r
56     bind  => [],\r
57   },\r
58 \r
59 );\r
60 \r
61 \r
62 for (@tests) {\r
63 \r
64   my($stmt, @bind) = $sqlmaker->where($_->{where}, $_->{order});\r
65   is_same_sql_bind($stmt, \@bind, $_->{stmt}, $_->{bind});\r
66 }\r
67 \r
68 \r
69 \r
70 \r
71 \r