Skip to content

Commit c5678fe

Browse files
committed
fixed expressions tests
1 parent 34b3e71 commit c5678fe

File tree

6 files changed

+113
-149
lines changed

6 files changed

+113
-149
lines changed

packages/firestore/src/core/expressions.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ abstract class BigIntOrDoubleArithmetics<
344344
right: {
345345
integerValue: number | string;
346346
}
347-
): bigint | undefined;
347+
): bigint | number | undefined;
348348
abstract doubleArith(
349349
left:
350350
| { doubleValue: number | string }
@@ -389,8 +389,11 @@ abstract class BigIntOrDoubleArithmetics<
389389
return undefined;
390390
}
391391

392+
if (typeof result === 'number') {
393+
return { doubleValue: result };
394+
}
392395
// Check for overflow
393-
if (result < LongMinValue || result > LongMaxValue) {
396+
else if (result < LongMinValue || result > LongMaxValue) {
394397
return undefined; // Simulate overflow error
395398
} else {
396399
return { integerValue: `${result}` };
@@ -540,10 +543,13 @@ export class CoreDivide extends BigIntOrDoubleArithmetics<Divide> {
540543
right: {
541544
integerValue: number | string;
542545
}
543-
): bigint | undefined {
546+
): bigint | number | undefined {
544547
const rightValue = asBigInt(right);
545548
if (rightValue === BigInt(0)) {
546549
return undefined;
550+
// return isNegativeZero(asDouble(right))
551+
// ? Number.NEGATIVE_INFINITY
552+
// : Number.POSITIVE_INFINITY;
547553
}
548554
return asBigInt(left) / rightValue;
549555
}

packages/firestore/src/lite-api/expressions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2255,7 +2255,7 @@ export class Constant extends Expr {
22552255
// TODO how should we treat the value of `undefined`?
22562256
this._protoValue = parseData(null, context)!;
22572257
} else {
2258-
this._protoValue = parseData(this.value, context)!;
2258+
this._protoValue = parseData(this.value, context, this.options)!;
22592259
}
22602260
}
22612261
}

packages/firestore/src/lite-api/user_data_reader.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,8 @@ export function parseQueryValue(
731731
*/
732732
export function parseData(
733733
input: unknown,
734-
context: ParseContextImpl
734+
context: ParseContextImpl,
735+
options?: { preferIntegers: boolean }
735736
): ProtoValue | null {
736737
// Unwrap the API type from the Compat SDK. This will return the API type
737738
// from firestore-exp.
@@ -779,7 +780,7 @@ export function parseData(
779780
}
780781
return parseArray(input as unknown[], context);
781782
} else {
782-
return parseScalarValue(input, context);
783+
return parseScalarValue(input, context, options);
783784
}
784785
}
785786
}
@@ -860,14 +861,15 @@ function parseSentinelFieldValue(
860861
*/
861862
export function parseScalarValue(
862863
value: unknown,
863-
context: ParseContextImpl
864+
context: ParseContextImpl,
865+
options?: { preferIntegers: boolean }
864866
): ProtoValue | null {
865867
value = getModularInstance(value);
866868

867869
if (value === null) {
868870
return { nullValue: 'NULL_VALUE' };
869871
} else if (typeof value === 'number') {
870-
return toNumber(context.serializer, value);
872+
return toNumber(context.serializer, value, options);
871873
} else if (typeof value === 'boolean') {
872874
return { booleanValue: value };
873875
} else if (typeof value === 'string') {

packages/firestore/src/model/values.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export function valueEquals(
150150
);
151151
case TypeOrder.VectorValue:
152152
case TypeOrder.ObjectValue:
153-
return objectEquals(left, right);
153+
return objectEquals(left, right, options);
154154
case TypeOrder.MaxValue:
155155
return true;
156156
default:

packages/firestore/src/remote/number_serializer.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ export function toInteger(value: number): ProtoValue {
5252
* The return value is an IntegerValue if it can safely represent the value,
5353
* otherwise a DoubleValue is returned.
5454
*/
55-
export function toNumber(serializer: Serializer, value: number): ProtoValue {
55+
export function toNumber(
56+
serializer: Serializer,
57+
value: number,
58+
options?: { preferIntegers: boolean }
59+
): ProtoValue {
60+
if (Number.isInteger(value) && options?.preferIntegers) {
61+
return toInteger(value);
62+
}
5663
return isSafeInteger(value) ? toInteger(value) : toDouble(serializer, value);
5764
}

0 commit comments

Comments
 (0)