public ConstantExpression evalNow(PlanContext planContext, ExpressionNode node) { if (node instanceof ConstantExpression) return (ConstantExpression) node; TPreparedExpression expr = assembleExpression(node, null, null); TPreptimeValue preptimeValue = expr.evaluateConstant(planContext.getQueryContext()); if (preptimeValue == null) throw new AkibanInternalException("required constant expression: " + expr); ValueSource valueSource = preptimeValue.value(); if (valueSource == null) throw new AkibanInternalException("required constant expression: " + expr); if (node instanceof ConditionExpression) { Boolean value = valueSource.isNull() ? null : valueSource.getBoolean(); return new BooleanConstantExpression(value); } else { return new ConstantExpression(preptimeValue); } }
protected boolean tryFromObject(TExecutionContext context, ValueSource in, ValueTarget out) { if (in.getType().equalsExcludingNullable(out.getType())) { ValueTargets.copyFrom(in, out); return true; } UnderlyingType underlyingType = TInstance.underlyingType(in.getType()); if (underlyingType == UnderlyingType.STRING || underlyingType == UnderlyingType.BYTES) return false; final String asString; switch (underlyingType) { case BOOL: asString = Boolean.toString(in.getBoolean()); break; case INT_8: asString = Byte.toString(in.getInt8()); break; case INT_16: asString = Short.toString(in.getInt16()); break; case UINT_16: asString = Integer.toString(in.getUInt16()); break; case INT_32: asString = Integer.toString(in.getInt32()); break; case INT_64: asString = Long.toString(in.getInt64()); break; case FLOAT: asString = Float.toString(in.getFloat()); break; case DOUBLE: asString = Double.toString(in.getDouble()); break; case BYTES: case STRING: default: throw new AssertionError(underlyingType + ": " + in); } parser.parse(context, new Value(MString.varcharFor(asString), asString), out); return true; }
/** Append the given value to the buffer. */ public void appendValue(ValueSource value, ServerType type, boolean binary) throws IOException { if (!binary) { // Handle unusual text encoding of binary types. switch (type.getBinaryEncoding()) { case BINARY_OCTAL_TEXT: processBinaryText(value); break; default: type.getType().format(value, appender); break; } } else { switch (type.getBinaryEncoding()) { case BINARY_OCTAL_TEXT: getByteStream().write(value.getBytes()); break; case INT_8: getDataStream().write((byte) typesTranslator.getIntegerValue(value)); break; case INT_16: getDataStream().writeShort((short) typesTranslator.getIntegerValue(value)); break; case INT_32: getDataStream().writeInt((int) typesTranslator.getIntegerValue(value)); break; case INT_64: getDataStream().writeLong(typesTranslator.getIntegerValue(value)); break; case FLOAT_32: getDataStream().writeFloat(value.getFloat()); break; case FLOAT_64: getDataStream().writeDouble(value.getDouble()); break; case STRING_BYTES: getByteStream().write(value.getString().getBytes(encoding)); break; case BOOLEAN_C: getDataStream().write(value.getBoolean() ? 1 : 0); break; case TIMESTAMP_FLOAT64_SECS_2000_NOTZ: getDataStream() .writeDouble( seconds2000NoTZ(typesTranslator.getTimestampMillisValue(value)) + typesTranslator.getTimestampNanosValue(value) / 1.0e9); break; case TIMESTAMP_INT64_MICROS_2000_NOTZ: getDataStream() .writeLong( seconds2000NoTZ(typesTranslator.getTimestampMillisValue(value)) * 1000000L + typesTranslator.getTimestampNanosValue(value) / 1000); break; case DAYS_2000: getDataStream().writeInt(days2000(typesTranslator.getTimestampMillisValue(value))); break; case TIME_FLOAT64_SECS_NOTZ: getDataStream().writeDouble(timeSecsNoTZ(typesTranslator.getTimestampMillisValue(value))); break; case TIME_INT64_MICROS_NOTZ: getDataStream() .writeLong(timeSecsNoTZ(typesTranslator.getTimestampMillisValue(value)) * 1000000L); break; case DECIMAL_PG_NUMERIC_VAR: for (short d : pgNumericVar(typesTranslator.getDecimalValue(value))) { getDataStream().writeShort(d); } break; case UUID: getDataStream().write(AkGUID.uuidToBytes((java.util.UUID) value.getObject())); break; case NONE: default: throw new UnsupportedOperationException("No binary encoding for " + type); } } }