[Rt-commit] [svn] r1687 - in DBIx-SearchBuilder/trunk: . SearchBuilder SearchBuilder/Handle

jesse at pallas.eruditorum.org jesse at pallas.eruditorum.org
Sat Oct 23 17:51:07 EDT 2004


Author: jesse
Date: Sat Oct 23 17:51:07 2004
New Revision: 1687

Modified:
   DBIx-SearchBuilder/trunk/   (props changed)
   DBIx-SearchBuilder/trunk/Changes
   DBIx-SearchBuilder/trunk/META.yml
   DBIx-SearchBuilder/trunk/SearchBuilder.pm
   DBIx-SearchBuilder/trunk/SearchBuilder/Handle.pm
   DBIx-SearchBuilder/trunk/SearchBuilder/Handle/SQLite.pm
Log:
 r6041 at tinbook:  jesse | 2004-10-18T19:12:34.884286Z
 
 r6087 at tinbook:  jesse | 2004-10-23T21:09:01.838506Z
 This be 1.12


Modified: DBIx-SearchBuilder/trunk/Changes
==============================================================================
--- DBIx-SearchBuilder/trunk/Changes	(original)
+++ DBIx-SearchBuilder/trunk/Changes	Sat Oct 23 17:51:07 2004
@@ -1,8 +1,15 @@
 Revision history for Perl extension DBIx::SearchBuilder.
 
+1.12
+    - Better error handling for some query build failure cases
+    - Corrected query builder for SQLite
+    - More refactoring.
+
 1.11
 
-    - When loading an object whose "id" has been altered, as in the case of RT's "Merge" functionality, the wrong object was returned by the caching layer. Special casing for the "id" method was removed.
+    - When loading an object whose "id" has been altered, as in the case of RT's 
+      "Merge" functionality, the wrong object was returned by the caching layer. 
+       Special casing for the "id" method was removed.
 
 
 1.10

Modified: DBIx-SearchBuilder/trunk/META.yml
==============================================================================
--- DBIx-SearchBuilder/trunk/META.yml	(original)
+++ DBIx-SearchBuilder/trunk/META.yml	Sat Oct 23 17:51:07 2004
@@ -1,5 +1,5 @@
 name: DBIx-SearchBuilder
-version: 1.11
+version: 1.12_01
 license: perl
 distribution_type: module
 build_requires:
@@ -12,4 +12,4 @@
 no_index:
   directory:
     - inc
-generated_by: Module::Install version 0.35
+generated_by: Module::Install version 0.36

Modified: DBIx-SearchBuilder/trunk/SearchBuilder.pm
==============================================================================
--- DBIx-SearchBuilder/trunk/SearchBuilder.pm	(original)
+++ DBIx-SearchBuilder/trunk/SearchBuilder.pm	Sat Oct 23 17:51:07 2004
@@ -5,7 +5,7 @@
 use strict;
 use vars qw($VERSION);
 
-$VERSION = "1.12_01";
+$VERSION = "1.12";
 
 =head1 NAME
 
@@ -74,6 +74,7 @@
     $self->{'order'}            = "";
     $self->{'alias_count'}      = 0;
     $self->{'first_row'}        = 0;
+    $self->{'must_redo_search'} = 1;
     @{ $self->{'aliases'} } = ();
 
     delete $self->{'items'}        if ( defined $self->{'items'} );
@@ -208,7 +209,7 @@
     my $table = shift;
 
     # XXX - Postgres gets unhappy with distinct and OrderBy aliases
