Skip to content

Commit f3f8412

Browse files
committed
SQLiteColumnQueryBuilder
1 parent 5e3502f commit f3f8412

5 files changed

Lines changed: 49 additions & 8 deletions

File tree

api/src/main/java/me/zort/sqllib/api/model/TableSchema.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ public String[] getDefinitions() {
3535
return definitions;
3636
}
3737

38+
public String[] getDefinitionNames() {
39+
String[] definitions = new String[this.definitions.length];
40+
for (int i = 0; i < definitions.length; i++) {
41+
definitions[i] = getDefinitionName(i);
42+
}
43+
return definitions;
44+
}
45+
3846
public String getTable() {
3947
return table;
4048
}

core/src/main/java/me/zort/sqllib/SQLConnectionBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public SQLConnectionBuilder(@Nullable SQLEndpoint endpoint) {
9898
if (driver == null) driver = SQLDatabaseConnectionImpl.DEFAULT_DRIVER;
9999
SQLConnectionFactory connectionFactory = new LocalConnectionFactory(driver);
100100
return jdbc.contains("jdbc:sqlite")
101-
? new SQLiteDatabaseConnectionImpl(connectionFactory, options)
101+
? new SQLiteDatabaseConnection(connectionFactory, options)
102102
: new SQLDatabaseConnectionImpl(connectionFactory, options);
103103
}
104104

core/src/main/java/me/zort/sqllib/SQLDatabaseConnectionImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public boolean synchronizeModel() {
191191
return mappingRegistry.getProxyInstances()
192192
.stream().flatMap(i -> i.getTableSchemas(
193193
getOptions().getNamingStrategy(),
194-
this instanceof SQLiteDatabaseConnectionImpl).stream())
194+
this instanceof SQLiteDatabaseConnection).stream())
195195
.anyMatch(schema -> synchronizeModel(schema, schema.getTable()));
196196
}
197197

@@ -227,7 +227,7 @@ public boolean synchronizeModel(TableSchema entitySchema, String table) {
227227
public boolean synchronizeModel(Class<?> entity, String table) {
228228
return synchronizeModel(new EntitySchemaBuilder(table, entity,
229229
getOptions().getNamingStrategy(),
230-
this instanceof SQLiteDatabaseConnectionImpl).buildTableSchema(), table);
230+
this instanceof SQLiteDatabaseConnection).buildTableSchema(), table);
231231
}
232232

233233
/**
@@ -332,7 +332,7 @@ public final <T> T createProxy(final @NotNull Class<T> mappingInterface, final @
332332
public final boolean buildEntitySchema(final @NotNull String tableName, final @NotNull Class<?> entityClass) {
333333
Objects.requireNonNull(entityClass, "Entity class cannot be null!");
334334

335-
EntitySchemaBuilder converter = new EntitySchemaBuilder(tableName, entityClass, options.getNamingStrategy(), this instanceof SQLiteDatabaseConnectionImpl);
335+
EntitySchemaBuilder converter = new EntitySchemaBuilder(tableName, entityClass, options.getNamingStrategy(), this instanceof SQLiteDatabaseConnection);
336336
String query = converter.buildTableQuery();
337337

338338
return exec(() -> query).isSuccessful();

core/src/main/java/me/zort/sqllib/SQLiteDatabaseConnectionImpl.java renamed to core/src/main/java/me/zort/sqllib/SQLiteDatabaseConnection.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import me.zort.sqllib.internal.factory.SQLConnectionFactory;
99
import me.zort.sqllib.internal.query.*;
1010
import me.zort.sqllib.internal.query.part.SetStatement;
11+
import me.zort.sqllib.model.column.SQLiteColumnQueryBuilder;
12+
import me.zort.sqllib.model.schema.SQLSchemaSynchronizer;
1113
import me.zort.sqllib.util.PrimaryKey;
1214
import org.jetbrains.annotations.NotNull;
1315
import org.jetbrains.annotations.Nullable;
@@ -22,16 +24,24 @@
2224
*
2325
* @author ZorTik
2426
*/
25-
public class SQLiteDatabaseConnectionImpl extends SQLDatabaseConnectionImpl {
26-
private final SQLiteDatabaseConnectionImpl identity = this;
27+
public class SQLiteDatabaseConnection extends SQLDatabaseConnectionImpl {
28+
private final SQLiteDatabaseConnection identity = this;
2729

2830
@SuppressWarnings("unused")
29-
public SQLiteDatabaseConnectionImpl(final @NotNull SQLConnectionFactory connectionFactory) {
31+
public SQLiteDatabaseConnection(final @NotNull SQLConnectionFactory connectionFactory) {
3032
super(connectionFactory);
33+
changeSQLiteColumnQueryBuilder();
3134
}
3235

33-
public SQLiteDatabaseConnectionImpl(final @NotNull SQLConnectionFactory connectionFactory, @Nullable ISQLDatabaseOptions options) {
36+
public SQLiteDatabaseConnection(final @NotNull SQLConnectionFactory connectionFactory, @Nullable ISQLDatabaseOptions options) {
3437
super(connectionFactory, options);
38+
changeSQLiteColumnQueryBuilder();
39+
}
40+
41+
private void changeSQLiteColumnQueryBuilder() {
42+
if (getSchemaSynchronizer() instanceof SQLSchemaSynchronizer) {
43+
((SQLSchemaSynchronizer) getSchemaSynchronizer()).setColumnQueryBuilder(new SQLiteColumnQueryBuilder(this));
44+
}
3545
}
3646

3747
/**
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.zort.sqllib.model.column;
2+
3+
import lombok.AllArgsConstructor;
4+
import me.zort.sqllib.SQLiteDatabaseConnection;
5+
import me.zort.sqllib.api.model.ColumnDefinition;
6+
import me.zort.sqllib.api.model.TableSchema;
7+
8+
@AllArgsConstructor
9+
public class SQLiteColumnQueryBuilder extends InnoColumnQueryBuilder {
10+
private final SQLiteDatabaseConnection connection;
11+
@Override
12+
public String buildActionQuery(ColumnAction action, String table, ColumnDefinition from, ColumnDefinition to) {
13+
if (action.equals(ColumnAction.MODIFY)) {
14+
TableSchema schema = connection.getSchemaBuilder(table).buildTableSchema();
15+
String queries = "ALTER TABLE" + table + " RENAME TO " + table + "_old;";
16+
queries += "CREATE TABLE " + table + "(" + String.join(", ", schema.getDefinitions()) + ");";
17+
queries += "INSERT INTO " + table + "(" + String.join(", ", schema.getDefinitionNames()) + ") SELECT " + String.join(", ", schema.getDefinitionNames()) + " FROM " + table + "_old;";
18+
queries += "DROP TABLE " + table + "_old;";
19+
return queries;
20+
}
21+
return super.buildActionQuery(action, table, from, to);
22+
}
23+
}

0 commit comments

Comments
 (0)