OSDN Git Service

Change resjunk to a boolean.
authorBruce Momjian <bruce@momjian.us>
Mon, 17 May 1999 17:03:51 +0000 (17:03 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 17 May 1999 17:03:51 +0000 (17:03 +0000)
17 files changed:
src/backend/executor/execJunk.c
src/backend/nodes/makefuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/readfuncs.c
src/backend/optimizer/plan/planner.c
src/backend/optimizer/prep/preptlist.c
src/backend/optimizer/util/tlist.c
src/backend/parser/analyze.c
src/backend/parser/parse_clause.c
src/backend/parser/parse_func.c
src/backend/parser/parse_relation.c
src/backend/parser/parse_target.c
src/backend/rewrite/rewriteHandler.c
src/include/nodes/makefuncs.h
src/include/nodes/primnodes.h
src/include/parser/parse_target.h
src/man/explain.l

index f2e7ad7..ba3741d 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/executor/execJunk.c,v 1.16 1999/02/13 23:15:16 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/executor/execJunk.c,v 1.17 1999/05/17 17:03:10 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -36,7 +36,7 @@
  *
  * The general idea is the following: A target list consists of a list of
  * Resdom nodes & expression pairs. Each Resdom node has an attribute
- * called 'resjunk'. If the value of this attribute is 1 then the
+ * called 'resjunk'. If the value of this attribute is true then the
  * corresponding attribute is a "junk" attribute.
  *
  * When we initialize a plan  we call 'ExecInitJunkFilter' to create
@@ -73,7 +73,7 @@ ExecInitJunkFilter(List *targetList)
        TargetEntry *tle;
        Resdom     *resdom,
                           *cleanResdom;
-       int                     resjunk;
+       bool            resjunk;
        AttrNumber      cleanResno;
        AttrNumber *cleanMap;
        Size            size;
@@ -81,7 +81,7 @@ ExecInitJunkFilter(List *targetList)
 
        /* ---------------------
         * First find the "clean" target list, i.e. all the entries
-        * in the original target list which have a zero 'resjunk'
+        * in the original target list which have a false 'resjunk'
         * NOTE: make copy of the Resdom nodes, because we have
         * to change the 'resno's...
         * ---------------------
@@ -98,7 +98,7 @@ ExecInitJunkFilter(List *targetList)
                        resdom = rtarget->resdom;
                        expr = rtarget->expr;
                        resjunk = resdom->resjunk;
-                       if (resjunk == 0)
+                       if (!resjunk)
                        {
 
                                /*
@@ -194,7 +194,7 @@ ExecInitJunkFilter(List *targetList)
                                resdom = tle->resdom;
                                expr = tle->expr;
                                resjunk = resdom->resjunk;
-                               if (resjunk == 0)
+                               if (!resjunk)
                                {
                                        cleanMap[cleanResno - 1] = resdom->resno;
                                        cleanResno++;
@@ -271,7 +271,7 @@ ExecGetJunkAttribute(JunkFilter *junkfilter,
        Resdom     *resdom;
        AttrNumber      resno;
        char       *resname;
-       int                     resjunk;
+       bool            resjunk;
        TupleDesc       tupType;
        HeapTuple       tuple;
 
@@ -290,7 +290,7 @@ ExecGetJunkAttribute(JunkFilter *junkfilter,
                resdom = tle->resdom;
                resname = resdom->resname;
                resjunk = resdom->resjunk;
-               if (resjunk != 0 && (strcmp(resname, attrName) == 0))
+               if (resjunk && (strcmp(resname, attrName) == 0))
                {
                        /* We found it ! */
                        resno = resdom->resno;
index fdf689a..3d0e593 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.14 1999/05/12 15:01:34 wieck Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.15 1999/05/17 17:03:12 momjian Exp $
  *
  * NOTES
  *       Creator functions in POSTGRES 4.2 are generated automatically. Most of
@@ -97,7 +97,7 @@ makeResdom(AttrNumber resno,
                   char *resname,
                   Index reskey,
                   Oid reskeyop,
-                  int resjunk)
+                  bool resjunk)
 {
        Resdom     *resdom = makeNode(Resdom);
 
index c0df063..bbab1a4 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- *  $Id: outfuncs.c,v 1.81 1999/05/12 15:01:34 wieck Exp $
+ *  $Id: outfuncs.c,v 1.82 1999/05/17 17:03:13 momjian Exp $
  *
  * NOTES
  *       Every (plan) node in POSTGRES has an associated "out" routine which
@@ -565,9 +565,9 @@ _outResdom(StringInfo str, Resdom *node)
                        node->reskey,
                        node->reskeyop);
 
