From 669121d2d30657ac2b370789fdc75082018f9891 Mon Sep 17 00:00:00 2001 From: MineKing Date: Sun, 28 Jan 2024 16:07:33 +0100 Subject: [PATCH 1/4] Split Table#insert into insert, insertOrUpdate and update --- .../javautils/database/DataClass.java | 17 ++- .../de/mineking/javautils/database/Table.java | 12 +-- .../javautils/database/TableImpl.java | 102 ++++++++++++++---- .../database/exception/ConflictException.java | 4 + .../database/exception/SQLException.java | 4 + src/test/java/DatabaseTest.java | 2 +- src/test/java/InsertTest.java | 36 +++++++ 7 files changed, 145 insertions(+), 32 deletions(-) create mode 100644 src/main/java/de/mineking/javautils/database/exception/ConflictException.java create mode 100644 src/main/java/de/mineking/javautils/database/exception/SQLException.java create mode 100644 src/test/java/InsertTest.java diff --git a/src/main/java/de/mineking/javautils/database/DataClass.java b/src/main/java/de/mineking/javautils/database/DataClass.java index 545ba9d..72c3612 100644 --- a/src/main/java/de/mineking/javautils/database/DataClass.java +++ b/src/main/java/de/mineking/javautils/database/DataClass.java @@ -1,5 +1,6 @@ package de.mineking.javautils.database; +import de.mineking.javautils.database.exception.ConflictException; import org.jetbrains.annotations.NotNull; public interface DataClass> { @@ -8,9 +9,19 @@ public interface DataClass> { @NotNull @SuppressWarnings("unchecked") - default DataClass update() { - getTable().insert((T) this); - return this; + default T insert() throws ConflictException { + return getTable().insert((T) this); + } + + @SuppressWarnings("unchecked") + default boolean update() { + return getTable().update((T) this); + } + + @NotNull + @SuppressWarnings("unchecked") + default T insertOrUpdate() { + return getTable().insertOrUpdate((T) this); } @NotNull diff --git a/src/main/java/de/mineking/javautils/database/Table.java b/src/main/java/de/mineking/javautils/database/Table.java index 9ae4823..c213534 100644 --- a/src/main/java/de/mineking/javautils/database/Table.java +++ b/src/main/java/de/mineking/javautils/database/Table.java @@ -1,9 +1,9 @@ package de.mineking.javautils.database; +import de.mineking.javautils.database.exception.ConflictException; import org.jetbrains.annotations.NotNull; import java.lang.reflect.Field; -import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; @@ -47,14 +47,12 @@ default List selectAll() { } @NotNull - T insert(@NotNull T object); + T insert(@NotNull T object) throws ConflictException; + + boolean update(@NotNull T object); @NotNull - default List insertMany(@NotNull Collection objects) { - return objects.stream() - .map(this::insert) - .toList(); - } + T insertOrUpdate(@NotNull T object); int delete(@NotNull Where where); diff --git a/src/main/java/de/mineking/javautils/database/TableImpl.java b/src/main/java/de/mineking/javautils/database/TableImpl.java index 4ba7ad5..d3ecbc6 100644 --- a/src/main/java/de/mineking/javautils/database/TableImpl.java +++ b/src/main/java/de/mineking/javautils/database/TableImpl.java @@ -1,6 +1,9 @@ package de.mineking.javautils.database; +import de.mineking.javautils.database.exception.ConflictException; +import org.jdbi.v3.core.result.ResultProducers; import org.jdbi.v3.core.statement.StatementContext; +import org.jdbi.v3.core.statement.Update; import org.jetbrains.annotations.NotNull; import java.lang.reflect.*; @@ -136,9 +139,85 @@ public int delete(@NotNull Where where) { ); } + private boolean execute(@NotNull T object, Update query) { + columns.forEach((name, field) -> { + try { + query.bind(name, manager.getArgument(field.getGenericType(), field, field.get(object))); + } catch(IllegalAccessException e) { + throw new RuntimeException(e); + } + }); + + return query.execute(ResultProducers.returningResults()) + .map((rs, ctx) -> { + columns.forEach((name, field) -> { + try { + field.set(object, manager.parse(field.getGenericType(), field, manager.extract(field.getGenericType(), field, name, rs))); + } catch(IllegalAccessException | SQLException e) { + throw new RuntimeException(e); + } + }); + return true; + }).findFirst().orElse(false); + } + + @NotNull + @Override + public T insert(@NotNull T object) throws ConflictException { + var sql = "insert into () values() on conflict do nothing returning *"; + + var updated = manager.db.withHandle(handle -> { + var query = handle.createUpdate(sql) + .define("name", name) + .define("columns", columns.entrySet().stream() + .filter(e -> { + try { + return !(e.getValue().getAnnotation(Column.class).autoincrement() && ((Number) e.getValue().get(object)).longValue() <= 0); + } catch(IllegalAccessException ex) { + throw new RuntimeException(ex); + } + }) + .map(e -> '"' + e.getKey() + '"') + .collect(Collectors.joining(", ")) + ) + .define("values", columns.entrySet().stream() + .filter(e -> { + try { + return !(e.getValue().getAnnotation(Column.class).autoincrement() && ((Number) e.getValue().get(object)).longValue() <= 0); + } catch(IllegalAccessException ex) { + throw new RuntimeException(ex); + } + }) + .map(e -> ":" + e.getKey()) + .collect(Collectors.joining(", ")) + ); + + return execute(object, query); + }); + + if(updated) return object; + else throw new ConflictException(); + } + + @Override + public boolean update(@NotNull T object) { + var sql = "update set "; + return manager.db.withHandle(handle -> { + var query = handle.createUpdate(sql) + .define("name", name) + .define("update", columns.keySet().stream() + .filter(k -> !this.keys.containsKey(k)) + .map(k -> '"' + k + "\" = :" + k) + .collect(Collectors.joining(", ")) + ); + + return execute(object, query); + }); + } + @NotNull @Override - public T insert(@NotNull T object) { + public T insertOrUpdate(@NotNull T object) { var sql = "insert into () values() "; if(!keys.isEmpty()) sql += " on conflict() do update set "; @@ -180,26 +259,7 @@ public T insert(@NotNull T object) { .collect(Collectors.joining(", ")) ); - columns.forEach((name, field) -> { - try { - query.bind(name, manager.getArgument(field.getGenericType(), field, field.get(object))); - } catch(IllegalAccessException e) { - throw new RuntimeException(e); - } - }); - - query.executeAndReturnGeneratedKeys() - .map((rs, ctx) -> { - columns.forEach((name, field) -> { - try { - field.set(object, manager.parse(field.getGenericType(), field, manager.extract(field.getGenericType(), field, name, rs))); - } catch(IllegalAccessException | SQLException e) { - throw new RuntimeException(e); - } - }); - - return null; - }).one(); + execute(object, query); }); return object; diff --git a/src/main/java/de/mineking/javautils/database/exception/ConflictException.java b/src/main/java/de/mineking/javautils/database/exception/ConflictException.java new file mode 100644 index 0000000..a0fcbd5 --- /dev/null +++ b/src/main/java/de/mineking/javautils/database/exception/ConflictException.java @@ -0,0 +1,4 @@ +package de.mineking.javautils.database.exception; + +public class ConflictException extends SQLException { +} diff --git a/src/main/java/de/mineking/javautils/database/exception/SQLException.java b/src/main/java/de/mineking/javautils/database/exception/SQLException.java new file mode 100644 index 0000000..7f270be --- /dev/null +++ b/src/main/java/de/mineking/javautils/database/exception/SQLException.java @@ -0,0 +1,4 @@ +package de.mineking.javautils.database.exception; + +public class SQLException extends RuntimeException { +} diff --git a/src/test/java/DatabaseTest.java b/src/test/java/DatabaseTest.java index ff3120f..da50774 100644 --- a/src/test/java/DatabaseTest.java +++ b/src/test/java/DatabaseTest.java @@ -28,7 +28,7 @@ public void insert() { @Test public void delete() { - new TestClass(table, TE.A, EnumSet.noneOf(TE.class)).update().delete(); + new TestClass(table, TE.A, EnumSet.noneOf(TE.class)).insertOrUpdate().delete(); } @Test diff --git a/src/test/java/InsertTest.java b/src/test/java/InsertTest.java new file mode 100644 index 0000000..04ee5bd --- /dev/null +++ b/src/test/java/InsertTest.java @@ -0,0 +1,36 @@ +import data.TE; +import data.TestClass; +import de.mineking.javautils.database.DatabaseManager; +import de.mineking.javautils.database.Table; +import de.mineking.javautils.database.exception.ConflictException; +import org.junit.jupiter.api.Test; + +import java.util.EnumSet; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class InsertTest { + public final DatabaseManager manager; + public final Table table; + + public InsertTest() { + manager = new DatabaseManager("jdbc:postgresql://localhost:5433/test", "postgres", "test123"); + table = manager.getTable(TestClass.class, this::createInstance, "test").createTable(); + } + + private TestClass createInstance() { + return new TestClass(table); + } + + @Test + public void insert() { + var test = new TestClass(table, TE.B, EnumSet.noneOf(TE.class)); + + table.insert(test); + assertThrows(ConflictException.class, () -> table.insert(test)); + + test.id = null; + test.insert(); + assertThrows(ConflictException.class, test::insert); + } +} From dc557c0e3579b53e41a69b7a96be58bba105c648 Mon Sep 17 00:00:00 2001 From: MineKing Date: Sun, 28 Jan 2024 16:50:15 +0100 Subject: [PATCH 2/4] Create proper unit test --- .github/workflows/check.yml | 17 +++++ build.gradle | 6 +- .../javautils/database/TableImpl.java | 8 ++- src/test/java/ArrayTest.java | 58 ---------------- src/test/java/CustomTableTest.java | 26 ------- src/test/java/DatabaseTest.java | 69 ------------------- src/test/java/InsertTest.java | 36 ---------- src/test/java/KeyTest.java | 40 ----------- src/test/java/data/CustomTable.java | 17 ----- src/test/java/data/KeyTestClass.java | 25 ------- src/test/java/data/TE.java | 5 -- src/test/java/data/TestClass.java | 43 ------------ src/test/java/database/InsertTest.java | 68 ++++++++++++++++++ 13 files changed, 96 insertions(+), 322 deletions(-) delete mode 100644 src/test/java/ArrayTest.java delete mode 100644 src/test/java/CustomTableTest.java delete mode 100644 src/test/java/DatabaseTest.java delete mode 100644 src/test/java/InsertTest.java delete mode 100644 src/test/java/KeyTest.java delete mode 100644 src/test/java/data/CustomTable.java delete mode 100644 src/test/java/data/KeyTestClass.java delete mode 100644 src/test/java/data/TE.java delete mode 100644 src/test/java/data/TestClass.java create mode 100644 src/test/java/database/InsertTest.java diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c739a0d..e26801a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -24,6 +24,23 @@ jobs: build: runs-on: ubuntu-latest + services: + postgres: + image: postgres + + env: + POSTGRES_PASSWORD: postgres + POSTGRES_USER: postgres + POSTGRES_DB: postgres + + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5433:5432 + steps: - uses: actions/checkout@v4 - name: Set up JDK 17 diff --git a/build.gradle b/build.gradle index 84676d4..1a4cd76 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,11 @@ dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' - testImplementation 'ch.qos.logback:logback-classic:1.3.8' + testImplementation 'ch.qos.logback:logback-classic:1.4.12' + + testCompileOnly 'org.projectlombok:lombok:1.18.30' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' + testImplementation 'org.postgresql:postgresql:42.6.0' testImplementation 'org.jdbi:jdbi3-postgres:3.39.0' } diff --git a/src/main/java/de/mineking/javautils/database/TableImpl.java b/src/main/java/de/mineking/javautils/database/TableImpl.java index d3ecbc6..9fe6e96 100644 --- a/src/main/java/de/mineking/javautils/database/TableImpl.java +++ b/src/main/java/de/mineking/javautils/database/TableImpl.java @@ -201,7 +201,9 @@ public T insert(@NotNull T object) throws ConflictException { @Override public boolean update(@NotNull T object) { - var sql = "update set "; + var sql = "update set returning *"; + var identifier = Where.of(this, object); + return manager.db.withHandle(handle -> { var query = handle.createUpdate(sql) .define("name", name) @@ -209,7 +211,9 @@ public boolean update(@NotNull T object) { .filter(k -> !this.keys.containsKey(k)) .map(k -> '"' + k + "\" = :" + k) .collect(Collectors.joining(", ")) - ); + ) + .define("where", identifier.format()) + .bindMap(identifier.formatValues(this)); return execute(object, query); }); diff --git a/src/test/java/ArrayTest.java b/src/test/java/ArrayTest.java deleted file mode 100644 index 3e4a913..0000000 --- a/src/test/java/ArrayTest.java +++ /dev/null @@ -1,58 +0,0 @@ -import de.mineking.javautils.database.Column; -import de.mineking.javautils.database.DatabaseManager; -import de.mineking.javautils.database.Table; -import org.jdbi.v3.core.statement.SqlLogger; -import org.jdbi.v3.core.statement.StatementContext; -import org.jdbi.v3.postgres.PostgresPlugin; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.Set; - -public class ArrayTest { - public final DatabaseManager manager; - public final Table table; - - public class ATest { - @Column - private final Set[] array; - - public ATest(Set[] array) { - this.array = array; - } - - public ATest() { - this(null); - } - - @Override - public String toString() { - return Arrays.deepToString(array); - } - } - - public ArrayTest() { - manager = new DatabaseManager("jdbc:postgresql://localhost:5433/test", "postgres", "test123"); - manager.getDriver().installPlugin(new PostgresPlugin()); - manager.getDriver().setSqlLogger(new SqlLogger() { - @Override - public void logBeforeExecution(StatementContext context) { - System.out.println(context.getParsedSql().getSql()); - } - }); - - table = manager.getTable(ATest.class, ATest::new, "array_test").createTable(); - } - - @SuppressWarnings("unchecked") - @Test - public void insert() { - table.insert(new ATest(new Set[] {Set.of("a", "b", "c", "d", "e"), Set.of("d", "e"), Set.of(), Set.of("a")})); - //table.insert(new ATest(new Integer[][] {{1, 2, 3}, {4, 5, 6}})); - } - - @Test - public void select() { - System.out.println(table.selectAll()); - } -} diff --git a/src/test/java/CustomTableTest.java b/src/test/java/CustomTableTest.java deleted file mode 100644 index cb5786f..0000000 --- a/src/test/java/CustomTableTest.java +++ /dev/null @@ -1,26 +0,0 @@ -import data.CustomTable; -import data.TestClass; -import de.mineking.javautils.database.DatabaseManager; -import org.junit.jupiter.api.Test; - -public class CustomTableTest { - public final DatabaseManager manager; - public final CustomTable table; - - public CustomTableTest() { - manager = new DatabaseManager("jdbc:postgresql://localhost:5433/test", "postgres", "test123"); - table = manager.getTable(CustomTable.class, TestClass.class, this::createInstance, "test").createTable(); - } - - private TestClass createInstance() { - return new TestClass(table); - } - - @Test - public void create() {} - - @Test - public void select2() { - System.out.println(table.select2()); - } -} diff --git a/src/test/java/DatabaseTest.java b/src/test/java/DatabaseTest.java deleted file mode 100644 index da50774..0000000 --- a/src/test/java/DatabaseTest.java +++ /dev/null @@ -1,69 +0,0 @@ -import data.TE; -import data.TestClass; -import de.mineking.javautils.database.*; -import org.junit.jupiter.api.Test; - -import java.util.EnumSet; - -public class DatabaseTest { - public final DatabaseManager manager; - public final Table table; - - public DatabaseTest() { - manager = new DatabaseManager("jdbc:postgresql://localhost:5433/test", "postgres", "test123"); - table = manager.getTable(TestClass.class, this::createInstance, "test").createTable(); - } - - private TestClass createInstance() { - return new TestClass(table); - } - - @Test - public void create() {} - - @Test - public void insert() { - System.out.println(new TestClass(table, TE.B, EnumSet.allOf(TE.class)).update()); - } - - @Test - public void delete() { - new TestClass(table, TE.A, EnumSet.noneOf(TE.class)).insertOrUpdate().delete(); - } - - @Test - public void update() { - table.selectOne(Where.equals("id", "001zlwbQgDo")).ifPresent(e -> { - e.enumTest = TE.C; - e.update(); - }); - } - - @Test - public void selectMany() { - var selected = table.selectMany( - Where.anyOf( - Where.equals("id", "001zlwbGkKW"), - Where.equals("id", "001zlwbQgDo"), - Where.equals("id", "001zlwbL9BA") - ), - Order.descendingBy("id") - .offset(1) - .limit(2) - ); - - System.out.println(selected); - } - - @Test - public void selectAll() { - System.out.println(table.selectAll()); - System.out.println(table.selectAll(Order.ascendingBy("id"))); - System.out.println(table.selectAll(Order.descendingBy("id"))); - } - - @Test - public void deleteAll() { - table.deleteAll(); - } -} diff --git a/src/test/java/InsertTest.java b/src/test/java/InsertTest.java deleted file mode 100644 index 04ee5bd..0000000 --- a/src/test/java/InsertTest.java +++ /dev/null @@ -1,36 +0,0 @@ -import data.TE; -import data.TestClass; -import de.mineking.javautils.database.DatabaseManager; -import de.mineking.javautils.database.Table; -import de.mineking.javautils.database.exception.ConflictException; -import org.junit.jupiter.api.Test; - -import java.util.EnumSet; - -import static org.junit.jupiter.api.Assertions.assertThrows; - -public class InsertTest { - public final DatabaseManager manager; - public final Table table; - - public InsertTest() { - manager = new DatabaseManager("jdbc:postgresql://localhost:5433/test", "postgres", "test123"); - table = manager.getTable(TestClass.class, this::createInstance, "test").createTable(); - } - - private TestClass createInstance() { - return new TestClass(table); - } - - @Test - public void insert() { - var test = new TestClass(table, TE.B, EnumSet.noneOf(TE.class)); - - table.insert(test); - assertThrows(ConflictException.class, () -> table.insert(test)); - - test.id = null; - test.insert(); - assertThrows(ConflictException.class, test::insert); - } -} diff --git a/src/test/java/KeyTest.java b/src/test/java/KeyTest.java deleted file mode 100644 index 3c14e31..0000000 --- a/src/test/java/KeyTest.java +++ /dev/null @@ -1,40 +0,0 @@ -import data.KeyTestClass; -import de.mineking.javautils.database.DatabaseManager; -import de.mineking.javautils.database.Table; -import de.mineking.javautils.database.Where; -import org.junit.jupiter.api.Test; - -public class KeyTest { - public final DatabaseManager manager; - public final Table table; - - public KeyTest() { - manager = new DatabaseManager("jdbc:postgresql://localhost:5433/test", "postgres", "test123"); - table = manager.getTable(KeyTestClass.class, KeyTestClass::new, "key_test").createTable(); - } - - @Test - public void create() { - } - - @Test - public void insert() { - System.out.println(table.insert(new KeyTestClass("Test"))); - } - - @Test - public void update() { - table.selectOne(Where.equals("id", 1)).ifPresent(o -> { - o.text = "abc"; - table.insert(o); - }); - } - - @Test - public void copy() { - table.selectOne(Where.equals("id", 1)).ifPresent(o -> { - o.id = 0; - table.insert(o); - }); - } -} diff --git a/src/test/java/data/CustomTable.java b/src/test/java/data/CustomTable.java deleted file mode 100644 index 15f96d5..0000000 --- a/src/test/java/data/CustomTable.java +++ /dev/null @@ -1,17 +0,0 @@ -package data; - -import de.mineking.javautils.database.Order; -import de.mineking.javautils.database.Table; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public interface CustomTable extends Table { - @NotNull - @Override - CustomTable createTable(); - - default List select2() { - return selectAll(Order.empty().limit(2)); - } -} diff --git a/src/test/java/data/KeyTestClass.java b/src/test/java/data/KeyTestClass.java deleted file mode 100644 index 2e1ceb5..0000000 --- a/src/test/java/data/KeyTestClass.java +++ /dev/null @@ -1,25 +0,0 @@ -package data; - -import de.mineking.javautils.database.Column; - -public class KeyTestClass { - @Column(autoincrement = true, key = true) - public int id; - - @Column - public String text; - - public KeyTestClass( String text) { - id = 0; - this.text = text; - } - - public KeyTestClass() { - this(null); - } - - @Override - public String toString() { - return id + ": " + text; - } -} diff --git a/src/test/java/data/TE.java b/src/test/java/data/TE.java deleted file mode 100644 index 0f9e5c6..0000000 --- a/src/test/java/data/TE.java +++ /dev/null @@ -1,5 +0,0 @@ -package data; - -public enum TE { - A, B, C -} diff --git a/src/test/java/data/TestClass.java b/src/test/java/data/TestClass.java deleted file mode 100644 index 4d6327a..0000000 --- a/src/test/java/data/TestClass.java +++ /dev/null @@ -1,43 +0,0 @@ -package data; - -import de.mineking.javautils.ID; -import de.mineking.javautils.database.Column; -import de.mineking.javautils.database.DataClass; -import de.mineking.javautils.database.Table; -import org.jetbrains.annotations.NotNull; - -import java.util.EnumSet; - -public class TestClass implements DataClass { - private final Table table; - - @NotNull - @Override - public Table getTable() { - return table; - } - - @Column(key = true) - public ID id; - - @Column - public TE enumTest; - - @Column - public EnumSet enums; - - public TestClass(Table table) { - this.table = table; - } - - public TestClass(Table table, TE e, EnumSet enums) { - this.table = table; - this.enumTest = e; - this.enums = enums; - } - - @Override - public String toString() { - return id.asString() + ": " + enumTest + ", " + enums + " (" + (id.getTimeCreated().toEpochMilli() - System.currentTimeMillis()) + ")"; - } -} diff --git a/src/test/java/database/InsertTest.java b/src/test/java/database/InsertTest.java new file mode 100644 index 0000000..02a4e23 --- /dev/null +++ b/src/test/java/database/InsertTest.java @@ -0,0 +1,68 @@ +package database; + +import de.mineking.javautils.ID; +import de.mineking.javautils.database.*; +import de.mineking.javautils.database.exception.ConflictException; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class InsertTest { + private final DatabaseManager manager; + private final Table table; + + @NoArgsConstructor + @AllArgsConstructor + private class TestClass implements DataClass { + @Column(key = true) + public ID id; + + @Column + public String test; + + @NotNull + @Override + public Table getTable() { + return table; + } + } + + public InsertTest() { + manager = new DatabaseManager("jdbc:postgresql://localhost:5433/postgres", "postgres", "postgres"); + table = manager.getTable(TestClass.class, TestClass::new, "insert").createTable(); + } + + @Test + public void insert() { + var test = new TestClass(); + + assertTrue(table.selectOne(Where.equals("id", test.id)).isEmpty()); + + table.insert(test); + assertThrows(ConflictException.class, () -> table.insert(test)); + + assertTrue(table.selectOne(Where.equals("id", test.id)).isPresent()); + + test.id = null; + test.insert(); + assertThrows(ConflictException.class, test::insert); + } + + @Test + public void update() { + var test = new TestClass(); + table.insert(test); + + assertNull(table.selectOne(Where.equals("id", test.id)).get().test); + + test.test = "abc"; + assertTrue(test.update()); + assertEquals(table.selectOne(Where.equals("id", test.id)).get().test, "abc"); + + test.id = ID.generate(); + assertFalse(test.update()); + } +} From 3263ab31da88e2c0e4c98d214ef4081c934f39e0 Mon Sep 17 00:00:00 2001 From: MineKing Date: Sun, 28 Jan 2024 16:53:08 +0100 Subject: [PATCH 3/4] Make gradle run unit tests --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e26801a..4ce1e5f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -51,7 +51,7 @@ jobs: - name: Build with Gradle uses: gradle/actions/setup-gradle@v3 with: - arguments: build -x test + arguments: build - uses: actions/upload-artifact@v4 with: name: Package From 20517e8922256e8b991799a3836ffab6bf004958 Mon Sep 17 00:00:00 2001 From: MineKing Date: Sun, 28 Jan 2024 18:25:38 +0100 Subject: [PATCH 4/4] Rename insertOrUpdate to upsert --- src/main/java/de/mineking/javautils/database/DataClass.java | 4 ++-- src/main/java/de/mineking/javautils/database/Table.java | 2 +- src/main/java/de/mineking/javautils/database/TableImpl.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/mineking/javautils/database/DataClass.java b/src/main/java/de/mineking/javautils/database/DataClass.java index 72c3612..4604250 100644 --- a/src/main/java/de/mineking/javautils/database/DataClass.java +++ b/src/main/java/de/mineking/javautils/database/DataClass.java @@ -20,8 +20,8 @@ default boolean update() { @NotNull @SuppressWarnings("unchecked") - default T insertOrUpdate() { - return getTable().insertOrUpdate((T) this); + default T upsert() { + return getTable().upsert((T) this); } @NotNull diff --git a/src/main/java/de/mineking/javautils/database/Table.java b/src/main/java/de/mineking/javautils/database/Table.java index c213534..0f764ec 100644 --- a/src/main/java/de/mineking/javautils/database/Table.java +++ b/src/main/java/de/mineking/javautils/database/Table.java @@ -52,7 +52,7 @@ default List selectAll() { boolean update(@NotNull T object); @NotNull - T insertOrUpdate(@NotNull T object); + T upsert(@NotNull T object); int delete(@NotNull Where where); diff --git a/src/main/java/de/mineking/javautils/database/TableImpl.java b/src/main/java/de/mineking/javautils/database/TableImpl.java index 9fe6e96..7531115 100644 --- a/src/main/java/de/mineking/javautils/database/TableImpl.java +++ b/src/main/java/de/mineking/javautils/database/TableImpl.java @@ -221,7 +221,7 @@ public boolean update(@NotNull T object) { @NotNull @Override - public T insertOrUpdate(@NotNull T object) { + public T upsert(@NotNull T object) { var sql = "insert into () values() "; if(!keys.isEmpty()) sql += " on conflict() do update set ";