IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 23772


Ignore:
Timestamp:
Apr 9, 2009, 11:28:07 AM (17 years ago)
Author:
jhoblitt
Message:

start of ->find_objects() refactoring (unfinished)

Location:
branches/neb_distrib_20081210/Nebulous-Server/lib/Nebulous
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/neb_distrib_20081210/Nebulous-Server/lib/Nebulous/Server.pm

    r23760 r23772  
    2424use Nebulous::Server::Log;
    2525use Nebulous::Server::SQL;
    26 use Params::Validate qw( validate_pos SCALAR SCALARREF UNDEF );
     26use Params::Validate qw( validate validate_pos SCALAR SCALARREF UNDEF BOOLEAN );
    2727use URI::file;
    2828
     
    210210        = $self->_get_storage_volume($key, $vol_name, $key->soft_volume);
    211211
    212     my $parent_id = $self->_resolve_dir_parent_id($key);
     212    my $parent_id = $self->_resolve_dir_parent_id(key => $key, create => 1);
    213213
    214214    my $uri;
     
    300300    my $self = shift;
    301301
    302     my ($key) = validate_pos(@_,
    303         {
    304             isa => 'Nebulous::Key',
    305         },
     302    my %p = validate(@_,
     303        {
     304            key     => {
     305                isa         => 'Nebulous::Key',
     306            },
     307            create  => {
     308                type        => BOOLEAN,
     309                optional    => 1,
     310                default     => undef,
     311            },
     312        }
    306313    );
     314
     315    my $key = $p{key};
    307316
    308317    my $log = $self->log;
     
    342351                }
    343352
     353                # else dir doesn't exist
     354                unless ($p{create}) {
     355                    # resolution failed
     356                    $parent_id = undef;
     357                    last;
     358                }
     359
    344360                {
    345361                    # dir doesn't exist, create it
     
    421437            my $query = $db->prepare_cached($sql->rename_object);
    422438            # this SQL statment takes the new key name as the first param
    423             my $rows = $query->execute($newkey->path, basename($newkey->path), $self->_resolve_dir_parent_id($newkey), $key->path);
     439            my $rows = $query->execute($newkey->path, basename($newkey->path), $self->_resolve_dir_parent_id(key => $newkey, create => 1), $key->path);
    424440
    425441            # if we affected more then one row something very bad has happened.
     
    513529              my $query = $db->prepare_cached($sql->rename_object);
    514530              # this SQL statment takes the new key name as the first param
    515               my $rows = $query->execute($key1->path, basename($key1->path), $self->_resolve_dir_parent_id($key1), $key2->path);
     531              my $rows = $query->execute($key1->path, basename($key1->path), $self->_resolve_dir_parent_id(key => $key1, create => 1), $key2->path);
    516532
    517533              # if we affected more then one row something very bad has happened.
     
    526542              my $query = $db->prepare_cached($sql->rename_object);
    527543              # this SQL statment takes the new key name as the first param
    528               my $rows = $query->execute($key2->path, basename($key2->path), $self->_resolve_dir_parent_id($key2), $key1->path . ".swap");
     544              my $rows = $query->execute($key2->path, basename($key2->path), $self->_resolve_dir_parent_id(key => $key2, create => 1), $key1->path . ".swap");
    529545
    530546              # if we affected more then one row something very bad has happened.
     
    11781194    );
    11791195
    1180     my $log = $self->log;
    1181     my $sql = $self->sql;
     1196    $pattern = parse_neb_key($pattern);
     1197
     1198    my $log = $self->log;
    11821199
    11831200    $log->debug( "entered - @_" );
    11841201
    1185     unless ($pattern) {
     1202    unless (defined $pattern) {
    11861203        $log->debug( "leaving" );
    11871204        $log->logdie("no keys found");
    11881205    }
    1189 
    1190     # attempt to strip off neb:// if it exists
    1191     $pattern =~ s|^neb:||;
    11921206
    11931207    my @keys = ();
     
    12081222{
    12091223
    1210     my $self = shift;
    1211     my $index = shift;
    1212     my $pattern = shift;
     1224    my $self    = shift;
     1225    my $index   = shift;
     1226    my $key    = shift;
    12131227
    12141228    my $log = $self->log;
    12151229    my $sql = $self->sql;
    12161230    my $db  = $self->_db_for_index($index);
     1231
     1232    # first check to see if the key is an exact match
     1233    eval {
     1234        my $query = $db->prepare_cached( $sql->find_object_by_ext_id );
     1235        $query->execute( $key );
     1236        if ($query->rows) {
     1237            return [$query->fetchrow_hashref->{'ext_id'}];
     1238        }
     1239
     1240        my $parent_id = $self->_resolve_dir_parent_id(key => $key);
     1241
     1242    };
     1243    if ($@) {
     1244        $db->rollback;
     1245        $log->logdie("database error: $@");
     1246    }
     1247
     1248    # else, assume it's a directory
    12171249
    12181250    my @keys;
    12191251    eval {
    1220         my $query = $db->prepare_cached( $sql->find_objects );
    1221         $query->execute( $pattern );
     1252        my $query = $db->prepare_cached( $sql->find_object_by_ext_id );
     1253        $query->execute( $key );
    12221254
    12231255        while ( my $row = $query->fetchrow_hashref ) {
     
    12301262    return \@keys;
    12311263}
     1264
    12321265
    12331266sub find_instances
  • branches/neb_distrib_20081210/Nebulous-Server/lib/Nebulous/Server/SQL.pm

    r23760 r23772  
    309309            USING(vol_id)
    310310    },
    311     find_objects => qq{
    312         SELECT *
    313         FROM storage_object
    314         WHERE ext_id REGEXP ?
     311    find_object_by_ext_id => qq{
     312        SELECT ext_id, ext_id_basename
     313        FROM storage_object
     314        WHERE ext_id = ?
    315315    },
    316316    rename_object => qq{
Note: See TracChangeset for help on using the changeset viewer.