public ArrayTable.Content get() { final ColumnLoader loader = new ColumnLoader<T>(typeFactory, source, protoRowType, repList); return new ArrayTable.Content(loader.representationValues, loader.size(), loader.sortField); } }));
@Test public void testLog2() { assertEquals(0, ColumnLoader.log2(0)); assertEquals(0, ColumnLoader.log2(1)); assertEquals(1, ColumnLoader.log2(2)); assertEquals(2, ColumnLoader.log2(4)); assertEquals(16, ColumnLoader.log2(65536)); assertEquals(15, ColumnLoader.log2(65535)); assertEquals(16, ColumnLoader.log2(65537)); assertEquals(30, ColumnLoader.log2(Integer.MAX_VALUE)); assertEquals(30, ColumnLoader.log2(Integer.MAX_VALUE - 1)); assertEquals(29, ColumnLoader.log2(0x3fffffff)); assertEquals(30, ColumnLoader.log2(0x40000000)); }
@Test public void testNextPowerOf2() { assertEquals(1, ColumnLoader.nextPowerOf2(1)); assertEquals(2, ColumnLoader.nextPowerOf2(2)); assertEquals(4, ColumnLoader.nextPowerOf2(3)); assertEquals(4, ColumnLoader.nextPowerOf2(4)); assertEquals(0x40000000, ColumnLoader.nextPowerOf2(0x3456789a)); assertEquals(0x40000000, ColumnLoader.nextPowerOf2(0x40000000)); // overflow assertEquals(0x80000000, ColumnLoader.nextPowerOf2(0x7fffffff)); assertEquals(0x80000000, ColumnLoader.nextPowerOf2(0x7ffffffe)); }
return new ArrayTable.Constant(ordinal); final int bitCountMax = log2(nextPowerOf2(abs2(max) + 1)); int bitCount; // 1 for sign boolean signed; } else { signed = true; int bitCountMin = log2(nextPowerOf2(abs2(min) + 1)); bitCount = Math.max(bitCountMin, bitCountMax) + 1;
@Test public void testLoadSorted() { final JavaTypeFactoryImpl typeFactory = new JavaTypeFactoryImpl(); final RelDataType rowType = typeFactory.createStructType( new RelDataTypeFactory.FieldInfoBuilder() .add("empid", typeFactory.createType(int.class)) .add("deptno", typeFactory.createType(int.class)) .add("name", typeFactory.createType(String.class))); final Enumerable<Object[]> enumerable = Linq4j.asEnumerable( Arrays.asList( new Object[]{100, 10, "Bill"}, new Object[]{200, 20, "Eric"}, new Object[]{150, 10, "Sebastian"}, new Object[]{160, 10, "Theodore"})); final ColumnLoader<Object[]> loader = new ColumnLoader<Object[]>(typeFactory, enumerable, rowType); checkColumn( loader.representationValues.get(0), ArrayTable.RepresentationType.BIT_SLICED_PRIMITIVE_ARRAY, "Column(representation=BitSlicedPrimitiveArray(ordinal=0, bitCount=8, primitive=INT, signed=false), value=[100, 150, 160, 200, 0, 0, 0, 0])"); checkColumn( loader.representationValues.get(1), ArrayTable.RepresentationType.BIT_SLICED_PRIMITIVE_ARRAY, "Column(representation=BitSlicedPrimitiveArray(ordinal=1, bitCount=5, primitive=INT, signed=false), value=[10, 10, 10, 20, 0, 0, 0, 0, 0, 0, 0, 0])"); checkColumn( loader.representationValues.get(2), ArrayTable.RepresentationType.OBJECT_ARRAY, "Column(representation=ObjectArray(ordinal=2), value=[Bill, Sebastian, Theodore, Eric])"); }
wrap( sliceList, elementType.getFieldList().get(pair.i).getType()); if (isIdentity(sources)) {
/** Creates a column loader, and performs the load. */ ColumnLoader( JavaTypeFactory typeFactory, Enumerable<T> sourceTable, RelDataType elementType) { this.typeFactory = typeFactory; sourceTable.into(list); final int[] sorts = {-1}; load(elementType, sorts); this.sortField = sorts[0]; }
return new ArrayTable.Constant(ordinal); final int bitCountMax = log2(nextPowerOf2(abs2(max) + 1)); int bitCount; // 1 for sign boolean signed; } else { signed = true; int bitCountMin = log2(nextPowerOf2(abs2(min) + 1)); bitCount = Math.max(bitCountMin, bitCountMax) + 1;
new Object[]{10, 160, "Theodore"})); final ColumnLoader<Object[]> loader = new ColumnLoader<Object[]>(typeFactory, enumerable, RelDataTypeImpl.proto(rowType), null);
wrap( repList.get(pair.i), sliceList, if (isIdentity(sources)) {
/** Creates a column loader, and performs the load. * * @param typeFactory Type factory * @param sourceTable Source data * @param protoRowType Logical row type * @param repList Physical row types, or null if not known */ ColumnLoader(JavaTypeFactory typeFactory, Enumerable<T> sourceTable, RelProtoDataType protoRowType, List<ColumnMetaData.Rep> repList) { this.typeFactory = typeFactory; final RelDataType rowType = protoRowType.apply(typeFactory); if (repList == null) { repList = Collections.nCopies(rowType.getFieldCount(), ColumnMetaData.Rep.OBJECT); } sourceTable.into(list); final int[] sorts = {-1}; load(rowType, repList, sorts); this.sortField = sorts[0]; }
final int codeBitCount = log2(nextPowerOf2(codeCount)); if (codeBitCount < 10 && values.size() > 2000) { final ArrayTable.Representation representation =
public static <T> TableInSchema createCloneTable(MutableSchema schema, String name, RelDataType rowType, Enumerable<T> source) { final ColumnLoader loader = new ColumnLoader<T>(schema.getTypeFactory(), source, rowType); final Type elementType = source instanceof Queryable ? ((Queryable) source).getElementType() : Object.class; ArrayTable<T> table = new ArrayTable<T>( schema, elementType, rowType, Expressions.call( schema.getExpression(), BuiltinMethod.DATA_CONTEXT_GET_TABLE.method, Expressions.constant(name), Expressions.constant(Types.toClass(elementType))), loader.representationValues, loader.size(), loader.sortField); return new TableInSchemaImpl(schema, name, TableType.TABLE, table); }
new Object[]{10, 160, "Theodore"})); final ColumnLoader<Object[]> loader = new ColumnLoader<Object[]>(typeFactory, enumerable, rowType);
@Test public void testNextPowerOf2() { assertEquals(1, ColumnLoader.nextPowerOf2(1)); assertEquals(2, ColumnLoader.nextPowerOf2(2)); assertEquals(4, ColumnLoader.nextPowerOf2(3)); assertEquals(4, ColumnLoader.nextPowerOf2(4)); assertEquals(0x40000000, ColumnLoader.nextPowerOf2(0x3456789a)); assertEquals(0x40000000, ColumnLoader.nextPowerOf2(0x40000000)); // overflow assertEquals(0x80000000, ColumnLoader.nextPowerOf2(0x7fffffff)); assertEquals(0x80000000, ColumnLoader.nextPowerOf2(0x7ffffffe)); }
@Test public void testLog2() { assertEquals(0, ColumnLoader.log2(0)); assertEquals(0, ColumnLoader.log2(1)); assertEquals(1, ColumnLoader.log2(2)); assertEquals(2, ColumnLoader.log2(4)); assertEquals(16, ColumnLoader.log2(65536)); assertEquals(15, ColumnLoader.log2(65535)); assertEquals(16, ColumnLoader.log2(65537)); assertEquals(30, ColumnLoader.log2(Integer.MAX_VALUE)); assertEquals(30, ColumnLoader.log2(Integer.MAX_VALUE - 1)); assertEquals(29, ColumnLoader.log2(0x3fffffff)); assertEquals(30, ColumnLoader.log2(0x40000000)); }
final int codeBitCount = log2(nextPowerOf2(codeCount)); if (codeBitCount < 10 && values.size() > 2000) { final ArrayTable.Representation representation =
new Object[]{160, 10, "Theodore"})); final ColumnLoader<Object[]> loader = new ColumnLoader<Object[]>(typeFactory, enumerable, RelDataTypeImpl.proto(rowType), null); checkColumn(