-       appendStringInfo(str, " :resgroupref %d :resjunk %d",
+       appendStringInfo(str, " :resgroupref %d :resjunk %",
                        node->resgroupref,
-                       node->resjunk);
+                       node->resjunk ? "true" : "false");
 }
 
 static void
index 0aa0b27..ab49186 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.61 1999/05/12 15:01:35 wieck Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.62 1999/05/17 17:03:14 momjian Exp $
  *
  * NOTES
  *       Most of the read functions for plan nodes are tested. (In fact, they
@@ -751,7 +751,7 @@ _readResdom()
 
        token = lsptok(NULL, &length);          /* eat :resjunk */
        token = lsptok(NULL, &length);          /* get resjunk */
-       local_node->resjunk = atoi(token);
+       local_node->resjunk = (token[0] == 't') ? true : false;
 
        return local_node;
 }
index d68a44e..8697702 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.52 1999/05/13 07:28:32 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.53 1999/05/17 17:03:15 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -168,7 +168,7 @@ union_planner(Query *parse)
                                                                resname,
                                                                0,
                                                                0,
-                                                               1);
+                                                               true);
 
                        var = makeVar(rowmark->rti, -1, TIDOID, 
                                                  -1, 0, rowmark->rti, -1);
index 5b70b36..92ab4db 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.19 1999/05/12 15:01:41 wieck Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.20 1999/05/17 17:03:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -106,7 +106,7 @@ preprocess_targetlist(List *tlist,
                                                        "ctid",
                                                        0,
                                                        0,
-                                                       1);
+                                                       true);
 
                var = makeVar(result_relation, -1, TIDOID, -1, 0, result_relation, -1);
 
@@ -211,7 +211,7 @@ replace_matching_resname(List *new_tlist, List *old_tlist)
         * locks.
         *
         * So, copy all these entries to the end of the target list and set their
-        * 'resjunk' value to 1 to show that these are special attributes and
+        * 'resjunk' value to true to show that these are special attributes and
         * have to be treated specially by the executor!
         */
        foreach(temp, old_tlist)
@@ -225,7 +225,7 @@ replace_matching_resname(List *new_tlist, List *old_tlist)
                {
                        newresno = (Resdom *) copyObject((Node *) old_tle->resdom);
                        newresno->resno = length(t_list) + 1;
-                       newresno->resjunk = 1;
+                       newresno->resjunk = true;
                        new_tl = makeTargetEntry(newresno, old_tle->expr);
                        t_list = lappend(t_list, new_tl);
                }
@@ -267,7 +267,7 @@ replace_matching_resname(List *new_tlist, List *old_tlist)
                        {
                                newresno = (Resdom *) copyObject((Node *) old_tle->resdom);
                                newresno->resno = length(t_list) + 1;
-                               newresno->resjunk = 1;
+                               newresno->resjunk = true;
                                new_tl = makeTargetEntry(newresno, old_tle->expr);
                                t_list = lappend(t_list, new_tl);
                        }
@@ -338,7 +338,7 @@ new_relation_targetlist(Oid relid, Index rt_index, NodeTag node_type)
                                                                                                           attname,
                                                                                                           0,
                                                                                                           (Oid) 0,
-                                                                                                          0),
+                                                                                                          false),
                                                                                        (Node *) temp2);
                                        t_list = lappend(t_list, temp3);
                                        break;
@@ -358,7 +358,7 @@ new_relation_targetlist(Oid relid, Index rt_index, NodeTag node_type)
                                                                                                                   attname,
                                                                                                                   0,
                                                                                                                   (Oid) 0,
