private double get( Value value, double defaultValue ) { if( value.equals( Values.NULL ) ) { return defaultValue; } else { return value.asDouble(); } }
public static final Object formatValue(Class<?> clazz, Value value) { if(value.isNull()) return null; if(clazz.isAssignableFrom(Integer.class)) return (Integer)value.asInt(); if(clazz.isAssignableFrom(Short.class)) return Short.valueOf(value.asString()); if(clazz.isAssignableFrom(Character.class)) return (Character)value.asString().charAt(0); if(clazz.isAssignableFrom(Float.class)) return (Float)value.asFloat(); if(clazz.isAssignableFrom(Double.class)) return (Double)value.asDouble(); if(clazz.isAssignableFrom(Long.class)) return (Long)value.asLong(); if(clazz.isAssignableFrom(Number.class)) return value.asNumber(); if(clazz.isAssignableFrom(Boolean.class)) return (Boolean)value.asBoolean(); if(clazz.isAssignableFrom(byte[].class)) return value.asByteArray(); if(clazz.isAssignableFrom(LocalDate.class)) return value.asLocalDate(); if(clazz.isAssignableFrom(LocalTime.class)) return value.asLocalTime(); if(clazz.isAssignableFrom(LocalDateTime.class)) return value.asLocalDateTime(); if(clazz.isAssignableFrom(OffsetTime.class)) return value.asOffsetTime(); if(clazz.isAssignableFrom(IsoDuration.class)) return value.asIsoDuration(); if(clazz.isAssignableFrom(ZonedDateTime.class)) return value.asZonedDateTime(); if(clazz.isAssignableFrom(Date.class)) return LocalDateTimeOperation.toDate().convert(value.asLocalDateTime()); if(clazz.isAssignableFrom(String.class)) return formatToString(value); if(clazz.isAssignableFrom(Enum.class)) return MethodOperation.invoked(null , MethodOperation.getMethod(clazz , "valueOf" , String.class), value.asString()); throw new NotSupportConvertException(); }
@Nonnull private Map<String, Justified> details(@Nonnull Plan plan, @Nonnull Map<String, Integer> columns) { Map<String, Value> args = plan.arguments(); Stream<Optional<Pair<String, Justified>>> formattedPlan = args.entrySet().stream().map((e) -> { Value value = e.getValue(); switch (e.getKey()) { case "EstimatedRows": return mapping(ESTIMATED_ROWS, new Right(format(value.asDouble())), columns); case "Rows": return mapping(ROWS, new Right(value.asNumber().toString()), columns); case "DbHits": return mapping(HITS, new Right(value.asNumber().toString()), columns); case "PageCacheHits": return mapping(PAGE_CACHE, new Right(String.format("%s/%s",value.asNumber(),args.getOrDefault("PageCacheMisses", ZERO_VALUE).asNumber())), columns); case "Time": return mapping(TIME, new Right(String.format("%.3f", value.asLong() / 1000000.0d)), columns); case "Order": return mapping( ORDER, new Left( String.format( "%s", value.asString() ) ), columns ); default: return Optional.empty(); } }); return Stream.concat( formattedPlan, Stream.of( Optional.of(Pair.of(IDENTIFIERS, new Left(identifiers(plan, columns)))), Optional.of(Pair.of(OTHER, new Left(other(plan, columns)))))) .filter(Optional::isPresent) .collect(toMap(o -> o.get()._1, o -> o.get()._2)); }