Skip to content

Commit a640285

Browse files
committed
Fix delete statements doing a full table scan
1 parent 37dd181 commit a640285

File tree

4 files changed

+32
-95
lines changed

4 files changed

+32
-95
lines changed

BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/AbstractCommandSet.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,12 @@ public int writeMapTile(
113113

114114
@Override
115115
public int deleteMapTile(String mapId, int lod, int x, int z, Compression compression) throws IOException {
116+
int mapKey = mapKey(mapId);
117+
int compressionKey = compressionKey(compression);
116118
return db.run(connection -> {
117119
return executeUpdate(connection,
118120
deleteMapTileStatement(),
119-
mapId, lod, x, z, compression.getKey().getFormatted()
121+
mapKey, lod, x, z, compressionKey
120122
);
121123
});
122124
}
@@ -156,10 +158,11 @@ public int countAllMapTiles(String mapId) throws IOException {
156158

157159
@Override
158160
public int purgeMapTiles(String mapId, int limit) throws IOException {
161+
int mapKey = mapKey(mapId);
159162
return db.run(connection -> {
160163
return executeUpdate(connection,
161164
purgeMapTilesStatement(),
162-
mapId, limit
165+
mapKey, limit
163166
);
164167
});
165168
}
@@ -230,10 +233,11 @@ public int writeMapMeta(String mapId, String itemName, byte[] bytes) throws IOEx
230233

231234
@Override
232235
public int deleteMapMeta(String mapId, String itemName) throws IOException {
236+
int mapKey = mapKey(mapId);
233237
return db.run(connection -> {
234238
return executeUpdate(connection,
235239
deleteMapMetaStatement(),
236-
mapId, itemName
240+
mapKey, itemName
237241
);
238242
});
239243
}
@@ -265,21 +269,22 @@ public boolean hasMapMeta(String mapId, String itemName) throws IOException {
265269
@Override
266270
public void purgeMap(String mapId) throws IOException {
267271
synchronized (mapKeys) {
272+
int mapKey = mapKey(mapId);
268273
db.run(connection -> {
269274

270275
executeUpdate(connection,
271276
purgeMapTileTableStatement(),
272-
mapId
277+
mapKey
273278
);
274279

275280
executeUpdate(connection,
276281
purgeMapMetaTableStatement(),
277-
mapId
282+
mapKey
278283
);
279284

280285
executeUpdate(connection,
281286
deleteMapStatement(),
282-
mapId
287+
mapKey
283288
);
284289

285290
});

BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/MySQLCommandSet.java

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -147,19 +147,11 @@ public String deleteMapTileStatement() {
147147
return """
148148
DELETE
149149
FROM `bluemap_map_tile`
150-
WHERE `map` IN (
151-
SELECT m.`id`
152-
FROM `bluemap_map` m
153-
WHERE m.`map_id` = ?
154-
)
150+
WHERE `map` = ?
155151
AND `lod` = ?
156152
AND `x` = ?
157153
AND `z` = ?
158-
AND `compression` IN (
159-
SELECT c.`id`
160-
FROM `bluemap_map_tile_compression` c
161-
WHERE c.`compression` = ?
162-
)
154+
AND `compression` = ?
163155
""";
164156
}
165157

@@ -199,11 +191,7 @@ public String purgeMapTilesStatement() {
199191
return """
200192
DELETE
201193
FROM `bluemap_map_tile`
202-
WHERE `map` IN (
203-
SELECT `id`
204-
FROM `bluemap_map`
205-
WHERE `map_id` = ?
206-
)
194+
WHERE `map` = ?
207195
LIMIT ?
208196
""";
209197
}
@@ -254,11 +242,7 @@ public String deleteMapMetaStatement() {
254242
return """
255243
DELETE
256244
FROM `bluemap_map_meta`
257-
WHERE `map` IN (
258-
SELECT `id`
259-
FROM `bluemap_map`
260-
WHERE `map_id` = ?
261-
)
245+
WHERE `map` = ?
262246
AND `key` = ?
263247
""";
264248
}
@@ -282,11 +266,7 @@ public String purgeMapTileTableStatement() {
282266
return """
283267
DELETE
284268
FROM `bluemap_map_tile`
285-
WHERE `map` IN (
286-
SELECT m.`id`
287-
FROM `bluemap_map` m
288-
WHERE m.`map_id` = ?
289-
)
269+
WHERE `map` = ?
290270
""";
291271
}
292272

@@ -296,11 +276,7 @@ public String purgeMapMetaTableStatement() {
296276
return """
297277
DELETE
298278
FROM `bluemap_map_meta`
299-
WHERE `map` IN (
300-
SELECT m.`id`
301-
FROM `bluemap_map` m
302-
WHERE m.`map_id` = ?
303-
)
279+
WHERE `map` = ?
304280
""";
305281
}
306282

@@ -310,7 +286,7 @@ public String deleteMapStatement() {
310286
return """
311287
DELETE
312288
FROM `bluemap_map`
313-
WHERE `map_id` = ?
289+
WHERE `map` = ?
314290
""";
315291
}
316292

BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/PostgreSQLCommandSet.java

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -141,19 +141,11 @@ public String deleteMapTileStatement() {
141141
return """
142142
DELETE
143143
FROM bluemap_map_tile
144-
WHERE map IN (
145-
SELECT m.id
146-
FROM bluemap_map m
147-
WHERE m.map_id = ?
148-
)
144+
WHERE map = ?
149145
AND lod = ?
150146
AND x = ?
151147
AND z = ?
152-
AND compression IN (
153-
SELECT c.id
154-
FROM bluemap_map_tile_compression c
155-
WHERE c.compression = ?
156-
)
148+
AND compression = ?
157149
""";
158150
}
159151

@@ -196,9 +188,7 @@ public String purgeMapTilesStatement() {
196188
WHERE CTID IN (
197189
SELECT CTID
198190
FROM bluemap_map_tile t
199-
INNER JOIN bluemap_map m
200-
ON t.map = m.id
201-
WHERE m.map_id = ?
191+
WHERE t.map = ?
202192
LIMIT ?
203193
)
204194
""";
@@ -253,11 +243,7 @@ public String deleteMapMetaStatement() {
253243
return """
254244
DELETE
255245
FROM bluemap_map_meta
256-
WHERE map IN (
257-
SELECT id
258-
FROM bluemap_map
259-
WHERE map_id = ?
260-
)
246+
WHERE map = ?
261247
AND key = ?
262248
""";
263249
}
@@ -281,11 +267,7 @@ public String purgeMapTileTableStatement() {
281267
return """
282268
DELETE
283269
FROM bluemap_map_tile
284-
WHERE map IN (
285-
SELECT m.id
286-
FROM bluemap_map m
287-
WHERE m.map_id = ?
288-
)
270+
WHERE map = ?
289271
""";
290272
}
291273

@@ -295,11 +277,7 @@ public String purgeMapMetaTableStatement() {
295277
return """
296278
DELETE
297279
FROM bluemap_map_meta
298-
WHERE map IN (
299-
SELECT m.id
300-
FROM bluemap_map m
301-
WHERE m.map_id = ?
302-
)
280+
WHERE map = ?
303281
""";
304282
}
305283

@@ -309,7 +287,7 @@ public String deleteMapStatement() {
309287
return """
310288
DELETE
311289
FROM bluemap_map
312-
WHERE map_id = ?
290+
WHERE map = ?
313291
""";
314292
}
315293

BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/SqliteCommandSet.java

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -143,19 +143,11 @@ public String deleteMapTileStatement() {
143143
return """
144144
DELETE
145145
FROM `bluemap_map_tile`
146-
WHERE `map` IN (
147-
SELECT m.`id`
148-
FROM `bluemap_map` m
149-
WHERE m.`map_id` = ?
150-
)
146+
WHERE `map` = ?
151147
AND `lod` = ?
152148
AND `x` = ?
153149
AND `z` = ?
154-
AND `compression` IN (
155-
SELECT c.`id`
156-
FROM `bluemap_map_tile_compression` c
157-
WHERE c.`compression` = ?
158-
)
150+
AND `compression` = ?
159151
""";
160152
}
161153

@@ -198,9 +190,7 @@ public String purgeMapTilesStatement() {
198190
WHERE ROWID IN (
199191
SELECT t.ROWID
200192
FROM bluemap_map_tile t
201-
INNER JOIN bluemap_map m
202-
ON t.map = m.id
203-
WHERE m.map_id = ?
193+
WHERE t.map = ?
204194
LIMIT ?
205195
)
206196
""";
@@ -252,11 +242,7 @@ public String deleteMapMetaStatement() {
252242
return """
253243
DELETE
254244
FROM `bluemap_map_meta`
255-
WHERE `map` IN (
256-
SELECT `id`
257-
FROM `bluemap_map`
258-
WHERE `map_id` = ?
259-
)
245+
WHERE `map` = ?
260246
AND `key` = ?
261247
""";
262248
}
@@ -280,11 +266,7 @@ public String purgeMapTileTableStatement() {
280266
return """
281267
DELETE
282268
FROM `bluemap_map_tile`
283-
WHERE `map` IN (
284-
SELECT m.`id`
285-
FROM `bluemap_map` m
286-
WHERE m.`map_id` = ?
287-
)
269+
WHERE `map` = ?
288270
""";
289271
}
290272

@@ -294,11 +276,7 @@ public String purgeMapMetaTableStatement() {
294276
return """
295277
DELETE
296278
FROM `bluemap_map_meta`
297-
WHERE `map` IN (
298-
SELECT m.`id`
299-
FROM `bluemap_map` m
300-
WHERE m.`map_id` = ?
301-
)
279+
WHERE `map` = ?
302280
""";
303281
}
304282

@@ -308,7 +286,7 @@ public String deleteMapStatement() {
308286
return """
309287
DELETE
310288
FROM `bluemap_map`
311-
WHERE `map_id` = ?
289+
WHERE `map` = ?
312290
""";
313291
}
314292

0 commit comments

Comments
 (0)