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()));
}
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()));
}
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()));
}
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()));
}
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());
}
Aggregations