Skip to content

Commit 3c8c900

Browse files
committed
Added ForeignKeys to tables
1 parent 7d8fe1a commit 3c8c900

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package me.cobeine.sqlava.connection.database.table;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
/**
7+
* @author <a href="https://github.com/Cobeine">Cobeine</a>
8+
*/
9+
@RequiredArgsConstructor
10+
public class ForeignKey {
11+
final String foreignKey;
12+
String referencedColumn;
13+
String referencedTable;
14+
OnDelete onDelete;
15+
16+
17+
public static ForeignKey foreignKey(String foreignKey) {
18+
return new ForeignKey(foreignKey);
19+
}
20+
21+
public ForeignKey references(String referencedTable, String referencedColumn) {
22+
this.referencedTable = referencedTable;
23+
this.referencedColumn = referencedColumn;
24+
return this;
25+
}
26+
27+
public ForeignKey onDelete(OnDelete onDelete) {
28+
this.onDelete = onDelete;
29+
return this;
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package me.cobeine.sqlava.connection.database.table;
2+
3+
/**
4+
* @author <a href="https://github.com/Cobeine">Cobeine</a>
5+
*/
6+
7+
public enum OnDelete {
8+
CASCADE, SET_NULL, RESTRICT, NO_ACTION, SET_DEFAULT, DO_NOTHING
9+
10+
}

src/main/java/me/cobeine/sqlava/connection/database/table/Table.java

+19
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,24 @@ public abstract class Table {
1616
@Getter private final String name;
1717
private final List<Column> columns;
1818
private String primaryKey;
19+
private final List<ForeignKey> foreignKeys;
1920

2021
public Table(String name) {
2122
this.name = name;
2223
this.columns = new ArrayList<>();
24+
this.foreignKeys = new ArrayList<>();
2325
}
2426

2527
public void addColumn(@NotNull Column column) {
2628
this.columns.add(column);
2729
}
2830

31+
private ForeignKey foreignKey(String key) {
32+
ForeignKey entry = new ForeignKey(key);
33+
foreignKeys.add(entry);
34+
return entry;
35+
}
36+
2937
public void addColumns(@NotNull Column... columns) {
3038
for (Column column : columns) {
3139
addColumn(column);
@@ -52,6 +60,17 @@ public String toString() {
5260
builder.deleteCharAt(builder.length() - 1);
5361
builder.deleteCharAt(builder.length() - 1); //to remove the last ", "
5462
}
63+
if (!foreignKeys.isEmpty()) {
64+
for (ForeignKey entry : foreignKeys) {
65+
if (entry.referencedColumn != null) {
66+
builder.append(", FOREIGN KEY (`").append(entry.foreignKey).append("`)");
67+
builder.append(" REFERENCES `").append(entry.referencedTable).append("`(`").append(entry.referencedColumn).append("`)");
68+
if (entry.onDelete != null) {
69+
builder.append(" ON DELETE ").append(entry.onDelete.name().replace("_"," "));
70+
}
71+
}
72+
}
73+
}
5574
builder.append(")");
5675
return builder.toString();
5776
}

0 commit comments

Comments
 (0)