Update of /cvsroot/fink/scripts/buildfink/lib/FinkFDB In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv21412/lib/FinkFDB
Modified Files: DBI.pm Log Message: Start moving web interface to new framework Index: DBI.pm =================================================================== RCS file: /cvsroot/fink/scripts/buildfink/lib/FinkFDB/DBI.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- DBI.pm 1 Apr 2007 04:46:30 -0000 1.1 +++ DBI.pm 1 Apr 2007 15:23:43 -0000 1.2 @@ -7,9 +7,7 @@ our %dbqueries = ( add_package => "INSERT INTO packages(package_name) VALUES (?)", add_file_path => "INSERT INTO file_paths(parent_id, file_name, fullpath) VALUES (?, ?, ?)", - get_package_id => "SELECT package_id FROM packages WHERE package_name = ?", - get_file_id => "SELECT file_id FROM file_paths WHERE fullpath = ?", - add_file_version => <<EOF); + add_file_version => <<EOF, INSERT INTO file_versions( package_id, is_directory, @@ -21,6 +19,30 @@ flags) VALUES (?, ?, ?, ?, ?, ?, ?, ?) EOF + get_package_id => "SELECT package_id FROM packages WHERE package_name = ?", + get_file_id => "SELECT file_id FROM file_paths WHERE fullpath = ?", + get_package_files => <<EOF, +SELECT fullpath AS 'path', + size, posix_user, posix_group, flags +FROM file_versions LEFT OUTER JOIN packages + ON file_versions.package_id = packages.package_id +WHERE package_name=? +ORDER BY is_directory DESC, fullpath ASC +EOF + get_directory_files => <<EOF, +SELECT file_name, + size, posix_user, posix_group, flags, + file_paths.file_id AS 'file_id', + is_directory, package_name +FROM file_paths LEFT OUTER JOIN file_versions + ON file_paths.file_id = file_versions.file_id +LEFT OUTER JOIN packages + ON packages.package_id = file_versions.package_id +WHERE parent_id = ? +ORDER BY is_directory DESC, file_name ASC +EOF + get_packages => "SELECT package_name, package_id FROM packages ORDER BY package_name ASC", + ); sub new { my($pkg, %params) = @_; @@ -40,29 +62,16 @@ $self->{dbh} = DBI->connect($dbstr, $params{dbuser}, $params{dbpass}, \%dbattrs); $self->{queries} = {}; - foreach my $key (keys %dbqueries) { - $self->{queries}->{$key} = $self->prepare($dbqueries{$key}); - } return $self; } sub addPackage { my($self, $package) = @_; - $self->{queries}->{add_package}->execute($package); + $self->execQuery("add_package", $package); $self->{dbh}->commit(); } -sub selectOne { - my($self, $qname, @bindvals) = @_; - - my $query = $self->{queries}->{$qname}; - $query->execute(@bindvals) or return; - my($val) = $query->fetchrow_array(); - $query->finish(); - return $val; -} - sub addPackageFiles { my($self, $package, $files) = @_; @@ -79,6 +88,60 @@ $self->{dbh}->commit(); } +sub getPackageFiles { + my($self, $package_id) = @_; + return $self->selectAll("get_package_files", $package_id); +} + +sub getPackages { + my($self) = @_; + return $self->selectAll("get_packages"); +} + +sub getPackageID { + my($self, $package_name) = @_; + return $self->selectOne("get_package_id", $package_name); +} + +sub getFileID { + my($self, $path) = @_; + return $self->selectOne("get_file_id", $path); +} + +sub getDirectoryFiles { + my($self, $file_id) = @_; + return $self->selectAll("get_directory_files", $file_id); +} + +# ===Internal Functions=== + +sub execQuery { + my($self, $qname, @bindvals) = @_; + + my $queries = $self->{queries}; + my $query = $queries->{$qname}; + $query = $queries->{$qname} = $self->prepare($qname) if !$query; + + return $query->execute(@bindvals) ? $query : undef; +} + +sub selectOne { + my($self, $qname, @bindvals) = @_; + + my $query = $self->execQuery($qname, @bindvals); + my($val) = $query->fetchrow_array(); + $query->finish(); + return $val; +} + +sub selectAll { + my($query, @bindvals) = @_; + my $query = $self->execQuery($query, @bindvals); + my $ret = $query->fetchall_arrayref({}); + $query->finish(); + return @$ret; +} + sub makeFileHierarchy { my($self, $pkg, $files) = @_; my %root = ("." => "", ".." => undef, "/path/" => ""); @@ -117,23 +180,23 @@ my $file_id = $self->selectOne("get_file_id", $file->{"/path/"}); if(!$file_id) { - $self->{queries}->{add_file_path}->execute($parent_id, $file->{"."}, $file->{"/path/"}); + $self->execQuery("add_file_path", $parent_id, $file->{"."}, $file->{"/path/"}); $file_id = $self->selectOne("get_file_id", $file->{"/path/"}) or die "Couldn't fetch or insert file ID for ".$file->{"/path/"}."!\n"; } if ($file->{"/versions/"}) { foreach my $filever (@{$file->{"/versions/"}}) { - $self->{queries}->{add_file_version}->execute( - $pkgid, - $filever->{isdir}, - $filever->{fullpath}, - $file_id, - $filever->{size}, - $filever->{user}, - $filever->{group}, - $filever->{flags} - ); + $self->execQuery("add_file_version", + $pkgid, + $filever->{isdir}, + $filever->{fullpath}, + $file_id, + $filever->{size}, + $filever->{user}, + $filever->{group}, + $filever->{flags} + ); } } @@ -144,8 +207,8 @@ } sub prepare { - my($self, $stmt) = @_; - return $self->{dbh}->prepare($stmt); + my($self, $qname) = @_; + return $self->{dbh}->prepare($dbqueries{$qname}); } 1; ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Fink-commits mailing list Fink-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/fink-commits