From 22f6a3082d5e9698e3be4208ca68cd6724239fd0 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 23 Nov 2019 16:18:49 +0100 Subject: Interpreter conversions (#26) --- .../pl/edu/mimuw/cloudatlas/interpreter/Interpreter.java | 9 +++++++-- .../edu/mimuw/cloudatlas/interpreter/ResultColumn.java | 16 +++++++++++----- .../pl/edu/mimuw/cloudatlas/model/ValueDuration.java | 8 +++++--- 3 files changed, 23 insertions(+), 10 deletions(-) (limited to 'src/main/java/pl/edu') diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/Interpreter.java b/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/Interpreter.java index 289f99d..6129f48 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/Interpreter.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/Interpreter.java @@ -329,8 +329,13 @@ public class Interpreter { } public Result visit(CondExprAndC expr, Environment env) { - // TODO - throw new UnsupportedOperationException("CondExprAndC Not yet implemented"); + try { + Result left = expr.condexpr_1.accept(new CondExprInterpreter(), env); + Result right = expr.condexpr_2.accept(new CondExprInterpreter(), env); + return left.and(right); + } catch(Exception exception) { + throw new InsideQueryException(PrettyPrinter.print(expr), exception); + } } public Result visit(CondExprNotC expr, Environment env) { diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/ResultColumn.java b/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/ResultColumn.java index b551955..1c0db30 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/ResultColumn.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/interpreter/ResultColumn.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import pl.edu.mimuw.cloudatlas.model.Type; +import pl.edu.mimuw.cloudatlas.model.TypePrimitive; import pl.edu.mimuw.cloudatlas.model.TypeCollection; import pl.edu.mimuw.cloudatlas.model.Value; import pl.edu.mimuw.cloudatlas.model.ValueBoolean; @@ -100,7 +101,7 @@ class ResultColumn extends Result { @Override public Result random(int size) { - return new ResultColumn( + return new ResultSingle( randomList( new ValueList( column, @@ -124,13 +125,18 @@ class ResultColumn extends Result { @Override public ResultSingle isNull() { - throw new UnsupportedOperationException("Operation isNull not supported yet."); - // return new ResultSingle(new ValueBoolean(value.isNull())); + return new ResultSingle(new ValueBoolean(true)); } @Override public Type getType() { - throw new UnsupportedOperationException("Operation getType not supported yet."); - // return value.getType(); + Type type = TypePrimitive.NULL; + for (Value value : column) { + if (value.getType() != TypePrimitive.NULL) { + type = value.getType(); + } + } + + return type; } } diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueDuration.java b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueDuration.java index 7a74776..ad14a30 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueDuration.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueDuration.java @@ -264,9 +264,9 @@ public class ValueDuration extends ValueSimple { remainingUnits /= 24; long days = remainingUnits; - return (positive ? "+" : "-") + Long.toString(days) + " " + Long.toString(hours) - + ":" + Long.toString(minutes) + ":" + Long.toString(seconds) + "." + - Long.toString(milliseconds); + return (positive ? "+" : "-") + String.format("%d %02d:%02d:%02d.%03d", + days, hours, minutes, seconds, milliseconds + ); } @Override @@ -274,6 +274,8 @@ public class ValueDuration extends ValueSimple { switch(type.getPrimaryType()) { case STRING: return getValue() == null? ValueString.NULL_STRING : new ValueString(makeString()); + case INT: + return new ValueInt(getValue() == null? null : getValue()); case DURATION: return this; default: -- cgit v1.2.3