shit doesn't work yet
Rafael Kitover [Fri, 5 Jun 2009 04:34:25 +0000 (04:34 +0000)]
lib/DBIx/Class/ResultSource/Table.pm
lib/DBIx/Class/Storage/DBI/NoBindVars.pm
lib/DBIx/Class/Storage/DBI/Sybase/NoBindVars.pm

index cf263d1..90c9f9a 100644 (file)
@@ -26,6 +26,9 @@ Returns the FROM entry for the table (i.e. the table name)
 
 =cut
 
+use overload
+  '""' => \&from;    
+
 sub from { shift->name; }
 
 1;
index 5180f96..8981f6a 100644 (file)
@@ -4,6 +4,8 @@ use strict;
 use warnings;
 
 use base 'DBIx::Class::Storage::DBI';
+use Scalar::Util ();
+use Carp::Clan qw/^DBIx::Class/;
 
 =head1 NAME 
 
@@ -39,7 +41,7 @@ Manually subs in the values for the usual C<?> placeholders.
 sub _prep_for_execute {
   my $self = shift;
 
-  my ($op, $extra_bind, $ident) = @_;
+  my ($op, $extra_bind, $ident, $rsrc) = @_;
 
   my ($sql, $bind) = $self->next::method(@_);
 
@@ -50,7 +52,12 @@ sub _prep_for_execute {
 
   foreach my $bound (@$bind) {
     my $col = shift @$bound;
+
     my $datatype = 'FIXME!!!';
+
+# this is what needs to happen:
+#    my $datatype = $rsrc->column_info($col)->{data_type};
+
     foreach my $data (@$bound) {
         if(ref $data) {
             $data = ''.$data;
index ed6f75c..82d05dc 100644 (file)
@@ -5,6 +5,7 @@ use base qw/
   DBIx::Class::Storage::DBI::NoBindVars
   DBIx::Class::Storage::DBI::Sybase
 /;
+use List::Util ();
 
 sub _dbh_last_insert_id {
   my ($self, $dbh, $source, $col) = @_;
@@ -14,11 +15,10 @@ sub _dbh_last_insert_id {
   return ($dbh->selectrow_array('select @@identity'))[0];
 }
 
-my $noquote = {
-    int => qr/^ \-? \d+ $/x,
-    integer => qr/^ \-? \d+ $/x,
+my %noquote = (
+    int => sub { /^ -? \d+ \z/x },
     # TODO maybe need to add float/real/etc
-};
+);
 
 sub should_quote_data_type {
   my $self = shift;
@@ -26,14 +26,14 @@ sub should_quote_data_type {
 
   return $self->next::method(@_) if not defined $value;
 
-  if (my $re = $noquote->{$type}) {
-    return 0 if $value =~ $re;
+  if (my $key = List::Util::first { $type =~ /^$_/i } keys %noquote) {
+    local $_ = $value;
+    return 0 if $noquote{$key}->();
   }
 
   return $self->next::method(@_);
 }
 
-
 1;
 
 =head1 NAME