· 4 years ago · Jun 30, 2021, 05:08 PM
1private static String buildSQL (final Manager manager) {
2 if (manager.getFieldsCache().length == 0) {
3 throw new RuntimeException("An error has occurred: Table '" + manager.getName() + "' must have minimum one column !");
4 }
5
6 final StringJoiner joiner = new StringJoiner(",");
7
8 boolean canUsePrimary = true;
9
10 for (final Field field : manager.getFieldsCache()) {
11 final StringBuilder sb = new StringBuilder(field.getName());
12
13 // Start TYPE and SIZE
14 final Size annotSize = field.getAnnotation(Size.class);
15 final int size = (annotSize != null) ? annotSize.size() : 0;
16
17 new TypeSQL(sb, field.getType(), size);
18
19
20 // Start UNIQUE and PRIMARY
21 boolean canUseUnique = true;
22
23 if (canUsePrimary) {
24 final Primary annotPrimary = field.getAnnotation(Primary.class);
25 if (annotPrimary != null) {
26 canUsePrimary = false;
27 canUseUnique = false;
28 sb.append(" PRIMARY KEY");
29 }
30 }
31
32 if (canUseUnique) {
33 final Unique annotUnique = field.getAnnotation(Unique.class);
34 if (annotUnique != null) {
35 sb.append(" UNIQUE");
36 }
37 }
38
39 // Start NotNULL
40 final NotNull annotNotNull = field.getAnnotation(NotNull.class);
41 if (annotNotNull != null) {
42 sb.append(" NOT NULL");
43 }
44
45 joiner.add(sb);
46 }
47
48 return "CREATE TABLE IF NOT EXISTS `" + manager.getName() + "` (" + joiner + ");";
49 }