[interchange-cvs] interchange - heins modified code/SystemTag/tree.coretag

interchange-core@icdevgroup.org interchange-core@icdevgroup.org
Fri Mar 28 14:40:01 2003


User:      heins
Date:      2003-03-28 19:39:33 GMT
Modified:  code/SystemTag tree.coretag
Log:
* Allow multiple start points for a tree query.

	[tree
		start="10 11"
		multiple-start=1
		table=tree
		master=parent_fld
		subordinate=child_fld
	]

  This allows more than one unique top-level entry to start a tree.

  Generates this query:

     SELECT * FROM tree WHERE parent_fld = '10' OR parent_fld = '11'

Revision  Changes    Path
1.5       +20 -2     interchange/code/SystemTag/tree.coretag


rev 1.5, prev_rev 1.4
Index: tree.coretag
===================================================================
RCS file: /var/cvs/interchange/code/SystemTag/tree.coretag,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- tree.coretag	8 Dec 2002 06:15:55 -0000	1.4
+++ tree.coretag	28 Mar 2003 19:39:33 -0000	1.5
@@ -2,6 +2,7 @@
 UserTag tree                addAttr
 UserTag tree                attrAlias    sub subordinate
 UserTag tree                hasEndTag
+UserTag tree                Version   $Revision: 1.5 $
 UserTag tree                Routine <<EOR
 sub {
 	my($table, $parent, $sub, $start_item, $opt, $text) = @_;
@@ -15,7 +16,23 @@
 	$db->column_exists($sub)
 		or return error_opt($opt, "Subordinate column %s doesn't exist", $sub);
 
-	my $qkey = $db->quote($start_item, $parent);
+	my $basewhere;
+
+	WHEREBASE: {
+		my @keys;
+		my @things;
+		if($opt->{multiple_start}) {
+			@keys = split /[\0,\s]+/, $start_item;
+		}
+		else {
+			@keys = $start_item;
+		}
+
+		for(@keys) {
+			push @things, "$parent = " . $db->quote($_, $parent);
+		}
+		$basewhere = join " OR ", @things;
+	}
 
 	my @outline = (1);
 	if(defined $opt->{outline}) {
@@ -54,7 +71,8 @@
 		$where .= " AND ($opt->{where})";
 	}
 
-	my $qb = "SELECT * FROM $table WHERE $parent = $qkey$where$sort";
+	my $qb = "SELECT * FROM $table WHERE $basewhere$where$sort";
+#::logDebug("tree tag initial query=$qb");
 
 	my $ary = $db->query( {
 							hashref => 1,