diff --git a/datastore/sql/sqliteds.nim b/datastore/sql/sqliteds.nim index 0673acc..8e906ba 100644 --- a/datastore/sql/sqliteds.nim +++ b/datastore/sql/sqliteds.nim @@ -178,7 +178,6 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse = case v of SQLITE_ROW: - echo "SQLITE ROW" let key = KeyId.new(sqlite3_column_text_not_null(handle.env, QueryStmtIdCol)) @@ -195,7 +194,6 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse = # error it is necessary to check that the result is a null pointer and # that the result code is an error code if blob.isSome and blob.get().isNil: - echo "BLOB: isSome" let v = sqlite3_errcode(sqlite3_db_handle(handle.env)) if not (v in [SQLITE_OK, SQLITE_ROW, SQLITE_DONE]): @@ -210,14 +208,11 @@ iterator iter*(handle: var DbQueryHandle[RawStmtPtr]): ?!DbQueryResponse = DataBuffer.new(arr.toOpenArray(0, dataLen-1)) else: DataBuffer.new("") - echo "SQLITE ROW: yield" yield success (key.some, data) of SQLITE_DONE: - echo "SQLITE DONE: yield" handle.close() break else: - echo "SQLITE ERROR: yield" handle.cancel = true yield DbQueryResponse.failure newException(DatastoreError, $sqlite3_errstr(v)) break diff --git a/tests/datastore/sql/testsqliteds.nim b/tests/datastore/sql/testsqliteds.nim index 9dae616..48bc734 100644 --- a/tests/datastore/sql/testsqliteds.nim +++ b/tests/datastore/sql/testsqliteds.nim @@ -131,11 +131,7 @@ suite "queryTests": var handle = ds.query(q).tryGet - # res = handle.iter().mapIt(it.tryGet()).reversed() - - var res: seq[DbQueryResponse] - for item in handle.iter(): - res.insert(item.tryGet(), 0) + res = handle.iter().toSeq().mapIt(it.tryGet()).reversed() check: res.len == 3 @@ -148,6 +144,36 @@ suite "queryTests": res[2].key.get == key3 res[2].data == val3 + test "query should cancel": + let + q = DbQuery(key: key1, value: true) + + ds.put(key1, val1).tryGet + ds.put(key2, val2).tryGet + ds.put(key3, val3).tryGet + + var + handle = ds.query(q).tryGet + + var res: seq[DbQueryResponse] + var cnt = 0 + for item in handle.iter(): + cnt.inc + res.insert(item.tryGet(), 0) + if cnt > 1: + handle.cancel = true + + check: + handle.cancel == true + handle.closed == true + res.len == 2 + + res[0].key.get == key2 + res[0].data == val2 + + res[1].key.get == key3 + res[1].data == val3 + # test "Key should query all keys without values": # let # q = DbQuery(key: key1, value: false)