|
|
1.1 root 1: # include <ingres.h>
2: # include <symbol.h>
3: # include <aux.h>
4: # include <tree.h>
5: # include "globs.h"
6: # include <sccs.h>
7: # include <errors.h>
8:
9: SCCSID(@(#)ret_unique.c 8.2 2/8/85)
10:
11:
12:
13: /*
14: ** create a result relation for a ret_unique
15: */
16:
17: mk_unique(root)
18: QTREE *root;
19: {
20: register int i, domcnt;
21: register QTREE *r;
22:
23: r = root;
24:
25: /* verify that target list is within range */
26: domcnt = r->left->sym.type != TREE ? r->left->sym.value.sym_resdom.resno : 0;
27: if (findwid(r) > MAXTUP || domcnt > MAXDOM)
28: derror(RETUTOBIG);
29: i = MAXRANGE - 1;
30: De.de_rangev[i].relnum = mak_t_rel(r, "u", -1);
31: De.de_resultvar = i;
32:
33: /* don't count retrieve into portion as a user query */
34: r->sym.value.sym_root.rootuser = 0;
35: }
36: /*
37: ** Retrieve all domains of the variable "var".
38: ** This routine is used for ret_unique to retrieve
39: ** the result relation. First duplicates are removed
40: ** then the original tree is converted to be a
41: ** retrieve of all domains of "var", and then
42: ** ovqp is called to retrieve the relation.
43: */
44:
45: pr_unique(root1, var1)
46: QTREE *root1;
47: int var1;
48: {
49: register QTREE *root, *r;
50: register int var;
51: extern QTREE *makavar();
52: extern char *rangename();
53:
54: root = root1;
55: var = var1;
56:
57: /* remove duplicates from the unopened relation */
58: removedups(var);
59:
60: /* remove the qual from the tree */
61: root->right = De.de_qle;
62:
63: /* make all resdoms refer to the result relation */
64: for (r = root->left; r->sym.type != TREE; r = r->left)
65: r->right = makavar(r, var, r->sym.value.sym_resdom.resno);
66:
67: /* count as a user query */
68: root->sym.value.sym_root.rootuser = TRUE;
69:
70: /* run the retrieve */
71: De.de_sourcevar = var;
72: De.de_newq = De.de_newr = TRUE;
73: if ( root->sym.value.sym_root.lvarc == 0 )
74: root->sym.value.sym_root.lvarc = 1;
75: call_ovqp(root, mdRETR, NORESULT);
76: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.