From: Peter Rabbitson Date: Wed, 29 Apr 2009 22:49:12 +0000 (+0000) Subject: Make sure hash key sorting is maintained throughout SQLA X-Git-Tag: v1.70~166 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=106c861e4e2b33330b21b111b76683ef7cd59c62;p=dbsrgits%2FSQL-Abstract.git Make sure hash key sorting is maintained throughout SQLA Adjust tests accordingly --- diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index b0acab4..e523fe6 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -422,7 +422,6 @@ sub _where_HASHREF { my ($self, $where) = @_; my (@sql_clauses, @all_bind); - # LDNOTE : don't really know why we need to sort keys for my $k (sort keys %$where) { my $v = $where->{$k}; @@ -463,7 +462,7 @@ sub _where_op_in_hash { HASHREF => sub { if ($op eq 'OR') { - return $self->_where_ARRAYREF([%$v], 'OR'); + return $self->_where_ARRAYREF([ map { $_ => $v->{$_} } (sort keys %$v) ], 'OR'); } else { # NEST | AND return $self->_where_HASHREF($v); diff --git a/t/04modifiers.t b/t/04modifiers.t index e3db3d7..dfc0f78 100644 --- a/t/04modifiers.t +++ b/t/04modifiers.t @@ -176,8 +176,8 @@ my @and_or_tests = ( { where => { -and => [a => 1, b => 2, k => [11, 12] ], x => 9, -or => { c => 3, d => 4, l => { '=' => [21, 22] } } }, - stmt => 'WHERE a = ? AND b = ? AND (k = ? OR k = ?) AND ((l = ? OR l = ?) OR c = ? OR d = ? ) AND x = ?', - bind => [qw/1 2 11 12 21 22 3 4 9/], + stmt => 'WHERE a = ? AND b = ? AND (k = ? OR k = ?) AND (c = ? OR d = ? OR (l = ? OR l = ?) ) AND x = ?', + bind => [qw/1 2 11 12 3 4 21 22 9/], }, { @@ -196,8 +196,8 @@ my @and_or_tests = ( # explicit OR logic in arrays should leave everything intact args => { logic => 'or' }, where => { -and => [a => 1, b => 2, k => [11, 12] ], x => 9, -or => { c => 3, d => 4, l => { '=' => [21, 22] } } }, - stmt => 'WHERE a = ? AND b = ? AND (k = ? OR k = ?) AND ( l = ? OR l = ? OR c = ? OR d = ? ) AND x = ? ', - bind => [qw/1 2 11 12 21 22 3 4 9/], + stmt => 'WHERE a = ? AND b = ? AND (k = ? OR k = ?) AND ( c = ? OR d = ? OR l = ? OR l = ? ) AND x = ? ', + bind => [qw/1 2 11 12 3 4 21 22 9/], }, { @@ -361,8 +361,8 @@ my @nest_tests = ( }, { where => {a => 1, -nest => {-or => {b => 2, c => 3}}}, - stmt => 'WHERE ( ( (c = ? OR b = ?) AND a = ? ) )', - bind => [qw/3 2 1/], + stmt => 'WHERE ( ( (b = ? OR c = ?) AND a = ? ) )', + bind => [qw/2 3 1/], }, { where => [a => 1, -nest => {b => 2, c => 3}, -nest => [d => 4, e => 5]],