2121 */
2222package net .sf .jsqlparser .schema ;
2323
24+ import java .util .ArrayList ;
25+ import java .util .Collections ;
26+ import java .util .List ;
2427import net .sf .jsqlparser .expression .*;
2528import net .sf .jsqlparser .parser .ASTNodeAccessImpl ;
2629import net .sf .jsqlparser .statement .select .*;
3033 */
3134public 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
0 commit comments