Skip to content

Commit dae9fef

Browse files
committed
SQLDatabaseConnection#setProxyMapping
1 parent 3c3dac3 commit dae9fef

5 files changed

Lines changed: 31 additions & 7 deletions

File tree

api/src/main/java/me/zort/sqllib/api/mapping/StatementMappingFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public interface StatementMappingFactory {
1919
* @return The StatementMapping.
2020
* @param <T> The interface class type.
2121
*/
22-
<T> StatementMappingStrategy<T> create(Class<T> interfaceClass, SQLConnection connection);
22+
<T> StatementMappingStrategy<T> strategy(Class<T> interfaceClass, SQLConnection connection);
23+
StatementMappingResultAdapter resultAdapter();
2324

2425
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import me.zort.sqllib.api.data.QueryResult;
1010
import me.zort.sqllib.api.data.QueryRowsResult;
1111
import me.zort.sqllib.api.data.Row;
12+
import me.zort.sqllib.api.mapping.StatementMappingFactory;
1213
import me.zort.sqllib.api.mapping.StatementMappingOptions;
1314
import me.zort.sqllib.internal.factory.SQLConnectionFactory;
1415
import me.zort.sqllib.internal.impl.QueryResultImpl;
@@ -45,6 +46,13 @@ public SQLDatabaseConnection(final @NotNull SQLConnectionFactory connectionFacto
4546
SQLConnectionRegistry.register(this);
4647
}
4748

49+
/**
50+
* Sets a mapping to use when using {@link SQLDatabaseConnection#createProxy(Class, StatementMappingOptions)}.
51+
*
52+
* @param mappingFactory Mapping factory to use.
53+
*/
54+
public abstract void setProxyMapping(final @NotNull StatementMappingFactory mappingFactory);
55+
4856
/**
4957
* @deprecated Use {@link SQLDatabaseConnection#createProxy(Class)} instead.
5058
*/

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,8 @@ public class SQLDatabaseConnectionImpl extends PooledSQLDatabaseConnection {
6969

7070
@Getter
7171
private final ISQLDatabaseOptions options;
72-
private final transient StatementMappingFactory mappingFactory;
73-
private final transient StatementMappingResultAdapter mappingResultAdapter;
7472
private final transient List<ErrorStateObserver> errorStateHandlers;
73+
private transient StatementMappingFactory mappingFactory;
7574
private transient ObjectMapper objectMapper;
7675
private transient CacheManager cacheManager;
7776
@Setter
@@ -103,7 +102,6 @@ public SQLDatabaseConnectionImpl(final @NotNull SQLConnectionFactory connectionF
103102
this.options = options;
104103
this.objectMapper = new DefaultObjectMapper(this);
105104
this.mappingFactory = new DefaultStatementMappingFactory();
106-
this.mappingResultAdapter = new DefaultResultAdapter();
107105
this.errorStateHandlers = new CopyOnWriteArrayList<>();
108106
this.transaction = null;
109107
this.logger = Logger.getGlobal();
@@ -138,6 +136,15 @@ public void setObjectMapper(final @NotNull ObjectMapper objectMapper) {
138136
this.objectMapper = Objects.requireNonNull(objectMapper, "Object mapper cannot be null!");
139137
}
140138

139+
/**
140+
* Sets a mapping to use when using {@link SQLDatabaseConnection#createProxy(Class, StatementMappingOptions)}.
141+
*
142+
* @param mappingFactory Mapping factory to use.
143+
*/
144+
public void setProxyMapping(final @NotNull StatementMappingFactory mappingFactory) {
145+
this.mappingFactory = Objects.requireNonNull(mappingFactory, "Mapping factory cannot be null!");
146+
}
147+
141148
/**
142149
* Adds an error state observer to the list of observers to be
143150
* notified when a fatal error occurs.
@@ -221,7 +228,8 @@ public final <T> T createProxy(final @NotNull Class<T> mappingInterface, final @
221228
Objects.requireNonNull(mappingInterface, "Mapping interface cannot be null!");
222229
Objects.requireNonNull(options, "Options cannot be null!");
223230

224-
StatementMappingStrategy<T> statementMapping = mappingFactory.create(mappingInterface, this);
231+
StatementMappingStrategy<T> statementMapping = mappingFactory.strategy(mappingInterface, this);
232+
StatementMappingResultAdapter mappingResultAdapter = mappingFactory.resultAdapter();
225233
List<Method> pendingMethods = new CopyOnWriteArrayList<>();
226234

227235
return (T) Proxy.newProxyInstance(mappingInterface.getClassLoader(),

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public QueryResult exec(@NotNull Query query) {
138138
return super.exec(query);
139139
}
140140

141-
class UpsertQueryDecorator extends UpsertQuery {
141+
final class UpsertQueryDecorator extends UpsertQuery {
142142
private final QueryNode<?> query;
143143

144144
public UpsertQueryDecorator(QueryNode<?> query) {
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
package me.zort.sqllib.mapping;
22

33
import me.zort.sqllib.api.SQLConnection;
4+
import me.zort.sqllib.api.mapping.StatementMappingResultAdapter;
45
import me.zort.sqllib.api.mapping.StatementMappingStrategy;
56
import me.zort.sqllib.api.mapping.StatementMappingFactory;
67

78
import java.lang.reflect.Modifier;
89

910
public class DefaultStatementMappingFactory implements StatementMappingFactory {
11+
private final DefaultResultAdapter resultAdapter = new DefaultResultAdapter();
1012
@Override
11-
public <T> StatementMappingStrategy<T> create(Class<T> interfaceClass, SQLConnection connection) {
13+
public <T> StatementMappingStrategy<T> strategy(Class<T> interfaceClass, SQLConnection connection) {
1214
if (!interfaceClass.isInterface() || !Modifier.isAbstract(interfaceClass.getModifiers()))
1315
throw new IllegalArgumentException("The given class is not an interface or is not abstract");
1416
return new DefaultStatementMapping<>(connection);
1517
}
18+
19+
@Override
20+
public StatementMappingResultAdapter resultAdapter() {
21+
return resultAdapter;
22+
}
1623
}

0 commit comments

Comments
 (0)