The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use EZDBI;
BEGIN{
  unlink('t/test.stb');
  unlink('t/02connect.db');
  unlink('t/TEST.dbf');
}


my $id=1;
local $" = ', ';
sub increment{ return $id++, scalar localtime; }


my $DBD;
my %DBD = (
#!	   File     =>[0, 'File:f_dir=t/'],
	   Sprite   =>[0, 'Sprite:t/02connect'],
	   SQLite   =>[0, 'SQLite:dbname=t/02connect.db'],
	   WTSprite =>[0, 'WTSprite:t/02connect'],        #Untested, but should work
	   XBase    =>[0.232, 'XBase:t/'],		  #Untested, but should work
	  );
foreach my $dbd ( keys %DBD ){
  eval "require DBD::$dbd";
  unless( $@ || ${'DBD::'.$dbd.'::VERSION'} < $DBD{$dbd}->[0] ){
    $DBD = $dbd;
    last;
  }
}
unless( $DBD ){
  print "1..0 #Skipped: None of @{[sort keys %DBD]}\n";
  exit 0;
}


print "1..31\n";


eval { Connect $DBD{$DBD}->[1]; };
print 'not ' if $@;
printf "ok %2i # Connected using DBD::$DBD\n", $id++;


eval { Sql 'Create Table TEST (id INTEGER, sql CHAR(42), time CHAR(24))'; };
print 'not ' if $@;
printf "ok %2i # Create Table TEST (id INTEGER, sql CHAR(42), time CHAR(24))\n", $id++;


#Check Insert, hashref style and reworked ??L code
{
  my $where = 'Into TEST';
  my @r = increment();
  eval{ Insert $where, {id=>$r[0], sql=>$where, time=>$r[1]};};
  print 'not ' if $@;
  printf "ok %2i # Insert a la hashref\n", $r[0];
  foreach my $sql ($where, "$where (id, sql, time)" ){
    foreach my $opts(
		     [$sql,                   increment()],
		     ["$sql Values",          increment()],
		     ["$sql Values ??L",      increment()],
		     ["$sql Values(??L)",     increment()],
		     ["$sql Values(?, ?, ?)", increment()]
		    ){
      eval {Insert @{$opts}[0,1,0,2];};
      print 'not ' if $@;
      printf "ok %2i # Insert $opts->[0]\n", $opts->[1];
    }
    @r = increment();
    eval{Insert "$sql Values('$r[0]', '$sql Values(INLINE)', '$r[1]')";};
    print 'not ' if $@;
    printf "ok %2i # Insert $sql Values(INLINE)\n", $r[0];
  }
}


{
  my @F = eval{Select '* From TEST'};
  print 'not ' if $@;
  printf "ok %i # Select *\n", $id++;
  if( $@ ){
    printf("ok %i # Skipped\n", $id++) for 17..29;
  }
  else{
    foreach ( @F ){
      printf "ok %i # [@{[map{qq('$_')} @$_]}]\n", $id++;
    }
  }
}


#Check Update hashref style
eval{ Update 'TEST', {time=>0}; };
print 'not ' if $@;
printf "ok %i # Update a la hashref\n", $id++;


#XXX Select and check for non 0 times


eval {Sql 'Drop Table TEST'; };
print 'not ' if $@;
printf "ok %i # Drop Table TEST\n", $id++;