: { clause => $clause, values => \@values };
}
+########## Insert method
+
+sub generic_insert {
+ my $self = shift;
+ return if $self->check_readonly;
+ my $args = {@_};
+
+ my $table = $args->{table} || $self->primary_table;
+ if (!$table) {
+ $self->set_error("table not given", -1);
+ return;
+ }
+
+ my $keys;
+ if ($args->{keys}) {
+ $keys = $self->_build_keys($args->{keys});
+ }
+ else {
+ $keys = $self->get_keys("all");
+ }
+
+ my $params = $args->{params};
+ if (!$params) {
+ $self->set_error("params not given", -1);
+ return;
+ };
+
+ my @cols;
+ my @values;
+ my @placeholders;
+
+ # extract key and values
+ for my $k (keys %$keys) {
+ next if !defined $params->{$k};
+ if (!ref($args->{$k})) {
+ push @cols, $keys->{$k};
+ push @values, $params->{$k};
+ push @placeholders, "?";
+ }
+ elsif(ref($args->{$k}) eq "HASH") {
+ for my $subkey (keys %{$params->{$k}}) {
+ if (lc($subkey) eq "function") {
+ push @cols, $keys->{$k};
+ push @placeholders, $params->{$k}->{$subkey};
+ }
+ }
+ }
+ }
+
+ if (!@cols || !@values) {
+ $self->set_error("no valid values", -1);
+ return;
+ }
+
+ my $cols_clause = join(", ", @cols);
+ my $values_clause = join(", ", @placeholders);
+
+
+ my $sql = "INSERT INTO $table ($cols_clause) VALUES ($values_clause)";
+ $self->_last_query($sql, \@values);
+
+ #warn $sql;
+ #warn Dumper @values;
+
+ my $dbh = $self->connect_db;
+ my $rs = $dbh->do($sql, undef, @values);
+ $self->disconnect_db;
+ return $rs;
+
+}
+
+
########## Select method
=head2 generic_select(table => $table, uniques => $uniques, keys => $keys, params => $params)
sub _build_keys {
my ($self, $target) = @_;
return {} if !$target;
+ return $target if ref($target) eq "HASH";
if (!ref($target)) {
$target = [$target];
}
INSERT INTO cow_test (foo, bar, hoge) VALUES (?, ?, ?)
EOSQL
for my $d (@$test_data) {
- my $rs = $dbh->do($insert_sql, undef, $d->{foo}, $d->{bar}, $d->{hoge});
+ #my $rs = $dbh->do($insert_sql, undef, $d->{foo}, $d->{bar}, $d->{hoge});
+ my $rs = $c->generic_insert(table => "cow_test",
+ keys => [qw(foo bar hoge)],
+ params => $d,
+ );
ok($rs, "insert $d->{foo}");
}