Skip to content

Commit

Permalink
295 insert update for t (#305)
Browse files Browse the repository at this point in the history
* sqlite

* postgres

* mariadb

* mysql

* surreal

* .

* sqlite update

* .

* postgres update

* .

* mariadb update

* mysql update

* surreal update

* .
  • Loading branch information
itsumura-h authored Jan 28, 2025
1 parent 38c6b61 commit 70b0b5b
Show file tree
Hide file tree
Showing 10 changed files with 423 additions and 9 deletions.
41 changes: 40 additions & 1 deletion src/allographer/query_builder/models/mariadb/mariadb_exec.nim
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import std/json
import std/options
import std/strformat
import std/strutils
import std/sequtils
import std/times
import ../../libs/mariadb/mariadb_impl
import ../../log
Expand Down Expand Up @@ -426,7 +427,7 @@ proc findPlain*(self:MariadbQuery, id: int, key="id"):Future[seq[string]] {.asyn
return self.findPlain($id, key).await


# ==================== insert ====================
# ==================== insert JsonNode ====================
proc insert*(self:MariadbQuery, items:JsonNode) {.async.} =
## items is `JObject`
var sql = self.insertValueBuilder(items)
Expand Down Expand Up @@ -457,12 +458,50 @@ proc insertId*(self: MariadbQuery, items: seq[JsonNode], key="id"):Future[seq[st
self.placeHolder = newJArray()


# ==================== insert Object ====================
proc insert*[T](self:MariadbQuery, items:T) {.async.} =
var sql = self.insertValueBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc insert*[T](self:MariadbQuery, items:seq[T]) {.async.} =
let items = items.mapIt(%it)
var sql = self.insertValuesBuilder(items)
self.log.logger(sql)
self.exec(sql).await


proc insertId*[T](self:MariadbQuery, items:T, key="id"):Future[string] {.async.} =
var sql = self.insertValueBuilder(%items)
sql.add(&" RETURNING `{key}`")
self.log.logger(sql)
return self.insertId(sql, key).await


proc insertId*[T](self: MariadbQuery, items: seq[T], key="id"):Future[seq[string]] {.async.} =
result = newSeq[string](items.len)
for i, item in items:
var sql = self.insertValueBuilder(%item)
sql.add(&" RETURNING `{key}`")
self.log.logger(sql)
result[i] = self.insertId(sql, key).await
self.placeHolder = newJArray()


# ==================== update JsonNode ====================
proc update*(self: MariadbQuery, items: JsonNode){.async.} =
var sql = self.updateBuilder(items)
self.log.logger(sql)
self.exec(sql).await


proc update*[T](self: MariadbQuery, items: T){.async.} =
var sql = self.updateBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc delete*(self: MariadbQuery){.async.} =
var sql = self.deleteBuilder()
self.log.logger(sql)
Expand Down
40 changes: 39 additions & 1 deletion src/allographer/query_builder/models/mysql/mysql_exec.nim
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import std/json
import std/options
import std/strformat
import std/strutils
import std/sequtils
import std/times
import ../../libs/mysql/mysql_impl
import ../../log
Expand Down Expand Up @@ -429,7 +430,7 @@ proc findPlain*(self:MysqlQuery, id: int, key="id"):Future[seq[string]] {.async.
return self.findPlain($id, key).await


# ==================== intert ====================
# ==================== intert JsonNode ====================
proc insert*(self:MysqlQuery, items:JsonNode) {.async.} =
## items is `JObject`
var sql = self.insertValueBuilder(items)
Expand Down Expand Up @@ -460,12 +461,49 @@ proc insertId*(self: MysqlQuery, items: seq[JsonNode], key="id"):Future[seq[stri
self.placeHolder = newJArray()


# ==================== intert Object ====================
proc insert*[T](self:MysqlQuery, items:T) {.async.} =
var sql = self.insertValueBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc insert*[T](self:MysqlQuery, items:seq[T]) {.async.} =
let items = items.mapIt(%it)
var sql = self.insertValuesBuilder(items)
self.log.logger(sql)
self.exec(sql).await


proc insertId*[T](self:MysqlQuery, items:T, key="id"):Future[string] {.async.} =
var sql = self.insertValueBuilder(%items)
# sql.add(&" RETURNING `{key}`")
self.log.logger(sql)
return self.insertId(sql, key).await


proc insertId*[T](self: MysqlQuery, items: seq[T], key="id"):Future[seq[string]] {.async.} =
result = newSeq[string](items.len)
for i, item in items:
var sql = self.insertValueBuilder(%item)
# sql.add(&" RETURNING `{key}`")
self.log.logger(sql)
result[i] = self.insertId(sql, key).await
self.placeHolder = newJArray()


proc update*(self: MysqlQuery, items: JsonNode){.async.} =
var sql = self.updateBuilder(items)
self.log.logger(sql)
self.exec(sql).await


proc update*[T](self: MysqlQuery, items: T){.async.} =
var sql = self.updateBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc delete*(self: MysqlQuery){.async.} =
var sql = self.deleteBuilder()
self.log.logger(sql)
Expand Down
46 changes: 45 additions & 1 deletion src/allographer/query_builder/models/postgres/postgres_exec.nim
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import std/json
import std/options
import std/strformat
import std/strutils
import std/sequtils
import std/times
import ../../libs/postgres/postgres_lib
import ../../libs/postgres/postgres_impl
Expand Down Expand Up @@ -453,7 +454,7 @@ proc findPlain*(self:PostgresQuery, id: int, key="id"):Future[seq[string]] {.asy
return self.findPlain($id, key).await


# ==================== insert ====================
# ==================== insert JsonNode ====================
proc insert*(self:PostgresQuery, items:JsonNode) {.async.} =
## items is `JObject`
var sql = self.insertValueBuilder(items)
Expand Down Expand Up @@ -488,13 +489,56 @@ proc insertId*(self: PostgresQuery, items: seq[JsonNode], key="id"):Future[seq[s
self.placeHolder = newJArray()


# ==================== insert Object ====================
proc insert*[T](self:PostgresQuery, items:T) {.async.} =
var sql = self.insertValueBuilder(%items)
sql = questionToDaller(sql)
self.log.logger(sql)
self.exec(sql).await


proc insert*[T](self:PostgresQuery, items:seq[T]) {.async.} =
let items = items.mapIt(%it)
var sql = self.insertValuesBuilder(items)
sql = questionToDaller(sql)
self.log.logger(sql)
self.exec(sql).await


proc insertId*[T](self:PostgresQuery, items:T, key="id"):Future[string] {.async.} =
var sql = self.insertValueBuilder(%items)
sql.add(&" RETURNING \"{key}\"")
sql = questionToDaller(sql)
self.log.logger(sql)
return self.insertId(sql, key).await


proc insertId*[T](self: PostgresQuery, items: seq[T], key="id"):Future[seq[string]] {.async.} =
result = newSeq[string](items.len)
for i, item in items:
var sql = self.insertValueBuilder(%item)
sql.add(&" RETURNING \"{key}\"")
sql = questionToDaller(sql)
self.log.logger(sql)
result[i] = self.insertId(sql, key).await
self.placeHolder = newJArray()


# ==================== update ====================
proc update*(self: PostgresQuery, items: JsonNode){.async.} =
var sql = self.updateBuilder(items)
sql = questionToDaller(sql)
self.log.logger(sql)
self.exec(sql).await


proc update*[T](self: PostgresQuery, items: T){.async.} =
var sql = self.updateBuilder(%items)
sql = questionToDaller(sql)
self.log.logger(sql)
self.exec(sql).await


proc delete*(self: PostgresQuery){.async.} =
var sql = self.deleteBuilder()
sql = questionToDaller(sql)
Expand Down
39 changes: 38 additions & 1 deletion src/allographer/query_builder/models/sqlite/sqlite_exec.nim
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import std/json
import std/options
import std/strformat
import std/strutils
import std/sequtils
import std/times
import ../../libs/sqlite/sqlite_impl
import ../../log
Expand Down Expand Up @@ -597,7 +598,7 @@ proc findPlain*(self:SqliteQuery, id: int, key="id"):Future[seq[string]] {.async
# return self.find($id, typ, key).await


# ==================== insert ====================
# ==================== insert JsonNode ====================
proc insert*(self:SqliteQuery, items:JsonNode) {.async.} =
let sql = self.insertValueBuilder(items)
self.log.logger(sql)
Expand Down Expand Up @@ -625,12 +626,48 @@ proc insertId*(self: SqliteQuery, items: seq[JsonNode], key="id"):Future[seq[str
self.placeHolder = newJArray()


# ==================== insert Object ====================
proc insert*[T](self:SqliteQuery, items:T) {.async.} =
let sql = self.insertValueBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc insert*[T](self:SqliteQuery, items:seq[T]) {.async.} =
let items = items.mapIt(%it)
let sql = self.insertValuesBuilder(items)
self.log.logger(sql)
self.exec(sql).await


proc insertId*[T](self: SqliteQuery, items: T, key="id"):Future[string] {.async.} =
let sql = self.insertValueBuilder(%items)
self.log.logger(sql)
return self.insertId(sql, key).await


proc insertId*[T](self: SqliteQuery, items: seq[T], key="id"):Future[seq[string]] {.async.} =
result = newSeq[string](items.len)
for i, item in items:
let sql = self.insertValueBuilder(%item)
self.log.logger(sql)
result[i] = self.insertId(sql, key).await
self.placeHolder = newJArray()


# ==================== update ====================
proc update*(self:SqliteQuery, items:JsonNode) {.async.} =
let sql = self.updateBuilder(items)
self.log.logger(sql)
self.exec(sql).await


proc update*[T](self:SqliteQuery, items:T) {.async.} =
let sql = self.updateBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc delete*(self:SqliteQuery) {.async.} =
let sql = self.deleteBuilder()
self.log.logger(sql)
Expand Down
59 changes: 59 additions & 0 deletions src/allographer/query_builder/models/surreal/surreal_exec.nim
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ proc find*(self: SurrealQuery, id:SurrealId, key="id"):Future[Option[JsonNode]]
raise getCurrentException()


# ==================== insert JsonNode ====================
proc insert*(self:SurrealQuery, items:JsonNode) {.async.} =
## https://surrealdb.com/docs/surrealql/statements/insert
let sql = self.insertValueBuilder(items)
Expand Down Expand Up @@ -374,6 +375,45 @@ proc insertId*(self: SurrealQuery, items: seq[JsonNode], key="id"):Future[seq[Su
result[i] = SurrealId.new(row[key].getStr)


# ==================== insert Object ====================
proc insert*[T](self:SurrealQuery, items:T) {.async.} =
## https://surrealdb.com/docs/surrealql/statements/insert
let sql = self.insertValueBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc insert*[T](self:SurrealQuery, items:seq[T]) {.async.} =
## https://surrealdb.com/docs/surrealql/statements/insert
let items = items.mapIt(%it)
var sql = self.insertValuesBuilder(items)
self.log.logger(sql)
self.exec(sql).await


proc insertId*[T](self:SurrealQuery, items:T, key="id"):Future[SurrealId] {.async.} =
## https://surrealdb.com/docs/surrealql/statements/insert
let sql = self.insertValueBuilder(%items)
self.log.logger(sql)
let res = self.getRow(sql).await
if res.isSome():
return SurrealId.new(res.get()[key].getStr())
else:
return SurrealId.new()


proc insertId*[T](self: SurrealQuery, items: seq[T], key="id"):Future[seq[SurrealId]] {.async.} =
result = newSeq[SurrealId](items.len)
let items = items.mapIt(%it)
var sql = self.insertValuesBuilder(items)
self.log.logger(sql)
let res = self.getAllRows(sql).await
var i = 0
for row in res.items:
defer: i.inc()
result[i] = SurrealId.new(row[key].getStr)


proc update*(self: SurrealQuery, items: JsonNode){.async.} =
## https://surrealdb.com/docs/surrealql/statements/update
var sql = self.updateBuilder(items)
Expand All @@ -393,6 +433,25 @@ proc update*(self:SurrealConnections, id:SurrealId, items:JsonNode) {.async.} =
surrealQuery.exec(sql).await


proc update*[T](self: SurrealQuery, items: T){.async.} =
## https://surrealdb.com/docs/surrealql/statements/update
var sql = self.updateBuilder(%items)
self.log.logger(sql)
self.exec(sql).await


proc update*[T](self:SurrealConnections, id:SurrealId, items:T) {.async.} =
## https://surrealdb.com/docs/surrealql/statements/update
let surrealQuery = SurrealQuery.new(
self.log,
self.pools,
newJObject()
)
let sql = surrealQuery.updateMergeBuilder(id.rawid, %items)
surrealQuery.log.logger(sql)
surrealQuery.exec(sql).await


proc delete*(self: SurrealQuery){.async.} =
## https://surrealdb.com/docs/surrealql/statements/delete
let sql = self.deleteBuilder()
Expand Down
Loading

0 comments on commit 70b0b5b

Please sign in to comment.