DBD-SearchServer

 view release on metacpan or  search on metacpan

dbdimp.c  view on Meta::CPAN

    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);

test.pl  view on Meta::CPAN


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.648 second using v1.01-cache-2.11-cpan-4d50c553e7e )