-    if ($self->{order_clause} =~ /(?<!main)\./) {
+    if (exists $self->{'order_clause'} && $self->{'order_clause'} =~ /(?<!main)\./) {
         $$statementref = "SELECT main.* FROM $$statementref";
     }
     else {

Modified: DBIx-SearchBuilder/trunk/SearchBuilder/Handle.pm
==============================================================================
--- DBIx-SearchBuilder/trunk/SearchBuilder/Handle.pm	(original)
+++ DBIx-SearchBuilder/trunk/SearchBuilder/Handle.pm	Sat Oct 23 17:51:07 2004
@@ -441,7 +441,10 @@
 sub SimpleQuery  {
     my $self = shift;
     my $QueryString = shift;
-    my @bind_values = (@_);
+    my @bind_values;
+   @bind_values = (@_) if (@_);;
+
+    
 
     my $sth = $self->dbh->prepare($QueryString);
     unless ($sth) {
@@ -474,15 +477,15 @@
     if ($self->LogSQLStatements) {
         $basetime = Time::HiRes::time(); 
     }
-
-    my $executed =$sth->execute(@bind_values);
+    my $executed;
+    eval {     $executed =$sth->execute(@bind_values) };
 
     if ($self->LogSQLStatements) {
             $self->_LogSQLStatement($QueryString ,tv_interval ( $basetime ));
  
     }
 
-    unless($executed ) {
+    if ( $@ or !$executed ) {
         if ($DEBUG) {
             die "$self couldn't execute the query '$QueryString'"
               . $self->dbh->errstr . "\n";

Modified: DBIx-SearchBuilder/trunk/SearchBuilder/Handle/SQLite.pm
==============================================================================
--- DBIx-SearchBuilder/trunk/SearchBuilder/Handle/SQLite.pm	(original)
+++ DBIx-SearchBuilder/trunk/SearchBuilder/Handle/SQLite.pm	Sat Oct 23 17:51:07 2004
@@ -97,4 +97,55 @@
 
 
 
+#SQLite can't handle 
+# SELECT DISTINCT main.*     FROM (Groups main          LEFT JOIN Principals Principals_2  ON ( main.id = Principals_2.id)) ,     GroupMembers GroupMembers_1      WHERE ((GroupMembers_1.MemberId = '70'))     AND ((Principals_2.Disabled = '0'))     AND ((main.Domain = 'UserDefined'))     AND ((main.id = GroupMembers_1.GroupId)) 
+#     ORDER BY main.Name ASC
+#     It needs
+#SELECT DISTINCT main.*     FROM Groups main           LEFT JOIN Principals Principals_2  ON ( main.id = Principals_2.id) ,      GroupMembers GroupMembers_1      WHERE ((GroupMembers_1.MemberId = '70'))     AND ((Principals_2.Disabled = '0'))     AND ((main.Domain = 'UserDefined'))     AND ((main.id = GroupMembers_1.GroupId)) ORDER BY main.Name ASC
+
+
+
+sub _BuildJoins {
+    my $self = shift;
+    my $sb   = shift;
+    my %seen_aliases;
+    
+    $seen_aliases{'main'} = 1;
+
+    # We don't want to get tripped up on a dependency on a simple alias. 
+        foreach my $alias ( @{ $sb->{'aliases'}} ) {
+          if ( $alias =~ /^(.*?)\s+(.*?)$/ ) {
+              $seen_aliases{$2} = 1;
+          }
+    }
+
+    my $join_clause = $sb->{'table'} . " main ";
+    
+    my @keys = ( keys %{ $sb->{'left_joins'} } );
+    my %seen;
+    
+    while ( my $join = shift @keys ) {
+        if ( ! $sb->{'left_joins'}{$join}{'depends_on'} || $seen_aliases{ $sb->{'left_joins'}{$join}{'depends_on'} } ) {
+           #$join_clause = "(" . $join_clause;
+            $join_clause .=
+              $sb->{'left_joins'}{$join}{'alias_string'} . " ON (";
+            $join_clause .=
+              join ( ') AND( ',
+                values %{ $sb->{'left_joins'}{$join}{'criteria'} } );
+            $join_clause .= ") ";
+            
+            $seen_aliases{$join} = 1;
+        }   
+        else {
+            push ( @keys, $join );
+            die "Unsatisfied dependency chain in Joins @keys"
+              if $seen{"@keys"}++;
+        }     
+        
+    }
+    return ( join ( ", ", ( $join_clause, @{ $sb->{'aliases'} } ) ) );
+    
+}
+
+
 1;


More information about the Rt-commit mailing list