Search in sources :

Example 11 with ValuePredicateAnalyzer

use of io.mycat.calcite.rewriter.ValuePredicateAnalyzer in project Mycat2 by MyCATApache.

the class ValuePredicateAnalyzerTest method testDoubleColumns.

@Test
public void testDoubleColumns() {
    RexNode leftRexNode = rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, rexBuilder.makeInputRef(MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), 0), rexBuilder.makeLiteral(0, MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), true));
    RexNode rightRexNode = rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, rexBuilder.makeInputRef(MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), 1), rexBuilder.makeDynamicParam(MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), 0));
    List<String> columnList = Arrays.asList("id", "id2");
    ValuePredicateAnalyzer valuePredicateAnalyzer2 = new ValuePredicateAnalyzer(Arrays.asList(KeyMeta.of("shardingTable", "id"), KeyMeta.of("shardingDb", "id2")), columnList);
    Map<QueryType, List<ValueIndexCondition>> indexCondition = valuePredicateAnalyzer2.translateMatch(RexUtil.composeConjunction(rexBuilder, Arrays.asList(leftRexNode, rightRexNode)));
    Assert.assertEquals("{PK_POINT_QUERY=[ValueIndexCondition(fieldNames=[id, id2], indexName=shardingDb, indexColumnNames=[id2], queryType=PK_POINT_QUERY, rangeQueryLowerOp=null, rangeQueryLowerKey=null, rangeQueryUpperOp=null, rangeQueryUpperKey=null, pointQueryKey=[?0]), ValueIndexCondition(fieldNames=[id, id2], indexName=shardingTable, indexColumnNames=[id], queryType=PK_POINT_QUERY, rangeQueryLowerOp=null, rangeQueryLowerKey=null, rangeQueryUpperOp=null, rangeQueryUpperKey=null, pointQueryKey=[0])]}", Objects.toString(indexCondition));
}
Also used : ValuePredicateAnalyzer(io.mycat.calcite.rewriter.ValuePredicateAnalyzer) QueryType(io.mycat.querycondition.QueryType) RexNode(org.apache.calcite.rex.RexNode) Test(org.junit.Test)

Example 12 with ValuePredicateAnalyzer

use of io.mycat.calcite.rewriter.ValuePredicateAnalyzer in project Mycat2 by MyCATApache.

the class ValuePredicateAnalyzerTest method testGte.

