#!/usr/bin/perl -w
package Local::Romani::Query::XML::Select;
use base qw(Test::Class);
use DBIx::Romani::Query::XML::Select;
use DBIx::Romani::Driver::sqlite;
use XML::GDOME;
use Test::More;
use strict;
use Data::Dumper;
# utility function makes SQL out of whatever
sub generate_sql { return DBIx::Romani::Driver::sqlite->new()->generate_sql( @_ ) };
sub parse
{
my $xml = shift;
my $doc = XML::GDOME->createDocFromString( $xml );
my $query = DBIx::Romani::Query::XML::Select::create_select_from_node( $doc->getDocumentElement() );
return $query;
}
sub xmlSelect1Short : Test(1)
{
my $xml = << "EOF";
EOF
my $query = parse( $xml );
my $sql = generate_sql( $query );
is ( $sql, 'SELECT column_name FROM table_name');
}
sub xmlSelect1Long : Test(1)
{
my $xml = << "EOF";
EOF
my $query = parse( $xml );
my $sql = generate_sql( $query );
is ( $sql, 'SELECT column_name FROM table_name');
}
sub xmlSelectColumn1 : Test(1)
{
my $xml = << "EOF";
EOF
my $query = parse( $xml );
my $sql = generate_sql( $query );
is ( $sql, 'SELECT table_name.column_name AS alias_name FROM table_name');
}
sub xmlSelectExpression1 : Test(1)
{
my $xml = << "EOF";
EOF
my $query = parse( $xml );
my $sql = generate_sql( $query );
is ( $sql, 'SELECT COUNT(DISTINCT column_name) AS count FROM table_name');
}
sub xmlSelectWhere1 : Test(1)
{
my $xml = << "EOF";
EOF
my $query = parse( $xml );
my $sql = generate_sql( $query );
is ( $sql, "SELECT column_name FROM table_name WHERE (column_name = '123')");
}
# TODO: The XML format has fallen into disrepair, but since its not actually used for
# anything, I have simply to decided to disable the following tests which fail, rather
# than actually fix this. So, someday, fix this.
#sub xmlSelectGroupBy1Short : Test(1)
#{
# my $xml = << "EOF";
#
#EOF
#
# my $query = parse( $xml );
# my $sql = generate_sql( $query );
# is ( $sql, 'SELECT column_name FROM table_name GROUP BY column2');
#}
#
#sub xmlSelectGroupBy1Long : Test(1)
#{
# my $xml = << "EOF";
#
#EOF
#
# my $query = parse( $xml );
# my $sql = generate_sql( $query );
# is ( $sql, 'SELECT column_name FROM table_name GROUP BY column2');
#}
#
#sub xmlSelectOrderBy1Short : Test(1)
#{
# my $xml = << "EOF";
#
#EOF
#
# my $query = parse( $xml );
# my $sql = generate_sql( $query );
# is ( $sql, 'SELECT column_name FROM table_name ORDER BY column2 DESC');
#}
#
#sub xmlSelectOrderBy1Long : Test(1)
#{
# my $xml = << "EOF";
#
#EOF
#
# my $query = parse( $xml );
# my $sql = generate_sql( $query );
# is ( $sql, 'SELECT column_name FROM table_name ORDER BY column2 DESC');
#}
sub xmlSelectJoin1 : Test(1)
{
my $xml = << "EOF";
EOF
my $query = parse( $xml );
my $sql = generate_sql( $query );
is ($sql, 'SELECT column_name FROM table1 INNER JOIN table2 ON table1.key = table2.table1_key');
}
1;