[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