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