Skip to content

Commit 0efc0fe

Browse files
committed
Merge origin/master
2 parents 1d63481 + 78b601c commit 0efc0fe

File tree

7 files changed

+131
-1
lines changed

7 files changed

+131
-1
lines changed

src/main/java/net/sf/jsqlparser/statement/select/FromItemVisitor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,6 @@ public interface FromItemVisitor {
3434
void visit(LateralSubSelect lateralSubSelect);
3535

3636
void visit(ValuesList valuesList);
37+
38+
void visit(TableFunction tableFunction);
3739
}

src/main/java/net/sf/jsqlparser/statement/select/FromItemVisitorAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,9 @@ public void visit(LateralSubSelect lateralSubSelect) {
4848
public void visit(ValuesList valuesList) {
4949

5050
}
51+
52+
@Override
53+
public void visit(TableFunction valuesList) {
54+
55+
}
5156
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2015 JSQLParser
6+
* %%
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU Lesser General Public License as
9+
* published by the Free Software Foundation, either version 2.1 of the
10+
* License, or (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Lesser Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Lesser Public
18+
* License along with this program. If not, see
19+
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
20+
* #L%
21+
*/
22+
package net.sf.jsqlparser.statement.select;
23+
24+
public class TableFunction extends FunctionItem implements FromItem {
25+
26+
@Override
27+
public void accept(FromItemVisitor fromItemVisitor) {
28+
fromItemVisitor.visit(this);
29+
}
30+
31+
@Override
32+
public Pivot getPivot() {
33+
return null;
34+
}
35+
36+
@Override
37+
public void setPivot(Pivot pivot) {
38+
}
39+
}

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,4 +640,8 @@ public void visit(Merge merge) {
640640
public void visit(OracleHint hint) {
641641
}
642642

643+
@Override
644+
public void visit(TableFunction valuesList) {
645+
}
646+
643647
}

src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,4 +420,9 @@ public void visit(ValuesList valuesList) {
420420
public void visit(AllColumns allColumns) {
421421
buffer.append('*');
422422
}
423+
424+
@Override
425+
public void visit(TableFunction tableFunction) {
426+
buffer.append(tableFunction.toString());
427+
}
423428
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,9 @@ FromItem FromItem():
11001100
")"
11011101
)
11021102
|
1103+
LOOKAHEAD(TableFunction())
1104+
fromItem=TableFunction()
1105+
|
11031106
fromItem=Table()
11041107
|
11051108
fromItem=LateralSubSelect()
@@ -2414,6 +2417,17 @@ MySQLGroupConcat MySQLGroupConcat():{
24142417
}
24152418
}
24162419

2420+
TableFunction TableFunction():
2421+
{
2422+
Alias alias = null;
2423+
Function function;
2424+
TableFunction functionItem;
2425+
}
2426+
{
2427+
function=Function() { functionItem = new TableFunction(); functionItem.setFunction(function); }
2428+
[alias=Alias() { functionItem.setAlias(alias); }]
2429+
{ return functionItem; }
2430+
}
24172431

24182432
SubSelect SubSelect():
24192433
{

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

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2005,5 +2005,66 @@ public void testOracleHintExpression() throws JSQLParserException {
20052005
PlainSelect plainSelect = (PlainSelect) ((Select) parsed).getSelectBody();
20062006
assertExpressionCanBeDeparsedAs(plainSelect.getOracleHint(), "--+ HINT\n");
20072007
}
2008-
2008+
2009+
public void testTableFunctionWithNoParams() throws Exception {
2010+
final String statement = "SELECT f2 FROM SOME_FUNCTION()";
2011+
Select select = (Select) parserManager.parse(new StringReader(statement));
2012+
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
2013+
2014+
assertTrue(plainSelect.getFromItem() instanceof TableFunction);
2015+
TableFunction fromItem = (TableFunction) plainSelect.getFromItem();
2016+
Function function = fromItem.getFunction();
2017+
assertNotNull(function);
2018+
assertEquals("SOME_FUNCTION", function.getName());
2019+
assertNull(function.getParameters());
2020+
assertNull(fromItem.getAlias());
2021+
assertStatementCanBeDeparsedAs(select, statement);
2022+
}
2023+
2024+
public void testTableFunctionWithParams() throws Exception {
2025+
final String statement = "SELECT f2 FROM SOME_FUNCTION(1, 'val')";
2026+
Select select = (Select) parserManager.parse(new StringReader(statement));
2027+
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
2028+
2029+
assertTrue(plainSelect.getFromItem() instanceof TableFunction);
2030+
TableFunction fromItem = (TableFunction) plainSelect.getFromItem();
2031+
Function function = fromItem.getFunction();
2032+
assertNotNull(function);
2033+
assertEquals("SOME_FUNCTION", function.getName());
2034+
2035+
// verify params
2036+
assertNotNull(function.getParameters());
2037+
List<Expression> expressions = function.getParameters().getExpressions();
2038+
assertEquals(2, expressions.size());
2039+
2040+
Expression firstParam = expressions.get(0);
2041+
assertNotNull(firstParam);
2042+
assertTrue(firstParam instanceof LongValue);
2043+
assertEquals(1l, ((LongValue) firstParam).getValue());
2044+
2045+
Expression secondParam = expressions.get(1);
2046+
assertNotNull(secondParam);
2047+
assertTrue(secondParam instanceof StringValue);
2048+
assertEquals("val", ((StringValue) secondParam).getValue());
2049+
2050+
assertNull(fromItem.getAlias());
2051+
assertStatementCanBeDeparsedAs(select, statement);
2052+
}
2053+
2054+
public void testTableFunctionWithAlias() throws Exception {
2055+
final String statement = "SELECT f2 FROM SOME_FUNCTION() AS z";
2056+
Select select = (Select) parserManager.parse(new StringReader(statement));
2057+
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
2058+
2059+
assertTrue(plainSelect.getFromItem() instanceof TableFunction);
2060+
TableFunction fromItem = (TableFunction) plainSelect.getFromItem();
2061+
Function function = fromItem.getFunction();
2062+
assertNotNull(function);
2063+
2064+
assertEquals("SOME_FUNCTION", function.getName());
2065+
assertNull(function.getParameters());
2066+
assertNotNull(fromItem.getAlias());
2067+
assertEquals("z", fromItem.getAlias().getName());
2068+
assertStatementCanBeDeparsedAs(select, statement);
2069+
}
20092070
}

0 commit comments

Comments
 (0)