fix: rate limiter, graph/vector/query/server бъгове

Поправени проблеми:
- Rate limiter: globalRate вече се enforce-ва; cleanupStaleClients() за memory leak
- Graph engine: addEdge проверява дали src/dst nodes съществуват
- Vector engine: distance() хвърля ValueError при dimension mismatch
- Query: aggregate + * на empty result вече не crash-ва
- Query: exprToSql funcCall вече работи с 0 аргумента
- Query: INSERT trigger вече не crash-ва при празни VALUES
- Server: recvWithTimeout() за всички network reads
- Server: защита от negative activeConnections

292 теста, 0 failure-а.
This commit is contained in:
2026-05-12 23:15:09 +03:00
parent 6aaabb518d
commit 80d57a36bd
5 changed files with 72 additions and 11 deletions
+4
View File
@@ -70,6 +70,10 @@ proc addEdge*(g: Graph, src, dst: NodeId, label: string = "",
weight: float64 = 1.0): EdgeId =
acquire(g.lock)
defer: release(g.lock)
if src notin g.nodes:
raise newException(KeyError, "Source node does not exist: " & $uint64(src))
if dst notin g.nodes:
raise newException(KeyError, "Destination node does not exist: " & $uint64(dst))
let id = EdgeId(g.nextEdgeId)
inc g.nextEdgeId
g.edges[id] = Edge(id: id, src: src, dst: dst, label: label,