Skip to content

Commit 1e3f8dd

Browse files
committed
Moved some internal query implementations
1 parent b049dfd commit 1e3f8dd

3 files changed

Lines changed: 70 additions & 85 deletions

File tree

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

Lines changed: 59 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.zort.sqllib;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Getter;
45
import me.zort.sqllib.api.Query;
56
import me.zort.sqllib.api.SQLConnection;
@@ -8,7 +9,9 @@
89
import me.zort.sqllib.api.data.Row;
910
import me.zort.sqllib.api.mapping.StatementMappingOptions;
1011
import me.zort.sqllib.internal.factory.SQLConnectionFactory;
12+
import me.zort.sqllib.internal.impl.QueryResultImpl;
1113
import me.zort.sqllib.internal.query.*;
14+
import me.zort.sqllib.internal.query.part.SetStatement;
1215
import org.jetbrains.annotations.NotNull;
1316
import org.jetbrains.annotations.Nullable;
1417

@@ -73,18 +76,6 @@ public SQLDatabaseConnection(final @NotNull SQLConnectionFactory connectionFacto
7376
public abstract <T> T createGate(Class<T> mappingInterface, @NotNull StatementMappingOptions options);
7477
public abstract boolean buildEntitySchema(String tableName, Class<?> entityClass);
7578

76-
/**
77-
* Saves this mapping object into database using upsert query.
78-
* <p>
79-
* All mapping strategies are described in:
80-
* {@link SQLDatabaseConnection#query(Query, Class)}.
81-
*
82-
* @param table Table to save into.
83-
* @param obj The object to save.
84-
* @return Result of the query.
85-
*/
86-
public abstract QueryResult save(String table, Object obj);
87-
8879
/**
8980
* Performs new query and returns the result. This result is never null.
9081
* See: {@link QueryRowsResult#isSuccessful()}
@@ -121,9 +112,59 @@ public SQLDatabaseConnection(final @NotNull SQLConnectionFactory connectionFacto
121112
*/
122113
public abstract QueryResult exec(Query query);
123114
public abstract QueryResult exec(String query);
115+
protected abstract DefsVals buildDefsVals(Object obj);
124116
public abstract boolean isLogSqlErrors();
125117
public abstract boolean isDebug();
126118

119+
/**
120+
* Saves this mapping object into database using upsert query.
121+
* <p>
122+
* All mapping strategies are described in:
123+
* {@link SQLDatabaseConnection#query(Query, Class)}.
124+
*
125+
* @param table Table to save into.
126+
* @param obj The object to save.
127+
* @return Result of the query.
128+
*/
129+
// by default, it creates and upsert request.
130+
public QueryResult save(final @NotNull String table, final @NotNull Object obj) {
131+
DefsVals defsVals = buildDefsVals(obj);
132+
133+
if(defsVals == null) return new QueryResultImpl(false);
134+
135+
return save(obj).table(table).execute();
136+
}
137+
138+
public UpsertQuery save(final @NotNull Object obj) {
139+
DefsVals defsVals = buildDefsVals(obj);
140+
if(defsVals == null) return null;
141+
142+
String[] defs = defsVals.getDefs();
143+
SQLDatabaseConnectionImpl.UnknownValueWrapper[] vals = defsVals.getVals();
144+
UpsertQuery upsert = upsert().into(null, defs);
145+
for(SQLDatabaseConnectionImpl.UnknownValueWrapper wrapper : vals) {
146+
upsert.appendVal(wrapper.getObject());
147+
}
148+
SetStatement<InsertQuery> setStmt = upsert.onDuplicateKey();
149+
for(int i = 0; i < defs.length; i++) {
150+
setStmt.and(defs[i], vals[i].getObject());
151+
}
152+
153+
return (UpsertQuery) setStmt.getAncestor();
154+
}
155+
156+
public QueryResult insert(final @NotNull String table, final @NotNull Object obj) {
157+
DefsVals defsVals = buildDefsVals(obj);
158+
if (defsVals == null) return new QueryResultImpl(false);
159+
160+
InsertQuery query = insert().into(table, defsVals.getDefs());
161+
for (SQLDatabaseConnectionImpl.UnknownValueWrapper valueWrapper : defsVals.getVals()) {
162+
query.appendVal(valueWrapper.getObject());
163+
}
164+
165+
return query.execute();
166+
}
167+
127168
// --***-- Query builders --***--
128169

129170
public SelectQuery select(String... cols) {
@@ -161,7 +202,6 @@ public DeleteQuery delete() {
161202
@Override
162203
public final boolean connect() {
163204
if(isConnected()) disconnect();
164-
165205
try {
166206
connection = connectionFactory.connect();
167207
lastError = null;
@@ -176,7 +216,6 @@ public final boolean connect() {
176216
@Override
177217
public final void disconnect() {
178218
if (!isConnected()) return;
179-
180219
try {
181220
connection.close();
182221
lastError = null;
@@ -195,4 +234,10 @@ protected void logSqlError(Exception e) {
195234
if(isLogSqlErrors()) e.printStackTrace();
196235
}
197236

237+
@AllArgsConstructor
238+
@Getter
239+
protected static class DefsVals {
240+
private final String[] defs;
241+
private final SQLDatabaseConnectionImpl.UnknownValueWrapper[] vals;
242+
}
198243
}

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

Lines changed: 4 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@
2121
import me.zort.sqllib.internal.impl.DefaultNamingStrategy;
2222
import me.zort.sqllib.internal.impl.DefaultObjectMapper;
2323
import me.zort.sqllib.internal.impl.QueryResultImpl;
24-
import me.zort.sqllib.internal.query.InsertQuery;
25-
import me.zort.sqllib.internal.query.UpsertQuery;
26-
import me.zort.sqllib.internal.query.part.SetStatement;
2724
import me.zort.sqllib.mapping.DefaultResultAdapter;
2825
import me.zort.sqllib.mapping.DefaultStatementMappingFactory;
2926
import me.zort.sqllib.pool.PooledSQLDatabaseConnection;
@@ -279,25 +276,20 @@ public QueryRowsResult<Row> query(final @NotNull String query) {
279276
return query(() -> query);
280277
}
281278

282-
private QueryRowsResult<Row> query(final @NotNull Query query, boolean isRetry) {
279+
@NotNull
280+
QueryRowsResult<Row> query(final @NotNull Query query, boolean isRetry) {
283281
Objects.requireNonNull(query);
284-
285-
if(!handleAutoReconnect()) {
286-
return new QueryRowsResult<>(false, "Cannot connect to database!");
287-
}
282+
if(!handleAutoReconnect()) return new QueryRowsResult<>(false, "Cannot connect to database!");
288283

289284
try(PreparedStatement stmt = buildStatement(query);
290285
ResultSet resultSet = stmt.executeQuery()) {
291286
QueryRowsResult<Row> result = new QueryRowsResult<>(true);
292-
293287
while(resultSet.next()) {
294288
ResultSetMetaData meta = resultSet.getMetaData();
295289
Row row = new Row();
296290
for(int i = 1; i <= meta.getColumnCount(); i++) {
297291
Object obj = resultSet.getObject(i);
298-
if(obj instanceof String) {
299-
obj = ((String) obj).replaceAll("''", "'");
300-
}
292+
if(obj instanceof String) obj = ((String) obj).replaceAll("''", "'");
301293
row.put(meta.getColumnName(i), obj);
302294
}
303295
result.add(row);
@@ -353,58 +345,6 @@ private QueryResult exec(final @NotNull Query query, boolean isRetry) {
353345
}
354346
}
355347

356-
/**
357-
* Saves this mapping object into database using upsert query.
358-
* <p>
359-
* All mapping strategies are described in:
360-
* {@link SQLDatabaseConnection#query(Query, Class)}.
361-
*
362-
* @param table Table to save into.
363-
* @param obj The object to save.
364-
* @return Result of the query.
365-
*/
366-
// by default, it creates and upsert request.
367-
@Override
368-
public QueryResult save(final @NotNull String table, final @NotNull Object obj) {
369-
DefsVals defsVals = buildDefsVals(obj);
370-
371-
if(defsVals == null) {
372-
return new QueryResultImpl(false);
373-
}
374-
375-
return save(obj).table(table).execute();
376-
}
377-
378-
public UpsertQuery save(final @NotNull Object obj) {
379-
DefsVals defsVals = buildDefsVals(obj);
380-
if(defsVals == null) return null;
381-
382-
String[] defs = defsVals.getDefs();
383-
UnknownValueWrapper[] vals = defsVals.getVals();
384-
UpsertQuery upsert = upsert().into(null, defs);
385-
for(UnknownValueWrapper wrapper : vals) {
386-
upsert.appendVal(wrapper.getObject());
387-
}
388-
SetStatement<InsertQuery> setStmt = upsert.onDuplicateKey();
389-
for(int i = 0; i < defs.length; i++) {
390-
setStmt.and(defs[i], vals[i].getObject());
391-
}
392-
393-
return (UpsertQuery) setStmt.getAncestor();
394-
}
395-
396-
public QueryResult insert(final @NotNull String table, final @NotNull Object obj) {
397-
DefsVals defsVals = buildDefsVals(obj);
398-
if (defsVals == null) return new QueryResultImpl(false);
399-
400-
InsertQuery query = insert().into(table, defsVals.getDefs());
401-
for (UnknownValueWrapper valueWrapper : defsVals.getVals()) {
402-
query.appendVal(valueWrapper.getObject());
403-
}
404-
405-
return query.execute();
406-
}
407-
408348
@SuppressWarnings("unchecked")
409349
@Nullable
410350
protected DefsVals buildDefsVals(Object obj) {
@@ -529,13 +469,6 @@ public PreparedStatement prepare(Connection connection) throws SQLException {
529469
}
530470
}
531471

532-
@AllArgsConstructor
533-
@Getter
534-
protected static class DefsVals {
535-
private final String[] defs;
536-
private final UnknownValueWrapper[] vals;
537-
}
538-
539472
@AllArgsConstructor
540473
@Data
541474
public static class UnknownValueWrapper {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package me.zort.sqllib.util;
2+
3+
public final class DefsVals {
4+
5+
6+
7+
}

0 commit comments

Comments
 (0)