diff -pubr CGI-Wiki-Knew/MANIFEST CGI-Wiki-Knew-node_exists/MANIFEST --- CGI-Wiki-Knew/MANIFEST Mon Nov 24 20:48:55 2003 +++ CGI-Wiki-Knew-node_exists/MANIFEST Thu Dec 4 20:42:41 2003 @@ -38,6 +38,7 @@ t/012_blank_data.t t/013_fuzzy_title_match.t t/014_advanced_metadata.t t/015_dangling_links.t +t/016_node_version.t t/050_mysql_store.t t/051_pg_store.t t/052_sqlite_store.t diff -pubr CGI-Wiki-Knew/lib/CGI/Wiki/Store/Database.pm CGI-Wiki-Knew-node_exists/lib/CGI/Wiki/Store/Database.pm --- CGI-Wiki-Knew/lib/CGI/Wiki/Store/Database.pm Mon Nov 24 20:49:15 2003 +++ CGI-Wiki-Knew-node_exists/lib/CGI/Wiki/Store/Database.pm Thu Dec 4 19:55:36 2003 @@ -230,8 +230,35 @@ currently empty), and false otherwise. =cut sub node_exists { + my ($self, $node) = @_; + + croak "No valid node name supplied" unless $node; + + my $dbh = $self->dbh; + my $node_table = $self->{_table_prefix} . "node"; + + my $sql = "SELECT version FROM $node_table + WHERE name=" . $dbh->quote($node); + + my @results = $dbh->selectrow_array($sql); + @results = (0) unless scalar @results; + + return $results[0] > 0; +} + +=item B + + my $version = $store->node_version( "Wombat Defenestration" ); + # do something based on the version of the node + +Returns the version number of the node. If the node has never +existed, then 0 will be returned. + +=cut + +sub node_version { my ( $self, $node ) = @_; - my %data = $self->retrieve_node($node) or return (); + my %data = $self->_retrieve_node_content( name => $node ) or return (); return $data{version}; # will be 0 if node doesn't exist, >=1 otherwise } diff -pubr CGI-Wiki-Knew/lib/CGI/Wiki.pm CGI-Wiki-Knew-node_exists/lib/CGI/Wiki.pm --- CGI-Wiki-Knew/lib/CGI/Wiki.pm Mon Nov 24 20:48:55 2003 +++ CGI-Wiki-Knew-node_exists/lib/CGI/Wiki.pm Thu Dec 4 19:55:36 2003 @@ -402,6 +402,21 @@ sub node_exists { $self->store->node_exists( @args ); } +=item B + + my $version = $wiki->node_version( "Wombat Defenestration" ); + # do something based on the version of the node + +Returns the version number of the node. If the node has never +existed, then 0 will be returned. + +=cut + +sub node_version { + my ($self, @args) = @_; + $self->store->node_version( @args ); +} + =item B $wiki->delete_node($node); diff -pubr /dev/null CGI-Wiki-Knew-node_exists/t/016_node_version.t --- /dev/null Thu Jan 1 01:00:00 1970 +++ CGI-Wiki-Knew-node_exists/t/016_node_version.t Thu Dec 4 19:14:58 2003 @@ -0,0 +1,37 @@ +use strict; +use CGI::Wiki::TestLib; +use Test::More tests => ( 5 * scalar @CGI::Wiki::TestLib::wiki_info ); +use Time::Piece; + +my $iterator = CGI::Wiki::TestLib->new_wiki_maker; + +while ( my $wiki = $iterator->new_wiki ) { + # Node doesn't exist yet + is( $wiki->node_version("Home"), 0, + "...version number is 0 before node creation" ); + + # Put some test data in. + $wiki->write_node( "Home", "This is the home node." ) + or die "Couldn't write node"; + + # Test initial version number + is( $wiki->node_version("Home"), 1, + "...version number retrieved successfully after initial write" ); + + # Update the node + my %node_data = $wiki->retrieve_node("Home"); + + ok( $wiki->write_node("Home", "xx", $node_data{checksum}), + "write_node succeeds when node matches checksum" ); + + # Test updated version number + is( $wiki->node_version("Home"), 2, + "...version number retrieved successfully after node update" ); + + # Delete the node. + $wiki->delete_node("Home"); + + # Version number is now 0 + is( $wiki->node_version("Home"), 0, + "...version number is 0 after node delete" ); +}