1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 7;
7use Test::Exception;
8
9use SQL::Abstract::Limit;
10use Cwd;
11
12SKIP: {
13    eval { require DBD::AnyData; require Class::DBI; };
14
15    skip( "need DBD::AnyData and Class::DBI to test syntax auto-detection", 7 ) if $@;
16
17=for notes
18
19    LimitOffset     PostgreSQL, MySQL (recent), SQLite
20    LimitXY         MySQL (older)
21    LimitYX         SQLite (optional)
22    RowsTo          InterBase/FireBird
23
24    Top             SQL/Server, MS Access
25    RowNum          Oracle
26    FetchFirst      DB2         # not implemented yet
27    Skip            Informix    
28    GenericSubQ     Sybase, plus any databases not recognised by this module
29
30    $dbh            a DBI database handle
31
32    CDBI subclass
33    CDBI object
34
35
36    %SQL::Abstract::Limit::Syntax = ( mssql    => 'Top',
37                                      access   => 'Top',
38                                      sybase   => 'GenericSubQ',
39                                      oracle   => 'RowNum',
40                                      ...
41
42=cut
43
44my $cwd = getcwd;
45
46{
47    package TestApp;
48    #use base 'Class::DBI'; # don't attempt to load if not installed
49    our @ISA = ('Class::DBI');
50    my $dsn = 'dbi:AnyData(RaiseError=>1):';
51
52    __PACKAGE__->set_db( 'Main', $dsn, '', '' );
53
54    __PACKAGE__->db_Main->func( 'county', 'CSV', "$cwd/t/test_data.csv", 'ad_catalog');
55
56    __PACKAGE__->table( 'county' );
57
58    __PACKAGE__->columns( All => qw/ code county / );
59}
60
61my $sql_ab = SQL::Abstract::Limit->new;
62
63my $inv = TestApp->retrieve( 'INV' );
64
65like( $inv->county, qr(^Inverness), 'retrieved record' );
66
67my ( $syntax, $db );
68
69lives_ok { $syntax = $sql_ab->_find_syntax( 'TestApp' ) } '_find_syntax CDBI class';
70like( $syntax, qr(^LimitXY$), 'CSV syntax from CDBI class' );
71
72lives_ok { $syntax = $sql_ab->_find_syntax( $inv ) } '_find_syntax CDBI object';
73like( $syntax, qr(^LimitXY$), 'CSV syntax from CDBI object' );
74
75my ( $dbh ) = TestApp->db_handles;
76$dbh || die 'no dbh';
77lives_ok { $syntax = $sql_ab->_find_syntax( $dbh ) } '_find_syntax $dbh';
78like( $syntax, qr(^LimitXY$), 'CSV syntax from $dbh' );
79
80
81# warn "syntax: $syntax";
82
83}
84