From 35164e58c437fdcc90e905325c371a2cce5868d5 Mon Sep 17 00:00:00 2001 From: wumpz Date: Mon, 11 May 2015 00:02:24 +0200 Subject: [PATCH] fixes #69 --- .../sf/jsqlparser/expression/IntervalExpression.java | 11 ++++++++++- .../javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj | 1 + .../net/sf/jsqlparser/test/select/SelectTest.java | 5 +++++ .../sf/jsqlparser/test/select/SpecialOracleTest.java | 2 +- .../sf/jsqlparser/test/oracle-tests/interval04.sql | 2 +- 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/expression/IntervalExpression.java b/src/main/java/net/sf/jsqlparser/expression/IntervalExpression.java index a8470307b..bec7ade89 100644 --- a/src/main/java/net/sf/jsqlparser/expression/IntervalExpression.java +++ b/src/main/java/net/sf/jsqlparser/expression/IntervalExpression.java @@ -27,6 +27,7 @@ */ public class IntervalExpression implements Expression { private String parameter = null; + private String intervalType = null; public String getParameter() { return parameter; @@ -35,10 +36,18 @@ public String getParameter() { public void setParameter(String parameter) { this.parameter = parameter; } + + public String getIntervalType() { + return intervalType; + } + + public void setIntervalType(String intervalType) { + this.intervalType = intervalType; + } @Override public String toString() { - return "INTERVAL " + parameter; + return "INTERVAL " + parameter + (intervalType!=null?" " + intervalType:""); } @Override diff --git a/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj b/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj index 36b66b841..6c842bef5 100644 --- a/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj +++ b/src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj @@ -1880,6 +1880,7 @@ IntervalExpression IntervalExpression() : { } { token= { interval.setParameter(token.image); } + [ LOOKAHEAD(2) token = { interval.setIntervalType(token.image); } ] { return interval; } diff --git a/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java index a7bec9a59..63e86b106 100644 --- a/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java @@ -1460,6 +1460,11 @@ public void testInterval2() throws JSQLParserException { assertEquals("'45 MINUTE'", iexpr.getParameter()); } + + public void testInterval3() throws JSQLParserException { + String stmt = "SELECT 5 + INTERVAL '3' day"; + assertSqlCanBeParsedAndDeparsed(stmt); + } public void testMultiValueIn() throws JSQLParserException { String stmt = "SELECT * FROM mytable WHERE (a, b, c) IN (SELECT a, b, c FROM mytable2)"; diff --git a/src/test/java/net/sf/jsqlparser/test/select/SpecialOracleTest.java b/src/test/java/net/sf/jsqlparser/test/select/SpecialOracleTest.java index 05ccea979..c03531abe 100644 --- a/src/test/java/net/sf/jsqlparser/test/select/SpecialOracleTest.java +++ b/src/test/java/net/sf/jsqlparser/test/select/SpecialOracleTest.java @@ -68,7 +68,7 @@ public void testAllSqlsParseDeparse() throws IOException { } LOG.log(Level.INFO, "tested {0} files. got {1} correct parse results", new Object[]{count, success}); - assertTrue(success>=127); + assertTrue(success>=128); } @Test diff --git a/src/test/resources/net/sf/jsqlparser/test/oracle-tests/interval04.sql b/src/test/resources/net/sf/jsqlparser/test/oracle-tests/interval04.sql index e8b1e35cf..920251681 100644 --- a/src/test/resources/net/sf/jsqlparser/test/oracle-tests/interval04.sql +++ b/src/test/resources/net/sf/jsqlparser/test/oracle-tests/interval04.sql @@ -1 +1 @@ -select interval'20' day - interval'240' hour from dual +select interval '20' day - interval '240' hour from dual