use of io.prestosql.spi.type.DateType in project hetu-core by openlookeng.
the class HivePartitionManager method getFilteredPartitionNames.
private List<String> getFilteredPartitionNames(SemiTransactionalHiveMetastore metastore, HiveIdentity identity, SchemaTableName tableName, List<HiveColumnHandle> partitionKeys, TupleDomain<ColumnHandle> effectivePredicate, Table table) {
checkArgument(effectivePredicate.getDomains().isPresent());
List<String> filter = new ArrayList<>();
for (HiveColumnHandle partitionKey : partitionKeys) {
Domain domain = effectivePredicate.getDomains().get().get(partitionKey);
if (domain != null && domain.isNullableSingleValue()) {
Object value = domain.getNullableSingleValue();
Type type = domain.getType();
if (value == null) {
filter.add(HivePartitionKey.HIVE_DEFAULT_DYNAMIC_PARTITION);
} else if (type instanceof CharType) {
Slice slice = (Slice) value;
filter.add(padSpaces(slice, (CharType) type).toStringUtf8());
} else if (type instanceof VarcharType) {
Slice slice = (Slice) value;
filter.add(slice.toStringUtf8());
} else // unless we know that all partition values use the canonical Java representation.
if (!assumeCanonicalPartitionKeys) {
filter.add(PARTITION_VALUE_WILDCARD);
} else if (type instanceof DecimalType && !((DecimalType) type).isShort()) {
Slice slice = (Slice) value;
filter.add(Decimals.toString(slice, ((DecimalType) type).getScale()));
} else if (type instanceof DecimalType && ((DecimalType) type).isShort()) {
filter.add(Decimals.toString((long) value, ((DecimalType) type).getScale()));
} else if (type instanceof DateType) {
DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.date().withZoneUTC();
filter.add(dateTimeFormatter.print(TimeUnit.DAYS.toMillis((long) value)));
} else if (type instanceof TimestampType) {
// we don't have time zone info, so just add a wildcard
filter.add(PARTITION_VALUE_WILDCARD);
} else if (type instanceof TinyintType || type instanceof SmallintType || type instanceof IntegerType || type instanceof BigintType || type instanceof DoubleType || type instanceof RealType || type instanceof BooleanType) {
filter.add(value.toString());
} else {
throw new PrestoException(NOT_SUPPORTED, format("Unsupported partition key type: %s", type.getDisplayName()));
}
} else {
filter.add(PARTITION_VALUE_WILDCARD);
}
}
// fetch the partition names
return metastore.getPartitionNamesByParts(identity, tableName.getSchemaName(), tableName.getTableName(), filter, table).orElseThrow(() -> new TableNotFoundException(tableName));
}
use of io.prestosql.spi.type.DateType in project hetu-core by openlookeng.
the class TestTypeUtil method testParseType.
@Test
public void testParseType() {
Type type = parseType(typeManager, "bigint");
assertTrue(type instanceof BigintType);
type = parseType(typeManager, "integer");
assertTrue(type instanceof IntegerType);
type = parseType(typeManager, "smallint");
assertTrue(type instanceof SmallintType);
type = parseType(typeManager, "boolean");
assertTrue(type instanceof BooleanType);
type = parseType(typeManager, "date");
assertTrue(type instanceof DateType);
type = parseType(typeManager, "real");
assertTrue(type instanceof RealType);
type = parseType(typeManager, "double");
assertTrue(type instanceof DoubleType);
type = parseType(typeManager, "HyperLogLog");
assertTrue(type instanceof HyperLogLogType);
type = parseType(typeManager, "P4HyperLogLog");
assertTrue(type instanceof P4HyperLogLogType);
type = parseType(typeManager, "timestamp");
assertTrue(type instanceof TimestampType);
type = parseType(typeManager, "timestamp with time zone");
assertTrue(type instanceof TimestampWithTimeZoneType);
type = parseType(typeManager, "time");
assertTrue(type instanceof TimeType);
type = parseType(typeManager, "time with time zone");
assertTrue(type instanceof TimeWithTimeZoneType);
type = parseType(typeManager, "varbinary");
assertTrue(type instanceof VarbinaryType);
type = parseType(typeManager, "unknown");
assertTrue(type instanceof UnknownType);
}
Aggregations