Skip to content

Commit 85b5b03

Browse files
committed
Added a QueryLogger interface to allow logging and testing the raw sql queries and added UpdateOnlyIfIsDirtyTest
1 parent 79b6732 commit 85b5b03

File tree

5 files changed

+93
-11
lines changed

5 files changed

+93
-11
lines changed

src/main/java/org/javawebstack/orm/wrapper/BaseSQL.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,21 @@
11
package org.javawebstack.orm.wrapper;
22

3-
import org.javawebstack.orm.ORM;
43
import org.javawebstack.orm.exception.ORMQueryException;
54

65
import java.sql.*;
7-
import java.util.Arrays;
8-
import java.util.HashMap;
9-
import java.util.Locale;
10-
import java.util.Map;
11-
import java.util.logging.Level;
12-
import java.util.stream.Collectors;
6+
import java.sql.Date;
7+
import java.util.*;
138

149
public abstract class BaseSQL implements SQL {
1510

1611
private final Map<ResultSet, Statement> statementMap = new HashMap<>();
12+
private final List<QueryLogger> loggers = new LinkedList<>();
1713

1814
public abstract Connection getConnection();
1915

2016
public int write(String queryString, Object... parameters) throws SQLException {
17+
loggers.forEach(l -> l.log(queryString, parameters));
2118
Connection connection = getConnection();
22-
ORM.LOGGER.log(Level.ALL, queryString);
23-
ORM.LOGGER.log(Level.ALL, Arrays.stream(parameters).map(o -> o == null ? "null" : o.toString()).collect(Collectors.joining(",")));
2419
if (queryString.toLowerCase(Locale.ROOT).startsWith("insert")) {
2520
PreparedStatement ps = setParams(connection.prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS), parameters);
2621
ps.executeUpdate();
@@ -41,9 +36,8 @@ public int write(String queryString, Object... parameters) throws SQLException {
4136
}
4237

4338
public ResultSet read(String queryString, Object... parameters) throws SQLException {
39+
loggers.forEach(l -> l.log(queryString, parameters));
4440
Connection connection = getConnection();
45-
ORM.LOGGER.log(Level.ALL, queryString);
46-
ORM.LOGGER.log(Level.ALL, Arrays.stream(parameters).map(o -> o == null ? "null" : o.toString()).collect(Collectors.joining(",")));
4741
PreparedStatement ps = setParams(connection.prepareStatement(queryString), parameters);
4842
ResultSet rs = ps.executeQuery();
4943
statementMap.put(rs, ps);
@@ -109,4 +103,12 @@ public void cleanUp() {
109103
close(rs);
110104
}
111105

106+
public void addQueryLogger(QueryLogger logger) {
107+
loggers.add(logger);
108+
}
109+
110+
public void removeQueryLogger(QueryLogger logger) {
111+
loggers.remove(logger);
112+
}
113+
112114
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.javawebstack.orm.wrapper;
2+
3+
public interface QueryLogger {
4+
5+
void log(String query, Object[] parameters);
6+
7+
}

src/main/java/org/javawebstack/orm/wrapper/SQL.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@ public interface SQL {
1414

1515
void close(ResultSet resultSet);
1616

17+
void addQueryLogger(QueryLogger logger);
18+
19+
void removeQueryLogger(QueryLogger logger);
20+
1721
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.javawebstack.orm.test;
2+
3+
import org.javawebstack.orm.ORM;
4+
import org.javawebstack.orm.ORMConfig;
5+
import org.javawebstack.orm.exception.ORMConfigurationException;
6+
import org.javawebstack.orm.test.shared.models.JustString;
7+
import org.javawebstack.orm.wrapper.QueryLogger;
8+
import org.junit.jupiter.api.Test;
9+
10+
import static org.junit.jupiter.api.Assertions.*;
11+
12+
public class UpdateOnlyIfIsDirtyTest extends ORMTestCase {
13+
14+
@Test
15+
public void testOnlyUpdateIfIsDirty() throws ORMConfigurationException {
16+
boolean[] updated = new boolean[1];
17+
QueryLogger logger = (query, parameters) -> {
18+
if(query.startsWith("UPDATE"))
19+
updated[0] = true;
20+
};
21+
sql().addQueryLogger(logger);
22+
ORM.register(JustString.class, sql(), new ORMConfig());
23+
ORM.autoMigrate();
24+
JustString model = new JustString();
25+
model.setString("Test");
26+
model.save();
27+
model.save();
28+
assertFalse(updated[0]);
29+
model.setString("TestB");
30+
model.save();
31+
assertTrue(updated[0]);
32+
sql().removeQueryLogger(logger);
33+
}
34+
35+
@Test
36+
public void testPreventUnnecessaryUpdatesOption() throws ORMConfigurationException {
37+
boolean[] updated = new boolean[1];
38+
QueryLogger logger = (query, parameters) -> {
39+
if(query.startsWith("UPDATE"))
40+
updated[0] = true;
41+
};
42+
sql().addQueryLogger(logger);
43+
ORM.register(JustString.class, sql(), new ORMConfig().setPreventUnnecessaryUpdates(false));
44+
ORM.autoMigrate();
45+
JustString model = new JustString();
46+
model.setString("Test");
47+
model.save();
48+
model.save();
49+
assertTrue(updated[0]);
50+
sql().removeQueryLogger(logger);
51+
}
52+
53+
}

src/test/java/org/javawebstack/orm/test/shared/models/JustString.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,26 @@
44
import org.javawebstack.orm.annotation.Column;
55

66
public class JustString extends Model {
7+
78
@Column
89
int id;
910

1011
@Column
1112
String string;
1213

14+
public int getId() {
15+
return id;
16+
}
17+
18+
public void setId(int id) {
19+
this.id = id;
20+
}
21+
22+
public String getString() {
23+
return string;
24+
}
25+
26+
public void setString(String string) {
27+
this.string = string;
28+
}
1329
}

0 commit comments

Comments
 (0)