Skip to content

Commit dbee7aa

Browse files
committed
Fixes
1 parent 81d3a8f commit dbee7aa

File tree

4 files changed

+73
-41
lines changed

4 files changed

+73
-41
lines changed

driver-core/src/main/com/mongodb/client/model/expressions/DocumentExpression.java

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,54 +28,65 @@
2828
*/
2929
public interface DocumentExpression extends Expression {
3030

31-
<R extends DocumentExpression> R setField(String path, Expression exp);
31+
DocumentExpression setField(String path, Expression exp);
3232

3333
DocumentExpression unsetField(String path);
3434

3535

3636
BooleanExpression getBoolean(String field);
3737

38-
BooleanExpression getBoolean(String field, BooleanExpression orElse);
38+
BooleanExpression getBoolean(String field, BooleanExpression other);
3939

40-
default BooleanExpression getBoolean(final String field, final boolean orElse) {
41-
return getBoolean(field, of(orElse));
40+
default BooleanExpression getBoolean(final String field, final boolean other) {
41+
return getBoolean(field, of(other));
4242
}
4343

4444
NumberExpression getNumber(String field);
4545

46-
NumberExpression getNumber(String field, NumberExpression orElse);
46+
NumberExpression getNumber(String field, NumberExpression other);
4747

48-
default NumberExpression getNumber(final String field, final Number orElse) {
49-
return getNumber(field, Expressions.numberToExpression(orElse));
48+
default NumberExpression getNumber(final String field, final Number other) {
49+
return getNumber(field, Expressions.numberToExpression(other));
5050
}
5151

5252
IntegerExpression getInteger(String field);
5353

54+
IntegerExpression getInteger(String field, IntegerExpression other);
55+
56+
default NumberExpression getInteger(final String field, final int other) {
57+
return getInteger(field, (IntegerExpression) Expressions.numberToExpression(other));
58+
}
59+
60+
default NumberExpression getInteger(final String field, final long other) {
61+
return getInteger(field, (IntegerExpression) Expressions.numberToExpression(other));
62+
}
63+
64+
5465
StringExpression getString(String field);
5566

56-
StringExpression getString(String field, StringExpression orElse);
67+
StringExpression getString(String field, StringExpression other);
5768

58-
default StringExpression getString(final String field, final String orElse) {
59-
return getString(field, of(orElse));
69+
default StringExpression getString(final String field, final String other) {
70+
return getString(field, of(other));
6071
}
6172

6273
DateExpression getDate(String field);
63-
DateExpression getDate(String field, DateExpression orElse);
74+
DateExpression getDate(String field, DateExpression other);
6475

65-
default DateExpression getDate(final String field, final Instant orElse) {
66-
return getDate(field, of(orElse));
76+
default DateExpression getDate(final String field, final Instant other) {
77+
return getDate(field, of(other));
6778
}
6879

6980
DocumentExpression getDocument(String field);
70-
DocumentExpression getDocument(String field, DocumentExpression orElse);
81+
DocumentExpression getDocument(String field, DocumentExpression other);
7182

72-
default DocumentExpression getDocument(final String field, final Bson orElse) {
73-
return getDocument(field, of(orElse));
83+
default DocumentExpression getDocument(final String field, final Bson other) {
84+
return getDocument(field, of(other));
7485
}
7586

7687
<T extends Expression> ArrayExpression<T> getArray(String field);
7788

78-
<T extends Expression> ArrayExpression<T> getArray(String field, ArrayExpression<T> orElse);
89+
<T extends Expression> ArrayExpression<T> getArray(String field, ArrayExpression<T> other);
7990

80-
DocumentExpression merge(DocumentExpression ofDoc);
91+
DocumentExpression merge(DocumentExpression other);
8192
}

driver-core/src/main/com/mongodb/client/model/expressions/Expression.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,13 @@ public interface Expression {
103103
* @param or
104104
* @return
105105
*/
106-
BooleanExpression isBooleanOr(BooleanExpression or);
107-
NumberExpression isNumberOr(NumberExpression or);
108-
StringExpression isStringOr(StringExpression or);
109-
DateExpression isDateOr(DateExpression or);
110-
<T extends Expression> ArrayExpression<T> isArrayOr(ArrayExpression<T> or);
111-
<T extends DocumentExpression> T isDocumentOr(T or);
106+
BooleanExpression isBooleanOr(BooleanExpression other);
107+
NumberExpression isNumberOr(NumberExpression other);
108+
IntegerExpression isIntegerOr(IntegerExpression other);
109+
StringExpression isStringOr(StringExpression other);
110+
DateExpression isDateOr(DateExpression other);
111+
<T extends Expression> ArrayExpression<T> isArrayOr(ArrayExpression<T> other);
112+
<T extends DocumentExpression> T isDocumentOr(T other);
112113

113114

114115
/**

driver-core/src/main/com/mongodb/client/model/expressions/MqlExpression.java

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,12 @@ public NumberExpression getNumber(final String field, final NumberExpression orE
169169
public IntegerExpression getInteger(final String field) {
170170
return new MqlExpression<>(getFieldInternal(field));
171171
}
172+
173+
@Override
174+
public IntegerExpression getInteger(String field, IntegerExpression orElse) {
175+
return getInteger(field).isIntegerOr(orElse);
176+
}
177+
172178
@Override
173179
public StringExpression getString(final String field) {
174180
return new MqlExpression<>(getFieldInternal(field));
@@ -210,12 +216,12 @@ public <T1 extends Expression> ArrayExpression<T1> getArray(final String field,
210216
}
211217

212218
@Override
213-
public DocumentExpression merge(final DocumentExpression ofDoc) {
214-
return new MqlExpression<>(ast("$mergeObjects", ofDoc));
219+
public DocumentExpression merge(final DocumentExpression other) {
220+
return new MqlExpression<>(ast("$mergeObjects", other));
215221
}
216222

217223
@Override
218-
public <R extends DocumentExpression> R setField(final String path, final Expression exp) {
224+
public DocumentExpression setField(final String path, final Expression exp) {
219225
return newMqlExpression((cr) -> astDoc("$setField", new BsonDocument()
220226
.append("field", new BsonString(path))
221227
.append("input", this.toBsonValue(cr))
@@ -266,35 +272,44 @@ public BooleanExpression isBoolean() {
266272
}
267273

268274
@Override
269-
public BooleanExpression isBooleanOr(final BooleanExpression or) {
270-
return this.isBoolean().cond(this, or);
275+
public BooleanExpression isBooleanOr(final BooleanExpression other) {
276+
return this.isBoolean().cond(this, other);
271277
}
272278

273279
public BooleanExpression isNumber() {
274280
return new MqlExpression<>(astWrapped("$isNumber"));
275281
}
276282

277283
@Override
278-
public NumberExpression isNumberOr(final NumberExpression or) {
279-
return this.isNumber().cond(this, or);
284+
public NumberExpression isNumberOr(final NumberExpression other) {
285+
return this.isNumber().cond(this, other);
286+
}
287+
288+
public BooleanExpression isInteger() {
289+
return this.isNumber().cond(this.eq(this.round()), of(false));
290+
}
291+
292+
@Override
293+
public IntegerExpression isIntegerOr(IntegerExpression other) {
294+
return this.isInteger().cond(this, other);
280295
}
281296

282297
public BooleanExpression isString() {
283298
return new MqlExpression<>(ast("$type")).eq(of("string"));
284299
}
285300

286301
@Override
287-
public StringExpression isStringOr(final StringExpression or) {
288-
return this.isString().cond(this, or);
302+
public StringExpression isStringOr(final StringExpression other) {
303+
return this.isString().cond(this, other);
289304
}
290305

291306
public BooleanExpression isDate() {
292307
return ofStringArray("date").contains(new MqlExpression<>(ast("$type")));
293308
}
294309

295310
@Override
296-
public DateExpression isDateOr(final DateExpression or) {
297-
return this.isDate().cond(this, or);
311+
public DateExpression isDateOr(final DateExpression other) {
312+
return this.isDate().cond(this, other);
298313
}
299314

300315
public BooleanExpression isArray() {
@@ -305,22 +320,22 @@ public BooleanExpression isArray() {
305320
* checks if array (but cannot check type)
306321
* user asserts array is of type R
307322
*
308-
* @param or
323+
* @param other
309324
* @return
310325
* @param <R>
311326
*/
312327
@Override
313-
public <R extends Expression> ArrayExpression<R> isArrayOr(final ArrayExpression<R> or) {
314-
return this.isArray().cond(this.assertImplementsAllExpressions(), or);
328+
public <R extends Expression> ArrayExpression<R> isArrayOr(final ArrayExpression<R> other) {
329+
return this.isArray().cond(this.assertImplementsAllExpressions(), other);
315330
}
316331

317332
public BooleanExpression isDocument() {
318333
return new MqlExpression<>(ast("$type")).eq(of("object"));
319334
}
320335

321336
@Override
322-
public <R extends DocumentExpression> R isDocumentOr(final R or) {
323-
return this.isDocument().cond(this.assertImplementsAllExpressions(), or);
337+
public <R extends DocumentExpression> R isDocumentOr(final R other) {
338+
return this.isDocument().cond(this.assertImplementsAllExpressions(), other);
324339
}
325340

326341
@Override

driver-core/src/test/functional/com/mongodb/client/model/expressions/DocumentExpressionsFunctionalTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,11 @@ public void getFieldTest() {
101101
@Test
102102
public void getFieldOrTest() {
103103
// getInteger-Or lacks isInteger; isInteger lacks a way to allow doubles that are integers
104-
//assertExpression(1.0, ofDoc("{a: 1.0}").getInteger("a", 99));
105104

106105
// convenience
107106
assertExpression(true, ofDoc("{a: true}").getBoolean("a", false));
108107
assertExpression(1.0, ofDoc("{a: 1.0}").getNumber("a", 99));
108+
assertExpression(1.0, ofDoc("{a: 1.0}").getNumber("a", Decimal128.parse("99")));
109109
assertExpression("A", ofDoc("{a: 'A'}").getString("a", "Z"));
110110
assertExpression(2007, ofDoc("{a: {'$date': '2007-12-03T10:15:30.005Z'}}")
111111
.getDate("a", Instant.EPOCH).year(of("UTC")));
@@ -116,6 +116,7 @@ public void getFieldOrTest() {
116116
// normal
117117
assertExpression(true, ofDoc("{a: true}").getBoolean("a", of(false)));
118118
assertExpression(1.0, ofDoc("{a: 1.0}").getNumber("a", of(99)));
119+
assertExpression(1.0, ofDoc("{a: 1.0}").getInteger("a", of(99)));
119120
assertExpression("A", ofDoc("{a: 'A'}").getString("a", of("Z")));
120121
assertExpression(2007, ofDoc("{a: {'$date': '2007-12-03T10:15:30.005Z'}}")
121122
.getDate("a", of(Instant.EPOCH)).year(of("UTC")));
@@ -125,6 +126,7 @@ public void getFieldOrTest() {
125126

126127
// right branch (missing field)
127128
assertExpression(false, ofDoc("{}").getBoolean("a", false));
129+
assertExpression(99, ofDoc("{}").getInteger("a", 99));
128130
assertExpression(99, ofDoc("{}").getNumber("a", 99));
129131
assertExpression(99L, ofDoc("{}").getNumber("a", 99L));
130132
assertExpression(99.0, ofDoc("{}").getNumber("a", 99.0));
@@ -135,6 +137,9 @@ public void getFieldOrTest() {
135137
assertExpression(Arrays.asList(99, 88), ofDoc("{}").getArray("a", ofIntegerArray(99, 88)));
136138
assertExpression(Document.parse("{z: 99}"), ofDoc("{}")
137139
.getDocument("a", Document.parse("{z: 99}")));
140+
141+
// int vs num
142+
assertExpression(99, ofDoc("{a: 1.1}").getInteger("a", of(99)));
138143
}
139144

140145
@Test

0 commit comments

Comments
 (0)