/usr/local/CPAN/DBIx-Romani/DBIx/Romani/Query/XML/Where.pm



package DBIx::Romani::Query::XML::Where;

use DBIx::Romani::Query::XML::Util;
use DBIx::Romani::Query::XML::SQL;
use DBIx::Romani::Query::Comparison;
use DBIx::Romani::Query::Where;
use XML::DOM;
use strict;

use Data::Dumper;

sub create_where_from_node
{
	my $op_node = shift;

	my $name   = $op_node->getLocalName();
	my $ns_uri = $op_node->getNamespaceURI();

	my $op;

	# create the actual object
	if ( $ns_uri eq $DBIx::Romani::Query::XML::Util::NS_QUERY_OPERATOR )
	{
		if ( $name eq 'and' )
		{
			$op = DBIx::Romani::Query::Where->new( $DBIx::Romani::Query::Where::AND );
		}
		elsif ( $name eq 'equal' )
		{
			$op = DBIx::Romani::Query::Comparison->new( $DBIx::Romani::Query::Comparison::EQUAL );
		}
	}

	if ( not defined $op )
	{
		die "Unknown operator \"$ns_uri\" \"$name\"";
	}

	# go through the children
	my $node = $op_node->getFirstChild();
	while ( defined $node )
	{
		if ( $node->getNodeType() == XML::DOM::ELEMENT_NODE )
		{
			# operators can hold other things regarded as where
			$op->add( DBIx::Romani::Query::XML::SQL::create_where_from_node($node) );
		}

		$node = $node->getNextSibling();
	}

	return $op;
}

1;