Skip to content

Commit 1786e21

Browse files
committed
fixes #676
1 parent e32c502 commit 1786e21

File tree

2 files changed

+47
-44
lines changed

2 files changed

+47
-44
lines changed

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2775,13 +2775,13 @@ WindowOffset WindowOffset():
27752775
ExtractExpression ExtractExpression() :
27762776
{
27772777
ExtractExpression retval = new ExtractExpression();
2778-
Token token = null;
2778+
String token = null;
27792779
Expression expr = null;
27802780
}
27812781
{
27822782
<K_EXTRACT>
27832783
"("
2784-
token=<S_IDENTIFIER> { retval.setName(token.image); }
2784+
token=RelObjectName() { retval.setName(token); }
27852785
<K_FROM>
27862786
expr=SimpleExpression() { retval.setExpression(expr); }
27872787
")"

src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package net.sf.jsqlparser.statement.select;
22

3+
import java.io.*;
4+
import java.util.*;
35
import net.sf.jsqlparser.*;
46
import net.sf.jsqlparser.expression.*;
57
import net.sf.jsqlparser.expression.operators.arithmetic.*;
68
import net.sf.jsqlparser.expression.operators.relational.*;
79
import net.sf.jsqlparser.parser.*;
810
import net.sf.jsqlparser.schema.*;
911
import net.sf.jsqlparser.statement.*;
10-
import org.apache.commons.io.*;
11-
12-
import java.io.*;
13-
import java.util.*;
14-
1512
import static net.sf.jsqlparser.test.TestUtils.*;
13+
import org.apache.commons.io.*;
1614
import static org.junit.Assert.assertEquals;
1715
import static org.junit.Assert.assertFalse;
1816
import static org.junit.Assert.assertNotNull;
@@ -1025,7 +1023,7 @@ public void testFunctions() throws JSQLParserException {
10251023
assertTrue(fun.isAllColumns());
10261024
assertStatementCanBeDeparsedAs(select, statement);
10271025
}
1028-
1026+
10291027
@Test
10301028
public void testEscapedFunctionsIssue647() throws JSQLParserException {
10311029
assertSqlCanBeParsedAndDeparsed("SELECT {fn test(0)} AS COL");
@@ -1939,6 +1937,11 @@ public void testExtractFrom4() throws JSQLParserException {
19391937
assertSqlCanBeParsedAndDeparsed(stmt);
19401938
}
19411939

1940+
// @Test
1941+
// public void testExtractFromIssue673() throws JSQLParserException {
1942+
// String stmt = "select EXTRACT(DAY FROM (SYSDATE - to_date('20180101', 'YYYYMMDD' ) ) DAY TO SECOND) from dual";
1943+
// assertSqlCanBeParsedAndDeparsed(stmt);
1944+
// }
19421945
@Test
19431946
public void testProblemFunction() throws JSQLParserException {
19441947
String stmt = "SELECT test() FROM testtable";
@@ -3182,59 +3185,59 @@ public void testSqlContainIsNullFunctionShouldBeParsed() throws JSQLParserExcept
31823185
public void testNestedCast() throws JSQLParserException {
31833186
assertSqlCanBeParsedAndDeparsed("SELECT acolumn::bit (64)::bigint FROM mytable");
31843187
}
3185-
3188+
31863189
@Test
31873190
public void testAndOperator() throws JSQLParserException {
31883191
String stmt = "SELECT name from customers where name = 'John' && lastname = 'Doh'";
31893192
Statement parsed = parserManager.parse(new StringReader(stmt));
31903193
assertStatementCanBeDeparsedAs(parsed, "SELECT name FROM customers WHERE name = 'John' AND lastname = 'Doh'");
31913194
}
3192-
3193-
@Test
3195+
3196+
@Test
31943197
public void testNamedParametersIssue612() throws Exception {
3195-
assertSqlCanBeParsedAndDeparsed( "SELECT a FROM b LIMIT 10 OFFSET :param");
3198+
assertSqlCanBeParsedAndDeparsed("SELECT a FROM b LIMIT 10 OFFSET :param");
31963199
}
3197-
3200+
31983201
@Test
31993202
public void testMissingOffsetIssue620() throws JSQLParserException {
32003203
assertSqlCanBeParsedAndDeparsed("SELECT a, b FROM test OFFSET 0");
32013204
assertSqlCanBeParsedAndDeparsed("SELECT a, b FROM test LIMIT 1 OFFSET 0");
32023205
}
3203-
3206+
32043207
@Test
32053208
public void testMultiPartNames1() throws JSQLParserException {
32063209
assertSqlCanBeParsedAndDeparsed("SELECT a.b");
32073210
}
3208-
3211+
32093212
@Test
32103213
public void testMultiPartNames2() throws JSQLParserException {
32113214
assertSqlCanBeParsedAndDeparsed("SELECT a.b.*");
32123215
}
3213-
3216+
32143217
@Test
32153218
public void testMultiPartNames3() throws JSQLParserException {
32163219
assertSqlCanBeParsedAndDeparsed("SELECT a.*");
32173220
}
3218-
3221+
32193222
@Test
32203223
public void testMultiPartNames4() throws JSQLParserException {
32213224
assertSqlCanBeParsedAndDeparsed("SELECT a.b.c.d.e.f.g.h");
32223225
}
3223-
3226+
32243227
@Test
32253228
public void testMultiPartNames5() throws JSQLParserException {
32263229
assertSqlCanBeParsedAndDeparsed("SELECT * FROM a.b.c.d.e.f.g.h");
32273230
}
3228-
3231+
32293232
@Test
32303233
public void testMultiPartNamesIssue163() throws JSQLParserException {
32313234
assertSqlCanBeParsedAndDeparsed("SELECT mymodel.name FROM com.myproject.MyModelClass AS mymodel");
32323235
}
3233-
3236+
32343237
@Test
32353238
public void testMultiPartNamesIssue608() throws JSQLParserException {
32363239
assertSqlCanBeParsedAndDeparsed("SELECT @@session.tx_read_only");
3237-
}
3240+
}
32383241

32393242
// Teradata allows SEL to be used in place of SELECT
32403243
// Deparse to the non-contracted form
@@ -3245,36 +3248,36 @@ public void testSelContraction() throws JSQLParserException {
32453248
Select select = (Select) parserManager.parse(new StringReader(statementSrc));
32463249
assertStatementCanBeDeparsedAs(select, statementTgt);
32473250
}
3248-
3251+
32493252
@Test
32503253
public void testMultiPartNamesIssue643() throws JSQLParserException {
32513254
assertSqlCanBeParsedAndDeparsed("SELECT id, bid, pid, devnum, pointdesc, sysid, zone, sort FROM fault ORDER BY id DESC LIMIT ?, ?");
32523255
}
32533256

32543257
@Test
32553258
public void testRawStringExpressionIssue656() throws JSQLParserException {
3256-
for(String c : new String[] {"u", "e", "n", "r", "b", "rb"} ) {
3257-
final String prefix = c;
3258-
String sql = "select " + c + "'test' from foo";
3259-
Statement statement = CCJSqlParserUtil.parse(sql);
3260-
assertNotNull(statement);
3261-
statement.accept(new StatementVisitorAdapter() {
3262-
@Override
3263-
public void visit(Select select) {
3264-
select.getSelectBody().accept(new SelectVisitorAdapter() {
3265-
@Override
3266-
public void visit(PlainSelect plainSelect) {
3267-
SelectExpressionItem typedExpression =
3268-
(SelectExpressionItem) plainSelect.getSelectItems().get(0);
3269-
assertNotNull(typedExpression);
3270-
assertNull(typedExpression.getAlias());
3271-
StringValue value = (StringValue) typedExpression.getExpression();
3272-
assertEquals(prefix.toUpperCase(), value.getPrefix());
3273-
assertEquals("test", value.getValue());
3274-
}
3259+
for (String c : new String[]{"u", "e", "n", "r", "b", "rb"}) {
3260+
final String prefix = c;
3261+
String sql = "select " + c + "'test' from foo";
3262+
Statement statement = CCJSqlParserUtil.parse(sql);
3263+
assertNotNull(statement);
3264+
statement.accept(new StatementVisitorAdapter() {
3265+
@Override
3266+
public void visit(Select select) {
3267+
select.getSelectBody().accept(new SelectVisitorAdapter() {
3268+
@Override
3269+
public void visit(PlainSelect plainSelect) {
3270+
SelectExpressionItem typedExpression
3271+
= (SelectExpressionItem) plainSelect.getSelectItems().get(0);
3272+
assertNotNull(typedExpression);
3273+
assertNull(typedExpression.getAlias());
3274+
StringValue value = (StringValue) typedExpression.getExpression();
3275+
assertEquals(prefix.toUpperCase(), value.getPrefix());
3276+
assertEquals("test", value.getValue());
3277+
}
3278+
});
3279+
}
32753280
});
3276-
}
3277-
});
3278-
}
3281+
}
32793282
}
32803283
}

0 commit comments

Comments
 (0)