Skip to content

Commit 2c86f75

Browse files
authored
Merge pull request #37 from ZorTik/development
Development
2 parents 937d2d0 + e121d9a commit 2c86f75

14 files changed

Lines changed: 175 additions & 29 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
}

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525
testImplementation project(":core")
2626
testImplementation project(":shared")
2727
testImplementation 'com.mysql:mysql-connector-j:8.0.32'
28+
testImplementation 'org.xerial:sqlite-jdbc:3.41.2.2'
2829
testImplementation 'org.apache.logging.log4j:log4j-core:2.19.0'
2930
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
3031
testRuntimeOnly 'com.google.guava:guava:31.0-jre'

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: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
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.column.SQLiteColumnTypeAdjuster;
13+
import me.zort.sqllib.model.schema.SQLSchemaSynchronizer;
1114
import me.zort.sqllib.util.PrimaryKey;
1215
import org.jetbrains.annotations.NotNull;
1316
import org.jetbrains.annotations.Nullable;
@@ -22,16 +25,27 @@
2225
*
2326
* @author ZorTik
2427
*/
25-
public class SQLiteDatabaseConnectionImpl extends SQLDatabaseConnectionImpl {
26-
private final SQLiteDatabaseConnectionImpl identity = this;
28+
public class SQLiteDatabaseConnection extends SQLDatabaseConnectionImpl {
29+
private final SQLiteDatabaseConnection identity = this;
2730

2831
@SuppressWarnings("unused")
29-
public SQLiteDatabaseConnectionImpl(final @NotNull SQLConnectionFactory connectionFactory) {
32+
public SQLiteDatabaseConnection(final @NotNull SQLConnectionFactory connectionFactory) {
3033
super(connectionFactory);
34+
setup();
3135
}
3236

33-
public SQLiteDatabaseConnectionImpl(final @NotNull SQLConnectionFactory connectionFactory, @Nullable ISQLDatabaseOptions options) {
37+
public SQLiteDatabaseConnection(final @NotNull SQLConnectionFactory connectionFactory, @Nullable ISQLDatabaseOptions options) {
3438
super(connectionFactory, options);
39+
setup();
40+
}
41+
42+
private void setup() {
43+
if (getSchemaSynchronizer() instanceof SQLSchemaSynchronizer) {
44+
SQLSchemaSynchronizer schemaSynchronizer = (SQLSchemaSynchronizer) getSchemaSynchronizer();
45+
schemaSynchronizer.setColumnQueryBuilder(new SQLiteColumnQueryBuilder(this));
46+
schemaSynchronizer.setColumnTypeAdjuster(new SQLiteColumnTypeAdjuster());
47+
schemaSynchronizer.setSeparateQueries(true);
48+
}
3549
}
3650

3751
/**

core/src/main/java/me/zort/sqllib/internal/query/QueryDetails.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ public void accept(int value) {
101101
}
102102

103103
private static void set(PreparedStatement statement, int index, Object value) throws SQLException {
104-
switch(value.getClass().getSimpleName().toLowerCase()) {
104+
String type = value != null ? value.getClass().getSimpleName().toLowerCase() : "null";
105+
switch(type) {
105106
case "string":
106107
statement.setString(index, (String) value);
107108
break;

core/src/main/java/me/zort/sqllib/mapping/ProxyInstanceImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,15 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
6060

6161
@Override
6262
public List<TableSchema> getTableSchemas(NamingStrategy namingStrategy, boolean sqLite) {
63+
List<Class<?>> builtTypes = new ArrayList<>();
6364
List<TableSchema> schemaList = new ArrayList<>();
6465
for (Method method : getTypeClass().getDeclaredMethods()) {
6566
Class<?> resultType = mappingResultAdapter.retrieveResultType(method);
6667

67-
if (!QueryResult.class.isAssignableFrom(resultType) && statementMapping.isMappingMethod(method)) {
68+
if (!QueryResult.class.isAssignableFrom(resultType) && statementMapping.isMappingMethod(method) && !builtTypes.contains(resultType)) {
6869
String table = options.getTable() != null ? options.getTable() : Table.Util.getFromContext(method, null);
6970
schemaList.add(new EntitySchemaBuilder(table, resultType, namingStrategy, sqLite).buildTableSchema());
71+
builtTypes.add(resultType);
7072
}
7173
}
7274
return schemaList;

core/src/main/java/me/zort/sqllib/model/column/InnoColumnQueryBuilder.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@
22

33
import me.zort.sqllib.api.model.ColumnDefinition;
44

5+
import java.util.ArrayList;
6+
import java.util.List;
7+
58
public class InnoColumnQueryBuilder implements SQLColumnQueryBuilder {
69
@Override
7-
public String buildActionQuery(SQLColumnQueryBuilder.ColumnAction action, String table, ColumnDefinition from, ColumnDefinition to) {
10+
public List<String> buildActionQuery(SQLColumnQueryBuilder.ColumnAction action, String table, ColumnDefinition from, ColumnDefinition to) {
11+
List<String> queries = new ArrayList<>();
812
if (action == SQLColumnQueryBuilder.ColumnAction.ADD) {
9-
return "ALTER TABLE " + table + " ADD COLUMN " + from + ";";
13+
queries.add("ALTER TABLE " + table + " ADD COLUMN " + from + ";");
1014
} else if (action == SQLColumnQueryBuilder.ColumnAction.DROP) {
11-
return "ALTER TABLE " + table + " DROP COLUMN " + to.getName() + ";";
15+
queries.add("ALTER TABLE " + table + " DROP COLUMN " + to.getName() + ";");
1216
} else if (action == SQLColumnQueryBuilder.ColumnAction.RENAME) {
13-
return "ALTER TABLE " + table + " RENAME COLUMN " + to.getName() + " TO " + from.getName() + ";";
17+
queries.add("ALTER TABLE " + table + " RENAME COLUMN " + to.getName() + " TO " + from.getName() + ";");
1418
} else if (action == SQLColumnQueryBuilder.ColumnAction.MODIFY) {
15-
return "ALTER TABLE " + table + " MODIFY COLUMN " + from.getName() + " " + from.getType() + ";";
19+
queries.add("ALTER TABLE " + table + " MODIFY COLUMN " + from.getName() + " " + from.getType() + ";");
1620
}
21+
if (queries.size() > 0) return queries;
1722
throw new RuntimeException("Unknown action: " + action);
1823
}
1924
}

core/src/main/java/me/zort/sqllib/model/column/SQLColumnQueryBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import me.zort.sqllib.api.model.ColumnDefinition;
44

5+
import java.util.List;
6+
57
public interface SQLColumnQueryBuilder {
68

7-
String buildActionQuery(ColumnAction action, String table, ColumnDefinition from, ColumnDefinition to);
9+
List<String> buildActionQuery(ColumnAction action, String table, ColumnDefinition from, ColumnDefinition to);
810

911
enum ColumnAction {
1012
ADD, DROP, MODIFY, RENAME
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package me.zort.sqllib.model.column;
2+
3+
public interface SQLColumnTypeAdjuster {
4+
5+
String adjust(String type);
6+
7+
}

0 commit comments

Comments
 (0)