#!perl -w
use
DBI
qw(:preparse_flags)
;
$|=1;
BEGIN {
if
(
$DBI::PurePerl
) {
plan
skip_all
=>
'preparse not supported for DBI::PurePerl'
;
}
else
{
plan
tests
=> 39;
}
}
my
$dbh
= DBI->
connect
(
"dbi:ExampleP:"
,
""
,
""
, {
PrintError
=> 0,
});
isa_ok(
$dbh
,
'DBI::db'
);
sub
pp {
my
$dbh
=
shift
;
my
$rv
=
$dbh
->preparse(
@_
);
return
$rv
;
}
is( pp(
$dbh
,
"a#b\nc"
, DBIpp_cm_cs, DBIpp_cm_hs),
"a/*b*/\nc"
);
is( pp(
$dbh
,
"a#b\nc"
, DBIpp_cm_dw, DBIpp_cm_hs),
"a-- b\nc"
);
is( pp(
$dbh
,
"a/*b*/c"
, DBIpp_cm_hs, DBIpp_cm_cs),
"a#b\nc"
);
is( pp(
$dbh
,
"a{b}c"
, DBIpp_cm_cs, DBIpp_cm_br),
"a/*b*/c"
);
is( pp(
$dbh
,
"a--b\nc"
, DBIpp_cm_br, DBIpp_cm_dd),
"a{b}\nc"
);
is( pp(
$dbh
,
"a-- b\n/*c*/d"
, DBIpp_cm_br, DBIpp_cm_cs|DBIpp_cm_dw),
"a{ b}\n{c}d"
);
is( pp(
$dbh
,
"a/*b*/c#d\ne--f\nh-- i\nj{k}"
, 0, DBIpp_cm_XX),
"a c\ne\nh\nj "
);
is( pp(
$dbh
,
"a = :1"
, DBIpp_ph_qm, DBIpp_ph_cn),
"a = ?"
);
is( pp(
$dbh
,
"a = :1"
, DBIpp_ph_sp, DBIpp_ph_cn),
"a = %s"
);
is( pp(
$dbh
,
"a = ?"
, DBIpp_ph_cn, DBIpp_ph_qm),
"a = :p1"
);
is( pp(
$dbh
,
"a = ?"
, DBIpp_ph_sp, DBIpp_ph_qm),
"a = %s"
);
is( pp(
$dbh
,
"a = :name"
, DBIpp_ph_qm, DBIpp_ph_cs),
"a = ?"
);
is( pp(
$dbh
,
"a = :name"
, DBIpp_ph_sp, DBIpp_ph_cs),
"a = %s"
);
is( pp(
$dbh
,
"a = ? b = ? c = ?"
, DBIpp_ph_cn, DBIpp_ph_XX),
"a = :p1 b = :p2 c = :p3"
);
is( pp(
$dbh
,
"a = ? /*b = :1*/ c = ?"
,
DBIpp_cm_dw|DBIpp_ph_cn,
DBIpp_cm_cs|DBIpp_ph_qm),
"a = :p1 -- b = :1\n c = :p2"
);
is( pp(
$dbh
,
"a = ? 'b = :1' c = ?"
,
DBIpp_ph_cn,
DBIpp_ph_XX),
"a = :p1 'b = :1' c = :p2"
);
is( pp(
$dbh
,
'a = ? "b = :1" c = ?'
,
DBIpp_ph_cn,
DBIpp_ph_XX),
'a = :p1 "b = :1" c = :p2'
);
is( pp(
$dbh
,
"a = ? '{b = :1}' c = ?"
,
DBIpp_cm_cs|DBIpp_ph_cn,
DBIpp_cm_XX|DBIpp_ph_qm),
"a = :p1 '{b = :1}' c = :p2"
);
is( pp(
$dbh
,
'a = ? "/*b = :1*/" c = ?'
,
DBIpp_cm_dw|DBIpp_ph_cn,
DBIpp_cm_XX|DBIpp_ph_qm),
'a = :p1 "/*b = :1*/" c = :p2'
);
is( pp(
$dbh
,
'a = ? /*"b = :1 */ c = ?'
,
DBIpp_cm_br|DBIpp_ph_cn,
DBIpp_cm_XX|DBIpp_ph_qm),
'a = :p1 {"b = :1 } c = :p2'
);
is( pp(
$dbh
,
"a = :value and b = :1"
, DBIpp_ph_qm, DBIpp_ph_cs|DBIpp_ph_cn),
undef
);
ok(
$DBI::err
);
is(
$DBI::errstr
,
"preparse found mixed placeholder styles (:1 / :name)"
);
is( pp(
$dbh
,
"a = :1 and b = :3"
, DBIpp_ph_qm, DBIpp_ph_cn),
undef
);
ok(
$DBI::err
);
is(
$DBI::errstr
,
"preparse found placeholder :3 out of sequence, expected :2"
);
is( pp(
$dbh
,
"foo ' comment"
, 0, 0),
"foo ' comment"
);
ok(
$DBI::err
);
is(
$DBI::errstr
,
"preparse found unterminated single-quoted string"
);
is( pp(
$dbh
,
'foo " comment'
, 0, 0),
'foo " comment'
);
ok(
$DBI::err
);
is(
$DBI::errstr
,
"preparse found unterminated double-quoted string"
);
is( pp(
$dbh
,
'foo /* comment'
, DBIpp_cm_XX, DBIpp_cm_XX),
'foo /* comment'
);
ok(
$DBI::err
);
is(
$DBI::errstr
,
"preparse found unterminated bracketed C-style comment"
);
is( pp(
$dbh
,
'foo { comment'
, DBIpp_cm_XX, DBIpp_cm_XX),
'foo { comment'
);
ok(
$DBI::err
);
is(
$DBI::errstr
,
"preparse found unterminated bracketed {...} comment"
);
$dbh
->disconnect;
1;