diff --git a/src/main/java/de/mineking/javautils/database/Table.java b/src/main/java/de/mineking/javautils/database/Table.java index aca1c05..4778b59 100644 --- a/src/main/java/de/mineking/javautils/database/Table.java +++ b/src/main/java/de/mineking/javautils/database/Table.java @@ -55,6 +55,8 @@ default List selectAll() { @NotNull T update(@NotNull T object) throws ConflictException; + void updateField(@NotNull Where where, @NotNull String name, @NotNull Object value); + @NotNull default T upsert(@NotNull T object) throws ConflictException { try { diff --git a/src/main/java/de/mineking/javautils/database/TableImpl.java b/src/main/java/de/mineking/javautils/database/TableImpl.java index 25a4aed..9b53b7d 100644 --- a/src/main/java/de/mineking/javautils/database/TableImpl.java +++ b/src/main/java/de/mineking/javautils/database/TableImpl.java @@ -241,6 +241,21 @@ public T update(@NotNull T object) throws ConflictException { else throw new ConflictException(); } + @Override + public void updateField(@NotNull Where where, @NotNull String name, @NotNull Object value) { + var field = columns.get(name); + if(field == null) throw new IllegalArgumentException("Column '" + name + "' not found"); + + manager.db.useHandle(handle -> handle.createUpdate("update set = :value ") + .define("table", this.name) + .define("name", name) + .define("where", where.format()) + .bind("value", manager.getArgument(field.getGenericType(), field, value)) + .bindMap(where.formatValues(this)) + .execute() + ); + } + @Override public boolean equals(Object obj) { return obj instanceof Table t && t.getName().equals(name);