[interchange-cvs] interchange - racke modified lib/Vend/Table/Shadow.pm

interchange-core@icdevgroup.org interchange-core@icdevgroup.org
Mon Apr 14 19:51:00 2003


User:      racke
Date:      2003-04-14 23:50:51 GMT
Modified:  lib/Vend/Table Shadow.pm
Log:
try to handle "select * ..." queries

Revision  Changes    Path
1.33      +14 -6     interchange/lib/Vend/Table/Shadow.pm


rev 1.33, prev_rev 1.32
Index: Shadow.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Table/Shadow.pm,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- Shadow.pm	10 Apr 2003 00:52:54 -0000	1.32
+++ Shadow.pm	14 Apr 2003 23:50:51 -0000	1.33
@@ -1,6 +1,6 @@
 # Vend::Table::Shadow - Access a virtual "Shadow" table
 #
-# $Id: Shadow.pm,v 1.32 2003/04/10 00:52:54 racke Exp $
+# $Id: Shadow.pm,v 1.33 2003/04/14 23:50:51 racke Exp $
 #
 # Copyright (C) 2002-2003 Stefan Hornburg (Racke) <racke@linuxia.de>
 #
@@ -20,7 +20,7 @@
 # MA  02111-1307  USA.
 
 package Vend::Table::Shadow;
-$VERSION = substr(q$Revision: 1.32 $, 10);
+$VERSION = substr(q$Revision: 1.33 $, 10);
 
 # TODO
 #
@@ -291,15 +291,23 @@
 			return $db->query($opt, $text, @arg);
 		} else {
 			# check if one of the queried fields is shadowed
-			my (@map_matches, @map_entries);
-			unless (@map_matches = $s->_map_entries($qref->{columns}, \@map_entries)) {
+			my (@map_matches, @map_entries, $colref);
+
+			# handle "select * ..." queries
+			$colref = $qref->{columns};
+			if (@$colref == 1 && $colref->[0] eq '*') {
+				$colref = [$s->columns()];
+			}
+
+			unless (@map_matches = $s->_map_entries($colref, \@map_entries)) {
 				return $s->[$OBJ]->query($opt, $text, @arg);				
 			}
+			
 			# scan columns for key field
 			my $keyname = $s->[$OBJ]->config('KEY');
 			my $keypos;
-			for (my $i = 0; $i < @{$qref->{columns}}; $i++) {
-				if ($keyname eq $qref->{columns}->[$i]) {
+			for (my $i = 0; $i < @$colref; $i++) {
+				if ($keyname eq $colref->[$i]) {
 					$keypos = $i;
 					last;
 				}