-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathBucketStorage.kt
More file actions
97 lines (75 loc) · 3.03 KB
/
Copy pathBucketStorage.kt
File metadata and controls
97 lines (75 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.powersync.bucket
import com.powersync.db.SqlCursor
import com.powersync.db.StreamKey
import com.powersync.db.crud.CrudEntry
import com.powersync.db.internal.PowerSyncTransaction
import com.powersync.db.schema.Schema
import com.powersync.sync.Instruction
import com.powersync.utils.JsonUtil
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonObject
internal interface BucketStorage {
fun getMaxOpId(): String
suspend fun getClientId(): String
suspend fun nextCrudItem(): CrudEntry?
suspend fun nextCrudItem(transaction: PowerSyncTransaction): CrudEntry?
suspend fun hasCrud(): Boolean
suspend fun hasCrud(transaction: PowerSyncTransaction): Boolean
fun mapCrudEntry(row: SqlCursor): CrudEntry
suspend fun updateLocalTarget(checkpointCallback: suspend () -> String): Boolean
suspend fun hasCompletedSync(): Boolean
suspend fun control(args: PowerSyncControlArguments): List<Instruction>
}
internal sealed interface PowerSyncControlArguments {
/**
* Returns the arguments for the `powersync_control` SQL invocation.
*/
val sqlArguments: Pair<String, Any?>
@Serializable
class Start(
val parameters: JsonObject,
val schema: Schema,
@SerialName("include_defaults")
val includeDefaults: Boolean,
@SerialName("active_streams")
val activeStreams: List<StreamKey>,
@SerialName("app_metadata")
val appMetadata: Map<String, String>,
) : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?>
get() = "start" to JsonUtil.json.encodeToString(this)
}
data object Stop : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?> = "stop" to null
}
data class TextLine(
val line: String,
) : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?> = "line_text" to line
}
class BinaryLine(
line: ByteArray,
) : PowerSyncControlArguments {
override fun toString(): String = "BinaryLine"
override val sqlArguments: Pair<String, Any?> = "line_binary" to line
}
data object DidRefreshToken : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?> = "refreshed_token" to null
}
data object CompletedUpload : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?> = "completed_upload" to null
}
data object ConnectionEstablished : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?> = "connection" to "established"
}
data object ResponseStreamEnd : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?> = "connection" to "end"
}
class UpdateSubscriptions(
activeStreams: List<StreamKey>,
) : PowerSyncControlArguments {
override val sqlArguments: Pair<String, Any?> =
"update_subscriptions" to JsonUtil.json.encodeToString(activeStreams)
}
}