Search in sources :

Example 41 with DocTableInfo

use of io.crate.metadata.doc.DocTableInfo in project crate by crate.

the class CountAggregationTest method test_count_on_object_with_deeper_not_null_subcolumn_uses_DocValueAggregator.

@Test
public void test_count_on_object_with_deeper_not_null_subcolumn_uses_DocValueAggregator() {
    Reference notNullGrandChild = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", List.of("second_level_object", "not_null_subcol"))), RowGranularity.DOC, DataTypes.STRING, ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    Reference immediateChild = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", "second_level_object")), RowGranularity.DOC, ObjectType.builder().setInnerType(notNullGrandChild.column().leafName(), notNullGrandChild.valueType()).build(), ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    Reference countedObject = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object")), RowGranularity.DOC, ObjectType.builder().setInnerType(immediateChild.column().leafName(), immediateChild.valueType()).build(), ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    DocTableInfo sourceTable = mock(DocTableInfo.class);
    when(sourceTable.notNullColumns()).thenReturn(List.of(notNullGrandChild.column()));
    when(sourceTable.getReference(eq(notNullGrandChild.column()))).thenReturn(notNullGrandChild);
    assertHasDocValueAggregator(List.of(countedObject), sourceTable, BinaryDocValueAggregator.class);
    verify(sourceTable, times(1)).notNullColumns();
    verify(sourceTable, times(1)).getReference(eq(notNullGrandChild.column()));
}
Also used : ColumnIdent(io.crate.metadata.ColumnIdent) DocTableInfo(io.crate.metadata.doc.DocTableInfo) Reference(io.crate.metadata.Reference) ReferenceIdent(io.crate.metadata.ReferenceIdent) Test(org.junit.Test)

Example 42 with DocTableInfo

use of io.crate.metadata.doc.DocTableInfo in project crate by crate.

the class CountAggregationTest method test_count_on_object_with_multiple_not_null_candidates.

@Test
public void test_count_on_object_with_multiple_not_null_candidates() {
    Reference notNullGrandChild1 = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", List.of("second_level_object", "not_null_subcol1"))), RowGranularity.DOC, DataTypes.STRING, ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    Reference notNullGrandChild2 = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", List.of("second_level_object", "not_null_subcol2"))), RowGranularity.DOC, DataTypes.BYTE, ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    Reference immediateChild = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", "second_level_object")), RowGranularity.DOC, ObjectType.builder().setInnerType(notNullGrandChild1.column().leafName(), notNullGrandChild1.valueType()).setInnerType(notNullGrandChild2.column().leafName(), notNullGrandChild2.valueType()).build(), ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    Reference notNullImmediateChild = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", "not_null_subcol")), RowGranularity.DOC, DataTypes.IP, ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    Reference countedObject = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object")), RowGranularity.DOC, ObjectType.builder().setInnerType(immediateChild.column().leafName(), immediateChild.valueType()).setInnerType(notNullImmediateChild.column().leafName(), notNullImmediateChild.valueType()).build(), ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    DocTableInfo sourceTable = mock(DocTableInfo.class);
    when(sourceTable.notNullColumns()).thenReturn(List.of(notNullGrandChild1.column(), notNullGrandChild2.column(), notNullImmediateChild.column()));
    when(sourceTable.getReference(eq(notNullGrandChild1.column()))).thenReturn(notNullGrandChild1);
    when(sourceTable.getReference(eq(notNullGrandChild2.column()))).thenReturn(notNullGrandChild2);
    when(sourceTable.getReference(eq(notNullImmediateChild.column()))).thenReturn(notNullImmediateChild);
    assertHasDocValueAggregator(List.of(countedObject), sourceTable, BinaryDocValueAggregator.class);
    verify(sourceTable, times(1)).notNullColumns();
    verify(sourceTable, times(1)).getReference(eq(notNullGrandChild1.column()));
}
Also used : ColumnIdent(io.crate.metadata.ColumnIdent) DocTableInfo(io.crate.metadata.doc.DocTableInfo) Reference(io.crate.metadata.Reference) ReferenceIdent(io.crate.metadata.ReferenceIdent) Test(org.junit.Test)

Example 43 with DocTableInfo

use of io.crate.metadata.doc.DocTableInfo in project crate by crate.

the class CountAggregationTest method test_count_on_object_with_nullable_subcolumn_not_use_DocValueAggregator.

