Skip to content

Commit e40a217

Browse files
committed
SeriesImportServiceImpl.addSeries(): reduce number of SQL queries.
Fix #735 No functional changes.
1 parent 209af17 commit e40a217

File tree

4 files changed

+41
-15
lines changed

4 files changed

+41
-15
lines changed

src/main/java/ru/mystamps/web/dao/SeriesImportDao.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,13 @@
2626

2727
public interface SeriesImportDao {
2828
Integer add(ImportSeriesDbDto importRequest);
29-
void setSeriesIdOnRequest(Integer requestId, Integer seriesId, Date updatedAt);
29+
void setSeriesIdAndChangeStatus(
30+
Integer requestId,
31+
Integer seriesId,
32+
String oldStatus,
33+
String newStatus,
34+
Date updatedAt
35+
);
3036
void changeStatus(Integer requestId, Date date, String oldStatus, String newStatus);
3137
ImportRequestDto findById(Integer id);
3238
void addRawContent(Integer requestId, Date createdAt, Date updatedAt, String content);

src/main/java/ru/mystamps/web/dao/impl/JdbcSeriesImportDao.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ public class JdbcSeriesImportDao implements SeriesImportDao {
4949
@Value("${series_import_requests.create}")
5050
private String createSeriesImportRequestSql;
5151

52-
@Value("${series_import_requests.set_series_id}")
53-
private String setSeriesIdSql;
52+
@Value("${series_import_requests.set_series_id_and_change_status}")
53+
private String setSeriesIdAndChangeStatusSql;
5454

5555
@Value("${series_import_requests.change_status}")
5656
private String changeStatusSql;
@@ -96,14 +96,23 @@ public Integer add(ImportSeriesDbDto importRequest) {
9696
return Integer.valueOf(holder.getKey().intValue());
9797
}
9898

99+
// @todo #735 SeriesImportDao.setSeriesIdAndChangeStatus(): replace arguments by dto object
99100
@Override
100-
public void setSeriesIdOnRequest(Integer requestId, Integer seriesId, Date updatedAt) {
101+
public void setSeriesIdAndChangeStatus(
102+
Integer requestId,
103+
Integer seriesId,
104+
String oldStatus,
105+
String newStatus,
106+
Date updatedAt) {
107+
101108
Map<String, Object> params = new HashMap<>();
102109
params.put("id", requestId);
103110
params.put("series_id", seriesId);
111+
params.put("old_status", oldStatus);
112+
params.put("new_status", newStatus);
104113
params.put("date", updatedAt);
105114

106-
int affected = jdbcTemplate.update(setSeriesIdSql, params);
115+
int affected = jdbcTemplate.update(setSeriesIdAndChangeStatusSql, params);
107116

108117
Validate.validState(
109118
affected == 1,

src/main/java/ru/mystamps/web/service/SeriesImportServiceImpl.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,12 @@ public Integer addSeries(AddSeriesDto dto, Integer requestId, Integer userId) {
8888

8989
Date now = new Date();
9090

91-
// @todo #700 Reduce number of SQL queries by one.
92-
// Here we're updating series_import_requests twice: when we set series_id field
93-
// and later when we change status_id. It's possible to do this in one-shot
94-
seriesImportDao.setSeriesIdOnRequest(requestId, seriesId, now);
95-
changeStatus(
91+
seriesImportDao.setSeriesIdAndChangeStatus(
9692
requestId,
93+
seriesId,
9794
SeriesImportRequestStatus.PARSING_SUCCEEDED,
98-
SeriesImportRequestStatus.IMPORT_SUCCEEDED
95+
SeriesImportRequestStatus.IMPORT_SUCCEEDED,
96+
now
9997
);
10098

10199
return seriesId;

src/main/resources/sql/series_import_request_dao_queries.properties

+17-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,24 @@ SELECT :url \
1515
FROM series_import_request_statuses st \
1616
WHERE st.name = :status
1717

18-
series_import_requests.set_series_id = \
19-
UPDATE series_import_requests \
20-
SET series_id = :series_id \
18+
# this query is exactly the same as change_status except a single field
19+
series_import_requests.set_series_id_and_change_status = \
20+
UPDATE series_import_requests r \
21+
SET status_id = \
22+
( \
23+
SELECT id \
24+
FROM series_import_request_statuses \
25+
WHERE name = :new_status \
26+
) \
27+
, series_id = :series_id \
2128
, updated_at = :date \
22-
WHERE id = :id
29+
WHERE r.id = :id \
30+
AND r.status_id = \
31+
( \
32+
SELECT id \
33+
FROM series_import_request_statuses \
34+
WHERE name = :old_status \
35+
)
2336

2437
series_import_requests.change_status = \
2538
UPDATE series_import_requests r \

0 commit comments

Comments
 (0)