protected AbstractPropertiesSystemTable(String tableName, TransactionManager transactionManager, Supplier<Map<ConnectorId, Map<String, PropertyMetadata<?>>>> propertySupplier) { this.tableMetadata = tableMetadataBuilder(new SchemaTableName("metadata", tableName)) .column("catalog_name", createUnboundedVarcharType()) .column("property_name", createUnboundedVarcharType()) .column("default_value", createUnboundedVarcharType()) .column("type", createUnboundedVarcharType()) .column("description", createUnboundedVarcharType()) .build(); this.transactionManager = requireNonNull(transactionManager, "transactionManager is null"); this.propertySupplier = requireNonNull(propertySupplier, "propertySupplier is null"); }
@Override public Set<ColumnStatisticType> getSupportedColumnStatistics(Type type) { if (type.equals(createVarcharType(123))) { return ImmutableSet.of(MIN_VALUE, MAX_VALUE); } return ImmutableSet.of(); }
@Test public void testVarchar() { assertEquals(VARCHAR.getTypeSignature().toString(), "varchar"); assertEquals(createVarcharType(42).getTypeSignature().toString(), "varchar(42)"); assertEquals(parseTypeSignature("varchar"), createUnboundedVarcharType().getTypeSignature()); assertEquals(createUnboundedVarcharType().getTypeSignature(), parseTypeSignature("varchar")); assertEquals(parseTypeSignature("varchar").hashCode(), createUnboundedVarcharType().getTypeSignature().hashCode()); assertNotEquals(createUnboundedVarcharType().getTypeSignature(), parseTypeSignature("varchar(10)")); }
private static Type getCommonSuperTypeForVarchar(VarcharType firstType, VarcharType secondType) { if (firstType.isUnbounded() || secondType.isUnbounded()) { return createUnboundedVarcharType(); } return createVarcharType(Math.max(firstType.getBoundedLength(), secondType.getBoundedLength())); }
private static Type getCommonSuperTypeForVarchar(VarcharType firstType, VarcharType secondType) { if (firstType.isUnbounded() || secondType.isUnbounded()) { return createUnboundedVarcharType(); } return createVarcharType(Math.max(firstType.getLength(), secondType.getLength())); }
private static Block resourceGroupIdToBlock(ResourceGroupId resourceGroupId) { requireNonNull(resourceGroupId, "resourceGroupId is null"); List<String> segments = resourceGroupId.getSegments(); BlockBuilder blockBuilder = createUnboundedVarcharType().createBlockBuilder(null, segments.size()); for (String segment : segments) { createUnboundedVarcharType().writeSlice(blockBuilder, utf8Slice(segment)); } return blockBuilder.build(); }
private static PropertyMetadata<?> stringListSessionProperty(TypeManager typeManager, String name, String description) { return new PropertyMetadata<>( name, description, typeManager.getParameterizedType(ARRAY, ImmutableList.of(TypeSignatureParameter.of(createUnboundedVarcharType().getTypeSignature()))), List.class, ImmutableList.of(), false, value -> ImmutableList.copyOf(stringList(value).stream() .map(s -> s.toLowerCase(ENGLISH)) .collect(toList())), value -> value); }
private static Block createStringsBlock(List<ConnectorId> values) { VarcharType varchar = createUnboundedVarcharType(); BlockBuilder builder = varchar.createBlockBuilder(null, values.size()); for (ConnectorId value : values) { if (value == null) { builder.appendNull(); } else { varchar.writeString(builder, value.getCatalogName()); } } return builder.build(); } }
@Test public void testMySqlCreatedParameterizedVarchar() { DataTypeTest.create() .addRoundTrip(stringDataType("tinytext", createVarcharType(255)), "a") .addRoundTrip(stringDataType("text", createVarcharType(65535)), "b") .addRoundTrip(stringDataType("mediumtext", createVarcharType(16777215)), "c") .addRoundTrip(stringDataType("longtext", createUnboundedVarcharType()), "d") .addRoundTrip(varcharDataType(32), "e") .addRoundTrip(varcharDataType(20000), "f") .execute(getQueryRunner(), mysqlCreateAndInsert("tpch.mysql_test_parameterized_varchar")); }
public static Block createTestBlock() { BlockBuilder blockBuilder = VARCHAR.createBlockBuilder(null, 15); VARCHAR.writeString(blockBuilder, "apple"); VARCHAR.writeString(blockBuilder, "apple"); VARCHAR.writeString(blockBuilder, "apple"); VARCHAR.writeString(blockBuilder, "banana"); VARCHAR.writeString(blockBuilder, "banana"); VARCHAR.writeString(blockBuilder, "banana"); VARCHAR.writeString(blockBuilder, "banana"); VARCHAR.writeString(blockBuilder, "banana"); VARCHAR.writeString(blockBuilder, "cherry"); VARCHAR.writeString(blockBuilder, "cherry"); VARCHAR.writeString(blockBuilder, "date"); return blockBuilder.build(); }
private static void test(IntStream keyInputStream, Stream<String> valueInputStream, BlockComparator comparator, Iterator<String> outputIterator) { BlockBuilder keysBlockBuilder = BIGINT.createBlockBuilder(null, INPUT_SIZE); BlockBuilder valuesBlockBuilder = VARCHAR.createBlockBuilder(null, INPUT_SIZE); keyInputStream.forEach(x -> BIGINT.writeLong(keysBlockBuilder, x)); valueInputStream.forEach(x -> VARCHAR.writeString(valuesBlockBuilder, x)); TypedKeyValueHeap heap = new TypedKeyValueHeap(comparator, BIGINT, VARCHAR, OUTPUT_SIZE); heap.addAll(keysBlockBuilder, valuesBlockBuilder); BlockBuilder resultBlockBuilder = VARCHAR.createBlockBuilder(null, OUTPUT_SIZE); heap.popAll(resultBlockBuilder); Block resultBlock = resultBlockBuilder.build(); assertEquals(resultBlock.getPositionCount(), OUTPUT_SIZE); for (int i = 0; i < OUTPUT_SIZE; i++) { assertEquals(VARCHAR.getSlice(resultBlock, i).toStringUtf8(), outputIterator.next()); } } }
@BeforeMethod(alwaysRun = true) public void setUp() throws Exception { type = VarcharType.createVarcharType(100); BlockBuilder blockBuilder = type.createBlockBuilder(null, 100, 10); valueStore = new ValueStore(100, blockBuilder); valueStoreSmall = new ValueStore(1, blockBuilder); block = BlockAssertions.createStringsBlock("a", "b", "c", "d"); }
@Override public void writeSlice(BlockBuilder blockBuilder, Slice value) { writeSlice(blockBuilder, value, 0, value.length()); }
public Block split(Slice source) { Matcher matcher = re2jPattern.matcher(source); BlockBuilder blockBuilder = VARCHAR.createBlockBuilder(null, 32); int lastEnd = 0; while (matcher.find()) { Slice slice = source.slice(lastEnd, matcher.start() - lastEnd); lastEnd = matcher.end(); VARCHAR.writeSlice(blockBuilder, slice); } VARCHAR.writeSlice(blockBuilder, source.slice(lastEnd, source.length() - lastEnd)); return blockBuilder.build(); }
@Override Object extractValue(Block block, int position) { return varcharType.getSlice(block, position); }
@Override public String getDisplayName() { if (length == UNBOUNDED_LENGTH) { return getTypeSignature().getBase(); } return getTypeSignature().toString(); }
private static void repeatToStringBlock(String value, int count, BlockBuilder blockBuilder) { for (int i = 0; i < count; i++) { VARCHAR.writeString(blockBuilder, value); } }
public static Slice truncateToLength(Slice slice, VarcharType varcharType) { requireNonNull(varcharType, "varcharType is null"); return truncateToLength(slice, varcharType.getLength()); }
@Inject public TransactionsSystemTable(TypeManager typeManager, TransactionManager transactionManager) { this.transactionsTable = tableMetadataBuilder(TRANSACTIONS_TABLE_NAME) .column("transaction_id", createUnboundedVarcharType()) .column("isolation_level", createUnboundedVarcharType()) .column("read_only", BOOLEAN) .column("auto_commit_context", BOOLEAN) .column("create_time", TIMESTAMP) .column("idle_time_secs", BIGINT) .column("written_catalog", createUnboundedVarcharType()) .column("catalogs", typeManager.getParameterizedType(ARRAY, ImmutableList.of(TypeSignatureParameter.of(createUnboundedVarcharType().getTypeSignature())))) .build(); this.transactionManager = requireNonNull(transactionManager, "transactionManager is null"); }
private static Block resourceGroupIdToBlock(ResourceGroupId resourceGroupId) { requireNonNull(resourceGroupId, "resourceGroupId is null"); List<String> segments = resourceGroupId.getSegments(); BlockBuilder blockBuilder = createUnboundedVarcharType().createBlockBuilder(null, segments.size()); for (String segment : segments) { createUnboundedVarcharType().writeSlice(blockBuilder, utf8Slice(segment)); } return blockBuilder.build(); }