@@ -60,16 +60,18 @@ PostgresDB.prototype.commit = function (collection, id, op, snapshot, options, c
60
60
* Casting is required as postgres thinks that collection and doc_id are
61
61
* not varchar
62
62
*/
63
- // ZW: We also should have the first op version be 0, not 1, to match the
64
- // reference MemoryDB implementation. Catching up outdated clients who
65
- // reconnect may be buggy otherwise.
63
+ // ZW: We also should have the first op version be 0 (the actual value
64
+ // of op.v) instead of 1, in order to match the reference MemoryDB
65
+ // implementation. Catching up outdated clients who reconnect may be
66
+ // buggy otherwise.
66
67
const query = {
67
68
name : "sdb-commit-op-and-snap" ,
68
69
text : `WITH snapshot_id AS (
69
70
INSERT INTO snapshots (collection, doc_id, doc_type, version, data)
70
- SELECT $1::varchar collection, $2::varchar doc_id, $4 doc_type, $3 v, $5 d
71
- WHERE $3 = (
72
- SELECT version+1 v
71
+ SELECT $1::varchar collection, $2::varchar doc_id,
72
+ $3 snap_type, $4 snap_v, $5 snap_data
73
+ WHERE $4 = (
74
+ SELECT version+1 snap_v
73
75
FROM snapshots
74
76
WHERE collection = $1 AND doc_id = $2
75
77
FOR UPDATE
@@ -79,24 +81,28 @@ PostgresDB.prototype.commit = function (collection, id, op, snapshot, options, c
79
81
WHERE collection = $1 AND doc_id = $2
80
82
FOR UPDATE
81
83
)
82
- ON CONFLICT (collection, doc_id) DO UPDATE SET version = $3, data = $5, doc_type = $4
84
+ ON CONFLICT (collection, doc_id) DO
85
+ UPDATE SET doc_type = $3, version = $4, data = $5
83
86
RETURNING version
84
87
)
85
88
INSERT INTO ops (collection, doc_id, version, operation)
86
- SELECT $1::varchar collection, $2::varchar doc_id, $3 v, $6 operation
89
+ SELECT $1::varchar collection, $2::varchar doc_id,
90
+ $6 op_v, $7 op
87
91
WHERE (
88
- $3 = (
92
+ $6 = (
89
93
SELECT max(version)+1
90
94
FROM ops
91
95
WHERE collection = $1 AND doc_id = $2
92
96
) OR NOT EXISTS (
93
- SELECT 0
97
+ SELECT 1
94
98
FROM ops
95
99
WHERE collection = $1 AND doc_id = $2
96
100
)
97
101
) AND EXISTS (SELECT 1 FROM snapshot_id)
98
102
RETURNING version` ,
99
- values : [ collection , id , snapshot . v , snapshot . type , snapshot . data , op ]
103
+ values : [
104
+ collection , id , snapshot . type , snapshot . v , snapshot . data , op . v , op
105
+ ]
100
106
} ;
101
107
client . query ( query , ( err , res ) => {
102
108
if ( err ) {
0 commit comments