(no commit message)
[scpubgit/Q-Branch.git] / t / 08special_ops.t
CommitLineData
96449e8e 1#!/usr/bin/perl\r
2\r
3use strict;\r
4use warnings;\r
5use Test::More;\r
6\r
7use FindBin;\r
8use lib "$FindBin::Bin";\r
9use TestSqlAbstract;\r
10\r
11plan tests => 2;\r
12\r
13use SQL::Abstract;\r
14\r
15my $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
44my @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
62for (@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