Files
Baradb/BARADB_CLIENT_BUGS.md
T
dimgigov 837b4d56fc
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
fix(nim-allographer/baradb): critical client fixes and bug audit
- Export hidden symbols in baradb_client.nim (socket, nextId, readQueryResponse, toString, toBytes)
- Add missing imports in baradb_exec.nim (asyncnet, enums, baradb_query)
- Rewrite toJson() to use wire protocol columnTypes instead of guessing types from strings
- Fix aggregate functions (count, avg, sum) to handle JInt/JFloat/JString correctly
- Fix paginate/fastPaginate discard issues
- Add placeholder arguments for whereIn/whereNotIn/whereBetween/whereNotBetween
- Add placeholder count validation in formatSql()
- Fix getRowPlain() to avoid IndexDefect on empty results
- Harden transactionStart/transactionEnd against server crashes
- Reset placeHolder in insertSql() to avoid stale values
- Fix test_query.nim to use backtick quoting for BaraDB compatibility

Known server bugs documented in BARADB_CLIENT_BUGS.md
2026-05-21 22:01:55 +03:00

105 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Оставащи бъгове — nim-allographer (BaraDB клиент) + BaraDB сървър
> Дата: 2026-05-21
> Поправени в тази сесия: компилационни грешки, `toJson()`, агрегати, `whereIn`/`whereBetween` placeholder-и, `paginate`, transaction cleanup, `insertSql` state.
---
## 🔴 Критични — блокират функционалност
### 1. [СЪРВЪР] SIGSEGV при INSERT в транзакция
**Описание:** `BEGIN` работи, но при първи `INSERT` след него сървърът пада с `Illegal storage access. (Attempt to read from nil?)`.
**Компонент:** BaraDB сървър — транзакционен engine.
**Възпроизвеждане:**
```sql
BEGIN;
INSERT INTO `users` (`name`) VALUES ('Alice'); -- тук пада
```
**Лог:**
```
[1] Query: BEGIN
[1] Query: INSERT INTO `users` (`name`, `email`, `age`) VALUES ('Alice', 'alice@example.com', 30)
SIGSEGV: Illegal storage access.
```
**Забележка:** Не е клиентски бъг. Клиентът изпраща коректно; сървърът крашва при обработка.
---
### 2. [СЪРВЪР] Parser error за резервирани думи като колони
**Описание:** `CREATE TABLE` с колони на име `label` или `count` хвърля `Expected tkIdent but got tkLabels at line 3`. Вероятно `label` е token тип `tkLabels` и lexer/parser-ът не го разпознава като валиден идентификатор.
**Компонент:** BaraDB сървър — lexer/parser.
**Възпроизвеждане:**
```sql
CREATE TABLE test (
id SERIAL PRIMARY KEY,
label VARCHAR(255), -- грешка тук
count INTEGER -- и тук
);
```
**Забележка:** Като workaround в клиента може да се използват backtick-ове (`` ` ``), но сървърът трябва да поддържа всякакви имена.
---
## 🟡 Важни — качество и сигурност
### 3. [КЛИЕНТ] SQL injection риск в `formatSql()`
**Описание:** Целият query builder използва `formatSql()` който прави **client-side string interpolation** (`?` → стойност). Това е уязвимост при злонамерен input.
**Файл:** `clients/nim-allographer/src/allographer/query_builder/models/baradb/baradb_exec.nim`, процедура `formatSql()`.
**Проблем:**
```nim
proc formatSql*(sql: string, args: seq[JsonNode]): string =
result = sql
for arg in args:
let pos = result.find("?")
result = result[0..<pos] & escapeSqlValue(arg) & result[pos+1..^1]
```
**Решение:** Query builder-ът трябва да изпраща заявките чрез **prepared statements** (`mkQueryParams` в wire protocol), вместо да интерполира стойностите в SQL string. Prepared statements вече са имплементирани (`preparedGet`, `preparedExec` в `baradb_exec.nim`), но query builder-ът ги заобикаля.
**Обхват:** Всички `.where()`, `.insert()`, `.update()`, `.delete()` методи в query builder.
---
### 4. [КЛИЕНТ] Schema builder използва `information_schema`
**Описание:** `create_schema.nim` пита `information_schema.tables` и `information_schema.columns`, които са PostgreSQL/MySQL специфични. BaraDB вероятно няма тези view-та.
**Файл:** `clients/nim-allographer/src/allographer/schema_builder/usecases/baradb/create_schema.nim`
**Решение:** Имплементирай BaraDB-специфична интроспекция — или чрез BaraQL команди, или чрез `PRAGMA`-подобни заявки ако сървърът ги поддържа.
---
## 🟢 Дреболии
### 5. [КЛИЕНТ] `getRowPlain()` връща празен seq при празен резултат
**Описание:** Поправено е да не хвърля `IndexDefect`, но сега връща `@[]`. Потребителят не разбира дали заявката е върнала 0 реда или е станала грешка.
**Файл:** `clients/nim-allographer/src/allographer/query_builder/models/baradb/baradb_exec.nim`
---
## Приоритет
| Приоритет | # | Проблем | Отговорност |
|-----------|---|---------|-------------|
| P0 | 1 | Сървърен SIGSEGV при INSERT в транзакция | Сървърен екип |
| P0 | 2 | Сървърен parser error за резервирани думи | Сървърен екип |
| P1 | 3 | SQL injection — преминаване към prepared statements | Клиентски екип |
| P1 | 4 | Schema builder `information_schema` | Клиентски екип |
| P2 | 5 | `getRowPlain()` semantics | Клиентски екип |