feat: wire protocol integration in TCP server

- Server now reads binary wire protocol messages (header + payload)
- Implements recvExact for reliable message framing
- Query execution against LSM-Tree for SELECT/INSERT/DELETE
- SELECT supports point reads (WHERE key = 'value') and full scans
- INSERT parses simple EdgeDB-style syntax
- DELETE with WHERE clause
- Wire protocol responses: Data, Complete, Error, Pong
- Export wire protocol read/write helpers for external use
- Add scanMemTable to LSMTree for full scans
- Add GEL/ to .gitignore
- All 214 tests pass
This commit is contained in:
2026-05-06 03:38:10 +03:00
parent 2a13066a0d
commit f8909f155c
4 changed files with 267 additions and 16 deletions
+8 -8
View File
@@ -87,48 +87,48 @@ type
rowCount*: int
affectedRows*: int
proc writeUint32(buf: var seq[byte], val: uint32) =
proc writeUint32*(buf: var seq[byte], val: uint32) =
var bytes: array[4, byte]
bigEndian32(addr bytes, unsafeAddr val)
buf.add(bytes)
proc writeUint64(buf: var seq[byte], val: uint64) =
proc writeUint64*(buf: var seq[byte], val: uint64) =
var bytes: array[8, byte]
bigEndian64(addr bytes, unsafeAddr val)
buf.add(bytes)
proc writeString(buf: var seq[byte], s: string) =
proc writeString*(buf: var seq[byte], s: string) =
buf.writeUint32(uint32(s.len))
for ch in s:
buf.add(byte(ch))
proc writeBytes(buf: var seq[byte], data: openArray[byte]) =
proc writeBytes*(buf: var seq[byte], data: openArray[byte]) =
buf.writeUint32(uint32(data.len))
for b in data:
buf.add(b)
proc readUint32(buf: openArray[byte], pos: var int): uint32 =
proc readUint32*(buf: openArray[byte], pos: var int): uint32 =
var bytes: array[4, byte]
for i in 0..3:
bytes[i] = buf[pos + i]
bigEndian32(addr result, unsafeAddr bytes)
pos += 4
proc readUint64(buf: openArray[byte], pos: var int): uint64 =
proc readUint64*(buf: openArray[byte], pos: var int): uint64 =
var bytes: array[8, byte]
for i in 0..7:
bytes[i] = buf[pos + i]
bigEndian64(addr result, unsafeAddr bytes)
pos += 8
proc readString(buf: openArray[byte], pos: var int): string =
proc readString*(buf: openArray[byte], pos: var int): string =
let len = int(readUint32(buf, pos))
result = newString(len)
for i in 0..<len:
result[i] = char(buf[pos + i])
pos += len
proc readBytes(buf: openArray[byte], pos: var int): seq[byte] =
proc readBytes*(buf: openArray[byte], pos: var int): seq[byte] =
let len = int(readUint32(buf, pos))
result = newSeq[byte](len)
for i in 0..<len: