Skip to content

Commit 0d6e0b3

Browse files
authored
Merge pull request #48 from oneteme/release-4.1.1
Release 4.1.1
2 parents 6bb057c + b825c39 commit 0d6e0b3

File tree

137 files changed

+5093
-2810
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+5093
-2810
lines changed

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>io.github.oneteme</groupId>
55
<artifactId>jquery</artifactId>
6-
<version>3.0.0</version>
6+
<version>4.0.0-SNAPSHOT</version>
77
<packaging>jar</packaging>
88
<name>java-query</name>
99
<description>java-query</description>
@@ -26,7 +26,7 @@
2626
</license>
2727
</licenses>
2828
<properties>
29-
<java.version>11</java.version>
29+
<java.version>17</java.version>
3030
<junit.version>5.8.1</junit.version>
3131
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3232
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -39,13 +39,13 @@
3939
<dependency>
4040
<groupId>org.projectlombok</groupId>
4141
<artifactId>lombok</artifactId>
42-
<version>1.18.22</version>
42+
<version>1.18.32</version>
4343
<scope>provided</scope>
4444
</dependency>
4545
<dependency>
4646
<groupId>org.slf4j</groupId>
4747
<artifactId>slf4j-api</artifactId>
48-
<version>1.7.25</version>
48+
<version>1.7.36</version>
4949
<scope>provided</scope>
5050
</dependency>
5151
<dependency>

