aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorJames Ahlborn <jtahlborn@yahoo.com>2018-07-17 02:27:04 +0000
committerJames Ahlborn <jtahlborn@yahoo.com>2018-07-17 02:27:04 +0000
commit37338c5a25a74244ac95cbcc1f1ab4e1e5b649d1 (patch)
tree4a0187ebca4ef7386a2dc52c3a2241b85e9ada9a /src/main/java
parent0dc74ed6799971c4cdcb8470bf94c59f4259a9ed (diff)
downloadjackcess-37338c5a25a74244ac95cbcc1f1ab4e1e5b649d1.tar.gz
jackcess-37338c5a25a74244ac95cbcc1f1ab4e1e5b649d1.zip
add ability to get original expression; implement some parsing tests
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@1181 f203690c-595d-4dc9-a70b-905162fa7fd2
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/healthmarketscience/jackcess/expr/Expression.java4
-rw-r--r--src/main/java/com/healthmarketscience/jackcess/impl/BaseEvalContext.java4
-rw-r--r--src/main/java/com/healthmarketscience/jackcess/impl/expr/Expressionator.java37
3 files changed, 29 insertions, 16 deletions
diff --git a/src/main/java/com/healthmarketscience/jackcess/expr/Expression.java b/src/main/java/com/healthmarketscience/jackcess/expr/Expression.java
index 09fd03b..963af7b 100644
--- a/src/main/java/com/healthmarketscience/jackcess/expr/Expression.java
+++ b/src/main/java/com/healthmarketscience/jackcess/expr/Expression.java
@@ -22,12 +22,14 @@ import java.util.Collection;
*
* @author James Ahlborn
*/
-public interface Expression
+public interface Expression
{
public Object eval(EvalContext ctx);
public String toDebugString();
+ public String toRawString();
+
public boolean isConstant();
public void collectIdentifiers(Collection<Identifier> identifiers);
diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/BaseEvalContext.java b/src/main/java/com/healthmarketscience/jackcess/impl/BaseEvalContext.java
index 640be96..4566225 100644
--- a/src/main/java/com/healthmarketscience/jackcess/impl/BaseEvalContext.java
+++ b/src/main/java/com/healthmarketscience/jackcess/impl/BaseEvalContext.java
@@ -195,6 +195,10 @@ public abstract class BaseEvalContext implements EvalContext
return "<raw>{" + _exprStr + "}";
}
+ public String toRawString() {
+ return _exprStr;
+ }
+
public boolean isConstant() {
return getExpr().isConstant();
}
diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/expr/Expressionator.java b/src/main/java/com/healthmarketscience/jackcess/impl/expr/Expressionator.java
index c9af948..04c8aa0 100644
--- a/src/main/java/com/healthmarketscience/jackcess/impl/expr/Expressionator.java
+++ b/src/main/java/com/healthmarketscience/jackcess/impl/expr/Expressionator.java
@@ -427,7 +427,7 @@ public class Expressionator
// this is handled as a literal string value, not an expression. no
// need to memo-ize cause it's a simple literal value
- return new ExprWrapper(
+ return new ExprWrapper(exprStr,
new ELiteralValue(Value.Type.STRING, exprStr, null), resultType);
}
@@ -447,15 +447,15 @@ public class Expressionator
return (expr.isConstant() ?
// for now, just cache at top-level for speed (could in theory
// cache intermediate values?)
- new MemoizedExprWrapper(expr, resultType) :
- new ExprWrapper(expr, resultType));
+ new MemoizedExprWrapper(exprStr, expr, resultType) :
+ new ExprWrapper(exprStr, expr, resultType));
case FIELD_VALIDATOR:
case RECORD_VALIDATOR:
return (expr.isConstant() ?
// for now, just cache at top-level for speed (could in theory
// cache intermediate values?)
- new MemoizedCondExprWrapper(expr) :
- new CondExprWrapper(expr));
+ new MemoizedCondExprWrapper(exprStr, expr) :
+ new CondExprWrapper(exprStr, expr));
default:
throw new ParseException("unexpected expression type " + exprType);
}
@@ -910,7 +910,7 @@ public class Expressionator
t = buf.next();
}
if(!isDelim(t, OPEN_PAREN)) {
- throw new ParseException("Malformed In expression " + buf);
+ throw new ParseException("Malformed 'In' expression " + buf);
}
List<Expr> exprs = findParenExprs(buf, true);
@@ -2007,9 +2007,11 @@ public class Expressionator
*/
private static abstract class BaseExprWrapper implements Expression
{
+ private final String _rawExprStr;
private final Expr _expr;
- private BaseExprWrapper(Expr expr) {
+ private BaseExprWrapper(String rawExprStr, Expr expr) {
+ _rawExprStr = rawExprStr;
_expr = expr;
}
@@ -2017,6 +2019,10 @@ public class Expressionator
return _expr.toDebugString();
}
+ public String toRawString() {
+ return _rawExprStr;
+ }
+
public boolean isConstant() {
return _expr.isConstant();
}
@@ -2080,8 +2086,8 @@ public class Expressionator
{
private final Value.Type _resultType;
- private ExprWrapper(Expr expr, Value.Type resultType) {
- super(expr);
+ private ExprWrapper(String rawExprStr, Expr expr, Value.Type resultType) {
+ super(rawExprStr, expr);
_resultType = resultType;
}
@@ -2096,8 +2102,8 @@ public class Expressionator
*/
private static class CondExprWrapper extends BaseExprWrapper
{
- private CondExprWrapper(Expr expr) {
- super(expr);
+ private CondExprWrapper(String rawExprStr, Expr expr) {
+ super(rawExprStr, expr);
}
public Object eval(EvalContext ctx) {
@@ -2113,8 +2119,9 @@ public class Expressionator
{
private Object _val;
- private MemoizedExprWrapper(Expr expr, Value.Type resultType) {
- super(expr, resultType);
+ private MemoizedExprWrapper(String rawExprStr, Expr expr,
+ Value.Type resultType) {
+ super(rawExprStr, expr, resultType);
}
@Override
@@ -2134,8 +2141,8 @@ public class Expressionator
{
private Object _val;
- private MemoizedCondExprWrapper(Expr expr) {
- super(expr);
+ private MemoizedCondExprWrapper(String rawExprStr, Expr expr) {
+ super(rawExprStr, expr);
}
@Override