Search in sources :

Example 16 with TiTableInfo

use of com.pingcap.tikv.meta.TiTableInfo in project tispark by pingcap.

the class IndexMatcherTest method matchAll.

@Test
public void matchAll() {
    TiTableInfo table = createTable();
    TiIndexInfo index = table.getIndices().get(0);
    TiIndexColumn col = index.getIndexColumns().get(0);
    IndexMatcher matcher = IndexMatcher.matcher(col);
    Constant c1 = Constant.create(1, IntegerType.INT);
    Constant c2 = Constant.create(2, IntegerType.INT);
    ColumnRef col1 = ColumnRef.create("c1", table);
    // index col = c1, long
    Expression cond = lessEqual(col1, c1);
    assertTrue(matcher.match(cond));
    cond = greaterEqual(c1, col1);
    assertTrue(matcher.match(cond));
    cond = lessThan(ColumnRef.create("c2", table), ColumnRef.create("c1", table));
    assertFalse(matcher.match(cond));
    cond = lessThan(c1, c1);
    assertFalse(matcher.match(cond));
    cond = and(lessThan(c1, col1), lessThan(col1, c2));
    assertTrue(matcher.match(cond));
    cond = or(lessThan(c1, col1), lessThan(col1, c2));
    assertTrue(matcher.match(cond));
}
Also used : TiIndexColumn(com.pingcap.tikv.meta.TiIndexColumn) IndexMatcher(com.pingcap.tikv.expression.visitor.IndexMatcher) Expression(com.pingcap.tikv.expression.Expression) Constant(com.pingcap.tikv.expression.Constant) TiTableInfo(com.pingcap.tikv.meta.TiTableInfo) ColumnRef(com.pingcap.tikv.expression.ColumnRef) TiIndexInfo(com.pingcap.tikv.meta.TiIndexInfo) Test(org.junit.Test)

Example 17 with TiTableInfo

use of com.pingcap.tikv.meta.TiTableInfo in project tispark by pingcap.

the class PredicateUtilsTest method logicalBinaryExpressionToIndexRangesTest.

@Test
public void logicalBinaryExpressionToIndexRangesTest() {
    TiTableInfo table = createTable();
    TiIndexInfo index = table.getIndices().get(0);
    TypedKey zero = TypedKey.toTypedKey(0, IntegerType.INT);
    TypedKey one = TypedKey.toTypedKey(1, IntegerType.INT);
    TypedKey two = TypedKey.toTypedKey(2, IntegerType.INT);
    ColumnRef col1 = ColumnRef.create("c1", table);
    Expression eq1 = greaterThan(col1, Constant.create(0));
    Expression eq2 = lessThan(col1, Constant.create(2));
    Expression eq3 = lessEqual(col1, Constant.create(1));
    Expression eq4 = greaterThan(col1, Constant.create(2));
    Expression and1 = and(eq1, eq2);
    Expression and2 = and(eq1, eq3);
    Expression and3 = and(eq2, eq3);
    Expression or1 = or(eq1, eq2);
    Expression or2 = or(eq1, eq4);
    Expression or3 = or(eq3, eq4);
    Expression xor1 = xor(eq1, eq2);
    Expression xor2 = xor(eq1, eq3);
    Expression xor3 = xor(eq2, eq3);
    List<Range> ans1 = ImmutableList.of(Range.open(zero, two));
    List<Range> ans2 = ImmutableList.of(Range.openClosed(zero, one));
    List<Range> ans3 = ImmutableList.of(Range.atMost(one));
    List<Range> ans4 = ImmutableList.of(Range.all());
    List<Range> ans5 = ImmutableList.of(Range.greaterThan(zero));
    List<Range> ans6 = ImmutableList.of(Range.atMost(one), Range.greaterThan(two));
    List<Range> ans7 = ImmutableList.of(Range.atMost(zero), Range.atLeast(two));
    List<Range> ans8 = ImmutableList.of(Range.atMost(zero), Range.greaterThan(one));
    List<Range> ans9 = ImmutableList.of(Range.open(one, two));
    Tests<Expression, List<Range>> logicalTests = new Tests<>();
    logicalTests.addTestCase(and1, ans1);
    logicalTests.addTestCase(and2, ans2);
    logicalTests.addTestCase(and3, ans3);
    logicalTests.addTestCase(or1, ans4);
    logicalTests.addTestCase(or2, ans5);
    logicalTests.addTestCase(or3, ans6);
    logicalTests.addTestCase(xor1, ans7);
    logicalTests.addTestCase(xor2, ans8);
    logicalTests.addTestCase(xor3, ans9);
    logicalTests.test((k, v) -> {
        List<Expression> exprs = ImmutableList.of(k);
        ScanSpec result = extractConditions(exprs, table, index);
        List<IndexRange> irs = PredicateUtils.expressionToIndexRanges(result.getPointPredicates(), result.getRangePredicate(), table, index);
        assertEquals(irs.size(), v.size());
        for (int i = 0; i < irs.size(); i++) {
            assertEquals(irs.get(i).getRange(), v.get(i));
        }
    });
}
Also used : TypedKey(com.pingcap.tikv.key.TypedKey) Range(com.google.common.collect.Range) Expression(com.pingcap.tikv.expression.Expression) TiTableInfo(com.pingcap.tikv.meta.TiTableInfo) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) List(java.util.List) ColumnRef(com.pingcap.tikv.expression.ColumnRef) TiIndexInfo(com.pingcap.tikv.meta.TiIndexInfo) Test(org.junit.Test)

Example 18 with TiTableInfo

use of com.pingcap.tikv.meta.TiTableInfo in project tispark by pingcap.

the class PredicateUtilsTest method extractColumnRefFromExpressionTest.

