Privatize _sth
Peter Rabbitson [Mon, 28 Mar 2011 11:45:40 +0000 (13:45 +0200)]
Changes
lib/DBIx/Class/CDBICompat/ImaDBI.pm
lib/DBIx/Class/Storage/DBI.pm
lib/DBIx/Class/Storage/DBI/Replicated.pm
t/storage/disable_sth_caching.t

diff --git a/Changes b/Changes
index ae28dcb..922bd92 100644 (file)
--- a/Changes
+++ b/Changes
@@ -7,6 +7,8 @@ Revision history for DBIx::Class
         - Both the ::ODBC and ::ADO dispatchers now warn if a rdbms-specific
           driver is not found for this connection before falling back to
           plain ::Storage::DBI
+        - ::Storage::DBI::sth was mistakenly marked/documented as public,
+          privatize and warn on deprecated use
 
     * Fixes
         - Fix ::Storage::DBI::* MRO problems on 5.8.x perls
index 49fc1e0..15a125d 100644 (file)
@@ -86,7 +86,7 @@ sub set_sql {
     sub {
       my $sql = $sql;
       my $class = shift;
-      return $class->storage->sth($class->transform_sql($sql, @_));
+      return $class->storage->_sth($class->transform_sql($sql, @_));
     };
   if ($sql =~ /select/i) {
     my $search_name = "search_${name}";
index fccbedc..189f4fb 100644 (file)
@@ -16,7 +16,6 @@ use Try::Tiny;
 use overload ();
 use namespace::clean;
 
-
 # default cursor class, overridable in connect_info attributes
 __PACKAGE__->cursor_class('DBIx::Class::Storage::DBI::Cursor');
 
@@ -799,7 +798,7 @@ sub dbh_do {
 
 # This is basically a blend of dbh_do above and DBIx::Class::Storage::txn_do.
 # It also informs dbh_do to bypass itself while under the direction of txn_do,
-#  via $self->{_in_dbh_do} (this saves some redundant eval and errorcheck, etc)
+# via $self->{_in_dbh_do} (this saves some redundant eval and errorcheck, etc)
 sub txn_do {
   my $self = shift;
   my $coderef = shift;
@@ -1639,7 +1638,7 @@ sub _dbh_execute {
 
   $self->_query_start( $sql, @$bind );
 
-  my $sth = $self->sth($sql,$op);
+  my $sth = $self->_sth($sql,$op);
 
   my $placeholder_index = 1;
 
@@ -1850,7 +1849,7 @@ sub insert_bulk {
   my $guard = $self->txn_scope_guard;
 
   $self->_query_start( $sql, @$bind ? [ dummy => '__BULK_INSERT__' ] : () );
-  my $sth = $self->sth($sql);
+  my $sth = $self->_sth($sql);
   my $rv = do {
     if (@$bind) {
       #@bind = map { ref $_ ? ''.$_ : $_ } @bind; # stringify args
@@ -2316,6 +2315,11 @@ sub _dbh_sth {
 }
 
 sub sth {
+  carp_unique 'sth was mistakenly marked/documented as public, stop calling it (will be removed before DBIC v0.09)';
+  shift->_sth(@_);
+}
+
+sub _sth {
   my ($self, $sql) = @_;
   $self->dbh_do('_dbh_sth', $sql);  # retry over disconnects
 }
index 04a0628..0523bb7 100644 (file)
@@ -268,7 +268,6 @@ my $method_dispatch = {
     txn_commit
     txn_rollback
     txn_scope_guard
-    sth
     deploy
     with_deferred_fk_checks
     dbh_do
@@ -322,6 +321,7 @@ my $method_dispatch = {
     _resolve_aliastypes_from_select_args
     _execute
     _do_query
+    _sth
     _dbh_sth
     _dbh_execute
   /],
@@ -357,6 +357,8 @@ my $method_dispatch = {
     _is_lob_type
     _is_binary_lob_type
     _is_text_lob_type
+
+    sth
   /,(
     # the capability framework
     # not sure if CMOP->initialize does evil things to DBIC::S::DBI, fix if a problem
index 860651a..c32f8c7 100644 (file)
@@ -10,10 +10,10 @@ plan tests => 2;
 # Set up the "usual" sqlite for DBICTest
 my $schema = DBICTest->init_schema;
 
-my $sth_one = $schema->storage->sth('SELECT 42');
-my $sth_two = $schema->storage->sth('SELECT 42');
+my $sth_one = $schema->storage->_sth('SELECT 42');
+my $sth_two = $schema->storage->_sth('SELECT 42');
 $schema->storage->disable_sth_caching(1);
-my $sth_three = $schema->storage->sth('SELECT 42');
+my $sth_three = $schema->storage->_sth('SELECT 42');
 
 ok($sth_one == $sth_two, "statement caching works");
 ok($sth_two != $sth_three, "disabling statement caching works");