[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,