NAME

Metadata::DB::File - metadata object about a file

SYNOPSIS

   use Metadata::DB::File;
   
   my $f = Metadata::DB::File->new({ 
      DBH => $dbh, 
      abs_path => '/home/myself/file',
   });

   $f->set('client' => 'James Mahoney');      
   $f->save;   
   my $id1 = $f->id;

   

   my $f2 = Metadata::DB::File->new({ DBH => $dbh, id => $id1 });   
   
   $f2->get('client'); #  eq 'James Mahoney'

   
   my $f = Metadata::DB::File::Base->new({ 
      DBH => $dbh, 
      abs_path => '/home/myself/this',
      host_id => 3,      
   });

DESCRIPTION

This is the 'file' counterpart to Metadata::DB::Base

This lets you store metadata in a database, about a file on disk The system is extremely adaptive. The manner in which we store metadata and the way in which we store information on what the resources are, is separate.

You can store info on many files on many computers.

To load the file data. The object must know which record you are referring to. You can tell it either the id, or the absolute path and host to record.

METHODS

In addition to all the methods in Metadata::DB::Base ..

new()

you can specify arguments 'id' or 'abs_path', and optionally 'host_id' otherwise you should use file_set()

   id
      file id, same as in metadata table, only reason you should have this
      for the constructor is out of a search query
   
   abs_path
      absolute path to file

   host_id
      optional, not currently implemented, but you could use it
   
     
   abs_path_resolve
      boolean, if we should normalize the paths with Cwd::abs_path
      if a host id is set, will ignore
      default is 0

id_exists()

is record in metadata table by id? (See Metadata::DB)

abs_path_exists()

is the record in files table by path? (and host_id if set)

file_set()

argument is file id or abs_path and optionally host_id

   $f->file_set('/home/hi/there');
   $f->file_set('/home/hi/there',4); # with host id
   $f->file_set(43); # via id only
   

if first arg is a number, we interpret as an id

abs_path()

returns abs path, must be set via constructor

host_id()

returns host id if any is set

host_id_set()

abs_path_set()

SETTING UP THE DATABASE

   use Metadata::DB::File::Base;

   my $s = Metadata::DB::File::Base->new({ DBH => $dbh });

   $s->table_metadata_check;
   $s->table_files_check;

   exit;

SEE ALSO

Metadata::DB Metadata::DB::File::Base

I would like to be able to instance these ways:

Example 1

   my $f = Metadata::DB::File::Base->new({
      DBH => $dbh,
   });

   $f->abs_path_set('/home/myself/hey',$hostid);

   $f->set( age => 4 ); # does not need to call load or save

   $f->get('author'); # calls load, does NOT generate id unless there already

   $f->set( author => 'leo' ); # does not call load, does not generate id

   $f->id; # will call load, will generate id if not there

   

Example 2

   my $f = Metadata::DB::File::Base->new({
      DBH => $dbh,
   });

   $f->id_set(2); # calls load, does NOT generate id, croaks if not in db

   $f->get('author'); # calls load


   













   how the identity should be determined
   

   )) via constructor id
      
      if an id is in the constructor
      should we write to db immediately?? No

      
      


   

   )) via constructor abs_path

      if abs path is in const arg
      and we ask for id, we should return undefined unless we saved or loaded



   )) via id_set
   
      id set should ONLY accept the value IF it is already in database
      id set should warn and return undef if not in db (files table)

      


   )) via abs_path_set
      
      this should not save to db auto.. ?
      if you set abs path, 
         and then request id 
         and the id is not in the db
         then none is returned, and you are warned to save first
         before you get an id


   
      
   
   

   # if you set abs path and then request id, that should make sure an entry is in the db???