Bundle-Test-SQL-Statement
view release on metacpan or search on metacpan
#diag('KEYWORD');
# succeed on unknown KEYWORD, create the keyword, fail
#
ok(parse('SELECT * FROM newkeyword'),'unknown keyword');
ok(parse('CREATE KEYWORD newkeyword'),'create keyword');
ok(!parse('SELECT * FROM newkeyword'),'user-defined keyword');
# fail on known KEYWORD, drop the keyword, succeed
#
ok(!parse('SELECT * FROM table'),'known keyword');
ok(parse('DROP KEYWORD table'),'drop keyword');
ok(parse('SELECT * FROM table'),'keyword as identifier');
#diag('OPERATOR');
# fail on unknown OP, create the op, succeed
#
ok(!parse('SELECT * FROM x WHERE y newop z'),'unknown operator');
ok(parse('CREATE OPERATOR newop'),'create operator');
ok(parse('SELECT * FROM x WHERE y newop z'),'user-defined operator');
#do_('CREATE TABLE x (id INT)');
#do_("INSERT INTO x VALUES($_)") for 0..7;
##ok( '0^1^2^' eq fetchStr("SELECT * FROM x WHERE id < 3"), ';
#ok( '0^1^2^' eq fetchStr("SELECT * FROM x WHERE id newop 3"), 'exec operator');
# succeed on known OP, drop the op, fail
#
ok(parse('SELECT * FROM x WHERE y LIKE z'),'known operator');
ok(parse("DROP OPERATOR 'LIKE'"),'drop operator');
ok(!parse('SELECT * FROM x WHERE y LIKE z'),'unkown operator');
parse('CREATE OPERATOR LIKE'); # put it back :-)
sub parse {
my($sql)=@_;
eval { $stmt = SQL::Statement->new($sql,$p) };
warn $@ if $@ and $DEBUG;
return ($@) ? 0 : 1;
}
sub do_ {
my($sql,@params)=@_;
@params = () unless @params;
$stmt = SQL::Statement->new($sql,$p);
eval { $stmt->execute($cache,@params) };
return ($@) ? 0 : 1;
}
sub fetchStr {
my($sql,@params)=@_;
do_($sql,@params);
my $str='';
while (my $r=$stmt->fetch) {
$str .= sprintf "%s^",join'~',@$r;
}
return $str;
}
sub newop {
my ( $self, $owner, $left, $right ) = @_;
return $left < $right;
}
__END__
"a disjunction of conjunctions of literals, where each literal is an elementary relational formula or its negation"
( run in 0.485 second using v1.01-cache-2.11-cpan-df04353d9ac )