NAME

Class::DBI::UUID - Provide Globally Unique Column Values

SYNOPSIS

      package MyApp::User;
      use base qw[Class::DBI];

      __PACKAGE__->connection('dbi:SQLite:dbfile', '', '');
      __PACKAGE__->table(q[users]);
      __PACKAGE__->columns(Primary => 'id');
      __PACKAGE__->columns(Essential => qw[username password]);

      use Class::DBI::UUID;
      __PACKAGE__->uuid_columns('id');

      # Elsewhere..
      my $user = MyApp::User->create({
          username => 'user',
          password => 'pass',
      });
  
      print $user->id; # A UUID string.

DESCRIPTION

This module implements globally unique columns values. When an object is created, the columns specified are given unique IDs. This is particularly helpful when running in an environment where auto incremented primary keys won't work, such as multi-master replication.

uuid_columns

MyApp::User->uuid_columns(MyApp::User->columns('Primary'));

A "before_create" trigger will be set up to set the values of each column listed as input to a "Data::UUID" string. Change the type of string output using the "uuid_columns_type" class method.

uuid_columns_type

MyApp::User->uuid_columns_type('bin'); # keep it small

By default the type will be "str". It's the largest, but its also the safest for general use. Possible values are "bin", "str", "hex", and "b64". Basically, anything that you can append to "create_" and still get a valid method name from "Data::UUID". Also returns the type to be used.

Do not change this value on a whim. If you do change it, change it before your call to "uuid_columns", or, call "uuid_columns" again after it is changed (therefore calling it before "uuid_columns", but also adding extra triggers without need).

EXPORTS

This module is implemented as a mixin and therefore exports the functions "uuid_columns", and "uuid_columns_type" into the caller's namespace. If you don't want these to be exported, then load this module using "require".

SEE ALSO

Class::DBI, Data::UUID, perl.

AUTHOR

Casey West, <casey@geeknest.com>.

COPYRIGHT

      Copyright (c) 2005 Casey West.  All rights reserved.
      This module is free software; you can redistribute it and/or modify it
      under the same terms as Perl itself.