DQL Strict Mode
DQL_STRICT_MODE=false
), Ditto is more flexible and will infer the CRDT type based on the document’s shape:Differ
API for calculating diffs between query results.
This API can be used with a store observer to understand how its results change
over successive callbacks. The Differ
API provides a way to track changes in
the data and can be used to optimize data synchronization and conflict resolution.Differ API documentation.Feature | Description | Example |
---|---|---|
UNSET clause | Remove fields from documents | UPDATE orders UNSET items.abc WHERE _id = 'my-id' |
CAST function | Explicitly convert between data types | SELECT * FROM products WHERE CAST(price AS INT) > 10 |
USE IDS clause | Direct document retrieval by ID | SELECT * FROM products USE IDS '123', '456' |
SIMILAR TO | Pattern matching expressions | SELECT * FROM products WHERE name SIMILAR TO '%phone%' |
Runtime expressions | Use expressions in object/array construction | UPDATE products SET metadata = { 'updated_at': current_timestamp() } |
Counters | Support for legacy compatible counter type | UPDATE products APPLY in_stock PN_INCREMENT BY 1.0 |
->
) are deprecated. Read more.DELETE
to remove documents.DQL_STRICT_MODE
as a system parameter to opt-out of requiring collection definitions (#16573)network_use_nextgen_multihop_stack
(#16370)transaction()
on DittoStore
allowing a DQL transaction to be performed (#13343) Added: Transaction
representing an active DQL transaction. (#13343) Added: TransactionCompletionAction
represents an action to be taken upon the completion of a transaction: commit or rollback (#13343) Added: TransactionInfo
encapsulates information about a transaction (#13343) Added: TransactionOptions
for configuring options on a transaction (#13343) Added: TransactionReadOnlyError
exception thrown if a mutating DQL query is attempted in a read-only transaction. (#13343) Added: An opt-in Android foreground service which allows Ditto to sync in the background. (#16097) Added: login()
method to ditto::Authenticator
that provides access to authentication feedback on the returned clientInfo JSON value (#SDKS-874) Deprecated: Method login_with_token()
for ditto::Authenticator
. Use login()
instead. (#SDKS-874) Added: class Differ
, which calculates diffs between query results. This can be used with a store observer to understand how its results change over successive callbacks. (#SDKS-985) Added: struct Diff
to represent diffs produced by the Differ
. (#SDKS-985) Changed: Unify dedicated TCP servers across different transports (Multicast, mDNS, and WiFi Aware) by utilizing a single static TCP server implementation (#TRANS-131)stopSync
does not properly terminate WiFi Aware connections (#17235) Fixed: Bluetooth connectivity on Apple devices works when background Bluetooth permissions are missing. (#17065)Ditto::get_sync()
to replace Ditto::sync()
. The new name is consistent with similar member names of the Ditto class. (#15119)ditto::Sync::get_subscriptions()
which provides a safe way to get the set of active subscriptions (#SDKS-677)start_sync()
if some APIs were used beforehand. (#SDKS-556)ditto::Sync::register_subscription()
and of subscription cancellation (#SDKS-680)ditto::Sync::subscriptions
data member is not safe for client code to use. Use get_subscriptions()
instead. (#SDKS-677)Ditto::sync()
is deprecated. Use Ditto::get_sync()
instead. (#15119)start_sync()
if some APIs were used beforehand. (#SDKS-556)ALTER SYSTEM
and the tcp_server_bind_mdns_server_port
config.ditto.store.execute(...)
command within your application.tcp_server_bind_mdns_server_port
needs to be set ***before ***startSync()
is called to be applied.unknown
originator.PLCrashReporter
.mesh_chooser_avoid_redundant_bluetooth
system parameter. (#12984)false
, Ditto creates Bluetooth LE connections alongside other peer-to-peer connections, serving as a fallback if the primary transport, such as Apple Wireless Direct Link (AWDL) or LAN, fails.However, before you enable the mesh_chooser_avoid_redundant_bluetooth
parameter, consider the following technical tradeoffs:mesh_chooser_avoid_redundant_bluetooth
parameter, use the following DQL query:
ALTER SYSTEM SET mesh_chooser_avoid_redundant_bluetooth = false
AuthClient
by improving the log message for certificate issues returned from the Big Peer Authentication Service. (#13138)content-length: 0 header
compliance in empty POST
requests. (#12346)POST
request, the cloud load balancer would reject your request with a 411 - Length Required
error message.Now you must explicitly state that the body of your POST
request is empty by setting content-length: 0
in the header of your HTTP API call.subscribe()
on an invalid query caused sync to be silently disabled.Invalid queries in the subscribe()
method are now identified, disabled, and logged as errors.DittoValidationException
to attempt to fetch an attachment from a dictionary representation. (#12668)DittoPeer.IsDittoCloudConnected
property to correctly reflect the actual connection status. (#13062)unquoted_string
with an underscore (_
), a letter, or an alphanumeric character. For example, the following equivalent regular expression: [A-Za-z_][A-Za-z0-9_]*
.is_connected_to_big_peer
field from the Small Peer Info document. (#11883)ATTACHMENT
data type, reducing potential timeouts. (#11893)SystemParameter
to configure timeouts before this fix, if using different types to encode the values representing the timeout, for instance, Milliseconds
and Seconds
, the values failed to downcast, an error log printed, and the new value ignored.Now, when using mismatched wrapper types, Ditto performs a compatibility check, validates, and, if needed, converts them as appropriate.DeviceName
changes after sync start. (#11160)DeviceName
property is set after the sync process has started. Previously, setting DeviceName
of a Ditto instance after starting sync did not trigger a warning. This new message warns you that the new value you’ve set only takes effect after you’ve restarted the sync process in your app.DeviceName
property on Ditto instances now reflects the truncation of the value to 24 bytes when starting sync. (#11611)PeerKeyString
property to DittoPeer
as a replacement for the now deprecated PeerKey
. (#11611)PeerMetadataJsonString
property and the SetPeerMetadataJsonString
method to Ditto.Presence
. (#11611)PeerMetadata
property and the SetPeerMetadata
method to Ditto.Presence
. (#11611)PeerMetadata
and IdentityServiceMetadata
to DittoPeer
. (#11611)ConnectionRequestHandler
property in Ditto.Presence
, allowing filtering of incoming connections from other peers.DittoPresence.Exec()
method has been deprecated in favor of using the newly introduced Graph
property on Ditto.Presence
. (#11611)PeerKey
property on DittoPeer
. (#11611) PeerKeyString
property instead.