Changeset 454
- Timestamp:
- 10/18/08 13:48:32 (4 years ago)
- Location:
- wiki-toolkit/trunk
- Files:
-
- 1 added
- 3 modified
-
Changes (modified) (1 diff)
-
MANIFEST (modified) (1 diff)
-
lib/Wiki/Toolkit/Store/Database.pm (modified) (2 diffs)
-
t/061_list_metadata_by_type.t (added)
Legend:
- Unmodified
- Added
- Removed
-
wiki-toolkit/trunk/Changes
r452 r454 1 0.77 ??? 2 Complete support for store->list_metadata_by_type, which 3 returns a list of all the metadata values 4 1 5 0.76 13 July 2008 2 6 Really add missing prereq of DBI! -
wiki-toolkit/trunk/MANIFEST
r447 r454 65 65 t/052_sqlite_store.t 66 66 t/060_recent_changes_new_only.t 67 t/061_list_metadata_by_type.t 67 68 t/100_formatting.t 68 69 t/101_default_formatter.t -
wiki-toolkit/trunk/lib/Wiki/Toolkit/Store/Database.pm
r449 r454 1954 1954 List all the currently defined values of the given type of metadata. 1955 1955 1956 Will only work with the latest moderated version1956 Will only return data from the latest moderated version of each node 1957 1957 1958 1958 # List all of the different metadata values with the type 'category' … … 1964 1964 my ($self, $type) = @_; 1965 1965 1966 return 0 unless $type; 1966 return undef unless $type; 1967 my $dbh = $self->dbh; 1968 1969 # Ideally we'd do this as one big query 1970 # However, this would need a temporary table on many 1971 # database engines, so we cheat and do it as two 1972 my $nv_sql = 1973 "SELECT node_id, MAX(version) ". 1974 "FROM content ". 1975 "WHERE moderated ". 1976 "GROUP BY node_id "; 1977 my $sth = $dbh->prepare( $nv_sql ); 1978 $sth->execute(); 1979 1980 my @nv_where; 1981 while(my @results = $sth->fetchrow_array) { 1982 my ($node_id, $version) = @results; 1983 my $where = "(node_id=$node_id AND version=$version)"; 1984 push @nv_where, $where; 1985 } 1986 1987 # Now the metadata bit 1988 my $sql = 1989 "SELECT DISTINCT metadata_value ". 1990 "FROM metadata ". 1991 "WHERE metadata_type = ? ". 1992 "AND (". 1993 join(" OR ", @nv_where). 1994 ")"; 1995 $sth = $dbh->prepare( $sql ); 1996 $sth->execute($type); 1997 1998 my $values = $sth->fetchall_arrayref([0]); 1999 return ( map { $self->charset_decode( $_->[0] ) } (@$values) ); 1967 2000 } 1968 2001
