switch to hashref based for command args and results
[dbsrgits/DBIx-Data-Store-old.git] / lib / DBIx / Data / Store / CRUD.pm
index f6d4d3f..5ba2e89 100644 (file)
@@ -7,26 +7,43 @@ has raw_store => (is => 'ro', required => 1); # DBIx::Data::Store object
 
 foreach my $type (qw(select insert update delete)) {
   has "${type}_sql" => (is => 'ro', predicate => "has_${type}_sql");
+  has "${type}_argument_order" => (is => 'ro', default => sub { [] });
 }
 
+has "select_column_order" => (is => 'ro');
+
 method new_select_command ($args) {
   die "$self->has_select_sql" unless $self->has_select_sql;
-  $self->raw_store->new_stream_command($self->select_sql, $args);
+  $self->raw_store->new_stream_command(
+    $self->select_sql,
+    $self->_unwrap_args_for(select => $args),
+    $self->select_column_order
+  );
+}
+
+method _unwrap_args_for ($type, $args) {
+  [ @{$args}{@{$self->${\"${type}_argument_order"}}} ]
+}
+
+method _new_call_command ($type, $args) {
+  my $has_meth = "has_${type}_sql";
+  die "${self}->${has_meth}" unless $self->$has_meth;
+  $self->raw_store->new_call_command(
+    $self->${\"${type}_sql"},
+    $self->_unwrap_args_for($type => $args)
+  );
 }
 
 method new_insert_command ($args) {
-  die "$self->has_insert_sql" unless $self->has_insert_sql;
-  $self->raw_store->new_call_command($self->insert_sql, $args);
+  $self->_new_call_command(insert => $args);
 }
 
 method new_update_command ($args) {
-  die "$self->has_update_sql" unless $self->has_update_sql;
-  $self->raw_store->new_call_command($self->update_sql, $args);
+  $self->_new_call_command(update => $args);
 }
 
 method new_delete_command ($args) {
-  die "$self->has_delete_sql" unless $self->has_delete_sql;
-  $self->raw_store->new_call_command($self->delete_sql, $args);
+  $self->_new_call_command(delete => $args);
 }
 
 __PACKAGE__->meta->make_immutable;