diff options
author | Martin <marcin.j.chrzanowski@gmail.com> | 2019-11-23 16:18:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-23 16:18:49 +0100 |
commit | 22f6a3082d5e9698e3be4208ca68cd6724239fd0 (patch) | |
tree | 6dd78ad1333c18f3b1578b2958d9c7ef687a25c1 /src/main/java/pl/edu/mimuw | |
parent | d683a761b2710a252b0bfb1b3f0879a60247bb50 (diff) |
Interpreter conversions (#26)
Diffstat (limited to 'src/main/java/pl/edu/mimuw')
3 files changed, 23 insertions, 10 deletions
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<Long> { 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<Long> { 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: |