use Moose::Util::TypeConstraints;
use MooseX::Types::Moose qw/ArrayRef Str Int HashRef CodeRef/;
use MooseX::AttributeHelpers;
- use SQL::Abstract::Types qw/NameSeparator QuoteChars AST HashAST ArrayAST/;
+ use SQL::Abstract::Types qw/NameSeparator QuoteChars AST/;
use Devel::PartialDump qw/dump/;
clean;
}
# Main entry point
- method generate(ClassName $class: HashAST $ast) {
+ method generate(ClassName $class: AST $ast) {
my $ver = $ast->{-ast_version};
croak "SQL::Abstract AST version not specified"
unless defined $ver;
method dispatch (AST $ast) {
-
- # I want multi methods!
- my $tag;
- if (is_ArrayAST($ast)) {
- confess "FIX: " . dump($ast);
- } else {
- $tag = "_" . $ast->{-type};
- }
+ my $tag = "_" . $ast->{-type};
my $meth = $self->can($tag) || croak "Unknown tag '$tag'";
return $meth->($self, $ast);
use Moose::Util::TypeConstraints;
use MooseX::Types::Moose qw/ArrayRef Str Int Ref HashRef/;
use MooseX::AttributeHelpers;
- use SQL::Abstract::Types qw/AST ArrayAST HashAST/;
+ use SQL::Abstract::Types qw/AST/;
use Devel::PartialDump qw/dump/;
clean;
};
}
- method _select(HashAST $ast) {
+ method _select(AST $ast) {
# Default to requiring columns and from.
# DB specific ones (i.e. mysql/Pg) can not require the FROM part with a bit
# of refactoring
return $output;
}
- method _name(HashAST $ast) {
+ method _name(AST $ast) {
my @names = @{$ast->{args}};
my $sep = $self->name_separator;
}
- method _value(HashAST $ast) {
+ method _value(AST $ast) {
$self->add_bind($ast->{value});
return "?";
# Perhaps badly named. handles 'and' and 'or' clauses
- method _recurse_where(HashAST $ast) {
+ method _recurse_where(AST $ast) {
my $op = $ast->{op};
my @output;
foreach ( @{$ast->{args}} ) {
- croak "invalid component in where clause: $_" unless is_HashAST($_);
+ croak "invalid component in where clause: $_" unless is_AST($_);
if ($_->{-type} eq 'expr' && $_->{op} =~ /^(and|or)$/) {
my $sub_prio = $SQL::Abstract::PRIO{$1};
return join(" $OP ", @output);
}
- method _expr(HashAST $ast) {
+ method _expr(AST $ast) {
my $op = $ast->{-type};
$op = $ast->{op} if $op eq 'expr';
}
- method _binop(HashAST $ast) {
+ method _binop(AST $ast) {
my ($lhs, $rhs) = @{$ast->{args}};
my $op = $ast->{op};
);
}
- method _in(HashAST $ast) {
+ method _in(AST $ast) {
my ($field,@values) = @{$ast->{args}};
class SQL::Abstract::Compat {
use Moose::Util::TypeConstraints;
- use MooseX::Types -declare => [qw/LogicEnum/];
+ use MooseX::Types::Moose qw/Str ScalarRef ArrayRef HashRef/;
+ use MooseX::Types -declare => [qw/LogicEnum WhereType/];
enum LogicEnum, qw(OR AND);
+ subtype WhereType, as Str;
+
clean;
has logic => (
default => 'AND'
);
+
+
method select(Str|ArrayRef|ScalarRef $from, ArrayRef|Str $fields,
Str|ScalarRef|ArrayRef|HashRef $where?,
Str|ScalarRef|ArrayRef|HashRef $order?) {
return ("", );
}
- method where(Str|ScalarRef|ArrayRef|HashRef $where?,
+ method where(Str|ScalarRef|ArrayRef|HashRef $where,
Str|ScalarRef|ArrayRef|HashRef $order?) {
+
+ my $ast = {
+ -type => 'expr',
+ };
}
+
+ method recurse_where(LogicEsnum $where) {
+
+ }
+
}
=head1 NAME
use MooseX::Declare;
class SQL::Abstract::Types {
use Moose::Util::TypeConstraints;
- use MooseX::Types -declare => [qw/NameSeparator QuoteChars AST ArrayAST HashAST/];
+ use MooseX::Types -declare => [qw/NameSeparator QuoteChars AST/];
use MooseX::Types::Moose qw/ArrayRef Str Int Ref HashRef/;
- subtype ArrayAST, as ArrayRef,
- where { is_Str($_->[0]) && substr($_->[0],0,1) eq '-' },
- message { "First key of arrayref must be a string starting with '-'"; };
-
- subtype HashAST, as HashRef,
+ subtype AST, as HashRef,
where { exists $_->{-type} && is_Str($_->{-type}) },
message { "No '-type' key, or it is not a string" };
- subtype AST, as ArrayAST|HashAST;
-
subtype NameSeparator,
as Str,
where { length($_) == 1 };
use strict;
use warnings;
-use Test::More tests => 7;
+use Test::More tests => 3;
use MooseX::Types::Moose qw/ArrayRef Str Int Ref HashRef/;
use SQL::Abstract::Types ':all';
-is(ArrayAST->validate( [ -foo => 'bar' ] ), undef, "is_ArrayAST with valid" );
-ok(!is_ArrayAST( [ foo => 'bar' ] ), "is_ArrayAST with invalid" );
-
-
-is(HashAST->validate( { -type => 'select', select => [] } ), undef, "is_HashAST with valid" );
-ok(!is_HashAST( { foo => 'bar' } ), "is_HashAST with invalid" );
-
+is(AST->validate( { -type => 'select', select => [] } ), undef, "is_AST with valid" );
+ok(!is_AST( { foo => 'bar' } ), "is_AST with invalid" );
is(AST->validate( { -type => 'select', select => [] } ), undef, "is_AST with valid hash" );
-is(AST->validate( [ -name => 1, 2 ] ), undef, "is_AST with valid array" );
-is(is_AST([ -name => qw/me id/]), 1);