@Test
public void testGte() {
    DrdsTest.getDrds();
    int count = 5;
    RexNode rexNode = rexBuilder.makeCall(SqlStdOperatorTable.GREATER_THAN, rexBuilder.makeInputRef(MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), 0), rexBuilder.makeLiteral(5, MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), true));
    List<String> columnList = Arrays.asList("id");
    ValuePredicateAnalyzer valuePredicateAnalyzer2 = new ValuePredicateAnalyzer(Arrays.asList(KeyMeta.of("seqSharding", "id")), columnList);
    Map<QueryType, List<ValueIndexCondition>> indexCondition = valuePredicateAnalyzer2.translateMatch(rexNode);
    Assert.assertEquals("{PK_RANGE_QUERY=[ValueIndexCondition(fieldNames=[id], indexName=seqSharding, indexColumnNames=[id], queryType=PK_RANGE_QUERY, rangeQueryLowerOp=GT, rangeQueryLowerKey=[5], rangeQueryUpperOp=null, rangeQueryUpperKey=null, pointQueryKey=null)]}", Objects.toString(indexCondition));
    MetadataManager metadataManager = DrdsTest.getMetadataManager();
    // 以下代码需要实现对应支持>的分片算法才能继续测试
    ShardingTable table = (ShardingTable) metadataManager.getTable("db1", "seqSharding");
    List o = ValueIndexCondition.getPartitions(table.getShardingFuntion(), valuePredicateAnalyzer2.translateMatch(rexNode), Arrays.asList());
    o.sort(Comparator.comparing(c -> c.toString()));
    Assert.assertEquals(4, o.size());
    Assert.assertEquals("[{targetName='c0', schemaName='db1_0', tableName='sharding_0', index=0, dbIndex=0, tableIndex=0}, {targetName='c0', schemaName='db1_0', tableName='sharding_1', index=1, dbIndex=0, tableIndex=1}, {targetName='c1', schemaName='db1_1', tableName='sharding_2', index=2, dbIndex=1, tableIndex=0}, {targetName='c1', schemaName='db1_1', tableName='sharding_3', index=3, dbIndex=1, tableIndex=1}]", Objects.toString(o));
    System.out.println();
}
Also used : ValuePredicateAnalyzer(io.mycat.calcite.rewriter.ValuePredicateAnalyzer) MetadataManager(io.mycat.MetadataManager) ShardingTable(io.mycat.calcite.table.ShardingTable) ValuePredicateAnalyzer(io.mycat.calcite.rewriter.ValuePredicateAnalyzer) java.util(java.util) SqlTypeName(org.apache.calcite.sql.type.SqlTypeName) RexBuilder(org.apache.calcite.rex.RexBuilder) RexLiteral(org.apache.calcite.rex.RexLiteral) Test(org.junit.Test) MycatCalciteSupport(io.mycat.calcite.MycatCalciteSupport) ValueIndexCondition(io.mycat.calcite.rewriter.ValueIndexCondition) RexUtil(org.apache.calcite.rex.RexUtil) Partition(io.mycat.Partition) QueryType(io.mycat.querycondition.QueryType) SqlStdOperatorTable(org.apache.calcite.sql.fun.SqlStdOperatorTable) RexNode(org.apache.calcite.rex.RexNode) KeyMeta(io.mycat.querycondition.KeyMeta) Assert(org.junit.Assert) DrdsSqlCompiler(io.mycat.DrdsSqlCompiler) NotThreadSafe(javax.annotation.concurrent.NotThreadSafe) MetadataManager(io.mycat.MetadataManager) QueryType(io.mycat.querycondition.QueryType) ShardingTable(io.mycat.calcite.table.ShardingTable) RexNode(org.apache.calcite.rex.RexNode) Test(org.junit.Test)

Example 13 with ValuePredicateAnalyzer

use of io.mycat.calcite.rewriter.ValuePredicateAnalyzer in project Mycat2 by MyCATApache.

the class ValuePredicateAnalyzerTest method testMultiOrEquals5.

