KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > dql > plan > table > NaturalFullJoinPlan


1 package com.daffodilwoods.daffodildb.server.sql99.dql.plan.table;
2
3 import com.daffodilwoods.daffodildb.server.serversystem.*;
4 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
5 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.table.*;
6 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.*;
7 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*;
8 import com.daffodilwoods.database.resource.*;
9
10 /**
11  * It represents the plan for Natural Full Outer Join. It is a Full Join Plan
12  * with common columns of both plans. In natural join, condition is implicit
13  * on the common columns.
14  * <p>Title: </p>
15  * <p>Description: </p>
16  * <p>Copyright: Copyright (c) 2003</p>
17  * <p>Company: </p>
18  * @author not attributable
19  * @version 1.0
20  */

21
22 public class NaturalFullJoinPlan extends QualifiedFullPlan {
23
24    /**
25     * Represents the common columns for both plans.
26     */

27
28    private Object JavaDoc[][] commonColumns;
29
30    public NaturalFullJoinPlan(_TablePlan tablePlanLeft0,
31                               _TablePlan tablePlanRight0,
32                               booleanvalueexpression onCondition,
33                               _QualifiedPlan qualifiedLeftPlan,
34                               _ServerSession session, Object JavaDoc[][] commonColumns0) throws DException {
35       super(tablePlanLeft0, tablePlanRight0, onCondition, qualifiedLeftPlan,
36             session);
37       commonColumns = commonColumns0;
38    }
39
40    /**
41     * This method returns the resultset for NaturalFullJoin. The resultset of
42     * Full join is Union of LeftOuterJoin and SpecialRightJoin. SpecialRightJoin
43     * is a resultset which contains only those rows of right resultset, for which
44     * there is no matching row of left side. And for making NaturalFullJoin
45     * resultset, common columns are also used, because condition is implicit on
46     * common columns of both resultsets.
47     * @param session
48     * @return
49     * @throws DException
50     */

51
52    public _Iterator execute(_ServerSession session) throws DException {
53       _Iterator iter1 = tablePlanLeft.execute(session);
54       _Iterator iter2 = tablePlanRight.execute(session);
55       return new NaturalFullJoinUnionIterator(super.qualifiedLeftTablePlan.execute(session), new SpecialRightJoinIterator(iter1, iter2, joinCondition, iter1.getKeyColumnInformations(), iter2.getKeyColumnInformations(), null, session), commonColumns);
56    }
57
58    /**
59     * This method is exactly same as that of execute method, but with a
60     * difference that order is not considered in underlying resultsets.
61     * @param session
62     * @return
63     * @throws DException
64     */

65
66    public _Iterator executeWithoutOrder(_ServerSession session) throws DException {
67       _Iterator iter1 = tablePlanLeft.executeWithoutOrder(session);
68       _Iterator iter2 = tablePlanRight.executeWithoutOrder(session);
69       return new NaturalFullJoinUnionIterator(super.qualifiedLeftTablePlan.executeWithoutOrder(session), new SpecialRightJoinIterator(iter1, iter2, joinCondition, iter1.getKeyColumnInformations(), iter2.getKeyColumnInformations(), null, session), commonColumns);
70    }
71 }
72
Popular Tags