• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jhannes / fluent-jdbc / #190

01 Sep 2025 11:48AM UTC coverage: 92.296% (-0.2%) from 92.457%
#190

push

jhannes-test
Introduce DataQueryParameter for more extensible queries

72 of 85 new or added lines in 18 files covered. (84.71%)

1 existing line in 1 file now uncovered.

1186 of 1285 relevant lines covered (92.3%)

0.92 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.0
/src/main/java/org/fluentjdbc/DatabaseInsertOrUpdateBuilder.java
1
package org.fluentjdbc;
2

3
import javax.annotation.CheckReturnValue;
4
import java.sql.Connection;
5
import java.util.List;
6
import java.util.Map;
7

8
/**
9
 * Generate a statement that will result in either an <code>UPDATE ...</code> or <code>INSERT ...</code> depending
10
 * on whether the row exists already by collecting field names and parameters. Example:
11
 *
12
 * <pre>
13
 * int count = table
14
 *      .where("id", id)
15
 *      .insertOrUpdate()
16
 *      .setField("name", "Something")
17
 *      .setField("code", 102)
18
 *      .execute(connection);
19
 * </pre>
20
 */
21
public class DatabaseInsertOrUpdateBuilder implements DatabaseUpdatable<DatabaseInsertOrUpdateBuilder> {
22

23
    private DatabaseUpdateBuilder updateBuilder;
24
    private DatabaseInsertBuilder insertBuilder;
25

26
    public DatabaseInsertOrUpdateBuilder(DatabaseTable table) {
1✔
27
        updateBuilder = new DatabaseUpdateBuilder(table);
1✔
28
        insertBuilder = new DatabaseInsertBuilder(table);
1✔
29
    }
1✔
30

31
    /**
32
     * Adds parameters to the <code>INSERT</code> and <code>UPDATE</code> statements and list of parameters
33
     */
34
    public DatabaseInsertOrUpdateBuilder addParameters(List<DatabaseQueryParameter> queryParameters) {
NEW
35
        updateBuilder = updateBuilder.addParameters(queryParameters);
×
NEW
36
        insertBuilder = insertBuilder.addParameters(queryParameters);
×
UNCOV
37
        return this;
×
38
    }
39

40
    /**
41
     * Adds a parameter to the <code>INSERT</code> and <code>UPDATE</code> statements and list of parameters
42
     */
43
    @CheckReturnValue
44
    public DatabaseInsertOrUpdateBuilder addParameter(DatabaseQueryParameter parameter) {
45
        updateBuilder = updateBuilder.addParameter(parameter);
1✔
46
        insertBuilder = insertBuilder.addParameter(parameter);
1✔
47
        return this;
1✔
48
    }
49

50
    /**
51
     * Calls {@link #setField(String, Object)} for each fieldName and parameter
52
     */
53
    @Override
54
    public DatabaseInsertOrUpdateBuilder setFields(List<String> fields, List<?> values) {
NEW
55
        updateBuilder = updateBuilder.setFields(fields, values);
×
NEW
56
        insertBuilder = insertBuilder.setFields(fields, values);
×
NEW
57
        return this;
×
58
    }
59

60
    /**
61
     * Calls {@link #setField(String, Object)} for each key and value in the parameter map
62
     */
63
    @Override
64
    public DatabaseInsertOrUpdateBuilder setFields(Map<String, ?> fields) {
65
        updateBuilder = updateBuilder.setFields(fields);
1✔
66
        insertBuilder = insertBuilder.setFields(fields);
1✔
67
        return this;
1✔
68
    }
69

70
    @CheckReturnValue
71
    public DatabaseInsertOrUpdateBuilder where(DatabaseWhereBuilder whereClause) {
72
        updateBuilder = updateBuilder.where(whereClause);
1✔
73
        //noinspection ResultOfMethodCallIgnored
74
        insertBuilder.addParameters(whereClause.getQueryParameters());
1✔
75
        return this;
1✔
76
    }
77

78
    /**
79
     * Will generate <code>UPDATE</code> statements, set parameters and execute to database
80
     * @return returns the number of rows updated or -1 if a row was inserted
81
     */
82
    public int execute(Connection connection) {
83
        int rowCount = updateBuilder.execute(connection);
1✔
84
        if (rowCount != 0) {
1✔
85
            return rowCount;
1✔
86
        }
87
        insertBuilder.execute(connection);
1✔
88
        return -1;
1✔
89
    }
90

91
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc