Changeset 336


Ignore:
Timestamp:
Jul 27, 2006, 3:11:34 PM (13 years ago)
Author:
nick
Message:

Start to support matching by missing metadata

Location:
wiki-toolkit/trunk/lib/Wiki/Toolkit/Store
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • wiki-toolkit/trunk/lib/Wiki/Toolkit/Store/Database.pm

    r335 r336  
    15971597}
    15981598
     1599=item B<_get_list_by_metadata_sql>
     1600Return the SQL to do a match by metadata. Should expect the metadata type
     1601as the first SQL parameter, and the metadata value as the second.
     1602
     1603If possible, should take account of $args{ignore_case}
     1604=cut
    15991605sub _get_list_by_metadata_sql {
    16001606        # SQL 99 version
     
    16201626}
    16211627
     1628=item B<_get_list_by_missing_metadata_sql>
     1629Return the SQL to do a match by missing metadata. Should expect the metadata
     1630type as the first SQL parameter. If $args{with_value} is set, should expect
     1631the metadata value as the second SQL parameter.
     1632
     1633If possible, should take account of $args{ignore_case}
     1634=cut
     1635sub _get_list_by_missing_metadata_sql {
     1636        # SQL 99 version
     1637    #  Can be over-ridden by database-specific subclasses
     1638    my ($self, %args) = @_;
     1639
     1640        my $sql = "";
     1641    if ( $args{ignore_case} ) {
     1642        $sql = "SELECT node.name "
     1643             . "FROM node "
     1644             . "LEFT OUTER JOIN metadata "
     1645             . "   ON (node.id = metadata.node_id) "
     1646             . "WHERE node.version=metadata.version "
     1647             . "AND lower(metadata.metadata_type) = ? ";
     1648    } else {
     1649        $sql = "SELECT node.name "
     1650             . "FROM node "
     1651             . "LEFT JOIN metadata "
     1652             . "   ON (node.id = metadata.node_id) "
     1653             . "WHERE node.version=metadata.version "
     1654             . "AND metadata.metadata_type = ? ";
     1655    }
     1656
     1657        if( $args{with_value} ) {
     1658                if ( $args{ignore_case} ) {
     1659                $sql .= "AND NOT lower(metadata.metadata_value) = ? ";
     1660                } else {
     1661                $sql .= "AND NOT metadata.metadata_value = ? ";
     1662                }
     1663        } else {
     1664                $sql .= "AND (metadata.metadata_value IS NULL OR LENGHT(metadata.metadata_value) == 0) ";
     1665        }
     1666        return $sql;
     1667}
     1668
    16221669sub _get_comparison_sql {
    16231670    my ($self, %args) = @_;
  • wiki-toolkit/trunk/lib/Wiki/Toolkit/Store/SQLite.pm

    r209 r336  
    109109}
    110110
     111sub _get_list_by_missing_metadata_sql {
     112    my ($self, %args) = @_;
     113
     114        my $sql = "";
     115    if ( $args{ignore_case} ) {
     116        $sql = "SELECT node.name FROM node, metadata"
     117             . " WHERE node.id=metadata.node_id"
     118             . " AND node.version=metadata.version"
     119             . " AND metadata.metadata_type LIKE ? ";
     120    } else {
     121        $sql = "SELECT node.name FROM node, metadata"
     122             . " WHERE node.id=metadata.node_id"
     123             . " AND node.version=metadata.version"
     124             . " AND metadata.metadata_type = ? ";
     125    }
     126
     127        if( $args{with_value} ) {
     128                if ( $args{ignore_case} ) {
     129             $sql .= " AND NOT metadata.metadata_value LIKE ? ";
     130                } else {
     131             $sql .= " AND NOT metadata.metadata_value = ? ";
     132                }
     133        } else {
     134                $sql .= "AND (metadata.metadata_value IS NULL OR LENGHT(metadata.metadata_value) == 0) ";
     135        }
     136        return $sql;
     137}
     138
    111139sub _get_comparison_sql {
    112140    my ($self, %args) = @_;
Note: See TracChangeset for help on using the changeset viewer.