Skip to content

Commit dda8013

Browse files
Revert 86971ea
1 parent 24d74bd commit dda8013

File tree

6 files changed

+15
-188
lines changed

6 files changed

+15
-188
lines changed

packages/database/src/api/Database.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,6 @@ export class Database implements FirebaseService {
3939
static readonly ServerValue = {
4040
TIMESTAMP: {
4141
'.sv': 'timestamp'
42-
},
43-
_increment: (x: number) => {
44-
return {
45-
'.sv': {
46-
'increment': x
47-
}
48-
};
4942
}
5043
};
5144

packages/database/src/core/Repo.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,8 @@ export class Repo {
313313
// (b) store unresolved paths on JSON parse
314314
const serverValues = this.generateServerValues();
315315
const newNodeUnresolved = nodeFromJSON(newVal, newPriority);
316-
const existing = this.serverSyncTree_.calcCompleteEventCache(path);
317316
const newNode = resolveDeferredValueSnapshot(
318317
newNodeUnresolved,
319-
existing,
320318
serverValues
321319
);
322320

@@ -367,7 +365,6 @@ export class Repo {
367365
const newNodeUnresolved = nodeFromJSON(changedValue);
368366
changedChildren[changedKey] = resolveDeferredValueSnapshot(
369367
newNodeUnresolved,
370-
this.serverSyncTree_.calcCompleteEventCache(path),
371368
serverValues
372369
);
373370
});
@@ -422,7 +419,6 @@ export class Repo {
422419
const serverValues = this.generateServerValues();
423420
const resolvedOnDisconnectTree = resolveDeferredValueTree(
424421
this.onDisconnect_,
425-
this.serverSyncTree_,
426422
serverValues
427423
);
428424
let events: Event[] = [];

packages/database/src/core/Repo_transaction.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ Repo.prototype.startTransaction = function(
248248
const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);
249249
const newNode = resolveDeferredValueSnapshot(
250250
newNodeUnresolved,
251-
currentState,
252251
serverValues
253252
);
254253
transaction.currentOutputSnapshotRaw = newNodeUnresolved;
@@ -534,7 +533,6 @@ Repo.prototype.startTransaction = function(
534533
const serverValues = this.generateServerValues();
535534
const newNodeResolved = resolveDeferredValueSnapshot(
536535
newDataNode,
537-
currentNode,
538536
serverValues
539537
);
540538

packages/database/src/core/SyncTree.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -474,17 +474,18 @@ export class SyncTree {
474474
}
475475

476476
/**
477-
* Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a
478-
* listener above it, we will get a false "null". This shouldn't be a problem because transactions will always
479-
* have a listener above, and atomic operations would correctly show a jitter of <increment value> ->
480-
* <incremented total> as the write is applied locally and then acknowledged at the server.
477+
* Returns a complete cache, if we have one, of the data at a particular path. The location must have a listener above
478+
* it, but as this is only used by transaction code, that should always be the case anyways.
481479
*
482480
* Note: this method will *include* hidden writes from transaction with applyLocally set to false.
483481
*
484482
* @param path The path to the data we want
485483
* @param writeIdsToExclude A specific set to be excluded
486484
*/
487-
calcCompleteEventCache(path: Path, writeIdsToExclude?: number[]): Node {
485+
calcCompleteEventCache(
486+
path: Path,
487+
writeIdsToExclude?: number[]
488+
): Node | null {
488489
const includeHiddenSets = true;
489490
const writeTree = this.pendingWriteTree_;
490491
const serverCache = this.syncPointTree_.findOnPath(

packages/database/src/core/util/ServerValues.ts

Lines changed: 9 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import { nodeFromJSON } from '../snap/nodeFromJSON';
2323
import { PRIORITY_INDEX } from '../snap/indexes/PriorityIndex';
2424
import { Node } from '../snap/Node';
2525
import { ChildrenNode } from '../snap/ChildrenNode';
26-
import { SyncTree } from '../SyncTree';
2726
import { Indexable } from './misc';
2827

2928
/**
@@ -49,65 +48,17 @@ export const generateWithValues = function(
4948
* @return {!(string|number|boolean)}
5049
*/
5150
export const resolveDeferredValue = function(
52-
value: { [k: string]: unknown } | string | number | boolean,
53-
existing: Node,
54-
serverValues: { [k: string]: unknown }
51+
value: { [k: string]: any } | string | number | boolean,
52+
serverValues: { [k: string]: any }
5553
): string | number | boolean {
5654
if (!value || typeof value !== 'object') {
5755
return value as string | number | boolean;
58-
}
59-
assert('.sv' in value, 'Unexpected leaf node or priority contents');
60-
61-
if (typeof value['.sv'] === 'string') {
62-
return resolveScalarDeferredValue(value['.sv'], existing, serverValues);
63-
} else if (typeof value['.sv'] === 'object') {
64-
return resolveComplexDeferredValue(value['.sv'], existing, serverValues);
6556
} else {
6657
assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));
58+
return serverValues[value['.sv']];
6759
}
6860
};
6961

70-
const resolveScalarDeferredValue = function(
71-
op: string,
72-
existing: Node,
73-
serverValues: { [k: string]: unknown }
74-
): string | number | boolean {
75-
switch (op) {
76-
case 'timestamp':
77-
return serverValues['timestamp'] as string | number | boolean;
78-
default:
79-
assert(false, 'Unexpected server value: ' + op);
80-
}
81-
};
82-
83-
const resolveComplexDeferredValue = function(
84-
op: object,
85-
existing: Node,
86-
unused: { [k: string]: unknown }
87-
): string | number | boolean {
88-
if (!op.hasOwnProperty('increment')) {
89-
assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));
90-
}
91-
const delta = op['increment'];
92-
if (typeof delta !== 'number') {
93-
assert(false, 'Unexpected increment value: ' + delta);
94-
}
95-
96-
// Incrementing a non-number sets the value to the incremented amount
97-
if (!existing.isLeafNode()) {
98-
return delta;
99-
}
100-
101-
const leaf = existing as LeafNode;
102-
const existingVal = leaf.getValue();
103-
if (typeof existingVal !== 'number') {
104-
return delta;
105-
}
106-
107-
// No need to do over/underflow arithmetic here because JS only handles floats under the covers
108-
return existingVal + delta;
109-
};
110-
11162
/**
11263
* Recursively replace all deferred values and priorities in the tree with the
11364
* specified generated replacement values.
@@ -117,19 +68,13 @@ const resolveComplexDeferredValue = function(
11768
*/
11869
export const resolveDeferredValueTree = function(
11970
tree: SparseSnapshotTree,
120-
syncTree: SyncTree,
121-
serverValues: Indexable
71+
serverValues: Object
12272
): SparseSnapshotTree {
12373
const resolvedTree = new SparseSnapshotTree();
124-
tree.forEachTree(new Path(''), (path, node) => {
125-
const existing = syncTree.calcCompleteEventCache(path);
126-
assert(
127-
existing !== null && typeof existing !== 'undefined',
128-
'Expected ChildrenNode.EMPTY_NODE for nulls'
129-
);
74+
tree.forEachTree(new Path(''), function(path, node) {
13075
resolvedTree.remember(
13176
path,
132-
resolveDeferredValueSnapshot(node, existing, serverValues)
77+
resolveDeferredValueSnapshot(node, serverValues)
13378
);
13479
});
13580
return resolvedTree;
@@ -145,29 +90,20 @@ export const resolveDeferredValueTree = function(
14590
*/
14691
export const resolveDeferredValueSnapshot = function(
14792
node: Node,
148-
existing: Node,
149-
serverValues: Indexable
93+
serverValues: Object
15094
): Node {
15195
const rawPri = node.getPriority().val() as
15296
| Indexable
15397
| boolean
15498
| null
15599
| number
156100
| string;
157-
const priority = resolveDeferredValue(
158-
rawPri,
159-
existing.getPriority(),
160-
serverValues
161-
);
101+
const priority = resolveDeferredValue(rawPri, serverValues);
162102
let newNode: Node;
163103

164104
if (node.isLeafNode()) {
165105
const leafNode = node as LeafNode;
166-
const value = resolveDeferredValue(
167-
leafNode.getValue(),
168-
existing,
169-
serverValues
170-
);
106+
const value = resolveDeferredValue(leafNode.getValue(), serverValues);
171107
if (
172108
value !== leafNode.getValue() ||
173109
priority !== leafNode.getPriority().val()
@@ -185,7 +121,6 @@ export const resolveDeferredValueSnapshot = function(
185121
childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {
186122
const newChildNode = resolveDeferredValueSnapshot(
187123
childNode,
188-
existing.getImmediateChild(childName),
189124
serverValues
190125
);
191126
if (newChildNode !== childNode) {

packages/database/test/servervalues.test.ts

Lines changed: 0 additions & 96 deletions
This file was deleted.

0 commit comments

Comments
 (0)