2024-02-02 10:58:35 +00:00
|
|
|
# Nimbus
|
|
|
|
# Copyright (c) 2024 Status Research & Development GmbH
|
|
|
|
# Licensed under either of
|
|
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
|
|
|
# http://opensource.org/licenses/MIT)
|
|
|
|
# at your option. This file may not be copied, modified, or distributed
|
|
|
|
# except according to those terms.
|
|
|
|
|
|
|
|
{.push raises: [].}
|
|
|
|
|
|
|
|
import
|
|
|
|
std/typetraits,
|
|
|
|
eth/common,
|
2024-05-20 10:17:51 +00:00
|
|
|
./backend/aristo_db,
|
2024-02-02 10:58:35 +00:00
|
|
|
./base/[api_tracking, base_desc],
|
|
|
|
./base
|
|
|
|
|
|
|
|
when CoreDbEnableApiTracking:
|
|
|
|
import chronicles
|
|
|
|
|
2024-02-16 09:08:07 +00:00
|
|
|
const
|
|
|
|
logTxt = "CoreDb/it "
|
|
|
|
newApiTxt = logTxt & "API"
|
2024-02-02 10:58:35 +00:00
|
|
|
|
|
|
|
# Annotation helper(s)
|
|
|
|
{.pragma: apiRaise, gcsafe, raises: [CoreDbApiError].}
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# Public iterators
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
iterator pairs*(kvt: CoreDxKvtRef): (Blob, Blob) {.apiRaise.} =
|
|
|
|
## Iterator supported on memory DB (otherwise implementation dependent)
|
|
|
|
##
|
|
|
|
kvt.setTrackNewApi KvtPairsIt
|
|
|
|
case kvt.parent.dbType:
|
|
|
|
of AristoDbMemory:
|
2024-03-07 19:24:05 +00:00
|
|
|
for k,v in kvt.aristoKvtPairsMem():
|
|
|
|
yield (k,v)
|
|
|
|
of AristoDbVoid:
|
|
|
|
for k,v in kvt.aristoKvtPairsVoid():
|
2024-02-02 10:58:35 +00:00
|
|
|
yield (k,v)
|
|
|
|
else:
|
|
|
|
raiseAssert: "Unsupported database type: " & $kvt.parent.dbType
|
2024-03-18 19:40:23 +00:00
|
|
|
kvt.ifTrackNewApi: debug newApiTxt, api, elapsed
|
2024-02-02 10:58:35 +00:00
|
|
|
|
2024-05-20 10:17:51 +00:00
|
|
|
iterator pairs*(mpt: CoreDxMptRef): (Blob, Blob) =
|
2024-02-02 10:58:35 +00:00
|
|
|
## Trie traversal, only supported for `CoreDxMptRef` (not `Phk`)
|
|
|
|
##
|
|
|
|
mpt.setTrackNewApi MptPairsIt
|
|
|
|
case mpt.parent.dbType:
|
|
|
|
of AristoDbMemory, AristoDbRocks, AristoDbVoid:
|
|
|
|
for k,v in mpt.aristoMptPairs():
|
|
|
|
yield (k,v)
|
|
|
|
else:
|
|
|
|
raiseAssert: "Unsupported database type: " & $mpt.parent.dbType
|
|
|
|
mpt.ifTrackNewApi:
|
2024-04-19 18:37:27 +00:00
|
|
|
let trie = mpt.methods.getColFn()
|
2024-03-18 19:40:23 +00:00
|
|
|
debug newApiTxt, api, elapsed, trie
|
2024-02-02 10:58:35 +00:00
|
|
|
|
|
|
|
iterator replicate*(mpt: CoreDxMptRef): (Blob, Blob) {.apiRaise.} =
|
|
|
|
## Low level trie dump, only supported for `CoreDxMptRef` (not `Phk`)
|
|
|
|
##
|
|
|
|
mpt.setTrackNewApi MptReplicateIt
|
|
|
|
case mpt.parent.dbType:
|
|
|
|
of AristoDbMemory:
|
|
|
|
for k,v in aristoReplicateMem(mpt):
|
|
|
|
yield (k,v)
|
|
|
|
of AristoDbVoid:
|
|
|
|
for k,v in aristoReplicateVoid(mpt):
|
|
|
|
yield (k,v)
|
|
|
|
else:
|
|
|
|
raiseAssert: "Unsupported database type: " & $mpt.parent.dbType
|
|
|
|
mpt.ifTrackNewApi:
|
2024-04-19 18:37:27 +00:00
|
|
|
let trie = mpt.methods.getColFn()
|
2024-03-18 19:40:23 +00:00
|
|
|
debug newApiTxt, api, elapsed, trie
|
2024-02-02 10:58:35 +00:00
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# End
|
|
|
|
# ------------------------------------------------------------------------------
|