head 1.15; access; symbols release_4_2:1.15 aix_ok:1.15 Version_2_1:1.11 C_Demo_1:1.7 Retrieve_x_qual:1.5 Retrieve_x_all:1.4 Retrieve_x_1:1.3; locks; strict; comment @ * @; 1.15 date 92.11.23.22.43.19; author joey; state Exp; branches; next 1.14; 1.14 date 92.03.31.23.15.08; author mer; state Exp; branches; next 1.13; 1.13 date 91.11.17.20.36.34; author mer; state Exp; branches; next 1.12; 1.12 date 91.11.02.21.44.26; author hong; state Exp; branches; next 1.11; 1.11 date 90.09.25.16.39.14; author kemnitz; state Exp; branches; next 1.10; 1.10 date 90.05.30.18.57.05; author cimarron; state Exp; branches; next 1.9; 1.9 date 89.10.05.15.04.33; author cimarron; state Exp; branches; next 1.8; 1.8 date 89.09.29.14.54.55; author hong; state Exp; branches; next 1.7; 1.7 date 89.09.05.17.19.32; author mao; state C_Demo_1; branches; next 1.6; 1.6 date 89.08.23.16.01.59; author ong; state Exp; branches; next 1.5; 1.5 date 89.08.04.14.31.29; author goh; state Exp; branches; next 1.4; 1.4 date 89.08.04.13.30.08; author goh; state Exp; branches; next 1.3; 1.3 date 89.08.01.14.33.49; author goh; state Exp; branches; next 1.2; 1.2 date 89.07.19.16.50.16; author goh; state Exp; branches; next 1.1; 1.1 date 89.07.06.13.58.19; author goh; state Exp; branches; next ; desc @@ 1.15 log @set pruneable flag to be true by default @ text @ /* * FILE * relnode * * DESCRIPTION * Relation manipulation routines * * EXPORTS * get_rel * rel-member * * $Header: /var/home/hellers/pg/src/planner/util/RCS/relnode.c,v 1.14 1992/03/31 23:15:08 mer Exp $ */ #include "planner/internal.h" #include "planner/relnode.h" #include "nodes/relation.h" #include "planner/plancat.h" /* ---------------- * Rel creator declaration * ---------------- */ extern Rel RMakeRel(); /* * get_rel * * Returns relation entry corresponding to 'relid', creating a new one if * necessary. * */ /* .. add-clause-to-rels, add-join-clause-info-to-rels, add-vars-to-rels * .. find-all-join-paths, find-clause-joins, find-clauseless-joins * .. initialize-targetlist */ Rel get_rel(relid) LispValue relid ; { Rel rel; if (listp(relid)) { rel = rel_member(relid, _join_relation_list_); } else { List relids = lispCons(relid, LispNil); rel = rel_member(relids, _base_relation_list_); if (null(rel)) { rel = RMakeRel(); set_relids(rel,relids); set_indexed(rel,false); set_pages(rel, 0); set_tuples(rel,0); set_width(rel,0); set_targetlist(rel,LispNil); set_pathlist(rel,LispNil); set_unorderedpath(rel,(PathPtr)NULL); set_cheapestpath(rel,(PathPtr)NULL); set_pruneable(rel,true); set_classlist(rel,(List)NULL); set_ordering(rel,LispNil); set_clauseinfo(rel,LispNil); set_joininfo(rel,LispNil); set_innerjoin(rel,LispNil); set_superrels(rel,LispNil); _base_relation_list_ = lispCons((LispValue)rel, _base_relation_list_); if(listp(relid)) { /* If the relation is a materialized relation, assume constants for sizes. */ set_pages(rel,_TEMP_RELATION_PAGES_); set_tuples(rel,_TEMP_RELATION_TUPLES_); } else { /* Otherwise, retrieve relation characteristics from the */ /* system catalogs. */ int reltuples = 0; LispValue relinfo = relation_info((ObjectId)CInteger(relid)); reltuples = CInteger(CADDR(relinfo)); set_indexed(rel, !zerop(nth(0,relinfo))); set_pages(rel,(Count)CInteger(CADR(relinfo))); set_tuples(rel,(Count)reltuples); } } } return(rel); } /* * rel-member * * Determines whether a relation of id 'relid' is contained within a list * 'rels'. * * Returns the corresponding entry in 'rels' if it is there. * */ /* .. find-all-join-paths, get_rel */ Rel rel_member(relid, rels) List relid; List rels; { LispValue temp = LispNil; LispValue temprelid = LispNil; if(consp(relid) && consp(rels)) { foreach(temp,rels) { temprelid = (LispValue)get_relids((Rel)CAR(temp)); if(same(temprelid, relid)) return((Rel)(CAR(temp))); } } return(NULL); } @ 1.14 log @change accessor functions into macros @ text @d13 1 a13 1 * $Header: /users/mer/pg/src/planner/util/RCS/relnode.c,v 1.13 1991/11/17 20:36:34 mer Exp mer $ d63 1 @ 1.13 log @prototyping @ text @d13 1 a13 1 * $Header: /users/mer/postgres/src/planner/util/RCS/relnode.c,v 1.12 1991/11/02 21:44:26 hong Exp mer $ d61 2 a62 2 set_unorderedpath(rel,(Path)NULL); set_cheapestpath(rel,(Path)NULL); d119 1 a119 1 temprelid = (LispValue)get_relids(CAR(temp)); @ 1.12 log @cleaned up bushy tree plan generation code @ text @d13 1 a13 1 * $Header: RCS/relnode.c,v 1.11 90/09/25 16:39:14 kemnitz Exp Locker: hong $ d70 2 a71 1 _base_relation_list_ = lispCons(rel, _base_relation_list_); @ 1.11 log @Updating from revision 1.10 to revision 1.11 @ text @d13 1 a13 1 * $Header: RCS/relnode.c,v 1.11 90/08/14 13:17:46 cimarron Exp $ d41 1 a41 1 get_rel (relid) d44 1 a44 2 Rel rel = rel_member (listp(relid)?relid:lispCons (relid,LispNil), _query_relation_list_); d46 23 a68 23 if /*when */ ( null (rel)) { /* XXX - can remove the following code when MakeRel() works */ rel = RMakeRel(); #ifdef _xprs_ set_relids (rel,listp(relid)?relid:lispCons (relid,LispNil)); #else /* _xprs_ */ set_relids (rel,lispCons (relid,LispNil)); #endif /* _xprs_ */ set_indexed (rel,false); set_pages (rel, 0); set_tuples (rel,0); set_width (rel,0); set_targetlist (rel,LispNil); set_pathlist (rel,LispNil); set_unorderedpath (rel,(Path)NULL); set_cheapestpath (rel,(Path)NULL); set_classlist (rel,(List)NULL); set_ordering (rel,LispNil); set_clauseinfo (rel,LispNil); set_joininfo (rel,LispNil); set_innerjoin (rel,LispNil); set_superrels (rel,LispNil); d70 1 a70 1 _query_relation_list_ = lispCons (rel,_query_relation_list_); d72 5 a76 5 if(listp (relid)) { /* If the relation is a materialized relation, assume constants for sizes. */ set_pages (rel,_TEMP_RELATION_PAGES_); set_tuples (rel,_TEMP_RELATION_TUPLES_); d78 3 a80 3 } else { /* Otherwise, retrieve relation characteristics from the */ /* system catalogs. */ d82 2 a83 2 int reltuples = 0; LispValue relinfo = relation_info((ObjectId)CInteger(relid)); d85 7 a91 6 reltuples = CInteger(CADDR(relinfo)); set_indexed (rel, !zerop (nth (0,relinfo))); set_pages (rel,(Count)CInteger(CADR(relinfo))); set_tuples (rel,(Count)reltuples); } } d109 2 a110 2 rel_member (relid,rels) LispValue relid; /* should be an ObjectId */ a112 1 Rel retval = (Rel)NULL; a114 3 LispValue relid_list = LispNil; LispValue temp2 = LispNil; LispValue t_list = LispNil; d116 4 a119 12 /* foreach (temp2,rels) { * t_list = nappend1(t_list,get_relids(CAR(temp2))); * } */ if ( consp (relid) && consp (rels)) { foreach (temp,rels) { temprelid = (LispValue)get_relids(CAR(temp)); /* XXX assumes it * is a list with * only 1 relid */ if (same(temprelid, relid)) d121 3 a123 3 } } return(retval); a124 1 @ 1.10 log @CreateNode(Foo) --> RMakeFoo() change @ text @d13 1 a13 1 * $Header: RCS/relnode.c,v 1.9 89/10/05 15:04:33 cimarron Exp $ d18 1 a18 1 #include "relation.h" @ 1.9 log @added $Header$ @ text @d13 1 a13 1 * $Header$ d21 5 a25 2 extern void PrintRel(); extern bool EqualRel(); d49 1 a49 3 rel = CreateNode(Rel); rel->printFunc = PrintRel; rel->equalFunc = EqualRel; @ 1.8 log @added in stuffs for bushy trees @ text @d12 2 @ 1.7 log @Working version of C-only demo @ text @d39 1 a39 1 Rel rel = rel_member (lispCons(relid,LispNil), d48 3 d52 1 d66 1 @ 1.6 log @planner supports all but rules and mergesort @ text @@ 1.5 log @reorganised header files @ text @d102 1 a102 1 LispValue relid; d105 24 a128 6 Rel retval; LispValue temp = LispNil; LispValue temprelid = LispNil; LispValue relid_list = LispNil; LispValue temp2 = LispNil; LispValue t_list = LispNil; a129 19 foreach (temp2,rels) { t_list = nappend1(t_list,get_relids(CAR(temp2))); } if ( consp (relid) && consp (rels)) { foreach (temp,rels) { temprelid = (LispValue)get_relids(CAR(temp)); /* XXX assumes it * is a list with * only 1 relid */ if (equal(temprelid, relid)) /* XXX used to be "same" function */ return((Rel)(CAR(temp))); } } else { retval = (Rel)NULL; } return(retval); } @ 1.4 log @checkin for retrieve (x.all) @ text @d14 2 a15 2 #include "internal.h" #include "relnode.h" d17 1 a17 1 #include "plancat.h" @ 1.3 log @retrieve (x=1) checkin @ text @d20 1 d43 1 d46 2 d49 13 d74 8 a81 5 LispValue relinfo = relation_info((ObjectId)CInteger(relid)); set_indexed (rel, !zerop (nth (0,relinfo))); set_pages (rel,nth (1,relinfo)); set_tuples (rel,nth (2,relinfo)); d106 10 d117 8 a124 1 retval = (Rel)Contents(find (relid,rels,"get_relids","same")); d127 1 a127 1 retval = (Rel)NULL; d130 1 a130 1 } @ 1.2 log @phase 2/3 of checkin @ text @d17 1 d19 2 a20 1 extern List relation_info(); /* XXX - should become #include "cfi.h" */ d36 1 a36 1 OID relid ; d38 3 a40 1 Rel rel = rel_member (list (relid),_query_relation_list_); d43 5 a47 2 set_relids (rel,list (relid)); _query_relation_list_ = cons (rel,_query_relation_list_); d53 2 a54 2 } else { d58 2 a59 2 LispValue relinfo = relation_info (relid); set_indexed (rel,not (zerop (nth (0,relinfo)))); d82 1 a82 1 OID relid; @ 1.1 log @Initial revision @ text @d16 1 d18 1 d31 2 a32 1 LispValue d34 1 a34 1 LispValue relid ; d36 22 a57 22 LispValue rel = rel_member (list (relid),_query_relation_list_); if /*when */ ( null (rel)) { rel = create_node ("Rel"); set_relids (rel,list (relid)); _query_relation_list_ = cons (rel,_query_relation_list_); if(listp (relid)) { /* If the relation is a materialized relation, assume constants for sizes. */ set_pages (rel,_TEMP_RELATION_PAGES_); set_tuples (rel,_TEMP_RELATION_TUPLES_); } else { /* Otherwise, retrieve relation characteristics from the */ /* system catalogs. */ LispValue relinfo = relation_info (relid); set_indexed (rel,not (zerop (nth (0,relinfo)))); set_pages (rel,nth (1,relinfo)); set_tuples (rel,nth (2,relinfo)); } } return(rel); d72 2 a73 1 LispValue d75 2 a76 1 LispValue relid,rels ; d78 1 a78 1 LispValue retval; d80 1 a80 1 retval = find (relid,rels,"get_relids","same"); d83 1 a83 1 retval = LispNil; @