-                                                                                                                  0),
+                                                                                                                  false),
                                                                                                (Node *) temp_var);
                                        t_list = lappend(t_list, temp_list);
                                        break;
index a914930..e0620c2 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.30 1999/05/12 15:01:44 wieck Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.31 1999/05/17 17:03:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -138,7 +138,7 @@ create_tl_element(Var *var, int resdomno)
                                                                          NULL,
                                                                          (Index) 0,
                                                                          (Oid) 0,
-                                                                         0),
+                                                                         false),
                                                   (Node *) var);
 }
 
@@ -379,7 +379,7 @@ flatten_tlist(List *tlist)
                                                   NULL,
                                                   (Index) 0,
                                                   (Oid) 0,
-                                                  0);
+                                                  false);
                        last_resdomno++;
                        new_tlist = lappend(new_tlist, makeTargetEntry(r, (Node *) var));
                }
@@ -573,7 +573,7 @@ AddGroupAttrToTlist(List *tlist, List *grpCl)
                                                   NULL,
                                                   (Index) 0,
                                                   (Oid) 0,
-                                                  0);
+                                                  false);
                        last_resdomno++;
                        tlist = lappend(tlist, makeTargetEntry(r, (Node *) var));
                }
index 7bc28cb..23158f3 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- *  $Id: analyze.c,v 1.105 1999/05/17 04:50:07 tgl Exp $
+ *  $Id: analyze.c,v 1.106 1999/05/17 17:03:27 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -338,7 +338,7 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt)
                                                                   att[defval[ndef].adnum - 1]->atttypid,
                                                                  att[defval[ndef].adnum - 1]->atttypmod,
                           pstrdup(nameout(&(att[defval[ndef].adnum - 1]->attname))),
-                                                                                       0, 0, 0),
+                                                                                       0, 0, false),
                                                          (Node *) stringToNode(defval[ndef].adbin));
                        qry->targetList = lappend(qry->targetList, te);
                }
index 638b3e7..507ebc2 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.32 1999/05/13 14:59:05 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.33 1999/05/17 17:03:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -495,14 +495,14 @@ findTargetlistEntry(ParseState *pstate, Node *node, List *tlist, int clause)
                        case T_Attr:
                                target_result = MakeTargetEntryIdent(pstate, node,
                                                                                 &((Attr *) node)->relname, NULL,
-                                                                                ((Attr *) node)->relname, TRUE);
+                                                                                ((Attr *) node)->relname, true);
                                lappend(tlist, target_result);
                                break;
 
                        case T_Ident:
                                target_result = MakeTargetEntryIdent(pstate, node,
                                                                                   &((Ident *) node)->name, NULL,
-                                                                                  ((Ident *) node)->name, TRUE);
+                                                                                  ((Ident *) node)->name, true);
                                lappend(tlist, target_result);
                                break;
 
@@ -517,7 +517,7 @@ findTargetlistEntry(ParseState *pstate, Node *node, List *tlist, int clause)
 
                        case T_FuncCall:
                        case T_A_Expr:
-                               target_result = MakeTargetEntryExpr(pstate, "resjunk", expr, FALSE, TRUE);
+                               target_result = MakeTargetEntryExpr(pstate, "resjunk", expr, false, true);
                                lappend(tlist, target_result);
                                break;
 
index dcbd02a..a825f5a 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.43 1999/05/10 00:45:27 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.44 1999/05/17 17:03:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1352,7 +1352,7 @@ setup_tlist(char *attname, Oid relid)
                                                 get_attname(relid, attno),
                                                 0,
                                                 (Oid) 0,
-                                                0);
+                                                false);
        varnode = makeVar(-1, attno, typeid, type_mod, 0, -1, attno);
 
        tle = makeTargetEntry(resnode, (Node *) varnode);
@@ -1377,7 +1377,7 @@ setup_base_tlist(Oid typeid)
                                                 "<noname>",
                                                 0,
                                                 (Oid) 0,
