Skip to content

Commit 2fab860

Browse files
committed
first try dotted
1 parent 645d06e commit 2fab860

File tree

4 files changed

+100
-45
lines changed

4 files changed

+100
-45
lines changed

src/main/java/net/sf/jsqlparser/schema/Column.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package net.sf.jsqlparser.schema;
2323

24+
import java.util.List;
2425
import net.sf.jsqlparser.expression.*;
2526
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
2627

@@ -40,6 +41,12 @@ public Column(Table table, String columnName) {
4041
setColumnName(columnName);
4142
}
4243

44+
public Column(List<String> nameParts) {
45+
this(nameParts.size() > 1
46+
? new Table(nameParts.subList(0, nameParts.size() - 1)) : null,
47+
nameParts.get(nameParts.size() - 1));
48+
}
49+
4350
public Column(String columnName) {
4451
this(null, columnName);
4552
}

src/main/java/net/sf/jsqlparser/schema/Table.java

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
*/
2222
package net.sf.jsqlparser.schema;
2323

24+
import java.util.ArrayList;
25+
import java.util.Collections;
26+
import java.util.List;
2427
import net.sf.jsqlparser.expression.*;
2528
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
2629
import net.sf.jsqlparser.statement.select.*;
@@ -30,9 +33,15 @@
3033
*/
3134
public class Table extends ASTNodeAccessImpl implements FromItem, MultiPartName {
3235

33-
private Database database;
34-
private String schemaName;
35-
private String name;
36+
// private Database database;
37+
// private String schemaName;
38+
// private String name;
39+
private static final int NAME_IDX = 0;
40+
private static final int SCHEMA_IDX = 1;
41+
private static final int DATABASE_IDX = 2;
42+
private static final int SERVER_IDX = 3;
43+
44+
private List<String> partItems = new ArrayList<>();
3645

3746
private Alias alias;
3847
private Pivot pivot;
@@ -42,42 +51,48 @@ public Table() {
4251
}
4352

4453
public Table(String name) {
45-
this.name = name;
54+
setIndex(NAME_IDX, name);
4655
}
4756

4857
public Table(String schemaName, String name) {
49-
this.schemaName = schemaName;
50-
this.name = name;
58+
setIndex(NAME_IDX, name);
59+
setIndex(SCHEMA_IDX, schemaName);
5160
}
5261

5362
public Table(Database database, String schemaName, String name) {
54-
this.database = database;
55-
this.schemaName = schemaName;
56-
this.name = name;
63+
setIndex(NAME_IDX, name);
64+
setIndex(SCHEMA_IDX, schemaName);
65+
setIndex(DATABASE_IDX, database.getDatabaseName());
66+
setIndex(SERVER_IDX, database.getServer().getFullyQualifiedName());
67+
}
68+
69+
public Table(List<String> partItems) {
70+
this.partItems = new ArrayList<>(partItems);
71+
Collections.reverse(this.partItems);
5772
}
5873

5974
public Database getDatabase() {
60-
return database;
75+
return new Database(getIndex(DATABASE_IDX));
6176
}
6277

6378
public void setDatabase(Database database) {
64-
this.database = database;
79+
setIndex(DATABASE_IDX, database.getDatabaseName());
6580
}
6681

6782
public String getSchemaName() {
68-
return schemaName;
83+
return getIndex(SCHEMA_IDX);
6984
}
7085

7186
public void setSchemaName(String string) {
72-
schemaName = string;
87+
setIndex(SCHEMA_IDX, string);
7388
}
7489

7590
public String getName() {
76-
return name;
91+
return getIndex(NAME_IDX);
7792
}
7893

7994
public void setName(String string) {
80-
name = string;
95+
setIndex(NAME_IDX, string);
8196
}
8297

8398
@Override
@@ -90,29 +105,37 @@ public void setAlias(Alias alias) {
90105
this.alias = alias;
91106
}
92107

93-
@Override
94-
public String getFullyQualifiedName() {
95-
String fqn = "";
96-
97-
if (database != null) {
98-
fqn += database.getFullyQualifiedName();
99-
}
100-
if (!fqn.isEmpty()) {
101-
fqn += ".";
108+
private void setIndex(int idx, String value) {
109+
for (int i = 0; i < idx - partItems.size() + 1; i++) {
110+
partItems.add(null);
102111
}
112+
partItems.set(idx, value);
113+
}
103114

104-
if (schemaName != null) {
105-
fqn += schemaName;
106-
}
107-
if (!fqn.isEmpty()) {
108-
fqn += ".";
115+
private String getIndex(int idx) {
116+
if (idx < partItems.size()) {
117+
return partItems.get(idx);
118+
} else {
119+
return null;
109120
}
121+
}
110122

111-
if (name != null) {
112-
fqn += name;
123+
@Override
124+
public String getFullyQualifiedName() {
125+
StringBuilder fqn = new StringBuilder();
126+
127+
for (int i = partItems.size()-1 ; i >=0; i--) {
128+
String part = partItems.get(i);
129+
if (part == null) {
130+
part = "";
131+
}
132+
fqn.append(part);
133+
if (i != 0) {
134+
fqn.append(".");
135+
}
113136
}
114137

115-
return fqn;
138+
return fqn.toString();
116139
}
117140

118141
@Override

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

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -922,17 +922,22 @@ MergeInsert MergeInsertClause() : {
922922

923923
Column Column() #Column :
924924
{
925-
String databaseName = null, schemaName = null, tableName = null, columnName = null;
925+
//String databaseName = null, schemaName = null, tableName = null, columnName = null;
926926
String token = null;
927+
List<String> data = new ArrayList<String>();
927928
}
928929
{
929-
columnName = RelObjectName()
930+
token = RelObjectName() { data.add(token); }
931+
( LOOKAHEAD (2) "." token = RelObjectName() { data.add(token); } ) *
932+
933+
/*columnName = RelObjectName()
930934
( "." [LOOKAHEAD(2) token = RelObjectName()] { tableName = columnName; columnName = token; token = null;}
931935
( "." token = RelObjectName() { schemaName = tableName; tableName = columnName; columnName = token; token = null;}
932936
( "." token = RelObjectName() { databaseName = schemaName; schemaName = tableName; tableName = columnName; columnName = token; }
933937
)?
934938
)?
935939
)?
940+
*/
936941

937942
/*(
938943
LOOKAHEAD(7) databaseName=RelObjectName() "." [schemaName=RelObjectName()] "." tableName=RelObjectName() "." columnName=RelObjectName()
@@ -942,13 +947,13 @@ Column Column() #Column :
942947
)*/
943948

944949
{
945-
if (tableName==null && (databaseName!=null || schemaName!=null)) {
950+
/*if (tableName==null && (databaseName!=null || schemaName!=null)) {
946951
throw generateParseException();
947-
}
952+
}*/
948953

949-
final Database database = new Database(databaseName);
950-
final Table table = new Table(database, schemaName, tableName);
951-
Column col = new Column(table, columnName);
954+
//final Database database = new Database(databaseName);
955+
//final Table table = new Table(database, schemaName, tableName);
956+
Column col = new Column(data);
952957
linkAST(col,jjtThis);
953958
return col;
954959
}
@@ -1022,19 +1027,24 @@ String RelObjectNameExt2():
10221027

10231028
Table Table() #Table :
10241029
{
1025-
String serverName = null, databaseName = null, schemaName = null, tableName = null;
1030+
//String serverName = null, databaseName = null, schemaName = null, tableName = null;
1031+
List<String> data = new ArrayList<String>();
1032+
String token;
10261033
}
10271034
{
1028-
(
1035+
token = RelObjectName() { data.add(token); }
1036+
( LOOKAHEAD(2) "." token = RelObjectName() { data.add(token); } ) *
1037+
1038+
/* (
10291039
LOOKAHEAD(7) serverName=RelObjectName() "." [databaseName=RelObjectName()] "." [schemaName=RelObjectName()] "." tableName=RelObjectName()
10301040
| LOOKAHEAD(5) databaseName=RelObjectName() "." [schemaName=RelObjectName()] "." tableName=RelObjectName()
10311041
| LOOKAHEAD(3) schemaName=RelObjectName() "." tableName=RelObjectName()
10321042
| tableName=RelObjectName()
1033-
)
1043+
)*/
10341044
{
1035-
final Server server = new Server(serverName);
1036-
final Database database = new Database(server, databaseName);
1037-
Table table = new Table(database, schemaName, tableName);
1045+
//final Server server = new Server(serverName);
1046+
//final Database database = new Database(server, databaseName);
1047+
Table table = new Table(data);
10381048
return table;
10391049
}
10401050
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3177,4 +3177,19 @@ public void testMissingOffsetIssue620() throws JSQLParserException {
31773177
assertSqlCanBeParsedAndDeparsed("SELECT a, b FROM test OFFSET 0");
31783178
assertSqlCanBeParsedAndDeparsed("SELECT a, b FROM test LIMIT 1 OFFSET 0");
31793179
}
3180+
3181+
@Test
3182+
public void testMultiPartNames1() throws JSQLParserException {
3183+
assertSqlCanBeParsedAndDeparsed("SELECT a.b");
3184+
}
3185+
3186+
@Test
3187+
public void testMultiPartNames2() throws JSQLParserException {
3188+
assertSqlCanBeParsedAndDeparsed("SELECT a.b.*");
3189+
}
3190+
3191+
@Test
3192+
public void testMultiPartNames3() throws JSQLParserException {
3193+
assertSqlCanBeParsedAndDeparsed("SELECT a.*");
3194+
}
31803195
}

0 commit comments

Comments
 (0)