Search in sources :

Example 86 with Constant

use of org.teiid.query.sql.symbol.Constant in project teiid by teiid.

the class TestRuleChooseDependent method testCardinalityWithKeyComplexCrit.

/**
 * Tests that join side with larger cardinality will still have a lower
 * cost computed because it has a criteria including a primary key
 */
@Test
public void testCardinalityWithKeyComplexCrit() throws Exception {
    // override default metadata
    this.metadata = RealMetadataFactory.example4();
    GroupSymbol group1 = getPhysicalGroup(1, 2);
    ElementSymbol g1e2 = getElementSymbol(1, 2, 2);
    GroupSymbol group2 = getPhysicalGroup(3, 3);
    ElementSymbol g2e1 = getElementSymbol(3, 3, 1);
    ElementSymbol g2e2 = getElementSymbol(3, 3, 2);
    // Join criteria
    ArrayList crits = new ArrayList(1);
    crits.add(new CompareCriteria(g1e2, CompareCriteria.EQ, g2e2));
    Criteria atomicCrit1 = null;
    Criteria crit1 = new CompareCriteria(g2e1, CompareCriteria.EQ, new Constant(new Integer(5)));
    Criteria crit2 = new CompareCriteria(g2e1, CompareCriteria.EQ, new Constant(new Integer(7)));
    CompoundCriteria atomicCrit2 = new CompoundCriteria(CompoundCriteria.AND, crit1, crit2);
    // $NON-NLS-1$
    Criteria crit3 = new MatchCriteria(g2e1, new Constant(new String("ab")));
    atomicCrit2 = new CompoundCriteria(CompoundCriteria.OR, atomicCrit2, crit3);
    int expected = LEFT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group1, atomicCrit1, group2, atomicCrit2, crits, expected);
    expected = RIGHT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group2, atomicCrit2, group1, atomicCrit1, crits, expected);
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Constant(org.teiid.query.sql.symbol.Constant) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 87 with Constant

use of org.teiid.query.sql.symbol.Constant in project teiid by teiid.

the class TestRuleChooseDependent method testCardinalityWithKeyNotCrit.

/**
 * Tests NotCriteria in the atomic criteria
 */
@Test
public void testCardinalityWithKeyNotCrit() throws Exception {
    // override default metadata
    this.metadata = RealMetadataFactory.example4();
    GroupSymbol group1 = getPhysicalGroup(1, 2);
    ElementSymbol g1e2 = getElementSymbol(1, 2, 2);
    GroupSymbol group2 = getPhysicalGroup(3, 3);
    ElementSymbol g2e1 = getElementSymbol(3, 3, 1);
    ElementSymbol g2e2 = getElementSymbol(3, 3, 2);
    // Join criteria
    ArrayList crits = new ArrayList(1);
    CompareCriteria crit2 = new CompareCriteria(g1e2, CompareCriteria.EQ, g2e2);
    crits.add(crit2);
    Criteria atomicCrit1 = null;
    Criteria atomicCrit2 = new CompareCriteria(g2e1, CompareCriteria.EQ, new Constant(new Integer(5)));
    atomicCrit2 = new NotCriteria(atomicCrit2);
    int expected = RIGHT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group1, atomicCrit1, group2, atomicCrit2, crits, expected);
    expected = LEFT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group2, atomicCrit2, group1, atomicCrit1, crits, expected);
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Constant(org.teiid.query.sql.symbol.Constant) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 88 with Constant

use of org.teiid.query.sql.symbol.Constant in project teiid by teiid.

the class TestRuleChooseDependent method testCardinalityWithNonKeyCrit.

/**
 * Tests that join side with larger cardinality and non-key criteria
 * will be made dependent
 */
@Test
public void testCardinalityWithNonKeyCrit() throws Exception {
    // override default metadata
    this.metadata = RealMetadataFactory.example4();
    GroupSymbol group1 = getPhysicalGroup(1, 2);
    ElementSymbol g1e1 = getElementSymbol(1, 2, 1);
    // ElementSymbol g1e2 = getElementSymbol(1,2,2);
    GroupSymbol group2 = getPhysicalGroup(3, 3);
    ElementSymbol g2e1 = getElementSymbol(3, 3, 1);
    ElementSymbol g2e2 = getElementSymbol(3, 3, 2);
    // Join criteria
    ArrayList crits = new ArrayList(1);
    CompareCriteria crit2 = new CompareCriteria(g1e1, CompareCriteria.EQ, g2e1);
    crits.add(crit2);
    Criteria atomicCrit1 = null;
    Criteria atomicCrit2 = new CompareCriteria(g2e2, CompareCriteria.EQ, new Constant(new Integer(5)));
    int expected = RIGHT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group1, atomicCrit1, group2, atomicCrit2, crits, expected);
    expected = LEFT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group2, atomicCrit2, group1, atomicCrit1, crits, expected);
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Constant(org.teiid.query.sql.symbol.Constant) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 89 with Constant

use of org.teiid.query.sql.symbol.Constant in project teiid by teiid.

the class TestRuleChooseDependent method testCardinalityWithKeyComplexCrit3.

