Skip to content

Commit

Permalink
fixes #944
Browse files Browse the repository at this point in the history
  • Loading branch information
wumpz committed Feb 14, 2020
1 parent 92c74bf commit 22117c4
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 10 deletions.
18 changes: 14 additions & 4 deletions src/main/java/net/sf/jsqlparser/expression/Function.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
*/
package net.sf.jsqlparser.expression;

import java.util.Arrays;
import java.util.List;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.NamedExpressionList;
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
Expand All @@ -18,7 +20,7 @@
*/
public class Function extends ASTNodeAccessImpl implements Expression {

private String name;
private List<String> nameparts;
private ExpressionList parameters;
private NamedExpressionList namedParameters;
private boolean allColumns = false;
Expand All @@ -35,11 +37,19 @@ public void accept(ExpressionVisitor expressionVisitor) {
}

public String getName() {
return name;
return nameparts == null ? null : String.join(".", nameparts);
}

public List<String> getMultipartName() {
return nameparts;
}

public void setName(String string) {
name = string;
nameparts = Arrays.asList(string);
}

public void setName(List<String> string) {
nameparts = string;
}

public boolean isAllColumns() {
Expand Down Expand Up @@ -162,7 +172,7 @@ public String toString() {
params = "()";
}

String ans = name + "" + params + "";
String ans = getName() + "" + params + "";

if (attribute != null) {
ans += "." + attribute.toString();
Expand Down
14 changes: 8 additions & 6 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -1095,7 +1095,7 @@ List<String> RelObjectNameList() : {
String token = null;
List<String> data = new ArrayList<String>();
} {
token = RelObjectName() { data.add(token); }
token = RelObjectNameExt() { data.add(token); }
( LOOKAHEAD (2) "." ("." { data.add(null); })* token = RelObjectNameExt2() { data.add(token); } ) *

{ return data; }
Expand Down Expand Up @@ -3474,7 +3474,7 @@ Function Function() #Function:

Function InternalFunction(Function retval) :
{
String funcName = null;
List<String> funcName;
String tmp = null;
List<Expression> expressions = new ArrayList<Expression>();
ExpressionList expressionList = null;
Expand All @@ -3487,9 +3487,11 @@ Function InternalFunction(Function retval) :
boolean ignoreNulls = false;
}
{
funcName=RelObjectNameExt()

/*funcName=RelObjectNameExt()
[ "." tmp=RelObjectNameExt() { funcName+= "." + tmp; } ["." tmp=RelObjectNameExt() { funcName+= "." + tmp; }]]
*/
funcName = RelObjectNameList()

"(" [ [ LOOKAHEAD(2)(<K_DISTINCT> { retval.setDistinct(true); } | <K_ALL> { retval.setAllColumns(true); }) ]
( LOOKAHEAD(4)
"*" { retval.setAllColumns(true); }
Expand Down Expand Up @@ -3716,7 +3718,7 @@ CreateTable CreateTable():
(parameter = CreateParameter() { createOptions.addAll(parameter); })*

<K_TABLE>
[ <K_IF> <K_NOT> <K_EXISTS> { createTable.setIfNotExists(true); }]
[ LOOKAHEAD(2) <K_IF> <K_NOT> <K_EXISTS> { createTable.setIfNotExists(true); }]
table=Table()
[
("("
Expand Down Expand Up @@ -4116,7 +4118,7 @@ Drop Drop():
)
{ drop.setType(tk.image); }

[<K_IF> <K_EXISTS> {drop.setIfExists(true);} ]
[ LOOKAHEAD(2) <K_IF> <K_EXISTS> {drop.setIfExists(true);} ]

name = Table() { drop.setName(name); }
((tk=<S_IDENTIFIER> | tk=<K_CASCADE> | tk=<K_RESTRICT> ) { dropArgs.add(tk.image); })*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3452,6 +3452,11 @@ public void testMultiPartNamesIssue163() throws JSQLParserException {
public void testMultiPartNamesIssue608() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("SELECT @@sessions.tx_read_only");
}

@Test
public void testMultiPartNamesForFunctionsIssue944() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("SELECT pg_catalog.now()");
}

// Teradata allows SEL to be used in place of SELECT
// Deparse to the non-contracted form
Expand Down

0 comments on commit 22117c4

Please sign in to comment.