firebase / firebase/firebase-cpp-sdk
[FR] Database (Desktop): Add support for special server value Increment
- Dominant language
- C++
- Stars
- 326
- Forks
- 137
- Avg merge
- 3d 9h
- Merged PRs (30d)
- 5
Description
### Feature proposal
* Firebase Component: Database
As of last year, Realtime Database [supports a special value for incrementing locations in the database atomically without running a transaction](https://firebase.google.com/support/release-notes/js#version_7140_-_april_9_2020), but this feature is not exposed in the C++ (or Unity) implementations.
This is accomplished in Java by assigning a value in the database to `ServerValue.increment()`. This is similar to how timestamps work, with `ServerValue.timestamp()`. Both functions return a special value that is treated specially on the server and client.
In C++ we have a [ServerTimestamp()](
https://github.com/firebase/firebase-cpp-sdk/blob/3c2190901976a218cd4dc91b0e6aae5afc8d9291/database/src/include/firebase/database/common.h#L78) function that returns that special value. We should add a new function, something like `ServerValueIncrement()` or something similar, which generates the special value for the developer. IIRC the special value is just a map containing `{".sv":"increment"}` or something similar.
This special value would then get special handling in [server_values.cc](https://github.com/firebase/firebase-cpp-sdk/blob/main/database/src/desktop/core/server_values.cc) so that the operation can be approximated locally while the data makes its server round trip.
[Here is the Java implementation of the server value](https://github.com/firebase/firebase-android-sdk/blob/67f91adb82f3ccf5e94a6c44beef7188f83ec324/firebase-database/src/main/java/com/google/firebase/database/core/ServerValues.java#L32) code. This logic can probably be duplicated in C++ without much trouble. Pay attention in particular to [resolveComplextDeferredValue()](https://github.com/firebase/firebase-android-sdk/blob/67f91adb82f3ccf5e94a6c44beef7188f83ec324/firebase-database/src/main/java/com/google/firebase/database/core/ServerValues.java#L70)
Contributor guide
Assessment
This issue has not been assessed yet.