Skip to content

Commit d928268

Browse files
committed
fixes #1080
1 parent 624f247 commit d928268

File tree

5 files changed

+41
-11
lines changed

5 files changed

+41
-11
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ Also I would like to know about needed examples or documentation stuff.
6767

6868
## Extensions in the latest SNAPSHOT version 4.0
6969

70+
* **Grant** allows now multipart names
7071
* updated JavaCC 7.0.10
7172
* support for **CREATE OR REPLACE** for create function statements
7273
* support for JDBCParameter for interval expressions

src/main/java/net/sf/jsqlparser/statement/grant/Grant.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@
1414
import java.util.Collections;
1515
import java.util.List;
1616
import java.util.Optional;
17+
import static java.util.stream.Collectors.joining;
1718
import net.sf.jsqlparser.statement.Statement;
1819
import net.sf.jsqlparser.statement.StatementVisitor;
1920

2021
public class Grant implements Statement {
2122

2223
private String role;
2324
private List<String> privileges;
24-
private String objectName;
25+
private List<String> objectName = new ArrayList<>();
2526
private List<String> users;
2627

2728
@Override
@@ -46,11 +47,23 @@ public void setPrivileges(List<String> privileges) {
4647
}
4748

4849
public String getObjectName() {
50+
return objectName.size()==0?null:objectName.stream()
51+
.map(part -> part==null?"":part)
52+
.collect(joining("."));
53+
}
54+
55+
public List<String> getObjectNameParts() {
4956
return objectName;
5057
}
5158

5259
public void setObjectName(String objectName) {
53-
this.objectName = objectName;
60+
this.objectName.clear();
61+
this.objectName.add(objectName);
62+
}
63+
64+
public void setObjectName(List<String> objectName) {
65+
this.objectName.clear();
66+
this.objectName.addAll(objectName);
5467
}
5568

5669
public List<String> getUsers() {
@@ -102,6 +115,11 @@ public Grant withObjectName(String objectName) {
102115
this.setObjectName(objectName);
103116
return this;
104117
}
118+
119+
public Grant withObjectName(List<String> objectName) {
120+
this.setObjectName(objectName);
121+
return this;
122+
}
105123

106124
public Grant withUsers(List<String> users) {
107125
this.setUsers(users);

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4919,6 +4919,7 @@ Grant Grant():
49194919
ArrayList<String> privileges = new ArrayList<String>();
49204920
List<String> users;
49214921
Token tk = null;
4922+
List<String> objName;
49224923
}
49234924
{
49244925
<K_GRANT>
@@ -4927,19 +4928,19 @@ Grant Grant():
49274928
[readGrantTypes(privileges) (<K_COMMA> readGrantTypes(privileges))*]
49284929
<K_ON>
49294930
(
4930-
tk=<S_IDENTIFIER> { grant.setObjectName(tk.image); }
4931+
objName=RelObjectNameList() { grant.setObjectName(objName); }
49314932
)
4933+
)
4934+
|
4935+
(
4936+
tk=<S_IDENTIFIER> { grant.setRole(tk.image); }
4937+
)
49324938
)
4933-
|
4934-
(
4935-
tk=<S_IDENTIFIER> { grant.setRole(tk.image); }
4936-
)
4937-
)
49384939
<K_TO> (users = UsersList() {grant.setUsers(users);})
49394940
{
4940-
if(privileges.size() > 0) {
4941-
grant.setPrivileges(privileges);
4942-
}
4941+
if(privileges.size() > 0) {
4942+
grant.setPrivileges(privileges);
4943+
}
49434944
return grant;
49444945
}
49454946
}

src/test/java/net/sf/jsqlparser/statement/grant/GrantTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,9 @@ public void testGrantQueryWithPrivileges() throws JSQLParserException {
9494
public void testGrantQueryWithRole() throws JSQLParserException {
9595
assertSqlCanBeParsedAndDeparsed("GRANT ROLE_1 TO TEST_ROLE_1, TEST_ROLE_2");
9696
}
97+
98+
@Test
99+
public void testGrantSchemaParsingIssue1080() throws JSQLParserException {
100+
assertSqlCanBeParsedAndDeparsed("GRANT SELECT ON schema_name.table_name TO XYZ");
101+
}
97102
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4356,4 +4356,9 @@ public void testExistsKeywordIssue1076() throws JSQLParserException {
43564356
public void testExistsKeywordIssue1076_1() throws JSQLParserException {
43574357
assertSqlCanBeParsedAndDeparsed("SELECT mycol, EXISTS (SELECT mycol FROM mytable) mycol2 FROM mytable");
43584358
}
4359+
4360+
@Test
4361+
public void testFormatKeywordIssue1078() throws JSQLParserException {
4362+
assertSqlCanBeParsedAndDeparsed("SELECT FORMAT(date, 'yyyy-MM') AS year_month FROM mine_table");
4363+
}
43594364
}

0 commit comments

Comments
 (0)