* Make error_apple definitions out-of-line
* Add util::MakeCallback
Translates between API completion handlers that take just an NSError and
the equivalent std::function that accepts util::Status.
* Port DocumentReference::Completion to a std::function callback
* Port Firestore::ErrorCompletions to StatusCallback
* Port transaction-related completions to C++
* Remove now-unused FSTVoidIDErrorBlock
* Fix tunneling of Firestore-generated NSErrors.
Remove MakeStatus(NSError*) because it has different results from
Status::FromNSError. Ensure that user-supplied errors created in
transactions tunnel through correctly.
* Replace FSTDocumentSet's guts with immutable::SortedSet.
* Port FSTDocumentSet to C++ DocumentSet.
* Replace implementation of FSTDocumentSet with C++ DocumentSet
* Update all usages of FSTDocumentSet
* Remove FSTDocumentSet
* Add Objective-C++ guard
* Use absl::c_equal instead of hand-rolling it.
* Split SortedContainer out of SortedMapBase
... and use it
* Fix NSNotFound -> npos
* Remove = default constructors that aren't true.
These are implicitly deleted because DocumentSet is a member and isn't
default constructible.
* Fix usage of FSTQuery.limit
* Migrate FSTDocumentReference to C++
* Change SortedSet template parameter ordering
Makes it easier to specify a comparator without specifying what the
empty member of the underlying map is.
* Migrate MemoryMutationQueue to C++ references by key
* migrate.py
* CMake
* Finish porting ReferenceSet
* Swap reference set implementation
* Port MemoryQueryCache to use ported ReferenceSet
* Port FSTReferenceSetTest
* Port usage for limbo document refs
* Port LRU and LocalStore usages
* Remove FSTReferenceSet and FSTDocumentReference
* Style
* Add newline
Also eliminate most usages of `FSTDocumentKey`, remove most methods from the Objective-C class and make it just a wrapper over `DocumentKey`. The only usage that cannot be directly replaced by C++ `DocumentKey` is in `FSTFieldValue`.
* replace all references to `FSTDispatchQueue` and `FSTTimerID` with their C++ equivalents;
* remove `FSTDispatchQueue` class and related tests;
* in method argument names, replace `workerDispatchQueue` with just `workerQueue`, more similar to other platforms;
* move `Executor` and derived classes out of `internal` namespace.
* Revert "Revert "gRPC: replace Objective-C implementation with the new C++ implementation (#1968)" (#2030)"
This reverts commit ea567dca47.
* gRPC: fix bugs found during testing (#2039)
All in `GrpcStream`:
* make sure there are no pending completions when "finish" operation is enqueued;
* always finish gRPC calls;
* when connectivity changes, reset not just the calls, but the underlying channel as well.
* Revert "Partially revert "Update CHANGELOG for Firestore v0.14.0 (#2025)" (#2031)"
This reverts commit b2437b80f6.
* Update changelog for v0.15.0.
* gRPC: add gRPC wrapper classes to CMake build (#2015)
* add a C++ equivalent of `FIRFirestoreVersionString`. This eliminates the only Objective-C dependency of `grpc_connection.mm` and allows making it a pure C++ file;
* open-source `binary_to_array.py` script and use it in the build to embed `roots.pem` certificate file from gRPC into the Firestore binary. The embedded char array is then used to load certificate at runtime.
* Revert local change -- do not enable sanitizers by default
* Drop acknowledged mutations in schema migration (#1818)
Drop acknowledged mutations in schema migration as part of removing held write acks.
Port of firebase/firebase-js-sdk#1149
* Change removeMutationBatch to remove a single batch (#1955)
* Update Firestore Generated Protos
* Adding UnknownDocument and hasCommittedMutations (#1971)
* Removing held write batch handling from LocalStore (#1997)
* View changes for held write acks (#2004)
* Held Write Acks Unit Test Fixes (#2008)
* Held Write Ack Removal Spec Tests (#2018)
* Fix integration test
* add support for SSL disabled to `GrpcConnection` (unfortunately, there
currently is no way to verify this change actually works);
* make gRPC calls using the C++ implementation:
* make `FSTRemoteStore` create C++ streams instead of their Objective-C
counterparts;
* port https://github.com/firebase/firebase-js-sdk/pull/1041: streams
are now never recreated, only restarted;
* make `FSTDatastore` delegate server calls to the C++ implementation;
* port `MockWatchStream` and `MockWriteStream` to C++ (`FSTMockDatastore` is
still in place, because `Datastore` is not fully ported yet);
* no longer generate Objective-C gRPC service definitions from protos;
* remove all references to Objective-C gRPC client;
* check in gRPC root certificates file and load it at runtime (the check-in part
is temporary until gRPC-C++.podspec provides the certificate). This makes SSL
work.
[Port of https://github.com/firebase/firebase-js-sdk/pull/1120]
Fixes#1499.
This reworks our "user listener" into a "credential change listener" that
fires on any token change, even if the User did not change. This allows
us to restart our streams (but not switch mutation queues, etc.) on token
changes.
* Switch to reference delegates for garbage collection (#1410)
* Bump sequence number on resume token refresh
* Style
* Fix comment formatting
* Add FSTReferenceDelegate definition and documentation
* Add methods to return nil for delegates, wire up inMemoryPins
* Add hook for removing a reference
* Start work on reference delegates
* Fix up tests to support adding documents at a sequence number
* Implement removing references
* Remove from target when dropped from local view
* Fix warning
* Add hooks for removal from mutation queue
* Add hooks for limbo document updates
* Style
* Drop commented-out code
* Fixup after merging master
* Start importing delegate implementations
* Memory LRU tests pass
* Make memory lru work, start fixing up lru tests. All with hidden sequence numbers
* Most LRU tests passing w/ memory
* Big LRU test passes w/ memory
* Leveldb LRU tests pass
* All passing except local store tests
* All tests pass
* Fix localstore tests
* Revert removeQueryData change
* Remove collectGarbage calls
* Remove NoOp GC
* More cleanup
* Refactor FSTHelpers
* Cleanup and commenting
* Comments and cleanup
* Comments
* Drop nullable for reference delegates, and old persistence method on spec tests
* Fix missing sequence bump, remove unneeded targetID
* Style
* Drop commented-out code
* Satisfy the linters and copyrighters, etc.
* Drop more commented-out code
* Fix import -> include, NSUInteger -> int
* Start work on test comments
* FSTDocumentKey -> DocumentKey
* Sample of LRU test refactor (#1424)
* Sample of test refactor
* Drop errant 'struct' keyword
* More test refactoring
* Make gc a member variable too
* Tests refactored to use member variables
* Assign delegates procedurally, rather than passing in a block
* Fix up FSTLevelDB a little
* listens -> listenTargets
* Rename GCEnabled
* remove isSentinel
* reword comment
* Add case for non-eager GC to test
* Style
* Cleaning the lint trap
* Clean up LRU tests (#1433)
* Add copious helpers and some docs to lru tests
* Style
* Method name refactor, add comment
* Drop FSTGarbageCollector and FSTEagerGarbageCollector (#1440)
* Drop FSTGarbageCollector and FSTEagerGarbageCollector
* Drop unused containsKey from FSTLevelDBMutationQueue
* Style
* Include sequence number in FSTQueryData hash and isEqual (#1568)
* Include sequence number in FSTQueryData hash and isEqual methods
* Style
* Switch to util::Hash
* Fix preserving query cache metadata (#1569)
* Add failing test
* Move the restart tests to the leveldb test suite
* Style
* Add new persistence test helper
* Fix test failure
* Review feedback
* Style
[Port of https://github.com/firebase/firebase-js-sdk/pull/1014]
This fixes an issue occurring when a limbo target receives a documentUpdate,
then a global snapshot, and then a CURRENT. Because there was a global
snapshot before the CURRENT, WatchChangeAggregator has no pending document
updates and calls SyncEngine.remoteKeysForTarget to see if we previously got any
document from the backend for the target. See:
https://github.com/firebase/firebase-js-sdk/blob/6905339235ad801291edc696dd75a08e80647f5b/packages/firestore/src/remote/watch_change.ts#L422
Prior to this change, remoteKeysForTarget returned empty because
it relies on our Views to track the contents of the target, and we don't
have Views for limbo targets. Thus WatchChangeAggregator incorrectly
manufactures a NoDocument document update which deletes data from our
cache.
The fix is to have SyncEngine track the fact that we did indeed get
a document for the limbo resolution and return it from
remoteKeysForTarget.
* Define a Comparator for DocumentKey
* Automated migration from FSTDocumentKeySet to DocumentKeySet
* Manual fixups for DocumentKeySet
* Delete FSTDocumentKeySet
* remove conversions in `Local` and `Remote`
* replace `FSTSnapshotVersion` in `Model`
* replace `FSTSnapshotVersion` in the rest
* let test check equal with C++ equal
* fix newly added code
* address changes
* Filter out document updates from target association changes
* Move remote-event-modifying methods onto remote event
* Style
* keep limbo docs in remote event
* Implement identification of limbo document updates
* Refactor a bit to handle removes as well
* Drop newline
* Handle synthesized limbo deletes
* Response to feedback
* Appease the style gods
* lint.sh now lints Objective-C++ too
* cpplint checks system-style includes that should be user-style
This prevents it from recognizing project sources as if they were C
system headers and then complaining that they're in the wrong place.
* cpplint checks #imports and #includes
* cpplint checks that C++ system headers aren't #imported
* cpplint checks for C system headers that could be C++ system headers
* cpplint checks that Objective-C sources include their headers
* Drop write group from remote document change buffer
* Unwind some group dependendencies in local store
* Write group dropped from local store
* Drop write group from mutation queue tests
* Drop write group usage from query cache tests
* Drop write groups from remote document cache tests
* Drop write groups from remote document change buffer tests
* Drop write groups and the write group tracker
* Style
* Put the action in transaction
* Merge master, fix test
* Fix some compiler warnings but mostly trigger travis
* Responses to feedback
* naively remove FSTPath import and source/test files.
* port FieldPath, part I
* port FieldPath, part II
* port ResourcePath, part I
* port ResourcePath, part II
* the grand commit to fix build errors
* use testutil:: helper instead of those from FSTHelpers
* fix test and lint
* use c_str in errmsg directly
* fix
* fix
* make code clean
* fix integration test I missed
* fix to avoid naming collision in preprocessor
* address changes
* address changes
* address changes
* fix: fieldMask are actually shared with different context.
* address changes
* address changes
* add converters and fix FSTQuery.{h,m} only
* address changes
* a change forget to address
* add a dummy function to make inline-only-library buildable
* 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