2020/** A structured option following a {@code CREATE TABLE} definition. */
2121public class TableOption implements Serializable {
2222
23+ private ForeignTableOptions foreignTableOptions ;
24+ private Kind kind = Kind .OTHER ;
25+ private String name ;
26+ private String value ;
27+ private boolean useEquals ;
28+ private List <String > tokens ;
29+ private List <Table > unionTables ;
30+ private List <Index .Option > storageParameters ;
31+ private ColumnOption .Storage tablespaceStorage ;
32+
2333 public enum Kind {
24- ENGINE , CHARACTER_SET , COLLATE , COMMENT , AUTO_INCREMENT , STATS_AUTO_RECALC , STATS_PERSISTENT , STATS_SAMPLE_PAGES , UNION , ENCRYPTION , PASSWORD , DATA_DIRECTORY , INDEX_DIRECTORY , SECONDARY_ENGINE , AUTOEXTEND_SIZE , INSERT_METHOD , PACK_KEYS , DELAY_KEY_WRITE , CHECKSUM , CONNECTION , COMPRESSION , STORAGE_PARAMETERS , WITHOUT_OIDS , ENGINE_ATTRIBUTE , SECONDARY_ENGINE_ATTRIBUTE , ROW_FORMAT , FOREIGN_SERVER , OTHER
34+ ENGINE , CHARACTER_SET , COLLATE , COMMENT , AUTO_INCREMENT , STATS_AUTO_RECALC , STATS_PERSISTENT , STATS_SAMPLE_PAGES , UNION , ENCRYPTION , PASSWORD , DATA_DIRECTORY , INDEX_DIRECTORY , SECONDARY_ENGINE , AUTOEXTEND_SIZE , INSERT_METHOD , PACK_KEYS , DELAY_KEY_WRITE , CHECKSUM , CONNECTION , COMPRESSION , STORAGE_PARAMETERS , WITHOUT_OIDS , ENGINE_ATTRIBUTE , SECONDARY_ENGINE_ATTRIBUTE , ROW_FORMAT , AVG_ROW_LENGTH , MAX_ROWS , MIN_ROWS , KEY_BLOCK_SIZE , TABLESPACE , FOREIGN_SERVER , OTHER
2535 }
2636
27- private ForeignTableOptions foreignTableOptions ;
28-
2937 public ForeignTableOptions getForeignTableOptions () {
3038 return foreignTableOptions ;
3139 }
@@ -36,13 +44,17 @@ public static TableOption foreignServer(ForeignTableOptions options) {
3644 return option ;
3745 }
3846
39- private Kind kind = Kind .OTHER ;
40- private String name ;
41- private String value ;
42- private boolean useEquals ;
43- private List <String > tokens ;
44- private List <Table > unionTables ;
45- private List <Index .Option > storageParameters ;
47+ public ColumnOption .Storage getTablespaceStorage () {
48+ return tablespaceStorage ;
49+ }
50+
51+ public void setTablespaceStorage (ColumnOption .Storage storage ) {
52+ if (storage != null && storage != ColumnOption .Storage .DISK
53+ && storage != ColumnOption .Storage .MEMORY ) {
54+ throw new IllegalArgumentException ("TABLESPACE storage must be DISK or MEMORY" );
55+ }
56+ tablespaceStorage = storage ;
57+ }
4658
4759 public List <Index .Option > getStorageParameters () {
4860 return storageParameters ;
@@ -51,6 +63,7 @@ public List<Index.Option> getStorageParameters() {
5163 public void setStorageParameters (List <Index .Option > storageParameters ) {
5264 this .storageParameters = storageParameters ;
5365 foreignTableOptions = null ;
66+ tablespaceStorage = null ;
5467 kind = Kind .STORAGE_PARAMETERS ;
5568 name = "WITH" ;
5669 value = null ;
@@ -96,6 +109,9 @@ public Kind getKind() {
96109
97110 public void setKind (Kind kind ) {
98111 this .kind = kind ;
112+ if (kind != Kind .TABLESPACE ) {
113+ tablespaceStorage = null ;
114+ }
99115 if (kind != Kind .FOREIGN_SERVER ) {
100116 foreignTableOptions = null ;
101117 }
@@ -141,6 +157,7 @@ public List<Table> getUnionTables() {
141157 public void setUnionTables (List <Table > unionTables ) {
142158 this .unionTables = unionTables ;
143159 foreignTableOptions = null ;
160+ tablespaceStorage = null ;
144161 kind = Kind .UNION ;
145162 name = "UNION" ;
146163 value = null ;
@@ -177,12 +194,17 @@ public List<String> getTokens() {
177194 if (renderedValue != null ) {
178195 result .add (renderedValue );
179196 }
197+ if (kind == Kind .TABLESPACE && tablespaceStorage != null ) {
198+ result .add ("STORAGE" );
199+ result .add (tablespaceStorage .name ());
200+ }
180201 return Collections .unmodifiableList (result );
181202 }
182203
183204 public void setTokens (List <String > tokens ) {
184205 this .tokens = tokens ;
185206 if (tokens != null ) {
207+ tablespaceStorage = null ;
186208 foreignTableOptions = null ;
187209 unionTables = null ;
188210 storageParameters = null ;
@@ -218,6 +240,9 @@ public String toString() {
218240 return PlainSelect .getStringList (tokens , false , false );
219241 }
220242 String renderedValue = getValue ();
221- return name + (renderedValue != null ? (useEquals ? " = " : " " ) + renderedValue : "" );
243+ return name + (renderedValue != null ? (useEquals ? " = " : " " ) + renderedValue : "" )
244+ + (kind == Kind .TABLESPACE && tablespaceStorage != null
245+ ? " STORAGE " + tablespaceStorage
246+ : "" );
222247 }
223248}
0 commit comments