* implement Firestore DatabaseInfo in C++
* temporary stash changes; blocking on the massive renaming of .m to .mm
* add database_info_test to project
* finish port DatabaseId and fix style, modular fixing DatabaseInfo
* port DatabaseInfo
* remove FSTDatabase{ID,Info} and their tests from project
* fix unit test
* use namespace alias
* use namespace alias, leftover
* address more changes
* refactoring to use raw pointer instead of value for property
* address changes
* remove self->
* fix style
* remove the name suffix Alloc
* fix a bug
Involves adding PODS_ROOT/nanopb to include path (to allow include
<pb.h>) and Firestore/Protos/nanopb to include path (to allow include
"google/api/annotations.pb.h" and similar).
In both cases, this is to allow auto-generated code to function
properly.
We check them out from a git tag, so this *should* be a noop. However,
cmake seems to want to rebuild these dependencies every time you run
make as it assumes the dependency *might* have been updated. (In
practice, this isn't completely awful, as make notices the files haven't
changed, so files don't actually get recompiled. But the configure step
is still re-run and all the files still need to be rescanned.)
Skipping the update step speeds up the build considerably.
On my linux box, running:
cmake .. && make -j && time make -j
takes ~8.5s prior to this CL and ~6.5 afterwards. (6s is used by the
test suite.) The upcoming protobuf addition would otherwise have made
this much worse. (It takes a long time to ./configure.)
We originally had this as it was thought that cmake would spawn n*m jobs
(where n is the number of jobs it was instructed to create, ie. make
-j8, and m is the number of external projects.) However, it isn't
supposed to do that, and doesn't appear to be doing that right now. So
we'll remove this.
If the problem re-appears, we'll add these back in. (Symptom was being
unable to spawn /bin/sh.)
I'm doing this to:
1) Experimentally see if it improves the flakiness we've been seeing in the Query Conformance Tests.
2) Insulate us from the fact that GRPC seems to take a /minimum/ of 10 seconds to reconnect (at least in some cases) after a connection failure.
I've opened b/72864027 to revisit this in the future.
This is dead code.
I think it was probably useful in the RTDB because of the way it notified of changes, but we give changes with indexes in Firestore so I think we don't need it.
* Move all Firestore files to Objective-C++
* Update project file references
* Don't use module imports from Objective-C++
* Use extern "C" for C-accessible globals
* Work around more stringent type checking in Objective-C++
* NSMutableDictionary ivars aren't implicitly casted to NSDictionary
* FSTMaybeDocument callback can't be passed a function that accepts
FSTDocument
* NSComparisonResult can't be multiplied by -1 without casting
* Add a #include <inttypes.h> where needed
* Avoid using C++ keywords as variables
* Remove #if __cplusplus guards
Added functionality not exposed in public header yet. I would leave to next FCM SDK owner to expose this functionality (and follow any required review process).
Bugs:
72701086
* Implement schema versions
* Style fixes
* newlines, copyrights, assumptions
* Fix nullability
* Raw ptr -> shared_ptr
* kVersionTableGlobal -> kVersionGlobalTable
* Drop utils, move into static methods
* Drop extra include
* Add a few more comments
* Move version constant into migrations file
* formatting?
* Fix comment
* Import iterator_adapters from google3
* Remove -Wconversion which is annoyingly hard to satisfy
* Strip dependency on absl_container from iterator_adapters_test
* Format and lint iterator_adaptors
* More flexible copyright checking in Travis
* Move -fvisibility-inlines-hidden from common_flags to cxx_flags
This option isn't supported by C (and causes the build to fail under
at least rodete).
Manifested error was:
```
-- Looking for include file openssl/rand.h
-- Looking for include file openssl/rand.h - not found
CMake Error at core/src/firebase/firestore/util/CMakeLists.txt:94 (message):
No implementation for SecureRandom available.
-- Configuring incomplete, errors occurred!
```
which is completely misleading. :(
* Fix exception include for std::logic_error
Was causing compiler error on (at least) rodete.
(http://en.cppreference.com/w/cpp/error/logic_error suggests that
stdexcept is the correct header.)
* Remove 'const' from vector contents.
vectors cannot contain const objects as the contained objects are
required to be assignable and copy constructable. (Not *quite* strictly
true; since c++11, this requirement now depends on the operations
performed on the container. But my compiler objects at any rate.)
http://en.cppreference.com/w/cpp/container/vectorhttps://stackoverflow.com/questions/8685257/why-cant-you-put-a-const-object-into-a-stl-container
* Add brackets as suggested (required) by my compiler.
* Add missing include
For LLONG_MIN, etc.
* Enable gnu extension to c++11 for firestore/util *test*.
We disable them by default (in cmake/CompilerSetup.cmake) but our tests
requires hexidecimal floating point, which is not supported in c++11
(though is supported in C++17, gnu++11, and others).
http://en.cppreference.com/w/cpp/language/floating_literalhttps://bugzilla.redhat.com/show_bug.cgi?id=1321986
* Fix printf format for uint64_t
http://en.cppreference.com/w/cpp/types/integerhttps://stackoverflow.com/questions/9225567/how-to-print-a-int64-t-type-in-c
* Allow 0 length printf template strings in tests.
* Get rid of a multi line comment.
The backslash is apparently interpreted by the compiler cause the next
line to be ignored too. In this case, the next line is (currently) a
comment, and would be ignored anyways. (But that doesn't stop the
compiler from yelling.)
* Run ./scripts/style.sh
[PORT OF https://github.com/firebase/firebase-js-sdk/pull/470]
Context: I made a previous change to raise isFromCache=true events when the
client goes offline. As part of this change I added an assert for
"OnlineState should not affect limbo documents", which it turns out was not
valid because:
* When we go offline, we set the view to non-current and call
View.applyChanges().
* View.applyChanges() calls applyTargetChange() even though there's no target
change and it recalculates limbo documents.
* When the view is not current, we consider no documents to be in limbo.
* Therefore all limbo documents are removed and so applyChanges() ends up
returning unexpected LimboDocumentChanges.
Fix: I've modified the View logic so that we don't recalculate limbo documents
(and generate LimboDocumentChanges) when the View is not current, so now my
assert holds and there should be less spurious removal / re-adding of limbo
documents.