diff --git a/datastore/backend.nim b/datastore/backend.nim index 8f1fb7b..c213456 100644 --- a/datastore/backend.nim +++ b/datastore/backend.nim @@ -32,6 +32,7 @@ type DbQueryHandle*[T] = object query*: DbQuery cancel*: bool + closed*: bool env*: T DbQueryResponse* = tuple[key: Option[KeyId], data: DataBuffer] diff --git a/datastore/sql/sqliteds.nim b/datastore/sql/sqliteds.nim index d14080b..8185e57 100644 --- a/datastore/sql/sqliteds.nim +++ b/datastore/sql/sqliteds.nim @@ -163,12 +163,13 @@ proc query*( success DbQueryHandle[RawStmtPtr](query: query, env: s) -proc close*(handle: DbQueryHandle[RawStmtPtr]) = +proc close*(handle: var DbQueryHandle[RawStmtPtr]) = + if not handle.closed: + handle.closed = true echo "sqlite backend: query: finally close" discard sqlite3_reset(handle.env) discard sqlite3_clear_bindings(handle.env) handle.env.dispose() - return iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse = while not handle.cancel: @@ -211,15 +212,16 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse = echo "SQLITE ROW: yield" yield success (key.some, data) of SQLITE_DONE: - echo "SQLITE DONE: return" + echo "SQLITE DONE: yield" + handle.close() break else: - echo "SQLITE ERROR: return" + echo "SQLITE ERROR: yield" handle.cancel = true yield DbQueryResponse.failure newException(DatastoreError, $sqlite3_errstr(v)) + break handle.close() - proc contains*(self: SQLiteBackend, key: DbKey): bool =