@Test
public void test_count_on_object_with_nullable_subcolumn_not_use_DocValueAggregator() {
    Reference nullableChild = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", "nullable_subcol")), RowGranularity.DOC, DataTypes.INTEGER, 0, null);
    Reference countedObject = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object")), RowGranularity.DOC, ObjectType.builder().setInnerType(nullableChild.column().leafName(), nullableChild.valueType()).build(), 0, null);
    DocTableInfo sourceTable = mock(DocTableInfo.class);
    when(sourceTable.notNullColumns()).thenReturn(List.of());
    when(sourceTable.getReference(eq(nullableChild.column()))).thenReturn(nullableChild);
    assertHasDocValueAggregator(List.of(countedObject), sourceTable, null);
    verify(sourceTable, times(1)).notNullColumns();
    verify(sourceTable, times(0)).getReference(eq(nullableChild.column()));
}
Also used : ColumnIdent(io.crate.metadata.ColumnIdent) DocTableInfo(io.crate.metadata.doc.DocTableInfo) Reference(io.crate.metadata.Reference) ReferenceIdent(io.crate.metadata.ReferenceIdent) Test(org.junit.Test)

Example 44 with DocTableInfo

use of io.crate.metadata.doc.DocTableInfo in project crate by crate.

the class CountAggregationTest method helper_count_on_object_with_not_null_immediate_child.

private void helper_count_on_object_with_not_null_immediate_child(DataType<?> childType, Class<?> expectedAggregatorClass) {
    Reference notNullImmediateChild = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object", "not_null_subcol")), RowGranularity.DOC, childType, ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    Reference countedObject = new Reference(new ReferenceIdent(null, new ColumnIdent("top_level_object")), RowGranularity.DOC, ObjectType.builder().setInnerType(notNullImmediateChild.column().leafName(), notNullImmediateChild.valueType()).build(), ColumnPolicy.DYNAMIC, IndexType.PLAIN, true, true, 0, null);
    DocTableInfo sourceTable = mock(DocTableInfo.class);
    when(sourceTable.notNullColumns()).thenReturn(List.of(notNullImmediateChild.column()));
    when(sourceTable.getReference(eq(notNullImmediateChild.column()))).thenReturn(notNullImmediateChild);
    assertHasDocValueAggregator(List.of(countedObject), sourceTable, expectedAggregatorClass);
    verify(sourceTable, times(1)).notNullColumns();
    verify(sourceTable, times(1)).getReference(eq(notNullImmediateChild.column()));
}
Also used : ColumnIdent(io.crate.metadata.ColumnIdent) DocTableInfo(io.crate.metadata.doc.DocTableInfo) Reference(io.crate.metadata.Reference) ReferenceIdent(io.crate.metadata.ReferenceIdent)

Example 45 with DocTableInfo

use of io.crate.metadata.doc.DocTableInfo in project crate by crate.

the class WhereClauseAnalyzer method resolvePartitions.

/**
 * Replace parameters and sub-queries with the related values and analyze the query afterwards.
 */
public static WhereClause resolvePartitions(WhereClause where, AbstractTableRelation<?> tableRelation, CoordinatorTxnCtx coordinatorTxnCtx, NodeContext nodeCtx) {
    if (!where.hasQuery() || !(tableRelation instanceof DocTableRelation) || where.query().equals(Literal.BOOLEAN_TRUE)) {
        return where;
    }
    DocTableInfo table = ((DocTableRelation) tableRelation).tableInfo();
    if (!table.isPartitioned()) {
        return where;
    }
    if (table.partitions().isEmpty()) {
        return WhereClause.NO_MATCH;
    }
    PartitionResult partitionResult = resolvePartitions(where.queryOrFallback(), table, coordinatorTxnCtx, nodeCtx);
    if (!where.partitions().isEmpty() && !partitionResult.partitions.isEmpty() && !partitionResult.partitions.equals(where.partitions())) {
        throw new IllegalArgumentException("Given partition ident does not match partition evaluated from where clause");
    }
    return new WhereClause(partitionResult.query, partitionResult.partitions, where.clusteredBy());
}
Also used : DocTableInfo(io.crate.metadata.doc.DocTableInfo) WhereClause(io.crate.analyze.WhereClause) DocTableRelation(io.crate.analyze.relations.DocTableRelation)

Aggregations

DocTableInfo (io.crate.metadata.doc.DocTableInfo)127 Test (org.junit.Test)56 CrateDummyClusterServiceUnitTest (io.crate.test.integration.CrateDummyClusterServiceUnitTest)40 Symbol (io.crate.expression.symbol.Symbol)27 Reference (io.crate.metadata.Reference)27 SQLExecutor (io.crate.testing.SQLExecutor)25 RelationName (io.crate.metadata.RelationName)24 DocTableRelation (io.crate.analyze.relations.DocTableRelation)20 ColumnIdent (io.crate.metadata.ColumnIdent)20 TableInfo (io.crate.metadata.table.TableInfo)18 Assignments (io.crate.expression.symbol.Assignments)16 Row (io.crate.data.Row)14 PlannerContext (io.crate.planner.PlannerContext)13 Before (org.junit.Before)13 RowConsumer (io.crate.data.RowConsumer)12 CoordinatorTxnCtx (io.crate.metadata.CoordinatorTxnCtx)12 PartitionName (io.crate.metadata.PartitionName)12 DependencyCarrier (io.crate.planner.DependencyCarrier)12 ArrayList (java.util.ArrayList)12 Map (java.util.Map)12