[guest - Fri Feb 13 10:58:20 2004]:
Show quoted text> I tried to set a session table name for CGI::Session::MySQL as shown
> in the documentation, but it seems to be ignored.
>
> use CGI::Session;
> $CGI::Session::MySQL::TABLE_NAME = 'my_sessions';
>
> The module still uses table 'sessions'.
>
> Greetings, Bianka (Germany)
Hello,
I've created the following patch against my branch of 4.00_08 that I
believe addresses this. Assuming these changes are integrated, this bug
can be considered resolved.
Thanks for the report!
Mark
Mon Jul 4 13:46:48 EST 2005 Mark Stosberg <mark@summersault.com>
* Add code and tests for $CGI::Session::MySQL::TABLE_NAME (which worked in 3.x)
diff -rN -u old-cgi-session/Changes new-cgi-session/Changes
--- old-cgi-session/Changes 2005-07-04 15:09:18.000000000 -0500
+++ new-cgi-session/Changes 2005-07-04 13:40:28.000000000 -0500
@@ -3,6 +3,8 @@
* FIX: Added back is_new() for compatibility with 3.95. (Mark Stosberg)
* FIX: Support for CGI::Simple is confirmed, resolving RT#6141 (Mark Stosberg)
+ * FIX: Add code and tests for $CGI::Session::MySQL::TABLE_NAME,
+ which worked in 3.x (Mark Stosberg)
4.00_08 - Tuesday, March 15, 2005
diff -rN -u old-cgi-session/lib/CGI/Session/Driver/mysql.pm new-cgi-session/lib/CGI/Session/Driver/mysql.pm
--- old-cgi-session/lib/CGI/Session/Driver/mysql.pm 2005-07-04 15:09:18.000000000 -0500
+++ new-cgi-session/lib/CGI/Session/Driver/mysql.pm 2005-07-04 13:39:11.000000000 -0500
@@ -30,6 +30,15 @@
return 1;
}
+# If the table name hasn't been defined yet, check this location for 3.x compatibility
+sub table_name {
+ my $self = shift;
+ unless (defined $self->{TableName}) {
+ $self->{TableName} = $CGI::Session::MySQL::TABLE_NAME;
+ }
+ return $self->SUPER::table_name(@_);
+}
+
1;
__END__;
@@ -60,6 +69,14 @@
# is the same as:
$s = new CGI::Session( "driver:mysql", $sid, {DataSource=>'dbi:mysql:shopping_cart'});
+=head2 BACKWARDS COMPATIBILITY
+
+For backwards compatibility, you can also set the table like this before
+calling C<new()>. However, it is not recommended because it can cause conflicts
+in a persistent environment.
+
+ $CGI::Session::MySQL::TABLE_NAME = 'my_sessions';
+
=head1 LICENSING
For support and licensing see L<CGI::Session|CGI::Session>.
diff -rN -u old-cgi-session/t/g4_mysql.t new-cgi-session/t/g4_mysql.t
--- old-cgi-session/t/g4_mysql.t 2005-07-04 15:09:18.000000000 -0500
+++ new-cgi-session/t/g4_mysql.t 2005-07-04 13:34:07.000000000 -0500
@@ -52,5 +52,20 @@
args=>{Handle=>$dbh, TableName=>$dsn{TableName}});
-plan tests => $t->number_of_tests;
+plan tests => $t->number_of_tests + 2;
$t->run();
+
+{
+ # This was documented to work in 3.95 and should be supported for compatibility
+ my $obj;
+ eval {
+ # test.sessions will refer to the same 'sessions' table but is a unique name to test with
+ $CGI::Session::MySQL::TABLE_NAME = 'test.sessions';
+ my $avoid_warning = $CGI::Session::MySQL::TABLE_NAME;
+ require CGI::Session::Driver::mysql;
+ $obj = CGI::Session::Driver::mysql->new( {Handle=>$dbh} );
+ };
+ is($@,'', 'survived eval');
+ is($obj->table_name, 'test.sessions', "setting table name through CGI::Session::MySQL::TABLE_NAME works");
+}
+