Author: byterock
Date: Fri Apr 23 09:13:19 2010
New Revision: 13924
Modified:
dbd-oracle/trunk/Oracle.pm
dbd-oracle/trunk/Oracle.xs
dbd-oracle/trunk/t/31lob.t
Log:
Fix for rt.cpan.org Ticket #55028: DBD INVALID_HANDLE: OCILobGetLength
While not a bug I have added in OCILobLocatorIsInit as the fnction ora_lob_is_init
so the user can test for a condion before an error is thrown
Modified: dbd-oracle/trunk/Oracle.pm
==============================================================================
--- dbd-oracle/trunk/Oracle.pm (original)
+++ dbd-oracle/trunk/Oracle.pm Fri Apr 23 09:13:19 2010
@@ -74,6 +74,7 @@
DBD::Oracle::db->install_method("ora_lob_trim");
DBD::Oracle::db->install_method("ora_lob_length");
DBD::Oracle::db->install_method("ora_lob_chunk_size");
+ DBD::Oracle::db->install_method("ora_lob_is_init");
DBD::Oracle::db->install_method("ora_nls_parameters");
DBD::Oracle::db->install_method("ora_can_unicode");
DBD::Oracle::st->install_method("ora_fetch_scroll");
@@ -3605,6 +3606,15 @@
Returns the length of the LOB.
Uses the Oracle OCILobGetLength function.
+
+=item ora_lob_is_init
+
+ $is_init = $dbh->ora_lob_is_init($lob_locator);
+
+Returns true(1) if the Lob Locator is initialized false(0) if it is not, or 'undef'
+if there is an error.
+Uses the Oracle OCILobLocatorIsInit function.
+
=item ora_lob_chunk_size
$chunk_size = $dbh->ora_lob_chunk_size($lob_locator);
Modified: dbd-oracle/trunk/Oracle.xs
==============================================================================
--- dbd-oracle/trunk/Oracle.xs (original)
+++ dbd-oracle/trunk/Oracle.xs Fri Apr 23 09:13:19 2010
@@ -469,6 +469,24 @@
}
void
+ora_lob_is_init(dbh, locator)
+ SV *dbh
+ OCILobLocator *locator
+ PREINIT:
+ D_imp_dbh(dbh);
+ sword status;
+ boolean is_init = 0;
+ CODE:
+ OCILobLocatorIsInit_log_stat(imp_dbh->envhp,imp_dbh->errhp,locator,&is_init,status);
+ if (status != OCI_SUCCESS) {
+ oci_error(dbh, imp_dbh->errhp, status, "OCILobLocatorIsInit ora_lob_is_init");
+ ST(0) = &sv_undef;
+ }
+ else {
+ ST(0) = sv_2mortal(newSVuv(is_init));
+ }
+
+void
ora_lob_length(dbh, locator)
SV *dbh
OCILobLocator *locator
@@ -479,7 +497,7 @@
CODE:
OCILobGetLength_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator, &len, status);
if (status != OCI_SUCCESS) {
- oci_error(dbh, imp_dbh->errhp, status, "OCILobGetLength");
+ oci_error(dbh, imp_dbh->errhp, status, "OCILobGetLength ora_lob_length");
ST(0) = &sv_undef;
}
else {
Modified: dbd-oracle/trunk/t/31lob.t
==============================================================================
--- dbd-oracle/trunk/t/31lob.t (original)
+++ dbd-oracle/trunk/t/31lob.t Fri Apr 23 09:13:19 2010
@@ -1,7 +1,7 @@
#!/usr/bin/perl
use strict;
-use Test::More tests => 11;
+use Test::More tests => 12;
use DBD::Oracle qw(:ora_types);
use DBI;
@@ -103,6 +103,9 @@
is( ref $loc, "OCILobLocatorPtr", "returned valid locator" );
+ is( $dbh->ora_lob_is_init($loc), 1, "returned initialized locator" );
+
+
# write string > 32k
$large_value = 'ABCD' x 10_000;
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.