3
3
import it .unimi .dsi .fastutil .ints .Int2ObjectMap ;
4
4
import net .okocraft .box .api .model .item .BoxCustomItem ;
5
5
import net .okocraft .box .api .model .item .BoxDefaultItem ;
6
+ import net .okocraft .box .api .model .item .ItemVersion ;
6
7
import net .okocraft .box .api .util .ItemNameGenerator ;
7
8
import net .okocraft .box .storage .api .factory .item .BoxItemFactory ;
8
9
import net .okocraft .box .storage .api .model .item .ItemData ;
9
10
import net .okocraft .box .storage .api .model .item .ItemStorage ;
10
11
import net .okocraft .box .storage .api .util .item .DefaultItem ;
11
- import net .okocraft .box .api .model .item .ItemVersion ;
12
12
import net .okocraft .box .storage .implementation .database .database .Database ;
13
13
import org .bukkit .inventory .ItemStack ;
14
14
import org .jetbrains .annotations .NotNull ;
15
15
import org .jetbrains .annotations .Nullable ;
16
16
17
17
import java .sql .ResultSet ;
18
18
import java .sql .SQLException ;
19
- import java .sql .Statement ;
20
19
import java .util .ArrayList ;
21
20
import java .util .Collection ;
22
21
import java .util .List ;
23
22
import java .util .Optional ;
24
23
import java .util .function .Function ;
24
+ import java .util .stream .Collectors ;
25
25
26
26
// | id | name | item_data | is_default_item
27
27
public class ItemTable extends AbstractTable implements ItemStorage {
@@ -88,6 +88,17 @@ public void saveItemVersion(@NotNull ItemVersion itemVersion) throws Exception {
88
88
statement .executeBatch ();
89
89
}
90
90
91
+ int maxId ;
92
+
93
+ try (var statement = prepareStatement (connection , "SELECT MAX(`id`) FROM `%table%`" );
94
+ var resultSet = statement .executeQuery ()) {
95
+ if (resultSet .next ()) {
96
+ maxId = resultSet .getInt (1 );
97
+ } else {
98
+ throw new IllegalStateException ("Could not get maximum item id." );
99
+ }
100
+ }
101
+
91
102
try (var statement = prepareStatement (connection , "INSERT INTO `%table%` (`name`, `item_data`, `is_default_item`) VALUES(?,?,?)" )) {
92
103
for (var item : newItems ) {
93
104
statement .setString (1 , item .plainName ());
@@ -96,13 +107,18 @@ public void saveItemVersion(@NotNull ItemVersion itemVersion) throws Exception {
96
107
97
108
statement .addBatch ();
98
109
}
110
+ statement .executeBatch ();
111
+ }
99
112
100
- int [] updateCounts = statement . executeBatch ( );
113
+ var nameToItemMap = newItems . stream (). collect ( Collectors . toMap ( DefaultItem :: plainName , Function . identity ()) );
101
114
102
- try (var generatedKeys = statement .getGeneratedKeys ()) {
103
- for (int i = 0 ; i < updateCounts .length ; i ++) {
104
- if (updateCounts [i ] == Statement .RETURN_GENERATED_KEYS ) {
105
- result .add (BoxItemFactory .createDefaultItem (generatedKeys .getInt (1 ), newItems .get (i )));
115
+ try (var statement = prepareStatement (connection , "SELECT `id`, `name` FROM `%table%` WHERE `id` > ?" )) {
116
+ statement .setInt (1 , maxId );
117
+ try (var resultSet = statement .executeQuery ()) {
118
+ while (resultSet .next ()) {
119
+ var item = nameToItemMap .get (resultSet .getString ("name" ));
120
+ if (item != null ) {
121
+ result .add (BoxItemFactory .createDefaultItem (resultSet .getInt ("id" ), item ));
106
122
}
107
123
}
108
124
}
0 commit comments