[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