@Test
public void testCardinalityWithKeyComplexCrit3() throws Exception {
    // override default metadata
    this.metadata = RealMetadataFactory.example4();
    GroupSymbol group1 = getPhysicalGroup(1, 2);
    ElementSymbol g1e2 = getElementSymbol(1, 2, 2);
    GroupSymbol group2 = getPhysicalGroup(3, 3);
    ElementSymbol g2e1 = getElementSymbol(3, 3, 1);
    ElementSymbol g2e2 = getElementSymbol(3, 3, 2);
    // Join criteria
    ArrayList crits = new ArrayList(1);
    crits.add(new CompareCriteria(g1e2, CompareCriteria.EQ, g2e2));
    Criteria atomicCrit1 = null;
    Criteria crit1 = new CompareCriteria(g2e1, CompareCriteria.GE, new Constant(new Integer(5)));
    Criteria crit2 = new CompareCriteria(g2e1, CompareCriteria.NE, new Constant(new Integer(7)));
    Criteria atomicCrit2 = new CompoundCriteria(CompoundCriteria.OR, crit1, crit2);
    atomicCrit2 = new NotCriteria(atomicCrit2);
    Criteria crit3 = new CompareCriteria(g2e1, CompareCriteria.LE, new Constant(new Integer(25)));
    atomicCrit2 = new CompoundCriteria(CompoundCriteria.AND, atomicCrit2, crit3);
    int expected = LEFT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group1, atomicCrit1, group2, atomicCrit2, crits, expected);
    expected = RIGHT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group2, atomicCrit2, group1, atomicCrit1, crits, expected);
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Constant(org.teiid.query.sql.symbol.Constant) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 90 with Constant

use of org.teiid.query.sql.symbol.Constant in project teiid by teiid.

the class TestRuleChooseDependent method testCardinalityWithCriteriaAndJoin.

/**
 * Tests that join side with larger cardinality will still have a lower
 * cost computed because it has a criteria including a primary key
 */
@Test
public void testCardinalityWithCriteriaAndJoin() throws Exception {
    // override default metadata
    this.metadata = RealMetadataFactory.example4();
    // no key
    GroupSymbol group1 = getPhysicalGroup(2, 2);
    GroupSymbol group1a = null;
    // has key
    GroupSymbol group2 = getPhysicalGroup(3, 3);
    // has key
    GroupSymbol group2a = getPhysicalGroup(3, 1);
    ElementSymbol group1e1 = getElementSymbol(2, 2, 1);
    ElementSymbol group2e1 = getElementSymbol(3, 3, 1);
    ElementSymbol group2e2 = getElementSymbol(3, 3, 2);
    ElementSymbol group2ae1 = getElementSymbol(3, 1, 1);
    ElementSymbol group2ae2 = getElementSymbol(3, 1, 2);
    // Outer Join criteria
    CompareCriteria crit = new CompareCriteria(group2e1, CompareCriteria.EQ, group1e1);
    ArrayList crits = new ArrayList(1);
    crits.add(crit);
    // atomic select criteria
    Criteria atomicCrit1 = null;
    Criteria atomicCrit1a = null;
    Criteria atomicCrit2 = new CompareCriteria(group2e1, CompareCriteria.EQ, new Constant(new Integer(5)));
    Criteria atomicCrit2a = new CompareCriteria(group2ae1, CompareCriteria.EQ, new Constant(new Integer(5)));
    // atomic Join criteria 1
    Collection atomicJoinCrits1 = null;
    // atomic Join criteria 2
    CompareCriteria atomicJoinCrit2 = new CompareCriteria(group2ae2, CompareCriteria.EQ, group2e2);
    ArrayList atomicJoinCrits2 = new ArrayList(1);
    atomicJoinCrits2.add(atomicJoinCrit2);
    int expected = LEFT_SIDE;
    helpTestChooseSiblingAndMarkDependent(group1, atomicCrit1, group1a, atomicCrit1a, atomicJoinCrits1, group2, atomicCrit2, group2a, atomicCrit2a, atomicJoinCrits2, crits, expected, 1000, 1);
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Constant(org.teiid.query.sql.symbol.Constant) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol) ArrayList(java.util.ArrayList) Collection(java.util.Collection) Test(org.junit.Test)

Aggregations

Constant (org.teiid.query.sql.symbol.Constant)203 ElementSymbol (org.teiid.query.sql.symbol.ElementSymbol)94 Test (org.junit.Test)88 ArrayList (java.util.ArrayList)61 GroupSymbol (org.teiid.query.sql.symbol.GroupSymbol)48 List (java.util.List)38 Expression (org.teiid.query.sql.symbol.Expression)38 Function (org.teiid.query.sql.symbol.Function)31 CompareCriteria (org.teiid.query.sql.lang.CompareCriteria)25 Query (org.teiid.query.sql.lang.Query)22 Select (org.teiid.query.sql.lang.Select)15 Reference (org.teiid.query.sql.symbol.Reference)14 From (org.teiid.query.sql.lang.From)12 HashMap (java.util.HashMap)11 FunctionDescriptor (org.teiid.query.function.FunctionDescriptor)11 Criteria (org.teiid.query.sql.lang.Criteria)11 SetQuery (org.teiid.query.sql.lang.SetQuery)11 LinkedList (java.util.LinkedList)10 Limit (org.teiid.query.sql.lang.Limit)10 StoredProcedure (org.teiid.query.sql.lang.StoredProcedure)9