· 10 years ago · Sep 13, 2016, 08:32 AM
1package com.alexfu.sqlitequerybuilder.builder;
2
3import com.alexfu.sqlitequerybuilder.api.Column;
4import com.alexfu.sqlitequerybuilder.api.ForeignKeyConstraint;
5import com.alexfu.sqlitequerybuilder.utils.Preconditions;
6import com.alexfu.sqlitequerybuilder.utils.StringUtils;
7
8import java.util.ArrayList;
9import java.util.List;
10
11public class CreateTableSegmentBuilder extends SegmentBuilder {
12
13 private boolean temp;
14 private boolean ifNotExists;
15 private String name;
16 private final List<Column> definitions = new ArrayList<Column>();
17 private final List<ForeignKeyConstraint> constraints = new ArrayList<ForeignKeyConstraint>();
18
19 public CreateTableSegmentBuilder() {}
20
21 public CreateTableSegmentBuilder temp() {
22 temp = true;
23 return this;
24 }
25
26 public CreateTableSegmentBuilder ifNotExists() {
27 ifNotExists = true;
28 return this;
29 }
30
31 public CreateTableSegmentBuilder column(Column column) {
32 Preconditions.checkArgument(column != null, "A non-null column is required.");
33 definitions.add(column);
34 return this;
35 }
36
37 public CreateTableSegmentBuilder table(String name) {
38 Preconditions.checkNotEmpty(name, "Table name can not be empty.");
39 this.name = name;
40 return this;
41 }
42
43 public CreateTableSegmentBuilder foreignKey(ForeignKeyConstraint constraint) {
44 Preconditions.checkArgument(constraint != null, "A non-null constraint is required.");
45 constraints.add(constraint);
46 return this;
47 }
48
49 @Override
50 public String build() {
51 String head = "CREATE "
52 + (temp ? "TEMP " : "")
53 + "TABLE"
54 + (ifNotExists ? " IF NOT EXISTS" : "");
55
56 String tail = name + "(" + StringUtils.join(",", definitions.toArray()) + ")";
57 if (!constraints.isEmpty()) {
58 String constraint = StringUtils.join(",", constraints.toArray());
59 return StringUtils.join(" ", head, tail, constraint);
60 }
61
62 return StringUtils.join(" ", head, tail);
63 }
64}