-                                                0);
+                                                false);
        varnode = makeVar(-1, 1, typeid, -1, 0, -1, 1);
        tle = makeTargetEntry(resnode, (Node *) varnode);
 
index 50abbc0..88eec40 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.19 1999/02/23 07:53:01 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.20 1999/05/17 17:03:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -283,7 +283,7 @@ expandAll(ParseState *pstate, char *relname, char *refname, int *this_resno)
                                                                attrname,
                                                                (Index) 0,
                                                                (Oid) 0,
-                                                               0);
+                                                               false);
                te->expr = (Node *) varnode;
                if (te_head == NIL)
                        te_head = te_tail = lcons(te, NIL);
index 791dac7..0a7912d 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.36 1999/05/17 04:19:33 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.37 1999/05/17 17:03:35 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -60,7 +60,7 @@ MakeTargetEntryIdent(ParseState *pstate,
                                         char **resname,
                                         char *refname,
                                         char *colname,
-                                        int16 resjunk)
+                                        bool resjunk)
 {
        Node       *expr = NULL;
        Oid                     attrtype_target;
@@ -123,7 +123,7 @@ MakeTargetEntryIdent(ParseState *pstate,
                        {
                                expr = coerce_type(pstate, node, attrtype_id, attrtype_target);
                                expr = transformExpr(pstate, expr, EXPR_COLUMN_FIRST);
-                               tent = MakeTargetEntryExpr(pstate, *resname, expr, FALSE, FALSE);
+                               tent = MakeTargetEntryExpr(pstate, *resname, expr, false, false);
                                expr = tent->expr;
                        }
                        else
@@ -185,7 +185,7 @@ MakeTargetEntryExpr(ParseState *pstate,
                                        char *colname,
                                        Node *expr,
                                        List *arrayRef,
-                                       int16 resjunk)
+                                       bool resjunk)
 {
        Oid                     type_id,
                                attrtype;
@@ -345,7 +345,7 @@ MakeTargetEntryCase(ParseState *pstate,
                                                 res->name,
                                                 (Index) 0,
                                                 (Oid) 0,
-                                                0);
+                                                false);
 
        tent = makeNode(TargetEntry);
        tent->resdom = resnode;
@@ -426,7 +426,7 @@ MakeTargetEntryComplex(ParseState *pstate,
                constval->val.str = save_str;
                return MakeTargetEntryExpr(pstate, res->name,
                                                                   (Node *) make_const(constval),
-                                                                  NULL, FALSE);
+                                                                  NULL, false);
                pfree(save_str);
        }
        else
@@ -458,7 +458,7 @@ MakeTargetEntryComplex(ParseState *pstate,
                }
                res->name = colname;
                return MakeTargetEntryExpr(pstate, res->name, expr,
-                                                                  res->indirection, FALSE);
+                                                                  res->indirection, false);
        }
 }
 
@@ -531,7 +531,7 @@ MakeTargetEntryAttr(ParseState *pstate,
                                                 resname,
                                                 (Index) 0,
                                                 (Oid) 0,
-                                                0);
+                                                false);
        tent = makeNode(TargetEntry);
        tent->resdom = resnode;
        tent->expr = result;
@@ -560,7 +560,8 @@ transformTargetList(ParseState *pstate, List *targetlist)
                                        char       *identname;
 
                                        identname = ((Ident *) res->val)->name;
-                                       tent = MakeTargetEntryIdent(pstate, (Node *) res->val, &res->name, NULL, identname, FALSE);
+                                       tent = MakeTargetEntryIdent(pstate,
+                                               (Node *) res->val, &res->name, NULL, identname, false);
                                        break;
                                }
                        case T_ParamNo:
index a5300e5..b2b8c05 100644 (file)
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.41 1999/05/13 07:28:41 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.42 1999/05/17 17:03:38 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1063,7 +1063,7 @@ modifyAggrefMakeSublink(Expr *origexp, Query *parsetree)
        resdom->resname = pstrdup("<noname>");
        resdom->reskey  = 0;
        resdom->reskeyop = 0;
