@Override protected Boolean visitAtTimeZone(AtTimeZone node, Void context) { return process(node.getValue(), context); }
@Override protected String visitAtTimeZone(AtTimeZone node, Void context) { return new StringBuilder() .append(process(node.getValue(), context)) .append(" AT TIME ZONE ") .append(process(node.getTimeZone(), context)).toString(); }
@Override protected Type visitAtTimeZone(AtTimeZone node, StackableAstVisitorContext<Context> context) { Type valueType = process(node.getValue(), context); process(node.getTimeZone(), context); if (!valueType.equals(TIME_WITH_TIME_ZONE) && !valueType.equals(TIMESTAMP_WITH_TIME_ZONE) && !valueType.equals(TIME) && !valueType.equals(TIMESTAMP)) { throw new SemanticException(TYPE_MISMATCH, node.getValue(), "Type of value must be a time or timestamp with or without time zone (actual %s)", valueType); } Type resultType = valueType; if (valueType.equals(TIME)) { resultType = TIME_WITH_TIME_ZONE; } else if (valueType.equals(TIMESTAMP)) { resultType = TIMESTAMP_WITH_TIME_ZONE; } return setExpressionType(node, resultType); }
@Override protected R visitAtTimeZone(AtTimeZone node, C context) { process(node.getValue(), context); process(node.getTimeZone(), context); return null; }
@Override public Expression rewriteAtTimeZone(AtTimeZone node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { Expression value = treeRewriter.rewrite(node.getValue(), context); Type type = getType(node.getValue()); if (type.equals(TIME)) { value = new Cast(value, TIME_WITH_TIME_ZONE.getDisplayName()); } else if (type.equals(TIMESTAMP)) { value = new Cast(value, TIMESTAMP_WITH_TIME_ZONE.getDisplayName()); } return new FunctionCall(QualifiedName.of("at_timezone"), ImmutableList.of(value, treeRewriter.rewrite(node.getTimeZone(), context))); }
@Override protected String visitAtTimeZone(AtTimeZone node, Void context) { return new StringBuilder() .append(process(node.getValue(), context)) .append(" AT TIME ZONE ") .append(process(node.getTimeZone(), context)).toString(); }
@Override protected String visitAtTimeZone(AtTimeZone node, Void context) { return new StringBuilder() .append(process(node.getValue(), context)) .append(" AT TIME ZONE ") .append(process(node.getTimeZone(), context)).toString(); }
@Override protected String visitAtTimeZone(AtTimeZone node, Boolean context) { return new StringBuilder() .append(process(node.getValue(), context)) .append(" AT TIME ZONE ") .append(process(node.getTimeZone(), context)).toString(); }
@Override protected Type visitAtTimeZone(AtTimeZone node, StackableAstVisitorContext<AnalysisContext> context) { Type valueType = process(node.getValue(), context); process(node.getTimeZone(), context); if (!valueType.equals(TIME_WITH_TIME_ZONE) && !valueType.equals(TIMESTAMP_WITH_TIME_ZONE) && !valueType.equals(TIME) && !valueType.equals(TIMESTAMP)) { throw new SemanticException(TYPE_MISMATCH, node.getValue(), "Type of value must be a time or timestamp with or without time zone (actual %s)", valueType); } Type resultType = valueType; if (valueType.equals(TIME)) { resultType = TIME_WITH_TIME_ZONE; } else if (valueType.equals(TIMESTAMP)) { resultType = TIMESTAMP_WITH_TIME_ZONE; } expressionTypes.put(node, resultType); return resultType; }
@Override protected R visitAtTimeZone(AtTimeZone node, C context) { process(node.getValue(), context); process(node.getTimeZone(), context); return null; }
@Override protected R visitAtTimeZone(AtTimeZone node, C context) { process(node.getValue(), context); process(node.getTimeZone(), context); return null; }
@Override public Expression rewriteAtTimeZone(AtTimeZone node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { Expression value = treeRewriter.rewrite(node.getValue(), context); Type type = expressionTypes.get(value); if (type.equals(TIME)) { value = new Cast(value, TIME_WITH_TIME_ZONE.getDisplayName()); } else if (type.equals(TIMESTAMP)) { value = new Cast(value, TIMESTAMP_WITH_TIME_ZONE.getDisplayName()); } return new FunctionCall(QualifiedName.of("at_timezone"), ImmutableList.of( value, treeRewriter.rewrite(node.getTimeZone(), context))); } }