@Test
public void extractColumnRefFromExpressionTest() {
    TiTableInfo table = createTable();
    Constant c1 = Constant.create(1, IntegerType.INT);
    Constant c2 = Constant.create(2, IntegerType.INT);
    ColumnRef col1 = ColumnRef.create("c1", table);
    ColumnRef col2 = ColumnRef.create("c2", table);
    ColumnRef col3 = ColumnRef.create("c3", table);
    ColumnRef col4 = ColumnRef.create("c4", table);
    ColumnRef col5 = ColumnRef.create("c5", table);
    Set<ColumnRef> baseline = ImmutableSet.of(col1, col2, col3, col4, col5);
    Expression expression = and(c1, and(c2, and(col1, and(divide(col4, and(plus(col1, c1), minus(col2, col5))), col3))));
    Set<ColumnRef> columns = PredicateUtils.extractColumnRefFromExpression(expression);
    assertEquals(baseline, columns);
}
Also used : Expression(com.pingcap.tikv.expression.Expression) Constant(com.pingcap.tikv.expression.Constant) TiTableInfo(com.pingcap.tikv.meta.TiTableInfo) ColumnRef(com.pingcap.tikv.expression.ColumnRef) Test(org.junit.Test)

Example 19 with TiTableInfo

use of com.pingcap.tikv.meta.TiTableInfo in project tispark by pingcap.

the class TiKVScanAnalyzerTest method extractConditionsWithPrefixTest.

@Test
public void extractConditionsWithPrefixTest() {
    TiTableInfo table = createTableWithPrefix();
    TiIndexInfo index = table.getIndices().get(0);
    Expression eq1 = equal(ColumnRef.create("c1", table), Constant.create(0, IntegerType.INT));
    Expression eq2 = equal(ColumnRef.create("c2", table), Constant.create("test", StringType.VARCHAR));
    Expression le1 = lessEqual(ColumnRef.create("c3", table), Constant.create("fxxx", StringType.VARCHAR));
    // Last one should be pushed back
    Expression eq3 = equal(ColumnRef.create("c4", table), Constant.create("fxxx", StringType.VARCHAR));
    List<Expression> exprs = ImmutableList.of(eq1, eq2, le1, eq3);
    Set<Expression> baselineSet = ImmutableSet.of(eq2, le1, eq3);
    ScanSpec result = TiKVScanAnalyzer.extractConditions(exprs, table, index);
    // 3 remains since c2 condition pushed back as well
    assertEquals(baselineSet, result.getResidualPredicates());
    assertEquals(2, result.getPointPredicates().size());
    assertEquals(eq1, result.getPointPredicates().get(0));
    assertEquals(eq2, result.getPointPredicates().get(1));
    assertFalse(result.getRangePredicate().isPresent());
}
Also used : Expression(com.pingcap.tikv.expression.Expression) TiTableInfo(com.pingcap.tikv.meta.TiTableInfo) TiIndexInfo(com.pingcap.tikv.meta.TiIndexInfo) Test(org.junit.Test)

Example 20 with TiTableInfo

use of com.pingcap.tikv.meta.TiTableInfo in project tispark by pingcap.

the class TiKVScanAnalyzerTest method testKeyRangeGenWithNoFilterTest.

@Test
public void testKeyRangeGenWithNoFilterTest() {
    TiTableInfo table = createTableWithPrefix();
    TiIndexInfo index = TiIndexInfo.generateFakePrimaryKeyIndex(table);
    TiKVScanAnalyzer scanBuilder = new TiKVScanAnalyzer();
    TiKVScanAnalyzer.TiKVScanPlan scanPlan = scanBuilder.buildIndexScan(ImmutableList.of(), ImmutableList.of(), index, table, null, false);
    ByteString startKey = RowKey.toRowKey(table.getId(), new IntHandle(Long.MIN_VALUE)).toByteString();
    ByteString endKey = RowKey.createBeyondMax(table.getId()).toByteString();
    assertEquals(1, scanPlan.getKeyRanges().size());
    assertEquals(startKey, scanPlan.getKeyRanges().get(table.getId()).get(0).getStart());
    assertEquals(endKey, scanPlan.getKeyRanges().get(table.getId()).get(0).getEnd());
}
Also used : ByteString(com.google.protobuf.ByteString) TiTableInfo(com.pingcap.tikv.meta.TiTableInfo) IntHandle(com.pingcap.tikv.key.IntHandle) TiIndexInfo(com.pingcap.tikv.meta.TiIndexInfo) Test(org.junit.Test)

Aggregations

TiTableInfo (com.pingcap.tikv.meta.TiTableInfo)24 Test (org.junit.Test)17 Expression (com.pingcap.tikv.expression.Expression)11 TiIndexInfo (com.pingcap.tikv.meta.TiIndexInfo)9 ColumnRef (com.pingcap.tikv.expression.ColumnRef)5 ImmutableList (com.google.common.collect.ImmutableList)4 Constant (com.pingcap.tikv.expression.Constant)4 TiDAGRequest (com.pingcap.tikv.meta.TiDAGRequest)4 ArrayList (java.util.ArrayList)4 TiDBInfo (com.pingcap.tikv.meta.TiDBInfo)3 List (java.util.List)3 Context (com.alibaba.citrus.turbine.Context)2 Range (com.google.common.collect.Range)2 ByteString (com.google.protobuf.ByteString)2 Lists (com.pingcap.com.google.common.collect.Lists)2 Maps (com.pingcap.com.google.common.collect.Maps)2 TiConfiguration (com.pingcap.tikv.TiConfiguration)2 TiSession (com.pingcap.tikv.TiSession)2 Catalog (com.pingcap.tikv.catalog.Catalog)2 IndexMatcher (com.pingcap.tikv.expression.visitor.IndexMatcher)2