-       resdom->resjunk = 0;
+       resdom->resjunk = false;
 
        tle->resdom     = resdom;
        tle->expr       = (Node *)aggref;
index ae60e5f..178afdf 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: makefuncs.h,v 1.16 1999/02/13 23:21:38 momjian Exp $
+ * $Id: makefuncs.h,v 1.17 1999/05/17 17:03:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -39,7 +39,7 @@ extern Resdom *makeResdom(AttrNumber resno,
                                                  char *resname,
                                                  Index reskey,
                                                  Oid reskeyop,
-                                                 int resjunk);
+                                                 bool resjunk);
 
 extern Const *makeConst(Oid consttype,
                                                int constlen,
index 93eafbe..d19673f 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: primnodes.h,v 1.26 1999/05/12 15:02:07 wieck Exp $
+ * $Id: primnodes.h,v 1.27 1999/05/17 17:03:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,9 +31,8 @@
  *             reskey                  - order of key in a sort (for those > 0)
  *             reskeyop                - sort operator Oid
  *             resgroupref             - set to nonzero if referenced from a group by clause
- *             resjunk                 - set to nonzero to eliminate the attribute
- *                                               from final target list  e.g., ctid for replace
- *                                               and delete
+ *             resjunk                 - set to true to eliminate the attribute
+ *                                               from final target list
  *
  * ----------------
  */
@@ -47,7 +46,7 @@ typedef struct Resdom
        Index           reskey;
        Oid                     reskeyop;
        Index           resgroupref;
-       int                     resjunk;
+       bool            resjunk;
 } Resdom;
 
 /* -------------
index 263ed8a..2a70b5d 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parse_target.h,v 1.11 1998/09/01 04:37:39 momjian Exp $
+ * $Id: parse_target.h,v 1.12 1999/05/17 17:03:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,13 +29,13 @@ extern TargetEntry *MakeTargetEntryIdent(ParseState *pstate,
                                         char **resname,
                                         char *refname,
                                         char *colname,
-                                        int16 resjunk);
+                                        bool resjunk);
 extern Node *CoerceTargetExpr(ParseState *pstate, Node *expr,
                                 Oid type_id, Oid attrtype);
 TargetEntry *MakeTargetEntryExpr(ParseState *pstate,
                                        char *colname,
                                        Node *expr,
                                        List *arrayRef,
-                                       int16 resjunk);
+                                       bool resjunk);
 
 #endif  /* PARSE_TARGET_H */
index 04c87da..ae708bb 100644 (file)
@@ -1,6 +1,6 @@
 .\" This is -*-nroff-*-
 .\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/explain.l,v 1.11 1999/04/23 21:23:49 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/explain.l,v 1.12 1999/05/17 17:03:51 momjian Exp $
 .TH EXPLAIN SQL 06/12/97 PostgreSQL PostgreSQL
 .SH NAME
 explain - explains statement execution details
@@ -33,12 +33,12 @@ NOTICE:QUERY PLAN:
 
 {AGG :cost 0 :size 0 :width 0 :state <> :qptargetlist
  ({TLE :resdom {RESDOM :resno 1 :restype 700 :restypmod 4 :resname "sum"
-   :reskey 0 :reskeyop 0 :resjunk 0}
+   :reskey 0 :reskeyop 0 :resjunk false}
   :expr {AGGREG :aggname "sum" :basetype 700 :aggtype 700 :aggno 0
  :target {VAR :varno 1 :varattno 1 :vartype 700 :varnoold 1 :varoattno 1}}})
  :qpqual <> :lefttree {SEQSCAN :cost 0 :size 0 :width 4 :state <>
   :qptargetlist ({TLE :resdom {RESDOM :resno 1 :restype 700 :restypmod 4
-   :resname "null" :reskey 0 :reskeyop 0 :resjunk 0}
+   :resname "null" :reskey 0 :reskeyop 0 :resjunk false}
   :expr {VAR :varno 1 :varattno 1 :vartype 700 :varnoold 1 :varoattno 1}})
  :qpqual <> :lefttree <> :righttree <> :scanrelid 1} :righttree <> :numagg 1 }