Skip to content

Commit 22117c4

Browse files
committed
fixes #944
1 parent 92c74bf commit 22117c4

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

src/main/java/net/sf/jsqlparser/expression/Function.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
*/
1010
package net.sf.jsqlparser.expression;
1111

12+
import java.util.Arrays;
13+
import java.util.List;
1214
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
1315
import net.sf.jsqlparser.expression.operators.relational.NamedExpressionList;
1416
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
@@ -18,7 +20,7 @@
1820
*/
1921
public class Function extends ASTNodeAccessImpl implements Expression {
2022

21-
private String name;
23+
private List<String> nameparts;
2224
private ExpressionList parameters;
2325
private NamedExpressionList namedParameters;
2426
private boolean allColumns = false;
@@ -35,11 +37,19 @@ public void accept(ExpressionVisitor expressionVisitor) {
3537
}
3638

3739
public String getName() {
38-
return name;
40+
return nameparts == null ? null : String.join(".", nameparts);
41+
}
42+
43+
public List<String> getMultipartName() {
44+
return nameparts;
3945
}
4046

4147
public void setName(String string) {
42-
name = string;
48+
nameparts = Arrays.asList(string);
49+
}
50+
51+
public void setName(List<String> string) {
52+
nameparts = string;
4353
}
4454

4555
public boolean isAllColumns() {
@@ -162,7 +172,7 @@ public String toString() {
162172
params = "()";
163173
}
164174

165-
String ans = name + "" + params + "";
175+
String ans = getName() + "" + params + "";
166176

167177
if (attribute != null) {
168178
ans += "." + attribute.toString();

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,7 +1095,7 @@ List<String> RelObjectNameList() : {
10951095
String token = null;
10961096
List<String> data = new ArrayList<String>();
10971097
} {
1098-
token = RelObjectName() { data.add(token); }
1098+
token = RelObjectNameExt() { data.add(token); }
10991099
( LOOKAHEAD (2) "." ("." { data.add(null); })* token = RelObjectNameExt2() { data.add(token); } ) *
11001100

11011101
{ return data; }
@@ -3474,7 +3474,7 @@ Function Function() #Function:
34743474

34753475
Function InternalFunction(Function retval) :
34763476
{
3477-
String funcName = null;
3477+
List<String> funcName;
34783478
String tmp = null;
34793479
List<Expression> expressions = new ArrayList<Expression>();
34803480
ExpressionList expressionList = null;
@@ -3487,9 +3487,11 @@ Function InternalFunction(Function retval) :
34873487
boolean ignoreNulls = false;
34883488
}
34893489
{
3490-
funcName=RelObjectNameExt()
3491-
3490+
/*funcName=RelObjectNameExt()
34923491
[ "." tmp=RelObjectNameExt() { funcName+= "." + tmp; } ["." tmp=RelObjectNameExt() { funcName+= "." + tmp; }]]
3492+
*/
3493+
funcName = RelObjectNameList()
3494+
34933495
"(" [ [ LOOKAHEAD(2)(<K_DISTINCT> { retval.setDistinct(true); } | <K_ALL> { retval.setAllColumns(true); }) ]
34943496
( LOOKAHEAD(4)
34953497
"*" { retval.setAllColumns(true); }
@@ -3716,7 +3718,7 @@ CreateTable CreateTable():
37163718
(parameter = CreateParameter() { createOptions.addAll(parameter); })*
37173719

37183720
<K_TABLE>
3719-
[ <K_IF> <K_NOT> <K_EXISTS> { createTable.setIfNotExists(true); }]
3721+
[ LOOKAHEAD(2) <K_IF> <K_NOT> <K_EXISTS> { createTable.setIfNotExists(true); }]
37203722
table=Table()
37213723
[
37223724
("("
@@ -4116,7 +4118,7 @@ Drop Drop():
41164118
)
41174119
{ drop.setType(tk.image); }
41184120

4119-
[<K_IF> <K_EXISTS> {drop.setIfExists(true);} ]
4121+
[ LOOKAHEAD(2) <K_IF> <K_EXISTS> {drop.setIfExists(true);} ]
41204122

41214123
name = Table() { drop.setName(name); }
41224124
((tk=<S_IDENTIFIER> | tk=<K_CASCADE> | tk=<K_RESTRICT> ) { dropArgs.add(tk.image); })*

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3452,6 +3452,11 @@ public void testMultiPartNamesIssue163() throws JSQLParserException {
34523452
public void testMultiPartNamesIssue608() throws JSQLParserException {
34533453
assertSqlCanBeParsedAndDeparsed("SELECT @@sessions.tx_read_only");
34543454
}
3455+
3456+
@Test
3457+
public void testMultiPartNamesForFunctionsIssue944() throws JSQLParserException {
3458+
assertSqlCanBeParsedAndDeparsed("SELECT pg_catalog.now()");
3459+
}
34553460

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

0 commit comments

Comments
 (0)