@Override public void open() { TAP_OPEN.in(); try { if (isSkipBinding()) { ValueSource value = bindings.getValue(skip()); if (!value.isNull()) this.skipLeft = value.getInt32(); } else { this.skipLeft = skip(); } if (skipLeft < 0) throw new NegativeLimitException("OFFSET", skipLeft); if (isLimitBinding()) { ValueSource value = bindings.getValue(limit()); if (value.isNull()) this.limitLeft = Integer.MAX_VALUE; else { TInstance type = MNumeric.INT.instance(true); TExecutionContext executionContext = new TExecutionContext(null, type, context); Value ivalue = new Value(MNumeric.INT.instance(true)); MNumeric.INT.fromObject(executionContext, value, ivalue); this.limitLeft = ivalue.getInt32(); } } else { this.limitLeft = limit(); } if (limitLeft < 0) throw new NegativeLimitException("LIMIT", limitLeft); super.open(); } finally { TAP_OPEN.out(); } }
protected ValueSource valueNotNull(int index) { try { ValueSource value = bindings.getValue(index); if (value.isNull()) return null; else return value; } catch (BindingNotSetException ex) { return null; } }
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); } }
/** * Encode the given value into a stream that can then be passed to <code>writeByteStream</code>. */ public ByteArrayOutputStream encodeValue(ValueSource value, ServerType type, boolean binary) throws IOException { if (value.isNull()) return null; if ((zeroDateTimeBehavior != ZeroDateTimeBehavior.NONE) && (((type.getType().typeClass() == MDateAndTime.DATE) && (value.getInt32() == 0)) || ((type.getType().typeClass() == MDateAndTime.DATETIME) && (value.getInt64() == 0)))) { switch (zeroDateTimeBehavior) { case EXCEPTION: throw new ZeroDateTimeException(); case ROUND: value = (type.getType().typeClass() == MDateAndTime.DATETIME) ? ROUND_ZERO_DATETIME_SOURCE : ROUND_ZERO_DATE_SOURCE; break; case CONVERT_TO_NULL: return null; } } reset(); appendValue(value, type, binary); return getByteStream(); }
@Override public void fromObject(TExecutionContext context, ValueSource in, ValueTarget out) { if (in.isNull()) out.putNull(); else if (!tryFromObject(context, in, out)) parser.parse(context, in, out); }