DBD-SearchServer
view release on metacpan or search on metacpan
retsv = newSViv( imp_sth->ss_last_row_id );
cacheit = FALSE; /* don't let row ids be cached... */
} else if (kl == 4 && strEQ(key, "NAME")) {
AV *av = newAV();
retsv = newRV((SV*)av);
while(--i >= 0)
av_store(av, i, newSVpv((char*)imp_sth->fbh[i].cbuf,0));
} else if (kl == 10 && strEQ(key, "CursorName")) {
/* Thanks to Peter Wyngaard for this ... */
char cursor_name[SQL_MAX_CURSOR_NAME_LEN + 1];
if (SQLGetCursorName (imp_sth->phstmt,
cursor_name,
SQL_MAX_CURSOR_NAME_LEN,
NULL)
== SQL_SUCCESS)
retsv = newSVpv (cursor_name, 0);
else
retsv = Nullsv;
}
else {
return Nullsv;
}
if (cacheit) { /* cache for next time (via DBI quick_FETCH) */
SV **svp = hv_fetch((HV*)SvRV(sth), key, kl, 1);
sv_free(*svp);
print "Rebuilding index... ";
if (!($ss_dbh->do( "VALIDATE INDEX test VALIDATE TABLE"))) {
print "FAILED: Cannot rebuild index ($DBI::errstr)\n";
}
print "ok\n";
$ss_dbh->{PrintError} = 0;
print "Doing a query (expecting 'Data truncated' error)... ";
my $cursor = $ss_dbh->prepare ('select ft_text,ft_sfname,filesize,title from test where title contains \'pippo\'');
if ($cursor) {
print "(execute) ... ";
$cursor->execute;
print "ok, now fetching (fetchrow): ";
my $text;
my @row;
my $eot;
my $data_truncated = 0;
while (@row = $cursor->fetchrow) {
$data_truncated++ if ($cursor->state =~ /01004/);
}
print "checking data truncated condition... ";
if ($data_truncated == 0) {
print "FAILED: did not detect 01004 [Data truncated] condition!\n";
exit 1;
}
print "ok\n";
}
else {
print "FAILED: Prepare failed ($DBI::errstr)\n";
exit 1;
}
print "Doing another query (this time you'll see the data)... ";
$ss_dbh->{ss_maxhitsinternalcolumns} = 64;
print "\n\t\$dbh->{ss_maxhitsinternalcolumns} set to " . $ss_dbh->{ss_maxhitsinternalcolumns} . "\n";
# this allows for max 64 matches, or it will be
# truncated still.
$cursor = $ss_dbh->prepare ('select ft_text,ft_sfname,filesize,title from test where title contains \'pippo\'');
if ($cursor) {
print "\t(execute) ... ";
$cursor->execute;
print "\tok, now fetching (fetchrow):\n***\n";
my $text;
my @row;
my $eot;
my $data_truncated = 0;
while (@row = $cursor->fetchrow) {
$data_truncated++ if ($DBI::state =~ /truncated/);
$cursor->blob_read (1, 0, 8192, \$text);
#or (print "+++ RB NOT OK:$DBI::errstr\n");
$text = $` if ($text =~ /\x00/);
#[32703mpippo.[32723m
$row[3] =~ s!\e\[32703m!\<M\>!g;
$row[3] =~ s!\e\[32723m!\</M\>!g;
print "(FILE: $row[1] TITLE: '$row[3]') "; #$text removed to clean up output
}
if ($data_truncated > 0) {
print "FAILED: Data truncated when it shouldn't be!\n";
exit 1;
}
print "\n***\n... ok\n";
}
else {
print "FAILED: Prepare failed ($DBI::errstr)\n";
exit 1;
}
$cursor->finish;
$ss_dbh->disconnect;
print "Exiting\nIf you are here, then most likely all tests were successful.\n";
exit 0;
# end.
( run in 0.242 second using v1.01-cache-2.11-cpan-4d50c553e7e )