1414import net .sf .jsqlparser .statement .select .PlainSelect ;
1515
1616public class PartitionDefinition implements Serializable {
17+
18+ public enum ValueOperator {
19+ LESS_THAN ("VALUES LESS THAN" ), IN ("VALUES IN" );
20+
21+ private final String sql ;
22+
23+ ValueOperator (String sql ) {
24+ this .sql = sql ;
25+ }
26+
27+ @ Override
28+ public String toString () {
29+ return sql ;
30+ }
31+ }
32+
1733 private String partitionName ;
1834 private String partitionOperation ;
1935 private List <String > values ;
2036 private String storageEngine ;
37+ private ValueOperator valueOperator ;
38+ private boolean maxValue ;
39+ private boolean subPartition ;
40+ private boolean storageKeyword ;
41+ private boolean storageEngineUseEquals = true ;
42+ private String comment ;
43+ private boolean commentUseEquals ;
44+ private String dataDirectory ;
45+ private boolean dataDirectoryUseEquals ;
46+ private String indexDirectory ;
47+ private boolean indexDirectoryUseEquals ;
48+ private String maxRows ;
49+ private boolean maxRowsUseEquals ;
50+ private String minRows ;
51+ private boolean minRowsUseEquals ;
52+ private String tablespace ;
53+ private boolean tablespaceUseEquals ;
54+ private List <PartitionDefinition > subPartitionDefinitions ;
55+
56+ public PartitionDefinition () {}
2157
2258 public PartitionDefinition (String partitionName , String partitionOperation ,
2359 List <String > values , String storageEngine ) {
2460 this .partitionName = partitionName ;
25- this . partitionOperation = partitionOperation ;
61+ setPartitionOperation ( partitionOperation ) ;
2662 this .values = values ;
2763 this .storageEngine = storageEngine ;
2864 }
@@ -41,6 +77,13 @@ public String getPartitionOperation() {
4177
4278 public void setPartitionOperation (String partitionOperation ) {
4379 this .partitionOperation = partitionOperation ;
80+ if (ValueOperator .LESS_THAN .toString ().equalsIgnoreCase (partitionOperation )) {
81+ valueOperator = ValueOperator .LESS_THAN ;
82+ } else if (ValueOperator .IN .toString ().equalsIgnoreCase (partitionOperation )) {
83+ valueOperator = ValueOperator .IN ;
84+ } else {
85+ valueOperator = null ;
86+ }
4487 }
4588
4689 public List <String > getValues () {
@@ -59,16 +102,186 @@ public void setStorageEngine(String storageEngine) {
59102 this .storageEngine = storageEngine ;
60103 }
61104
105+ public ValueOperator getValueOperator () {
106+ return valueOperator ;
107+ }
108+
109+ public void setValueOperator (ValueOperator valueOperator ) {
110+ this .valueOperator = valueOperator ;
111+ this .partitionOperation = valueOperator != null ? valueOperator .toString () : null ;
112+ }
113+
114+ public boolean isMaxValue () {
115+ return maxValue ;
116+ }
117+
118+ public void setMaxValue (boolean maxValue ) {
119+ this .maxValue = maxValue ;
120+ }
121+
122+ public boolean isSubPartition () {
123+ return subPartition ;
124+ }
125+
126+ public void setSubPartition (boolean subPartition ) {
127+ this .subPartition = subPartition ;
128+ }
129+
130+ public boolean isStorageKeyword () {
131+ return storageKeyword ;
132+ }
133+
134+ public void setStorageKeyword (boolean storageKeyword ) {
135+ this .storageKeyword = storageKeyword ;
136+ }
137+
138+ public boolean isStorageEngineUseEquals () {
139+ return storageEngineUseEquals ;
140+ }
141+
142+ public void setStorageEngineUseEquals (boolean storageEngineUseEquals ) {
143+ this .storageEngineUseEquals = storageEngineUseEquals ;
144+ }
145+
146+ public String getComment () {
147+ return comment ;
148+ }
149+
150+ public void setComment (String comment ) {
151+ this .comment = comment ;
152+ }
153+
154+ public boolean isCommentUseEquals () {
155+ return commentUseEquals ;
156+ }
157+
158+ public void setCommentUseEquals (boolean commentUseEquals ) {
159+ this .commentUseEquals = commentUseEquals ;
160+ }
161+
162+ public String getDataDirectory () {
163+ return dataDirectory ;
164+ }
165+
166+ public void setDataDirectory (String dataDirectory ) {
167+ this .dataDirectory = dataDirectory ;
168+ }
169+
170+ public boolean isDataDirectoryUseEquals () {
171+ return dataDirectoryUseEquals ;
172+ }
173+
174+ public void setDataDirectoryUseEquals (boolean dataDirectoryUseEquals ) {
175+ this .dataDirectoryUseEquals = dataDirectoryUseEquals ;
176+ }
177+
178+ public String getIndexDirectory () {
179+ return indexDirectory ;
180+ }
181+
182+ public void setIndexDirectory (String indexDirectory ) {
183+ this .indexDirectory = indexDirectory ;
184+ }
185+
186+ public boolean isIndexDirectoryUseEquals () {
187+ return indexDirectoryUseEquals ;
188+ }
189+
190+ public void setIndexDirectoryUseEquals (boolean indexDirectoryUseEquals ) {
191+ this .indexDirectoryUseEquals = indexDirectoryUseEquals ;
192+ }
193+
194+ public String getMaxRows () {
195+ return maxRows ;
196+ }
197+
198+ public void setMaxRows (String maxRows ) {
199+ this .maxRows = maxRows ;
200+ }
201+
202+ public boolean isMaxRowsUseEquals () {
203+ return maxRowsUseEquals ;
204+ }
205+
206+ public void setMaxRowsUseEquals (boolean maxRowsUseEquals ) {
207+ this .maxRowsUseEquals = maxRowsUseEquals ;
208+ }
209+
210+ public String getMinRows () {
211+ return minRows ;
212+ }
213+
214+ public void setMinRows (String minRows ) {
215+ this .minRows = minRows ;
216+ }
217+
218+ public boolean isMinRowsUseEquals () {
219+ return minRowsUseEquals ;
220+ }
221+
222+ public void setMinRowsUseEquals (boolean minRowsUseEquals ) {
223+ this .minRowsUseEquals = minRowsUseEquals ;
224+ }
225+
226+ public String getTablespace () {
227+ return tablespace ;
228+ }
229+
230+ public void setTablespace (String tablespace ) {
231+ this .tablespace = tablespace ;
232+ }
233+
234+ public boolean isTablespaceUseEquals () {
235+ return tablespaceUseEquals ;
236+ }
237+
238+ public void setTablespaceUseEquals (boolean tablespaceUseEquals ) {
239+ this .tablespaceUseEquals = tablespaceUseEquals ;
240+ }
241+
242+ public List <PartitionDefinition > getSubPartitionDefinitions () {
243+ return subPartitionDefinitions ;
244+ }
245+
246+ public void setSubPartitionDefinitions (
247+ List <PartitionDefinition > subPartitionDefinitions ) {
248+ this .subPartitionDefinitions = subPartitionDefinitions ;
249+ }
250+
62251 @ Override
63252 public String toString () {
64253 StringBuilder b = new StringBuilder ();
65- b .append ("PARTITION " ).append (partitionName )
66- .append (" " ).append (partitionOperation )
67- .append (" (" ).append (PlainSelect .getStringList (values ))
68- .append (")" );
254+ b .append (subPartition ? "SUBPARTITION " : "PARTITION " ).append (partitionName );
255+ if (partitionOperation != null ) {
256+ b .append (" " ).append (partitionOperation );
257+ if (maxValue ) {
258+ b .append (" MAXVALUE" );
259+ } else {
260+ b .append (" (" ).append (PlainSelect .getStringList (values )).append (")" );
261+ }
262+ }
69263 if (storageEngine != null ) {
70- b .append (" ENGINE = " ).append (storageEngine );
264+ if (storageKeyword ) {
265+ b .append (" STORAGE" );
266+ }
267+ appendOption (b , "ENGINE" , storageEngine , storageEngineUseEquals );
268+ }
269+ appendOption (b , "COMMENT" , comment , commentUseEquals );
270+ appendOption (b , "DATA DIRECTORY" , dataDirectory , dataDirectoryUseEquals );
271+ appendOption (b , "INDEX DIRECTORY" , indexDirectory , indexDirectoryUseEquals );
272+ appendOption (b , "MAX_ROWS" , maxRows , maxRowsUseEquals );
273+ appendOption (b , "MIN_ROWS" , minRows , minRowsUseEquals );
274+ appendOption (b , "TABLESPACE" , tablespace , tablespaceUseEquals );
275+ if (subPartitionDefinitions != null && !subPartitionDefinitions .isEmpty ()) {
276+ b .append (" " ).append (PlainSelect .getStringList (subPartitionDefinitions , true , true ));
71277 }
72278 return b .toString ();
73279 }
280+
281+ private static void appendOption (StringBuilder builder , String name , String value ,
282+ boolean useEquals ) {
283+ if (value != null ) {
284+ builder .append (" " ).append (name ).append (useEquals ? " = " : " " ).append (value );
285+ }
286+ }
74287}
0 commit comments