[Jifty-commit] r2719 - in jifty/branches/virtual-models/lib: . Jifty Jifty/Handle Jifty/Upgrade

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Mon Jan 29 06:35:38 EST 2007


Author: audreyt
Date: Mon Jan 29 06:35:31 2007
New Revision: 2719

Modified:
   jifty/branches/virtual-models/lib/Jifty.pm
   jifty/branches/virtual-models/lib/Jifty/Handle.pm
   jifty/branches/virtual-models/lib/Jifty/Handle/SVK.pm
   jifty/branches/virtual-models/lib/Jifty/Record.pm
   jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm
   jifty/branches/virtual-models/lib/Jifty/Upgrade/Internal.pm

Log:
* Free ->uuid for everybody! (Well, for all records.)

Modified: jifty/branches/virtual-models/lib/Jifty.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty.pm	Mon Jan 29 06:35:31 2007
@@ -7,7 +7,7 @@
 use encoding 'utf8';
 # Work around the fact that Time::Local caches thing on first require
 BEGIN { local $ENV{'TZ'} = "GMT";  require Time::Local;}
-$Jifty::VERSION = '0.70127';
+$Jifty::VERSION = '0.70129';
 
 =head1 NAME
 

Modified: jifty/branches/virtual-models/lib/Jifty/Handle.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Handle.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Handle.pm	Mon Jan 29 06:35:31 2007
@@ -214,6 +214,66 @@
     }
 }
 
+=head2 insert
+
+Assign an UUID for each successfully inserted rows.
+
+=cut
+
+sub insert {
+    my $self  = shift;
+    my $table = shift;
+    my $rv = $self->SUPER::insert($table, @_);
+
+    if ($rv) {
+        # Generate a UUID on the sideband: $table - $rv - UUID.
+        my $uuid = Jifty::Util->generate_uuid;
+        $self->dbh->do(qq[ INSERT INTO _jifty_uuids VALUES (?, ?, ?) ], {}, $uuid, $table, $rv);
+    }
+
+    return $rv;
+}
+
+=head2 bootstrap_uuid_table 
+
+Create the side-band table that gives each record its own UUID.
+
+=cut
+
+sub bootstrap_uuid_table {
+    my $self = shift;
+
+    $self->simple_query(qq[
+        CREATE TABLE _jifty_uuids (
+            uuid        char(36),
+            row_table   varchar(255),
+            row_id      integer
+        )
+    ]);
+    $self->simple_query(qq[
+        CREATE UNIQUE INDEX JiftyUUID ON _jifty_uuids (uuid, row_table, row_id)
+    ]);
+    $self->simple_query(qq[
+        CREATE UNIQUE INDEX JiftyUUID_Row ON _jifty_uuids (row_table, row_id)
+    ]);
+    $self->simple_query(qq[
+        CREATE UNIQUE INDEX JiftyUUID_UUID ON _jifty_uuids (uuid)
+    ]);
+}
+
+=head2 lookup_uuid($table, $id)
+
+Look up the UUID for a given row.
+
+=cut
+
+sub lookup_uuid {
+    my ($self, $table, $id) = @_;
+    my ($uuid) = $self->fetch_result(qq[
+        SELECT uuid FROM _jifty_uuids WHERE row_table = ? AND row_id = ?
+    ], $table, $id);
+    return $uuid;
+}
 
 =head1 AUTHOR
 

Modified: jifty/branches/virtual-models/lib/Jifty/Handle/SVK.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Handle/SVK.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Handle/SVK.pm	Mon Jan 29 06:35:31 2007
@@ -3,6 +3,7 @@
 
 package Jifty::Handle::SVK;
 use Jifty::Util;
+use Jifty::Handle;
 use base 'Jifty::Handle';
 
 =head1 NAME
@@ -28,35 +29,13 @@
 sub connect {
     my $self = shift;
     my $rv = $self->SUPER::connect(@_);
-
-    # Here we do it in SQL land to avoid circularity.
-    local $SIG{__WARN__} = sub { 1 };
-    defined $self->dbh->do(qq[
-        CREATE TABLE _jifty_uuids (
-            uuid        char(36),
-            row_table   varchar(255),
-            row_id      integer
-        )
-    ], { RaiseError => 0, PrintError => 0, AutoCommit => 1 } ) or return $rv;
-
-    $self->dbh->do(qq[ CREATE UNIQUE INDEX JiftyUUID ON _jifty_uuids (uuid, row_table, row_id) ]);
-    $self->dbh->do(qq[ CREATE UNIQUE INDEX JiftyUUID_Row ON _jifty_uuids (row_table, row_id) ]);
-    $self->dbh->do(qq[ CREATE UNIQUE INDEX JiftyUUID_UUID ON _jifty_uuids (uuid) ]);
-
     return $rv;
 }
 
-sub create {
+sub insert {
     my $self  = shift;
     my $table = shift;
-    my $rv = $self->SUPER::create($table, @_);
-
-    if ($rv) {
-        # Generate a UUID on the sideband: $table - $rv - UUID.
-        my $uuid = Jifty::Util->generate_uuid;
-        $self->dbh->do(qq[ INSERT INTO _jifty_uuids VALUES (?, ?, ?) ], $uuid, $table, $rv);
-    }
-
+    my $rv = $self->SUPER::insert($table, @_);
     return $rv;
 }
 

Modified: jifty/branches/virtual-models/lib/Jifty/Record.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Record.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Record.pm	Mon Jan 29 06:35:31 2007
@@ -487,5 +487,18 @@
     return "ALTER TABLE " . $self->table . " DROP COLUMN " . $col->name;
 }
 
+=head2 uuid
+
+Get the UUID of any given row.
+
+=cut
+
+sub uuid {
+    my $self = shift;
+    my $id = $self->id or return undef;
+    my $table = $self->table or return undef;
+    return $self->_handle->lookup_uuid($table, $id);
+}
+
 1;
 

Modified: jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm	Mon Jan 29 06:35:31 2007
@@ -205,6 +205,9 @@
     # Start a transaction
     Jifty->handle->begin_transaction;
 
+    # Bootstrap the UUID table first
+    Jifty->handle->bootstrap_uuid_table;
+
     $self->create_tables_for_models (grep {$_->isa('Jifty::DBI::Record')}  __PACKAGE__->models );
 
     # Update the versions in the database
@@ -212,6 +215,7 @@
     Jifty::Model::Metadata->store( jifty_db_version       => $jiftyv );
 
     # Load initial data
+    local $@;
     eval {
         my $bootstrapper = Jifty->app_class("Bootstrap");
         Jifty::Util->require($bootstrapper);

Modified: jifty/branches/virtual-models/lib/Jifty/Upgrade/Internal.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Upgrade/Internal.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Upgrade/Internal.pm	Mon Jan 29 06:35:31 2007
@@ -56,4 +56,13 @@
     rename column => 'key', in => 'IPC::PubSub::Cache::JiftyDBI::Stash::Item', to => 'data_key';
 };
 
+since '0.70129' => sub {
+    Jifty->handle->begin_transaction;
+    Jifty->handle->bootstrap_uuid_table;
+
+    # XXX - Generate UUID for _existing_ rows
+
+    Jifty->handle->commit;
+};
+
 1;


More information about the Jifty-commit mailing list