@Test
public void testMultiOrEquals5() {
    DrdsTest.getDrds();
    int count = 5;
    List<RexNode> orList = new LinkedList<>();
    for (int i = 0; i < count; i++) {
        RexNode rexNode = rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, rexBuilder.makeInputRef(MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), 0), rexBuilder.makeLiteral(i, MycatCalciteSupport.TypeFactory.createSqlType(SqlTypeName.INTEGER), true));
        orList.add(rexNode);
    }
    RexNode rexNode = rexBuilder.makeCall(SqlStdOperatorTable.OR, orList);
    List<String> columnList = Arrays.asList("id");
    ValuePredicateAnalyzer valuePredicateAnalyzer2 = new ValuePredicateAnalyzer(Arrays.asList(KeyMeta.of("seqSharding", "id")), columnList);
    Map<QueryType, List<ValueIndexCondition>> indexCondition = valuePredicateAnalyzer2.translateMatch(rexNode);
    Assert.assertEquals("{PK_POINT_QUERY=[ValueIndexCondition(fieldNames=[id], indexName=seqSharding, indexColumnNames=[id], queryType=PK_POINT_QUERY, rangeQueryLowerOp=null, rangeQueryLowerKey=null, rangeQueryUpperOp=null, rangeQueryUpperKey=null, pointQueryKey=[0, 1, 2, 3, 4])]}", Objects.toString(indexCondition));
    MetadataManager metadataManager = DrdsTest.getMetadataManager();
    ShardingTable table = (ShardingTable) metadataManager.getTable("db1", "seqSharding");
    List o = ValueIndexCondition.getPartitions(table.getShardingFuntion(), valuePredicateAnalyzer2.translateMatch(rexNode), Arrays.asList());
    o.sort(Comparator.comparing(c -> c.toString()));
    Assert.assertEquals(4, o.size());
    Assert.assertEquals("[{targetName='c0', schemaName='db1_0', tableName='sharding_0', index=0, dbIndex=0, tableIndex=0}, {targetName='c0', schemaName='db1_0', tableName='sharding_1', index=1, dbIndex=0, tableIndex=1}, {targetName='c1', schemaName='db1_1', tableName='sharding_2', index=2, dbIndex=1, tableIndex=0}, {targetName='c1', schemaName='db1_1', tableName='sharding_3', index=3, dbIndex=1, tableIndex=1}]", Objects.toString(o));
    System.out.println();
}
Also used : MetadataManager(io.mycat.MetadataManager) ShardingTable(io.mycat.calcite.table.ShardingTable) ValuePredicateAnalyzer(io.mycat.calcite.rewriter.ValuePredicateAnalyzer) java.util(java.util) SqlTypeName(org.apache.calcite.sql.type.SqlTypeName) RexBuilder(org.apache.calcite.rex.RexBuilder) RexLiteral(org.apache.calcite.rex.RexLiteral) Test(org.junit.Test) MycatCalciteSupport(io.mycat.calcite.MycatCalciteSupport) ValueIndexCondition(io.mycat.calcite.rewriter.ValueIndexCondition) RexUtil(org.apache.calcite.rex.RexUtil) Partition(io.mycat.Partition) QueryType(io.mycat.querycondition.QueryType) SqlStdOperatorTable(org.apache.calcite.sql.fun.SqlStdOperatorTable) RexNode(org.apache.calcite.rex.RexNode) KeyMeta(io.mycat.querycondition.KeyMeta) Assert(org.junit.Assert) DrdsSqlCompiler(io.mycat.DrdsSqlCompiler) NotThreadSafe(javax.annotation.concurrent.NotThreadSafe) ValuePredicateAnalyzer(io.mycat.calcite.rewriter.ValuePredicateAnalyzer) MetadataManager(io.mycat.MetadataManager) QueryType(io.mycat.querycondition.QueryType) ShardingTable(io.mycat.calcite.table.ShardingTable) RexNode(org.apache.calcite.rex.RexNode) Test(org.junit.Test)

Aggregations

ValuePredicateAnalyzer (io.mycat.calcite.rewriter.ValuePredicateAnalyzer)13 RexNode (org.apache.calcite.rex.RexNode)12 Test (org.junit.Test)12 ShardingTable (io.mycat.calcite.table.ShardingTable)11 DrdsSqlCompiler (io.mycat.DrdsSqlCompiler)10 MetadataManager (io.mycat.MetadataManager)10 QueryType (io.mycat.querycondition.QueryType)9 Partition (io.mycat.Partition)7 RexBuilder (org.apache.calcite.rex.RexBuilder)6 RexLiteral (org.apache.calcite.rex.RexLiteral)6 MycatCalciteSupport (io.mycat.calcite.MycatCalciteSupport)5 ValueIndexCondition (io.mycat.calcite.rewriter.ValueIndexCondition)5 KeyMeta (io.mycat.querycondition.KeyMeta)5 java.util (java.util)5 NotThreadSafe (javax.annotation.concurrent.NotThreadSafe)5 RexUtil (org.apache.calcite.rex.RexUtil)5 SqlStdOperatorTable (org.apache.calcite.sql.fun.SqlStdOperatorTable)5 SqlTypeName (org.apache.calcite.sql.type.SqlTypeName)5 Assert (org.junit.Assert)5 ImmutableList (com.google.common.collect.ImmutableList)1