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