Skip to content

Commit

Permalink
Merge pull request #12 from mnbjhu/insert_support
Browse files Browse the repository at this point in the history
Adding insert statement
  • Loading branch information
mnbjhu committed Sep 10, 2023
2 parents 60c6c14 + b47b49f commit c6e75c5
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 2 deletions.
2 changes: 0 additions & 2 deletions src/commonMain/kotlin/uk/gibby/driver/Surreal.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ class Surreal(private val host: String, private val port: Int = 8000) {
context.launch {
it.incoming.receiveAsFlow().collect {
it as Frame.Text
println(it.readText())
val response = try {
surrealJson.decodeFromString(RpcResponseSerializer, it.readText())
} catch (e: Exception) {
Expand Down Expand Up @@ -97,7 +96,6 @@ class Surreal(private val host: String, private val port: Int = 8000) {
val request = RpcRequest(id, method, params)
val channel = Channel<JsonElement>(1)
requests[id] = channel
println(request)
(connection ?: throw Exception("SurrealDB: Websocket not connected")).sendSerialized(request)
return channel.receive()
}
Expand Down
30 changes: 30 additions & 0 deletions src/commonMain/kotlin/uk/gibby/driver/rpc/Insert.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package uk.gibby.driver.rpc

import kotlinx.serialization.json.*
import uk.gibby.driver.Surreal
import uk.gibby.driver.surrealJson

class InsertBuilder(private val table: String, private val db: Surreal) {

suspend fun jsonContent(data: List<JsonObject>): JsonArray {
val response = db.sendRequest("insert", buildJsonArray {
add(table)
addJsonArray { data.forEach { add(it) } }
})
return response as JsonArray
}

suspend inline fun <reified T> content(data: List<T>): List<T> {
val response = jsonContent(data.map { surrealJson.encodeToJsonElement(it) as JsonObject })
return surrealJson.decodeFromJsonElement(response)
}

suspend inline fun <reified T> content(vararg data: T): List<T> {
val response = jsonContent(data.map { surrealJson.encodeToJsonElement(it) as JsonObject })
return surrealJson.decodeFromJsonElement(response)
}
}

fun Surreal.insert(table: String): InsertBuilder {
return InsertBuilder(table, this)
}
32 changes: 32 additions & 0 deletions src/commonTest/kotlin/InsertTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import kotlinx.coroutines.test.runTest
import uk.gibby.driver.Surreal
import uk.gibby.driver.rpc.insert
import uk.gibby.driver.rpc.signin
import uk.gibby.driver.rpc.use
import utils.cleanDatabase
import kotlin.test.Test
import kotlin.test.assertEquals

class InsertTest {

@Test
fun basicInsertTest() = runTest {
cleanDatabase()
val db = Surreal("localhost", 8000)
db.connect()
db.signin("root", "root")
db.use("test", "test")
val created = db.insert("test").content(
TestClass("first", 1),
TestClass("second", 2),
TestClass("third", 3)
)
assertEquals(3, created.size)
assertEquals("first", created[0].myText)
assertEquals(1, created[0].myNumber)
assertEquals("second", created[1].myText)
assertEquals(2, created[1].myNumber)
assertEquals("third", created[2].myText)
assertEquals(3, created[2].myNumber)
}
}

0 comments on commit c6e75c5

Please sign in to comment.