use strict;
use warnings;
use Test::More tests => 7;
use Test::Exception;
use SQL::Abstract::Limit;
use Cwd;
SKIP: {
eval { require DBD::AnyData; require Class::DBI; };
skip( "need DBD::AnyData and Class::DBI to test syntax auto-detection", 7 ) if $@;
=for notes
LimitOffset PostgreSQL, MySQL (recent), SQLite
LimitXY MySQL (older)
LimitYX SQLite (optional)
RowsTo InterBase/FireBird
Top SQL/Server, MS Access
RowNum Oracle
FetchFirst DB2 # not implemented yet
Skip Informix
GenericSubQ Sybase, plus any databases not recognised by this module
$dbh a DBI database handle
CDBI subclass
CDBI object
%SQL::Abstract::Limit::Syntax = ( mssql => 'Top',
access => 'Top',
sybase => 'GenericSubQ',
oracle => 'RowNum',
...
=cut
my $cwd = getcwd;
{
package TestApp;
#use base 'Class::DBI'; # don't attempt to load if not installed
our @ISA = ('Class::DBI');
my $dsn = 'dbi:AnyData(RaiseError=>1):';
__PACKAGE__->set_db( 'Main', $dsn, '', '' );
__PACKAGE__->db_Main->func( 'county', 'CSV', "$cwd/t/test_data.csv", 'ad_catalog');
__PACKAGE__->table( 'county' );
__PACKAGE__->columns( All => qw/ code county / );
}
my $sql_ab = SQL::Abstract::Limit->new;
my $inv = TestApp->retrieve( 'INV' );
like( $inv->county, qr(^Inverness), 'retrieved record' );
my ( $syntax, $db );
lives_ok { $syntax = $sql_ab->_find_syntax( 'TestApp' ) } '_find_syntax CDBI class';
like( $syntax, qr(^LimitXY$), 'CSV syntax from CDBI class' );
lives_ok { $syntax = $sql_ab->_find_syntax( $inv ) } '_find_syntax CDBI object';
like( $syntax, qr(^LimitXY$), 'CSV syntax from CDBI object' );
my ( $dbh ) = TestApp->db_handles;
$dbh || die 'no dbh';
lives_ok { $syntax = $sql_ab->_find_syntax( $dbh ) } '_find_syntax $dbh';
like( $syntax, qr(^LimitXY$), 'CSV syntax from $dbh' );
# warn "syntax: $syntax";
}