src/main/java/org/usf/jquery/core/DBOperation.java renamed to src/main/java/org/usf/jquery/core/AggregateFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
*
77
*/
88
@FunctionalInterface
9-
public interface DBOperation extends DBCallable, NestedSql {
9+
public interface AggregateFunction extends FunctionOperator {
1010

1111
}

src/main/java/org/usf/jquery/core/AggregationFunction.java

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.usf.jquery.core;
2+
3+
import static org.usf.jquery.core.JDBCType.typeOf;
4+
import static org.usf.jquery.core.Validation.requireAtLeastNArgs;
5+
6+
import java.util.function.Function;
7+
8+
/**
9+
*
10+
* @author u$f
11+
*
12+
*/
13+
interface ArgTypeRef extends Function<Object[], JDBCType> {
14+
15+
static ArgTypeRef firstArgJdbcType() {
16+
return arr-> typeOf(requireAtLeastNArgs(1, arr,
17+
()-> "ArgTypeRef function")[0]).orElse(null); // not sure
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.usf.jquery.core;
2+
3+
import static org.usf.jquery.core.Validation.requireNArgs;
4+
5+
/**
6+
*
7+
* @author u$f
8+
*
9+
*/
10+
@FunctionalInterface
11+
interface ArithmeticOperator extends Operator {
12+
13+
@Override
14+
default String sql(QueryParameterBuilder builder, Object[] args) {
15+
requireNArgs(2, args, ArithmeticOperator.class::getSimpleName);
16+
return "(" + builder.appendLiteral(args[0]) + id() + builder.appendLiteral(args[1]) + ")";
17+
}
18+
}

src/main/java/org/usf/jquery/core/AsciiResultMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*/
3535
@Slf4j
3636
@RequiredArgsConstructor
37-
public final class AsciiResultMapper implements ResultMapper<Void> {
37+
public final class AsciiResultMapper implements ResultSetMapper<Void> {
3838

3939
private static final int MAX_LENGTH = 50;
4040

@@ -87,7 +87,7 @@ public Void map(ResultSet rs) throws SQLException {
8787
}
8888
writer.writeLine(div);
8989
} catch (IOException e) {
90-
throw new RuntimeException("error while mapping results", e);
90+
throw new MappingException("error writing results", e);
9191
}
9292
log.info("{} rows mapped in {} ms", rw, currentTimeMillis() - bg);
9393
return null;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.usf.jquery.core;
2+
3+
import static org.usf.jquery.core.Utils.joinArray;
4+
5+
/**
6+
*
7+
* @author u$f
8+
*
9+
*/
10+
@SuppressWarnings("serial")
11+
public final class BadArgumentException extends JQueryException {
12+
13+
public BadArgumentException(String message) {
14+
super(message);
15+
}
16+
17+
public BadArgumentException(String message, Throwable cause) {
18+
super(message, cause);
19+
}
20+
21+
public static BadArgumentException badArgumentTypeException(JavaType[] types, Object actual) {
22+
String type = actual instanceof DBColumn c ? ":"+ c.getType() : "";
23+
return new BadArgumentException(formatMessage("bad argument type", joinArray("|", types), actual + type));
24+
}
25+
26+
public static BadArgumentException badArgumentCountException(int count, int actual) {
27+
return new BadArgumentException(formatMessage("bad argument count", count, actual));
28+
}
29+
30+
public static BadArgumentException badArgumentsException(String exp, String actual, Exception e) {
31+
return new BadArgumentException(formatMessage("bad arguments", exp, actual), e);
32+
}
33+
}

src/main/java/org/usf/jquery/core/BasicComparator.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,11 @@
88
*
99
*/
1010
@FunctionalInterface
11-
public interface BasicComparator extends DBComparator {
12-
13-
String symbol();
11+
public interface BasicComparator extends Comparator {
1412

1513
@Override
1614
default String sql(QueryParameterBuilder builder, Object[] args) {
1715
requireNArgs(2, args, BasicComparator.class::getSimpleName);
18-
return builder.appendParameter(args[0]) + symbol() + builder.appendParameter(args[1]);
19-
}
20-
21-
static BasicComparator basicComparator(final String name) {
22-
return ()-> name;
16+
return builder.appendParameter(args[0]) + id() + builder.appendParameter(args[1]);
2317
}
2418
}

src/main/java/org/usf/jquery/core/CaseColumn.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
import static org.usf.jquery.core.QueryParameterBuilder.addWithValue;
55
import static org.usf.jquery.core.SqlStringBuilder.SPACE;
66

7+
import java.util.ArrayList;
78
import java.util.Collection;
8-
import java.util.LinkedList;
9+
import java.util.Objects;
910

1011
import lombok.AccessLevel;
1112
import lombok.RequiredArgsConstructor;
@@ -16,21 +17,25 @@
1617
*
1718
*/
1819
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
19-
public final class CaseColumn implements DBColumn {
20+
public final class CaseColumn implements DBColumn { // TD override isAggregation
2021

21-
private final Collection<WhenExpression> expressions = new LinkedList<>();
22+
private final Collection<WhenExpression> expressions = new ArrayList<>();
2223

2324
@Override
2425
public String sql(QueryParameterBuilder builder) {
25-
builder.forceValue(true); //add filters as value
26-
try {
27-
return expressions.stream()
28-
.map(o-> o.sql(builder))
29-
.collect(joining(SPACE, "CASE ", " END"));
30-
}
31-
finally {
32-
builder.forceValue(false);
33-
}
26+
var b = builder.withValue(); //force literal parameter
27+
return expressions.stream() //empty !?
28+
.map(o-> o.sql(b))
29+
.collect(joining(SPACE, "CASE ", " END"));
30+
}
31+
32+
@Override
33+
public JDBCType getType() {
34+
return expressions.stream()
35+
.map(WhenExpression::getType)
36+
.filter(Objects::nonNull) // should have same type
37+
.findAny()
38+
.orElse(null);
3439
}
3540

3641
public CaseColumn append(WhenExpression we) {
Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,33 @@
11
package org.usf.jquery.core;
22

3-
import static org.usf.jquery.core.Validation.requireNArgs;
4-
5-
import java.util.function.IntFunction;
3+
import static org.usf.jquery.core.Validation.requireAtLeastNArgs;
64

75
/**
86
*
97
* @author u$f
108
*
119
*/
1210
@FunctionalInterface
13-
public interface CastFunction extends DBFunction {
11+
public interface CastFunction extends FunctionOperator {
1412

1513
String asType();
1614

1715
@Override
18-
default String name() {
16+
default String id() {
1917
return "CAST";
2018
}
2119

2220
@Override
23-
default String sql(QueryParameterBuilder builder, Object[] args, IntFunction<SQLType> indexedType) {
24-
var n = "VARCHAR".equals(asType()) ? 2 : 1; //require length
25-
requireNArgs(n, args, ()-> name() + "." + asType());
26-
return new SqlStringBuilder(name())
27-
.append("(").append(builder.appendLitteral(args[0], indexedType.apply(0))).append(" AS ").append(asType())
28-
.appendIf(n == 2, ()-> "(" + builder.appendLitteral(args[1], indexedType.apply(1))+ ")")
29-
.append(")")
30-
.toString();
31-
}
32-
33-
static CastFunction castFunction(String type) {
34-
return ()-> type;
21+
default String sql(QueryParameterBuilder builder, Object[] args) {
22+
requireAtLeastNArgs(1, args, ()-> id() + "_AS_" + asType());
23+
var sb = new SqlStringBuilder(id())
24+
.append("(")
25+
.append(builder.appendLiteral(args[0])).append(" AS ").append(asType());
26+
if(args.length > 1) {
27+
sb.append("(")
28+
.append(builder.appendLiteralArray(args, 1))
29+
.append(")");
30+
}
31+
return sb.append(")").toString();
3532
}
36-
3733
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.usf.jquery.core;
2+
3+
import static org.usf.jquery.core.LogicalOperator.AND;
4+
import static org.usf.jquery.core.LogicalOperator.OR;
5+
6+
/**
7+
*
8+
* @author u$f
9+
*
10+
*/
11+
public interface Chainable<T extends Chainable<T>> {
12+
13+
T append(LogicalOperator op, T exp);
14+
15+
default T and(T exp) {
16+
return append(AND, exp);
17+
}
18+
19+
default T or(T exp) {
20+
return append(OR, exp);
21+
}
22+
}
Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package org.usf.jquery.core;
22

3+
import static java.util.Objects.nonNull;
34
import static java.util.stream.Collectors.joining;
4-
import static java.util.stream.Collectors.toList;
55
import static org.usf.jquery.core.QueryParameterBuilder.addWithValue;
6+
import static org.usf.jquery.core.Utils.arrayJoin;
67

7-
import java.util.Collection;
8-
import java.util.LinkedList;
98
import java.util.stream.Stream;
109

11-
import lombok.NonNull;
12-
1310
/**
1411
*
1512
* @author u$f
@@ -19,38 +16,34 @@
1916
public final class ColumnFilterGroup implements DBFilter {
2017

2118
private final LogicalOperator operator;
22-
private final Collection<DBFilter> filters;
23-
24-
ColumnFilterGroup(@NonNull LogicalOperator operator, DBFilter... filters) {//assert length > 1
19+
private final DBFilter[] filters;
20+
21+
ColumnFilterGroup(LogicalOperator operator, DBFilter... filters) {
2522
this.operator = operator;
26-
this.filters = filters == null
27-
? new LinkedList<>()
28-
: Stream.of(filters).collect(toList());
23+
this.filters = filters;
2924
}
30-
25+
3126
@Override
3227
public String sql(QueryParameterBuilder builder) {
33-
return "(" + filters.stream().map(o-> o.sql(builder)).collect(joining(operator.sql())) + ")";
28+
return "(" + Stream.of(filters)
29+
.map(o-> o.sql(builder))
30+
.collect(joining(operator.sql())) + ")";
3431
}
3532

3633
@Override
3734
public boolean isAggregation() {
38-
return filters.stream()
39-
.anyMatch(NestedSql::isAggregation);
35+
return nonNull(filters) && Stream.of(filters).anyMatch(DBFilter::isAggregation);
4036
}
4137

4238
@Override
4339
public DBFilter append(LogicalOperator op, DBFilter filter) {
44-
if(operator == op) {
45-
filters.add(filter);
46-
return this;
47-
}
48-
return new ColumnFilterGroup(op, this, filter);
40+
return operator == op
41+
? new ColumnFilterGroup(op, arrayJoin(filters, filter))
42+
: new ColumnFilterGroup(op, this, filter);
4943
}
5044

5145
@Override
5246
public String toString() {
5347
return sql(addWithValue());
5448
}
55-
5649
}

0 commit comments

Comments
 (0)