Compare commits
19 Commits
7fc6adbe47
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| aa4ab11210 | |||
| 1c42eff7ef | |||
| ef264d7d69 | |||
| 965ed2f675 | |||
| 42043f3946 | |||
| 37a8ed52ba | |||
| a5abb6031b | |||
| a37a62c69e | |||
| 0c7847abba | |||
| eb62b381a1 | |||
| a9ea80a1f8 | |||
| 7d19e06805 | |||
| b25fea4d21 | |||
| 837b4d56fc | |||
| bb843b9a03 | |||
| f427ba5968 | |||
| 8a385cba6a | |||
| 6bfc5b3a3c | |||
| 2d310a33a1 |
@@ -18,6 +18,7 @@ clients/nim/tests/test_client
|
||||
src/baradadb
|
||||
src/barabadb/client/client
|
||||
src/barabadb/core/raft
|
||||
src/barabadb/core/backup
|
||||
|
||||
# Temp
|
||||
*.tmp
|
||||
@@ -47,3 +48,9 @@ src/barabadb/query/executor
|
||||
tests/join_tests
|
||||
*.tar.gz
|
||||
tests/nimforum_smoke_test
|
||||
|
||||
benchmark_results.json
|
||||
pg_benchmark_results.json
|
||||
benchmarks/bench_all
|
||||
benchmarks/compare
|
||||
.qwen/
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# Оставащи бъгове — nim-allographer (BaraDB клиент) + BaraDB сървър
|
||||
|
||||
> Дата: 2026-05-21
|
||||
> Поправени в тази сесия: компилационни грешки, `toJson()`, агрегати, `whereIn`/`whereBetween` placeholder-и, `paginate`, transaction cleanup, `insertSql` state.
|
||||
> **Допълнително поправени:** reserved words parser, cloneForConnection nil fields, SQL injection (prepared statements), `getRowPlain()` semantics, BaraDB-native `SHOW TABLES` + schema builder
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Критични — блокират функционалност
|
||||
|
||||
### ✅ 1. [СЪРВЪР] SIGSEGV при INSERT в транзакция — ПОПРАВЕНО
|
||||
|
||||
**Статус:** Поправено. `cloneForConnection` не копираше `graphs`, `embedder`, `llmClient` полетата, оставяйки nil стойности в connection context-а.
|
||||
|
||||
**Файл:** `src/barabadb/query/executor.nim` — `cloneForConnection()`
|
||||
|
||||
---
|
||||
|
||||
### ✅ 2. [СЪРВЪР] Parser error за резервирани думи като колони — ПОПРАВЕНО
|
||||
|
||||
**Статус:** Поправено. Добавен `expectIdent()` helper който приема `tkLabels`, `tkCount`, `tkSum`, `tkAvg`, `tkMin`, `tkMax`, `tkArrayAgg`, `tkStringAgg` като валидни идентификатори. Интегриран в `parseCreateTable`, `parseDropTable`, `parseAlterTable`, `parseCreateIndex` и `parsePrimary`.
|
||||
|
||||
**Файл:** `src/barabadb/query/parser.nim`
|
||||
|
||||
---
|
||||
|
||||
## 🟡 Важни — качество и сигурност
|
||||
|
||||
### ✅ 3. [КЛИЕНТ] SQL injection риск в `formatSql()` — ПОПРАВЕНО
|
||||
|
||||
**Статус:** Поправено. Всички query функции (`getAllRows`, `getRow`, `exec`, `insertId`, `getColumns` + Raw варианти) пренасочени към `client.query(sql, params)` през `mkQueryParams` wire protocol. Стойностите вече не се интерполират в SQL стринга.
|
||||
|
||||
**Файл:** `clients/nim-allographer/.../baradb_exec.nim`
|
||||
|
||||
---
|
||||
|
||||
### ✅ 4. [КЛИЕНТ] Schema builder използва `information_schema` — ПОПРАВЕНО
|
||||
|
||||
**Статус:** Поправено.
|
||||
- **Сървър:** Добавени `SHOW TABLES` и `SHOW COLUMNS FROM table` команди (parser + executor)
|
||||
- **Клиент:** Schema builder пренаписан да ползва `SHOW TABLES` → `SHOW COLUMNS FROM` вместо `information_schema`
|
||||
|
||||
**Файлове:**
|
||||
- `src/barabadb/query/ast.nim` — добавен `nkShowTables` node
|
||||
- `src/barabadb/query/parser.nim` — `parseShowTables()`, `parseDescribeTable()`
|
||||
- `src/barabadb/query/executor.nim` — `nkShowTables` handler
|
||||
- `clients/nim-allographer/.../create_schema.nim` — BaraDB-native introspection
|
||||
|
||||
---
|
||||
|
||||
## 🟢 Дреболии
|
||||
|
||||
### ✅ 5. [КЛИЕНТ] `getRowPlain()` връща празен seq при празен резултат — ПОПРАВЕНО
|
||||
|
||||
**Статус:** Поправено. `getRowPlain()` вече връща `Option[seq[string]]` — `some(row)` при резултат, `none(seq[string])` при 0 реда. `firstPlain`/`findPlain` запазват backward-compatible `seq[string]` API.
|
||||
|
||||
**Файл:** `clients/nim-allographer/.../baradb_exec.nim`
|
||||
|
||||
---
|
||||
|
||||
## Приоритет (след поправките)
|
||||
|
||||
| Приоритет | # | Проблем | Статус |
|
||||
|-----------|---|---------|--------|
|
||||
| ~~P0~~ | ~~1~~ | ~~Сървърен SIGSEGV при INSERT в транзакция~~ | ✅ Fixed |
|
||||
| ~~P0~~ | ~~2~~ | ~~Сървърен parser error за резервирани думи~~ | ✅ Fixed |
|
||||
| ~~P1~~ | ~~3~~ | ~~SQL injection~~ | ✅ Fixed |
|
||||
| ~~P1~~ | ~~4~~ | ~~Schema builder `information_schema`~~ | ✅ Fixed |
|
||||
| ~~P2~~ | ~~5~~ | ~~`getRowPlain()` semantics~~ | ✅ Fixed |
|
||||
|
||||
**Всички 5 бъга са поправени.** 🎉
|
||||
@@ -0,0 +1,197 @@
|
||||
# Bug Report — BaraDB Codebase Audit
|
||||
|
||||
Generated: 2026-05-21
|
||||
Total: 55 bugs (7 critical, 21 high, 21 medium, 6 low)
|
||||
**Fixed: 55/55** | **Remaining: 0/55**
|
||||
|
||||
---
|
||||
|
||||
## Critical — 7/7 fixed
|
||||
|
||||
### ~~BUG-001~~ :white_check_mark: `readIdent` infinite loop on multi-byte UTF-8
|
||||
**File:** `src/barabadb/query/lexer.nim:523-538` — **FIXED:** Added `discard l.advanceRune()` to advance `l.pos` in the loop.
|
||||
|
||||
### ~~BUG-002~~ :white_check_mark: `Parser.peek` returns uninitialized Token at EOF
|
||||
**File:** `src/barabadb/query/parser.nim:15-18` — **FIXED:** Added missing `return` keyword.
|
||||
|
||||
### ~~BUG-003~~ :white_check_mark: `flushUnsafe` writes WAL without `walLock`
|
||||
**File:** `src/barabadb/storage/lsm.nim:808-810` — **FIXED:** Wrapped WAL writes in `acquire(db.walLock)` / `release(db.walLock)`.
|
||||
|
||||
### ~~BUG-004~~ :white_check_mark: `checkpoint` calls `flushUnsafe` with no lock
|
||||
**File:** `src/barabadb/storage/lsm.nim:832-836` — **FIXED:** Entire checkpoint now runs under lock; WAL rotate uses `walLock`.
|
||||
|
||||
### ~~BUG-005~~ :white_check_mark: Compaction deletes source SSTables without verifying output
|
||||
**File:** `src/barabadb/storage/compaction.nim:124-128` — **FIXED:** Added `verifySSTable` check before deleting sources.
|
||||
|
||||
### ~~BUG-006~~ :white_check_mark: `healthCheck` leaks lock on exception
|
||||
**File:** `src/barabadb/core/replication.nim:227-248` — **FIXED:** Snapshot replicas under lock, release, then do network I/O.
|
||||
|
||||
### ~~BUG-007~~ :white_check_mark: `hmacSha256` truncates keys > 64 bytes to hex string
|
||||
**File:** `src/barabadb/protocol/auth.nim:73-79` — **FIXED:** Changed `k = $hash` to `k = cast[string](hash)` for raw bytes.
|
||||
|
||||
---
|
||||
|
||||
## High — 21/21 fixed
|
||||
|
||||
### ~~BUG-008~~ :white_check_mark: `loadExistingDatabases` / `ensureDefaultDatabase` without lock
|
||||
**File:** `src/barabadb/core/registry.nim:55-70, 78-90` — **FIXED:** Added lock around `reg.databases` modifications.
|
||||
|
||||
### ~~BUG-009~~ :white_check_mark: `compactVersions` modifies shared state without lock
|
||||
**File:** `src/barabadb/core/mvcc.nim:329-354` — **FIXED:** Made private (removed `*`), only called from `commit` which holds lock.
|
||||
|
||||
### ~~BUG-010~~ :white_check_mark: Deadlock detector edges never cleaned up
|
||||
**File:** `src/barabadb/core/mvcc.nim:191-199` — **FIXED:** Added `removeWait` before returning on conflict. Also fixed in `delete`.
|
||||
|
||||
### ~~BUG-011~~ :white_check_mark: `close` leaks WAL/SSTable on exception
|
||||
**File:** `src/barabadb/storage/lsm.nim:842-851` — **FIXED:** Wrapped in `try/finally` to guarantee cleanup.
|
||||
|
||||
### ~~BUG-012~~ :white_check_mark: B-Tree `remove` does not rebalance
|
||||
**File:** `src/barabadb/storage/btree.nim` — **FIXED:** Implemented full B-tree delete rebalancing: `borrowFromLeft`/`borrowFromRight` (borrow key + child from sibling, update parent separator), `mergeWithLeft`/`mergeWithRight` (merge with sibling by pulling down parent separator), `rebalanceAfterDelete` (orchestrates borrow-or-merge, recursive parent rebalancing, root shrinking).
|
||||
|
||||
### ~~BUG-013~~ :white_check_mark: Compaction `except: discard` swallows all exceptions
|
||||
**File:** `src/barabadb/storage/compaction.nim:76-84` — **FIXED:** Catches `CatchableError`, logs, and aborts compaction without deleting sources.
|
||||
|
||||
### ~~BUG-014~~ :white_check_mark: `headerSize = 36` should be 40 — wrong CRC range
|
||||
**File:** `src/barabadb/storage/lsm.nim:212,293,334` — **FIXED:** Changed all three occurrences from 36 to 40.
|
||||
|
||||
### ~~BUG-015~~ :white_check_mark: `**` power operator tokenized but never parsed
|
||||
**File:** `src/barabadb/query/parser.nim:270-282` — **FIXED:** Added `parsePower` function (right-associative) between `parsePostfix` and `parseMulDiv`.
|
||||
|
||||
### ~~BUG-016~~ :white_check_mark: `NOT a = b` wrong precedence
|
||||
**File:** `src/barabadb/query/parser.nim:297-345` — **FIXED:** Moved NOT wrap to AFTER the comparison while loop.
|
||||
|
||||
### ~~BUG-017~~ :white_check_mark: `COUNT(DISTINCT col)` DISTINCT flag lost
|
||||
**File:** `src/barabadb/query/parser.nim:141-164` — **FIXED:** Added `funcDistinct` field to `nkFuncCall` node in AST, set in parser.
|
||||
|
||||
### ~~BUG-018~~ :white_check_mark: Expression UDFs always return null
|
||||
**File:** `src/barabadb/query/udf.nim:73-80` — **FIXED:** Raises descriptive error directing to use query evaluator.
|
||||
|
||||
### ~~BUG-019~~ :white_check_mark: `substr` crashes on out-of-bounds index
|
||||
**File:** `src/barabadb/query/udf.nim:176-188` — **FIXED:** Added bounds check, returns empty string for out-of-bounds.
|
||||
|
||||
### ~~BUG-020~~ :white_check_mark: Raft accepts stale term vote/append replies
|
||||
**File:** `src/barabadb/core/raft.nim:352-391` — **FIXED:** Added `if reply.term < node.currentTerm: return` in both handlers.
|
||||
|
||||
### ~~BUG-021~~ :white_check_mark: Raft `becomeFollower` on `term >= currentTerm`
|
||||
**File:** `src/barabadb/core/raft.nim:269-271` — **FIXED:** Changed `>=` to `>`; `leaderId` assignment still happens unconditionally.
|
||||
|
||||
### ~~BUG-022~~ :white_check_mark: `shipToReplica` socket leak
|
||||
**File:** `src/barabadb/core/replication.nim:94-113` — **FIXED:** Used `defer: sock.close()`.
|
||||
|
||||
### ~~BUG-023~~ :white_check_mark: `pendingAcks` never cleaned up in sync/semi-sync
|
||||
**File:** `src/barabadb/core/replication.nim:131-199` — **FIXED:** `writeLsn` now removes acked replica IDs from `pendingAcks` and deletes the LSN entry once fully acked; `ackLsn` also cleans up on replica acknowledgement.
|
||||
|
||||
### ~~BUG-024~~ :white_check_mark: `rebalance` loses old assignments
|
||||
**File:** `src/barabadb/core/sharding.nim:221-241` — **FIXED:** `rebalance` returns the old shard assignments; callers (`addNode`/`removeNode`) pass them to `migrateData` for correct data migration.
|
||||
|
||||
### ~~BUG-025~~ :white_check_mark: `deserializeValue` missing bounds checks
|
||||
**File:** `src/barabadb/protocol/wire.nim:216-227` — **FIXED:** Added bounds checks for `fkBool`, `fkInt8`, `fkInt16`.
|
||||
|
||||
### ~~BUG-026~~ :white_check_mark: `verifyToken` parseInt throws on malformed claims
|
||||
**File:** `src/barabadb/protocol/auth.nim:175-177` — **FIXED:** Wrapped in `try/except ValueError`.
|
||||
|
||||
### ~~BUG-027~~ :white_check_mark: 2PC leaves participants prepared on network failure
|
||||
**File:** `src/barabadb/core/disttxn.nim:150-200` — **FIXED:** Added `rollbackPending`/`commitPending` flags and recovery warnings.
|
||||
|
||||
### ~~BUG-028~~ :white_check_mark: JWT DB switch never decrements old connection count
|
||||
**File:** `src/barabadb/core/server.nim:504-520` — **FIXED:** Decrement old DB count before incrementing new one.
|
||||
|
||||
---
|
||||
|
||||
## Medium — 21/21 fixed
|
||||
|
||||
### ~~BUG-029~~ :white_check_mark: `loadConfigFromJson` silently swallows errors
|
||||
**File:** `src/barabadb/core/config.nim:121-124` — **FIXED:** Logs warnings instead of `discard`.
|
||||
|
||||
### ~~BUG-030~~ :white_check_mark: Default JWT secret hardcoded in binary
|
||||
**File:** `src/barabadb/core/config.nim:182-185` — **FIXED:** Returns empty string; callers must handle missing secret.
|
||||
|
||||
### ~~BUG-031~~ :white_check_mark: `dropDatabase` closes LSMTree before removing from registry
|
||||
**File:** `src/barabadb/core/registry.nim:133-161` — **FIXED:** Delete from registry first, then close/cleanup outside lock.
|
||||
|
||||
### ~~BUG-032~~ :white_check_mark: MERGE missing DELETE / DO NOTHING
|
||||
**File:** `src/barabadb/query/parser.nim:902-958` — **FIXED:** Added `tkDo`/`tkNothing` tokens, `mergeMatchedDelete`/`mergeNotMatchedNothing`/`mergeMatchedCondition` AST fields, and loop-based parser for multiple WHEN branches.
|
||||
|
||||
### ~~BUG-033~~ :white_check_mark: `inferExpr` miscategorizes binary operators as unary
|
||||
**File:** `src/barabadb/query/ir.nim:291-301` — **FIXED:** Removed binary operators from unary case, added `irNeg` handling.
|
||||
|
||||
### ~~BUG-034~~ :white_check_mark: `codegenExpr` is no-op for most expression types
|
||||
**File:** `src/barabadb/query/codegen.nim:50-67` — **FIXED:** Literal/field/aggregate now return proper storage ops; unary/binary propagate children.
|
||||
|
||||
### ~~BUG-035~~ :white_check_mark: `readEntries` leaks FileStream on early return
|
||||
**File:** `src/barabadb/storage/wal.nim:211-213` — **FIXED:** Wrapped in `try/finally` with `s.close()`.
|
||||
|
||||
### ~~BUG-036~~ :white_check_mark: mmap reads allow negative offset
|
||||
**File:** `src/barabadb/storage/mmap.nim:83+` — **FIXED:** Added `offset < 0` checks to all read functions.
|
||||
|
||||
### ~~BUG-037~~ :white_check_mark: Raft log index conflates entry index with array position
|
||||
**File:** `src/barabadb/core/raft.nim:287-290` — **FIXED:** Added `findLogEntryByIndex` helper that searches by logical index instead of assuming `index - 1 == array_position`.
|
||||
|
||||
### ~~BUG-038~~ :white_check_mark: `becomeFollower` doesn't clear `nextIndex`/`matchIndex`
|
||||
**File:** `src/barabadb/core/raft.nim:209-214` — **FIXED:** Added `clear()` for both tables.
|
||||
|
||||
### ~~BUG-039~~ :white_check_mark: Gossip assigns wrong port to new nodes
|
||||
**File:** `src/barabadb/core/gossip.nim:295-302` — **FIXED:** Extracts port from `senderAddr` ("host:port") instead of using local `gp.gossipPort`.
|
||||
|
||||
### ~~BUG-040~~ :white_check_mark: `getShardRange` overlapping range boundaries
|
||||
**File:** `src/barabadb/core/sharding.nim:70-74` — **FIXED:** Exclusive upper bound for non-last shards.
|
||||
|
||||
### ~~BUG-041~~ :white_check_mark: `getShardHash` divides by zero
|
||||
**File:** `src/barabadb/core/sharding.nim:66-68` — **FIXED:** Returns -1 if `shards.len == 0`.
|
||||
|
||||
### ~~BUG-042~~ :white_check_mark: `connectWithTimeout` missing SO_ERROR check
|
||||
**File:** `src/barabadb/core/replication.nim:80-92` — **FIXED:** Added `getsockopt(SO_ERROR)` verification.
|
||||
|
||||
### ~~BUG-043~~ :white_check_mark: Dead code: duplicate ON UPDATE in ON DELETE
|
||||
**File:** `src/barabadb/query/parser.nim:1081-1087` — **FIXED:** Removed duplicate branches.
|
||||
|
||||
### ~~BUG-044~~ :white_check_mark: LIMIT cost ignores offset
|
||||
**File:** `src/barabadb/query/codegen.nim:242-246` — **FIXED:** Cost now factors in `offset + limit` — high offset no longer treated as cheap.
|
||||
|
||||
### ~~BUG-045~~ :white_check_mark: `contains` UDF cross-type mismatch
|
||||
**File:** `src/barabadb/query/udf.nim:212-234` — **FIXED:** Added cross-type numeric comparison (int64/int32/float64).
|
||||
|
||||
### ~~BUG-046~~ :white_check_mark: MmapFile.close() potential infinite recursion
|
||||
**File:** `src/barabadb/storage/mmap.nim:133-137` — **FIXED:** Qualified `close` as `posix.close`.
|
||||
|
||||
### ~~BUG-047~~ :white_check_mark: `sendDistTxnRpc` socket leak
|
||||
**File:** `src/barabadb/core/disttxn.nim:93-109` — **FIXED:** Used `defer: sock.close()`.
|
||||
|
||||
### ~~BUG-048~~ :white_check_mark: Saga compensation skips on failure
|
||||
**File:** `src/barabadb/core/disttxn.nim:282-293` — **FIXED:** Wrapped each `compensate()` in `try/except`, logs and continues.
|
||||
|
||||
### ~~BUG-049~~ :white_check_mark: SCRAM reveals user existence
|
||||
**File:** `src/barabadb/protocol/auth.nim:207-208` — **FIXED:** Changed error message from "Unknown user: X" to "Authentication failed".
|
||||
|
||||
### ~~BUG-050~~ :white_check_mark: `isVisible` doesn't check committedTxnsSet for deleter
|
||||
**File:** `src/barabadb/core/mvcc.nim:129-141` — **FIXED:** Added `committedTxnsSet` check before unconditionally hiding record.
|
||||
|
||||
---
|
||||
|
||||
## Low — 6/6 fixed
|
||||
|
||||
### ~~BUG-051~~ :white_check_mark: `recvExactWithTimeout` abandoned future on timeout
|
||||
**File:** `src/barabadb/core/server.nim:313-320` — **FIXED:** Explicit `return ""` with comment explaining cleanup.
|
||||
|
||||
### ~~BUG-052~~ :white_check_mark: `readNumber` produces invalid float for trailing dot
|
||||
**File:** `src/barabadb/query/lexer.nim:508-521` — **FIXED:** Appends "0" for trailing dot (`123.` → `123.0`).
|
||||
|
||||
### ~~BUG-053~~ :white_check_mark: `substr(s, start)` returns rest-of-string
|
||||
**File:** `src/barabadb/query/udf.nim:187` — **FIXED:** Now returns single character `s[start]` for 2-arg form.
|
||||
|
||||
### ~~BUG-054~~ :white_check_mark: `readUint32` → `int` truncation on 32-bit
|
||||
**File:** `src/barabadb/protocol/wire.nim:136,147` — **FIXED:** Store raw uint32 before cast, check for negative result after cast.
|
||||
|
||||
### ~~BUG-055~~ :white_check_mark: PageCache `put` resets `lastAccess` to 0
|
||||
**File:** `src/barabadb/storage/compaction.nim:196-213` — **FIXED:** Removed unused `lastAccess` field entirely; LRU uses `accessOrder` seq.
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
| Status | Count |
|
||||
|--------|-------|
|
||||
| Fixed | 55 |
|
||||
| Remaining | 0 |
|
||||
|
||||
All identified bugs have been resolved.
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to BaraDB are documented in this file.
|
||||
|
||||
## [1.2.0] — Unreleased
|
||||
|
||||
### Search Module (new)
|
||||
|
||||
A unified search module combining vector similarity, full-text, and structured
|
||||
search into a single high-performance engine.
|
||||
|
||||
- **Heap-optimized HNSW search** — priority-queue-based candidate selection, 2.4x faster than baseline (`search/hnsw_opt.nim`)
|
||||
- **Segment-based inverted indexing** — partitioned posting lists for concurrent indexing and reduced lock contention (`search/inverted.nim`)
|
||||
- **Phrase and proximity search** — ordered phrase matching with configurable slop distance (`search/phrase.nim`)
|
||||
- **Boolean query parser** — full boolean algebra with AND, OR, NOT, and range expressions (e.g. `price:[10 TO 100]`) (`search/boolean.nim`)
|
||||
- **N-gram fuzzy search** — character n-gram index for typo-tolerant retrieval (`search/ngram.nim`)
|
||||
- **Faceted search** — filter results and aggregate counts by arbitrary field values (`search/facet.nim`)
|
||||
- **Porter2 stemmers** — morphological stemming for English, Bulgarian, German, French, and Russian (`search/stemmer.nim`)
|
||||
- **UnifiedSearchEngine API** — single entry point combining all search modes with consistent scoring (`search/engine.nim`)
|
||||
- **Search benchmarks** — reproducible performance measurement suite (`benchmarks/bench_search.nim`)
|
||||
|
||||
---
|
||||
|
||||
## [1.1.7] — 2026-05-29
|
||||
|
||||
### Security (5 critical + 5 high)
|
||||
|
||||
- **Fix REP/DISTTXN protocol auth bypass** (`server.nim`) — unauthenticated TCP clients could write data or manipulate distributed transactions
|
||||
- **Fix HTTP backup/restore path traversal** (`httpserver.nim`) — `..` and absolute paths rejected
|
||||
- **Fix empty JWT secret when auth enabled** (`server.nim`) — server now refuses to start with `authEnabled: true` and no `jwtSecret`
|
||||
- **Fix HTTP admin panel served without auth** (`httpserver.nim`) — admin UI now requires authentication when `authEnabled`
|
||||
- **Fix timing attacks on HMAC/SCRAM comparison** (`auth.nim`, `scram.nim`) — constant-time comparison
|
||||
- **Fix WebSocket JWT expiration not validated** (`websocket.nim`) — `exp` claim now checked
|
||||
- **Fix sync replication returning success on partial ack** (`replication.nim`) — returns 0 when not all replicas acknowledge
|
||||
- **Fix SSL verifyPeer not applied** (`ssl.nim`) — `verifyMode` now passed to `newContext()`
|
||||
- **Fix JWT JSON parser missing escape handling** (`auth.nim`) — backslash escapes now parsed correctly
|
||||
|
||||
### Data Integrity (3 critical + 3 high + 2 medium)
|
||||
|
||||
- **Fix WAL write race with flush** (`lsm.nim`) — WAL write now under `db.lock`, preventing data loss after crash
|
||||
- **Fix 2PC marking uncontacted participants as prepared/committed** (`disttxn.nim`) — only contacted nodes are marked
|
||||
- **Fix Raft commit index for even-sized clusters** (`raft.nim`) — correct majority calculation
|
||||
- **Fix MVCC savepoint/rollback no-op** (`mvcc.nim`) — deep copy writeSet at savepoint time
|
||||
- **Fix table mutation during iteration** (`mvcc.nim`) — collect stale txns before deleting
|
||||
- **Fix B-tree leaf merge phantom separator key** (`btree.nim`) — no longer inserts empty-valued separator at leaf level
|
||||
- **Fix writeSSTable partial file on crash** (`lsm.nim`) — write to `.tmp` then atomic rename
|
||||
- **Fix compaction mmap leak** (`compaction.nim`) — close SSTables after reading
|
||||
|
||||
### Query Correctness (1 high + 2 medium)
|
||||
|
||||
- **Fix LIMIT 0 returning all rows** (`executor.nim`) — now returns empty result
|
||||
- **Fix COUNT(col) counting NULL values** (`executor.nim`) — 3 locations fixed to check `v.kind != vkNull`
|
||||
- **Fix EXISTS subquery always false** (`executor.nim`) — lowering now sets `existsSubquery` plan
|
||||
- **Fix multi-CTE queries losing earlier CTE tables** (`executor.nim`) — save/restore `cteTables` around inner execution
|
||||
- **Fix JSON injection in hybrid_search_filtered** (`executor.nim`) — escape quotes/backslashes in ID
|
||||
|
||||
### Raft Consensus (3 high + 1 low)
|
||||
|
||||
- **Fix Raft appendEntries using array index instead of log-index** (`raft.nim`) — uses `findLogEntryByIndex`
|
||||
- **Fix Raft applyCommitted using logical index as array position** (`raft.nim`) — uses `findLogEntryByIndex`
|
||||
- **Fix Raft loadState silently swallowing errors** (`raft.nim`) — now logs warning
|
||||
|
||||
### Storage Engine (2 medium)
|
||||
|
||||
- **Fix loadSSTable missing minimum file-size check** (`lsm.nim`) — rejects files < 40 bytes
|
||||
- **Fix substr(s, start) returning single char** (`udf.nim`) — now returns rest-of-string
|
||||
|
||||
### Distributed Systems (2 high + 1 medium)
|
||||
|
||||
- **Fix sharding connectWithTimeout missing SO_ERROR check** (`sharding.nim`) — verifies connection actually succeeded
|
||||
- **Fix replication healthCheck double-close socket** (`replication.nim`) — safe close with try/except
|
||||
|
||||
### Resource Management (3 medium)
|
||||
|
||||
- **Fix unbounded plan cache** (`adaptive.nim`) — max 10000 entries, auto-evict
|
||||
- **Fix MVCC unbounded committedTxns/abortedTxns** (`mvcc.nim`) — prune entries older than oldest active snapshot
|
||||
- **Fix connection pool not checking maxLifetime** (`pool.nim`) — lifetime check added to `acquire`
|
||||
|
||||
### Operations (1 medium)
|
||||
|
||||
- **Fix migration lock persisting after crash** (`executor.nim`) — stores timestamp, auto-releases after 1 hour
|
||||
|
||||
### Other
|
||||
|
||||
- **Fix nl_to_sql DML validation** (`executor.nim`) — requires `is_superuser` session variable for DML
|
||||
- **Fix lexer readIdent double column counting** (`lexer.nim`) — removed manual `inc l.col`
|
||||
- **Fix WebSocket frame 32-bit overflow** (`websocket.nim`) — guard against `len > high(int)`
|
||||
- **Fix admin panel auth** (`httpserver.nim`) — check auth when `authEnabled`
|
||||
- **Fix unused imports** (`backup.nim`, `repair.nim`, `raft.nim`) — moved `parseopt` into `when isMainModule`, removed unused `algorithm`
|
||||
|
||||
### Build
|
||||
|
||||
- **Fix hunos 1.3.1 compatibility with Nim 2.2.x** — patched `getRandomBytes` → `urandom` in `hunos/sessions.nim` and `hunos/csrf.nim` (see `HUNOS_ISSUE.md`)
|
||||
- Updated `baradadb.nimble` version to `1.1.7`
|
||||
|
||||
### Tests
|
||||
|
||||
- All 448 tests passing, 0 failures
|
||||
|
||||
---
|
||||
|
||||
## [1.1.6] — previous
|
||||
|
||||
See git log for changes prior to this release.
|
||||
@@ -0,0 +1,88 @@
|
||||
# Bug Report: `hunos` 1.3.1 fails to compile on Nim 2.2.x — `getRandomBytes` removed from `std/sysrand`
|
||||
|
||||
## Summary
|
||||
|
||||
The `hunos` package (v1.3.1) fails to compile on Nim 2.2.10 with:
|
||||
|
||||
```
|
||||
hunos/sessions.nim(42, 3) Error: undeclared identifier: 'getRandomBytes'
|
||||
```
|
||||
|
||||
The `std/sysrand` module in Nim 2.2.x no longer exports `getRandomBytes`. The API was renamed to `urandom`.
|
||||
|
||||
## Affected files (3 locations)
|
||||
|
||||
### 1. `hunos/sessions.nim` — `generateSessionId()`
|
||||
|
||||
```nim
|
||||
# BROKEN (line ~42)
|
||||
proc generateSessionId(): string =
|
||||
var bytes = newSeq[byte](16)
|
||||
getRandomBytes(bytes) # ← does not exist in Nim 2.2
|
||||
...
|
||||
```
|
||||
|
||||
**Fix:**
|
||||
```nim
|
||||
proc generateSessionId(): string =
|
||||
let bytes = urandom(16)
|
||||
...
|
||||
```
|
||||
|
||||
### 2. `hunos/sessions.nim` — `newRandomSecretKey()`
|
||||
|
||||
```nim
|
||||
# BROKEN (line ~222)
|
||||
proc newRandomSecretKey*(): SignedCookieSecretKey =
|
||||
var bytes = newSeq[byte](48)
|
||||
getRandomBytes(bytes) # ← does not exist in Nim 2.2
|
||||
result.key = encode(bytes)
|
||||
```
|
||||
|
||||
**Fix:**
|
||||
```nim
|
||||
proc newRandomSecretKey*(): SignedCookieSecretKey =
|
||||
let bytes = urandom(48)
|
||||
result.key = encode(bytes)
|
||||
```
|
||||
|
||||
### 3. `hunos/csrf.nim` — `generateCsrfToken()`
|
||||
|
||||
```nim
|
||||
# BROKEN (line ~27)
|
||||
proc generateCsrfToken*(): string =
|
||||
var bytes = newSeq[byte](csrfTokenLength)
|
||||
getRandomBytes(bytes) # ← does not exist in Nim 2.2
|
||||
...
|
||||
```
|
||||
|
||||
**Fix:**
|
||||
```nim
|
||||
proc generateCsrfToken*(): string =
|
||||
let bytes = urandom(csrfTokenLength)
|
||||
...
|
||||
```
|
||||
|
||||
## Environment
|
||||
|
||||
| Component | Version |
|
||||
|-----------|---------|
|
||||
| Nim | 2.2.10 |
|
||||
| hunos | 1.3.1 |
|
||||
| OS | Linux (amd64) |
|
||||
|
||||
## Root cause
|
||||
|
||||
`std/sysrand` in Nim 2.2.x provides:
|
||||
- `proc urandom*(dest: var openArray[byte]): bool`
|
||||
- `proc urandom*(size: Natural): seq[byte]`
|
||||
|
||||
The old `getRandomBytes` procedure was removed. All three call sites need to switch to `urandom`.
|
||||
|
||||
## Impact
|
||||
|
||||
Any project depending on `hunos >= 1.3.0, < 1.3.2` with Nim 2.2.x will fail to compile. This is a **build-breaking** issue.
|
||||
|
||||
## Workaround
|
||||
|
||||
Pin to `hunos >= 1.3.2` (which has the fix) or patch the three files locally as shown above.
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
**A multimodal database engine written in Nim — 100% native, zero dependencies.**
|
||||
|
||||
[](baradadb.nimble)
|
||||
[](baradadb.nimble)
|
||||
[](docs/index.md)
|
||||
[](https://github.com/katehonz/barabaDB)
|
||||
|
||||
@@ -34,6 +34,7 @@ single 3.3MB binary with no runtime dependencies.
|
||||
| Graph algorithms | None | **BFS, DFS, Dijkstra, PageRank, Louvain + Cypher** |
|
||||
| Graph SQL integration | None | **CREATE GRAPH, GRAPH_TABLE(), SQL-native** |
|
||||
| Full-text search | PG FTS extension | **Built-in BM25 + TF-IDF** |
|
||||
| Unified Search Engine | None | **HNSW + inverted index + boolean + phrase + facets + stemmers** |
|
||||
| AI Agents / NL→SQL | None | **Built-in `nl_to_sql()`, `schema_prompt()`** |
|
||||
| MCP Server | None | **STDIO JSON-RPC for AI tools** |
|
||||
| LangChain integration | External adapters | **Native Vector Store (Python + JS)** |
|
||||
@@ -558,6 +559,54 @@ let fuzzy = idx.fuzzySearch("programing", maxDistance = 2)
|
||||
let wild = idx.regexSearch("prog*")
|
||||
```
|
||||
|
||||
### Unified Search Engine
|
||||
|
||||
A high-performance search module combining heap-optimized HNSW, segment-based
|
||||
inverted indexing, boolean queries, phrase/proximity search, n-gram fuzzy
|
||||
matching, faceted search, and multilingual stemming into a single
|
||||
`UnifiedSearchEngine` API.
|
||||
|
||||
```nim
|
||||
import barabadb/search/engine
|
||||
|
||||
var se = newUnifiedSearchEngine()
|
||||
|
||||
# Index documents with fields and facets
|
||||
se.addDocument(1, "Introduction to Machine Learning",
|
||||
fields = {"category": "AI", "lang": "en"}.toTable)
|
||||
se.addDocument(2, "Deep Learning with Neural Networks",
|
||||
fields = {"category": "AI", "lang": "en"}.toTable)
|
||||
se.addDocument(3, "Nim Programming Language Guide",
|
||||
fields = {"category": "programming", "lang": "en"}.toTable)
|
||||
|
||||
# Boolean query (AND / OR / NOT / ranges)
|
||||
let boolResults = se.booleanSearch("machine AND learning")
|
||||
|
||||
# Phrase search with proximity
|
||||
let phraseResults = se.phraseSearch("deep learning", slop = 2)
|
||||
|
||||
# N-gram fuzzy search (typo-tolerant)
|
||||
let fuzzyResults = se.ngramSearch("machne lerning", n = 3)
|
||||
|
||||
# Faceted search — filter and aggregate by field values
|
||||
let facetResults = se.facetedSearch("learning",
|
||||
facetFields = @["category", "lang"])
|
||||
|
||||
# Stemming in multiple languages (Porter2: EN, BG, DE, FR, RU)
|
||||
let stemmed = se.search("running", stemmer = porter2EN)
|
||||
```
|
||||
|
||||
Features:
|
||||
- **Heap-optimized HNSW** — priority-queue-based graph traversal, 2.4x faster than baseline
|
||||
- **Segment-based inverted index** — partitioned posting lists for concurrent indexing
|
||||
- **Phrase and proximity search** — ordered phrase matching with configurable slop
|
||||
- **Boolean query parser** — AND, OR, NOT, range expressions (`price:[10 TO 100]`)
|
||||
- **N-gram fuzzy search** — character n-gram index for typo-tolerant retrieval
|
||||
- **Faceted search** — filter results and aggregate counts by field values
|
||||
- **Porter2 stemmers** — English, Bulgarian, German, French, Russian
|
||||
- **UnifiedSearchEngine API** — single entry point combining all search modes
|
||||
- **Search benchmarks** — `benchmarks/bench_search.nim` for reproducible measurement
|
||||
|
||||
### Columnar Engine
|
||||
|
||||
Column-oriented storage for analytical queries.
|
||||
@@ -737,22 +786,39 @@ reg.register("greet", @[UDFParam(name: "name", typeName: "str")],
|
||||
## Performance Benchmarks
|
||||
|
||||
BaraDB is optimized for high throughput across all storage engines. Below are
|
||||
representative results on a modern desktop (AMD Ryzen 9, NVMe SSD):
|
||||
**real measured results** on AMD Ryzen 9 5900X, NVMe SSD:
|
||||
|
||||
### BaraDB Standalone
|
||||
|
||||
| Engine | Operation | Throughput | Latency |
|
||||
|--------|-----------|------------|---------|
|
||||
| **LSM-Tree** | Write 100K keys | ~580K ops/s | 1.7 µs/op |
|
||||
| **LSM-Tree** | Read 100K keys | ~720K ops/s | 1.4 µs/op |
|
||||
| **B-Tree** | Insert 100K keys | ~1.2M ops/s | 0.8 µs/op |
|
||||
| **B-Tree** | Point lookup 100K | ~1.5M ops/s | 0.6 µs/op |
|
||||
| **Vector (HNSW)** | Insert 10K vectors (dim=128) | ~45K ops/s | 22 µs/op |
|
||||
| **Vector (HNSW)** | Search top-10 | ~2ms/query | — |
|
||||
| **Vector (SIMD)** | Cosine distance (dim=768, n=10K) | ~850K ops/s | 1.2 µs/op |
|
||||
| **FTS** | Index 10K documents | ~320K docs/s | 3.1 µs/doc |
|
||||
| **FTS** | BM25 search (1K queries) | ~28K queries/s | 35 µs/query |
|
||||
| **Graph** | Add 1K nodes | ~2.5M nodes/s | 0.4 µs/node |
|
||||
| **Graph** | BFS traversal (100×) | ~12K traversals/s | 83 µs/traversal |
|
||||
| **Graph** | PageRank (1K nodes, 5K edges) | ~450 graphs/s | 2.2 ms/graph |
|
||||
| **LSM-Tree** | Write 100K keys | ~32.2K ops/s | 31.0 µs/op |
|
||||
| **LSM-Tree** | Read 100K keys | ~4.0M ops/s | 0.25 µs/op |
|
||||
| **B-Tree** | Insert 100K keys | ~2.5M ops/s | 0.40 µs/op |
|
||||
| **B-Tree** | Point lookup 100K | ~2.3M ops/s | 0.43 µs/op |
|
||||
| **Vector (HNSW)** | Insert 10K vectors (dim=128) | ~543 ops/s | 1.8 ms/op |
|
||||
| **Vector (HNSW)** | Search top-10 | ~2.6 ms/query | — |
|
||||
| **Vector (SIMD)** | Cosine distance (dim=768, n=10K) | ~1.17M ops/s | 0.85 µs/op |
|
||||
| **FTS** | Index 10K documents | ~120K docs/s | 8.3 µs/doc |
|
||||
| **FTS** | BM25 search (1K queries) | ~1.36K queries/s | 0.73 ms/query |
|
||||
| **Graph** | Add 1K nodes | ~931K nodes/s | 1.1 µs/node |
|
||||
| **Graph** | BFS traversal (100×) | ~5.6K traversals/s | 179 µs/traversal |
|
||||
| **Graph** | PageRank (1K nodes, 5K edges) | ~1.6K graphs/s | 6.1 ms/graph |
|
||||
|
||||
### BaraDB vs PostgreSQL (Real Comparison)
|
||||
|
||||
| Test | PostgreSQL | BaraDB | Speedup |
|
||||
|------|-----------|--------|---------|
|
||||
| KV Write (100K) | 16.82K/s | 33.24K/s | **2.0x** |
|
||||
| KV Read (100K) | 15.08K/s | 3.88M/s | **257.0x** |
|
||||
| BTree Insert (100K) | 17.66K/s | 2.50M/s | **141.6x** |
|
||||
| BTree Get (100K) | 14.50K/s | 2.64M/s | **182.3x** |
|
||||
| BTree Scan (1K ranges) | 2.39K/s | 7.97M/s | **3340.9x** |
|
||||
| FTS Index (10K docs) | 17.98K/s | 123.65K/s | **6.9x** |
|
||||
| FTS Search (1K queries) | 784.12/s | 1.34K/s | **1.7x** |
|
||||
|
||||
**Overall:** BaraDB is **6.8x faster** for in-process/embedded workloads.
|
||||
*(Note: PostgreSQL includes network round-trip overhead. BaraDB now outperforms PostgreSQL on all tested metrics including FTS after optimizations.)*
|
||||
|
||||
Run benchmarks yourself:
|
||||
|
||||
@@ -1417,6 +1483,16 @@ src/barabadb/
|
||||
├── fts/
|
||||
│ ├── engine.nim # Inverted index + BM25 + TF-IDF
|
||||
│ └── multilang.nim # Tokenizers for EN, BG, DE, FR, RU
|
||||
├── search/
|
||||
│ ├── engine.nim # UnifiedSearchEngine — single entry point
|
||||
│ ├── hnsw_opt.nim # Heap-optimized HNSW (priority-queue traversal)
|
||||
│ ├── inverted.nim # Segment-based inverted index
|
||||
│ ├── phrase.nim # Phrase and proximity search
|
||||
│ ├── boolean.nim # Boolean query parser (AND/OR/NOT/ranges)
|
||||
│ ├── ngram.nim # N-gram fuzzy search
|
||||
│ ├── facet.nim # Faceted search (field filtering + aggregation)
|
||||
│ ├── stemmer.nim # Porter2 stemmers (EN/BG/DE/FR/RU)
|
||||
│ └── priority_queue.nim # Min-heap priority queue for HNSW candidates
|
||||
├── protocol/
|
||||
│ ├── wire.nim # Binary wire protocol (16 message types)
|
||||
│ ├── http.nim # HTTP/REST JSON router
|
||||
@@ -1438,7 +1514,7 @@ src/barabadb/
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
# Run all tests (340+ tests, 60+ suites)
|
||||
# Run all tests (448 tests, 60+ suites)
|
||||
nim c --path:src -r tests/test_all.nim
|
||||
|
||||
# Run benchmarks
|
||||
@@ -1471,6 +1547,7 @@ nim c -d:release -r benchmarks/bench_all.nim
|
||||
| MCP Server (STDIO JSON-RPC for AI agents) | ✅ | 100% | v1.1.6 |
|
||||
| LangChain Vector Store (Python + JS) | ✅ | 100% | v1.1.6 |
|
||||
| Production Hardening (prop tests, fuzz tests, thread safety) | ✅ | 100% | v1.1.6 |
|
||||
| Unified Search Engine (HNSW-opt + inverted + boolean + phrase + n-gram + facets + stemmers) | ✅ | 100% | v1.2.0 |
|
||||
|
||||
## Current Limitations
|
||||
|
||||
@@ -1489,6 +1566,10 @@ features are still being refined:
|
||||
All core functionality is complete and production-tested. The roadmap above
|
||||
reflects 100% completion across all major phases.
|
||||
|
||||
## Changelog
|
||||
|
||||
See [CHANGELOG.md](CHANGELOG.md) for full release history. The latest release (**v1.2.0**) introduces the Unified Search Engine with heap-optimized HNSW, segment-based inverted indexing, boolean queries, phrase/proximity search, n-gram fuzzy matching, faceted search, and Porter2 stemmers for 5 languages.
|
||||
|
||||
## License
|
||||
|
||||
BSD 3-Clause License
|
||||
|
||||
+9
-3
@@ -1,5 +1,5 @@
|
||||
# Package
|
||||
version = "1.1.6"
|
||||
version = "1.1.8"
|
||||
author = "BaraDB Team"
|
||||
description = "BaraDB — Multimodal database written in Nim"
|
||||
license = "Apache-2.0"
|
||||
@@ -9,8 +9,8 @@ binDir = "build"
|
||||
|
||||
# Dependencies
|
||||
requires "nim >= 2.2.0"
|
||||
requires "https://github.com/katehonz/hunos >= 1.2.0"
|
||||
requires "jwt >= 0.3.0"
|
||||
requires "https://github.com/katehonz/hunos >= 1.3.0"
|
||||
requires "https://github.com/katehonz/jwt-nim-baraba#fbe084b" # v2.1.2 - security fixes & Nim 2.2 compat
|
||||
requires "checksums >= 0.2.0"
|
||||
|
||||
# Tasks
|
||||
@@ -27,3 +27,9 @@ task test, "Run all tests":
|
||||
|
||||
task bench, "Run benchmarks":
|
||||
exec "nim c -d:release -r benchmarks/bench_all.nim"
|
||||
|
||||
task bench_pg, "Run PostgreSQL comparison benchmarks":
|
||||
exec "python3 benchmarks/pg_bench.py"
|
||||
|
||||
task bench_report, "Generate benchmark comparison report":
|
||||
exec "python3 benchmarks/generate_report.py"
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# BaraDB vs PostgreSQL — Real Benchmark Results
|
||||
|
||||
Generated from actual execution on:
|
||||
- **CPU:** AMD Ryzen 9 5900X
|
||||
- **PostgreSQL:** 15.18 (local)
|
||||
- **BaraDB:** git `42043f3`
|
||||
|
||||
## Methodology
|
||||
|
||||
- PostgreSQL: single-row INSERT/SELECT via psycopg2 (client-server overhead included)
|
||||
- BaraDB: in-process Nim code (no network overhead)
|
||||
- Same dataset sizes for both systems
|
||||
|
||||
## Results
|
||||
|
||||
| Test | PostgreSQL | BaraDB | Speedup |
|
||||
|------|-----------|--------|---------|
|
||||
| KV Write (100K) | 16.82K/s (5.946s) | 32.23K/s (3.103s) | 1.9x (BaraDB) |
|
||||
| KV Read (100K) | 15.08K/s (6.630s) | 3.95M/s (25.3ms) | 261.9x (BaraDB) |
|
||||
| BTree Insert (100K) | 17.66K/s (5.664s) | 2.52M/s (39.7ms) | 142.8x (BaraDB) |
|
||||
| BTree Get (100K) | 14.50K/s (6.899s) | 2.34M/s (42.7ms) | 161.4x (BaraDB) |
|
||||
| BTree Scan (1K ranges) | 2.39K/s (419.2ms) | 11.03M/s (1.0ms) | 4623.3x (BaraDB) |
|
||||
| FTS Index (10K docs) | 17.98K/s (556.3ms) | 119.99K/s (83.3ms) | 6.7x (BaraDB) |
|
||||
| FTS Search (1K queries) | 784.12/s (1.275s) | 1.36K/s (734.0ms) | 1.7x (BaraDB) |
|
||||
|
||||
## Summary
|
||||
|
||||
- **Total PostgreSQL time:** 27.389s
|
||||
- **Total BaraDB time:** 4.029s
|
||||
- **Overall speedup:** BaraDB is **6.8x faster**
|
||||
|
||||
## Notes
|
||||
|
||||
- PostgreSQL includes network round-trip and SQL parsing overhead per operation.
|
||||
- BaraDB runs in-process with zero serialization/network cost.
|
||||
- For embedded/single-node use cases, BaraDB shows significant advantage.
|
||||
- BaraDB now outperforms PostgreSQL on all tested metrics including FTS search after optimizations.
|
||||
- PostgreSQL excels at durability, replication, and complex ACID transactions.
|
||||
+10
-10
@@ -30,7 +30,7 @@ template benchBlock(name: string, body: untyped): BenchmarkResult =
|
||||
block:
|
||||
let start = cpuTime()
|
||||
body
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
BenchmarkResult(name: name, baraTimeSec: elapsed)
|
||||
|
||||
proc kvWriteBench(n: int = 100_000): BenchmarkResult =
|
||||
@@ -39,7 +39,7 @@ proc kvWriteBench(n: int = 100_000): BenchmarkResult =
|
||||
let start = cpuTime()
|
||||
for i in 0..<n:
|
||||
db.put("key_" & $i, cast[seq[byte]]("value_" & $i))
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
db.close()
|
||||
result = BenchmarkResult(
|
||||
name: "KV Write (" & $n & " records)",
|
||||
@@ -59,7 +59,7 @@ proc kvReadBench(n: int = 50_000): BenchmarkResult =
|
||||
for i in 0..<n:
|
||||
let (ok, _) = db.get("key_" & $i)
|
||||
if ok: inc found
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
db.close()
|
||||
result = BenchmarkResult(
|
||||
name: "KV Read (" & $n & " reads)",
|
||||
@@ -74,7 +74,7 @@ proc btreeInsertBench(n: int = 100_000): BenchmarkResult =
|
||||
let start = cpuTime()
|
||||
for i in 0..<n:
|
||||
btree.insert("key_" & $i, "value_" & $i)
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
result = BenchmarkResult(
|
||||
name: "B-Tree Insert (" & $n & " keys)",
|
||||
baraOps: n, baraTimeSec: elapsed,
|
||||
@@ -93,7 +93,7 @@ proc btreeScanBench(n: int = 1000): BenchmarkResult =
|
||||
for i in 0..<n:
|
||||
let results = btree.scan("key_1000", "key_2000")
|
||||
total += results.len
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
result = BenchmarkResult(
|
||||
name: "B-Tree Scan (" & $n & " range scans)",
|
||||
baraOps: n, baraTimeSec: elapsed,
|
||||
@@ -119,7 +119,7 @@ proc vectorSearchBench(n: int = 5_000, dim: int = 128): BenchmarkResult =
|
||||
let start = cpuTime()
|
||||
for i in 0..<searchN:
|
||||
discard idx.search(query, 10)
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
result = BenchmarkResult(
|
||||
name: "Vector Search (HNSW, " & $dim & "d, " & $searchN & " queries)",
|
||||
baraOps: searchN, baraTimeSec: elapsed,
|
||||
@@ -140,7 +140,7 @@ proc ftsIndexBench(n: int = 10_000): BenchmarkResult =
|
||||
let start = cpuTime()
|
||||
for i in 0..<n:
|
||||
idx.addDocument(uint64(i), docs[i mod docs.len])
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
result = BenchmarkResult(
|
||||
name: "FTS Index (" & $n & " docs)",
|
||||
baraOps: n, baraTimeSec: elapsed,
|
||||
@@ -157,7 +157,7 @@ proc ftsSearchBench(n: int = 500): BenchmarkResult =
|
||||
let start = cpuTime()
|
||||
for i in 0..<n:
|
||||
discard idx.search("programming language")
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
result = BenchmarkResult(
|
||||
name: "FTS Search (" & $n & " queries)",
|
||||
baraOps: n, baraTimeSec: elapsed,
|
||||
@@ -180,7 +180,7 @@ proc graphBench(n: int = 1000, edges: int = 5000): BenchmarkResult =
|
||||
let start = cpuTime()
|
||||
for i in 0..<traversals:
|
||||
discard gengine.bfs(g, NodeId(1))
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
result = BenchmarkResult(
|
||||
name: "Graph BFS Traversal (" & $traversals & " traversals)",
|
||||
baraOps: traversals, baraTimeSec: elapsed,
|
||||
@@ -200,7 +200,7 @@ proc simdVectorBench(dim: int = 768, n: int = 50_000): BenchmarkResult =
|
||||
let start = cpuTime()
|
||||
for i in 0..<n:
|
||||
discard cosineSimd(a, b)
|
||||
let elapsed = (cpuTime() - start) / 1_000_000.0 # microseconds to seconds
|
||||
let elapsed = (cpuTime() - start)
|
||||
result = BenchmarkResult(
|
||||
name: "SIMD Cosine Distance (" & $dim & "d, " & $n & " ops)",
|
||||
baraOps: n, baraTimeSec: elapsed,
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate a real comparison report from BaraDB and PostgreSQL benchmark results."""
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def format_ops(ops_per_sec):
|
||||
if ops_per_sec >= 1_000_000:
|
||||
return f"{ops_per_sec/1_000_000:.2f}M"
|
||||
elif ops_per_sec >= 1_000:
|
||||
return f"{ops_per_sec/1_000:.2f}K"
|
||||
else:
|
||||
return f"{ops_per_sec:.2f}"
|
||||
|
||||
|
||||
def format_time(seconds):
|
||||
if seconds < 0.001:
|
||||
return f"{seconds*1000:.3f}ms"
|
||||
elif seconds < 1:
|
||||
return f"{seconds*1000:.1f}ms"
|
||||
else:
|
||||
return f"{seconds:.3f}s"
|
||||
|
||||
|
||||
def main():
|
||||
root = Path(__file__).parent
|
||||
|
||||
with open(root.parent / "benchmark_results.json") as f:
|
||||
bara = json.load(f)
|
||||
with open(root.parent / "pg_benchmark_results.json") as f:
|
||||
pg = json.load(f)
|
||||
|
||||
bara_map = {r["name"]: r for r in bara["results"]}
|
||||
pg_map = {k: v for k, v in pg.items()}
|
||||
|
||||
report = []
|
||||
report.append("# BaraDB vs PostgreSQL — Real Benchmark Results")
|
||||
report.append("")
|
||||
report.append("Generated from actual execution on:")
|
||||
report.append(f"- **CPU:** AMD Ryzen 9 5900X")
|
||||
report.append(f"- **PostgreSQL:** 15.18 (local)")
|
||||
report.append(f"- **BaraDB:** git `{bara['gitSha']}`")
|
||||
report.append("")
|
||||
report.append("## Methodology")
|
||||
report.append("")
|
||||
report.append("- PostgreSQL: single-row INSERT/SELECT via psycopg2 (client-server overhead included)")
|
||||
report.append("- BaraDB: in-process Nim code (no network overhead)")
|
||||
report.append("- Same dataset sizes for both systems")
|
||||
report.append("")
|
||||
report.append("## Results")
|
||||
report.append("")
|
||||
report.append("| Test | PostgreSQL | BaraDB | Speedup |")
|
||||
report.append("|------|-----------|--------|---------|")
|
||||
|
||||
rows = [
|
||||
("KV Write (100K)", pg_map.get("KV Write"), bara_map.get("LSM-Write")),
|
||||
("KV Read (100K)", pg_map.get("KV Read"), bara_map.get("LSM-Read")),
|
||||
("BTree Insert (100K)", pg_map.get("BTree Insert"), bara_map.get("BTree-Insert")),
|
||||
("BTree Get (100K)", pg_map.get("BTree Get"), bara_map.get("BTree-Get")),
|
||||
("BTree Scan (1K ranges)", pg_map.get("BTree Scan"), bara_map.get("BTree-Scan")),
|
||||
("FTS Index (10K docs)", pg_map.get("FTS Index"), bara_map.get("FTS-Index")),
|
||||
("FTS Search (1K queries)", pg_map.get("FTS Search"), bara_map.get("FTS-Search")),
|
||||
]
|
||||
|
||||
total_pg_time = 0
|
||||
total_bara_time = 0
|
||||
|
||||
for name, p, b in rows:
|
||||
if p is None or b is None:
|
||||
continue
|
||||
pg_ops = p["opsPerSec"]
|
||||
ba_ops = b["opsPerSec"]
|
||||
ratio = ba_ops / pg_ops
|
||||
winner = "BaraDB" if ratio > 1 else "PostgreSQL"
|
||||
total_pg_time += p["seconds"]
|
||||
total_bara_time += b["seconds"]
|
||||
|
||||
report.append(
|
||||
f"| {name} | {format_ops(pg_ops)}/s ({format_time(p['seconds'])}) | "
|
||||
f"{format_ops(ba_ops)}/s ({format_time(b['seconds'])}) | "
|
||||
f"{ratio:.1f}x ({winner}) |"
|
||||
)
|
||||
|
||||
report.append("")
|
||||
report.append("## Summary")
|
||||
report.append("")
|
||||
report.append(f"- **Total PostgreSQL time:** {total_pg_time:.3f}s")
|
||||
report.append(f"- **Total BaraDB time:** {total_bara_time:.3f}s")
|
||||
overall = total_pg_time / total_bara_time
|
||||
report.append(f"- **Overall speedup:** BaraDB is **{overall:.1f}x faster**")
|
||||
report.append("")
|
||||
report.append("## Notes")
|
||||
report.append("")
|
||||
report.append("- PostgreSQL includes network round-trip and SQL parsing overhead per operation.")
|
||||
report.append("- BaraDB runs in-process with zero serialization/network cost.")
|
||||
report.append("- For embedded/single-node use cases, BaraDB shows significant advantage.")
|
||||
report.append("- PostgreSQL FTS Search with GIN index outperforms BaraDB on query throughput.")
|
||||
report.append("- PostgreSQL excels at durability, replication, and complex ACID transactions.")
|
||||
report.append("")
|
||||
|
||||
output = "\n".join(report)
|
||||
print(output)
|
||||
|
||||
with open(root / "REAL_COMPARISON.md", "w") as f:
|
||||
f.write(output)
|
||||
print(f"\nReport saved to {root / 'REAL_COMPARISON.md'}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,260 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Real PostgreSQL benchmarks to compare against BaraDB."""
|
||||
import time
|
||||
import psycopg2
|
||||
import json
|
||||
import os
|
||||
|
||||
DB_CONFIG = {
|
||||
"host": "localhost",
|
||||
"database": "postgres",
|
||||
"user": "postgres",
|
||||
"password": "pas+123",
|
||||
}
|
||||
|
||||
|
||||
def pg_conn():
|
||||
return psycopg2.connect(**DB_CONFIG)
|
||||
|
||||
|
||||
def drop_tables(cur):
|
||||
cur.execute("DROP TABLE IF EXISTS bench_kv, bench_btree, bench_fts CASCADE;")
|
||||
|
||||
|
||||
def bench_kv_write(n=100_000):
|
||||
"""Compare with LSM-Tree write."""
|
||||
conn = pg_conn()
|
||||
cur = conn.cursor()
|
||||
drop_tables(cur)
|
||||
cur.execute("CREATE TABLE bench_kv (k TEXT PRIMARY KEY, v TEXT);")
|
||||
conn.commit()
|
||||
|
||||
start = time.perf_counter()
|
||||
for i in range(n):
|
||||
cur.execute(
|
||||
"INSERT INTO bench_kv (k, v) VALUES (%s, %s);",
|
||||
(f"key_{i}", f"value_{i}"),
|
||||
)
|
||||
conn.commit()
|
||||
elapsed = time.perf_counter() - start
|
||||
|
||||
conn.close()
|
||||
return {"name": "KV Write", "ops": n, "seconds": elapsed, "opsPerSec": n / elapsed}
|
||||
|
||||
|
||||
def bench_kv_read(n=100_000):
|
||||
"""Compare with LSM-Tree read."""
|
||||
conn = pg_conn()
|
||||
cur = conn.cursor()
|
||||
start = time.perf_counter()
|
||||
found = 0
|
||||
for i in range(n):
|
||||
cur.execute("SELECT v FROM bench_kv WHERE k = %s;", (f"key_{i}",))
|
||||
if cur.fetchone():
|
||||
found += 1
|
||||
elapsed = time.perf_counter() - start
|
||||
conn.close()
|
||||
return {"name": "KV Read", "ops": n, "seconds": elapsed, "opsPerSec": n / elapsed, "found": found}
|
||||
|
||||
|
||||
def bench_btree_insert(n=100_000):
|
||||
"""Compare with BTree insert."""
|
||||
conn = pg_conn()
|
||||
cur = conn.cursor()
|
||||
drop_tables(cur)
|
||||
cur.execute("CREATE TABLE bench_btree (id INTEGER PRIMARY KEY, v TEXT);")
|
||||
conn.commit()
|
||||
|
||||
start = time.perf_counter()
|
||||
for i in range(n):
|
||||
cur.execute(
|
||||
"INSERT INTO bench_btree (id, v) VALUES (%s, %s);",
|
||||
(i, f"value_{i}"),
|
||||
)
|
||||
conn.commit()
|
||||
elapsed = time.perf_counter() - start
|
||||
conn.close()
|
||||
return {"name": "BTree Insert", "ops": n, "seconds": elapsed, "opsPerSec": n / elapsed}
|
||||
|
||||
|
||||
def bench_btree_get(n=100_000):
|
||||
"""Compare with BTree point lookup."""
|
||||
conn = pg_conn()
|
||||
cur = conn.cursor()
|
||||
start = time.perf_counter()
|
||||
found = 0
|
||||
for i in range(n):
|
||||
cur.execute("SELECT v FROM bench_btree WHERE id = %s;", (i,))
|
||||
if cur.fetchone():
|
||||
found += 1
|
||||
elapsed = time.perf_counter() - start
|
||||
conn.close()
|
||||
return {"name": "BTree Get", "ops": n, "seconds": elapsed, "opsPerSec": n / elapsed, "found": found}
|
||||
|
||||
|
||||
def bench_btree_scan(n=1000):
|
||||
"""Compare with BTree range scan."""
|
||||
conn = pg_conn()
|
||||
cur = conn.cursor()
|
||||
start = time.perf_counter()
|
||||
total = 0
|
||||
for _ in range(n):
|
||||
cur.execute(
|
||||
"SELECT * FROM bench_btree WHERE id BETWEEN %s AND %s;",
|
||||
(1000, 2000),
|
||||
)
|
||||
total += len(cur.fetchall())
|
||||
elapsed = time.perf_counter() - start
|
||||
conn.close()
|
||||
return {"name": "BTree Scan", "ops": n, "seconds": elapsed, "opsPerSec": n / elapsed, "results": total}
|
||||
|
||||
|
||||
def bench_fts_index(n=10_000):
|
||||
"""Compare with FTS index."""
|
||||
conn = pg_conn()
|
||||
cur = conn.cursor()
|
||||
drop_tables(cur)
|
||||
cur.execute("CREATE TABLE bench_fts (id SERIAL PRIMARY KEY, body TEXT);")
|
||||
conn.commit()
|
||||
|
||||
docs = [
|
||||
"Nim is a statically typed compiled systems programming language",
|
||||
"It combines the speed of C with an expressive syntax like Python",
|
||||
"Memory management is deterministic with reference counting",
|
||||
"The compiler produces optimized native code for all platforms",
|
||||
"Metaprogramming and generics enable powerful abstractions",
|
||||
]
|
||||
|
||||
start = time.perf_counter()
|
||||
for i in range(n):
|
||||
cur.execute(
|
||||
"INSERT INTO bench_fts (body) VALUES (%s);",
|
||||
(docs[i % len(docs)],),
|
||||
)
|
||||
conn.commit()
|
||||
elapsed = time.perf_counter() - start
|
||||
conn.close()
|
||||
return {"name": "FTS Index", "ops": n, "seconds": elapsed, "opsPerSec": n / elapsed}
|
||||
|
||||
|
||||
def bench_fts_search(n=1000):
|
||||
"""Compare with FTS search."""
|
||||
conn = pg_conn()
|
||||
cur = conn.cursor()
|
||||
# Create GIN index for tsvector search
|
||||
cur.execute("CREATE INDEX idx_fts ON bench_fts USING GIN (to_tsvector('english', body));")
|
||||
conn.commit()
|
||||
|
||||
start = time.perf_counter()
|
||||
for _ in range(n):
|
||||
cur.execute(
|
||||
"SELECT * FROM bench_fts WHERE to_tsvector('english', body) @@ plainto_tsquery('english', %s);",
|
||||
("Nim programming language",),
|
||||
)
|
||||
cur.fetchall()
|
||||
elapsed = time.perf_counter() - start
|
||||
conn.close()
|
||||
return {"name": "FTS Search", "ops": n, "seconds": elapsed, "opsPerSec": n / elapsed}
|
||||
|
||||
|
||||
def load_baradb_results():
|
||||
with open("benchmark_results.json") as f:
|
||||
return json.load(f)
|
||||
|
||||
|
||||
def format_ops(ops_per_sec):
|
||||
if ops_per_sec >= 1_000_000:
|
||||
return f"{ops_per_sec/1_000_000:.2f}M"
|
||||
elif ops_per_sec >= 1_000:
|
||||
return f"{ops_per_sec/1_000:.2f}K"
|
||||
else:
|
||||
return f"{ops_per_sec:.2f}"
|
||||
|
||||
|
||||
def print_comparison(pg_results, bara_data):
|
||||
bara = {r["name"]: r for r in bara_data["results"]}
|
||||
print("\n╔══════════════════════════════════════════════════════════════════════╗")
|
||||
print("║ BaraDB vs PostgreSQL — Real Benchmark Results ║")
|
||||
print("╚══════════════════════════════════════════════════════════════════════╝\n")
|
||||
|
||||
rows = [
|
||||
("KV Write (100K)", pg_results.get("KV Write"), bara.get("LSM-Write")),
|
||||
("KV Read (100K)", pg_results.get("KV Read"), bara.get("LSM-Read")),
|
||||
("BTree Insert (100K)", pg_results.get("BTree Insert"), bara.get("BTree-Insert")),
|
||||
("BTree Get (100K)", pg_results.get("BTree Get"), bara.get("BTree-Get")),
|
||||
("BTree Scan (1K ranges)", pg_results.get("BTree Scan"), bara.get("BTree-Scan")),
|
||||
("FTS Index (10K docs)", pg_results.get("FTS Index"), bara.get("FTS-Index")),
|
||||
("FTS Search (1K queries)", pg_results.get("FTS Search"), bara.get("FTS-Search")),
|
||||
]
|
||||
|
||||
print(f"{'Test':<26} {'PostgreSQL':>18} {'BaraDB':>18} {'Winner':>10}")
|
||||
print("─" * 76)
|
||||
|
||||
for name, pg, ba in rows:
|
||||
if pg is None or ba is None:
|
||||
continue
|
||||
pg_ops = pg["opsPerSec"]
|
||||
ba_ops = ba["opsPerSec"]
|
||||
winner = "BaraDB" if ba_ops > pg_ops else "PostgreSQL"
|
||||
ratio = max(ba_ops, pg_ops) / min(ba_ops, pg_ops)
|
||||
print(
|
||||
f"{name:<26} {format_ops(pg_ops)+'/s':>18} {format_ops(ba_ops)+'/s':>18} {winner+' ('+f'{ratio:.1f}x'+')':>10}"
|
||||
)
|
||||
|
||||
print("\n" + "─" * 76)
|
||||
# Summary
|
||||
pg_total = sum(r["seconds"] for _, r, _ in rows if r is not None)
|
||||
ba_total = sum(b["seconds"] for _, _, b in rows if b is not None)
|
||||
print(f"\nTotal time PostgreSQL: {pg_total:.3f}s")
|
||||
print(f"Total time BaraDB: {ba_total:.3f}s")
|
||||
if ba_total < pg_total:
|
||||
print(f"BaraDB is {pg_total/ba_total:.1f}x faster overall")
|
||||
else:
|
||||
print(f"PostgreSQL is {ba_total/pg_total:.1f}x faster overall")
|
||||
|
||||
|
||||
def main():
|
||||
print("Running PostgreSQL benchmarks...")
|
||||
print("=" * 50)
|
||||
|
||||
pg_results = {}
|
||||
|
||||
print("[1/7] KV Write 100K records...")
|
||||
pg_results["KV Write"] = bench_kv_write()
|
||||
print(f" -> {format_ops(pg_results['KV Write']['opsPerSec'])}/s ({pg_results['KV Write']['seconds']:.3f}s)")
|
||||
|
||||
print("[2/7] KV Read 100K records...")
|
||||
pg_results["KV Read"] = bench_kv_read()
|
||||
print(f" -> {format_ops(pg_results['KV Read']['opsPerSec'])}/s ({pg_results['KV Read']['seconds']:.3f}s)")
|
||||
|
||||
print("[3/7] BTree Insert 100K keys...")
|
||||
pg_results["BTree Insert"] = bench_btree_insert()
|
||||
print(f" -> {format_ops(pg_results['BTree Insert']['opsPerSec'])}/s ({pg_results['BTree Insert']['seconds']:.3f}s)")
|
||||
|
||||
print("[4/7] BTree Get 100K keys...")
|
||||
pg_results["BTree Get"] = bench_btree_get()
|
||||
print(f" -> {format_ops(pg_results['BTree Get']['opsPerSec'])}/s ({pg_results['BTree Get']['seconds']:.3f}s)")
|
||||
|
||||
print("[5/7] BTree Scan 1K ranges...")
|
||||
pg_results["BTree Scan"] = bench_btree_scan()
|
||||
print(f" -> {format_ops(pg_results['BTree Scan']['opsPerSec'])}/s ({pg_results['BTree Scan']['seconds']:.3f}s)")
|
||||
|
||||
print("[6/7] FTS Index 10K docs...")
|
||||
pg_results["FTS Index"] = bench_fts_index()
|
||||
print(f" -> {format_ops(pg_results['FTS Index']['opsPerSec'])}/s ({pg_results['FTS Index']['seconds']:.3f}s)")
|
||||
|
||||
print("[7/7] FTS Search 1K queries...")
|
||||
pg_results["FTS Search"] = bench_fts_search()
|
||||
print(f" -> {format_ops(pg_results['FTS Search']['opsPerSec'])}/s ({pg_results['FTS Search']['seconds']:.3f}s)")
|
||||
|
||||
bara_data = load_baradb_results()
|
||||
print_comparison(pg_results, bara_data)
|
||||
|
||||
# Save raw results
|
||||
with open("pg_benchmark_results.json", "w") as f:
|
||||
json.dump(pg_results, f, indent=2)
|
||||
print("\nPostgreSQL results saved to pg_benchmark_results.json")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,347 @@
|
||||
## BaraDB Search Benchmarks — HNSW recall, FTS performance, scalability
|
||||
import std/monotimes
|
||||
import std/times
|
||||
import std/random
|
||||
import std/strutils
|
||||
import std/tables
|
||||
import std/sets
|
||||
import std/math
|
||||
import std/algorithm
|
||||
import ../src/barabadb/vector/engine as vengine
|
||||
import ../src/barabadb/fts/engine as fts
|
||||
import ../src/barabadb/search/hnsw_opt
|
||||
|
||||
type
|
||||
LatencyStats = tuple[avg, p50, p95, p99: float64]
|
||||
|
||||
const sampleDocs = [
|
||||
"The quick brown fox jumps over the lazy dog near the river bank",
|
||||
"Database indexing strategies include B-trees hash indexes and inverted indexes",
|
||||
"Vector similarity search uses approximate nearest neighbor algorithms like HNSW",
|
||||
"Full text search engines use inverted indexes with BM25 ranking",
|
||||
"Natural language processing requires tokenization stemming and embedding",
|
||||
"Machine learning models transform raw data into meaningful insights",
|
||||
"Distributed systems handle network partitions and consistency tradeoffs",
|
||||
"Graph databases traverse relationships between connected entities efficiently",
|
||||
"Time series databases optimize for sequential write patterns",
|
||||
"Columnar storage accelerates analytical queries across large datasets",
|
||||
"Query optimization involves cost-based planning and execution strategies",
|
||||
"Memory management uses reference counting for deterministic cleanup",
|
||||
"Concurrent data structures enable lock-free parallel processing",
|
||||
"Cryptographic hashing provides integrity verification for stored data",
|
||||
"Replication strategies ensure high availability across multiple nodes",
|
||||
"Sharding distributes data based on consistent hashing algorithms",
|
||||
"ACID transactions guarantee atomicity consistency isolation durability",
|
||||
"Event sourcing captures state changes as immutable sequence of events",
|
||||
"Microservices architecture decomposes applications into independent services",
|
||||
"API design principles emphasize simplicity consistency and discoverability",
|
||||
]
|
||||
|
||||
proc elapsed(start: MonoTime): float64 =
|
||||
let ns = float64((getMonoTime() - start).inNanoseconds)
|
||||
return ns / 1_000_000_000.0
|
||||
|
||||
proc percentile(values: seq[float64], p: int): float64 =
|
||||
if values.len == 0: return 0.0
|
||||
var sorted = values
|
||||
sorted.sort()
|
||||
let idx = (p * sorted.len) div 100
|
||||
if idx >= sorted.len: return sorted[^1]
|
||||
return sorted[idx]
|
||||
|
||||
proc latencyStats(latencies: seq[float64]): LatencyStats =
|
||||
if latencies.len == 0:
|
||||
return (0.0, 0.0, 0.0, 0.0)
|
||||
var sum = 0.0
|
||||
for v in latencies: sum += v
|
||||
result.avg = sum / float64(latencies.len)
|
||||
result.p50 = percentile(latencies, 50)
|
||||
result.p95 = percentile(latencies, 95)
|
||||
result.p99 = percentile(latencies, 99)
|
||||
|
||||
proc formatMs(ms: float64): string =
|
||||
if ms < 0.01:
|
||||
return ms.formatFloat(ffDecimal, 4) & "ms"
|
||||
return ms.formatFloat(ffDecimal, 2) & "ms"
|
||||
|
||||
proc formatOps(ops: int, secs: float64): string =
|
||||
let rate = float64(ops) / secs
|
||||
if rate > 1_000_000:
|
||||
return $(rate / 1_000_000).formatFloat(ffDecimal, 1) & "M ops/s"
|
||||
elif rate > 1_000:
|
||||
return $(rate / 1_000).formatFloat(ffDecimal, 1) & "K ops/s"
|
||||
else:
|
||||
return $rate.formatFloat(ffDecimal, 1) & " ops/s"
|
||||
|
||||
proc computeGroundTruth(query: Vector, vectors: seq[(uint64, Vector)], k: int): seq[(uint64, float64)] =
|
||||
var dists: seq[(float64, uint64)] = @[]
|
||||
for (id, vec) in vectors:
|
||||
let dist = cosineDistance(query, vec)
|
||||
dists.add((dist, id))
|
||||
dists.sort(proc(a, b: (float64, uint64)): int = cmp(a[0], b[0]))
|
||||
let n = min(k, dists.len)
|
||||
result = newSeq[(uint64, float64)](n)
|
||||
for i in 0..<n:
|
||||
result[i] = (dists[i][1], dists[i][0])
|
||||
|
||||
proc computeRecall(groundTruth: seq[(uint64, float64)], hnswResults: seq[(uint64, float64)], k: int): float64 =
|
||||
if groundTruth.len == 0: return 0.0
|
||||
var gtIds = initHashSet[uint64]()
|
||||
for (id, _) in groundTruth:
|
||||
gtIds.incl(id)
|
||||
var hits = 0
|
||||
for (id, _) in hnswResults:
|
||||
if id in gtIds: inc hits
|
||||
return float64(hits) / float64(groundTruth.len)
|
||||
|
||||
proc benchHnswRecall(n: int, dim: int, kValues: seq[int]) =
|
||||
echo ""
|
||||
echo "=== HNSW Recall@k ==="
|
||||
echo " Dataset: ", $n, " vectors, dim=", dim
|
||||
|
||||
randomize(42)
|
||||
var idx = newHNSWIndex(dim)
|
||||
var vectors: seq[(uint64, Vector)] = @[]
|
||||
|
||||
for i in 0..<n:
|
||||
var vec = newSeq[float32](dim)
|
||||
for d in 0..<dim:
|
||||
vec[d] = rand(1.0)
|
||||
idx.insert(uint64(i), vec)
|
||||
vectors.add((uint64(i), vec))
|
||||
|
||||
let queryCount = 100
|
||||
var queries: seq[Vector] = @[]
|
||||
for i in 0..<queryCount:
|
||||
var vec = newSeq[float32](dim)
|
||||
for d in 0..<dim:
|
||||
vec[d] = rand(1.0)
|
||||
queries.add(vec)
|
||||
|
||||
for k in kValues:
|
||||
var totalRecall = 0.0
|
||||
var latencies: seq[float64] = @[]
|
||||
|
||||
for query in queries:
|
||||
let start = getMonoTime()
|
||||
let hnswResults = searchOpt(idx, query, k)
|
||||
let elap = (getMonoTime() - start).inNanoseconds.float64 / 1_000_000.0
|
||||
latencies.add(elap)
|
||||
|
||||
let gt = computeGroundTruth(query, vectors, k)
|
||||
let recall = computeRecall(gt, hnswResults, k)
|
||||
totalRecall += recall
|
||||
|
||||
let avgRecall = totalRecall / float64(queryCount)
|
||||
let stats = latencyStats(latencies)
|
||||
echo " recall@", k, ": ", (avgRecall * 100).formatFloat(ffDecimal, 1), "% (avg ", formatMs(stats.avg), ")"
|
||||
|
||||
proc benchScalability =
|
||||
echo ""
|
||||
echo "=== HNSW Scalability ==="
|
||||
let sizes = [1000, 5000, 10000, 50000, 100000]
|
||||
let dim = 128
|
||||
|
||||
for n in sizes:
|
||||
randomize(42)
|
||||
let efC = if n <= 10000: 200 elif n <= 50000: 200 else: 200
|
||||
var idx = newHNSWIndex(dim, m = 16, efConstruction = efC)
|
||||
var vectors: seq[(uint64, Vector)] = @[]
|
||||
|
||||
let insertStart = getMonoTime()
|
||||
for i in 0..<n:
|
||||
var vec = newSeq[float32](dim)
|
||||
for d in 0..<dim:
|
||||
vec[d] = rand(1.0)
|
||||
insertOpt(idx, uint64(i), vec)
|
||||
vectors.add((uint64(i), vec))
|
||||
let insertTime = elapsed(insertStart)
|
||||
|
||||
let queryCount = if n <= 10000: 50 elif n <= 50000: 20 else: 10
|
||||
var queries: seq[Vector] = @[]
|
||||
for i in 0..<queryCount:
|
||||
var vec = newSeq[float32](dim)
|
||||
for d in 0..<dim:
|
||||
vec[d] = rand(1.0)
|
||||
queries.add(vec)
|
||||
|
||||
var latencies: seq[float64] = @[]
|
||||
var totalRecall = 0.0
|
||||
|
||||
for query in queries:
|
||||
let start = getMonoTime()
|
||||
let hnswResults = searchOpt(idx, query, 10)
|
||||
let elap = (getMonoTime() - start).inNanoseconds.float64 / 1_000_000.0
|
||||
latencies.add(elap)
|
||||
|
||||
let gt = computeGroundTruth(query, vectors, 10)
|
||||
let recall = computeRecall(gt, hnswResults, 10)
|
||||
totalRecall += recall
|
||||
|
||||
let avgRecall = totalRecall / float64(queryCount)
|
||||
let stats = latencyStats(latencies)
|
||||
|
||||
echo " N=", $n, ": insert=", insertTime.formatFloat(ffDecimal, 2), "s search=", formatMs(stats.avg), " recall@10=", (avgRecall * 100).formatFloat(ffDecimal, 1), "%"
|
||||
|
||||
proc phraseSearch(idx: fts.InvertedIndex, phrase: string): seq[fts.SearchResult] =
|
||||
let tokens = fts.tokenize(phrase)
|
||||
if tokens.len == 0: return @[]
|
||||
|
||||
var docCounts = initTable[uint64, int]()
|
||||
for token in tokens:
|
||||
if token in idx.postings:
|
||||
for entry in idx.postings[token]:
|
||||
if entry.docId notin docCounts:
|
||||
docCounts[entry.docId] = 0
|
||||
inc docCounts[entry.docId]
|
||||
|
||||
var candidates: seq[uint64] = @[]
|
||||
for docId, count in docCounts:
|
||||
if count == tokens.len:
|
||||
candidates.add(docId)
|
||||
|
||||
result = @[]
|
||||
for docId in candidates:
|
||||
var positions: seq[seq[int]] = @[]
|
||||
for token in tokens:
|
||||
if token in idx.postings:
|
||||
for entry in idx.postings[token]:
|
||||
if entry.docId == docId:
|
||||
positions.add(entry.positions)
|
||||
break
|
||||
|
||||
if positions.len == tokens.len:
|
||||
var found = false
|
||||
if positions[0].len > 0:
|
||||
for startPos in positions[0]:
|
||||
var match = true
|
||||
for i in 1..<positions.len:
|
||||
if (startPos + i) notin positions[i]:
|
||||
match = false
|
||||
break
|
||||
if match:
|
||||
found = true
|
||||
break
|
||||
if found:
|
||||
result.add(fts.SearchResult(docId: docId, score: 1.0, highlights: @[]))
|
||||
|
||||
proc booleanAndSearch(idx: fts.InvertedIndex, terms: seq[string]): seq[fts.SearchResult] =
|
||||
var docCounts = initTable[uint64, int]()
|
||||
for term in terms:
|
||||
if term in idx.postings:
|
||||
for entry in idx.postings[term]:
|
||||
if entry.docId notin docCounts:
|
||||
docCounts[entry.docId] = 0
|
||||
inc docCounts[entry.docId]
|
||||
|
||||
result = @[]
|
||||
for docId, count in docCounts:
|
||||
if count == terms.len:
|
||||
result.add(fts.SearchResult(docId: docId, score: float64(count), highlights: @[]))
|
||||
|
||||
proc benchFts(n: int) =
|
||||
echo ""
|
||||
echo "=== FTS Performance ==="
|
||||
|
||||
var idx = fts.newInvertedIndex()
|
||||
|
||||
let indexStart = getMonoTime()
|
||||
for i in 0..<n:
|
||||
let docText = sampleDocs[i mod sampleDocs.len]
|
||||
idx.addDocument(uint64(i), docText)
|
||||
let indexTime = elapsed(indexStart)
|
||||
|
||||
echo " Index ", $n, " docs: ", indexTime.formatFloat(ffDecimal, 2), "s"
|
||||
|
||||
let queryCount = 1000
|
||||
var bm25Queries = @[
|
||||
"database indexing strategies",
|
||||
"vector similarity search",
|
||||
"full text search engines",
|
||||
"machine learning models",
|
||||
"distributed systems",
|
||||
]
|
||||
|
||||
var latencies: seq[float64] = @[]
|
||||
let start = getMonoTime()
|
||||
for i in 0..<queryCount:
|
||||
let qStart = getMonoTime()
|
||||
discard idx.search(bm25Queries[i mod bm25Queries.len])
|
||||
let elap = (getMonoTime() - qStart).inNanoseconds.float64 / 1_000_000.0
|
||||
latencies.add(elap)
|
||||
let bm25Time = elapsed(start)
|
||||
let stats = latencyStats(latencies)
|
||||
echo " BM25 search: ", formatOps(queryCount, bm25Time), " (p50=", formatMs(stats.p50), " p95=", formatMs(stats.p95), " p99=", formatMs(stats.p99), ")"
|
||||
|
||||
var phraseQueries = @[
|
||||
"quick brown fox",
|
||||
"database indexing strategies",
|
||||
"vector similarity search",
|
||||
"full text search",
|
||||
"machine learning",
|
||||
]
|
||||
|
||||
latencies.setLen(0)
|
||||
let phraseStart = getMonoTime()
|
||||
for i in 0..<queryCount:
|
||||
let qStart = getMonoTime()
|
||||
discard phraseSearch(idx, phraseQueries[i mod phraseQueries.len])
|
||||
let elap = (getMonoTime() - qStart).inNanoseconds.float64 / 1_000_000.0
|
||||
latencies.add(elap)
|
||||
let phraseTime = elapsed(phraseStart)
|
||||
let phraseStats = latencyStats(latencies)
|
||||
echo " Phrase search: ", formatOps(queryCount, phraseTime), " (p50=", formatMs(phraseStats.p50), " p95=", formatMs(phraseStats.p95), " p99=", formatMs(phraseStats.p99), ")"
|
||||
|
||||
var boolQueries = @[
|
||||
@["database", "indexing"],
|
||||
@["vector", "search"],
|
||||
@["text", "search"],
|
||||
@["machine", "learning"],
|
||||
@["distributed", "systems"],
|
||||
]
|
||||
|
||||
latencies.setLen(0)
|
||||
let boolStart = getMonoTime()
|
||||
for i in 0..<queryCount:
|
||||
let qStart = getMonoTime()
|
||||
discard booleanAndSearch(idx, boolQueries[i mod boolQueries.len])
|
||||
let elap = (getMonoTime() - qStart).inNanoseconds.float64 / 1_000_000.0
|
||||
latencies.add(elap)
|
||||
let boolTime = elapsed(boolStart)
|
||||
let boolStats = latencyStats(latencies)
|
||||
echo " Boolean (AND): ", formatOps(queryCount, boolTime), " (p50=", formatMs(boolStats.p50), " p95=", formatMs(boolStats.p95), " p99=", formatMs(boolStats.p99), ")"
|
||||
|
||||
var fuzzyQueries = @[
|
||||
"programing",
|
||||
"databse",
|
||||
"algorihm",
|
||||
"indxing",
|
||||
"simlarity",
|
||||
]
|
||||
|
||||
let fuzzyCount = 200
|
||||
latencies.setLen(0)
|
||||
let fuzzyStart = getMonoTime()
|
||||
for i in 0..<fuzzyCount:
|
||||
let qStart = getMonoTime()
|
||||
discard idx.fuzzySearch(fuzzyQueries[i mod fuzzyQueries.len], maxDistance = 2)
|
||||
let elap = (getMonoTime() - qStart).inNanoseconds.float64 / 1_000_000.0
|
||||
latencies.add(elap)
|
||||
let fuzzyTime = elapsed(fuzzyStart)
|
||||
let fuzzyStats = latencyStats(latencies)
|
||||
echo " Fuzzy search: ", formatOps(fuzzyCount, fuzzyTime), " (p50=", formatMs(fuzzyStats.p50), " p95=", formatMs(fuzzyStats.p95), " p99=", formatMs(fuzzyStats.p99), ")"
|
||||
|
||||
proc main =
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════╗"
|
||||
echo "║ BaraDB Search Benchmarks ║"
|
||||
echo "╚══════════════════════════════════════════════════════╝"
|
||||
|
||||
benchHnswRecall(10000, 128, @[1, 5, 10, 20])
|
||||
benchScalability()
|
||||
benchFts(10000)
|
||||
|
||||
echo ""
|
||||
|
||||
when isMainModule:
|
||||
main()
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
alwaysApply: true
|
||||
---
|
||||
現在のブランチ名と一致するファイル名のファイルが、リポジトリのルートから見て `.cursor/rules/branch/` 配下にあった場合は、それを読み込んでください。
|
||||
各ブランチルールは、ブランチで行うべき開発内容、タスクを小さい粒度で分けた進捗、参考資料の一覧を含みます。
|
||||
ブランチルールファイルの拡張子は `.mdc` です。
|
||||
エージェントは開発の進度に従って進捗を適時記録してください。
|
||||
実装する中で `調査結果・設計まとめ` に間違いがあると判明した場合は、その都度、より正しいと考えられる設計方針を書き込んでください。
|
||||
|
||||
以下はブランチルールの雛形です
|
||||
|
||||
```
|
||||
---
|
||||
description: {ブランチ名}ブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
{ブランチルール名}
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
-
|
||||
|
||||
## 進捗
|
||||
- [ ]
|
||||
|
||||
## 参考資料
|
||||
-
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
```
|
||||
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
---
|
||||
description: 318-bug-incorrect-sqlite-check-constraint-for-columnchar-columnstring-and-columnuuidブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
SQLite CHECK Constraint 引用誤り修正 ブランチルール
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
- SQLite の schema builder において、`Column.char`, `Column.string`, `Column.uuid` が生成する `CHECK` 制約の列参照が文字列リテラル扱いになっている不具合を修正する。
|
||||
- `CREATE TABLE` と `ALTER TABLE ... ADD COLUMN` の両方で、`length('column_name')` ではなく列値を参照する `length(column_name)` 系の SQL を生成するように整える。
|
||||
- SQLite driver の修正を公開 API へ漏らさず、driver 内部の SQL 生成責務に閉じ込める。
|
||||
- 長さ制約の既定値あり・既定値なしの両ケースで、`char` `string` `uuid` の意味論が崩れないことを確認できるテストを整備する。
|
||||
- 必要に応じて README / `documents/rdb/schema_builder.md` の SQLite 例を同期し、誤った `CHECK (length('email') <= 255)` 表記を残さない。
|
||||
|
||||
## 進捗
|
||||
- [x] `.cursor/rules/project.mdc` と `.cursor/rules/branch.mdc` を確認した
|
||||
- [x] 現在のブランチ名に対応するブランチルールファイルが未作成であることを確認した
|
||||
- [x] SQLite の `CHECK` 生成箇所を調査し、`create_column_query.nim` と `add_column_query.nim` の両方に同種の問題があることを確認した
|
||||
- [x] 対象カラム型が `Column.char`, `Column.string`, `Column.uuid` の 3 系統であることを確認した
|
||||
- [x] ドキュメントに同じ誤表記が残っていることを確認した
|
||||
- [x] ブランチルールに改修方針・進捗粒度・参考資料を整理した
|
||||
- [x] SQLite schema builder の `CHECK` 制約生成を、列名を文字列リテラル化しない形式へ修正する
|
||||
- [x] `CREATE TABLE` 経路のテストを追加または更新し、生成 SQL が列値長を検査することを確認する
|
||||
- [x] `ADD COLUMN` 経路のテストを追加または更新し、生成 SQL が列値長を検査することを確認する
|
||||
- [x] `char` `string` `uuid` の既定長と明示長の両ケースで回帰確認する
|
||||
- [x] 必要な README / `documents/rdb/schema_builder.md` の記述を同期する
|
||||
- [ ] 実装途中で設計認識に誤りが見つかった場合は、本ファイルの `調査結果・設計まとめ` を更新する
|
||||
|
||||
## 参考資料
|
||||
- `src/allographer/schema_builder/queries/sqlite/sub/create_column_query.nim`
|
||||
- `src/allographer/schema_builder/queries/sqlite/sub/add_column_query.nim`
|
||||
- `tests/sqlite/test_create_schema.nim`
|
||||
- `tests/sqlite/test_schema.nim`
|
||||
- `documents/rdb/schema_builder.md`
|
||||
- `README.md`
|
||||
- SQLite Documentation: CHECK constraints
|
||||
- SQLite Documentation: core functions `length(...)`
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
|
||||
### 背景
|
||||
|
||||
SQLite 実装では、文字列長を制限するために `CHECK (length(...) <= N)` を列定義へ付与している。
|
||||
|
||||
しかし現状の SQL 生成は `length('{column.name}')` となっており、列値ではなく列名そのものを単一引用符付きの文字列リテラルとして評価している。
|
||||
|
||||
その結果、たとえば `name` 列では常に `length('name') == 4` と評価されるため、期待した列値バリデーションにならない。
|
||||
|
||||
### 現状の問題
|
||||
|
||||
1. SQLite の `CREATE TABLE` 用列生成で `CHECK (length('{column.name}') <= {maxLength})` を出力している
|
||||
2. SQLite の `ADD COLUMN` 用列生成でも同じ誤りを重複して持っている
|
||||
3. 影響範囲が `Column.char`, `Column.string`, `Column.uuid` にまたがっている
|
||||
4. ドキュメント例にも同じ誤表記があり、利用者が誤仕様と誤解する余地がある
|
||||
5. SQL 生成の不具合であり、公開 API ではなく SQLite driver 内部責務として直すべき問題である
|
||||
|
||||
### 設計目標
|
||||
|
||||
1. SQLite で生成される長さ `CHECK` 制約が常に列値を参照する
|
||||
2. `char`, `string`, `uuid` の API 意味論を変えずに不具合のみを修正する
|
||||
3. `create` と `add column` の両経路で SQL 生成規則を揃える
|
||||
4. 既存の RDB 向け共通 API を汚さず、SQLite 実装へ変更を閉じ込める
|
||||
5. テストと文書で回帰防止できる状態にする
|
||||
|
||||
### 非目標
|
||||
|
||||
1. SQLite 以外の driver の長さ制約仕様を同時に変更すること
|
||||
2. `Column.char`, `Column.string`, `Column.uuid` の既定長そのものを見直すこと
|
||||
3. schema builder 全体の quoting 戦略をこのブランチで全面再設計すること
|
||||
4. 公開 API の追加・削除・引数変更を行うこと
|
||||
|
||||
### 実装方針
|
||||
|
||||
#### 1. SQLite の長さ `CHECK` 制約は列値参照に統一する
|
||||
|
||||
変更対象:
|
||||
- `src/allographer/schema_builder/queries/sqlite/sub/create_column_query.nim`
|
||||
- `src/allographer/schema_builder/queries/sqlite/sub/add_column_query.nim`
|
||||
|
||||
方針:
|
||||
- `length('{column.name}')` を列値参照の式へ修正する
|
||||
- `char`, `string`, `uuid` の 3 系統で同じルールを適用する
|
||||
- `CREATE TABLE` と `ADD COLUMN` で生成式の差異を作らない
|
||||
|
||||
#### 2. 列名の扱いは SQLite 列参照として妥当な形を維持する
|
||||
|
||||
要点:
|
||||
- 単一引用符 `'...'` は文字列リテラルなので使用しない
|
||||
- 既存の SQLite SQL 生成スタイルに合わせ、列参照として解釈される形を採用する
|
||||
- 必要なら identifier quoting の既存ルールを確認し、単純な文字列置換ではなく SQLite 方言として自然な表現に寄せる
|
||||
- 共通 helper を `schema_utils` に置き、`CREATE TABLE` / `ADD COLUMN` の両経路で同じ生成規則を使う
|
||||
|
||||
#### 3. テストは SQL 文字列と実動作の両面を意識して追加する
|
||||
|
||||
候補:
|
||||
1. schema 生成テストで `CHECK` 句が列値参照になっていることを確認する
|
||||
2. `Column.string("name")` の既定長ケースを確認する
|
||||
3. `Column.char("name", 20)` の明示長ケースを確認する
|
||||
4. `Column.uuid("uuid")` の既定長ケースを確認する
|
||||
5. `add()` 経路でも同じ `CHECK` 句になることを確認する
|
||||
|
||||
### 受け入れ基準
|
||||
|
||||
1. SQLite の `char`, `string`, `uuid` が生成する `CHECK` 制約で列名が単一引用符付き文字列になっていない
|
||||
2. `CREATE TABLE` と `ADD COLUMN` の両方で同じ修正が反映されている
|
||||
3. 追加または更新したテストで不具合再発を防止できる
|
||||
4. 必要なドキュメント例が実装と一致している
|
||||
5. 公開 API 変更なしで SQLite driver 内に修正が閉じ込められている
|
||||
|
||||
### 参照仕様
|
||||
|
||||
- SQLite Documentation: CHECK constraints
|
||||
https://www.sqlite.org/lang_createtable.html#ckconst
|
||||
- SQLite Documentation: Built-In Scalar SQL Functions
|
||||
https://www.sqlite.org/lang_corefunc.html#length
|
||||
|
||||
### リスク
|
||||
|
||||
1. 列名参照の quoting 形式を誤ると、今度は予約語や特殊文字を含む列名で不整合が出る可能性がある
|
||||
2. `create` と `add column` の片方だけ修正すると、経路差による再発が起きる
|
||||
3. ドキュメント未更新のままだと、修正後も利用者が誤った SQL 例を参照して混乱する
|
||||
4. SQL 文字列比較系テストだけだと、実際の制約評価の誤りを見逃す可能性がある
|
||||
|
||||
### 段階導入案
|
||||
|
||||
1. 影響箇所と既存 SQLite テストを整理する
|
||||
2. `create` / `add column` の SQL 生成を修正する
|
||||
3. `char` / `string` / `uuid` の回帰テストを追加または更新する
|
||||
4. 必要な README / documents を同期する
|
||||
5. 実装差分が設計とずれたら本ファイルを更新する
|
||||
+156
@@ -0,0 +1,156 @@
|
||||
---
|
||||
description: 320-allographerpostgresql-非同期待機改善-設計書ブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
allographer(PostgreSQL) 非同期待機改善 ブランチルール
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
- allographer の PostgreSQL 実装に残っている `sleepAsync(10)` ベースの非同期待機を、libpq ソケット readiness ベースの待機へ置き換える。
|
||||
- `query*`, `queryPlain*`, `exec*`, `getColumns*` など、同一問題を持つ待機経路を共通化して修正する。
|
||||
- `dbOpen` 時に PostgreSQL 接続を non-blocking 化し、libpq 非同期 API の前提を明示的に保証する。
|
||||
- 接続プール空き待機を `sleepAsync(10)` ポーリングから通知ベースへ移行し、プール枯渇時の待機遅延を抑制する。
|
||||
- 公開 API 互換を維持したまま、httpbeast/httpx 利用時の DB 完了後の回収遅延を縮小する。
|
||||
|
||||
## 進捗
|
||||
- [x] `src/allographer/query_builder/libs/postgres/postgres_impl.nim` の待機ループを調査し、`sleepAsync(10)` 依存箇所を一覧化する
|
||||
- [x] `src/allographer/query_builder/libs/postgres/postgres_rdb.nim` を確認し、既存宣言で再利用できる libpq API と不足宣言を整理する(追加宣言不要。`pqsocket` / `pqflush` / `pqsetnonblocking` 等は既存)
|
||||
- [x] PostgreSQL 待機ヘルパ `waitPgReadable` / `waitPgWritable` / `cancelQuery` の責務と配置を決める(`postgres_impl.nim` 内の非公開プロシージャ)
|
||||
- [x] `PQsocket` / `PQconsumeInput` / `PQisBusy` / `PQgetResult` / `PQflush` に基づく共通クエリ待機ループを設計する(`pgFlushOutgoing` / `pgNextResult` / `pgEnsureIdle`)
|
||||
- [x] `query*`, `queryPlain*`, `exec*`, `getColumns*` の各経路を共通待機ロジックへ寄せる
|
||||
- [x] タイムアウト時の `cancelQuery` 実行とエラーメッセージ方針を統一する(タイムアウトは `cancelQuery` 後に `DbError`)
|
||||
- [x] `src/allographer/query_builder/models/postgres/postgres_open.nim` で `pqsetnonblocking(conn, 1)` と検証処理を追加する
|
||||
- [x] `src/allographer/query_builder/models/postgres/postgres_types.nim` に接続プール waiter キューを追加する(`waiters*: seq[Future[void]]`)
|
||||
- [x] `src/allographer/query_builder/models/postgres/postgres_exec.nim` の `getFreeConn` / `returnConn` を通知ベースへ置換する
|
||||
- [x] PostgreSQL の単体・結合・回帰テストを追加または更新する(`tests/postgres/test_pool_wait.nim` 追加、既存 `test*.nim` 回帰)
|
||||
- [x] `sleepAsync(10)` が PostgreSQL クエリ待機とプール空き待機から除去されたことを確認する
|
||||
- [ ] README / documents / ルール文書に仕様差分が必要か確認し、必要分を同期する(利用者向け公開 API 変更なしのため未着手。必要なら追記)
|
||||
- [x] MariaDB: `mariadb_rdb.nim` に `mysql_read_query_result`(`cdecl`)を追加
|
||||
- [x] MariaDB: `mariadb_impl.nim` は接続ブロッキング前提で `mysql_real_query` / `mysql_read_query_result` / `mysql_fetch_row` / `free_result` を同期利用(`mysql_read_query_result_*` / `fetch_row_*` の async ループは環境でタイムアウト・デッドロックのため不使用)
|
||||
- [x] MariaDB: `mariadb_open.nim` は `MYSQL_OPT_NONBLOCK` を付与しない(同上)
|
||||
- [x] MariaDB: `mariadb_types` / `mariadb_exec` のプール空き待ちは通知ベース(`tests/mariadb/test_pool_wait.nim`)
|
||||
|
||||
## 参考資料
|
||||
- allographer の PostgreSQL 実装: `src/allographer/query_builder/libs/postgres/postgres_impl.nim`
|
||||
- allographer の PostgreSQL 実行管理: `src/allographer/query_builder/models/postgres/postgres_exec.nim`
|
||||
- allographer の PostgreSQL 接続初期化: `src/allographer/query_builder/models/postgres/postgres_open.nim`
|
||||
- allographer の PostgreSQL 型定義: `src/allographer/query_builder/models/postgres/postgres_types.nim`
|
||||
- libpq 非同期 API: `PQsocket`, `PQconsumeInput`, `PQisBusy`, `PQgetResult`, `PQsetnonblocking`, `PQflush`, `PQgetCancel`, `PQcancel`, `PQfreeCancel`
|
||||
- Nim `asyncdispatch` のイベントループ仕様
|
||||
- httpbeast / httpx の POSIX selector ループ実装
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
|
||||
### 背景
|
||||
|
||||
`httpbeast` / `httpx` 利用時のみ、DB クエリ待機が `asynchttpserver` より大きく悪化する事象がある。
|
||||
|
||||
現状の allographer PostgreSQL 実装は、libpq 非同期 API を使いながらも、実際の待機を `await sleepAsync(10)` に依存している。
|
||||
|
||||
### 問題の本質
|
||||
|
||||
- 現状の PostgreSQL 待機は、ソケット readiness 待ちではなく 10ms 刻みのポーリングである
|
||||
- Nim の `asyncdispatch` は `poll` / `waitFor` / `runForever` が回らない限りタイマーも進まない
|
||||
- httpbeast / httpx の POSIX 経路は `selectInto(-1, ...)` による無期限ブロックを中心としており、`asyncdispatch.poll(0)` は限定的にしか回らない
|
||||
- そのため `sleepAsync(10)` は実時間 10ms で復帰せず、「次に HTTP 側ループがたまたま dispatcher を回すまで」遅延する
|
||||
- 結果として、DB は完了済みでも allographer 側の結果回収が遅れ、体感レイテンシが悪化する
|
||||
|
||||
### 設計目標
|
||||
|
||||
1. PostgreSQL クエリ待機から `sleepAsync` ポーリングを除去する
|
||||
2. libpq ソケットの可読・可書込イベントで待機する
|
||||
3. 接続プール空き待ちも通知ベースへ移行し、タイマー依存を減らす
|
||||
4. `dbOpen`, `table`, `select`, `find`, `update` などの公開 API 互換を維持する
|
||||
|
||||
### 非目標
|
||||
|
||||
1. Query Builder API の破壊的変更
|
||||
2. MySQL / SQLite への同時展開(MariaDB は PostgreSQL と同方針で非同期待機を実装済み)
|
||||
3. 初回対応で全 OS 最適化を完了させること
|
||||
|
||||
### 実装方針
|
||||
|
||||
#### 1. libpq 待機を FD イベント待機へ変更する
|
||||
|
||||
変更対象:
|
||||
- `src/allographer/query_builder/libs/postgres/postgres_impl.nim`
|
||||
- `src/allographer/query_builder/libs/postgres/postgres_rdb.nim`
|
||||
|
||||
追加する内部ヘルパ:
|
||||
- `waitPgReadable(db: PPGconn, timeoutMs: int): Future[bool]`
|
||||
- `waitPgWritable(db: PPGconn, timeoutMs: int): Future[bool]`
|
||||
- `cancelQuery(db: PPGconn)`
|
||||
|
||||
要点:
|
||||
- `pqsocket(db)` で FD を得る
|
||||
- 必要に応じて dispatcher に `AsyncFD` を登録する
|
||||
- read / write readiness を Future 完了で待つ
|
||||
- タイムアウト管理を行う
|
||||
- 登録リークや未解除ハンドラを残さない
|
||||
|
||||
#### 2. クエリ実行ループを共通化する
|
||||
|
||||
送信フェーズ:
|
||||
1. `pqsendQueryParams(...)` を呼ぶ
|
||||
2. `pqflush == 1` の間は `waitPgWritable` で待機する
|
||||
|
||||
受信フェーズ:
|
||||
1. `pqconsumeInput`
|
||||
2. `pqisBusy == 1` なら `waitPgReadable` で待機する
|
||||
3. ready 後に `pqgetResult` を drain する
|
||||
|
||||
タイムアウト時は `cancelQuery` を実行し、エラーを返す。
|
||||
|
||||
#### 3. `dbOpen` で non-blocking を保証する
|
||||
|
||||
変更対象:
|
||||
- `src/allographer/query_builder/models/postgres/postgres_open.nim`
|
||||
|
||||
仕様:
|
||||
1. `pqsetnonblocking(conn, 1)` を実行する
|
||||
2. 失敗時は `DbError`
|
||||
3. `pqisnonblocking(conn) == 1` を確認し、保証できない場合は例外化する
|
||||
|
||||
#### 4. 接続プール空き待ちを通知ベースに変更する
|
||||
|
||||
変更対象:
|
||||
- `src/allographer/query_builder/models/postgres/postgres_types.nim`
|
||||
- `src/allographer/query_builder/models/postgres/postgres_exec.nim`
|
||||
|
||||
方針:
|
||||
- `Connections` に `waiters*: Deque[Future[void]]` を追加する
|
||||
- `getFreeConn` は空きがなければ waiter を登録して待機する
|
||||
- `returnConn` は `isBusy = false` にした後、未完了 waiter を 1 つだけ起こす
|
||||
- 余剰 waiter や完了済み waiter は掃除する
|
||||
|
||||
### 失敗時挙動
|
||||
|
||||
1. `pqsocket < 0` は `DbError`
|
||||
2. タイムアウト時は `cancelQuery` 実行後に `DbError`
|
||||
3. `cancelQuery` 失敗時は追加情報付きで例外化
|
||||
4. dispatcher 登録・解除エラーは握り潰さず上位へ伝播する
|
||||
|
||||
### テスト方針
|
||||
|
||||
単体テスト:
|
||||
1. `waitPgReadable` が read event で復帰する
|
||||
2. timeout 時に `false` を返す
|
||||
3. `cancelQuery` が後始末まで行う
|
||||
4. `getFreeConn` が通知で復帰する
|
||||
|
||||
結合テスト:
|
||||
1. httpbeast / httpx + Postgres のレイテンシ回帰を確認する
|
||||
2. `asynchttpserver` と比較して極端な乖離がないことを確認する
|
||||
3. プール枯渇時の待機が 10ms 刻みポーリングに依存しないことを確認する
|
||||
|
||||
回帰テスト:
|
||||
1. 既存 CRUD クエリの結果互換
|
||||
2. transaction 系 API の動作
|
||||
3. 例外時メッセージが意味を保っていること
|
||||
|
||||
### 受け入れ基準
|
||||
|
||||
1. PostgreSQL クエリ待機ループから `await sleepAsync(10)` が除去されている
|
||||
2. httpbeast / httpx で DB 完了後の回収遅延が顕著に増幅しない
|
||||
3. プール空き待機で `sleepAsync` ポーリングを使わない
|
||||
4. 公開 API 変更なしで既存テストと追加テストが成立する
|
||||
@@ -0,0 +1,240 @@
|
||||
---
|
||||
description: 321-mariadb-nonblockingブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
MariaDB nonblocking API 対応 ブランチルール
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
- allographer の MariaDB 実装を、MariaDB Connector/C の non-blocking client API に追従できる構成へ設計・整備する。
|
||||
- 現在の `sleepAsync(10)` ベースの接続プール待機と、実質ブロッキングなクエリ実行経路を切り分けて改善方針を明確化する。
|
||||
- `mysql_real_query_start/cont` 系、`mysql_read_query_result_start/cont` 系、`mysql_fetch_row_start/cont` 系を使う待機ループの責務分離を設計する。
|
||||
- 必要な Connector/C 宣言を `mariadb_rdb.nim` に追加し、将来の実装変更でヘッダ不足が起きないようにする。
|
||||
- 公開 API 互換を維持しつつ、MariaDB driver 内に差分を閉じ込める。
|
||||
- 設計メモで整理していた背景・参照仕様・リスク・段階導入案をこのブランチルールへ集約し、参照元を一本化する。
|
||||
|
||||
## 進捗
|
||||
- [x] `.cursor/rules/project.mdc` と `.cursor/rules/branch.mdc` を確認した
|
||||
- [x] 現行 `src/allographer/query_builder/models/mariadb/` と `src/allographer/query_builder/libs/mariadb/` を調査した
|
||||
- [x] ローカルの `/usr/include/mariadb/mysql.h` で non-blocking API 宣言と待機フラグを確認した
|
||||
- [x] MariaDB 公式ドキュメントで non-blocking API の制約と利用手順を確認した
|
||||
- [x] ブランチルールに設計方針・改修粒度・参考資料を整理した
|
||||
- [x] `src/allographer/query_builder/libs/mariadb/mariadb_rdb.nim` に必要宣言を追加した
|
||||
- [x] `mariadb_impl.nim` に共通待機ヘルパと `_start/_cont` ベースの実行ループを実装する
|
||||
- [x] `mariadb_open.nim` で `MYSQL_OPT_NONBLOCK` を有効化し、接続初期化手順を整理する
|
||||
- [x] `mariadb_types.nim` / `mariadb_exec.nim` のプール空き待機を通知ベースへ置換する
|
||||
- [x] `tests/mariadb/` に pool wait と CRUD 回帰を追加する
|
||||
- [x] 実装中に設計差分が出た場合は本ファイルの `調査結果・設計まとめ` を更新する
|
||||
- [x] `src/allographer/query_builder/libs/surreal/` と `models/surreal/` の効率改善余地を調査し、`documents/rdb/surreal_efficiency_report.md` に整理した
|
||||
- [x] `documents/rdb/surreal_efficiency_report.md` の P0/P1 項目に沿って、`surreal_impl.nim` の HTTP timeout 共通化、`surreal_open.nim` の bootstrap 1 回化、`surreal_lib.nim` の文字列生成改善、`surreal_exec.nim` の `getElems()` 化を実装した
|
||||
|
||||
## 参考資料
|
||||
- `documents/rdb/mariadb_nonblocking_design.md` の内容を統合済み
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_open.nim`
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_exec.nim`
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_types.nim`
|
||||
- `src/allographer/query_builder/libs/mariadb/mariadb_impl.nim`
|
||||
- `src/allographer/query_builder/libs/mariadb/mariadb_rdb.nim`
|
||||
- `documents/rdb/surreal_efficiency_report.md`
|
||||
- `/usr/include/mariadb/mysql.h`
|
||||
- MariaDB Documentation: Non-Blocking API Reference
|
||||
- MariaDB Documentation: Using the Non-Blocking Library
|
||||
- `src/allographer/query_builder/models/postgres/postgres_open.nim`
|
||||
- `src/allographer/query_builder/models/postgres/postgres_exec.nim`
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
|
||||
### 背景
|
||||
|
||||
現行の MariaDB 実装は `Future` を返しているが、実際の MariaDB Connector/C 呼び出しは `mysql_real_query()` / `mysql_use_result()` / `mysql_fetch_row()` を同期的に使っている。
|
||||
|
||||
そのため、Nim 側では async API に見えても、ソケット I/O 待機は Connector/C 内でブロックされうる。さらに接続プール枯渇時は `sleepAsync(10)` ポーリングで待っており、待機遅延が大きい。
|
||||
|
||||
### 現状の問題
|
||||
|
||||
1. `mariadb_exec.nim` の `getFreeConn` が `sleepAsync(10)` ポーリングで、プール返却の即時通知がない
|
||||
2. `mariadb_impl.nim` の `query*` / `exec*` / `getColumns*` は non-blocking API を使っていない
|
||||
3. `timeout` 引数はあるが、Connector/C の I/O 待機そのものをアプリ側 event loop で制御できていない
|
||||
4. `mysql_use_result()` を使う都合上、行フェッチ途中で新規操作を開始できないという Connector/C 制約を、内部設計として明示できていない
|
||||
5. 設計メモが別ファイルに分散すると、ブランチ進捗と参照資料の整合性が崩れやすい
|
||||
|
||||
### 設計目標
|
||||
|
||||
1. MariaDB クエリ送受信を Connector/C の `_start/_cont` API へ置き換える
|
||||
2. ソケット待機は `mysql_get_socket()` と `MYSQL_WAIT_*` に従って event loop で処理する
|
||||
3. `mysql_get_timeout_value_ms()` に従って timeout を扱い、ライブラリ内部 timeout と allographer の接続 timeout を両立させる
|
||||
4. 公開 API は維持し、driver 内部だけで差分を吸収する
|
||||
5. 接続プール空き待機は PostgreSQL と同様の通知ベースへ寄せる
|
||||
|
||||
### 非目標
|
||||
|
||||
1. Query Builder の公開 API 変更
|
||||
2. MySQL driver まで同時に全面改修すること
|
||||
3. 初回対応で prepared statement 系まで non-blocking 化すること
|
||||
4. このブランチの責務を MariaDB driver の範囲から広げすぎること
|
||||
|
||||
### 実装方針
|
||||
|
||||
#### 1. `mariadb_rdb.nim` に non-blocking API 宣言を揃える
|
||||
|
||||
追加または有効化する対象:
|
||||
- `mysql_options`
|
||||
- `mysql_get_socket`
|
||||
- `mysql_get_timeout_value`
|
||||
- `mysql_get_timeout_value_ms`
|
||||
- `mysql_real_connect_start/cont`
|
||||
- `mysql_real_query_start/cont`
|
||||
- `mysql_store_result_start/cont`
|
||||
- `mysql_read_query_result_start/cont`
|
||||
- `mysql_fetch_row_start/cont`
|
||||
- `mysql_free_result_start/cont`
|
||||
- `MYSQL_WAIT_READ/WRITE/EXCEPT/TIMEOUT`
|
||||
- 必要なら `mysql_optionsv` など周辺宣言も不足なく追加する
|
||||
|
||||
#### 2. `mariadb_open.nim` で non-blocking を明示的に有効化する
|
||||
|
||||
手順:
|
||||
1. `mysql_init()` 後、`mysql_options(conn, MYSQL_OPT_NONBLOCK, nil)` を呼ぶ
|
||||
2. 接続自体も `mysql_real_connect_start/cont` に寄せるか、初手は接続のみ同期で残すかを選ぶ
|
||||
3. 設計上は接続も non-blocking に揃えるのが一貫するため、最終的には `_start/_cont` 化を目標とする
|
||||
|
||||
補足:
|
||||
- MariaDB 公式ドキュメントでは、`MYSQL_OPT_NONBLOCK` を有効化せずに non-blocking API を使うとクラッシュしうる
|
||||
- DNS 解決は非同期化されないため、ホスト名利用時は依然として初回接続でブロックしうる
|
||||
- 接続初期化の最終形は `_start/_cont` へ寄せるが、既存動作を壊さない段階導入を優先する
|
||||
|
||||
#### 3. `mariadb_impl.nim` に共通待機ヘルパを追加する
|
||||
|
||||
候補ヘルパ:
|
||||
- `waitMariadb(conn: PMySQL, waitStatus: cint, deadline: MonoTime): Future[cint]`
|
||||
- `runMariadbOp[T](...)` のような `_start/_cont` 反復ヘルパ
|
||||
- `readAllRows(...)` のような result drain ヘルパ
|
||||
|
||||
待機仕様:
|
||||
- `waitStatus` の `MYSQL_WAIT_READ/WRITE/EXCEPT` を `AsyncFD` で待つ
|
||||
- `MYSQL_WAIT_TIMEOUT` が立っているときは `mysql_get_timeout_value_ms()` を優先する
|
||||
- allographer 側 `timeout` を超えたら `DbError` を返す
|
||||
- 待機ループは API ごとに重複させず、共通の進行関数へ寄せる
|
||||
|
||||
#### 4. クエリ実行は「送信」「結果確定」「結果取得」「行フェッチ」に分ける
|
||||
|
||||
`SELECT` 系:
|
||||
1. `mysql_real_query_start/cont`
|
||||
2. `mysql_use_result()` または `mysql_store_result_start/cont` のどちらを使うか判断
|
||||
3. 既存実装との互換を優先するなら、まずは `mysql_use_result()` を維持しつつ `mysql_fetch_row_start/cont` で逐次取得する
|
||||
4. 行取得後に `mysql_free_result_start/cont` または `mysql_free_result()` で解放する
|
||||
|
||||
`INSERT/UPDATE/DELETE` 系:
|
||||
1. `mysql_real_query_start/cont`
|
||||
2. `mysql_real_query_start/cont` の完了を実行完了とみなし、結果セットがない経路では追加の `read_query_result` 呼び出しを行わない
|
||||
3. `mysql_errno()` / `mysql_error()` を確認して `DbError`
|
||||
|
||||
補足:
|
||||
- MariaDB 公式ドキュメントでは、`mysql_use_result()` 自体はブロックしないが、そこからの `mysql_fetch_row_start/cont` は `use_result` 由来なら待機を伴う
|
||||
- `store_result` を選ぶとフェッチ自体は即時化しやすい一方、結果全件受信を先に待つ必要がある
|
||||
- 現行の逐次処理に近いのは `use_result + fetch_row_start/cont`
|
||||
- 実装上の都合で `store_result` を選ぶ場合でも、公開 API の見え方は変えない
|
||||
- 実装検証では、`mysql_real_query_start/cont` 直後に `mysql_read_query_result_start/cont` を追加すると DML 経路でタイムアウトが発生したため、`exec*` 系は `real_query` 完了をもって終了判定する方針へ更新した
|
||||
|
||||
#### 4.1 実装差分メモ(2026-03-23)
|
||||
|
||||
- `mariadb_rdb.nim` の `MYSQL_OPT_NONBLOCK` は MariaDB ヘッダ定義に合わせて `6000` を明示指定した
|
||||
- `mariadb_impl.nim` では `waitMariadb` を共通化し、`mysql_real_query_start/cont` と `mysql_fetch_row_start/cont` / `mysql_free_result_start/cont` を統一ループで実行する実装にした
|
||||
- `mariadb_open.nim` で `mysql_options(conn, MYSQL_OPT_NONBLOCK, nil)` を全接続で有効化した
|
||||
- `mariadb_types.nim` / `mariadb_exec.nim` で接続プール待機を `waiters` ベースへ置換し、`sleepAsync(10)` ポーリングを撤廃した
|
||||
- `tests/mariadb/test_pool_wait.nim` を追加し、`tests/mariadb/test_query.nim` / `tests/mariadb/test_transaction.nim` と合わせて回帰確認した
|
||||
|
||||
#### 4.2 効率改善差分メモ(2026-03-23)
|
||||
|
||||
- `mariadb_impl.nim`: `setColumnInfo` を `while true` フェッチループの外に移動し、行ごとに `fetch_field_direct` の FFI 呼び出しと文字列アロケーションが発生する問題を解消した。各行では `baseColumns` のコピーに対して NULL 上書きのみ行う
|
||||
- `mariadb_impl.nim`: 全 proc から `assert db.ping == 0` を除去した。`mysql_ping` は同期ブロッキングでイベントループを停止するため。接続異常は `real_query_start` のエラーハンドリングで検出する
|
||||
- `mariadb_impl.nim`: `epochTime()` ベースのデッドライン管理を `std/monotimes` の `MonoTime` + `Duration` に置き換え、NTP 補正による巻き戻りリスクを排除した
|
||||
- `mariadb_impl.nim`: `MariadbWaitState` を `ref object` から `object`(値型)に変更し、`waitMariadb` 呼び出しあたり 1 回のヒープアロケーションを削減した
|
||||
- `mariadb_impl.nim`: JSON→string 変換ロジックを `jsonObjValuesToStrSeq` / `jsonFlatToStrSeq` の 2 proc に集約し、4 箇所の重複を解消した
|
||||
- `mariadb_impl.nim`: `getColumnTypes` の SQL を文字列補間から `?` プレースホルダに変更し、SQL インジェクションリスクを排除した
|
||||
- `mariadb_exec.nim`: `exec` / `insertId` が DML のたびに `INFORMATION_SCHEMA.COLUMNS` を問い合わせていた問題を、`Connections.columnTypeCache` によるテーブル単位キャッシュで解消した
|
||||
- `mariadb_types.nim`: `waiters` を `seq[Future[void]]` から `Deque[Future[void]]` に変更し、`wakeOnePoolWaiter` の先頭削除を O(n) → O(1) に改善した
|
||||
- `mariadb_lib.nim`: `dbFormat` の char-by-char 連結を、`?` 位置間のサブ文字列を一括 `add` する方式に変更した
|
||||
- SurrealDB: `surreal_impl.nim` に `runSurrealSql` / `awaitWithTimeout` を追加し、`query` / `exec` / `info` の HTTP timeout と JSON error 処理を共通化した
|
||||
- SurrealDB: `surreal_open.nim` で `/status` と `/sql` の bootstrap を timeout 対応で実行し、namespace/database 定義を初回接続へ集約した
|
||||
- SurrealDB: `surreal_lib.nim` の `numToAlphabet` / `questionToDaller` / `dbFormat(JsonNode)` を単一バッファ志向へ整理した
|
||||
- SurrealDB: `surreal_exec.nim` の `getAllRows` は `rows.getElems()` を使い、`toSeq()` の追加走査を避けた
|
||||
|
||||
#### 5. 接続プール待機は通知ベースへ置換する
|
||||
|
||||
`mariadb_types.nim`:
|
||||
- `Connections.waiters*: seq[Future[void]]` を追加する
|
||||
|
||||
`mariadb_exec.nim`:
|
||||
- `getFreeConn` は waiter を積んで `withTimeout` で待つ
|
||||
- `returnConn` は接続返却後に 1 件だけ waiter を起こす
|
||||
- PostgreSQL 実装と同じ責務分割に揃える
|
||||
- waiters の起床順やキャンセル時の取り扱いは、既存 PostgreSQL 実装の方針に合わせて整理する
|
||||
|
||||
#### 6. 段階導入する
|
||||
|
||||
第1段階:
|
||||
- ヘッダ宣言追加
|
||||
- ブランチルール・設計書追加
|
||||
|
||||
第2段階:
|
||||
- プール待機の通知化
|
||||
- `exec*` 系の non-blocking 化
|
||||
|
||||
第3段階:
|
||||
- `query*` / `rawQuery*` / `getColumns*` / `insertId` の非同期 result drain 実装
|
||||
- テスト拡充
|
||||
- 段階ごとに実装差分が出たら本ファイルへ追記し、ブランチ内の唯一の設計記録にする
|
||||
|
||||
### 受け入れ基準
|
||||
|
||||
1. MariaDB driver で `sleepAsync(10)` によるプール待機がなくなっている
|
||||
2. `mariadb_impl.nim` のクエリ待機が `mysql_real_query_start/cont` などの non-blocking API を利用している
|
||||
3. 同一接続上で未完了 non-blocking 操作を残したまま次の操作を始めない
|
||||
4. 既存 CRUD / transaction / schema テストが回帰しない
|
||||
5. 公開 API 変更なしで実装差分が driver 内に閉じ込められている
|
||||
|
||||
### 参照仕様
|
||||
|
||||
- MariaDB Documentation: Non-Blocking API Reference
|
||||
https://mariadb.com/docs/server/reference/product-development/mariadb-internals/using-mariadb-with-your-programs-api/non-blocking-client-library/non-blocking-api-reference
|
||||
- MariaDB Documentation: Using the Non-Blocking Library
|
||||
https://mariadb.com/docs/server/reference/product-development/mariadb-internals/using-mariadb-with-your-programs-api/non-blocking-client-library/using-the-non-blocking-library
|
||||
- `/usr/include/mariadb/mysql.h`
|
||||
|
||||
確認済み項目:
|
||||
- `MYSQL_OPT_NONBLOCK`
|
||||
- `MYSQL_WAIT_READ`, `MYSQL_WAIT_WRITE`, `MYSQL_WAIT_EXCEPT`, `MYSQL_WAIT_TIMEOUT`
|
||||
- `mysql_options`, `mysql_optionsv`
|
||||
- `mysql_get_socket`
|
||||
- `mysql_get_timeout_value`, `mysql_get_timeout_value_ms`
|
||||
- `mysql_real_connect_start/cont`
|
||||
- `mysql_real_query_start/cont`
|
||||
- `mysql_store_result_start/cont`
|
||||
- `mysql_read_query_result_start/cont`
|
||||
- `mysql_fetch_row_start/cont`
|
||||
- `mysql_free_result_start/cont`
|
||||
|
||||
### リスク
|
||||
|
||||
1. `mysql_use_result()` は結果を最後まで読み切る前に次操作へ進めないため、clean up 漏れがあると接続を壊しやすい
|
||||
2. MariaDB non-blocking API は `_cont()` を最後まで呼び切る必要があり、途中中断設計を誤ると不整合が出る
|
||||
3. DNS 解決はブロックしうるので、接続初期化だけは期待したほど改善しない可能性がある
|
||||
4. MySQL driver と共通化したくなっても、まずは MariaDB driver 内に閉じ込めてから判断すべき
|
||||
5. 設計記録を別ファイルに残さないことで、進捗と方針の乖離を抑える
|
||||
|
||||
### 段階導入案
|
||||
|
||||
1. 設計書とブランチルールを追加
|
||||
2. `mariadb_rdb.nim` に宣言追加
|
||||
3. プール待機通知化
|
||||
4. `exec*` 系を non-blocking 化
|
||||
5. `query*` / `rawQuery*` / `getColumns*` を non-blocking 化
|
||||
6. 必要なら `mysql_real_connect_start/cont` を導入
|
||||
|
||||
### 完了条件
|
||||
|
||||
1. MariaDB driver の内部待機が Connector/C non-blocking API ベースになっている
|
||||
2. プール空き待機が通知ベースである
|
||||
3. 既存公開 API を壊していない
|
||||
4. MariaDB の主要テストが通る
|
||||
@@ -0,0 +1,174 @@
|
||||
---
|
||||
description: 323-database-url-for-connectionブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
dbOpen Database URL 対応 ブランチルール
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
- `dbOpen` に database URL を使って接続できる新しいオーバーロードを追加し、既存の引数シグネチャは後方互換のため残す。
|
||||
- SQLite / MySQL / MariaDB / PostgreSQL は一般的な database URL 仕様に従い、scheme・認証情報・host・port・database path・query を解釈できる設計に整える。
|
||||
- URL 解析責務を各 driver の `dbOpen` 実装にベタ書きせず、共通化できる層へ寄せて公開 API を汚さない。
|
||||
- 既存の URL 文字列 1 引数版 `dbOpen` と、新しく追加する引数デザインの役割分担を明確にし、曖昧なオーバーロード解決を避ける。
|
||||
- 既存テスト・example・README・`documents/rdb/query_builder.md` を、最終仕様と齟齬がない状態へ同期する。
|
||||
|
||||
## 進捗
|
||||
- [x] `.cursor/rules/project.mdc` と `.cursor/rules/branch.mdc` を確認した
|
||||
- [x] 現在のブランチ名に対応するブランチルールファイルが未作成であることを確認した
|
||||
- [x] 既存 `dbOpen` 実装が SQLite / MySQL / MariaDB / PostgreSQL / SurrealDB でどう分かれているか確認した
|
||||
- [x] MySQL / MariaDB / PostgreSQL にはすでに URL 文字列 1 引数版 `dbOpen` があり、SQLite には未整備であることを確認した
|
||||
- [x] 既存 URL 実装が `split` ベースの簡易パーサであり、一般的な URL 仕様を十分に扱えていないことを確認した
|
||||
- [x] 今回のブランチでは SurrealDB を対象外とする方針を反映した
|
||||
- [x] ブランチルールに改修方針・進捗粒度・参考資料を整理した
|
||||
- [x] 一般的な database URL 仕様として採用する範囲を整理する
|
||||
- [x] 新しい `dbOpen` オーバーロードの引数デザインを確定する
|
||||
- [x] URL 解析の共通 helper / 型配置を決め、driver 差分の閉じ込め方を整理する
|
||||
- [x] SQLite の URL 受け口を追加し、ファイルパス指定との意味論を衝突させない
|
||||
- [x] MySQL / MariaDB / PostgreSQL の URL 解析を一般仕様に合わせて強化する
|
||||
- [x] 正常系・異常系・後方互換のテストを driver ごとに追加または更新する
|
||||
- [x] example / README / documents を同期する
|
||||
- [x] 実装途中で設計認識に誤りが見つかった場合は、本ファイルの `調査結果・設計まとめ` を更新する
|
||||
|
||||
## 参考資料
|
||||
- `src/allographer/connection.nim`
|
||||
- `src/allographer/query_builder/models/sqlite/sqlite_open.nim`
|
||||
- `src/allographer/query_builder/models/mysql/mysql_open.nim`
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_open.nim`
|
||||
- `src/allographer/query_builder/models/postgres/postgres_open.nim`
|
||||
- `src/allographer/query_builder/models/surreal/surreal_open.nim`
|
||||
- `tests/mysql/test_open.nim`
|
||||
- `tests/mariadb/test_open.nim`
|
||||
- `tests/postgres/test_open.nim`
|
||||
- `tests/sqlite/connections.nim`
|
||||
- `tests/postgres/connections.nim`
|
||||
- `tests/mysql/connections.nim`
|
||||
- `tests/mariadb/connections.nim`
|
||||
- `example/connections.nim`
|
||||
- `README.md`
|
||||
- `documents/rdb/query_builder.md`
|
||||
- RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
|
||||
- PostgreSQL Documentation: Connection URIs
|
||||
- MySQL / MariaDB ecosystem documentation for connection URI / DSN conventions
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
|
||||
### 背景
|
||||
|
||||
現状の `dbOpen` は、RDB 系では「分解済みの接続情報を個別引数で渡す形」が基本で、一部 driver にだけ URL 文字列 1 引数版が追加されている。
|
||||
|
||||
ただし既存の URL 版は `split` を重ねた簡易実装で、一般的な URL で登場する予約文字・query・省略可能項目・scheme 差異に弱い。API としては URL 対応を名乗りつつ、仕様が狭く不均一な状態である。
|
||||
|
||||
今回の目的は、既存 API を壊さずに、database URL を正式な接続入力として扱える `dbOpen` オーバーロード群を整備し、RDB driver 間の設計を揃えることである。SurrealDB は今回の対象外とする。
|
||||
|
||||
### 現状の問題
|
||||
|
||||
1. SQLite はファイルパス引数のみで、URL ベース接続の入口がない
|
||||
2. MySQL / MariaDB / PostgreSQL の URL 版は実装されているが、一般的な URL 仕様を十分に扱えない
|
||||
3. driver ごとに URL の扱いがバラバラで、共通 API として学習コストが高い
|
||||
4. 既存の URL 文字列 1 引数版と、新たな「database url を使う関数」の住み分けを設計しないと、将来の拡張で曖昧さが増える
|
||||
|
||||
### 設計目標
|
||||
|
||||
1. 既存 `dbOpen` シグネチャを残しつつ、新しいオーバーロードで URL ベース接続を自然に表現できる
|
||||
2. SQLite / MySQL / MariaDB / PostgreSQL は一般的な URI 記法を優先する
|
||||
3. URL 解析と driver ごとの接続情報変換を責務分離し、公開 API へ場当たり的分岐を持ち込まない
|
||||
4. 後方互換・テスト・文書更新まで含めて、利用者が迷わない状態を作る
|
||||
|
||||
### 非目標
|
||||
|
||||
1. 既存の個別引数版 `dbOpen` を削除または非推奨化すること
|
||||
2. 接続 URL と無関係な query builder / schema builder API を同時に変更すること
|
||||
3. SurrealDB の接続モデルや URL 設計をこのブランチで見直すこと
|
||||
4. このブランチで ORM 的な接続設定 abstraction を全面導入すること
|
||||
|
||||
### API 方針
|
||||
|
||||
#### 1. 新しいオーバーロードは「URL であることが呼び出し側から明確に分かる」形を優先する
|
||||
|
||||
候補:
|
||||
1. `dbOpen(MySQL, url = "...", maxConnections = ..., timeout = ...)`
|
||||
2. `dbOpen(MySQL, databaseUrl = "...", maxConnections = ..., timeout = ...)`
|
||||
3. URL 専用の薄い型を導入して `dbOpen(MySQL, DatabaseUrl("..."), ...)`
|
||||
|
||||
採用した設計:
|
||||
- URL 専用の薄い型 `DatabaseUrl` を導入し、`dbOpen(driver, databaseUrl = asDatabaseUrl("..."), ...)` で呼べるようにした
|
||||
- 既存の `dbOpen(driver, url: string, ...)` は後方互換のため残し、内部では共通 parser に委譲する
|
||||
- SQLite の既存 `dbOpen(SQLite3, path: string, ...)` はそのまま維持し、URL 文字列が渡された場合のみ URL ルートへ寄せる
|
||||
|
||||
理由:
|
||||
- SQLite では単なる `string` がファイルパスと URL の両方になり得る
|
||||
- `DatabaseUrl` に分けることで、既存の string overload と overload 解決が衝突しない
|
||||
- 将来の拡張でも、URL 専用の入口を安全に追加しやすい
|
||||
|
||||
#### 2. RDB の URL 仕様は一般的な形式を優先する
|
||||
|
||||
最低限そろえる対象:
|
||||
1. `sqlite:///absolute/path/to/db.sqlite3`
|
||||
2. `sqlite://relative/path.db` またはこの扱いを不採用とするなら明文化する
|
||||
3. `mysql://user:pass@host:3306/database`
|
||||
4. `mariadb://user:pass@host:3306/database`
|
||||
5. `postgresql://user:pass@host:5432/database`
|
||||
|
||||
設計メモ:
|
||||
- `postgres://...` は `postgresql://...` の alias として受ける
|
||||
- percent-encoding の decode 要否を明確にする
|
||||
- query parameter は現段階で未使用でも、少なくとも破壊的に誤解釈しない方針を取る
|
||||
- database 名や password に `:` `/` `@` が含まれるケースを、単純 `split` で壊さない
|
||||
|
||||
### 実装方針
|
||||
|
||||
#### 1. URL 解析は共通 helper 化を優先する
|
||||
|
||||
方針:
|
||||
- `scheme`, `user`, `password`, `host`, `port`, `path`, `query` を扱える共通 parser を用意する
|
||||
- URL 専用の `DatabaseUrl` を導入し、driver ごとの差分は「解析結果からどう接続情報へ落とすか」に限定する
|
||||
- 既存 driver ファイルの `split` ベース処理は置き換え対象とする
|
||||
|
||||
#### 2. SQLite は URL とファイルパスの意味論を分ける
|
||||
|
||||
要点:
|
||||
- 既存 `dbOpen(SQLite3, "/path/to/file.db")` はそのまま維持する
|
||||
- URL 版は `asDatabaseUrl(...)` で「これは URL」と明示できる形を優先する
|
||||
- `:memory:` や相対パスとの整合を壊さない
|
||||
|
||||
#### 3. 既存 URL 1 引数版は互換維持しつつ内部実装を新 parser に寄せる
|
||||
|
||||
要点:
|
||||
- MySQL / MariaDB / PostgreSQL の既存テストは維持する
|
||||
- 既存の `ValueError` / `DbError` の期待が妥当なら保つ
|
||||
- 公開 API は残しつつ、仕様の狭さだけを改善する
|
||||
|
||||
#### 4. テストは「構文解析」と「実接続」を分けて考える
|
||||
|
||||
候補:
|
||||
1. URL から接続情報へ正しく分解されることを確認する軽量テスト
|
||||
2. 既存の integration 系 `dbOpen(...).isConnected()` テスト
|
||||
3. 不正 scheme・不足情報・不正 port・予約文字を含む入力の異常系テスト
|
||||
4. SQLite の URL 指定とファイルパス指定の後方互換テスト
|
||||
5. SurrealDB の namespace / database 解決規則テスト
|
||||
|
||||
### 受け入れ基準
|
||||
|
||||
1. 既存の `dbOpen` 呼び出しを壊さずに、新しい URL ベースのオーバーロードを追加できている
|
||||
2. SQLite / MySQL / MariaDB / PostgreSQL の URL 設計が一般的な仕様と整合している
|
||||
3. SurrealDB の URL 設計が独自要件を満たしつつ、他 driver と読後感が大きく乖離していない
|
||||
4. 既存の簡易 `split` 実装を置き換え、予約文字や query を誤解釈しにくい構造になっている
|
||||
5. driver ごとの正常系・異常系・後方互換テストが追加または更新されている
|
||||
6. example / README / documents / ブランチルールが最終仕様と一致している
|
||||
|
||||
### リスク
|
||||
|
||||
1. Nim 標準ライブラリだけで URL 解析を行う場合、RFC 3986 の細部を十分に扱えない可能性がある
|
||||
2. SQLite の URL 仕様を曖昧にすると、既存のファイルパス API と混同されやすい
|
||||
3. SurrealDB の namespace / database の載せ方を誤ると、RDB に寄せたつもりで逆に分かりにくくなる
|
||||
4. 既存の `dbOpen(driver, urlString)` と新オーバーロードが衝突すると、Nim の overload 解決で利用者体験が悪化する
|
||||
5. 文字列解析だけでなく実接続テストも必要なため、driver 横断で確認コストが上がる
|
||||
|
||||
### 段階導入案
|
||||
|
||||
1. 採用する URL 仕様と新オーバーロードの表面 API を確定する
|
||||
2. 共通 URL parser / 接続情報変換レイヤを用意する
|
||||
3. MySQL / MariaDB / PostgreSQL の既存 URL 実装を載せ替える
|
||||
4. SQLite の URL 入口を追加する
|
||||
5. テストを整備して後方互換と異常系を固める
|
||||
6. example / README / documents を同期する
|
||||
@@ -0,0 +1,167 @@
|
||||
---
|
||||
description: 333-prepared-statementブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
333-prepared-statement ブランチでの高速化内容
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
- prepared statement を、高頻度な同一 SQL 実行で通常経路より速くなるように改善する
|
||||
- とくに PostgreSQL で、prepare/deallocate の無駄と接続拡散を減らす
|
||||
- benchmark が prepared statement の warm 状態を正しく測れるようにする
|
||||
|
||||
## 進捗
|
||||
|
||||
- [x] `example/benchmark.nim` の PostgreSQL 計測で prepared update が遅く見える理由を調査した
|
||||
- [x] prepared statement 高速化の設計方針を整理した
|
||||
- [ ] PostgreSQL にプール単位の prepared statement cache を追加する
|
||||
- [ ] `close()` を論理 close 化し、物理破棄は別 API に分離する
|
||||
- [ ] 接続固定で prepared statement を連続実行できる API を追加する
|
||||
- [ ] `example/benchmark.nim` を cold/warm 計測に分離し、warm 経路で同一 statement を再利用する
|
||||
- [ ] prepared cache と接続固定 API のテストを追加する
|
||||
|
||||
## 参考資料
|
||||
|
||||
- PostgreSQL libpq prepared statements: https://www.postgresql.jp/document/12/html/libpq-exec.html
|
||||
- `PQsendPrepare`
|
||||
- `PQsendQueryPrepared`
|
||||
- `DEALLOCATE`
|
||||
- PostgreSQL 非同期 libpq: https://www.postgresql.jp/document/12/html/libpq-async.html
|
||||
- 対象実装
|
||||
- `src/allographer/query_builder/models/postgres/postgres_exec.nim`
|
||||
- `src/allographer/query_builder/models/postgres/postgres_types.nim`
|
||||
- `src/allographer/query_builder/libs/postgres/postgres_impl.nim`
|
||||
- `example/benchmark.nim`
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
|
||||
### 現状の問題
|
||||
|
||||
PostgreSQL で prepared statement が遅く見える主因は、prepared statement 自体の性質ではなく、現在の実装と benchmark の計測条件にある。
|
||||
|
||||
- `benchmark.nim` は計測のたびに `prepare` と `close` を行っており、steady-state の再利用性能ではなくライフサイクル全体を測っている
|
||||
- PostgreSQL 実装は prepared statement をコネクションごとに lazy prepare するため、プールが大きいと `PREPARE` が広く拡散する
|
||||
- `first()` と `exec()` が毎回 `getFreeConn()` するため、1 つの業務操作でも接続が変わり、prepared state の局所性が弱い
|
||||
- 通常経路も `PQsendQueryParams` による bind 実行なので、prepared の利得は parse/plan 再利用ぶんに限られる
|
||||
|
||||
### 高速化の基本方針
|
||||
|
||||
prepared statement を速くするには、単発 API を追加するだけでは足りない。以下をまとめて入れる必要がある。
|
||||
|
||||
- prepare/deallocate の回数を減らす
|
||||
- 同じ logical operation を同じ接続に寄せる
|
||||
- warm 済み prepared state をプール内で継続利用する
|
||||
|
||||
### 設計方針 1: プール単位の prepared cache
|
||||
|
||||
`PreparedStatement` ハンドルごとに物理 state を持つのではなく、`Connections` が SQL ごとの prepared state を保持する。
|
||||
|
||||
概念設計:
|
||||
|
||||
```nim
|
||||
type PostgresPreparedEntry = ref object
|
||||
sql*: string
|
||||
nArgs*: int
|
||||
stmtBaseName*: string
|
||||
stmtNames*: seq[string] ## connI ごとの物理 prepared 名
|
||||
refCount*: int
|
||||
lastUsedAt*: int64
|
||||
|
||||
type Connections* = ref object
|
||||
conns*: seq[Connection]
|
||||
timeout*: int
|
||||
waiters*: Deque[Future[void]]
|
||||
columnTypeCache*: Table[string, seq[Row]]
|
||||
preparedCache*: Table[string, PostgresPreparedEntry]
|
||||
```
|
||||
|
||||
期待効果:
|
||||
|
||||
- 同じ SQL に対する `prepare()` の重複を避けられる
|
||||
- 同一プール内では physical prepare を接続ごとに 1 回へ寄せられる
|
||||
- 短命な prepared handle を繰り返し作っても warm state を失いにくくなる
|
||||
|
||||
### 設計方針 2: `close()` の論理 close 化
|
||||
|
||||
現在の `close()` は、その handle が使った接続すべてに `DEALLOCATE` を送る。高速化の観点ではこれは不利なので、意味論を分ける。
|
||||
|
||||
- `close()`: handle の参照を閉じるだけ
|
||||
- `clearPreparedCache()` または `flushPrepared(sql)`: 物理 `DEALLOCATE`
|
||||
- 接続 close 時: その接続に紐づく prepared state を一括破棄
|
||||
|
||||
期待効果:
|
||||
|
||||
- 利用者が毎回 `prepare` / `close` しても、プール側は hot SQL を保持できる
|
||||
- benchmark の warm 計測でも、毎回の物理破棄コストを避けられる
|
||||
|
||||
### 設計方針 3: 接続固定 API の追加
|
||||
|
||||
prepared statement の locality を高めるため、同じ接続上で複数回の prepared 実行を束ねる API を追加する。
|
||||
|
||||
候補 API:
|
||||
|
||||
```nim
|
||||
proc withPreparedConnection*(
|
||||
self: PostgresConnections,
|
||||
body: proc (ctx: PostgresPreparedContext): Future[void]
|
||||
): Future[void]
|
||||
```
|
||||
|
||||
```nim
|
||||
type PostgresPreparedContext* = ref object
|
||||
owner*: PostgresConnections
|
||||
connI*: int
|
||||
```
|
||||
|
||||
prepared statement 側には `ctx` 付き overload を足す。
|
||||
|
||||
```nim
|
||||
proc first*(self: PostgresPreparedStatement, ctx: PostgresPreparedContext, args: seq[string]): Future[Option[JsonNode]]
|
||||
proc exec*(self: PostgresPreparedStatement, ctx: PostgresPreparedContext, args: seq[string]): Future[void]
|
||||
```
|
||||
|
||||
期待効果:
|
||||
|
||||
- `SELECT` と `UPDATE` が別接続に飛ぶのを防げる
|
||||
- lazy prepare の発生先が必要な接続に限定される
|
||||
- transaction 中の `transactionConn` と整合しやすい
|
||||
|
||||
### benchmark の変更方針
|
||||
|
||||
`example/benchmark.nim` は prepared statement の高速化効果を正しく測れるように変更する。
|
||||
|
||||
- `selectStmt` / `updateStmt` を `timeProcess` の外で 1 回だけ作る
|
||||
- 繰り返し計測では同じ prepared statement を再利用する
|
||||
- `close()` は全計測の最後に 1 回だけ呼ぶ
|
||||
- benchmark 名を `cold` と `warm` に分ける
|
||||
- warm 計測では `withPreparedConnection` を使って接続固定経路を測る
|
||||
|
||||
### 実装順序
|
||||
|
||||
#### Phase 1
|
||||
|
||||
- `Connections.preparedCache` を追加する
|
||||
- `prepare()` を cache lookup ベースに変更する
|
||||
- `close()` を論理 close 化する
|
||||
- `clearPreparedCache()` を追加する
|
||||
|
||||
#### Phase 2
|
||||
|
||||
- `PostgresPreparedContext` を追加する
|
||||
- `withPreparedConnection` を追加する
|
||||
- prepared `get/first/exec` に `ctx` overload を追加する
|
||||
- `benchmark.nim` を warm/cold 計測へ更新する
|
||||
|
||||
#### Phase 3
|
||||
|
||||
- `preparedCacheMaxEntries` を追加する
|
||||
- `refCount == 0` の entry を対象に LRU eviction を入れる
|
||||
- eviction 時に `DEALLOCATE` を発行する
|
||||
|
||||
### テスト方針
|
||||
|
||||
- 同じ SQL を複数回 `prepare()` しても、同一接続で physical prepare が 1 回に収まること
|
||||
- `close()` 後に再 `prepare()` しても、cache が残る設計なら physical prepare が増えないこと
|
||||
- `withPreparedConnection` の block 内で同じ `connI` が使われること
|
||||
- transaction 中は `transactionConn` が優先されること
|
||||
- cache eviction 時に `DEALLOCATE` が正しく走ること
|
||||
@@ -0,0 +1,206 @@
|
||||
---
|
||||
description: 336-update-prepared-statementブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
336-update-prepared-statement ブランチでの prepared statement 横展開
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
- 既存の SQLite / PostgreSQL / MySQL / MariaDB の prepared statement API を参照しつつ、SurrealDB 向け prepared statement API を追加する
|
||||
- SurrealDB v3 の `/sql` API と SurrealQL の `LET` / parameter 仕様を前提に、server-side prepare ではなく client-side template reuse と 1 リクエスト多文実行で prepared statement 的な使い勝手を実現する
|
||||
- SurrealDB 固有事情は `models/surreal` と `libs/surreal` に閉じ込め、公開 API は既存 driver と可能な限り揃える
|
||||
- このターンでは実装は行わず、調査結果と実装方針の設計書を固める
|
||||
|
||||
## 進捗
|
||||
|
||||
- [x] `.cursor/rules/project.mdc` / `.cursor/rules/branch.mdc` / `.cursor/rules/branch/336-update-prepared-statement.mdc` を確認した
|
||||
- [x] 既存 prepared statement API の到達点を SQLite / PostgreSQL / MariaDB / MySQL で確認した
|
||||
- [x] 現在の SurrealDB 実装と `/sql` 利用箇所を確認した
|
||||
- [x] SurrealDB v3 公式ドキュメントで parameter / HTTP `/sql` / transaction の仕様を確認した
|
||||
- [x] SurrealDB prepared statement の設計と利用例を `documents/surrealdb/prepared_statement.md` に整理した
|
||||
- [x] `models/surreal` に prepared statement 用の型と公開 API を追加した
|
||||
- [x] `libs/surreal` に multi-statement 実行向けの共通処理を追加した
|
||||
- [x] SurrealDB prepared statement のテストを追加した
|
||||
- [x] `documents/surrealdb/query_builder.md` / `documents/rdb/query_builder.md` を更新した
|
||||
|
||||
## 参考資料
|
||||
|
||||
- 既存 prepared statement API
|
||||
- `src/allographer/query_builder/models/sqlite/sqlite_types.nim`
|
||||
- `src/allographer/query_builder/models/sqlite/sqlite_exec.nim`
|
||||
- `src/allographer/query_builder/models/postgres/postgres_types.nim`
|
||||
- `src/allographer/query_builder/models/postgres/postgres_exec.nim`
|
||||
- `src/allographer/query_builder/models/mysql/mysql_exec.nim`
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_exec.nim`
|
||||
- 現在の SurrealDB 実装
|
||||
- `src/allographer/query_builder/models/surreal/surreal_types.nim`
|
||||
- `src/allographer/query_builder/models/surreal/surreal_exec.nim`
|
||||
- `src/allographer/query_builder/models/surreal/surreal_open.nim`
|
||||
- `src/allographer/query_builder/libs/surreal/surreal_impl.nim`
|
||||
- `src/allographer/query_builder/libs/surreal/surreal_lib.nim`
|
||||
- `src/allographer/schema_builder/queries/surreal/schema_utils.nim`
|
||||
- 既存ドキュメント
|
||||
- `documents/surrealdb/query_builder.md`
|
||||
- `documents/surrealdb/schema_builder.md`
|
||||
- SurrealDB v3 公式ドキュメント
|
||||
- Parameters: https://surrealdb.com/docs/surrealql/parameters
|
||||
- HTTP Protocol (`POST /sql`): https://surrealdb.com/docs/surrealdb/integration/http
|
||||
- Transactions: https://surrealdb.com/docs/surrealql/transactions
|
||||
- Security summary (parameterized query): https://surrealdb.com/docs/surrealdb/security/summary
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
|
||||
### 1. 前提整理
|
||||
|
||||
SurrealDB v3 には PostgreSQL や MySQL のような server-side prepared statement を、そのまま同じ意味で `/sql` HTTP 経由に載せる公開 API は見当たらない。一方で、以下は公式仕様として確認できる。
|
||||
|
||||
- `/sql` は 1 回の POST で複数の SurrealQL 文を `;` 区切りで送れる
|
||||
- parameter は `LET $x = ...;` で定義して後続文から参照できる
|
||||
- SurrealDB 3.x では `$x = ...` だけの旧記法は deprecated で、`LET` を使う必要がある
|
||||
- statement はデフォルトで文ごとに transaction 境界を持つ。複数文を原子的に扱いたい場合は `BEGIN TRANSACTION; ...; COMMIT TRANSACTION;` が必要
|
||||
|
||||
したがって、このブランチでの `prepare()` は「DB が statement を事前コンパイルして保持する API」ではなく、「SQL template の正規化・再利用・安全な値埋め込み・単一 request 化を行う client-side prepared statement」として設計する。
|
||||
|
||||
### 2. 公開 API 方針
|
||||
|
||||
利用者体験は既存 driver に寄せる。第一候補は次の API である。
|
||||
|
||||
```nim
|
||||
let stmt = surreal.prepare("SELECT * FROM user WHERE id = ?")
|
||||
let rows = await stmt.get(@["user:alice"])
|
||||
let row = await stmt.first(%*[1])
|
||||
await stmt.exec(@["value"])
|
||||
await stmt.close()
|
||||
await surreal.clearStmtCache()
|
||||
await surreal.withConn(proc(ctx: SurrealPreparedContext): Future[void] {.async.} =
|
||||
discard await stmt.first(ctx, @["user:alice"])
|
||||
)
|
||||
```
|
||||
|
||||
採用方針:
|
||||
|
||||
- `prepare`
|
||||
- `get`
|
||||
- `first`
|
||||
- `exec`
|
||||
- `close`
|
||||
- `flushStmt`
|
||||
- `clearStmtCache`
|
||||
- `withConn`
|
||||
- `SurrealPreparedContext`
|
||||
|
||||
初期スコープでは `getPlain` / `firstPlain` は後回し候補とする。SurrealDB の戻り値は object 中心で列定義が RDB より弱く、列順の意味が薄いため、まずは既存の `JsonNode` 中心 API を優先する。
|
||||
|
||||
### 3. 実装モデル
|
||||
|
||||
prepared statement 実行時は、毎回次の 3 段階で 1 リクエストを組み立てる。
|
||||
|
||||
1. 元 SQL の `?` を `$a`, `$b`, ... に変換する
|
||||
2. 各引数を `LET $a = ...; LET $b = ...;` に変換する
|
||||
3. `LET` 群と本体 SQL を `;` で連結して `/sql` に 1 回だけ POST する
|
||||
|
||||
概念的には次の形になる。
|
||||
|
||||
```sql
|
||||
LET $a = "user:alice";
|
||||
LET $b = <datetime>"2026-04-03T00:00:00Z";
|
||||
SELECT * FROM user WHERE id = $a AND created_at >= $b;
|
||||
```
|
||||
|
||||
この方式なら、すでに `surreal_lib.nim` にある `questionToDaller` と `dbFormat(queryString, args: JsonNode)` の思想をそのまま再利用できる。prepared statement 専用に別の埋め込み規則を増やす必要はない。
|
||||
|
||||
### 4. 型設計
|
||||
|
||||
既存 driver に合わせ、プール単位 cache を持つ。
|
||||
|
||||
```nim
|
||||
type SurrealPreparedEntry = ref object
|
||||
sql*: string
|
||||
normalizedSql*: string
|
||||
nArgs*: int
|
||||
refCount*: int
|
||||
lastUsedAt*: int64
|
||||
|
||||
type Connections* = ref object
|
||||
conns*: seq[Connection]
|
||||
timeout*: int
|
||||
waiters*: Deque[Future[void]]
|
||||
preparedCache*: Table[string, SurrealPreparedEntry]
|
||||
|
||||
type SurrealPreparedContext* = ref object
|
||||
owner*: SurrealConnections
|
||||
connI*: int
|
||||
|
||||
type SurrealPreparedStatement* = ref object
|
||||
owner*: SurrealConnections
|
||||
entry*: SurrealPreparedEntry
|
||||
sql*: string
|
||||
isClosed*: bool
|
||||
```
|
||||
|
||||
ポイント:
|
||||
|
||||
- Surreal は HTTP `/sql` なので physical statement handle は持たない
|
||||
- cache の目的は server resource 再利用ではなく、template 正規化と API 一貫性の維持
|
||||
- `close()` は logical close とし、cache entry 自体は `flushStmt` / `clearStmtCache` まで残す
|
||||
|
||||
### 5. 実行結果の扱い
|
||||
|
||||
`/sql` の戻り値は statement ごとの配列なので、prepared statement では「最後の本体 SQL の結果」を利用者へ返す。
|
||||
|
||||
- `get`: 最終 statement の `result` を `seq[JsonNode]` で返す
|
||||
- `first`: `get` の先頭 1 件を `Option[JsonNode]` で返す
|
||||
- `exec`: 最終 statement の status を確認し、副作用系として扱う
|
||||
- `LET` statement の result は利用者に見せない
|
||||
|
||||
ただし error 判定は最後の statement だけでなく全 statement を走査する。`LET` で失敗した場合でも早期に `DbError` を返す必要がある。
|
||||
|
||||
### 6. `withConn` を残す理由
|
||||
|
||||
HTTP `/sql` だけを見ると、prepared statement は connection 固定が必須ではない。しかし API 統一のため、`withConn` は残す価値がある。
|
||||
|
||||
- 既存 driver と同じ呼び出しパターンを維持できる
|
||||
- SurrealDB の parameter は connection/session scope を持ちうるため、将来 RPC 対応や session 前提最適化へ進む余地を残せる
|
||||
- 現行の connection pool 制御と整合する
|
||||
|
||||
ただし初期実装では、`withConn` の主目的は性能よりも API 一貫性になる。
|
||||
|
||||
### 7. multi-statement 利用の境界
|
||||
|
||||
このブランチで使う multi-statement は「`LET` 群 + 本体 SQL」を 1 リクエストに束ねる用途を主眼とする。
|
||||
|
||||
- `prepare("UPDATE ...")` は 1 つの本体 statement を持つ
|
||||
- `LET` は前置 statement
|
||||
- 複数の業務 statement を 1 個の prepared statement に詰め込む設計は初期スコープ外
|
||||
|
||||
理由:
|
||||
|
||||
- 既存 prepared statement API も基本は 1 SQL を対象にしている
|
||||
- SurrealDB では複数 statement が自動で 1 transaction にはならない
|
||||
- 2 個以上の副作用文を 1 本の prepared statement に許すと、`exec()` の返り値・失敗時意味論・テストが急に複雑になる
|
||||
|
||||
もし将来 multi-statement business query を扱うなら、別 API として `prepareBatch` あるいは transaction helper を検討する。
|
||||
|
||||
### 8. 実装結果
|
||||
|
||||
- `surreal_types.nim` に prepared 関連型を追加し、`Connections` に `preparedCache` を持たせた
|
||||
- `surreal_lib.nim` に prepared SQL 生成の共通関数を追加した
|
||||
- `surreal_exec.nim` に `prepare` / `get` / `first` / `exec` / `close` / `flushStmt` / `clearStmtCache` / `withConn` を追加した
|
||||
- `tests/surrealdb/test_prepared_statement.nim` を追加した
|
||||
- `documents/surrealdb/prepared_statement.md` と既存ドキュメントを同期した
|
||||
|
||||
### 9. テスト方針
|
||||
|
||||
- `prepare("SELECT ... WHERE id = ?")` で `get` / `first` が通ること
|
||||
- `prepare("UPDATE ... SET name = ? WHERE id = ?")` で `exec` が通ること
|
||||
- `close()` 後に同じ SQL を `prepare()` し直しても再利用できること
|
||||
- `clearStmtCache()` 後に再度 `prepare()` できること
|
||||
- `withConn` 内の `ctx` overload が通ること
|
||||
- `JsonNode` 引数で `JInt` / `JString` / `JNull` / `JArray` / `JObject` が `LET` 経由で正しく扱えること
|
||||
- record id や datetime 文字列の変換が既存 `dbFormat` 規則と一致すること
|
||||
|
||||
### 10. 現時点の結論
|
||||
|
||||
SurrealDB v3 版 prepared statement は「server-side prepare の移植」ではなく、「既存 prepared statement API と揃った公開インターフェースを、SurrealDB の `LET` と `/sql` multi-statement で安全に再現する」方針が最も自然である。
|
||||
|
||||
この方針なら `SYW-ARCH-001` に従って公開 API を共通化しつつ、SurrealDB 固有差分は `libs/surreal` と `models/surreal` に閉じ込められる。
|
||||
@@ -0,0 +1,271 @@
|
||||
---
|
||||
description: 340-aged-connectionブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
340-aged-connection コネクションプール改善調査
|
||||
===
|
||||
|
||||
このブランチで実装することは以下の通りです。
|
||||
- 既存の SQLite / PostgreSQL / MySQL / MariaDB のコネクションプール実装を調査し、長寿命化した接続や壊れた接続を再利用し続けるリスクを洗い出す
|
||||
- https://please-sleep.cou929.nu/go-sql-db-connection-pool.html の `sql.DB` の考え方を参考に、allographer のプールへ取り込める改善点を整理する
|
||||
- 「使えないコネクションは破棄してから張り直す」方針を、公開 API を壊さず driver 内へ閉じ込めて実装できる設計に落とし込む
|
||||
- prepared statement cache / columnTypeCache / transaction 中の接続固定など、再接続時に影響する内部状態の整合条件を明確化する
|
||||
- 調査結果を踏まえて、各 driver の pool slot を差し替える実装へ進める
|
||||
|
||||
## 進捗
|
||||
- [x] `.cursor/rules/project.mdc` / `.cursor/rules/branch.mdc` を確認した
|
||||
- [x] 現在のブランチ名 `340-aged-connection` に対応するブランチルールを新規作成した
|
||||
- [x] `src/allographer/query_builder/models/*/*_open.nim` を確認し、各 driver の接続生成方式を調査した
|
||||
- [x] `src/allographer/query_builder/models/*/*_exec.nim` を確認し、接続取得・返却・待機方式を調査した
|
||||
- [x] `src/allographer/query_builder/libs/*/*_impl.nim` を確認し、接続異常時の現在の振る舞いを調査した
|
||||
- [x] 参考記事の `sql.DB` の設計要点を読み、allographer へ適用できる論点を整理した
|
||||
- [x] 各 driver 共通で使える `ConnectionHealth` / `ConnectionFactory` 相当の内部構造を設計し、`Connections` に lifetime / factory 情報を持たせた
|
||||
- [x] 接続借用時の寿命判定・再生成手順を driver ごとに実装した
|
||||
- [x] prepared statement cache の slot 単位無効化を実装し、transaction 中は既存の固定接続をそのまま使う方針を維持した
|
||||
- [x] 影響範囲に応じた回帰テストを追加した
|
||||
|
||||
## 参考資料
|
||||
- 参考記事
|
||||
- https://please-sleep.cou929.nu/go-sql-db-connection-pool.html
|
||||
- 現在の接続初期化
|
||||
- `src/allographer/query_builder/models/postgres/postgres_open.nim`
|
||||
- `src/allographer/query_builder/models/sqlite/sqlite_open.nim`
|
||||
- `src/allographer/query_builder/models/mysql/mysql_open.nim`
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_open.nim`
|
||||
- 現在の接続プール管理
|
||||
- `src/allographer/query_builder/models/postgres/postgres_exec.nim`
|
||||
- `src/allographer/query_builder/models/sqlite/sqlite_exec.nim`
|
||||
- `src/allographer/query_builder/models/mysql/mysql_exec.nim`
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_exec.nim`
|
||||
- 現在の型定義
|
||||
- `src/allographer/query_builder/models/postgres/postgres_types.nim`
|
||||
- `src/allographer/query_builder/models/sqlite/sqlite_types.nim`
|
||||
- `src/allographer/query_builder/models/mysql/mysql_types.nim`
|
||||
- `src/allographer/query_builder/models/mariadb/mariadb_types.nim`
|
||||
- 接続利用時の低レベル実装
|
||||
- `src/allographer/query_builder/libs/postgres/postgres_impl.nim`
|
||||
- `src/allographer/query_builder/libs/sqlite/sqlite_impl.nim`
|
||||
- `src/allographer/query_builder/libs/mysql/mysql_impl.nim`
|
||||
- `src/allographer/query_builder/libs/mariadb/mariadb_impl.nim`
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
|
||||
### 1. 現在の実装で見えたこと
|
||||
|
||||
allographer のプールは、全 driver とも `dbOpen` 時に `maxConnections` 本を先に開いて配列へ保持する方式になっている。
|
||||
|
||||
- PostgreSQL: `postgres_open.nim` で全接続を eager に生成し、`createdAt` を持つが、寿命判定にはまだ使っていない
|
||||
- SQLite: `sqlite_open.nim` でも同様に eager open で、`createdAt` は保持しているが再接続用途には未使用
|
||||
- MySQL: `mysql_open.nim` で eager open。`ConnectionInfo` はあるため再接続情報は保持しやすい
|
||||
- MariaDB: `mariadb_open.nim` も eager open。`ConnectionInfo` はある
|
||||
|
||||
接続取得は、PostgreSQL / SQLite / MariaDB は waiter キューで通知ベース、MySQL はまだ `sleepAsync(10)` ポーリングで待っている。
|
||||
|
||||
一方で、どの driver でも「借り出す前にその接続が寿命切れか」「壊れていないか」を判定して、不要なら捨てて張り直す仕組みはまだない。
|
||||
|
||||
### 2. 参考記事から取り込める設計要点
|
||||
|
||||
参考記事の `sql.DB` で特に重要だった論点は次の 5 点。
|
||||
|
||||
1. idle 接続と利用中接続を分けて扱う
|
||||
2. 接続取得時に idle 接続を再利用し、必要なら新規接続する
|
||||
3. 待ち行列を持ち、上限到達時は空き通知で待つ
|
||||
4. `SetConnMaxLifetime` / `SetConnMaxIdleTime` 相当で、古い接続を使い回しすぎない
|
||||
5. 使えない接続は `ErrBadConn` 相当として捨て、再試行できるようにする
|
||||
|
||||
allographer は 1. と 3. は一部できているが、4. と 5. が弱い。今回のブランチの主眼はここに置くのが自然。
|
||||
|
||||
### 3. 今のプールで改善余地が大きい箇所
|
||||
|
||||
#### 3.1 aged connection を判定する仕組みがない
|
||||
|
||||
各 driver の `Connection` には `createdAt` があるが、現在は接続寿命の上限判定に使っていない。
|
||||
|
||||
そのため、
|
||||
|
||||
- DB サーバ側 `wait_timeout`
|
||||
- TCP 切断
|
||||
- 長時間放置された idle 接続
|
||||
- LB / proxy 配下でのコネクション寿命超過
|
||||
|
||||
といった要因で「見た目はプール内にあるが、実際にはもう使えない接続」を抱え続ける可能性がある。
|
||||
|
||||
特に MySQL は `mysql_impl.nim` の各所で `assert conn.ping == 0` を前提にしており、壊れた接続に対して graceful に「捨てて張り直す」制御へ入る前に異常化しやすい。
|
||||
|
||||
#### 3.2 bad connection を pool slot 単位で交換できない
|
||||
|
||||
現状は `self.pools.conns[i].conn` をそのまま実行系へ渡しており、途中で「この接続は再利用不可」と判断しても、その slot の中身を閉じて新しい接続に差し替える共通処理がない。
|
||||
|
||||
必要なのは次のような流れである。
|
||||
|
||||
1. 接続借用前に寿命・健全性を判定する
|
||||
2. 異常ならその slot の接続を close する
|
||||
3. 同じ slot に新しい接続を張り直す
|
||||
4. その slot にぶら下がる prepared statement 状態を無効化する
|
||||
5. その後でクエリ本体へ進む
|
||||
|
||||
今は 2. から 4. の共通導線が存在しない。
|
||||
|
||||
#### 3.3 reconnect に必要な情報が driver ごとに不揃い
|
||||
|
||||
MySQL / MariaDB は `ConnectionInfo` を持つが、PostgreSQL / SQLite の `Connections` には再接続用の接続情報が保存されていない。
|
||||
|
||||
したがって共通の「壊れた slot を再接続する」設計を入れるには、少なくとも内部的には各 driver の `Connections` に factory 情報を保持させる必要がある。
|
||||
|
||||
例:
|
||||
|
||||
- PostgreSQL: database / user / password / host / port / non-blocking 設定
|
||||
- SQLite: database path
|
||||
- MySQL / MariaDB: 既存 `ConnectionInfo` を `Connections` から参照できる形へ統一
|
||||
|
||||
#### 3.4 prepared statement cache が再接続で壊れうる
|
||||
|
||||
PostgreSQL / MySQL / MariaDB / SQLite は SQL 単位 cache を持ちつつ、物理 statement handle は conn index ごとに保持している。
|
||||
|
||||
このため slot `i` の接続を捨てて張り直すなら、少なくとも slot `i` に紐づく prepared 情報はクリアしないといけない。
|
||||
|
||||
- PostgreSQL: `stmtNames[i]` を空に戻す必要がある
|
||||
- MySQL / MariaDB: `stmts[i]` を close して nil に戻す必要がある
|
||||
- SQLite: `stmts[i]` を finalize して nil に戻す必要がある
|
||||
|
||||
再接続だけして cache を残すと、「古い接続に prepare されたハンドルを新しい接続で再利用しようとする」不整合になる。
|
||||
|
||||
#### 3.5 transaction 中は自動再接続の扱いを厳格に分ける必要がある
|
||||
|
||||
通常クエリでは bad connection を破棄して retry できる余地があるが、transaction 中は話が変わる。
|
||||
|
||||
- `BEGIN` 後の接続が死んだら、その transaction 文脈は失われる
|
||||
- 同じ API 呼び出しを別接続へ載せ替えても、意味上は同じ transaction ではない
|
||||
|
||||
したがって transaction 中は、
|
||||
|
||||
- 自動再接続して継続してよい場面
|
||||
- 明示的に `DbError` を返して transaction abort を促す場面
|
||||
|
||||
を分ける必要がある。初期方針としては「transaction 中は bad connection を検知したら再接続はしても自動リトライしない」が安全。
|
||||
|
||||
### 4. このブランチで採るべき基本方針
|
||||
|
||||
#### 方針A: pool slot を生かし、接続だけ差し替える
|
||||
|
||||
公開 API を崩さないため、接続プール自体を大きく作り変えるより、既存の `conns[i]` 配列を維持したまま「slot 内の接続実体だけ交換する」方がよい。
|
||||
|
||||
これにより、
|
||||
|
||||
- `getFreeConn` / `returnConn` の外形は維持できる
|
||||
- prepared cache の添字も維持できる
|
||||
- driver 差分を `*_open.nim` / `*_exec.nim` / `*_types.nim` に閉じ込めやすい
|
||||
|
||||
#### 方針B: 借用時に寿命判定、実行失敗時に bad connection 判定を入れる
|
||||
|
||||
初回実装は、次の 2 箇所で接続再生成を行うのがよい。
|
||||
|
||||
1. `getFreeConn` で idle 接続を貸し出す直前
|
||||
2. クエリ / prepare 実行中に「接続断」と判断できる例外を受けた直後
|
||||
|
||||
1 は proactive、2 は reactive な対策である。両方あると「古い接続をなるべく使わない」と「想定外に死んだ接続をすぐ交換する」の両立ができる。
|
||||
|
||||
#### 方針C: ping 常用よりも age/lifetime と error 分類を優先する
|
||||
|
||||
毎回 ping してから貸し出す設計は単純だが、MySQL/MariaDB では同期的な `ping` が待機コストや event loop 停止要因になりうる。
|
||||
|
||||
そのため初手は、
|
||||
|
||||
- `createdAt` ベースの `maxLifetime`
|
||||
- 必要なら `lastUsedAt` ベースの `maxIdleTime`
|
||||
- driver 固有の bad connection エラー分類
|
||||
|
||||
を優先し、health check は「寿命超過時のみ」または「失敗後の再接続確認時のみ」に寄せるほうがよい。
|
||||
|
||||
### 5. 具体的な内部設計案
|
||||
|
||||
#### 5.1 `Connections` に再接続用メタデータを持たせる
|
||||
|
||||
各 driver の `Connections` に、少なくとも次を持たせる。
|
||||
|
||||
- 接続生成に必要な情報
|
||||
- `maxLifetimeSeconds`
|
||||
- `maxIdleSeconds`
|
||||
- `lastUsedAt` または `returnedAt`
|
||||
- 必要なら `isBroken`
|
||||
|
||||
既存 `createdAt` はそのまま使う。
|
||||
|
||||
#### 5.2 `replaceConn(i)` 相当の内部 proc を driver ごとに用意する
|
||||
|
||||
責務:
|
||||
|
||||
1. slot `i` の古い接続を close
|
||||
2. slot `i` に紐づく prepared state を破棄
|
||||
3. 新しい物理接続を開く
|
||||
4. `createdAt` / `isBusy` / `lastUsedAt` を初期化
|
||||
|
||||
この proc は driver ごとの差分が大きいので、共通化しすぎず各 driver 実装へ置く。
|
||||
|
||||
#### 5.3 `getFreeConn` に「借り出し前の再生成」フックを入れる
|
||||
|
||||
通知ベース待機の有無に関係なく、空き slot を見つけたタイミングで次を行う。
|
||||
|
||||
1. `isBusy = true`
|
||||
2. `shouldRecycle(conn)` を判定
|
||||
3. true なら `replaceConn(i)`
|
||||
4. 成功した slot を返す
|
||||
|
||||
ここで失敗した場合は、その slot を unusable のまま返さず、別 slot 探索または例外へ進める。
|
||||
|
||||
#### 5.4 実行ラッパで bad connection を捕捉して slot を再初期化する
|
||||
|
||||
`query`, `exec`, `prepare` など接続を直接使う箇所は多いので、driver ごとに
|
||||
|
||||
- `withBorrowedConn`
|
||||
- `runWithConnRecovery`
|
||||
|
||||
のような内部ラッパへ寄せる余地がある。
|
||||
|
||||
このラッパは、
|
||||
|
||||
1. 実行
|
||||
2. bad connection 例外なら slot を破棄
|
||||
3. 非 transaction 時のみ 1 回だけ再接続して再試行
|
||||
|
||||
を担当する。
|
||||
|
||||
### 6. 影響の大きさから見た優先順位
|
||||
|
||||
優先度 P0:
|
||||
- MySQL / MariaDB / PostgreSQL / SQLite で「壊れた接続を破棄して張り直す」最小導線を作る
|
||||
- prepared statement の conn index 単位 invalidation を入れる
|
||||
- transaction 中は自動リトライしない
|
||||
|
||||
優先度 P1:
|
||||
- `maxLifetime` を導入して aged connection の再利用を減らす
|
||||
- `maxIdleTime` を導入する
|
||||
- MySQL の pool wait を通知ベースへ寄せる
|
||||
|
||||
優先度 P2:
|
||||
- idle cleaner の別タスク化
|
||||
- lazy open 化
|
||||
- 統計情報の公開
|
||||
|
||||
今回のブランチ名と依頼内容からすると、まずは P0 と P1 の前半までを対象にするのが適切。
|
||||
|
||||
### 7. 現時点の結論
|
||||
|
||||
現在のコネクションプールで最も改善効果が大きいのは、「接続をただ保持する」のではなく、「貸し出し時と失敗時に、その接続がまだ使えるかを判断し、ダメなら slot ごと再初期化する」層を追加することだと判断した。
|
||||
|
||||
参考記事の `sql.DB` のうち、allographer にいま不足しているのは主に次の部分である。
|
||||
|
||||
- 接続寿命管理
|
||||
- bad connection の廃棄と再試行
|
||||
- idle connection の掃除
|
||||
|
||||
### 8. 実装後の方針
|
||||
|
||||
- pool ごとに `maxConnectionLifetime` / `maxConnectionIdleTime` を持たせ、既定値は 300 秒にした
|
||||
- 借用時に `createdAt` / `lastUsedAt` を見て aged connection を `refreshConn` で差し替える
|
||||
- 差し替え時は prepared statement cache を slot 単位で無効化し、古い statement handle を新しい physical connection に持ち込まない
|
||||
- transaction 中は既存の接続固定を優先し、途中で別 slot に載せ替える振る舞いは入れない
|
||||
|
||||
特に今回の要望である「コネクションが使えない時は破棄してから、新しくコネクションを張り直す」は、driver ごとの `replaceConn(i)` と、prepared cache invalidation を軸に設計するのが最も自然である。
|
||||
|
||||
一方で transaction 中の自動再接続は意味論を壊しやすいため、通常クエリと同列には扱わない。ここは安全側に倒し、まずは「通常クエリのみ 1 回まで回復可能、transaction 中は即エラー」を初期設計とする。
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
description: fixブランチでの開発時に読み込む
|
||||
alwaysApply: false
|
||||
---
|
||||
fix ブランチルール
|
||||
===
|
||||
|
||||
|
||||
allographer自体の改善
|
||||
|
||||
- `getFreeConn` がタイムアウトすると `errorConnectionNum` を返すが、その後の `getRowPlain` / `exec` / `getAllRows` は例外ではなくそのまま `return` している。結果として、更新できていなくてもアプリ側では成功レスポンスを返せてしまう。
|
||||
- prepared statement は接続ごとに lazy prepare されるが、プール単位の cache がない。高頻度 SQL が複数接続に散ると、prepare の局所性が弱い。
|
||||
- `close()` は使った接続全てに `DEALLOCATE` を送る実装なので、短寿命の prepared statement を多用すると warm 状態を毎回捨てる。
|
||||
- DML 実行時の列型取得は現在は table 単位 cache になっているが、bulk update 用の raw SQL / prepared SQL を多用する場合は、そもそも query builder を通さない高速経路の価値が高い。
|
||||
|
||||
改善方針:
|
||||
- `errorConnectionNum` に到達したときは no-op ではなく `DbError` を投げる。silent failure は benchmark だけでなく通常アプリでも危険。
|
||||
- `Connections` に SQL 単位の prepared cache を持たせ、同一 SQL の physical prepare を接続ごとに 1 回へ寄せる。
|
||||
- `close()` は論理 close に寄せ、物理 `DEALLOCATE` は明示 API に分離する。steady-state の benchmark では prepared state を維持できるようにする。
|
||||
- 接続固定 API、あるいは transaction / prepared context を足し、同一 logical operation の複数クエリを同じ接続に寄せられるようにする。
|
||||
- bulk update 用に `raw(...).exec()` だけでなく、prepared raw SQL を再利用できる経路を整える。今回のベンチマーク用途では query builder の汎用性よりも固定 SQL の再利用性が効く。
|
||||
|
||||
## 進捗
|
||||
- [x] `errorConnectionNum` 到達時の silent return を `DbError` へ置換(PostgreSQL / MySQL / MariaDB / SQLite)
|
||||
- [x] PostgreSQL に SQL 単位の prepared cache (`Connections.preparedCache`) を追加
|
||||
- [x] PostgreSQL prepared `close()` を論理 close 化し、`flushStmt(sql)` / `clearStmtCache()` を追加
|
||||
- [x] PostgreSQL に `withConn` / `PostgresPreparedContext` を追加し、prepared `first/get/exec` の `ctx` overload を追加
|
||||
- [x] `example/benchmark.nim` を prepared cold/warm 計測へ分離し、warm 側で statement 再利用経路を追加
|
||||
- [x] PostgreSQL prepared statement テストに論理 close / cache clear / prepared context ケースを追加
|
||||
- [x] pool wait テストに pool size 0 時の `DbError` 検証を追加(PostgreSQL / MariaDB / SQLite)
|
||||
|
||||
## 調査結果・設計まとめ
|
||||
- `errorConnectionNum` の no-op return は、DML 失敗を呼び出し側が検知できないため、全 RDB driver で同じ失敗モードを発生させていた。今回 `DbError` へ統一し、失敗を上位へ伝播させる。
|
||||
- prepared cache はまず PostgreSQL に導入した。理由は `PREPARE/DEALLOCATE` のネットワーク往復コストがベンチで支配的だったため。
|
||||
- `close()` の意味を「ハンドルの寿命」と「物理 prepared state の寿命」で分離し、warm 計測で state を保持できるようにした。
|
||||
@@ -0,0 +1,201 @@
|
||||
---
|
||||
alwaysApply: true
|
||||
---
|
||||
プロジェクトルール
|
||||
===
|
||||
|
||||
## 0. 規範表現(RFC 2119)と Lint方針
|
||||
|
||||
このドキュメントの規範キーワードは以下の意味で扱う。
|
||||
- **MUST**: 必須。違反はレビューで差し戻し対象
|
||||
- **SHOULD**: 強い推奨。逸脱時は理由を記録する
|
||||
- **MAY**: 任意。採用時は周辺整合性を優先する
|
||||
- **MUST NOT**: 禁止。明示的な合意なしに導入してはならない
|
||||
|
||||
各ルールには Rule ID を付与する。
|
||||
- 形式: `SYW-<DOMAIN>-<NNN>`
|
||||
- 併記形式: `[ID][LEVEL][CHECK]`
|
||||
- `CHECK` の意味:
|
||||
- `grep`: 文字列や配置で確認しやすい
|
||||
- `manual`: レビューで確認する
|
||||
- `test`: テストで確認する
|
||||
- `doc`: 文書整合の確認
|
||||
|
||||
本文とルール一覧が矛盾した場合は、ルール一覧を優先する。
|
||||
|
||||
### 0.1 ルール一覧(要約)
|
||||
|
||||
| ID | LEVEL | CHECK | 対象 | 要件(要約) |
|
||||
|---|---|---|---|---|
|
||||
| SYW-GOAL-001 | MUST | manual | 全体 | 本リポジトリは Nim による RDB 向け query builder / migration / seeder を中核成果物とする |
|
||||
| SYW-GOAL-002 | MUST | manual | API | Laravel Query Builder / Orator に学んだ直感的で連鎖可能な API を保つ |
|
||||
| SYW-ARCH-001 | MUST | manual | 設計 | DB差分は driver 実装へ閉じ込め、公開 API は可能な限り共通化する |
|
||||
| SYW-ARCH-002 | MUST NOT | manual | 設計 | 一時的な場当たり分岐を公開 API に持ち込まない |
|
||||
| SYW-QB-001 | MUST | test | Query Builder | SQL 生成は決定的で、同じ入力に対し同じクエリ文字列・束縛順序を返す |
|
||||
| SYW-QB-002 | MUST | manual | Query Builder | メソッドチェーンは可読性を優先し、Laravel/Orator 利用者が推測可能な命名を採用する |
|
||||
| SYW-QB-003 | MUST NOT | manual | Query Builder | RDB 向け API に暗黙の破壊的副作用を持たせない |
|
||||
| SYW-SCHEMA-001 | MUST | test | Migration | migration は冪等に再実行判定でき、履歴テーブルと整合する |
|
||||
| SYW-SCHEMA-002 | MUST | test | Schema Builder | create / alter / drop は DB ごとの差異を吸収しつつ意味論を維持する |
|
||||
| SYW-SEED-001 | MUST | test | Seeder | seeder は空判定または条件判定に基づき安全に再実行できる |
|
||||
| SYW-COMPAT-001 | MUST | manual | 互換性 | 既存公開 API の破壊的変更は、必要性・移行方針・影響範囲を文書化する |
|
||||
| SYW-TEST-001 | MUST | test | テスト | 修正した機能レイヤに対応するテストを追加または更新する |
|
||||
| SYW-TEST-002 | SHOULD | test | テスト | DB 横断の共通仕様は複数 driver で検証する |
|
||||
| SYW-DOC-001 | MUST | doc | ドキュメント | README / documents / ルール文書は、公開仕様変更時に同期する |
|
||||
| SYW-SCOPE-001 | MUST NOT | manual | スコープ | ORM 全面実装を前提にせず、query builder・schema builder の完成度を優先する |
|
||||
|
||||
## 1. 目的・スコープ
|
||||
|
||||
### 1.1 達成目標
|
||||
|
||||
[SYW-GOAL-001][MUST][manual]
|
||||
このプロジェクトの達成目標は、**Nim 言語で Laravel の Query Builder / ORM 的な記述感と Python Orator の使いやすさを参考にした、RDB 向け query builder を実装・改善・保守すること**である。
|
||||
|
||||
[SYW-GOAL-002][MUST][manual]
|
||||
中核機能は以下の 3 系統である。
|
||||
- Query Builder
|
||||
- Migration / Schema Builder
|
||||
- Seeder
|
||||
|
||||
[SYW-GOAL-003][MUST][manual]
|
||||
利用者は「生 SQL を毎回手で組み立てなくても、読みやすいメソッドチェーンで安全に RDB を扱える」ことを期待している。実装判断は常にこの期待を優先する。
|
||||
|
||||
### 1.2 主要スコープ
|
||||
|
||||
[SYW-SCOPE-001][MUST][manual]
|
||||
主要スコープは以下である。
|
||||
- SQLite / PostgreSQL / MySQL / MariaDB などの RDB 向け query builder
|
||||
- create / alter / drop を扱う schema builder
|
||||
- migration 履歴管理
|
||||
- 初期データ投入用 seeder
|
||||
- 非同期実行を前提とした接続・実行モデル
|
||||
|
||||
[SYW-SCOPE-002][SHOULD][manual]
|
||||
既存コードベースに SurrealDB 実装が存在していても、判断に迷った場合はまず RDB 向け API 品質を優先する。
|
||||
|
||||
### 1.3 非スコープ
|
||||
|
||||
[SYW-SCOPE-003][MUST NOT][manual]
|
||||
以下は明示的な要件がない限り優先しない。
|
||||
- Active Record 的な重い ORM 機能の全面拡張
|
||||
- マジックに依存した暗黙変換の追加
|
||||
- driver ごとに大きく振る舞いが異なる独自 API の増殖
|
||||
|
||||
## 2. 設計原則
|
||||
|
||||
### 2.1 API 原則
|
||||
|
||||
[SYW-ARCH-001][MUST][manual]
|
||||
公開 API は driver 差分より先に、利用者の記述体験を基準に設計する。各 driver の都合は内部実装で吸収する。
|
||||
|
||||
[SYW-QB-002][MUST][manual]
|
||||
メソッド名・引数順・返り値は、Laravel Query Builder / Orator を知る利用者が高い確率で推測できる形を優先する。
|
||||
|
||||
[SYW-QB-003][MUST NOT][manual]
|
||||
`select`, `where`, `join`, `insert`, `update`, `delete`, `first`, `find`, `get` などの基本操作に、利用者が予期しない破壊的副作用を持ち込んではならない。
|
||||
|
||||
[SYW-COMPAT-001][MUST][manual]
|
||||
公開 API の破壊的変更を行う場合は、少なくとも以下を変更箇所に残す。
|
||||
- 何が壊れるか
|
||||
- なぜ必要か
|
||||
- 既存利用者の移行方法
|
||||
|
||||
### 2.2 実装分離
|
||||
|
||||
[SYW-ARCH-002][MUST NOT][manual]
|
||||
「特定 driver だけ通すための場当たり的 if 文」を上位 API 層へ散在させてはならない。分岐は generator / lib / model など責務のある層へ閉じ込める。
|
||||
|
||||
[SYW-ARCH-003][MUST][manual]
|
||||
責務分離の目安は以下とする。
|
||||
- 接続管理: `connection` 系
|
||||
- API 入口と共通操作: `query_builder` / `schema_builder`
|
||||
- DB 方言差分: `models/*/query/*`, `libs/*`
|
||||
- 実行・変換: `*_exec`, `*_types`, `*_query`
|
||||
|
||||
[SYW-ARCH-004][SHOULD][manual]
|
||||
新機能は、まず共通仕様を言語化してから driver 差分へ展開する。最初に 1 driver だけ特殊実装へ逃がさない。
|
||||
|
||||
## 3. Query Builder ルール
|
||||
|
||||
[SYW-QB-001][MUST][test]
|
||||
同じ builder 入力は、同じ SQL 文字列と同じ bind 順序を生成しなければならない。出力が非決定的になる変更は禁止する。
|
||||
|
||||
[SYW-QB-004][MUST][manual]
|
||||
where 句、join、group by、order by、limit / offset、paginate などの句の結合順は、利用者の記述順と SQL としての自然順を壊さない。
|
||||
|
||||
[SYW-QB-005][SHOULD][manual]
|
||||
値の埋め込みよりも、既存のプレースホルダ・エスケープ・型変換の仕組みを優先して使う。
|
||||
|
||||
[SYW-QB-006][MUST][test]
|
||||
`first` / `find` / `get` の空結果時の振る舞いは既存仕様を維持する。`Option` や空シーケンスの扱いを無言で変えてはならない。
|
||||
|
||||
[SYW-QB-007][SHOULD][manual]
|
||||
ログ出力やデバッグ補助を追加する場合は、通常経路の性能や API 純度を汚さない。
|
||||
|
||||
## 4. Migration / Schema Builder ルール
|
||||
|
||||
[SYW-SCHEMA-001][MUST][test]
|
||||
migration は履歴テーブルにより再実行可否を判定できなければならない。二重適用や履歴不整合を起こす変更は禁止する。
|
||||
|
||||
[SYW-SCHEMA-002][MUST][test]
|
||||
`create`, `alter`, `drop`, `rename`, `add column`, `change column`, `drop column` は、DB ごとの差異があっても利用者にとって一貫した意味を維持する。
|
||||
|
||||
[SYW-SCHEMA-003][MUST][manual]
|
||||
破壊的な schema 操作を追加・変更する場合は、ロールバック不能性やデータ移行影響を必ず確認する。
|
||||
|
||||
[SYW-SCHEMA-004][SHOULD][manual]
|
||||
column 定義 API は Laravel ライクな表現を優先し、命名やオプションの意味が直感に反しないようにする。
|
||||
|
||||
## 5. Seeder ルール
|
||||
|
||||
[SYW-SEED-001][MUST][test]
|
||||
seeder は再実行時に重複データを無制限に増やさないよう、空テーブル判定または列条件判定を用いる既存思想を維持する。
|
||||
|
||||
[SYW-SEED-002][SHOULD][manual]
|
||||
サンプル seeder と実装が乖離した場合は、利用者が最初に触れる example を優先して同期する。
|
||||
|
||||
## 6. テスト・品質保証
|
||||
|
||||
[SYW-TEST-001][MUST][test]
|
||||
コード変更時は、影響する最小レイヤのテストを追加または更新する。
|
||||
- query 生成を変えたら query テスト
|
||||
- schema 操作を変えたら schema / create_schema テスト
|
||||
- トランザクションを変えたら transaction テスト
|
||||
- utility を変えたら utils テスト
|
||||
|
||||
[SYW-TEST-002][SHOULD][test]
|
||||
共通 API の変更は、可能な限り SQLite だけでなく PostgreSQL / MySQL / MariaDB 系にも同種の検証を広げる。
|
||||
|
||||
[SYW-TEST-003][MUST][manual]
|
||||
テスト追加が難しい場合は、その理由と未検証リスクを作業記録へ残す。
|
||||
|
||||
## 7. ドキュメント・例・後方互換
|
||||
|
||||
[SYW-DOC-001][MUST][doc]
|
||||
公開仕様を変えたら、必要に応じて以下を同期する。
|
||||
- `README.md`
|
||||
- `documents/rdb/*.md`
|
||||
- `example/`
|
||||
- `.cursor/rules/*.mdc`
|
||||
|
||||
[SYW-DOC-002][SHOULD][doc]
|
||||
サンプルコードは「最短で使い方が伝わる」ことを優先し、実装とズレた古い記法を放置しない。
|
||||
|
||||
## 8. 実装判断の優先順位
|
||||
|
||||
[SYW-PRIO-001][MUST][manual]
|
||||
判断に迷った場合の優先順位は以下とする。
|
||||
1. 利用者にとって API が自然か
|
||||
2. 既存公開仕様を壊さないか
|
||||
3. 複数 RDB で意味が揃うか
|
||||
4. 内部実装が責務分離されているか
|
||||
5. テストと文書で保守できるか
|
||||
|
||||
## 9. このプロジェクトで避けること
|
||||
|
||||
[SYW-ANTI-001][MUST NOT][manual]
|
||||
以下は避ける。
|
||||
- 一部 driver だけを通すための公開 API 汚染
|
||||
- テストなしの SQL 生成変更
|
||||
- migration 履歴や seeder 冪等性を壊す変更
|
||||
- README と実装の乖離放置
|
||||
- Nim らしさよりも複雑なマジックを優先すること
|
||||
@@ -0,0 +1,17 @@
|
||||
SQLITE_HOST="/root/db.sqlite3"
|
||||
# SQLITE_HOST=":memory:"
|
||||
PG_URL="postgresql://user:pass@postgres:5432/database"
|
||||
MARIA_URL="mariadb://user:pass@mariadb:3306/database"
|
||||
MY_URL="mysql://user:pass@mysql:3306/database"
|
||||
SURREAL_HOST="http://surreal"
|
||||
SURREAL_PORT=8000
|
||||
DB_USER=user
|
||||
DB_PASSWORD=pass
|
||||
DB_DATABASE=database
|
||||
DB_MAX_CONNECTION=20
|
||||
DB_TIMEOUT=30
|
||||
|
||||
# Logging
|
||||
LOG_IS_DISPLAY=true
|
||||
LOG_IS_FILE=false
|
||||
LOG_DIR="/root/project/logs"
|
||||
@@ -0,0 +1,3 @@
|
||||
feature: feature*
|
||||
bug: hotfix*
|
||||
chore: chore*
|
||||
@@ -0,0 +1,19 @@
|
||||
name-template: 'v$NEXT_PATCH_VERSION'
|
||||
tag-template: 'v$NEXT_PATCH_VERSION'
|
||||
categories:
|
||||
- title: '🚀 Features'
|
||||
labels:
|
||||
- 'feature'
|
||||
- 'enhancement'
|
||||
- title: '🐛 Bug Fixes'
|
||||
labels:
|
||||
- 'fix'
|
||||
- 'bugfix'
|
||||
- 'bug'
|
||||
- title: '🧰 Maintenance'
|
||||
label: 'chore'
|
||||
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
|
||||
template: |
|
||||
## Changes
|
||||
|
||||
$CHANGES
|
||||
@@ -0,0 +1,33 @@
|
||||
name: Deploy API documents
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build-docs-deploy:
|
||||
env:
|
||||
NIM_VERSION: 1.4.4
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Cache choosenim
|
||||
id: cache-choosenim
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.choosenim
|
||||
key: ${{ runner.os }}-choosenim-${{ env.NIM_VERSION }}
|
||||
- uses: jiro4989/setup-nim-action@v1
|
||||
with:
|
||||
nim-version: ${{ env.NIM_VERSION }}
|
||||
- name: Build
|
||||
run: nimble install -Y
|
||||
- name: Generate documents
|
||||
run: nimble docs
|
||||
- name: Deploy
|
||||
uses: peaceiris/actions-gh-pages@v2.4.0
|
||||
env:
|
||||
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
PUBLISH_BRANCH: gh-pages
|
||||
PUBLISH_DIR: ./docs
|
||||
@@ -0,0 +1,61 @@
|
||||
name: Build and test Nim
|
||||
|
||||
# テストはPRだけ
|
||||
on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '*.md'
|
||||
- 'documents/*'
|
||||
|
||||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: "test"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
# WIP でジョブがスキップされてもCIが失敗した扱いにならないようにするため
|
||||
skip:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "Skip job"
|
||||
|
||||
# WIP がコミットメッセージに含まれているとジョブを起動しない
|
||||
before:
|
||||
runs-on: ubuntu-latest
|
||||
if: "! contains(github.event.head_commit.message, 'WIP')"
|
||||
steps:
|
||||
- run: echo "no WIP"
|
||||
|
||||
test-on-docker-nim:
|
||||
runs-on: ubuntu-latest
|
||||
needs: before
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
nim-version:
|
||||
- 2.0.16
|
||||
- 2.2.8
|
||||
env:
|
||||
NIM_VERSION: ${{ matrix.nim-version }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build docker image
|
||||
run: docker compose -f compose.test.yaml build app
|
||||
- name: Start dependencies
|
||||
run: docker compose -f compose.test.yaml up -d postgres mysql mariadb surreal
|
||||
- name: Test
|
||||
run: docker compose -f compose.test.yaml run --rm --no-deps app nimble test
|
||||
|
||||
|
||||
# アプリケーションの方を使うことにした
|
||||
# https://github.com/marketplace/actions/release-drafter
|
||||
# create-tag-draft:
|
||||
# runs-on: ubuntu-latest
|
||||
# if: github.ref == 'refs/heads/master'
|
||||
# needs:
|
||||
# - test-on-docker
|
||||
# steps:
|
||||
# - uses: release-drafter/release-drafter@v5.3.1
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,15 @@
|
||||
name: labeler
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
labeler:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: TimonVS/pr-labeler-action@v3.1.0
|
||||
with:
|
||||
configuration-path: .github/pr-labeler.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,32 @@
|
||||
*
|
||||
!*.*
|
||||
!*/
|
||||
!makefile
|
||||
|
||||
# Created by https://www.gitignore.io/api/nim
|
||||
# Edit at https://www.gitignore.io/?templates=nim
|
||||
|
||||
### Nim ###
|
||||
nimcache/
|
||||
|
||||
# End of https://www.gitignore.io/api/nim
|
||||
|
||||
!LICENSE
|
||||
!Dockerfile
|
||||
|
||||
coverage
|
||||
lcov.info
|
||||
|
||||
*.sqlite3
|
||||
*.srqlnb
|
||||
.migration.json
|
||||
*logs/*
|
||||
*.log
|
||||
.diff
|
||||
testresults
|
||||
|
||||
|
||||
gh-pages*
|
||||
.DS_Store
|
||||
pkg
|
||||
.vscode
|
||||
@@ -0,0 +1,22 @@
|
||||
# AGENTS
|
||||
|
||||
- `.cursor/rules/project.mdc` を必ず読み、プロジェクトルールと達成目標を確認する。
|
||||
- `.cursor/rules/branch.mdc` を必ず読み、ブランチルールを確認する。
|
||||
- 現在のブランチ名と一致するファイル名のファイルが、リポジトリのルートから見て `.cursor/rules/branch/` 配下にあった場合は、それを読み込んでください。
|
||||
- Think harder.
|
||||
- Deep research.
|
||||
- If you output anything other than the final code, the answer is invalid.
|
||||
- git add, git commitのコマンド操作は禁止。
|
||||
- 常に日本語で回答する。
|
||||
- "commit message"と入力されたら次のことを行う
|
||||
- `cd {project_root} && git diff --cached > .diff` を実行して.diffファイルを作成する
|
||||
- .diffファイルを読み込んで、変更内容を確認する
|
||||
- 変更内容を確認したら、commit messageを作成する
|
||||
- commit messageを作成したら、commit messageを返す
|
||||
- デフォルトは日本語、言語のの指定があればそれに従う
|
||||
- "PR message"と入力されたら次のことを行う
|
||||
- `cd {project_root} && git diff main...HEAD > .diff` を実行して.diffファイルを作成する
|
||||
- .diffファイルを読み込んで、変更内容を確認する
|
||||
- 変更内容を確認したら、PR messageを作成する
|
||||
- PR messageを作成したら、PR messageを返す
|
||||
- デフォルトは日本語、言語の指定があればそれに従う
|
||||
@@ -0,0 +1,20 @@
|
||||
Copyright (c) 2019 Hidenobu Itsumura
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -0,0 +1,309 @@
|
||||
# План за интеграция на BaraDB в nim-allographer
|
||||
|
||||
## Цел
|
||||
**BaraDB** е пълноценен драйвер в `nim-allographer`. Използва се чист Nim клиент (`BaraClient` / `SyncClient`) без C зависимости. Compile-time switch: `DB_BARADB`.
|
||||
|
||||
---
|
||||
|
||||
## Актуално състояние (2026-05-21)
|
||||
|
||||
### Статус по фази
|
||||
|
||||
| Фаза | Състояние | Бележки |
|
||||
|------|-----------|---------|
|
||||
| 1. Инфраструктура и типове | **ГОТОВО** | `env.nim`, `connection.nim`, `query_builder.nim`, `schema_builder.nim` — всичко е интегрирано |
|
||||
| 2. Query Builder — SQL генерация | **ГОТОВО** | `baradb_generator.nim` (397 реда), `baradb_builder.nim` (237 реда) — всички CRUD + агрегати |
|
||||
| 3. Query Builder — execution | **ГОТОВО** | `baradb_exec.nim` — всички операции работят, `insertId` използва `RETURNING` |
|
||||
| 4. Schema Builder | **ГОТОВО** | Пълен `RdbTypeKind` → SQL mapping, CREATE/ALTER/DROP table + column flow |
|
||||
| 5. Тестове и документация | **ГОТОВО** | `test_migration.nim` (8), `test_prepared_statement.nim` (8), `documents/migration.md` |
|
||||
|
||||
---
|
||||
|
||||
## Какво е ГОТОВО (не пипай)
|
||||
|
||||
### Wire Protocol клиент — `query_builder/libs/baradb/baradb_client.nim` (706 реда)
|
||||
- Pure Nim, async + sync, без C FFI
|
||||
- Binary serialization (big-endian) на всички `WireValue` типове (13 типа: fkNull..fkJson)
|
||||
- `mkQuery`, `mkQueryParams`, `mkAuth`, `mkPing` съобщения
|
||||
- `readQueryResponse` — парсва `mkData`, `mkComplete`, `mkError`, `mkReady`
|
||||
- Вграден `QueryBuilder` (fluent) за standalone употреба
|
||||
|
||||
### Connection Pool — `baradb_open.nim` + `baradb_exec.nim`
|
||||
- `dbOpen(Baradb, database, user, pass, host, port, maxConnections, timeout)`
|
||||
- `getFreeConn()` — async с deque-based waiters и timeout
|
||||
- `returnConn()` — освобождава и буди чакащи
|
||||
- Connection aging: `maxConnectionLifetime`, `maxConnectionIdleTime`
|
||||
- `refreshConn()`, `hasConnExpired()`, `openBaradbConn()`
|
||||
|
||||
### Query Builder — `baradb_query.nim` (386 реда)
|
||||
- Всички fluent методи: `select`, `table`, `distinct`, `join`, `leftJoin`
|
||||
- `where` / `orWhere` (string|int|float, bool, nil overloads)
|
||||
- `whereBetween`, `whereNotBetween`, `whereIn`, `whereNotIn`, `whereNull`
|
||||
- `groupBy`, `having`, `orderBy`, `limit`, `offset`
|
||||
- `raw(sql, args)` — суров SQL с параметри
|
||||
|
||||
### SQL Generator — `baradb_generator.nim` (397 реда)
|
||||
- Всички SQL конструкции: SELECT, INSERT, UPDATE, DELETE, агрегати
|
||||
- Quoting с backtick `` ` `` (MySQL/SQLite стил, **не** PostgreSQL `"`)
|
||||
- Placeholder: `?` (не `$1`)
|
||||
|
||||
### Execution — `baradb_exec.nim` (716 реда)
|
||||
- `get()`, `first()`, `find()` → `seq[JsonNode]` / `Option[JsonNode]`
|
||||
- `getPlain()`, `firstPlain()`, `findPlain()` → `seq[seq[string]]`
|
||||
- `insert(JsonNode)`, `insert(seq[JsonNode])`, `insertId(...)`
|
||||
- `update(JsonNode)`, `delete()`, `delete(id)`
|
||||
- `count()`, `min()`, `max()`, `avg()`, `sum()`
|
||||
- `begin()`, `commit()`, `rollback()` + `transaction` макро
|
||||
- Raw query варианти за всички операции
|
||||
- `seeder` шаблони
|
||||
|
||||
### ORM — споделен модул
|
||||
- `orm()` template работи с BaraDB
|
||||
|
||||
### Schema Code Generation — `usecases/baradb/create_schema.nim`
|
||||
- Четене от `information_schema` и генериране на Nim типове
|
||||
|
||||
---
|
||||
|
||||
## Какво трябва да се ДОИЗПИПА
|
||||
|
||||
### 1. Prepared Statements — САМО типове, НЯМА имплементация
|
||||
|
||||
**Текущо състояние:** Типовете са дефинирани в `baradb_types.nim`:
|
||||
- `BaradbPreparedEntry` — `sql`, `nArgs`, `refCount`, `lastUsedAt`
|
||||
- `BaradbPreparedContext` — `owner`, `connI`
|
||||
- `BaradbPreparedStatement` — `owner`, `entry`, `sql`, `nArgs`, `isClosed`
|
||||
- `preparedCache` е инициализиран в `baradb_open.nim`
|
||||
|
||||
**Липсващо:**
|
||||
- `prepare()` proc — да създава `BaradbPreparedStatement`
|
||||
- `ensureStmt()` — да кешира и преизползва statement-и
|
||||
- `get*()` / `exec*()` procs върху `BaradbPreparedStatement`
|
||||
- `withConn()` proc за context-based изпълнение
|
||||
- `flushStmt()` / `clearStmtCache()`
|
||||
|
||||
**Wire protocol поддръжка:** `baradb_client.nim` вече има `mkQueryParams` — параметризираните заявки са вградени на ниво протокол. Трябва само да се свърже от allographer слоя.
|
||||
|
||||
**Проблем:** В момента `baradb_exec.nim` използва **client-side string interpolation** (`formatSql` + `escapeSqlValue`) вместо server-side параметри. Това е по-малко сигурно и по-малко ефективно.
|
||||
|
||||
**Референция:** PostgreSQL драйверът има ~300 реда prepared statement код (`postgres_exec.nim` — `ensureStmt`, `preparedQuery`, `preparedExec`, `deallocate`, `flush`, `clearCache`, context API).
|
||||
|
||||
**План:**
|
||||
```
|
||||
Файл: baradb_exec.nim
|
||||
- [ ] prepare(sql: string): BaradbPreparedStatement
|
||||
- [ ] ensureStmt(conn, sql, nArgs): BaradbPreparedEntry — кеширане в preparedCache
|
||||
- [ ] preparedGet(stmt, args): seq[JsonNode] — използва mkQueryParams
|
||||
- [ ] preparedExec(stmt, args): void
|
||||
- [ ] withConn(pool, callback): auto — context-based
|
||||
- [ ] flushStmt(stmt): void — deallocate
|
||||
- [ ] clearStmtCache(): void
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. RETURNING id за INSERT — ✅ ИЗПРАВЕНО
|
||||
|
||||
**Статус:** `insertId` вече използва `INSERT ... RETURNING \`id\`` вместо `SELECT MAX`. BaraDB поддържа `RETURNING` — проверено в lexer/parser.
|
||||
|
||||
---
|
||||
|
||||
### 3. Schema Builder — Column Type Mapping ✅ ИЗПРАВЕНО
|
||||
|
||||
**Статус:** Пълен `RdbTypeKind` → SQL mapping е имплементиран в `create_column_query.nim` (~350 реда):
|
||||
- `rdbIncrements` → `SERIAL PRIMARY KEY`
|
||||
- `rdbInteger` → `INTEGER` (+ auto-increment → `SERIAL`)
|
||||
- `rdbBigInteger` → `BIGINT` (+ auto-increment → `BIGSERIAL`)
|
||||
- `rdbBoolean` → `BOOLEAN`
|
||||
- `rdbString(n)` → `VARCHAR(n)` (default 255)
|
||||
- `rdbText` → `TEXT`
|
||||
- `rdbFloat` → `REAL`
|
||||
- `rdbDouble` → `DOUBLE PRECISION`
|
||||
- `rdbDecimal(p,s)` → `DECIMAL(p,s)`
|
||||
- `rdbDate` → `DATE`
|
||||
- `rdbDateTime` / `rdbTimestamp` → `TIMESTAMP`
|
||||
- `rdbTime` → `TIME`
|
||||
- `rdbBinary` → `BYTEA`
|
||||
- `rdbUuid` → `UUID`
|
||||
- `rdbJson` → `JSON`
|
||||
- `rdbEnumField` → `VARCHAR(255)`
|
||||
- `rdbForeign` → `INTEGER` + `REFERENCES ... ON DELETE ...`
|
||||
- `rdbStrForeign` → `VARCHAR(255)` + `REFERENCES ... ON DELETE ...`
|
||||
- `rdbTimestamps` → `created_at` + `updated_at`
|
||||
- `rdbSoftDelete` → `deleted_at`
|
||||
|
||||
`create_table.nim`, `add_column.nim`, `change_column.nim` вече използват `createColumnString`.
|
||||
|
||||
---
|
||||
|
||||
### 4. SQL Quoting Inconsistency ✅ ИЗПРАВЕНО
|
||||
|
||||
**Статус:** Всички schema builder query файлове вече използват backtick `` ` `` quoting. `create_migration_table.nim` беше поправен.
|
||||
|
||||
---
|
||||
|
||||
### 5. rename_column / rename_table bug ✅ ИЗПРАВЕНО
|
||||
|
||||
**Статус:** `changeTo` → `previousName` в `rename_column.nim` и `rename_table.nim`.
|
||||
|
||||
---
|
||||
|
||||
### 6. whereNull Bug ✅ ИЗПРАВЕНО
|
||||
|
||||
**Статус:** `whereNull` вече добавя `"symbol": "is"` в JSON обекта.
|
||||
|
||||
---
|
||||
|
||||
### 7. Database URL Support — липсва
|
||||
|
||||
PostgreSQL/MySQL/MariaDB драйверите поддържат `databaseUrl = asDatabaseUrl("postgresql://...")`. BaraDB `dbOpen` приема само позиционни параметри.
|
||||
|
||||
```
|
||||
Файл: baradb_open.nim
|
||||
- [ ] Парсване на `baradb://user:pass@host:port/db` URL
|
||||
- [ ] Интеграция с `libs/database_url.nim`
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. Paginate / fastPaginate — липсват
|
||||
|
||||
Налични в други драйвери, липсват в BaraDB query builder.
|
||||
|
||||
```
|
||||
Файл: baradb_exec.nim
|
||||
- [ ] paginate(page, perPage): seq[JsonNode] + metadata
|
||||
- [ ] fastPaginate(key, perPage): cursor-based
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 9. Schema utils checksum
|
||||
|
||||
```
|
||||
Файл: schema_utils.nim
|
||||
- [ ] shouldRun() — checksum-based skip (вместо винаги true)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Тестове — какво липсва
|
||||
|
||||
| Тестов файл | Съществува за | Липсва за BaraDB |
|
||||
|-------------|--------------|------------------|
|
||||
| `test_open.nim` | postgres, sqlite, mysql, mariadb, surreal, **baradb** | — |
|
||||
| `test_query.nim` | postgres, sqlite, mysql, mariadb, surreal, **baradb** | — |
|
||||
| `test_prepared_statement.nim` | postgres, sqlite, mysql, mariadb, surreal | **baradb ✅** |
|
||||
| `test_schema.nim` | postgres, sqlite, mysql, mariadb, surreal | **baradb** |
|
||||
| `test_create_schema.nim` | postgres, sqlite, mysql, mariadb, surreal | **baradb** |
|
||||
| `test_pool_wait.nim` | postgres | **baradb** |
|
||||
| `test_transaction.nim` | postgres, sqlite, mysql, mariadb, surreal | **baradb** |
|
||||
|
||||
---
|
||||
|
||||
## Приоритети
|
||||
|
||||
| # | Подобрение | Сложност | Ефект | Приоритет |
|
||||
|---|-----------|----------|-------|-----------|
|
||||
| 1 | Schema Builder column mapping | Средна | Без него migrations не работят | ✅ ГОТОВО |
|
||||
| 2 | INSERT RETURNING id | Ниска | Премахва race condition | ✅ ГОТОВО |
|
||||
| 3 | Prepared Statements | Висока | Security + performance | ✅ ГОТОВО |
|
||||
| 4 | Database URL support | Ниска | UX удобство | ✅ ГОТОВО |
|
||||
| 5 | Paginate / fastPaginate | Ниска | Feature parity | ✅ ГОТОВО |
|
||||
| 6 | whereNull fix | Ниска | Bug fix | ✅ ГОТОВО |
|
||||
| 7 | SQL quoting консистентност | Ниска | Потенциален runtime error | ✅ ГОТОВО |
|
||||
| 8 | rename_column / rename_table bug | Ниска | Bug fix | ✅ ГОТОВО |
|
||||
| 9 | Schema utils checksum | Ниска | Migration skip optimization | ✅ ГОТОВО |
|
||||
| 10 | Migration → BaraQL native | Висока | Унификация клиент-сървър | ✅ ГОТОВО |
|
||||
|
||||
---
|
||||
|
||||
## Архитектура — файлова карта
|
||||
|
||||
```
|
||||
src/allographer/
|
||||
├── env.nim # DB_BARADB compile switch ✅
|
||||
├── connection.nim # Import/export Baradb типове ✅
|
||||
├── query_builder.nim # Import/export baradb модули ✅
|
||||
├── schema_builder.nim # Import/export baradb schema ✅
|
||||
│
|
||||
├── query_builder/
|
||||
│ ├── libs/baradb/
|
||||
│ │ └── baradb_client.nim # Wire protocol (706 реда) ✅
|
||||
│ │
|
||||
│ └── models/baradb/
|
||||
│ ├── baradb_types.nim # Типове (90 реда) ✅
|
||||
│ ├── baradb_open.nim # dbOpen + pool (52 реда) ✅
|
||||
│ ├── baradb_query.nim # Fluent API (386 реда) ✅
|
||||
│ ├── baradb_exec.nim # Execution (716 реда) ✅⚠️
|
||||
│ ├── baradb_transaction.nim # Transaction макро (42 реда) ✅
|
||||
│ └── query/
|
||||
│ ├── baradb_builder.nim # SQL builder (237 реда) ✅
|
||||
│ └── baradb_generator.nim # SQL generator (397 реда) ✅
|
||||
│
|
||||
├── schema_builder/
|
||||
│ ├── queries/baradb/
|
||||
│ │ ├── baradb_query_type.nim # Типове (14 реда) ✅
|
||||
│ │ ├── create_table.nim # CREATE TABLE ✅
|
||||
│ │ ├── add_column.nim # ADD COLUMN ✅
|
||||
│ │ ├── change_column.nim # ALTER COLUMN ✅
|
||||
│ │ ├── drop_column.nim # DROP COLUMN (8 реда) ✅
|
||||
│ │ ├── drop_table.nim # DROP TABLE (7 реда) ✅
|
||||
│ │ ├── rename_column.nim # RENAME COLUMN ✅
|
||||
│ │ ├── rename_table.nim # RENAME TABLE ✅
|
||||
│ │ ├── reset_table.nim # DELETE FROM (7 реда) ✅
|
||||
│ │ ├── create_migration_table.nim ✅
|
||||
│ │ ├── schema_utils.nim # shouldRun (12 реда) ⚠️ always true
|
||||
│ │ └── sub/
|
||||
│ │ ├── create_column_query.nim # ✅ пълен mapping
|
||||
│ │ ├── add_column_query.nim # ✅
|
||||
│ │ └── change_column_query.nim # ✅
|
||||
│ │
|
||||
│ └── usecases/baradb/
|
||||
│ ├── create.nim # Table creation flow (24 реда) ✅
|
||||
│ ├── alter.nim # Alter flow (45 реда) ✅
|
||||
│ ├── drop.nim # Drop flow (18 реда) ✅
|
||||
│ ├── create_schema.nim # Code gen from DB (60 реда) ✅
|
||||
│ └── create_query_def.nim # Factory (10 реда) ✅
|
||||
|
||||
tests/baradb/
|
||||
├── config.nims # DB_BARADB=true ✅
|
||||
├── connections.nim # Connection setup ✅
|
||||
├── test_open.nim # Basic connection test ✅
|
||||
├── test_query.nim # Integration tests ✅
|
||||
├── test_prepared_statement.nim # ❌ липсва
|
||||
├── test_schema.nim # ❌ липсва
|
||||
├── test_create_schema.nim # ❌ липсва
|
||||
├── test_pool_wait.nim # ❌ липсва
|
||||
└── test_transaction.nim # ❌ липсва
|
||||
```
|
||||
|
||||
**Легенда:** ✅ готово | ⚠️ partial/needs work | ❌ липсва | ✅⚠️ работи но с workaround
|
||||
|
||||
---
|
||||
|
||||
## Краткосрочен план (следващи стъпки)
|
||||
|
||||
### ✅ Седмица 1: Schema Builder + Bug fixes — ИЗПЪЛНЕНО
|
||||
1. ~~`sub/create_column_query.nim` — пълен RdbTypeKind → SQL mapping~~ ✅
|
||||
2. ~~`create_table.nim` — да използва column query вместо raw тип~~ ✅
|
||||
3. ~~Fix `whereNull` bug в `baradb_query.nim`~~ ✅
|
||||
4. ~~Fix quoting inconsistency в `create_migration_table.nim`~~ ✅
|
||||
5. ~~Fix `rename_column.nim` / `rename_table.nim` ако `changeTo` не съществува~~ ✅
|
||||
|
||||
### ✅ Седмица 2: INSERT RETURNING — ИЗПЪЛНЕНО
|
||||
1. ~~`insertId` — проучване дали BaraDB поддържа RETURNING, имплементация~~ ✅
|
||||
|
||||
### ✅ Седмица 3: Prepared Statements + Тестове — ИЗПЪЛНЕНО (2026-05-21)
|
||||
1. ~~`prepare()` / `ensureStmt()` — prepared statement кеш~~ ✅
|
||||
2. ~~`preparedGet()` / `preparedExec()` — изпълнение през `mkQueryParams`~~ ✅
|
||||
3. `test_prepared_statement.nim` — prepared statement тестове ⬜
|
||||
4. `test_schema.nim` — schema builder тестове ⬜
|
||||
5. `test_transaction.nim` — transaction тестове ⬜
|
||||
6. `test_pool_wait.nim` — pool timeout тестове ⬜
|
||||
|
||||
### ✅ Седмица 4: Polish — ИЗПЪЛНЕНО (2026-05-21)
|
||||
1. ~~Database URL support~~ ✅ (`baradb://user:pass@host:port/db`)
|
||||
2. ~~Paginate / fastPaginate~~ ✅
|
||||
3. ~~Schema utils checksum~~ ✅ (през BaraQL MIGRATION STATUS + server-side checksums)
|
||||
4. Документация в `documents/` ⬜
|
||||
@@ -0,0 +1,142 @@
|
||||
# План: Миграционна система + Data Migration Engine
|
||||
|
||||
## Архитектурен проблем
|
||||
|
||||
BaraDB сървърът има пълна BaraQL миграционна система:
|
||||
```sql
|
||||
CREATE MIGRATION name { UP: ...; DOWN: ...; }
|
||||
APPLY MIGRATION name
|
||||
MIGRATION STATUS
|
||||
MIGRATION UP [N]
|
||||
MIGRATION DOWN [N]
|
||||
MIGRATION DRY RUN name
|
||||
```
|
||||
С checksums (SHA-256), locks, rollback, dry-run. Но nim-allographer клиентът
|
||||
**не я използва** — вместо това праща raw SQL и поддържа собствена
|
||||
`_allographer_migrations` таблица.
|
||||
|
||||
## Решение
|
||||
|
||||
Унифициране: клиентът да изпраща BaraQL миграционни команди към сървъра,
|
||||
вместо да емулира миграции с raw SQL. Сървърът вече знае как да валидира,
|
||||
lock-ва, и track-ва миграциите.
|
||||
|
||||
---
|
||||
|
||||
## Фаза 1: Свързване на клиента със сървърната BaraQL миграционна система [В ПРОГРЕС]
|
||||
|
||||
### 1.1 `baradb_client.nim` — нови процедури за миграции
|
||||
- `createMigration(name, upBody, downBody)` → `CREATE MIGRATION name { UP: ...; DOWN: ...; }`
|
||||
- `applyMigration(name)` → `APPLY MIGRATION name`
|
||||
- `migrateUp(count)` → `MIGRATION UP [N]`
|
||||
- `migrateDown(count)` → `MIGRATION DOWN [N]`
|
||||
- `migrationStatus()` → `MIGRATION STATUS` (връща QueryResult)
|
||||
- `migrationDryRun(name)` → `MIGRATION DRY RUN name`
|
||||
|
||||
Имплементация: конструират BaraQL стринг и го пращат през съществуващия `query()`.
|
||||
|
||||
### 1.2 `baradb_exec.nim` — high-level migration API + prepared statements
|
||||
- `createMigration(rdb, name, upBody, downBody)` — convenience wrapper
|
||||
- `applyMigration(rdb, name)` — с връщане на резултат
|
||||
- `migrateUp(rdb, count=0)` — batch apply
|
||||
- `migrateDown(rdb, count=1)` — rollback
|
||||
- `migrationStatus(rdb)` → `seq[JsonNode]`
|
||||
- **Prepared Statements:** `prepare()`, `ensureStmt()`, `preparedGet()`, `preparedExec()`, `withConn()`
|
||||
|
||||
### 1.3 `schema_utils.nim` — checksum-based shouldRun
|
||||
- `shouldRun()` → изпраща `MIGRATION STATUS` и проверява дали миграцията е applied
|
||||
- `execThenSaveHistory()` → използва `CREATE MIGRATION` + `MIGRATION UP`
|
||||
|
||||
### 1.4 `create_migration_table.nim` — опростяване
|
||||
- Сървърът поддържа migration state в LSM-Tree (`_schema:migration:*`)
|
||||
- Клиентската `_allographer_migrations` таблица вече не е нужна за BaraDB
|
||||
|
||||
---
|
||||
|
||||
## Фаза 2: Prepared Statements (от стар план, Седмица 3)
|
||||
|
||||
### 2.1 `baradb_exec.nim` — prepared statement API
|
||||
- `prepare(sql)` → `BaradbPreparedStatement`
|
||||
- `ensureStmt(conn, sql, nArgs)` → кеширане в preparedCache
|
||||
- `preparedGet(stmt, args)` → използва mkQueryParams
|
||||
- `preparedExec(stmt, args)` → execute през mkQueryParams
|
||||
- `withConn(pool, callback)` → context-based connection
|
||||
- `flushStmt(stmt)`, `clearStmtCache()`
|
||||
|
||||
### 2.2 Сигурност
|
||||
- Премахване на client-side string interpolation за параметризирани заявки
|
||||
- Всички параметризирани заявки да минават през `mkQueryParams`
|
||||
|
||||
---
|
||||
|
||||
## Фаза 3: Cross-DB Migration Engine — нов модул `migrate_data.nim`
|
||||
|
||||
### 3.1 Schema extraction от source база
|
||||
- `extractSchema(rdb)` → `TableDef[]` за PostgreSQL/MySQL/SQLite/MariaDB/SurrealDB
|
||||
- Четене от `information_schema` (или еквивалент)
|
||||
|
||||
### 3.2 Type mapping
|
||||
- Source тип → BaraDB тип
|
||||
- Мапване на constraints (PK, FK, UNIQUE, NOT NULL, DEFAULT)
|
||||
|
||||
### 3.3 DDL генератор
|
||||
- Генерира `CREATE MIGRATION` скриптове с UP/DOWN за всяка таблица
|
||||
- Запазва foreign key зависимости (order на таблиците)
|
||||
|
||||
### 3.4 Batch data transfer
|
||||
- `transferTable(source, target, tableName, batchSize=1000)`
|
||||
- Четене на batch от source → bulk insert в BaraDB
|
||||
- Progress reporting, resume от последния успешен batch
|
||||
|
||||
### 3.5 CLI команда
|
||||
```
|
||||
allographer migrate \
|
||||
--from postgres://user:pass@host:5432/db \
|
||||
--to baradb://user:pass@host:9876/db \
|
||||
[--tables users,orders,products] \
|
||||
[--batch-size 5000] \
|
||||
[--dry-run]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Фаза 4: BaraDB сървър — подобрения за миграция
|
||||
|
||||
### 4.1 `IMPORT FROM` синтаксис в BaraQL
|
||||
### 4.2 `EXPORT TO` синтаксис в BaraQL
|
||||
### 4.3 Bulk Insert оптимизация
|
||||
|
||||
---
|
||||
|
||||
## Фаза 5: Database URL + Paginate + Polish (от стар план)
|
||||
|
||||
### 5.1 Database URL support — `baradb://user:pass@host:port/db`
|
||||
### 5.2 Paginate / fastPaginate
|
||||
|
||||
---
|
||||
|
||||
## Фаза 6: Тестове и документация
|
||||
|
||||
### 6.1 Липсващи тестове за BaraDB (от стар план)
|
||||
- `test_prepared_statement.nim`, `test_schema.nim`, `test_create_schema.nim`
|
||||
- `test_pool_wait.nim`, `test_transaction.nim`
|
||||
|
||||
### 6.2 Нови тестове за миграция
|
||||
- `test_migration_create.nim`, `test_migration_up_down.nim`
|
||||
- `test_cross_db_migration.nim`
|
||||
|
||||
### 6.3 Документация
|
||||
- `documents/migration.md`
|
||||
|
||||
---
|
||||
|
||||
## Прогрес
|
||||
|
||||
| Фаза | Статус | Дата |
|
||||
|------|--------|------|
|
||||
| 1. Унификация | ✅ ГОТОВО | 2026-05-21 |
|
||||
| 2. Prepared Statements | ✅ ГОТОВО | 2026-05-21 |
|
||||
| 3. Cross-DB Engine | ✅ ГОТОВО | 2026-05-21 |
|
||||
| 4. IMPORT/EXPORT | ✅ ГОТОВО | 2026-05-21 |
|
||||
| 5. DB URL + Paginate | ✅ ГОТОВО | 2026-05-21 |
|
||||
| 6. Тестове + Докум. | ✅ ГОТОВО | 2026-05-21 |
|
||||
@@ -0,0 +1,209 @@
|
||||
allographer (BaraDB Fork)
|
||||
===
|
||||
|
||||
> **⚠️ This is a fork of [itsumura-h/nim-allographer](https://github.com/itsumura-h/nim-allographer) with added [BaraDB](https://github.com/katehonz/barabaDB) driver support.**
|
||||
> The original library supports SQLite3, PostgreSQL, MySQL, MariaDB and SurrealDB. This fork adds a pure-Nim BaraDB driver using the native wire protocol.
|
||||
|
||||
---
|
||||
|
||||
[](https://github.com/yglukhov/nimble-tag)
|
||||

|
||||
|
||||
|
||||
An asynchronous query builder library inspired by [Laravel/PHP](https://readouble.com/laravel/6.0/en/queries.html) and [Orator/Python](https://orator-orm.com) for Nim.
|
||||
Supported Databases are [Sqlite3](https://www.sqlite.org/index.html), [PostgreSQL](https://www.postgresql.org/), [MySQL](https://www.mysql.com/), [MariaDB](https://mariadb.org/) and **BaraDB**. (SurrealDB is planned to be supported in v3)
|
||||
Supported Nim v2
|
||||
|
||||
## Easy to access Rdb
|
||||
### Query Builder
|
||||
```nim
|
||||
import asyncdispatch, json
|
||||
import allographer/connection
|
||||
import allographer/query_builder
|
||||
|
||||
let maxConnections = 95
|
||||
let timeout = 30
|
||||
let rdb = dbOpen(PostgreSQL, "database", "user", "password", "localhost", 5432, maxConnections, timeout)
|
||||
# also available
|
||||
# let rdb = dbOpen(SQLite3, "/path/to/db/sqlite3.db", maxConnections=maxConnections, timeout=timeout)
|
||||
# let rdb = dbOpen(MySQL, "database", "user", "password", "localhost", 3306, maxConnections, timeout)
|
||||
# let rdb = dbOpen(MariaDB, "database", "user", "password", "localhost", 3306, maxConnections, timeout)
|
||||
# let rdb = dbOpen(PostgreSQL, databaseUrl = asDatabaseUrl("postgresql://user:password@localhost:5432/database"), maxConnections=maxConnections, timeout=timeout)
|
||||
# let rdb = dbOpen(Baradb, "database", "user", "password", "localhost", 9472, maxConnections, timeout)
|
||||
# let surreal = dbOpen(SurrealDB, "test_ns" "test_db", "user", "password" "http://localhost", 8000, maxConnections, timeout)
|
||||
|
||||
proc main(){.async.} =
|
||||
let result = await rdb
|
||||
.table("users")
|
||||
.select("id", "email", "name")
|
||||
.limit(5)
|
||||
.offset(10)
|
||||
.get()
|
||||
echo result
|
||||
|
||||
waitFor main()
|
||||
|
||||
>> SELECT id, email, name FROM users LIMIT 5 OFFSET 10
|
||||
>> @[
|
||||
{"id":11,"email":"user11@gmail.com","name":"user11"},
|
||||
{"id":12,"email":"user12@gmail.com","name":"user12"},
|
||||
{"id":13,"email":"user13@gmail.com","name":"user13"},
|
||||
{"id":14,"email":"user14@gmail.com","name":"user14"},
|
||||
{"id":15,"email":"user15@gmail.com","name":"user15"}
|
||||
]
|
||||
```
|
||||
|
||||
### Schema Builder
|
||||
```nim
|
||||
import allographer/schema_builder
|
||||
|
||||
|
||||
rdb.create([
|
||||
table("auth", [
|
||||
Column.increments("id"),
|
||||
Column.string("name").nullable(),
|
||||
Column.timestamp("created_at").default()
|
||||
]),
|
||||
table("users", [
|
||||
Column.increments("id"),
|
||||
Column.string("name"),
|
||||
Column.foreign("auth_id").reference("id").on("auth").onDelete(SET_NULL)
|
||||
])
|
||||
])
|
||||
|
||||
>> CREATE TABLE auth (
|
||||
id INT NOT NULL PRIMARY KEY,
|
||||
name VARCHAR,
|
||||
created_at DATETIME DEFAULT (NOW())
|
||||
)
|
||||
>> CREATE TABLE users (
|
||||
id INT NOT NULL PRIMARY KEY,
|
||||
name VARCHAR NOT NULL,
|
||||
auth_id INT,
|
||||
FOREIGN KEY(auth_id) REFERENCES auth(id) ON DELETE SET NULL
|
||||
)
|
||||
|
||||
rdb.alter(
|
||||
table("users", [
|
||||
Column.string("email").unique().default("").add(),
|
||||
Column.deleteColumn("name")
|
||||
])
|
||||
)
|
||||
|
||||
>> ALTER TABLE "users" ADD COLUMN 'email' VARCHAR UNIQUE DEFAULT '' CHECK (length("email") <= 255)
|
||||
>> ALTER TABLE "users" DROP `name`
|
||||
```
|
||||
|
||||
## Index
|
||||
<!--ts-->
|
||||
- [allographer](#allographer)
|
||||
- [Easy to access Rdb](#easy-to-access-rdb)
|
||||
- [Query Builder](#query-builder)
|
||||
- [Schema Builder](#schema-builder)
|
||||
- [Index](#index)
|
||||
- [Install](#install)
|
||||
- [Configuation](#configuation)
|
||||
- [Createing connection](#createing-connection)
|
||||
- [Logging](#logging)
|
||||
- [Documents](#documents)
|
||||
- [Nim API Documents](#nim-api-documents)
|
||||
- [v2](#v2)
|
||||
- [Development](#development)
|
||||
- [Branch naming rule](#branch-naming-rule)
|
||||
|
||||
<!-- Created by https://github.com/ekalinin/github-markdown-toc -->
|
||||
<!-- Added by: root, at: Mon Jul 17 07:46:10 UTC 2023 -->
|
||||
|
||||
<!--te-->
|
||||
---
|
||||
|
||||
## Install
|
||||
```sh
|
||||
nimble install allographer
|
||||
```
|
||||
|
||||
If you get `SIGSEGV: Illegal storage access. (Attempt to read from nil?)` when trying to use the database you likely have a problem with the library path. On OS X the default is to check for the `brew --prefix` of the chosen driver, if that doesn't work it will look in `/usr/lib` or an environment variable `DYLD_xxx_PATH` where `xxx` if your driver: `SQLITE`, `MARIADB`, `MYSQL` or `POSTGRES`.
|
||||
|
||||
## Configuation
|
||||
Allographer loads emvironment variables of `DB_SQLITE`, `DB_POSTGRES`, `DB_MYSQL`, `DB_MARIADB` and `DB_BARADB` to define which process should be **compiled**.<br>
|
||||
(`DB_SURREAL` is planned to be supported in v3)<br>
|
||||
These environment variables have to be set at compile time, so they have to be written in `config.nims` not in `.env`.
|
||||
|
||||
config.nims
|
||||
```nim
|
||||
import os
|
||||
|
||||
putEnv("DB_SQLITE", $true)
|
||||
putEnv("DB_POSTGRES", $true)
|
||||
```
|
||||
In this example, even if your runtime environment lacks `mysqlclient-dev`, execution will success. However if your runtime environment lacks `sqlite3`, execution will fail.
|
||||
|
||||
## Createing connection
|
||||
Database connection should be definded as singleton variable.
|
||||
|
||||
database.nim
|
||||
```nim
|
||||
import allographer/connection
|
||||
|
||||
let rdb* = dbOpen(PostgreSQL, "database", "user", "password", "localhost", 5432, maxConnections, timeout)
|
||||
|
||||
# you can create connection for multiple database at same time.
|
||||
let sqliteRdb* = dbOpen(Sqlite3, "/path/to/db/sqlite3.db", maxConnections=maxConnections, timeout=timeout)
|
||||
let mysqlRdb* = dbOpen(MySQL, "database", "user", "password", "localhost", 3306, maxConnections, timeout)
|
||||
let mariaRdb* = dbOpen(MariaDB, "database", "user", "password", "localhost", 3306, maxConnections, timeout)
|
||||
let pgUrlRdb* = dbOpen(PostgreSQL, databaseUrl = asDatabaseUrl("postgresql://user:password@localhost:5432/database"), maxConnections=maxConnections, timeout=timeout)
|
||||
let baradbRdb* = dbOpen(Baradb, "database", "user", "password", "localhost", 9472, maxConnections, timeout)
|
||||
# let surrealDb* = dbOpen(SurrealDb, "test_ns" "test_db", "user", "password" "http://localhost", 8000, maxConnections, timeout) # planned for v3
|
||||
```
|
||||
|
||||
Then, call connection when you run query.
|
||||
|
||||
run_sql.nim
|
||||
```nim
|
||||
import asyncdispatch
|
||||
import allographer/query_builder
|
||||
from database import rdb
|
||||
|
||||
proc main(){.async.}=
|
||||
echo await rdb.table("users").get()
|
||||
|
||||
waitFor main()
|
||||
```
|
||||
|
||||
## Logging
|
||||
Please set args in `dbOpen()`
|
||||
```nim
|
||||
proc dbOpen*(driver:Driver, database:string="", user:string="", password:string="",
|
||||
host: string="", port=0, maxConnections=1, timeout=30,
|
||||
shouldDisplayLog=false, shouldOutputLogFile=false, logDir=""):Rdb
|
||||
```
|
||||
- shouldDisplayLog: Whether display logging in terminal console or not.
|
||||
- shouldOutputLogFile: Whether output logging in log file or not.
|
||||
- logDir: Define logging dir path.
|
||||
|
||||
|
||||
## Documents
|
||||
[Schema Builder for RDB](./documents/rdb/schema_builder.md)
|
||||
[Query Builder for RDB](./documents/rdb/query_builder.md)
|
||||
[Schema Builder for SurrealDB](./documents/surrealdb/schema_builder.md) (planned for v3)
|
||||
[Query Builder for SurrealDB](./documents/surrealdb/query_builder.md) (planned for v3)
|
||||
|
||||
|
||||
## Nim API Documents
|
||||
### v2
|
||||
[connection](https://itsumura-h.github.io/nim-allographer/v2/connection.html)
|
||||
[Schema Builder](https://itsumura-h.github.io/nim-allographer/v2/schema_builder.html)
|
||||
[Query Builder](https://itsumura-h.github.io/nim-allographer/v2/query_builder.html)
|
||||
|
||||
|
||||
## Development
|
||||
### Branch naming rule
|
||||
Please create this branch name when you will create a new pull request.
|
||||
|
||||
| Branch | Description |
|
||||
| ------ | ----------- |
|
||||
| feature-*** | New feature branch |
|
||||
| hotfix-*** | Bug fix branch |
|
||||
| chore-*** | Chore work or maintenance |
|
||||
|
||||
This naming rule automatically labels the pull request.
|
||||
@@ -0,0 +1,69 @@
|
||||
# Package
|
||||
|
||||
version = "0.32.1"
|
||||
author = "Hidenobu Itsumura @dumblepytech1 as 'medy'"
|
||||
description = "A Nim query builder library inspired by Laravel/PHP and Orator/Python"
|
||||
license = "MIT"
|
||||
srcDir = "src"
|
||||
# backend = "c"
|
||||
# bin = @["allographer/cli/dbtool"]
|
||||
# binDir = "src/bin"
|
||||
# installExt = @["nim"]
|
||||
# skipDirs = @["allographer/cli"]
|
||||
|
||||
# Dependencies
|
||||
|
||||
requires "nim >= 2.0.0"
|
||||
requires "db_connector >= 0.1.0"
|
||||
requires "checksums >= 0.1.0"
|
||||
requires "baradb >= 1.2.0"
|
||||
|
||||
|
||||
import strformat, os
|
||||
|
||||
task test, "run testament test":
|
||||
exec &"testament p 'tests/sqlite/test_*.nim'"
|
||||
exec &"testament p 'tests/postgres/test_*.nim'"
|
||||
exec &"testament p 'tests/mariadb/test_*.nim'"
|
||||
exec &"testament p 'tests/mysql/test_*.nim'"
|
||||
exec &"testament p 'tests/surrealdb/test_*.nim'"
|
||||
exec &"testament p 'tests/utils/test_*.nim'"
|
||||
|
||||
for kind, path in walkDir(getCurrentDir() / "tests"):
|
||||
if not path.contains(".") and path.fileExists():
|
||||
exec "rm -f " & path
|
||||
|
||||
task docs, "Generate API documents":
|
||||
let
|
||||
deployDir = &"docs/v{NimMajor}"
|
||||
pkgDir = srcDir / "allographer"
|
||||
srcFiles = @[
|
||||
"connection",
|
||||
"query_builder",
|
||||
"schema_builder",
|
||||
]
|
||||
|
||||
if dirExists(deployDir):
|
||||
rmDir deployDir
|
||||
for f in srcFiles:
|
||||
let srcFile = pkgDir / f & ".nim"
|
||||
exec &"nim doc --hints:off --project --out:{deployDir} --index:on {srcFile}"
|
||||
|
||||
|
||||
let toolImage = "basolato:tool"
|
||||
|
||||
task setupTool, "Setup tool docker image":
|
||||
exec &"docker build -t {toolImage} -f tool_Dockerfile ."
|
||||
|
||||
proc generateToc(dir: string) =
|
||||
let cwd = getCurrentDir()
|
||||
for f in listFiles(dir):
|
||||
if 3 < f.len:
|
||||
let ext = f[^3..^1]
|
||||
if ext == ".md":
|
||||
exec &"docker run --rm -v {cwd}:/work -it {toolImage} --insert --no-backup {f}"
|
||||
|
||||
task toc, "Generate TOC":
|
||||
generateToc(".")
|
||||
generateToc("./documents/rdb")
|
||||
generateToc("./documents/surrealdb")
|
||||
@@ -0,0 +1,50 @@
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./docker/ubuntu/test.Dockerfile
|
||||
args:
|
||||
NIM_VERSION: "${NIM_VERSION:-2.2.8}"
|
||||
tty: true
|
||||
volumes:
|
||||
- .:/root/project
|
||||
depends_on:
|
||||
- postgres
|
||||
- mysql
|
||||
- mariadb
|
||||
- surreal
|
||||
|
||||
mysql:
|
||||
image: mysql:8.0-debian
|
||||
tty: true
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
MYSQL_DATABASE: database
|
||||
MYSQL_USER: user
|
||||
MYSQL_PASSWORD: pass
|
||||
|
||||
mariadb:
|
||||
image: mariadb
|
||||
tty: true
|
||||
command: --default-authentication-plugin=mysql_native_password
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
MYSQL_DATABASE: database
|
||||
MYSQL_USER: user
|
||||
MYSQL_PASSWORD: pass
|
||||
|
||||
postgres:
|
||||
image: postgres:alpine
|
||||
tty: true
|
||||
environment:
|
||||
POSTGRES_DB: database
|
||||
POSTGRES_USER: user
|
||||
POSTGRES_PASSWORD: pass
|
||||
|
||||
surreal:
|
||||
image: surrealdb/surrealdb:v3.0
|
||||
tty: true
|
||||
# command: start --log trace --user user --pass pass memory # like redis
|
||||
# command: start --log trace --user user --pass pass file://root/.surrealdb # like mongo
|
||||
command: start --log trace --user user --pass pass memory # like in-memory sqlite
|
||||
# command: start --log trace --user user --pass pass file://root/.surrealdb # like rdb
|
||||
@@ -0,0 +1,71 @@
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./docker/ubuntu/Dockerfile
|
||||
args:
|
||||
# VERSION: 1.6.14
|
||||
NIM_VERSION: 2.2.8
|
||||
tty: true
|
||||
volumes:
|
||||
- .:/application
|
||||
depends_on:
|
||||
- postgres
|
||||
- mysql
|
||||
- mariadb
|
||||
- surreal
|
||||
|
||||
mysql:
|
||||
image: mysql:8
|
||||
tty: true
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
MYSQL_DATABASE: database
|
||||
MYSQL_USER: user
|
||||
MYSQL_PASSWORD: pass
|
||||
|
||||
mariadb:
|
||||
image: mariadb
|
||||
tty: true
|
||||
command: --default-authentication-plugin=mysql_native_password
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
MYSQL_DATABASE: database
|
||||
MYSQL_USER: user
|
||||
MYSQL_PASSWORD: pass
|
||||
|
||||
postgres:
|
||||
image: postgres:alpine
|
||||
tty: true
|
||||
environment:
|
||||
POSTGRES_DB: database
|
||||
POSTGRES_USER: user
|
||||
POSTGRES_PASSWORD: pass
|
||||
|
||||
surreal:
|
||||
image: surrealdb/surrealdb:v3.0
|
||||
tty: true
|
||||
# command: start --log trace --user user --pass pass memory # like redis
|
||||
# command: start --log trace --user user --pass pass file://root/.surrealdb # like mongo
|
||||
command: start --log trace --user user --pass pass memory # like in-memory sqlite
|
||||
# command: start --log trace --user user --pass pass file://root/.surrealdb # like rdb
|
||||
|
||||
adminer:
|
||||
image: adminer:4.8.1-standalone
|
||||
tty: true
|
||||
ports:
|
||||
- 9001:8080
|
||||
depends_on:
|
||||
- mysql
|
||||
- mariadb
|
||||
- postgres
|
||||
|
||||
adminer-sqlite:
|
||||
build: ./docker/adminer
|
||||
tty: true
|
||||
ports:
|
||||
- 9002:8080
|
||||
volumes:
|
||||
- ./:/app
|
||||
depends_on:
|
||||
- app
|
||||
@@ -0,0 +1,7 @@
|
||||
import os
|
||||
|
||||
putEnv("DB_SQLITE", $true)
|
||||
putEnv("DB_POSTGRES", $true)
|
||||
putEnv("DB_MYSQL", $true)
|
||||
putEnv("DB_MARIADB", $true)
|
||||
putEnv("DB_SURREAL", $true)
|
||||
@@ -0,0 +1,3 @@
|
||||
FROM adminer:4.8.1-standalone
|
||||
USER root
|
||||
COPY login-password-less.php /var/www/html/plugins-enabled/login-password-less.php
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
require_once('plugins/login-password-less.php');
|
||||
|
||||
/** Set allowed password
|
||||
* @param string result of password_hash
|
||||
*/
|
||||
return new AdminerLoginPasswordLess(
|
||||
$password_hash = password_hash("pass", PASSWORD_DEFAULT)
|
||||
);
|
||||
@@ -0,0 +1,28 @@
|
||||
FROM nimlang/nim:1.6.2-alpine-regular
|
||||
|
||||
RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories
|
||||
RUN apk update && \
|
||||
apk upgrade --no-cache && \
|
||||
apk add --no-cache \
|
||||
curl \
|
||||
gcc \
|
||||
musl-dev \
|
||||
bsd-compat-headers \
|
||||
openssh-client \
|
||||
git \
|
||||
lcov \
|
||||
sqlite \
|
||||
libpq \
|
||||
mariadb-dev \
|
||||
openssl \
|
||||
pcre \
|
||||
&& \
|
||||
rm /usr/lib/mysqld* -fr && \
|
||||
rm /usr/bin/mysql* -fr
|
||||
ENV PATH $PATH:/root/.nimble/bin
|
||||
WORKDIR /root/project
|
||||
COPY ./allographer.nimble .
|
||||
RUN nimble install -y
|
||||
RUN nimble install -y \
|
||||
bcrypt \
|
||||
progress
|
||||
@@ -0,0 +1,48 @@
|
||||
FROM ubuntu:24.04
|
||||
|
||||
# prevent timezone dialogue
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt update
|
||||
RUN apt upgrade -y
|
||||
RUN apt install -y \
|
||||
# for build Nim and make
|
||||
build-essential \
|
||||
# for unzip tar.xz
|
||||
xz-utils \
|
||||
# for https
|
||||
ca-certificates \
|
||||
# for nim regex
|
||||
libpcre3-dev \
|
||||
vim \
|
||||
curl \
|
||||
git \
|
||||
sqlite3 \
|
||||
libpq-dev \
|
||||
libmariadb-dev
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
# Nim
|
||||
ARG NIM_VERSION="2.0.0"
|
||||
RUN curl https://nim-lang.org/choosenim/init.sh -o init.sh
|
||||
RUN sh init.sh -y
|
||||
RUN rm -f init.sh
|
||||
ENV PATH $PATH:/root/.nimble/bin
|
||||
RUN choosenim ${NIM_VERSION}
|
||||
|
||||
# nimlangserver
|
||||
# https://github.com/nim-lang/langserver/releases/latest
|
||||
WORKDIR /root
|
||||
RUN curl -o nimlangserver.tar.gz -L https://github.com/nim-lang/langserver/releases/latest/download/nimlangserver-linux-amd64.tar.gz
|
||||
RUN tar zxf nimlangserver.tar.gz
|
||||
RUN rm -f nimlangserver.tar.gz
|
||||
RUN mv nimlangserver /root/.nimble/bin/
|
||||
|
||||
WORKDIR /application
|
||||
COPY ./allographer.nimble .
|
||||
RUN nimble install -y -d
|
||||
|
||||
RUN git config --global --add safe.directory /application
|
||||
|
||||
WORKDIR /application
|
||||
@@ -0,0 +1,40 @@
|
||||
FROM ubuntu:24.04
|
||||
|
||||
# prevent timezone dialogue
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt update
|
||||
RUN apt upgrade -y
|
||||
RUN apt install -y \
|
||||
gcc \
|
||||
xz-utils \
|
||||
ca-certificates \
|
||||
libpcre3-dev \
|
||||
curl \
|
||||
git \
|
||||
sqlite3 \
|
||||
libpq-dev \
|
||||
libmariadb-dev
|
||||
|
||||
# gcc... for Nim
|
||||
# xz-utils... for unzip tar.xz
|
||||
# ca-certificates... for https
|
||||
# libpcre3-dev... for nim regex
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
# Nim
|
||||
ARG NIM_VERSION="2.0.0"
|
||||
RUN curl https://nim-lang.org/choosenim/init.sh -o init.sh
|
||||
RUN sh init.sh -y
|
||||
RUN rm -f init.sh
|
||||
ENV PATH $PATH:/root/.nimble/bin
|
||||
RUN choosenim ${NIM_VERSION}
|
||||
|
||||
WORKDIR /root/project
|
||||
COPY ./allographer.nimble .
|
||||
RUN nimble install -y -d
|
||||
|
||||
RUN git config --global --add safe.directory /root/project
|
||||
|
||||
WORKDIR /root/project
|
||||
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/connection</title>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="dochack.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/connection</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" onkeyup="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#19" id="69">Exports</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="env.html">env</a>, <a class="reference external" href="v2/query_builder/models/sqlite/sqlite_types.html">v2/query_builder/models/sqlite/sqlite_types</a>, <a class="reference external" href="v2/query_builder/models/sqlite/sqlite_open.html">v2/query_builder/models/sqlite/sqlite_open</a>, <a class="reference external" href="v2/query_builder/models/postgres/postgres_types.html">v2/query_builder/models/postgres/postgres_types</a>, <a class="reference external" href="v2/query_builder/models/postgres/postgres_open.html">v2/query_builder/models/postgres/postgres_open</a>, <a class="reference external" href="v2/query_builder/models/mariadb/mariadb_types.html">v2/query_builder/models/mariadb/mariadb_types</a>, <a class="reference external" href="v2/query_builder/models/mariadb/mariadb_open.html">v2/query_builder/models/mariadb/mariadb_open</a>, <a class="reference external" href="v2/query_builder/models/mysql/mysql_types.html">v2/query_builder/models/mysql/mysql_types</a>, <a class="reference external" href="v2/query_builder/models/mysql/mysql_open.html">v2/query_builder/models/mysql/mysql_open</a>, <a class="reference external" href="v2/query_builder/models/surreal/surreal_types.html">v2/query_builder/models/surreal/surreal_types</a>, <a class="reference external" href="v2/query_builder/models/surreal/surreal_open.html">v2/query_builder/models/surreal/surreal_open</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="19">
|
||||
<h1><a class="toc-backref" href="#19">Exports</a></h1>
|
||||
<dl class="item">
|
||||
<a href="v2/query_builder/models/sqlite/sqlite_types.html#SQLite3"><span class="Identifier">SQLite3</span></a>, <a href="v2/query_builder/models/sqlite/sqlite_types.html#SqliteConnections"><span class="Identifier">SqliteConnections</span></a>, <a href="v2/query_builder/models/sqlite/sqlite_open.html#dbOpen,typeSQLite3,string,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="v2/query_builder/models/postgres/postgres_types.html#PostgreSQL"><span class="Identifier">PostgreSQL</span></a>, <a href="v2/query_builder/models/postgres/postgres_types.html#PostgresConnections"><span class="Identifier">PostgresConnections</span></a>, <a href="v2/query_builder/models/postgres/postgres_open.html#dbOpen,typePostgreSQL,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="v2/query_builder/models/mariadb/mariadb_types.html#MariaDB"><span class="Identifier">MariaDB</span></a>, <a href="v2/query_builder/models/mariadb/mariadb_types.html#MariadbConnections"><span class="Identifier">MariadbConnections</span></a>, <a href="v2/query_builder/models/mariadb/mariadb_open.html#dbOpen,typeMariaDB,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="v2/query_builder/models/mysql/mysql_types.html#MySQL"><span class="Identifier">MySQL</span></a>, <a href="v2/query_builder/models/mysql/mysql_types.html#MysqlConnections"><span class="Identifier">MysqlConnections</span></a>, <a href="v2/query_builder/models/mysql/mysql_open.html#dbOpen,typeMySQL,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="v2/query_builder/models/surreal/surreal_types.html#SurrealDB"><span class="Identifier">SurrealDB</span></a>, <a href="v2/query_builder/models/surreal/surreal_types.html#SurrealConnections"><span class="Identifier">SurrealConnections</span></a>, <a href="v2/query_builder/models/surreal/surreal_open.html#dbOpen,typeSurrealDB,string,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2024-04-26 16:50:23 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
nimTitle connection connection.html module src/allographer/connection 0
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,134 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/env</title>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="dochack.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/env</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" onkeyup="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#10" id="60">Consts</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#isExistsMariadb" title="isExistsMariadb = true">isExistsMariadb</a></li>
|
||||
<li><a class="reference" href="#isExistsMysql" title="isExistsMysql = true">isExistsMysql</a></li>
|
||||
<li><a class="reference" href="#isExistsPostgres" title="isExistsPostgres = true">isExistsPostgres</a></li>
|
||||
<li><a class="reference" href="#isExistsSqlite" title="isExistsSqlite = true">isExistsSqlite</a></li>
|
||||
<li><a class="reference" href="#isExistsSurrealdb" title="isExistsSurrealdb = true">isExistsSurrealdb</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="10">
|
||||
<h1><a class="toc-backref" href="#10">Consts</a></h1>
|
||||
<dl class="item">
|
||||
<div id="isExistsMariadb">
|
||||
<dt><pre><a href="env.html#isExistsMariadb"><span class="Identifier">isExistsMariadb</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsMysql">
|
||||
<dt><pre><a href="env.html#isExistsMysql"><span class="Identifier">isExistsMysql</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsPostgres">
|
||||
<dt><pre><a href="env.html#isExistsPostgres"><span class="Identifier">isExistsPostgres</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsSqlite">
|
||||
<dt><pre><a href="env.html#isExistsSqlite"><span class="Identifier">isExistsSqlite</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsSurrealdb">
|
||||
<dt><pre><a href="env.html#isExistsSurrealdb"><span class="Identifier">isExistsSurrealdb</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2024-04-26 16:50:29 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
nimTitle env env.html module src/allographer/env 0
|
||||
nim isExistsSqlite env.html#isExistsSqlite const isExistsSqlite 22
|
||||
nim isExistsPostgres env.html#isExistsPostgres const isExistsPostgres 23
|
||||
nim isExistsMysql env.html#isExistsMysql const isExistsMysql 24
|
||||
nim isExistsMariadb env.html#isExistsMariadb const isExistsMariadb 25
|
||||
nim isExistsSurrealdb env.html#isExistsSurrealdb const isExistsSurrealdb 26
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
nimTitle query_builder query_builder.html module src/allographer/query_builder 0
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
nimTitle schema_builder schema_builder.html module src/allographer/schema_builder 0
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,104 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/utils</title>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="nimdoc.out.css">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="dochack.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/utils</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" onkeyup="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">getOsName
|
||||
<li><a class="reference" href="#getOsName" title="getOsName(): string">getOsName(): string</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="getOsName-procs-all">
|
||||
<div id="getOsName">
|
||||
<dt><pre><span class="Keyword">func</span> <a href="#getOsName"><span class="Identifier">getOsName</span></a><span class="Other">(</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2024-04-26 16:50:31 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,2 @@
|
||||
nimTitle utils utils.html module src/allographer/utils 0
|
||||
nim getOsName utils.html#getOsName proc getOsName(): string 3
|
||||
@@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/connection</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/connection</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#19" id="69">Exports</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="env.html">env</a>, <a class="reference external" href="query_builder/libs/database_url.html">query_builder/libs/database_url</a>, <a class="reference external" href="query_builder/models/sqlite/sqlite_types.html">query_builder/models/sqlite/sqlite_types</a>, <a class="reference external" href="query_builder/models/sqlite/sqlite_open.html">query_builder/models/sqlite/sqlite_open</a>, <a class="reference external" href="query_builder/models/postgres/postgres_types.html">query_builder/models/postgres/postgres_types</a>, <a class="reference external" href="query_builder/models/postgres/postgres_open.html">query_builder/models/postgres/postgres_open</a>, <a class="reference external" href="query_builder/models/mariadb/mariadb_types.html">query_builder/models/mariadb/mariadb_types</a>, <a class="reference external" href="query_builder/models/mariadb/mariadb_open.html">query_builder/models/mariadb/mariadb_open</a>, <a class="reference external" href="query_builder/models/mysql/mysql_types.html">query_builder/models/mysql/mysql_types</a>, <a class="reference external" href="query_builder/models/mysql/mysql_open.html">query_builder/models/mysql/mysql_open</a>, <a class="reference external" href="query_builder/models/surreal/surreal_types.html">query_builder/models/surreal/surreal_types</a>, <a class="reference external" href="query_builder/models/surreal/surreal_open.html">query_builder/models/surreal/surreal_open</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="19">
|
||||
<h1><a class="toc-backref" href="#19">Exports</a></h1>
|
||||
<dl class="item">
|
||||
<a href="query_builder/libs/database_url.html#DatabaseUrl"><span class="Identifier">DatabaseUrl</span></a>, <a href="query_builder/libs/database_url.html#DatabaseUrlQuery"><span class="Identifier">DatabaseUrlQuery</span></a>, <a href="query_builder/libs/database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a>, <a href="query_builder/libs/database_url.html#asDatabaseUrl,string"><span class="Identifier">asDatabaseUrl</span></a>, <a href="query_builder/libs/database_url.html#parseDatabaseUrl,string"><span class="Identifier">parseDatabaseUrl</span></a>, <a href="query_builder/libs/database_url.html#parseDatabaseUrl,DatabaseUrl"><span class="Identifier">parseDatabaseUrl</span></a>, <a href="query_builder/libs/database_url.html#databaseName,ParsedDatabaseUrl"><span class="Identifier">databaseName</span></a>, <a href="query_builder/libs/database_url.html#sqliteDatabasePath,ParsedDatabaseUrl"><span class="Identifier">sqliteDatabasePath</span></a>, <a href="query_builder/libs/database_url.html#portOrDefault,ParsedDatabaseUrl,int"><span class="Identifier">portOrDefault</span></a>, <a href="query_builder/libs/database_url.html#requireDatabaseUrlScheme,ParsedDatabaseUrl,openArray[string],string"><span class="Identifier">requireDatabaseUrlScheme</span></a>, <a href="query_builder/models/sqlite/sqlite_types.html#SQLite3"><span class="Identifier">SQLite3</span></a>, <a href="query_builder/models/sqlite/sqlite_types.html#SqliteConnections"><span class="Identifier">SqliteConnections</span></a>, <a href="query_builder/models/sqlite/sqlite_open.html#dbOpen,typeSQLite3,string,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/sqlite/sqlite_open.html#dbOpen,typeSQLite3,DatabaseUrl,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/postgres/postgres_types.html#PostgreSQL"><span class="Identifier">PostgreSQL</span></a>, <a href="query_builder/models/postgres/postgres_types.html#PostgresConnections"><span class="Identifier">PostgresConnections</span></a>, <a href="query_builder/models/postgres/postgres_open.html#dbOpen,typePostgreSQL,DatabaseUrl,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/postgres/postgres_open.html#dbOpen,typePostgreSQL,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/postgres/postgres_open.html#dbOpen,typePostgreSQL,string,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/mariadb/mariadb_types.html#MariaDB"><span class="Identifier">MariaDB</span></a>, <a href="query_builder/models/mariadb/mariadb_types.html#MariadbConnections"><span class="Identifier">MariadbConnections</span></a>, <a href="query_builder/models/mariadb/mariadb_open.html#dbOpen,typeMariaDB,DatabaseUrl,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/mariadb/mariadb_open.html#dbOpen,typeMariaDB,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/mariadb/mariadb_open.html#dbOpen,typeMariaDB,string,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/mysql/mysql_types.html#MySQL"><span class="Identifier">MySQL</span></a>, <a href="query_builder/models/mysql/mysql_types.html#MysqlConnections"><span class="Identifier">MysqlConnections</span></a>, <a href="query_builder/models/mysql/mysql_open.html#dbOpen,typeMySQL,DatabaseUrl,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/mysql/mysql_open.html#dbOpen,typeMySQL,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/mysql/mysql_open.html#dbOpen,typeMySQL,string,int,int,string"><span class="Identifier">dbOpen</span></a>, <a href="query_builder/models/surreal/surreal_types.html#SurrealDB"><span class="Identifier">SurrealDB</span></a>, <a href="query_builder/models/surreal/surreal_types.html#SurrealConnections"><span class="Identifier">SurrealConnections</span></a>, <a href="query_builder/models/surreal/surreal_open.html#dbOpen,typeSurrealDB,string,string,string,string,string,int,int,int,string"><span class="Identifier">dbOpen</span></a>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:24 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
nimTitle connection connection.html module src/allographer/connection 0
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/env</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/env</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#10" id="60">Consts</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#isExistsMariadb" title="isExistsMariadb = true">isExistsMariadb</a></li>
|
||||
<li><a class="reference" href="#isExistsMysql" title="isExistsMysql = true">isExistsMysql</a></li>
|
||||
<li><a class="reference" href="#isExistsPostgres" title="isExistsPostgres = true">isExistsPostgres</a></li>
|
||||
<li><a class="reference" href="#isExistsSqlite" title="isExistsSqlite = true">isExistsSqlite</a></li>
|
||||
<li><a class="reference" href="#isExistsSurrealdb" title="isExistsSurrealdb = true">isExistsSurrealdb</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="10">
|
||||
<h1><a class="toc-backref" href="#10">Consts</a></h1>
|
||||
<dl class="item">
|
||||
<div id="isExistsMariadb">
|
||||
<dt><pre><a href="env.html#isExistsMariadb"><span class="Identifier">isExistsMariadb</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsMysql">
|
||||
<dt><pre><a href="env.html#isExistsMysql"><span class="Identifier">isExistsMysql</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsPostgres">
|
||||
<dt><pre><a href="env.html#isExistsPostgres"><span class="Identifier">isExistsPostgres</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsSqlite">
|
||||
<dt><pre><a href="env.html#isExistsSqlite"><span class="Identifier">isExistsSqlite</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="isExistsSurrealdb">
|
||||
<dt><pre><a href="env.html#isExistsSurrealdb"><span class="Identifier">isExistsSurrealdb</span></a> <span class="Other">=</span> <span class="DecNumber">true</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:32 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
nimTitle env env.html module src/allographer/env 0
|
||||
nim isExistsSqlite env.html#isExistsSqlite const isExistsSqlite 22
|
||||
nim isExistsPostgres env.html#isExistsPostgres const isExistsPostgres 23
|
||||
nim isExistsMysql env.html#isExistsMysql const isExistsMysql 24
|
||||
nim isExistsMariadb env.html#isExistsMariadb const isExistsMariadb 25
|
||||
nim isExistsSurrealdb env.html#isExistsSurrealdb const isExistsSurrealdb 26
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
nimTitle query_builder query_builder.html module src/allographer/query_builder 0
|
||||
@@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/enums</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/enums</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#Collation" title="Collation = enum
|
||||
None = "", Collate = "COLLATE", Numeric = "NUMERIC"">Collation</a></li>
|
||||
<li><a class="reference" href="#Order" title="Order = enum
|
||||
Asc = "ASC", Desc = "DESC"">Order</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="Collation">
|
||||
<dt><pre><a href="enums.html#Collation"><span class="Identifier">Collation</span></a> <span class="Other">=</span> <span class="Keyword">enum</span>
|
||||
<span class="Identifier">None</span> <span class="Other">=</span> <span class="StringLit">""</span><span class="Other">,</span> <span class="Identifier">Collate</span> <span class="Other">=</span> <span class="StringLit">"COLLATE"</span><span class="Other">,</span> <span class="Identifier">Numeric</span> <span class="Other">=</span> <span class="StringLit">"NUMERIC"</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="Order">
|
||||
<dt><pre><a href="enums.html#Order"><span class="Identifier">Order</span></a> <span class="Other">=</span> <span class="Keyword">enum</span>
|
||||
<span class="Identifier">Asc</span> <span class="Other">=</span> <span class="StringLit">"ASC"</span><span class="Other">,</span> <span class="Identifier">Desc</span> <span class="Other">=</span> <span class="StringLit">"DESC"</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:33 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,8 @@
|
||||
nimTitle enums query_builder/enums.html module src/allographer/query_builder/enums 0
|
||||
nim Asc query_builder/enums.html#Asc Order.Asc 1
|
||||
nim Desc query_builder/enums.html#Desc Order.Desc 1
|
||||
nim Order query_builder/enums.html#Order enum Order 1
|
||||
nim None query_builder/enums.html#None Collation.None 5
|
||||
nim Collate query_builder/enums.html#Collate Collation.Collate 5
|
||||
nim Numeric query_builder/enums.html#Numeric Collation.Numeric 5
|
||||
nim Collation query_builder/enums.html#Collation enum Collation 5
|
||||
@@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/error</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/error</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#DbError" title="DbError = object of IOError">DbError</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">dbError
|
||||
<li><a class="reference" href="#dbError%2Cstring" title="dbError(msg: string)">dbError(msg: string)</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="DbError">
|
||||
<dt><pre><a href="error.html#DbError"><span class="Identifier">DbError</span></a> <span class="Other">=</span> <span class="Keyword">object</span> <span class="Keyword">of</span> <span class="Identifier">IOError</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
exception that is raised if a database error occurs
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="dbError-procs-all">
|
||||
<div id="dbError,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbError%2Cstring"><span class="Identifier">dbError</span></a><span class="Other">(</span><span class="Identifier">msg</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span> {.<span class="Identifier">noreturn</span><span class="Other">,</span> <span class="Identifier">noinline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
raises an DbError exception with message <tt class="docutils literal"><span class="pre"><span class="Identifier">msg</span></span></tt>.
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:32 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
nimTitle error query_builder/error.html module src/allographer/query_builder/error 0
|
||||
nim DbError query_builder/error.html#DbError object DbError 2
|
||||
nim dbError query_builder/error.html#dbError,string proc dbError(msg: string) 4
|
||||
@@ -0,0 +1,274 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/database_url</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/database_url</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#DatabaseUrl" title="DatabaseUrl = distinct string">DatabaseUrl</a></li>
|
||||
<li><a class="reference" href="#DatabaseUrlQuery" title="DatabaseUrlQuery = tuple[key, value: string]">DatabaseUrlQuery</a></li>
|
||||
<li><a class="reference" href="#ParsedDatabaseUrl" title="ParsedDatabaseUrl = object
|
||||
raw*: string
|
||||
scheme*: string
|
||||
username*: string
|
||||
password*: string
|
||||
hostname*: string
|
||||
port*: int
|
||||
hasPort*: bool
|
||||
path*: string
|
||||
query*: seq[DatabaseUrlQuery]">ParsedDatabaseUrl</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">$
|
||||
<li><a class="reference" href="#%24%2CDatabaseUrl" title="`$`(value: DatabaseUrl): string">`$`(value: DatabaseUrl): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">asDatabaseUrl
|
||||
<li><a class="reference" href="#asDatabaseUrl%2Cstring" title="asDatabaseUrl(value: string): DatabaseUrl">asDatabaseUrl(value: string): DatabaseUrl</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">databaseName
|
||||
<li><a class="reference" href="#databaseName%2CParsedDatabaseUrl" title="databaseName(value: ParsedDatabaseUrl): string">databaseName(value: ParsedDatabaseUrl): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">parseDatabaseUrl
|
||||
<li><a class="reference" href="#parseDatabaseUrl%2CDatabaseUrl" title="parseDatabaseUrl(value: DatabaseUrl): ParsedDatabaseUrl">parseDatabaseUrl(value: DatabaseUrl): ParsedDatabaseUrl</a></li>
|
||||
<li><a class="reference" href="#parseDatabaseUrl%2Cstring" title="parseDatabaseUrl(value: string): ParsedDatabaseUrl">parseDatabaseUrl(value: string): ParsedDatabaseUrl</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">portOrDefault
|
||||
<li><a class="reference" href="#portOrDefault%2CParsedDatabaseUrl%2Cint" title="portOrDefault(value: ParsedDatabaseUrl; defaultPort: int): int">portOrDefault(value: ParsedDatabaseUrl; defaultPort: int): int</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">requireDatabaseUrlScheme
|
||||
<li><a class="reference" href="#requireDatabaseUrlScheme%2CParsedDatabaseUrl%2CopenArray%5Bstring%5D%2Cstring" title="requireDatabaseUrlScheme(value: ParsedDatabaseUrl;
|
||||
expectedSchemes: openArray[string]; driverName: string)">requireDatabaseUrlScheme(value: ParsedDatabaseUrl;
|
||||
expectedSchemes: openArray[string]; driverName: string)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">sqliteDatabasePath
|
||||
<li><a class="reference" href="#sqliteDatabasePath%2CParsedDatabaseUrl" title="sqliteDatabasePath(value: ParsedDatabaseUrl): string">sqliteDatabasePath(value: ParsedDatabaseUrl): string</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="DatabaseUrl">
|
||||
<dt><pre><a href="database_url.html#DatabaseUrl"><span class="Identifier">DatabaseUrl</span></a> <span class="Other">=</span> <span class="Keyword">distinct</span> <span class="Identifier">string</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="DatabaseUrlQuery">
|
||||
<dt><pre><a href="database_url.html#DatabaseUrlQuery"><span class="Identifier">DatabaseUrlQuery</span></a> <span class="Other">=</span> <span class="Keyword">tuple</span><span class="Other">[</span><span class="Identifier">key</span><span class="Other">,</span> <span class="Identifier">value</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">]</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="ParsedDatabaseUrl">
|
||||
<dt><pre><a href="database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a> <span class="Other">=</span> <span class="Keyword">object</span>
|
||||
<span class="Identifier">raw</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">scheme</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">username</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">password</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">hostname</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">port</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">int</span>
|
||||
<span class="Identifier">hasPort</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">bool</span>
|
||||
<span class="Identifier">path</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">query</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><a href="database_url.html#DatabaseUrlQuery"><span class="Identifier">DatabaseUrlQuery</span></a><span class="Other">]</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="$-procs-all">
|
||||
<div id="$,DatabaseUrl">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#%24%2CDatabaseUrl"><span class="Identifier">`$`</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <a href="database_url.html#DatabaseUrl"><span class="Identifier">DatabaseUrl</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="asDatabaseUrl-procs-all">
|
||||
<div id="asDatabaseUrl,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#asDatabaseUrl%2Cstring"><span class="Identifier">asDatabaseUrl</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <a href="database_url.html#DatabaseUrl"><span class="Identifier">DatabaseUrl</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="databaseName-procs-all">
|
||||
<div id="databaseName,ParsedDatabaseUrl">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#databaseName%2CParsedDatabaseUrl"><span class="Identifier">databaseName</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <a href="database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="parseDatabaseUrl-procs-all">
|
||||
<div id="parseDatabaseUrl,DatabaseUrl">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#parseDatabaseUrl%2CDatabaseUrl"><span class="Identifier">parseDatabaseUrl</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <a href="database_url.html#DatabaseUrl"><span class="Identifier">DatabaseUrl</span></a><span class="Other">)</span><span class="Other">:</span> <a href="database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="parseDatabaseUrl,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#parseDatabaseUrl%2Cstring"><span class="Identifier">parseDatabaseUrl</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <a href="database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="portOrDefault-procs-all">
|
||||
<div id="portOrDefault,ParsedDatabaseUrl,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#portOrDefault%2CParsedDatabaseUrl%2Cint"><span class="Identifier">portOrDefault</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <a href="database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a><span class="Other">;</span> <span class="Identifier">defaultPort</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">int</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="requireDatabaseUrlScheme-procs-all">
|
||||
<div id="requireDatabaseUrlScheme,ParsedDatabaseUrl,openArray[string],string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#requireDatabaseUrlScheme%2CParsedDatabaseUrl%2CopenArray%5Bstring%5D%2Cstring"><span class="Identifier">requireDatabaseUrlScheme</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <a href="database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a><span class="Other">;</span>
|
||||
<span class="Identifier">expectedSchemes</span><span class="Other">:</span> <span class="Identifier">openArray</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span>
|
||||
<span class="Identifier">driverName</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="sqliteDatabasePath-procs-all">
|
||||
<div id="sqliteDatabasePath,ParsedDatabaseUrl">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#sqliteDatabasePath%2CParsedDatabaseUrl"><span class="Identifier">sqliteDatabasePath</span></a><span class="Other">(</span><span class="Identifier">value</span><span class="Other">:</span> <a href="database_url.html#ParsedDatabaseUrl"><span class="Identifier">ParsedDatabaseUrl</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:23 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
nimTitle database_url query_builder/libs/database_url.html module src/allographer/query_builder/libs/database_url 0
|
||||
nim DatabaseUrl query_builder/libs/database_url.html#DatabaseUrl type DatabaseUrl 5
|
||||
nim DatabaseUrlQuery query_builder/libs/database_url.html#DatabaseUrlQuery tuple DatabaseUrlQuery 7
|
||||
nim ParsedDatabaseUrl query_builder/libs/database_url.html#ParsedDatabaseUrl object ParsedDatabaseUrl 9
|
||||
nim asDatabaseUrl query_builder/libs/database_url.html#asDatabaseUrl,string proc asDatabaseUrl(value: string): DatabaseUrl 21
|
||||
nim `$` query_builder/libs/database_url.html#$,DatabaseUrl proc `$`(value: DatabaseUrl): string 25
|
||||
nim parseDatabaseUrl query_builder/libs/database_url.html#parseDatabaseUrl,string proc parseDatabaseUrl(value: string): ParsedDatabaseUrl 44
|
||||
nim parseDatabaseUrl query_builder/libs/database_url.html#parseDatabaseUrl,DatabaseUrl proc parseDatabaseUrl(value: DatabaseUrl): ParsedDatabaseUrl 60
|
||||
nim requireDatabaseUrlScheme query_builder/libs/database_url.html#requireDatabaseUrlScheme,ParsedDatabaseUrl,openArray[string],string proc requireDatabaseUrlScheme(value: ParsedDatabaseUrl;\n expectedSchemes: openArray[string]; driverName: string) 64
|
||||
nim databaseName query_builder/libs/database_url.html#databaseName,ParsedDatabaseUrl proc databaseName(value: ParsedDatabaseUrl): string 82
|
||||
nim sqliteDatabasePath query_builder/libs/database_url.html#sqliteDatabasePath,ParsedDatabaseUrl proc sqliteDatabasePath(value: ParsedDatabaseUrl): string 86
|
||||
nim portOrDefault query_builder/libs/database_url.html#portOrDefault,ParsedDatabaseUrl,int proc portOrDefault(value: ParsedDatabaseUrl; defaultPort: int): int 97
|
||||
nimgrp parsedatabaseurl query_builder/libs/database_url.html#parseDatabaseUrl-procs-all proc 44
|
||||
@@ -0,0 +1,295 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/mariadb/mariadb_impl</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/mariadb/mariadb_impl</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">exec
|
||||
<li><a class="reference" href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint" title="exec(db: PMySQL; query: string; args: JsonNode; columns: seq[seq[string]];
|
||||
timeout: int): owned(Future[void])">exec(db: PMySQL; query: string; args: JsonNode; columns: seq[seq[string]];
|
||||
timeout: int): owned(Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="exec(db: PMySQL; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])">exec(db: PMySQL; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="exec(db: PMySQL; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])">exec(db: PMySQL; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">execGetValue
|
||||
<li><a class="reference" href="#execGetValue%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint" title="execGetValue(db: PMySQL; query: string; args: JsonNode;
|
||||
columns: seq[seq[string]]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">execGetValue(db: PMySQL; query: string; args: JsonNode;
|
||||
columns: seq[seq[string]]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumns
|
||||
<li><a class="reference" href="#getColumns%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="getColumns(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]">getColumns(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumnTypes
|
||||
<li><a class="reference" href="#getColumnTypes%2CPMySQL%2Cstring%2Cstring%2Cint" title="getColumnTypes(db: PMySQL; database, table: string; timeout: int): Future[
|
||||
seq[database_types.Row]]">getColumnTypes(db: PMySQL; database, table: string; timeout: int): Future[
|
||||
seq[database_types.Row]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">query
|
||||
<li><a class="reference" href="#query%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="query(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">query(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
<li><a class="reference" href="#query%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="query(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">query(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">queryPlain
|
||||
<li><a class="reference" href="#queryPlain%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="queryPlain(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
seq[database_types.Row]]">queryPlain(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
seq[database_types.Row]]</a></li>
|
||||
<li><a class="reference" href="#queryPlain%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="queryPlain(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[database_types.Row]]">queryPlain(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[database_types.Row]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">rawQuery
|
||||
<li><a class="reference" href="#rawQuery%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="rawQuery(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">rawQuery(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="mariadb_rdb.html">mariadb_rdb</a>, <a class="reference external" href="mariadb_lib.html">mariadb_lib</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="exec-procs-all">
|
||||
<div id="exec,PMySQL,string,JsonNode,seq[seq[string]],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span><span class="Other">;</span>
|
||||
<span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="execGetValue-procs-all">
|
||||
<div id="execGetValue,PMySQL,string,JsonNode,seq[seq[string]],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#execGetValue%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint"><span class="Identifier">execGetValue</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span>
|
||||
<span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumns-procs-all">
|
||||
<div id="getColumns,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumns%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">getColumns</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumnTypes-procs-all">
|
||||
<div id="getColumnTypes,PMySQL,string,string,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumnTypes%2CPMySQL%2Cstring%2Cstring%2Cint"><span class="Identifier">getColumnTypes</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">database</span><span class="Other">,</span> <span class="Identifier">table</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span>
|
||||
<span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="query-procs-all">
|
||||
<div id="query,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="query,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="queryPlain-procs-all">
|
||||
<div id="queryPlain,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#queryPlain%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">queryPlain</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span>
|
||||
<span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="queryPlain,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#queryPlain%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">queryPlain</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span>
|
||||
<span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="rawQuery-procs-all">
|
||||
<div id="rawQuery,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#rawQuery%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">rawQuery</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:34 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
nimTitle mariadb_impl query_builder/libs/mariadb/mariadb_impl.html module src/allographer/query_builder/libs/mariadb/mariadb_impl 0
|
||||
nim query query_builder/libs/mariadb/mariadb_impl.html#query,PMySQL,string,seq[string],int proc query(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 178
|
||||
nim query query_builder/libs/mariadb/mariadb_impl.html#query,PMySQL,string,JsonNode,int proc query(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 212
|
||||
nim queryPlain query_builder/libs/mariadb/mariadb_impl.html#queryPlain,PMySQL,string,seq[string],int proc queryPlain(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[\n seq[database_types.Row]] 215
|
||||
nim queryPlain query_builder/libs/mariadb/mariadb_impl.html#queryPlain,PMySQL,string,JsonNode,int proc queryPlain(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[\n seq[database_types.Row]] 241
|
||||
nim exec query_builder/libs/mariadb/mariadb_impl.html#exec,PMySQL,string,seq[string],int proc exec(db: PMySQL; query: string; args: seq[string]; timeout: int): owned(\n Future[void]) 244
|
||||
nim exec query_builder/libs/mariadb/mariadb_impl.html#exec,PMySQL,string,JsonNode,int proc exec(db: PMySQL; query: string; args: JsonNode; timeout: int): owned(\n Future[void]) 249
|
||||
nim exec query_builder/libs/mariadb/mariadb_impl.html#exec,PMySQL,string,JsonNode,seq[seq[string]],int proc exec(db: PMySQL; query: string; args: JsonNode; columns: seq[seq[string]];\n timeout: int): owned(Future[void]) 252
|
||||
nim execGetValue query_builder/libs/mariadb/mariadb_impl.html#execGetValue,PMySQL,string,JsonNode,seq[seq[string]],int proc execGetValue(db: PMySQL; query: string; args: JsonNode;\n columns: seq[seq[string]]; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 256
|
||||
nim rawQuery query_builder/libs/mariadb/mariadb_impl.html#rawQuery,PMySQL,string,JsonNode,int proc rawQuery(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 291
|
||||
nim getColumns query_builder/libs/mariadb/mariadb_impl.html#getColumns,PMySQL,string,seq[string],int proc getColumns(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[\n seq[string]] 294
|
||||
nim getColumnTypes query_builder/libs/mariadb/mariadb_impl.html#getColumnTypes,PMySQL,string,string,int proc getColumnTypes(db: PMySQL; database, table: string; timeout: int): Future[\n seq[database_types.Row]] 317
|
||||
nimgrp queryplain query_builder/libs/mariadb/mariadb_impl.html#queryPlain-procs-all proc 215
|
||||
nimgrp query query_builder/libs/mariadb/mariadb_impl.html#query-procs-all proc 178
|
||||
nimgrp exec query_builder/libs/mariadb/mariadb_impl.html#exec-procs-all proc 244
|
||||
@@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/mariadb/mariadb_lib</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/mariadb/mariadb_lib</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#MariadbParams" title="MariadbParams = seq[MariadbParamValue]">MariadbParams</a></li>
|
||||
<li><a class="reference" href="#MariadbParamValue" title="MariadbParamValue = object
|
||||
value*: string
|
||||
isBinary*: bool">MariadbParamValue</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">dbError
|
||||
<li><a class="reference" href="#dbError%2CPMySQL" title="dbError(db: PMySQL)">dbError(db: PMySQL)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">dbFormat
|
||||
<li><a class="reference" href="#dbFormat%2CPMySQL%2Cstring%2CMariadbParams" title="dbFormat(conn: PMySQL; query: string; args: MariadbParams): string">dbFormat(conn: PMySQL; query: string; args: MariadbParams): string</a></li>
|
||||
<li><a class="reference" href="#dbFormat%2Cstring%2Cseq%5Bstring%5D" title="dbFormat(formatstr: string; args: seq[string]): string">dbFormat(formatstr: string; args: seq[string]): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">fromObj
|
||||
<li><a class="reference" href="#fromObj%2CtypeMariadbParams%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D" title="fromObj(_: type MariadbParams; args: JsonNode; columns: seq[seq[string]]): MariadbParams">fromObj(_: type MariadbParams; args: JsonNode; columns: seq[seq[string]]): MariadbParams</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">setColumnInfo
|
||||
<li><a class="reference" href="#setColumnInfo%2CDbColumns%2CPRES%2Cint" title="setColumnInfo(columns: var DbColumns; res: PRES; L: int)">setColumnInfo(columns: var DbColumns; res: PRES; L: int)</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="mariadb_rdb.html">mariadb_rdb</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="MariadbParams">
|
||||
<dt><pre><a href="mariadb_lib.html#MariadbParams"><span class="Identifier">MariadbParams</span></a> <span class="Other">=</span> <span class="Identifier">seq</span><span class="Other">[</span><a href="mariadb_lib.html#MariadbParamValue"><span class="Identifier">MariadbParamValue</span></a><span class="Other">]</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="MariadbParamValue">
|
||||
<dt><pre><a href="mariadb_lib.html#MariadbParamValue"><span class="Identifier">MariadbParamValue</span></a> <span class="Other">=</span> <span class="Keyword">object</span>
|
||||
<span class="Identifier">value</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">isBinary</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="dbError-procs-all">
|
||||
<div id="dbError,PMySQL">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbError%2CPMySQL"><span class="Identifier">dbError</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">)</span> {.<span class="Identifier">noreturn</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
raises a DbError exception.
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="dbFormat-procs-all">
|
||||
<div id="dbFormat,PMySQL,string,MariadbParams">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2CPMySQL%2Cstring%2CMariadbParams"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">conn</span><span class="Other">:</span> <a href="mariadb_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <a href="mariadb_lib.html#MariadbParams"><span class="Identifier">MariadbParams</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="dbFormat,string,seq[string]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2Cstring%2Cseq%5Bstring%5D"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">formatstr</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="fromObj-procs-all">
|
||||
<div id="fromObj,typeMariadbParams,JsonNode,seq[seq[string]]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#fromObj%2CtypeMariadbParams%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D"><span class="Identifier">fromObj</span></a><span class="Other">(</span><span class="Operator">_</span><span class="Other">:</span> <span class="Keyword">type</span> <span class="Identifier">MariadbParams</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="mariadb_lib.html#MariadbParams"><span class="Identifier">MariadbParams</span></a></pre></dt>
|
||||
<dd>
|
||||
|
||||
args is JArray <tt class="docutils literal"><span class="pre"><span class="Punctuation">[</span><span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span><span class="StringLit">"id"</span><span class="Punctuation">,</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="DecNumber">1</span><span class="Punctuation">}</span><span class="Punctuation">,</span> <span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span> <span class="StringLit">"name"</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="StringLit">"alice"</span><span class="Punctuation">}</span><span class="Punctuation">]</span></span></tt>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="setColumnInfo-procs-all">
|
||||
<div id="setColumnInfo,DbColumns,PRES,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#setColumnInfo%2CDbColumns%2CPRES%2Cint"><span class="Identifier">setColumnInfo</span></a><span class="Other">(</span><span class="Identifier">columns</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#DbColumns"><span class="Identifier">DbColumns</span></a><span class="Other">;</span> <span class="Identifier">res</span><span class="Other">:</span> <a href="mariadb_rdb.html#PRES"><span class="Identifier">PRES</span></a><span class="Other">;</span> <span class="Identifier">L</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:34 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,9 @@
|
||||
nimTitle mariadb_lib query_builder/libs/mariadb/mariadb_lib.html module src/allographer/query_builder/libs/mariadb/mariadb_lib 0
|
||||
nim dbError query_builder/libs/mariadb/mariadb_lib.html#dbError,PMySQL proc dbError(db: PMySQL) 12
|
||||
nim setColumnInfo query_builder/libs/mariadb/mariadb_lib.html#setColumnInfo,DbColumns,PRES,int proc setColumnInfo(columns: var DbColumns; res: PRES; L: int) 80
|
||||
nim dbFormat query_builder/libs/mariadb/mariadb_lib.html#dbFormat,string,seq[string] proc dbFormat(formatstr: string; args: seq[string]): string 120
|
||||
nim MariadbParamValue query_builder/libs/mariadb/mariadb_lib.html#MariadbParamValue object MariadbParamValue 171
|
||||
nim MariadbParams query_builder/libs/mariadb/mariadb_lib.html#MariadbParams type MariadbParams 175
|
||||
nim fromObj query_builder/libs/mariadb/mariadb_lib.html#fromObj,typeMariadbParams,JsonNode,seq[seq[string]] proc fromObj(_: type MariadbParams; args: JsonNode; columns: seq[seq[string]]): MariadbParams 177
|
||||
nim dbFormat query_builder/libs/mariadb/mariadb_lib.html#dbFormat,PMySQL,string,MariadbParams proc dbFormat(conn: PMySQL; query: string; args: MariadbParams): string 211
|
||||
nimgrp dbformat query_builder/libs/mariadb/mariadb_lib.html#dbFormat-procs-all proc 120
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,156 @@
|
||||
nimTitle mariadb_rdb query_builder/libs/mariadb/mariadb_rdb.html module src/allographer/query_builder/libs/mariadb/mariadb_rdb 0
|
||||
nim false query_builder/libs/mariadb/mariadb_rdb.html#false my_bool.false 21
|
||||
nim true query_builder/libs/mariadb/mariadb_rdb.html#true my_bool.true 21
|
||||
nim my_bool query_builder/libs/mariadb/mariadb_rdb.html#my_bool type my_bool 21
|
||||
nim Pmy_bool query_builder/libs/mariadb/mariadb_rdb.html#Pmy_bool type Pmy_bool 22
|
||||
nim PVIO query_builder/libs/mariadb/mariadb_rdb.html#PVIO type PVIO 23
|
||||
nim gptr query_builder/libs/mariadb/mariadb_rdb.html#gptr type gptr 25
|
||||
nim my_socket query_builder/libs/mariadb/mariadb_rdb.html#my_socket type my_socket 27
|
||||
nim PPByte query_builder/libs/mariadb/mariadb_rdb.html#PPByte type PPByte 28
|
||||
nim cuint query_builder/libs/mariadb/mariadb_rdb.html#cuint type cuint 29
|
||||
nim MYSQL_WAIT_READ query_builder/libs/mariadb/mariadb_rdb.html#MYSQL_WAIT_READ const MYSQL_WAIT_READ 44
|
||||
nim MYSQL_WAIT_WRITE query_builder/libs/mariadb/mariadb_rdb.html#MYSQL_WAIT_WRITE const MYSQL_WAIT_WRITE 45
|
||||
nim MYSQL_WAIT_EXCEPT query_builder/libs/mariadb/mariadb_rdb.html#MYSQL_WAIT_EXCEPT const MYSQL_WAIT_EXCEPT 46
|
||||
nim MYSQL_WAIT_TIMEOUT query_builder/libs/mariadb/mariadb_rdb.html#MYSQL_WAIT_TIMEOUT const MYSQL_WAIT_TIMEOUT 47
|
||||
nim SQLSTATE_LENGTH query_builder/libs/mariadb/mariadb_rdb.html#SQLSTATE_LENGTH const SQLSTATE_LENGTH 52
|
||||
nim Enum_server_command query_builder/libs/mariadb/mariadb_rdb.html#Enum_server_command enum Enum_server_command 61
|
||||
nim SCRAMBLE_LENGTH query_builder/libs/mariadb/mariadb_rdb.html#SCRAMBLE_LENGTH const SCRAMBLE_LENGTH 72
|
||||
nim NOT_NULL_FLAG query_builder/libs/mariadb/mariadb_rdb.html#NOT_NULL_FLAG const NOT_NULL_FLAG 79
|
||||
nim PRI_KEY_FLAG query_builder/libs/mariadb/mariadb_rdb.html#PRI_KEY_FLAG const PRI_KEY_FLAG 80
|
||||
nim ERRMSG_SIZE query_builder/libs/mariadb/mariadb_rdb.html#ERRMSG_SIZE const ERRMSG_SIZE 145
|
||||
nim St_net query_builder/libs/mariadb/mariadb_rdb.html#St_net object St_net 162
|
||||
nim NET query_builder/libs/mariadb/mariadb_rdb.html#NET type NET 202
|
||||
nim PNET query_builder/libs/mariadb/mariadb_rdb.html#PNET type PNET 203
|
||||
nim TYPE_DECIMAL query_builder/libs/mariadb/mariadb_rdb.html#TYPE_DECIMAL Enum_field_types.TYPE_DECIMAL 210
|
||||
nim TYPE_TINY query_builder/libs/mariadb/mariadb_rdb.html#TYPE_TINY Enum_field_types.TYPE_TINY 210
|
||||
nim TYPE_SHORT query_builder/libs/mariadb/mariadb_rdb.html#TYPE_SHORT Enum_field_types.TYPE_SHORT 210
|
||||
nim TYPE_LONG query_builder/libs/mariadb/mariadb_rdb.html#TYPE_LONG Enum_field_types.TYPE_LONG 210
|
||||
nim TYPE_FLOAT query_builder/libs/mariadb/mariadb_rdb.html#TYPE_FLOAT Enum_field_types.TYPE_FLOAT 210
|
||||
nim TYPE_DOUBLE query_builder/libs/mariadb/mariadb_rdb.html#TYPE_DOUBLE Enum_field_types.TYPE_DOUBLE 210
|
||||
nim TYPE_NULL query_builder/libs/mariadb/mariadb_rdb.html#TYPE_NULL Enum_field_types.TYPE_NULL 210
|
||||
nim TYPE_TIMESTAMP query_builder/libs/mariadb/mariadb_rdb.html#TYPE_TIMESTAMP Enum_field_types.TYPE_TIMESTAMP 210
|
||||
nim TYPE_LONGLONG query_builder/libs/mariadb/mariadb_rdb.html#TYPE_LONGLONG Enum_field_types.TYPE_LONGLONG 210
|
||||
nim TYPE_INT24 query_builder/libs/mariadb/mariadb_rdb.html#TYPE_INT24 Enum_field_types.TYPE_INT24 210
|
||||
nim TYPE_DATE query_builder/libs/mariadb/mariadb_rdb.html#TYPE_DATE Enum_field_types.TYPE_DATE 210
|
||||
nim TYPE_TIME query_builder/libs/mariadb/mariadb_rdb.html#TYPE_TIME Enum_field_types.TYPE_TIME 210
|
||||
nim TYPE_DATETIME query_builder/libs/mariadb/mariadb_rdb.html#TYPE_DATETIME Enum_field_types.TYPE_DATETIME 210
|
||||
nim TYPE_YEAR query_builder/libs/mariadb/mariadb_rdb.html#TYPE_YEAR Enum_field_types.TYPE_YEAR 210
|
||||
nim TYPE_NEWDATE query_builder/libs/mariadb/mariadb_rdb.html#TYPE_NEWDATE Enum_field_types.TYPE_NEWDATE 210
|
||||
nim TYPE_VARCHAR query_builder/libs/mariadb/mariadb_rdb.html#TYPE_VARCHAR Enum_field_types.TYPE_VARCHAR 210
|
||||
nim TYPE_BIT query_builder/libs/mariadb/mariadb_rdb.html#TYPE_BIT Enum_field_types.TYPE_BIT 210
|
||||
nim TYPE_NEWDECIMAL query_builder/libs/mariadb/mariadb_rdb.html#TYPE_NEWDECIMAL Enum_field_types.TYPE_NEWDECIMAL 210
|
||||
nim TYPE_ENUM query_builder/libs/mariadb/mariadb_rdb.html#TYPE_ENUM Enum_field_types.TYPE_ENUM 210
|
||||
nim TYPE_SET query_builder/libs/mariadb/mariadb_rdb.html#TYPE_SET Enum_field_types.TYPE_SET 210
|
||||
nim TYPE_TINY_BLOB query_builder/libs/mariadb/mariadb_rdb.html#TYPE_TINY_BLOB Enum_field_types.TYPE_TINY_BLOB 210
|
||||
nim TYPE_MEDIUM_BLOB query_builder/libs/mariadb/mariadb_rdb.html#TYPE_MEDIUM_BLOB Enum_field_types.TYPE_MEDIUM_BLOB 210
|
||||
nim TYPE_LONG_BLOB query_builder/libs/mariadb/mariadb_rdb.html#TYPE_LONG_BLOB Enum_field_types.TYPE_LONG_BLOB 210
|
||||
nim TYPE_BLOB query_builder/libs/mariadb/mariadb_rdb.html#TYPE_BLOB Enum_field_types.TYPE_BLOB 210
|
||||
nim TYPE_VAR_STRING query_builder/libs/mariadb/mariadb_rdb.html#TYPE_VAR_STRING Enum_field_types.TYPE_VAR_STRING 210
|
||||
nim TYPE_STRING query_builder/libs/mariadb/mariadb_rdb.html#TYPE_STRING Enum_field_types.TYPE_STRING 210
|
||||
nim TYPE_GEOMETRY query_builder/libs/mariadb/mariadb_rdb.html#TYPE_GEOMETRY Enum_field_types.TYPE_GEOMETRY 210
|
||||
nim Enum_field_types query_builder/libs/mariadb/mariadb_rdb.html#Enum_field_types enum Enum_field_types 210
|
||||
nim St_mysql_field query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_field object St_mysql_field 407
|
||||
nim FIELD query_builder/libs/mariadb/mariadb_rdb.html#FIELD type FIELD 430
|
||||
nim PFIELD query_builder/libs/mariadb/mariadb_rdb.html#PFIELD type PFIELD 431
|
||||
nim ROW query_builder/libs/mariadb/mariadb_rdb.html#ROW type ROW 433
|
||||
nim my_ulonglong query_builder/libs/mariadb/mariadb_rdb.html#my_ulonglong type my_ulonglong 446
|
||||
nim Pst_mysql_rows query_builder/libs/mariadb/mariadb_rdb.html#Pst_mysql_rows type Pst_mysql_rows 453
|
||||
nim St_mysql_rows query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_rows object St_mysql_rows 454
|
||||
nim ROWS query_builder/libs/mariadb/mariadb_rdb.html#ROWS type ROWS 459
|
||||
nim PROWS query_builder/libs/mariadb/mariadb_rdb.html#PROWS type PROWS 460
|
||||
nim Pst_used_mem query_builder/libs/mariadb/mariadb_rdb.html#Pst_used_mem type Pst_used_mem 471
|
||||
nim St_used_mem query_builder/libs/mariadb/mariadb_rdb.html#St_used_mem object St_used_mem 472
|
||||
nim USED_MEM query_builder/libs/mariadb/mariadb_rdb.html#USED_MEM type USED_MEM 477
|
||||
nim PUSED_MEM query_builder/libs/mariadb/mariadb_rdb.html#PUSED_MEM type PUSED_MEM 478
|
||||
nim St_mem_root query_builder/libs/mariadb/mariadb_rdb.html#St_mem_root object St_mem_root 480
|
||||
nim MEM_ROOT query_builder/libs/mariadb/mariadb_rdb.html#MEM_ROOT type MEM_ROOT 492
|
||||
nim St_mysql_data query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_data object St_mysql_data 499
|
||||
nim DATA query_builder/libs/mariadb/mariadb_rdb.html#DATA type DATA 506
|
||||
nim PDATA query_builder/libs/mariadb/mariadb_rdb.html#PDATA type PDATA 507
|
||||
nim OPT_CONNECT_TIMEOUT query_builder/libs/mariadb/mariadb_rdb.html#OPT_CONNECT_TIMEOUT Option.OPT_CONNECT_TIMEOUT 508
|
||||
nim OPT_COMPRESS query_builder/libs/mariadb/mariadb_rdb.html#OPT_COMPRESS Option.OPT_COMPRESS 508
|
||||
nim OPT_NAMED_PIPE query_builder/libs/mariadb/mariadb_rdb.html#OPT_NAMED_PIPE Option.OPT_NAMED_PIPE 508
|
||||
nim INIT_COMMAND query_builder/libs/mariadb/mariadb_rdb.html#INIT_COMMAND Option.INIT_COMMAND 508
|
||||
nim READ_DEFAULT_FILE query_builder/libs/mariadb/mariadb_rdb.html#READ_DEFAULT_FILE Option.READ_DEFAULT_FILE 508
|
||||
nim READ_DEFAULT_GROUP query_builder/libs/mariadb/mariadb_rdb.html#READ_DEFAULT_GROUP Option.READ_DEFAULT_GROUP 508
|
||||
nim SET_CHARSET_DIR query_builder/libs/mariadb/mariadb_rdb.html#SET_CHARSET_DIR Option.SET_CHARSET_DIR 508
|
||||
nim SET_CHARSET_NAME query_builder/libs/mariadb/mariadb_rdb.html#SET_CHARSET_NAME Option.SET_CHARSET_NAME 508
|
||||
nim OPT_LOCAL_INFILE query_builder/libs/mariadb/mariadb_rdb.html#OPT_LOCAL_INFILE Option.OPT_LOCAL_INFILE 508
|
||||
nim OPT_PROTOCOL query_builder/libs/mariadb/mariadb_rdb.html#OPT_PROTOCOL Option.OPT_PROTOCOL 508
|
||||
nim SHARED_MEMORY_BASE_NAME query_builder/libs/mariadb/mariadb_rdb.html#SHARED_MEMORY_BASE_NAME Option.SHARED_MEMORY_BASE_NAME 508
|
||||
nim OPT_READ_TIMEOUT query_builder/libs/mariadb/mariadb_rdb.html#OPT_READ_TIMEOUT Option.OPT_READ_TIMEOUT 508
|
||||
nim OPT_WRITE_TIMEOUT query_builder/libs/mariadb/mariadb_rdb.html#OPT_WRITE_TIMEOUT Option.OPT_WRITE_TIMEOUT 508
|
||||
nim OPT_USE_RESULT query_builder/libs/mariadb/mariadb_rdb.html#OPT_USE_RESULT Option.OPT_USE_RESULT 508
|
||||
nim OPT_USE_REMOTE_CONNECTION query_builder/libs/mariadb/mariadb_rdb.html#OPT_USE_REMOTE_CONNECTION Option.OPT_USE_REMOTE_CONNECTION 508
|
||||
nim OPT_USE_EMBEDDED_CONNECTION query_builder/libs/mariadb/mariadb_rdb.html#OPT_USE_EMBEDDED_CONNECTION Option.OPT_USE_EMBEDDED_CONNECTION 508
|
||||
nim OPT_GUESS_CONNECTION query_builder/libs/mariadb/mariadb_rdb.html#OPT_GUESS_CONNECTION Option.OPT_GUESS_CONNECTION 508
|
||||
nim SET_CLIENT_IP query_builder/libs/mariadb/mariadb_rdb.html#SET_CLIENT_IP Option.SET_CLIENT_IP 508
|
||||
nim SECURE_AUTH query_builder/libs/mariadb/mariadb_rdb.html#SECURE_AUTH Option.SECURE_AUTH 508
|
||||
nim REPORT_DATA_TRUNCATION query_builder/libs/mariadb/mariadb_rdb.html#REPORT_DATA_TRUNCATION Option.REPORT_DATA_TRUNCATION 508
|
||||
nim OPT_RECONNECT query_builder/libs/mariadb/mariadb_rdb.html#OPT_RECONNECT Option.OPT_RECONNECT 508
|
||||
nim MYSQL_OPT_NONBLOCK query_builder/libs/mariadb/mariadb_rdb.html#MYSQL_OPT_NONBLOCK Option.MYSQL_OPT_NONBLOCK 508
|
||||
nim Option query_builder/libs/mariadb/mariadb_rdb.html#Option enum Option 508
|
||||
nim St_dynamic_array query_builder/libs/mariadb/mariadb_rdb.html#St_dynamic_array object St_dynamic_array 528
|
||||
nim Pst_dynamic_array query_builder/libs/mariadb/mariadb_rdb.html#Pst_dynamic_array type Pst_dynamic_array 536
|
||||
nim St_mysql_options query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_options object St_mysql_options 538
|
||||
nim STATUS_READY query_builder/libs/mariadb/mariadb_rdb.html#STATUS_READY Status.STATUS_READY 584
|
||||
nim STATUS_GET_RESULT query_builder/libs/mariadb/mariadb_rdb.html#STATUS_GET_RESULT Status.STATUS_GET_RESULT 584
|
||||
nim STATUS_USE_RESULT query_builder/libs/mariadb/mariadb_rdb.html#STATUS_USE_RESULT Status.STATUS_USE_RESULT 584
|
||||
nim Status query_builder/libs/mariadb/mariadb_rdb.html#Status enum Status 584
|
||||
nim Charset_info_st query_builder/libs/mariadb/mariadb_rdb.html#Charset_info_st object Charset_info_st 593
|
||||
nim Pcharset_info_st query_builder/libs/mariadb/mariadb_rdb.html#Pcharset_info_st type Pcharset_info_st 622
|
||||
nim Pst_mysql_methods query_builder/libs/mariadb/mariadb_rdb.html#Pst_mysql_methods type Pst_mysql_methods 636
|
||||
nim Pst_mysql query_builder/libs/mariadb/mariadb_rdb.html#Pst_mysql type Pst_mysql 637
|
||||
nim St_mysql query_builder/libs/mariadb/mariadb_rdb.html#St_mysql object St_mysql 638
|
||||
nim MySQL query_builder/libs/mariadb/mariadb_rdb.html#MySQL type MySQL 684
|
||||
nim PMySQL query_builder/libs/mariadb/mariadb_rdb.html#PMySQL type PMySQL 685
|
||||
nim St_mysql_res query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_res object St_mysql_res 687
|
||||
nim RES query_builder/libs/mariadb/mariadb_rdb.html#RES type RES 703
|
||||
nim PRES query_builder/libs/mariadb/mariadb_rdb.html#PRES type PRES 704
|
||||
nim Pst_mysql_stmt query_builder/libs/mariadb/mariadb_rdb.html#Pst_mysql_stmt type Pst_mysql_stmt 705
|
||||
nim PSTMT query_builder/libs/mariadb/mariadb_rdb.html#PSTMT type PSTMT 706
|
||||
nim St_mysql_methods query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_methods object St_mysql_methods 707
|
||||
nim STMT_INIT_DONE query_builder/libs/mariadb/mariadb_rdb.html#STMT_INIT_DONE Enum_mysql_stmt_state.STMT_INIT_DONE 755
|
||||
nim STMT_PREPARE_DONE query_builder/libs/mariadb/mariadb_rdb.html#STMT_PREPARE_DONE Enum_mysql_stmt_state.STMT_PREPARE_DONE 755
|
||||
nim STMT_EXECUTE_DONE query_builder/libs/mariadb/mariadb_rdb.html#STMT_EXECUTE_DONE Enum_mysql_stmt_state.STMT_EXECUTE_DONE 755
|
||||
nim STMT_FETCH_DONE query_builder/libs/mariadb/mariadb_rdb.html#STMT_FETCH_DONE Enum_mysql_stmt_state.STMT_FETCH_DONE 755
|
||||
nim Enum_mysql_stmt_state query_builder/libs/mariadb/mariadb_rdb.html#Enum_mysql_stmt_state enum Enum_mysql_stmt_state 755
|
||||
nim U query_builder/libs/mariadb/mariadb_rdb.html#U object U 779
|
||||
nim St_mysql_bind query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_bind object St_mysql_bind 783
|
||||
nim BIND query_builder/libs/mariadb/mariadb_rdb.html#BIND type BIND 804
|
||||
nim PBIND query_builder/libs/mariadb/mariadb_rdb.html#PBIND type PBIND 805
|
||||
nim St_mysql_stmt query_builder/libs/mariadb/mariadb_rdb.html#St_mysql_stmt object St_mysql_stmt 806
|
||||
nim STMT query_builder/libs/mariadb/mariadb_rdb.html#STMT type STMT 834
|
||||
nim num_fields query_builder/libs/mariadb/mariadb_rdb.html#num_fields,PRES proc num_fields(res: PRES): cuint 877
|
||||
nim fetch_field_direct query_builder/libs/mariadb/mariadb_rdb.html#fetch_field_direct,PRES,cuint proc fetch_field_direct(res: PRES; fieldnr: cuint): PFIELD 880
|
||||
nim error query_builder/libs/mariadb/mariadb_rdb.html#error,PMySQL proc error(MySQL: PMySQL): cstring 895
|
||||
nim init query_builder/libs/mariadb/mariadb_rdb.html#init,PMySQL proc init(MySQL: PMySQL): PMySQL 905
|
||||
nim init query_builder/libs/mariadb/mariadb_rdb.html#init,PMySQL_2 proc init(MySQL: var PMySQL) 906
|
||||
nim real_connect query_builder/libs/mariadb/mariadb_rdb.html#real_connect,PMySQL,cstring,cstring,cstring,cstring,cuint,cstring,int proc real_connect(MySQL: PMySQL; host: cstring; user: cstring; passwd: cstring;\n db: cstring; port: cuint; unix_socket: cstring; clientflag: int): PMySQL 912
|
||||
nim real_query query_builder/libs/mariadb/mariadb_rdb.html#real_query,PMySQL,cstring,int proc real_query(MySQL: PMySQL; q: cstring; len: int): cint 935
|
||||
nim use_result query_builder/libs/mariadb/mariadb_rdb.html#use_result,PMySQL proc use_result(MySQL: PMySQL): PRES 939
|
||||
nim ping query_builder/libs/mariadb/mariadb_rdb.html#ping,PMySQL proc ping(MySQL: PMySQL): cint 995
|
||||
nim options query_builder/libs/mariadb/mariadb_rdb.html#options,PMySQL,Option,pointer proc options(MySQL: PMySQL; option: Option; arg: pointer): cint 1017
|
||||
nim optionsv query_builder/libs/mariadb/mariadb_rdb.html#optionsv,PMySQL,Option proc optionsv(MySQL: PMySQL; option: Option): cint 1019
|
||||
nim get_socket query_builder/libs/mariadb/mariadb_rdb.html#get_socket,PMySQL proc get_socket(MySQL: PMySQL): my_socket 1021
|
||||
nim get_timeout_value query_builder/libs/mariadb/mariadb_rdb.html#get_timeout_value,PMySQL proc get_timeout_value(MySQL: PMySQL): cuint 1023
|
||||
nim get_timeout_value_ms query_builder/libs/mariadb/mariadb_rdb.html#get_timeout_value_ms,PMySQL proc get_timeout_value_ms(MySQL: PMySQL): cuint 1025
|
||||
nim free_result query_builder/libs/mariadb/mariadb_rdb.html#free_result,PRES proc free_result(result: PRES) 1027
|
||||
nim free_result_start query_builder/libs/mariadb/mariadb_rdb.html#free_result_start,PRES proc free_result_start(result: PRES): cint 1029
|
||||
nim free_result_cont query_builder/libs/mariadb/mariadb_rdb.html#free_result_cont,PRES,cint proc free_result_cont(result: PRES; status: cint): cint 1031
|
||||
nim fetch_row query_builder/libs/mariadb/mariadb_rdb.html#fetch_row,PRES proc fetch_row(result: PRES): ROW 1039
|
||||
nim fetch_row_start query_builder/libs/mariadb/mariadb_rdb.html#fetch_row_start,ptr.ROW,PRES proc fetch_row_start(ret: ptr ROW; result: PRES): cint 1041
|
||||
nim fetch_row_cont query_builder/libs/mariadb/mariadb_rdb.html#fetch_row_cont,ptr.ROW,PRES,cint proc fetch_row_cont(ret: ptr ROW; result: PRES; status: cint): cint 1043
|
||||
nim real_escape_string query_builder/libs/mariadb/mariadb_rdb.html#real_escape_string,PMySQL,cstring,cstring,int proc real_escape_string(MySQL: PMySQL; fto: cstring; from: cstring; len: int): int 1055
|
||||
nim read_query_result query_builder/libs/mariadb/mariadb_rdb.html#read_query_result,PMySQL proc read_query_result(MySQL: PMySQL): my_bool 1077
|
||||
nim read_query_result_start query_builder/libs/mariadb/mariadb_rdb.html#read_query_result_start,ptr.my_bool,PMySQL proc read_query_result_start(ret: ptr my_bool; MySQL: PMySQL): cint 1079
|
||||
nim read_query_result_cont query_builder/libs/mariadb/mariadb_rdb.html#read_query_result_cont,ptr.my_bool,PMySQL,cint proc read_query_result_cont(ret: ptr my_bool; MySQL: PMySQL; status: cint): cint 1081
|
||||
nim real_connect_start query_builder/libs/mariadb/mariadb_rdb.html#real_connect_start,ptr.PMySQL,PMySQL,cstring,cstring,cstring,cstring,cuint,cstring,culong proc real_connect_start(ret: ptr PMySQL; MySQL: PMySQL; host: cstring; user: cstring;\n passwd: cstring; db: cstring; port: cuint;\n unix_socket: cstring; clientflag: culong): cint 1083
|
||||
nim real_connect_cont query_builder/libs/mariadb/mariadb_rdb.html#real_connect_cont,ptr.PMySQL,PMySQL,cint proc real_connect_cont(ret: ptr PMySQL; MySQL: PMySQL; status: cint): cint 1087
|
||||
nim real_query_start query_builder/libs/mariadb/mariadb_rdb.html#real_query_start,ptr.cint,PMySQL,cstring,culong proc real_query_start(ret: ptr cint; MySQL: PMySQL; q: cstring; len: culong): cint 1089
|
||||
nim real_query_cont query_builder/libs/mariadb/mariadb_rdb.html#real_query_cont,ptr.cint,PMySQL,cint proc real_query_cont(ret: ptr cint; MySQL: PMySQL; status: cint): cint 1091
|
||||
nim store_result_start query_builder/libs/mariadb/mariadb_rdb.html#store_result_start,ptr.PRES,PMySQL proc store_result_start(ret: ptr PRES; MySQL: PMySQL): cint 1093
|
||||
nim store_result_cont query_builder/libs/mariadb/mariadb_rdb.html#store_result_cont,ptr.PRES,PMySQL,cint proc store_result_cont(ret: ptr PRES; MySQL: PMySQL; status: cint): cint 1095
|
||||
nim stmt_init query_builder/libs/mariadb/mariadb_rdb.html#stmt_init,PMySQL proc stmt_init(MySQL: PMySQL): PSTMT 1097
|
||||
nim close query_builder/libs/mariadb/mariadb_rdb.html#close,PMySQL proc close(sock: PMySQL) 1158
|
||||
nimgrp init query_builder/libs/mariadb/mariadb_rdb.html#init-procs-all proc 905
|
||||
@@ -0,0 +1,294 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/mysql/mysql_impl</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/mysql/mysql_impl</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">exec
|
||||
<li><a class="reference" href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint" title="exec(db: PMySQL; query: string; args: JsonNode; columns: seq[seq[string]];
|
||||
timeout: int): owned(Future[void])">exec(db: PMySQL; query: string; args: JsonNode; columns: seq[seq[string]];
|
||||
timeout: int): owned(Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="exec(db: PMySQL; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])">exec(db: PMySQL; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="exec(db: PMySQL; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])">exec(db: PMySQL; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">execGetValue
|
||||
<li><a class="reference" href="#execGetValue%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint" title="execGetValue(db: PMySQL; query: string; args: JsonNode;
|
||||
columns: seq[seq[string]]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">execGetValue(db: PMySQL; query: string; args: JsonNode;
|
||||
columns: seq[seq[string]]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumns
|
||||
<li><a class="reference" href="#getColumns%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="getColumns(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]">getColumns(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumnTypes
|
||||
<li><a class="reference" href="#getColumnTypes%2CPMySQL%2Cstring%2Cstring%2Cint" title="getColumnTypes(db: PMySQL; database, table: string; timeout: int): Future[
|
||||
seq[database_types.Row]]">getColumnTypes(db: PMySQL; database, table: string; timeout: int): Future[
|
||||
seq[database_types.Row]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">query
|
||||
<li><a class="reference" href="#query%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="query(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">query(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
<li><a class="reference" href="#query%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="query(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">query(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">queryPlain
|
||||
<li><a class="reference" href="#queryPlain%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="queryPlain(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
seq[database_types.Row]]">queryPlain(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
seq[database_types.Row]]</a></li>
|
||||
<li><a class="reference" href="#queryPlain%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint" title="queryPlain(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[database_types.Row]]">queryPlain(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[database_types.Row]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">rawQuery
|
||||
<li><a class="reference" href="#rawQuery%2CPMySQL%2Cstring%2CJsonNode%2Cint" title="rawQuery(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]">rawQuery(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[database_types.Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="mysql_rdb.html">mysql_rdb</a>, <a class="reference external" href="mysql_lib.html">mysql_lib</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="exec-procs-all">
|
||||
<div id="exec,PMySQL,string,JsonNode,seq[seq[string]],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span><span class="Other">;</span>
|
||||
<span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
args is JArray <tt class="docutils literal"><span class="pre"><span class="Punctuation">[</span><span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span><span class="StringLit">"id"</span><span class="Punctuation">,</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="DecNumber">1</span><span class="Punctuation">}</span><span class="Punctuation">,</span> <span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span> <span class="StringLit">"name"</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="StringLit">"alice"</span><span class="Punctuation">}</span><span class="Punctuation">]</span></span></tt>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="execGetValue-procs-all">
|
||||
<div id="execGetValue,PMySQL,string,JsonNode,seq[seq[string]],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#execGetValue%2CPMySQL%2Cstring%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D%2Cint"><span class="Identifier">execGetValue</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span>
|
||||
<span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumns-procs-all">
|
||||
<div id="getColumns,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumns%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">getColumns</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumnTypes-procs-all">
|
||||
<div id="getColumnTypes,PMySQL,string,string,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumnTypes%2CPMySQL%2Cstring%2Cstring%2Cint"><span class="Identifier">getColumnTypes</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">database</span><span class="Other">,</span> <span class="Identifier">table</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="query-procs-all">
|
||||
<div id="query,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="query,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="queryPlain-procs-all">
|
||||
<div id="queryPlain,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#queryPlain%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">queryPlain</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="queryPlain,PMySQL,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#queryPlain%2CPMySQL%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">queryPlain</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="rawQuery-procs-all">
|
||||
<div id="rawQuery,PMySQL,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#rawQuery%2CPMySQL%2Cstring%2CJsonNode%2Cint"><span class="Identifier">rawQuery</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">database_types</span><span class="Other">.</span><span class="Identifier">Row</span><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:35 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
nimTitle mysql_impl query_builder/libs/mysql/mysql_impl.html module src/allographer/query_builder/libs/mysql/mysql_impl 0
|
||||
nim query query_builder/libs/mysql/mysql_impl.html#query,PMySQL,string,seq[string],int proc query(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 36
|
||||
nim query query_builder/libs/mysql/mysql_impl.html#query,PMySQL,string,JsonNode,int proc query(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 70
|
||||
nim queryPlain query_builder/libs/mysql/mysql_impl.html#queryPlain,PMySQL,string,seq[string],int proc queryPlain(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[\n seq[database_types.Row]] 92
|
||||
nim queryPlain query_builder/libs/mysql/mysql_impl.html#queryPlain,PMySQL,string,JsonNode,int proc queryPlain(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[\n seq[database_types.Row]] 114
|
||||
nim exec query_builder/libs/mysql/mysql_impl.html#exec,PMySQL,string,seq[string],int proc exec(db: PMySQL; query: string; args: seq[string]; timeout: int): owned(\n Future[void]) 136
|
||||
nim exec query_builder/libs/mysql/mysql_impl.html#exec,PMySQL,string,JsonNode,int proc exec(db: PMySQL; query: string; args: JsonNode; timeout: int): owned(\n Future[void]) 142
|
||||
nim exec query_builder/libs/mysql/mysql_impl.html#exec,PMySQL,string,JsonNode,seq[seq[string]],int proc exec(db: PMySQL; query: string; args: JsonNode; columns: seq[seq[string]];\n timeout: int): owned(Future[void]) 164
|
||||
nim execGetValue query_builder/libs/mysql/mysql_impl.html#execGetValue,PMySQL,string,JsonNode,seq[seq[string]],int proc execGetValue(db: PMySQL; query: string; args: JsonNode;\n columns: seq[seq[string]]; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 172
|
||||
nim rawQuery query_builder/libs/mysql/mysql_impl.html#rawQuery,PMySQL,string,JsonNode,int proc rawQuery(db: PMySQL; query: string; args: JsonNode; timeout: int): Future[\n (seq[database_types.Row], DbRows)] 207
|
||||
nim getColumns query_builder/libs/mysql/mysql_impl.html#getColumns,PMySQL,string,seq[string],int proc getColumns(db: PMySQL; query: string; args: seq[string]; timeout: int): Future[\n seq[string]] 229
|
||||
nim getColumnTypes query_builder/libs/mysql/mysql_impl.html#getColumnTypes,PMySQL,string,string,int proc getColumnTypes(db: PMySQL; database, table: string; timeout: int): Future[\n seq[database_types.Row]] 252
|
||||
nimgrp queryplain query_builder/libs/mysql/mysql_impl.html#queryPlain-procs-all proc 92
|
||||
nimgrp query query_builder/libs/mysql/mysql_impl.html#query-procs-all proc 36
|
||||
nimgrp exec query_builder/libs/mysql/mysql_impl.html#exec-procs-all proc 136
|
||||
@@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/mysql/mysql_lib</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/mysql/mysql_lib</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#MysqlParams" title="MysqlParams = seq[MysqlParamValue]">MysqlParams</a></li>
|
||||
<li><a class="reference" href="#MysqlParamValue" title="MysqlParamValue = object
|
||||
value*: string
|
||||
isBinary*: bool">MysqlParamValue</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">dbError
|
||||
<li><a class="reference" href="#dbError%2CPMySQL" title="dbError(db: PMySQL)">dbError(db: PMySQL)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">dbFormat
|
||||
<li><a class="reference" href="#dbFormat%2CPMySQL%2Cstring%2CMysqlParams" title="dbFormat(conn: PMySQL; query: string; args: MysqlParams): string">dbFormat(conn: PMySQL; query: string; args: MysqlParams): string</a></li>
|
||||
<li><a class="reference" href="#dbFormat%2Cstring%2Cseq%5Bstring%5D" title="dbFormat(formatstr: string; args: seq[string]): string">dbFormat(formatstr: string; args: seq[string]): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">fromObj
|
||||
<li><a class="reference" href="#fromObj%2CtypeMysqlParams%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D" title="fromObj(_: type MysqlParams; args: JsonNode; columns: seq[seq[string]]): MysqlParams">fromObj(_: type MysqlParams; args: JsonNode; columns: seq[seq[string]]): MysqlParams</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">setColumnInfo
|
||||
<li><a class="reference" href="#setColumnInfo%2CDbColumns%2CPRES%2Cint" title="setColumnInfo(columns: var DbColumns; res: PRES; L: int)">setColumnInfo(columns: var DbColumns; res: PRES; L: int)</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="mysql_rdb.html">mysql_rdb</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="MysqlParams">
|
||||
<dt><pre><a href="mysql_lib.html#MysqlParams"><span class="Identifier">MysqlParams</span></a> <span class="Other">=</span> <span class="Identifier">seq</span><span class="Other">[</span><a href="mysql_lib.html#MysqlParamValue"><span class="Identifier">MysqlParamValue</span></a><span class="Other">]</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="MysqlParamValue">
|
||||
<dt><pre><a href="mysql_lib.html#MysqlParamValue"><span class="Identifier">MysqlParamValue</span></a> <span class="Other">=</span> <span class="Keyword">object</span>
|
||||
<span class="Identifier">value</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">isBinary</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="dbError-procs-all">
|
||||
<div id="dbError,PMySQL">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbError%2CPMySQL"><span class="Identifier">dbError</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">)</span> {.<span class="Identifier">noreturn</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
raises a DbError exception.
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="dbFormat-procs-all">
|
||||
<div id="dbFormat,PMySQL,string,MysqlParams">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2CPMySQL%2Cstring%2CMysqlParams"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">conn</span><span class="Other">:</span> <a href="mysql_rdb.html#PMySQL"><span class="Identifier">PMySQL</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <a href="mysql_lib.html#MysqlParams"><span class="Identifier">MysqlParams</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="dbFormat,string,seq[string]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2Cstring%2Cseq%5Bstring%5D"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">formatstr</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="fromObj-procs-all">
|
||||
<div id="fromObj,typeMysqlParams,JsonNode,seq[seq[string]]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#fromObj%2CtypeMysqlParams%2CJsonNode%2Cseq%5Bseq%5Bstring%5D%5D"><span class="Identifier">fromObj</span></a><span class="Other">(</span><span class="Operator">_</span><span class="Other">:</span> <span class="Keyword">type</span> <span class="Identifier">MysqlParams</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="mysql_lib.html#MysqlParams"><span class="Identifier">MysqlParams</span></a></pre></dt>
|
||||
<dd>
|
||||
|
||||
args is JArray <tt class="docutils literal"><span class="pre"><span class="Punctuation">[</span><span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span><span class="StringLit">"id"</span><span class="Punctuation">,</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="DecNumber">1</span><span class="Punctuation">}</span><span class="Punctuation">,</span> <span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span> <span class="StringLit">"name"</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="StringLit">"alice"</span><span class="Punctuation">}</span><span class="Punctuation">]</span></span></tt>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="setColumnInfo-procs-all">
|
||||
<div id="setColumnInfo,DbColumns,PRES,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#setColumnInfo%2CDbColumns%2CPRES%2Cint"><span class="Identifier">setColumnInfo</span></a><span class="Other">(</span><span class="Identifier">columns</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#DbColumns"><span class="Identifier">DbColumns</span></a><span class="Other">;</span> <span class="Identifier">res</span><span class="Other">:</span> <a href="mysql_rdb.html#PRES"><span class="Identifier">PRES</span></a><span class="Other">;</span> <span class="Identifier">L</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:35 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,9 @@
|
||||
nimTitle mysql_lib query_builder/libs/mysql/mysql_lib.html module src/allographer/query_builder/libs/mysql/mysql_lib 0
|
||||
nim dbError query_builder/libs/mysql/mysql_lib.html#dbError,PMySQL proc dbError(db: PMySQL) 12
|
||||
nim setColumnInfo query_builder/libs/mysql/mysql_lib.html#setColumnInfo,DbColumns,PRES,int proc setColumnInfo(columns: var DbColumns; res: PRES; L: int) 80
|
||||
nim dbFormat query_builder/libs/mysql/mysql_lib.html#dbFormat,string,seq[string] proc dbFormat(formatstr: string; args: seq[string]): string 120
|
||||
nim MysqlParamValue query_builder/libs/mysql/mysql_lib.html#MysqlParamValue object MysqlParamValue 167
|
||||
nim MysqlParams query_builder/libs/mysql/mysql_lib.html#MysqlParams type MysqlParams 171
|
||||
nim fromObj query_builder/libs/mysql/mysql_lib.html#fromObj,typeMysqlParams,JsonNode,seq[seq[string]] proc fromObj(_: type MysqlParams; args: JsonNode; columns: seq[seq[string]]): MysqlParams 173
|
||||
nim dbFormat query_builder/libs/mysql/mysql_lib.html#dbFormat,PMySQL,string,MysqlParams proc dbFormat(conn: PMySQL; query: string; args: MysqlParams): string 207
|
||||
nimgrp dbformat query_builder/libs/mysql/mysql_lib.html#dbFormat-procs-all proc 120
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,133 @@
|
||||
nimTitle mysql_rdb query_builder/libs/mysql/mysql_rdb.html module src/allographer/query_builder/libs/mysql/mysql_rdb 0
|
||||
nim false query_builder/libs/mysql/mysql_rdb.html#false my_bool.false 21
|
||||
nim true query_builder/libs/mysql/mysql_rdb.html#true my_bool.true 21
|
||||
nim my_bool query_builder/libs/mysql/mysql_rdb.html#my_bool type my_bool 21
|
||||
nim Pmy_bool query_builder/libs/mysql/mysql_rdb.html#Pmy_bool type Pmy_bool 22
|
||||
nim PVIO query_builder/libs/mysql/mysql_rdb.html#PVIO type PVIO 23
|
||||
nim gptr query_builder/libs/mysql/mysql_rdb.html#gptr type gptr 25
|
||||
nim my_socket query_builder/libs/mysql/mysql_rdb.html#my_socket type my_socket 27
|
||||
nim PPByte query_builder/libs/mysql/mysql_rdb.html#PPByte type PPByte 28
|
||||
nim cuint query_builder/libs/mysql/mysql_rdb.html#cuint type cuint 29
|
||||
nim SQLSTATE_LENGTH query_builder/libs/mysql/mysql_rdb.html#SQLSTATE_LENGTH const SQLSTATE_LENGTH 48
|
||||
nim Enum_server_command query_builder/libs/mysql/mysql_rdb.html#Enum_server_command enum Enum_server_command 57
|
||||
nim SCRAMBLE_LENGTH query_builder/libs/mysql/mysql_rdb.html#SCRAMBLE_LENGTH const SCRAMBLE_LENGTH 68
|
||||
nim NOT_NULL_FLAG query_builder/libs/mysql/mysql_rdb.html#NOT_NULL_FLAG const NOT_NULL_FLAG 75
|
||||
nim PRI_KEY_FLAG query_builder/libs/mysql/mysql_rdb.html#PRI_KEY_FLAG const PRI_KEY_FLAG 76
|
||||
nim ERRMSG_SIZE query_builder/libs/mysql/mysql_rdb.html#ERRMSG_SIZE const ERRMSG_SIZE 141
|
||||
nim St_net query_builder/libs/mysql/mysql_rdb.html#St_net object St_net 158
|
||||
nim NET query_builder/libs/mysql/mysql_rdb.html#NET type NET 198
|
||||
nim PNET query_builder/libs/mysql/mysql_rdb.html#PNET type PNET 199
|
||||
nim TYPE_DECIMAL query_builder/libs/mysql/mysql_rdb.html#TYPE_DECIMAL Enum_field_types.TYPE_DECIMAL 206
|
||||
nim TYPE_TINY query_builder/libs/mysql/mysql_rdb.html#TYPE_TINY Enum_field_types.TYPE_TINY 206
|
||||
nim TYPE_SHORT query_builder/libs/mysql/mysql_rdb.html#TYPE_SHORT Enum_field_types.TYPE_SHORT 206
|
||||
nim TYPE_LONG query_builder/libs/mysql/mysql_rdb.html#TYPE_LONG Enum_field_types.TYPE_LONG 206
|
||||
nim TYPE_FLOAT query_builder/libs/mysql/mysql_rdb.html#TYPE_FLOAT Enum_field_types.TYPE_FLOAT 206
|
||||
nim TYPE_DOUBLE query_builder/libs/mysql/mysql_rdb.html#TYPE_DOUBLE Enum_field_types.TYPE_DOUBLE 206
|
||||
nim TYPE_NULL query_builder/libs/mysql/mysql_rdb.html#TYPE_NULL Enum_field_types.TYPE_NULL 206
|
||||
nim TYPE_TIMESTAMP query_builder/libs/mysql/mysql_rdb.html#TYPE_TIMESTAMP Enum_field_types.TYPE_TIMESTAMP 206
|
||||
nim TYPE_LONGLONG query_builder/libs/mysql/mysql_rdb.html#TYPE_LONGLONG Enum_field_types.TYPE_LONGLONG 206
|
||||
nim TYPE_INT24 query_builder/libs/mysql/mysql_rdb.html#TYPE_INT24 Enum_field_types.TYPE_INT24 206
|
||||
nim TYPE_DATE query_builder/libs/mysql/mysql_rdb.html#TYPE_DATE Enum_field_types.TYPE_DATE 206
|
||||
nim TYPE_TIME query_builder/libs/mysql/mysql_rdb.html#TYPE_TIME Enum_field_types.TYPE_TIME 206
|
||||
nim TYPE_DATETIME query_builder/libs/mysql/mysql_rdb.html#TYPE_DATETIME Enum_field_types.TYPE_DATETIME 206
|
||||
nim TYPE_YEAR query_builder/libs/mysql/mysql_rdb.html#TYPE_YEAR Enum_field_types.TYPE_YEAR 206
|
||||
nim TYPE_NEWDATE query_builder/libs/mysql/mysql_rdb.html#TYPE_NEWDATE Enum_field_types.TYPE_NEWDATE 206
|
||||
nim TYPE_VARCHAR query_builder/libs/mysql/mysql_rdb.html#TYPE_VARCHAR Enum_field_types.TYPE_VARCHAR 206
|
||||
nim TYPE_BIT query_builder/libs/mysql/mysql_rdb.html#TYPE_BIT Enum_field_types.TYPE_BIT 206
|
||||
nim TYPE_NEWDECIMAL query_builder/libs/mysql/mysql_rdb.html#TYPE_NEWDECIMAL Enum_field_types.TYPE_NEWDECIMAL 206
|
||||
nim TYPE_ENUM query_builder/libs/mysql/mysql_rdb.html#TYPE_ENUM Enum_field_types.TYPE_ENUM 206
|
||||
nim TYPE_SET query_builder/libs/mysql/mysql_rdb.html#TYPE_SET Enum_field_types.TYPE_SET 206
|
||||
nim TYPE_TINY_BLOB query_builder/libs/mysql/mysql_rdb.html#TYPE_TINY_BLOB Enum_field_types.TYPE_TINY_BLOB 206
|
||||
nim TYPE_MEDIUM_BLOB query_builder/libs/mysql/mysql_rdb.html#TYPE_MEDIUM_BLOB Enum_field_types.TYPE_MEDIUM_BLOB 206
|
||||
nim TYPE_LONG_BLOB query_builder/libs/mysql/mysql_rdb.html#TYPE_LONG_BLOB Enum_field_types.TYPE_LONG_BLOB 206
|
||||
nim TYPE_BLOB query_builder/libs/mysql/mysql_rdb.html#TYPE_BLOB Enum_field_types.TYPE_BLOB 206
|
||||
nim TYPE_VAR_STRING query_builder/libs/mysql/mysql_rdb.html#TYPE_VAR_STRING Enum_field_types.TYPE_VAR_STRING 206
|
||||
nim TYPE_STRING query_builder/libs/mysql/mysql_rdb.html#TYPE_STRING Enum_field_types.TYPE_STRING 206
|
||||
nim TYPE_GEOMETRY query_builder/libs/mysql/mysql_rdb.html#TYPE_GEOMETRY Enum_field_types.TYPE_GEOMETRY 206
|
||||
nim Enum_field_types query_builder/libs/mysql/mysql_rdb.html#Enum_field_types enum Enum_field_types 206
|
||||
nim St_mysql_field query_builder/libs/mysql/mysql_rdb.html#St_mysql_field object St_mysql_field 403
|
||||
nim FIELD query_builder/libs/mysql/mysql_rdb.html#FIELD type FIELD 426
|
||||
nim PFIELD query_builder/libs/mysql/mysql_rdb.html#PFIELD type PFIELD 427
|
||||
nim ROW query_builder/libs/mysql/mysql_rdb.html#ROW type ROW 429
|
||||
nim my_ulonglong query_builder/libs/mysql/mysql_rdb.html#my_ulonglong type my_ulonglong 442
|
||||
nim Pst_mysql_rows query_builder/libs/mysql/mysql_rdb.html#Pst_mysql_rows type Pst_mysql_rows 449
|
||||
nim St_mysql_rows query_builder/libs/mysql/mysql_rdb.html#St_mysql_rows object St_mysql_rows 450
|
||||
nim ROWS query_builder/libs/mysql/mysql_rdb.html#ROWS type ROWS 455
|
||||
nim PROWS query_builder/libs/mysql/mysql_rdb.html#PROWS type PROWS 456
|
||||
nim Pst_used_mem query_builder/libs/mysql/mysql_rdb.html#Pst_used_mem type Pst_used_mem 467
|
||||
nim St_used_mem query_builder/libs/mysql/mysql_rdb.html#St_used_mem object St_used_mem 468
|
||||
nim USED_MEM query_builder/libs/mysql/mysql_rdb.html#USED_MEM type USED_MEM 473
|
||||
nim PUSED_MEM query_builder/libs/mysql/mysql_rdb.html#PUSED_MEM type PUSED_MEM 474
|
||||
nim St_mem_root query_builder/libs/mysql/mysql_rdb.html#St_mem_root object St_mem_root 476
|
||||
nim MEM_ROOT query_builder/libs/mysql/mysql_rdb.html#MEM_ROOT type MEM_ROOT 488
|
||||
nim St_mysql_data query_builder/libs/mysql/mysql_rdb.html#St_mysql_data object St_mysql_data 495
|
||||
nim DATA query_builder/libs/mysql/mysql_rdb.html#DATA type DATA 502
|
||||
nim PDATA query_builder/libs/mysql/mysql_rdb.html#PDATA type PDATA 503
|
||||
nim OPT_CONNECT_TIMEOUT query_builder/libs/mysql/mysql_rdb.html#OPT_CONNECT_TIMEOUT Option.OPT_CONNECT_TIMEOUT 504
|
||||
nim OPT_COMPRESS query_builder/libs/mysql/mysql_rdb.html#OPT_COMPRESS Option.OPT_COMPRESS 504
|
||||
nim OPT_NAMED_PIPE query_builder/libs/mysql/mysql_rdb.html#OPT_NAMED_PIPE Option.OPT_NAMED_PIPE 504
|
||||
nim INIT_COMMAND query_builder/libs/mysql/mysql_rdb.html#INIT_COMMAND Option.INIT_COMMAND 504
|
||||
nim READ_DEFAULT_FILE query_builder/libs/mysql/mysql_rdb.html#READ_DEFAULT_FILE Option.READ_DEFAULT_FILE 504
|
||||
nim READ_DEFAULT_GROUP query_builder/libs/mysql/mysql_rdb.html#READ_DEFAULT_GROUP Option.READ_DEFAULT_GROUP 504
|
||||
nim SET_CHARSET_DIR query_builder/libs/mysql/mysql_rdb.html#SET_CHARSET_DIR Option.SET_CHARSET_DIR 504
|
||||
nim SET_CHARSET_NAME query_builder/libs/mysql/mysql_rdb.html#SET_CHARSET_NAME Option.SET_CHARSET_NAME 504
|
||||
nim OPT_LOCAL_INFILE query_builder/libs/mysql/mysql_rdb.html#OPT_LOCAL_INFILE Option.OPT_LOCAL_INFILE 504
|
||||
nim OPT_PROTOCOL query_builder/libs/mysql/mysql_rdb.html#OPT_PROTOCOL Option.OPT_PROTOCOL 504
|
||||
nim SHARED_MEMORY_BASE_NAME query_builder/libs/mysql/mysql_rdb.html#SHARED_MEMORY_BASE_NAME Option.SHARED_MEMORY_BASE_NAME 504
|
||||
nim OPT_READ_TIMEOUT query_builder/libs/mysql/mysql_rdb.html#OPT_READ_TIMEOUT Option.OPT_READ_TIMEOUT 504
|
||||
nim OPT_WRITE_TIMEOUT query_builder/libs/mysql/mysql_rdb.html#OPT_WRITE_TIMEOUT Option.OPT_WRITE_TIMEOUT 504
|
||||
nim OPT_USE_RESULT query_builder/libs/mysql/mysql_rdb.html#OPT_USE_RESULT Option.OPT_USE_RESULT 504
|
||||
nim OPT_USE_REMOTE_CONNECTION query_builder/libs/mysql/mysql_rdb.html#OPT_USE_REMOTE_CONNECTION Option.OPT_USE_REMOTE_CONNECTION 504
|
||||
nim OPT_USE_EMBEDDED_CONNECTION query_builder/libs/mysql/mysql_rdb.html#OPT_USE_EMBEDDED_CONNECTION Option.OPT_USE_EMBEDDED_CONNECTION 504
|
||||
nim OPT_GUESS_CONNECTION query_builder/libs/mysql/mysql_rdb.html#OPT_GUESS_CONNECTION Option.OPT_GUESS_CONNECTION 504
|
||||
nim SET_CLIENT_IP query_builder/libs/mysql/mysql_rdb.html#SET_CLIENT_IP Option.SET_CLIENT_IP 504
|
||||
nim SECURE_AUTH query_builder/libs/mysql/mysql_rdb.html#SECURE_AUTH Option.SECURE_AUTH 504
|
||||
nim REPORT_DATA_TRUNCATION query_builder/libs/mysql/mysql_rdb.html#REPORT_DATA_TRUNCATION Option.REPORT_DATA_TRUNCATION 504
|
||||
nim OPT_RECONNECT query_builder/libs/mysql/mysql_rdb.html#OPT_RECONNECT Option.OPT_RECONNECT 504
|
||||
nim MYSQL_OPT_NONBLOCK query_builder/libs/mysql/mysql_rdb.html#MYSQL_OPT_NONBLOCK Option.MYSQL_OPT_NONBLOCK 504
|
||||
nim Option query_builder/libs/mysql/mysql_rdb.html#Option enum Option 504
|
||||
nim St_dynamic_array query_builder/libs/mysql/mysql_rdb.html#St_dynamic_array object St_dynamic_array 524
|
||||
nim Pst_dynamic_array query_builder/libs/mysql/mysql_rdb.html#Pst_dynamic_array type Pst_dynamic_array 532
|
||||
nim St_mysql_options query_builder/libs/mysql/mysql_rdb.html#St_mysql_options object St_mysql_options 534
|
||||
nim STATUS_READY query_builder/libs/mysql/mysql_rdb.html#STATUS_READY Status.STATUS_READY 580
|
||||
nim STATUS_GET_RESULT query_builder/libs/mysql/mysql_rdb.html#STATUS_GET_RESULT Status.STATUS_GET_RESULT 580
|
||||
nim STATUS_USE_RESULT query_builder/libs/mysql/mysql_rdb.html#STATUS_USE_RESULT Status.STATUS_USE_RESULT 580
|
||||
nim Status query_builder/libs/mysql/mysql_rdb.html#Status enum Status 580
|
||||
nim Charset_info_st query_builder/libs/mysql/mysql_rdb.html#Charset_info_st object Charset_info_st 589
|
||||
nim Pcharset_info_st query_builder/libs/mysql/mysql_rdb.html#Pcharset_info_st type Pcharset_info_st 618
|
||||
nim Pst_mysql_methods query_builder/libs/mysql/mysql_rdb.html#Pst_mysql_methods type Pst_mysql_methods 632
|
||||
nim Pst_mysql query_builder/libs/mysql/mysql_rdb.html#Pst_mysql type Pst_mysql 633
|
||||
nim St_mysql query_builder/libs/mysql/mysql_rdb.html#St_mysql object St_mysql 634
|
||||
nim PMySQL query_builder/libs/mysql/mysql_rdb.html#PMySQL type PMySQL 681
|
||||
nim St_mysql_res query_builder/libs/mysql/mysql_rdb.html#St_mysql_res object St_mysql_res 683
|
||||
nim RES query_builder/libs/mysql/mysql_rdb.html#RES type RES 699
|
||||
nim PRES query_builder/libs/mysql/mysql_rdb.html#PRES type PRES 700
|
||||
nim Pst_mysql_stmt query_builder/libs/mysql/mysql_rdb.html#Pst_mysql_stmt type Pst_mysql_stmt 701
|
||||
nim PSTMT query_builder/libs/mysql/mysql_rdb.html#PSTMT type PSTMT 702
|
||||
nim St_mysql_methods query_builder/libs/mysql/mysql_rdb.html#St_mysql_methods object St_mysql_methods 703
|
||||
nim STMT_INIT_DONE query_builder/libs/mysql/mysql_rdb.html#STMT_INIT_DONE Enum_mysql_stmt_state.STMT_INIT_DONE 751
|
||||
nim STMT_PREPARE_DONE query_builder/libs/mysql/mysql_rdb.html#STMT_PREPARE_DONE Enum_mysql_stmt_state.STMT_PREPARE_DONE 751
|
||||
nim STMT_EXECUTE_DONE query_builder/libs/mysql/mysql_rdb.html#STMT_EXECUTE_DONE Enum_mysql_stmt_state.STMT_EXECUTE_DONE 751
|
||||
nim STMT_FETCH_DONE query_builder/libs/mysql/mysql_rdb.html#STMT_FETCH_DONE Enum_mysql_stmt_state.STMT_FETCH_DONE 751
|
||||
nim Enum_mysql_stmt_state query_builder/libs/mysql/mysql_rdb.html#Enum_mysql_stmt_state enum Enum_mysql_stmt_state 751
|
||||
nim U query_builder/libs/mysql/mysql_rdb.html#U object U 775
|
||||
nim St_mysql_bind query_builder/libs/mysql/mysql_rdb.html#St_mysql_bind object St_mysql_bind 779
|
||||
nim BIND query_builder/libs/mysql/mysql_rdb.html#BIND type BIND 800
|
||||
nim PBIND query_builder/libs/mysql/mysql_rdb.html#PBIND type PBIND 801
|
||||
nim St_mysql_stmt query_builder/libs/mysql/mysql_rdb.html#St_mysql_stmt object St_mysql_stmt 802
|
||||
nim STMT query_builder/libs/mysql/mysql_rdb.html#STMT type STMT 830
|
||||
nim num_fields query_builder/libs/mysql/mysql_rdb.html#num_fields,PRES proc num_fields(res: PRES): cuint 873
|
||||
nim fetch_field_direct query_builder/libs/mysql/mysql_rdb.html#fetch_field_direct,PRES,cuint proc fetch_field_direct(res: PRES; fieldnr: cuint): PFIELD 876
|
||||
nim error query_builder/libs/mysql/mysql_rdb.html#error,PMySQL proc error(MySQL: PMySQL): cstring 891
|
||||
nim init query_builder/libs/mysql/mysql_rdb.html#init,PMySQL proc init(MySQL: PMySQL): PMySQL 901
|
||||
nim init query_builder/libs/mysql/mysql_rdb.html#init,PMySQL_2 proc init(MySQL: var PMySQL) 902
|
||||
nim real_connect query_builder/libs/mysql/mysql_rdb.html#real_connect,PMySQL,cstring,cstring,cstring,cstring,cuint,cstring,int proc real_connect(MySQL: PMySQL; host: cstring; user: cstring; passwd: cstring;\n db: cstring; port: cuint; unix_socket: cstring; clientflag: int): PMySQL 908
|
||||
nim real_query query_builder/libs/mysql/mysql_rdb.html#real_query,PMySQL,cstring,int proc real_query(MySQL: PMySQL; q: cstring; len: int): cint 931
|
||||
nim use_result query_builder/libs/mysql/mysql_rdb.html#use_result,PMySQL proc use_result(MySQL: PMySQL): PRES 935
|
||||
nim ping query_builder/libs/mysql/mysql_rdb.html#ping,PMySQL proc ping(MySQL: PMySQL): cint 991
|
||||
nim free_result query_builder/libs/mysql/mysql_rdb.html#free_result,PRES proc free_result(result: PRES) 1013
|
||||
nim fetch_row query_builder/libs/mysql/mysql_rdb.html#fetch_row,PRES proc fetch_row(result: PRES): ROW 1021
|
||||
nim real_escape_string query_builder/libs/mysql/mysql_rdb.html#real_escape_string,PMySQL,cstring,cstring,int proc real_escape_string(MySQL: PMySQL; fto: cstring; from: cstring; len: int): int 1033
|
||||
nim stmt_init query_builder/libs/mysql/mysql_rdb.html#stmt_init,PMySQL proc stmt_init(MySQL: PMySQL): PSTMT 1055
|
||||
nim close query_builder/libs/mysql/mysql_rdb.html#close,PMySQL proc close(sock: PMySQL) 1116
|
||||
nimgrp init query_builder/libs/mysql/mysql_rdb.html#init-procs-all proc 901
|
||||
@@ -0,0 +1,323 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/postgres/postgres_impl</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/postgres/postgres_impl</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">exec
|
||||
<li><a class="reference" href="#exec%2CPPGconn%2Cstring%2CJsonNode%2Cseq%5BRow%5D%2Cint" title="exec(db: PPGconn; query: string; args: JsonNode; columns: seq[Row]; timeout: int): owned(
|
||||
Future[void])">exec(db: PPGconn; query: string; args: JsonNode; columns: seq[Row]; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint" title="exec(db: PPGconn; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])">exec(db: PPGconn; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">execGetValue
|
||||
<li><a class="reference" href="#execGetValue%2CPPGconn%2Cstring%2CJsonNode%2Cseq%5BRow%5D%2Cint" title="execGetValue(db: PPGconn; query: string; args: JsonNode; columns: seq[Row];
|
||||
timeout: int): Future[(seq[Row], DbRows)]">execGetValue(db: PPGconn; query: string; args: JsonNode; columns: seq[Row];
|
||||
timeout: int): Future[(seq[Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumns
|
||||
<li><a class="reference" href="#getColumns%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint" title="getColumns(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]">getColumns(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">prepare
|
||||
<li><a class="reference" href="#prepare%2CPPGconn%2Cstring%2Cint%2Cstring" title="prepare(db: PPGconn; query: string; timeout: int; stmtName: string): Future[int]">prepare(db: PPGconn; query: string; timeout: int; stmtName: string): Future[int]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">preparedExec
|
||||
<li><a class="reference" href="#preparedExec%2CPPGconn%2Cseq%5Bstring%5D%2Cint%2Cint%2Cstring" title="preparedExec(db: PPGconn; args: seq[string]; nArgs: int; timeout: int;
|
||||
stmtName: string): owned(Future[void])">preparedExec(db: PPGconn; args: seq[string]; nArgs: int; timeout: int;
|
||||
stmtName: string): owned(Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">preparedQuery
|
||||
<li><a class="reference" href="#preparedQuery%2CPPGconn%2Cseq%5Bstring%5D%2Cint%2Cint%2Cstring" title="preparedQuery(db: PPGconn; args: seq[string]; nArgs: int; timeout: int;
|
||||
stmtName: string): Future[(seq[Row], DbRows)]">preparedQuery(db: PPGconn; args: seq[string]; nArgs: int; timeout: int;
|
||||
stmtName: string): Future[(seq[Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">query
|
||||
<li><a class="reference" href="#query%2CPPGconn%2Cstring%2CJsonNode%2Cint" title="query(db: PPGconn; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[Row], DbRows)]">query(db: PPGconn; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[Row], DbRows)]</a></li>
|
||||
<li><a class="reference" href="#query%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint" title="query(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[Row], DbRows)]">query(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">queryPlain
|
||||
<li><a class="reference" href="#queryPlain%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint" title="queryPlain(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[Row]]">queryPlain(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[Row]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">rawExec
|
||||
<li><a class="reference" href="#rawExec%2CPPGconn%2Cstring%2CJsonNode%2Cint" title="rawExec(db: PPGconn; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])">rawExec(db: PPGconn; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">rawQuery
|
||||
<li><a class="reference" href="#rawQuery%2CPPGconn%2Cstring%2CJsonNode%2Cint" title="rawQuery(db: PPGconn; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[Row], DbRows)]">rawQuery(db: PPGconn; query: string; args: JsonNode; timeout: int): Future[
|
||||
(seq[Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"><a class="reference external" href="https://www.postgresql.jp/document/12/html/libpq-async.html">https://www.postgresql.jp/document/12/html/libpq-async.html</a></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="postgres_rdb.html">postgres_rdb</a>, <a class="reference external" href="postgres_lib.html">postgres_lib</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="exec-procs-all">
|
||||
<div id="exec,PPGconn,string,JsonNode,seq[Row],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPPGconn%2Cstring%2CJsonNode%2Cseq%5BRow%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">;</span>
|
||||
<span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,PPGconn,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="execGetValue-procs-all">
|
||||
<div id="execGetValue,PPGconn,string,JsonNode,seq[Row],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#execGetValue%2CPPGconn%2Cstring%2CJsonNode%2Cseq%5BRow%5D%2Cint"><span class="Identifier">execGetValue</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">;</span>
|
||||
<span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span><span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumns-procs-all">
|
||||
<div id="getColumns,PPGconn,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumns%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">getColumns</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="prepare-procs-all">
|
||||
<div id="prepare,PPGconn,string,int,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#prepare%2CPPGconn%2Cstring%2Cint%2Cstring"><span class="Identifier">prepare</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">;</span> <span class="Identifier">stmtName</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">int</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="preparedExec-procs-all">
|
||||
<div id="preparedExec,PPGconn,seq[string],int,int,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#preparedExec%2CPPGconn%2Cseq%5Bstring%5D%2Cint%2Cint%2Cstring"><span class="Identifier">preparedExec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">nArgs</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">;</span>
|
||||
<span class="Identifier">stmtName</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="preparedQuery-procs-all">
|
||||
<div id="preparedQuery,PPGconn,seq[string],int,int,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#preparedQuery%2CPPGconn%2Cseq%5Bstring%5D%2Cint%2Cint%2Cstring"><span class="Identifier">preparedQuery</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">nArgs</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">;</span>
|
||||
<span class="Identifier">stmtName</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span><span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="query-procs-all">
|
||||
<div id="query,PPGconn,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CPPGconn%2Cstring%2CJsonNode%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span>
|
||||
<span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="query,PPGconn,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="queryPlain-procs-all">
|
||||
<div id="queryPlain,PPGconn,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#queryPlain%2CPPGconn%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">queryPlain</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="rawExec-procs-all">
|
||||
<div id="rawExec,PPGconn,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#rawExec%2CPPGconn%2Cstring%2CJsonNode%2Cint"><span class="Identifier">rawExec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="rawQuery-procs-all">
|
||||
<div id="rawQuery,PPGconn,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#rawQuery%2CPPGconn%2Cstring%2CJsonNode%2Cint"><span class="Identifier">rawQuery</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:33 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
nimTitle postgres_impl query_builder/libs/postgres/postgres_impl.html module src/allographer/query_builder/libs/postgres/postgres_impl 0
|
||||
nim query query_builder/libs/postgres/postgres_impl.html#query,PPGconn,string,JsonNode,int proc query(db: PPGconn; query: string; args: JsonNode; timeout: int): Future[\n (seq[Row], DbRows)] 132
|
||||
nim exec query_builder/libs/postgres/postgres_impl.html#exec,PPGconn,string,JsonNode,seq[Row],int proc exec(db: PPGconn; query: string; args: JsonNode; columns: seq[Row]; timeout: int): owned(\n Future[void]) 160
|
||||
nim execGetValue query_builder/libs/postgres/postgres_impl.html#execGetValue,PPGconn,string,JsonNode,seq[Row],int proc execGetValue(db: PPGconn; query: string; args: JsonNode; columns: seq[Row];\n timeout: int): Future[(seq[Row], DbRows)] 176
|
||||
nim rawQuery query_builder/libs/postgres/postgres_impl.html#rawQuery,PPGconn,string,JsonNode,int proc rawQuery(db: PPGconn; query: string; args: JsonNode; timeout: int): Future[\n (seq[Row], DbRows)] 204
|
||||
nim rawExec query_builder/libs/postgres/postgres_impl.html#rawExec,PPGconn,string,JsonNode,int proc rawExec(db: PPGconn; query: string; args: JsonNode; timeout: int): owned(\n Future[void]) 232
|
||||
nim query query_builder/libs/postgres/postgres_impl.html#query,PPGconn,string,seq[string],int proc query(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[\n (seq[Row], DbRows)] 252
|
||||
nim queryPlain query_builder/libs/postgres/postgres_impl.html#queryPlain,PPGconn,string,seq[string],int proc queryPlain(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[\n seq[Row]] 277
|
||||
nim exec query_builder/libs/postgres/postgres_impl.html#exec,PPGconn,string,seq[string],int proc exec(db: PPGconn; query: string; args: seq[string]; timeout: int): owned(\n Future[void]) 300
|
||||
nim getColumns query_builder/libs/postgres/postgres_impl.html#getColumns,PPGconn,string,seq[string],int proc getColumns(db: PPGconn; query: string; args: seq[string]; timeout: int): Future[\n seq[string]] 314
|
||||
nim prepare query_builder/libs/postgres/postgres_impl.html#prepare,PPGconn,string,int,string proc prepare(db: PPGconn; query: string; timeout: int; stmtName: string): Future[int] 336
|
||||
nim preparedQuery query_builder/libs/postgres/postgres_impl.html#preparedQuery,PPGconn,seq[string],int,int,string proc preparedQuery(db: PPGconn; args: seq[string]; nArgs: int; timeout: int;\n stmtName: string): Future[(seq[Row], DbRows)] 351
|
||||
nim preparedExec query_builder/libs/postgres/postgres_impl.html#preparedExec,PPGconn,seq[string],int,int,string proc preparedExec(db: PPGconn; args: seq[string]; nArgs: int; timeout: int;\n stmtName: string): owned(Future[void]) 379
|
||||
nimgrp query query_builder/libs/postgres/postgres_impl.html#query-procs-all proc 132
|
||||
nimgrp exec query_builder/libs/postgres/postgres_impl.html#exec-procs-all proc 160
|
||||
@@ -0,0 +1,314 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/postgres/postgres_lib</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/postgres/postgres_lib</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#PGParams" title="PGParams = object
|
||||
nParams*: int32
|
||||
values*: cstringArray
|
||||
lengths*: seq[int32]
|
||||
formats*: seq[int32]">PGParams</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">appendDbRowWithBaseColumns
|
||||
<li><a class="reference" href="#appendDbRowWithBaseColumns%2CPPGresult%2CDbRows%2Cint32%2Cint32%2CDbColumns" title="appendDbRowWithBaseColumns(res: PPGresult; dbRows: var DbRows;
|
||||
line, cols: int32; base: DbColumns)">appendDbRowWithBaseColumns(res: PPGresult; dbRows: var DbRows;
|
||||
line, cols: int32; base: DbColumns)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">buildBaseDbColumns
|
||||
<li><a class="reference" href="#buildBaseDbColumns%2CPPGresult%2Cint32" title="buildBaseDbColumns(res: PPGresult; cols: int32): DbColumns">buildBaseDbColumns(res: PPGresult; cols: int32): DbColumns</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">checkError
|
||||
<li><a class="reference" href="#checkError%2CPPGconn" title="checkError(db: PPGconn)">checkError(db: PPGconn)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">dbError
|
||||
<li><a class="reference" href="#dbError%2CPPGconn" title="dbError(db: PPGconn)">dbError(db: PPGconn)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">dbFormat
|
||||
<li><a class="reference" href="#dbFormat%2Cstring%2Cvarargs%5Bstring%5D" title="dbFormat(formatstr: string; args: varargs[string]): string">dbFormat(formatstr: string; args: varargs[string]): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">fromArray
|
||||
<li><a class="reference" href="#fromArray%2CtypePGParams%2CJsonNode" title="fromArray(_: type PGParams; args: JsonNode): PGParams">fromArray(_: type PGParams; args: JsonNode): PGParams</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">fromObjArray
|
||||
<li><a class="reference" href="#fromObjArray%2CtypePGParams%2CJsonNode" title="fromObjArray(_: type PGParams; args: JsonNode): PGParams">fromObjArray(_: type PGParams; args: JsonNode): PGParams</a></li>
|
||||
<li><a class="reference" href="#fromObjArray%2CtypePGParams%2CJsonNode%2Cseq%5BRow%5D" title="fromObjArray(_: type PGParams; args: JsonNode; columns: seq[Row]): PGParams">fromObjArray(_: type PGParams; args: JsonNode; columns: seq[Row]): PGParams</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">newRow
|
||||
<li><a class="reference" href="#newRow%2Cint" title="newRow(L: int): Row">newRow(L: int): Row</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">questionToDaller
|
||||
<li><a class="reference" href="#questionToDaller%2Cstring" title="questionToDaller(s: string): string">questionToDaller(s: string): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">setColumnInfo
|
||||
<li><a class="reference" href="#setColumnInfo%2CPPGresult%2CDbRows%2Cint32%2Cint32" title="setColumnInfo(res: PPGresult; dbRows: var DbRows; line, cols: int32)">setColumnInfo(res: PPGresult; dbRows: var DbRows; line, cols: int32)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">setRow
|
||||
<li><a class="reference" href="#setRow%2CPPGresult%2CRow%2Cint32%2Cint32" title="setRow(res: PPGresult; r: var Row; line, cols: int32)">setRow(res: PPGresult; r: var Row; line, cols: int32)</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="postgres_rdb.html">postgres_rdb</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="PGParams">
|
||||
<dt><pre><a href="postgres_lib.html#PGParams"><span class="Identifier">PGParams</span></a> <span class="Other">=</span> <span class="Keyword">object</span>
|
||||
<span class="Identifier">nParams</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">int32</span>
|
||||
<span class="Identifier">values</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">cstringArray</span>
|
||||
<span class="Identifier">lengths</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">int32</span><span class="Other">]</span>
|
||||
<span class="Identifier">formats</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">int32</span><span class="Other">]</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="appendDbRowWithBaseColumns-procs-all">
|
||||
<div id="appendDbRowWithBaseColumns,PPGresult,DbRows,int32,int32,DbColumns">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#appendDbRowWithBaseColumns%2CPPGresult%2CDbRows%2Cint32%2Cint32%2CDbColumns"><span class="Identifier">appendDbRowWithBaseColumns</span></a><span class="Other">(</span><span class="Identifier">res</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGresult"><span class="Identifier">PPGresult</span></a><span class="Other">;</span> <span class="Identifier">dbRows</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">;</span>
|
||||
<span class="Identifier">line</span><span class="Other">,</span> <span class="Identifier">cols</span><span class="Other">:</span> <span class="Identifier">int32</span><span class="Other">;</span> <span class="Identifier">base</span><span class="Other">:</span> <a href="../../models/database_types.html#DbColumns"><span class="Identifier">DbColumns</span></a><span class="Other">)</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="buildBaseDbColumns-procs-all">
|
||||
<div id="buildBaseDbColumns,PPGresult,int32">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#buildBaseDbColumns%2CPPGresult%2Cint32"><span class="Identifier">buildBaseDbColumns</span></a><span class="Other">(</span><span class="Identifier">res</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGresult"><span class="Identifier">PPGresult</span></a><span class="Other">;</span> <span class="Identifier">cols</span><span class="Other">:</span> <span class="Identifier">int32</span><span class="Other">)</span><span class="Other">:</span> <a href="../../models/database_types.html#DbColumns"><span class="Identifier">DbColumns</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="checkError-procs-all">
|
||||
<div id="checkError,PPGconn">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#checkError%2CPPGconn"><span class="Identifier">checkError</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
Raises a DbError exception.
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="dbError-procs-all">
|
||||
<div id="dbError,PPGconn">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbError%2CPPGconn"><span class="Identifier">dbError</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGconn"><span class="Identifier">PPGconn</span></a><span class="Other">)</span> {.<span class="Identifier">noreturn</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
raises a DbError exception.
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="dbFormat-procs-all">
|
||||
<div id="dbFormat,string,varargs[string]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2Cstring%2Cvarargs%5Bstring%5D"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">formatstr</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">varargs</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="fromArray-procs-all">
|
||||
<div id="fromArray,typePGParams,JsonNode">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#fromArray%2CtypePGParams%2CJsonNode"><span class="Identifier">fromArray</span></a><span class="Other">(</span><span class="Operator">_</span><span class="Other">:</span> <span class="Keyword">type</span> <span class="Identifier">PGParams</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">)</span><span class="Other">:</span> <a href="postgres_lib.html#PGParams"><span class="Identifier">PGParams</span></a></pre></dt>
|
||||
<dd>
|
||||
|
||||
<tt class="docutils literal"><span class="pre"><span class="Identifier">args</span></span></tt> is JArray <tt class="docutils literal"><span class="pre"><span class="Punctuation">{</span><span class="Identifier">true</span><span class="Punctuation">,</span> <span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="FloatNumber">1.1</span><span class="Punctuation">,</span> <span class="StringLit">"alice"</span><span class="Punctuation">}</span></span></tt>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="fromObjArray-procs-all">
|
||||
<div id="fromObjArray,typePGParams,JsonNode">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#fromObjArray%2CtypePGParams%2CJsonNode"><span class="Identifier">fromObjArray</span></a><span class="Other">(</span><span class="Operator">_</span><span class="Other">:</span> <span class="Keyword">type</span> <span class="Identifier">PGParams</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">)</span><span class="Other">:</span> <a href="postgres_lib.html#PGParams"><span class="Identifier">PGParams</span></a></pre></dt>
|
||||
<dd>
|
||||
|
||||
<tt class="docutils literal"><span class="pre"><span class="Identifier">args</span></span></tt> is JArray <tt class="docutils literal"><span class="pre"><span class="Punctuation">[</span><span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span> <span class="StringLit">"bool"</span><span class="Punctuation">,</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="Identifier">true</span><span class="Punctuation">}</span><span class="Punctuation">,</span><span class="Punctuation">{</span><span class="StringLit">"key"</span><span class="Punctuation">:</span> <span class="StringLit">"int"</span><span class="Punctuation">,</span> <span class="StringLit">"value"</span><span class="Punctuation">:</span> <span class="DecNumber">1</span><span class="Punctuation">}</span><span class="Punctuation">]</span></span></tt>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="fromObjArray,typePGParams,JsonNode,seq[Row]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#fromObjArray%2CtypePGParams%2CJsonNode%2Cseq%5BRow%5D"><span class="Identifier">fromObjArray</span></a><span class="Other">(</span><span class="Operator">_</span><span class="Other">:</span> <span class="Keyword">type</span> <span class="Identifier">PGParams</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="postgres_lib.html#PGParams"><span class="Identifier">PGParams</span></a></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="newRow-procs-all">
|
||||
<div id="newRow,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#newRow%2Cint"><span class="Identifier">newRow</span></a><span class="Other">(</span><span class="Identifier">L</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="questionToDaller-procs-all">
|
||||
<div id="questionToDaller,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#questionToDaller%2Cstring"><span class="Identifier">questionToDaller</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
<p>from <tt class="docutils literal"><span class="pre"><span class="Identifier">UPDATE</span> <span class="Identifier">user</span> <span class="Identifier">SET</span> <span class="Identifier">name</span> <span class="Operator">=</span> <span class="Operator">?</span><span class="Punctuation">,</span> <span class="Identifier">email</span> <span class="Operator">=</span> <span class="Operator">?</span> <span class="Identifier">WHERE</span> <span class="Identifier">id</span> <span class="Operator">=</span> <span class="Operator">?</span></span></tt></p>
|
||||
<p>to <tt class="docutils literal"><span class="pre"><span class="Identifier">UPDATE</span> <span class="Identifier">user</span> <span class="Identifier">SET</span> <span class="Identifier">name</span> <span class="Operator">=</span> <span class="Operator">$</span><span class="DecNumber">1</span><span class="Punctuation">,</span> <span class="Identifier">email</span> <span class="Operator">=</span> <span class="Operator">$</span><span class="DecNumber">2</span> <span class="Identifier">WHERE</span> <span class="Identifier">id</span> <span class="Operator">=</span> <span class="Operator">$</span><span class="DecNumber">3</span></span></tt></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="setColumnInfo-procs-all">
|
||||
<div id="setColumnInfo,PPGresult,DbRows,int32,int32">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#setColumnInfo%2CPPGresult%2CDbRows%2Cint32%2Cint32"><span class="Identifier">setColumnInfo</span></a><span class="Other">(</span><span class="Identifier">res</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGresult"><span class="Identifier">PPGresult</span></a><span class="Other">;</span> <span class="Identifier">dbRows</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">;</span> <span class="Identifier">line</span><span class="Other">,</span> <span class="Identifier">cols</span><span class="Other">:</span> <span class="Identifier">int32</span><span class="Other">)</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="setRow-procs-all">
|
||||
<div id="setRow,PPGresult,Row,int32,int32">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#setRow%2CPPGresult%2CRow%2Cint32%2Cint32"><span class="Identifier">setRow</span></a><span class="Other">(</span><span class="Identifier">res</span><span class="Other">:</span> <a href="postgres_rdb.html#PPGresult"><span class="Identifier">PPGresult</span></a><span class="Other">;</span> <span class="Identifier">r</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">;</span> <span class="Identifier">line</span><span class="Other">,</span> <span class="Identifier">cols</span><span class="Other">:</span> <span class="Identifier">int32</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:33 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
nimTitle postgres_lib query_builder/libs/postgres/postgres_lib.html module src/allographer/query_builder/libs/postgres/postgres_lib 0
|
||||
nim dbError query_builder/libs/postgres/postgres_lib.html#dbError,PPGconn proc dbError(db: PPGconn) 8
|
||||
nim checkError query_builder/libs/postgres/postgres_lib.html#checkError,PPGconn proc checkError(db: PPGconn) 15
|
||||
nim buildBaseDbColumns query_builder/libs/postgres/postgres_lib.html#buildBaseDbColumns,PPGresult,int32 proc buildBaseDbColumns(res: PPGresult; cols: int32): DbColumns 153
|
||||
nim appendDbRowWithBaseColumns query_builder/libs/postgres/postgres_lib.html#appendDbRowWithBaseColumns,PPGresult,DbRows,int32,int32,DbColumns proc appendDbRowWithBaseColumns(res: PPGresult; dbRows: var DbRows;\n line, cols: int32; base: DbColumns) 161
|
||||
nim setColumnInfo query_builder/libs/postgres/postgres_lib.html#setColumnInfo,PPGresult,DbRows,int32,int32 proc setColumnInfo(res: PPGresult; dbRows: var DbRows; line, cols: int32) 168
|
||||
nim newRow query_builder/libs/postgres/postgres_lib.html#newRow,int proc newRow(L: int): Row 172
|
||||
nim setRow query_builder/libs/postgres/postgres_lib.html#setRow,PPGresult,Row,int32,int32 proc setRow(res: PPGresult; r: var Row; line, cols: int32) 176
|
||||
nim dbFormat query_builder/libs/postgres/postgres_lib.html#dbFormat,string,varargs[string] proc dbFormat(formatstr: string; args: varargs[string]): string 207
|
||||
nim questionToDaller query_builder/libs/postgres/postgres_lib.html#questionToDaller,string proc questionToDaller(s: string): string 226
|
||||
nim PGParams query_builder/libs/postgres/postgres_lib.html#PGParams object PGParams 245
|
||||
nim fromObjArray query_builder/libs/postgres/postgres_lib.html#fromObjArray,typePGParams,JsonNode,seq[Row] proc fromObjArray(_: type PGParams; args: JsonNode; columns: seq[Row]): PGParams 307
|
||||
nim fromObjArray query_builder/libs/postgres/postgres_lib.html#fromObjArray,typePGParams,JsonNode proc fromObjArray(_: type PGParams; args: JsonNode): PGParams 313
|
||||
nim fromArray query_builder/libs/postgres/postgres_lib.html#fromArray,typePGParams,JsonNode proc fromArray(_: type PGParams; args: JsonNode): PGParams 321
|
||||
nimgrp fromobjarray query_builder/libs/postgres/postgres_lib.html#fromObjArray-procs-all proc 307
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,187 @@
|
||||
nimTitle postgres_rdb query_builder/libs/postgres/postgres_rdb.html module src/allographer/query_builder/libs/postgres/postgres_rdb 0
|
||||
nim POid query_builder/libs/postgres/postgres_rdb.html#POid type POid 14
|
||||
nim Oid query_builder/libs/postgres/postgres_rdb.html#Oid type Oid 15
|
||||
nim ERROR_MSG_LENGTH query_builder/libs/postgres/postgres_rdb.html#ERROR_MSG_LENGTH const ERROR_MSG_LENGTH 18
|
||||
nim CMDSTATUS_LEN query_builder/libs/postgres/postgres_rdb.html#CMDSTATUS_LEN const CMDSTATUS_LEN 19
|
||||
nim SockAddr query_builder/libs/postgres/postgres_rdb.html#SockAddr type SockAddr 22
|
||||
nim PGresAttDesc query_builder/libs/postgres/postgres_rdb.html#PGresAttDesc object PGresAttDesc 23
|
||||
nim PPGresAttDesc query_builder/libs/postgres/postgres_rdb.html#PPGresAttDesc type PPGresAttDesc 28
|
||||
nim PPPGresAttDesc query_builder/libs/postgres/postgres_rdb.html#PPPGresAttDesc type PPPGresAttDesc 29
|
||||
nim PGresAttValue query_builder/libs/postgres/postgres_rdb.html#PGresAttValue object PGresAttValue 30
|
||||
nim PPGresAttValue query_builder/libs/postgres/postgres_rdb.html#PPGresAttValue type PPGresAttValue 34
|
||||
nim PPPGresAttValue query_builder/libs/postgres/postgres_rdb.html#PPPGresAttValue type PPPGresAttValue 35
|
||||
nim PExecStatusType query_builder/libs/postgres/postgres_rdb.html#PExecStatusType type PExecStatusType 36
|
||||
nim PGRES_EMPTY_QUERY query_builder/libs/postgres/postgres_rdb.html#PGRES_EMPTY_QUERY ExecStatusType.PGRES_EMPTY_QUERY 37
|
||||
nim PGRES_COMMAND_OK query_builder/libs/postgres/postgres_rdb.html#PGRES_COMMAND_OK ExecStatusType.PGRES_COMMAND_OK 37
|
||||
nim PGRES_TUPLES_OK query_builder/libs/postgres/postgres_rdb.html#PGRES_TUPLES_OK ExecStatusType.PGRES_TUPLES_OK 37
|
||||
nim PGRES_COPY_OUT query_builder/libs/postgres/postgres_rdb.html#PGRES_COPY_OUT ExecStatusType.PGRES_COPY_OUT 37
|
||||
nim PGRES_COPY_IN query_builder/libs/postgres/postgres_rdb.html#PGRES_COPY_IN ExecStatusType.PGRES_COPY_IN 37
|
||||
nim PGRES_BAD_RESPONSE query_builder/libs/postgres/postgres_rdb.html#PGRES_BAD_RESPONSE ExecStatusType.PGRES_BAD_RESPONSE 37
|
||||
nim PGRES_NONFATAL_ERROR query_builder/libs/postgres/postgres_rdb.html#PGRES_NONFATAL_ERROR ExecStatusType.PGRES_NONFATAL_ERROR 37
|
||||
nim PGRES_FATAL_ERROR query_builder/libs/postgres/postgres_rdb.html#PGRES_FATAL_ERROR ExecStatusType.PGRES_FATAL_ERROR 37
|
||||
nim PGRES_COPY_BOTH query_builder/libs/postgres/postgres_rdb.html#PGRES_COPY_BOTH ExecStatusType.PGRES_COPY_BOTH 37
|
||||
nim PGRES_SINGLE_TUPLE query_builder/libs/postgres/postgres_rdb.html#PGRES_SINGLE_TUPLE ExecStatusType.PGRES_SINGLE_TUPLE 37
|
||||
nim ExecStatusType query_builder/libs/postgres/postgres_rdb.html#ExecStatusType enum ExecStatusType 37
|
||||
nim PGlobjfuncs query_builder/libs/postgres/postgres_rdb.html#PGlobjfuncs object PGlobjfuncs 41
|
||||
nim PPGlobjfuncs query_builder/libs/postgres/postgres_rdb.html#PPGlobjfuncs type PPGlobjfuncs 51
|
||||
nim PConnStatusType query_builder/libs/postgres/postgres_rdb.html#PConnStatusType type PConnStatusType 52
|
||||
nim CONNECTION_OK query_builder/libs/postgres/postgres_rdb.html#CONNECTION_OK ConnStatusType.CONNECTION_OK 53
|
||||
nim CONNECTION_BAD query_builder/libs/postgres/postgres_rdb.html#CONNECTION_BAD ConnStatusType.CONNECTION_BAD 53
|
||||
nim CONNECTION_STARTED query_builder/libs/postgres/postgres_rdb.html#CONNECTION_STARTED ConnStatusType.CONNECTION_STARTED 53
|
||||
nim CONNECTION_MADE query_builder/libs/postgres/postgres_rdb.html#CONNECTION_MADE ConnStatusType.CONNECTION_MADE 53
|
||||
nim CONNECTION_AWAITING_RESPONSE query_builder/libs/postgres/postgres_rdb.html#CONNECTION_AWAITING_RESPONSE ConnStatusType.CONNECTION_AWAITING_RESPONSE 53
|
||||
nim CONNECTION_AUTH_OK query_builder/libs/postgres/postgres_rdb.html#CONNECTION_AUTH_OK ConnStatusType.CONNECTION_AUTH_OK 53
|
||||
nim CONNECTION_SETENV query_builder/libs/postgres/postgres_rdb.html#CONNECTION_SETENV ConnStatusType.CONNECTION_SETENV 53
|
||||
nim CONNECTION_SSL_STARTUP query_builder/libs/postgres/postgres_rdb.html#CONNECTION_SSL_STARTUP ConnStatusType.CONNECTION_SSL_STARTUP 53
|
||||
nim CONNECTION_NEEDED query_builder/libs/postgres/postgres_rdb.html#CONNECTION_NEEDED ConnStatusType.CONNECTION_NEEDED 53
|
||||
nim CONNECTION_CHECK_WRITABLE query_builder/libs/postgres/postgres_rdb.html#CONNECTION_CHECK_WRITABLE ConnStatusType.CONNECTION_CHECK_WRITABLE 53
|
||||
nim CONNECTION_CONSUME query_builder/libs/postgres/postgres_rdb.html#CONNECTION_CONSUME ConnStatusType.CONNECTION_CONSUME 53
|
||||
nim CONNECTION_GSS_STARTUP query_builder/libs/postgres/postgres_rdb.html#CONNECTION_GSS_STARTUP ConnStatusType.CONNECTION_GSS_STARTUP 53
|
||||
nim CONNECTION_CHECK_TARGET query_builder/libs/postgres/postgres_rdb.html#CONNECTION_CHECK_TARGET ConnStatusType.CONNECTION_CHECK_TARGET 53
|
||||
nim ConnStatusType query_builder/libs/postgres/postgres_rdb.html#ConnStatusType enum ConnStatusType 53
|
||||
nim PGconn query_builder/libs/postgres/postgres_rdb.html#PGconn object PGconn 58
|
||||
nim PPGconn query_builder/libs/postgres/postgres_rdb.html#PPGconn type PPGconn 79
|
||||
nim PGresult query_builder/libs/postgres/postgres_rdb.html#PGresult object PGresult 80
|
||||
nim PGCancel query_builder/libs/postgres/postgres_rdb.html#PGCancel object PGCancel 91
|
||||
nim PPGcancel query_builder/libs/postgres/postgres_rdb.html#PPGcancel type PPGcancel 92
|
||||
nim PPGresult query_builder/libs/postgres/postgres_rdb.html#PPGresult type PPGresult 94
|
||||
nim PPostgresPollingStatusType query_builder/libs/postgres/postgres_rdb.html#PPostgresPollingStatusType type PPostgresPollingStatusType 95
|
||||
nim PGRES_POLLING_FAILED query_builder/libs/postgres/postgres_rdb.html#PGRES_POLLING_FAILED PostgresPollingStatusType.PGRES_POLLING_FAILED 96
|
||||
nim PGRES_POLLING_READING query_builder/libs/postgres/postgres_rdb.html#PGRES_POLLING_READING PostgresPollingStatusType.PGRES_POLLING_READING 96
|
||||
nim PGRES_POLLING_WRITING query_builder/libs/postgres/postgres_rdb.html#PGRES_POLLING_WRITING PostgresPollingStatusType.PGRES_POLLING_WRITING 96
|
||||
nim PGRES_POLLING_OK query_builder/libs/postgres/postgres_rdb.html#PGRES_POLLING_OK PostgresPollingStatusType.PGRES_POLLING_OK 96
|
||||
nim PGRES_POLLING_ACTIVE query_builder/libs/postgres/postgres_rdb.html#PGRES_POLLING_ACTIVE PostgresPollingStatusType.PGRES_POLLING_ACTIVE 96
|
||||
nim PostgresPollingStatusType query_builder/libs/postgres/postgres_rdb.html#PostgresPollingStatusType enum PostgresPollingStatusType 96
|
||||
nim PPGTransactionStatusType query_builder/libs/postgres/postgres_rdb.html#PPGTransactionStatusType type PPGTransactionStatusType 99
|
||||
nim PQTRANS_IDLE query_builder/libs/postgres/postgres_rdb.html#PQTRANS_IDLE PGTransactionStatusType.PQTRANS_IDLE 100
|
||||
nim PQTRANS_ACTIVE query_builder/libs/postgres/postgres_rdb.html#PQTRANS_ACTIVE PGTransactionStatusType.PQTRANS_ACTIVE 100
|
||||
nim PQTRANS_INTRANS query_builder/libs/postgres/postgres_rdb.html#PQTRANS_INTRANS PGTransactionStatusType.PQTRANS_INTRANS 100
|
||||
nim PQTRANS_INERROR query_builder/libs/postgres/postgres_rdb.html#PQTRANS_INERROR PGTransactionStatusType.PQTRANS_INERROR 100
|
||||
nim PQTRANS_UNKNOWN query_builder/libs/postgres/postgres_rdb.html#PQTRANS_UNKNOWN PGTransactionStatusType.PQTRANS_UNKNOWN 100
|
||||
nim PGTransactionStatusType query_builder/libs/postgres/postgres_rdb.html#PGTransactionStatusType enum PGTransactionStatusType 100
|
||||
nim PPGVerbosity query_builder/libs/postgres/postgres_rdb.html#PPGVerbosity type PPGVerbosity 103
|
||||
nim PQERRORS_TERSE query_builder/libs/postgres/postgres_rdb.html#PQERRORS_TERSE PGVerbosity.PQERRORS_TERSE 104
|
||||
nim PQERRORS_DEFAULT query_builder/libs/postgres/postgres_rdb.html#PQERRORS_DEFAULT PGVerbosity.PQERRORS_DEFAULT 104
|
||||
nim PQERRORS_VERBOSE query_builder/libs/postgres/postgres_rdb.html#PQERRORS_VERBOSE PGVerbosity.PQERRORS_VERBOSE 104
|
||||
nim PQERRORS_SQLSTATE query_builder/libs/postgres/postgres_rdb.html#PQERRORS_SQLSTATE PGVerbosity.PQERRORS_SQLSTATE 104
|
||||
nim PGVerbosity query_builder/libs/postgres/postgres_rdb.html#PGVerbosity enum PGVerbosity 104
|
||||
nim PPGNotify query_builder/libs/postgres/postgres_rdb.html#PPGNotify type PPGNotify 106
|
||||
nim pgNotify query_builder/libs/postgres/postgres_rdb.html#pgNotify object pgNotify 107
|
||||
nim PQnoticeReceiver query_builder/libs/postgres/postgres_rdb.html#PQnoticeReceiver type PQnoticeReceiver 112
|
||||
nim PQnoticeProcessor query_builder/libs/postgres/postgres_rdb.html#PQnoticeProcessor type PQnoticeProcessor 113
|
||||
nim Ppqbool query_builder/libs/postgres/postgres_rdb.html#Ppqbool type Ppqbool 114
|
||||
nim pqbool query_builder/libs/postgres/postgres_rdb.html#pqbool type pqbool 115
|
||||
nim PPQprintOpt query_builder/libs/postgres/postgres_rdb.html#PPQprintOpt type PPQprintOpt 116
|
||||
nim PQprintOpt query_builder/libs/postgres/postgres_rdb.html#PQprintOpt object PQprintOpt 117
|
||||
nim PPQconninfoOption query_builder/libs/postgres/postgres_rdb.html#PPQconninfoOption type PPQconninfoOption 129
|
||||
nim PQconninfoOption query_builder/libs/postgres/postgres_rdb.html#PQconninfoOption object PQconninfoOption 130
|
||||
nim PPQArgBlock query_builder/libs/postgres/postgres_rdb.html#PPQArgBlock type PPQArgBlock 139
|
||||
nim PQArgBlock query_builder/libs/postgres/postgres_rdb.html#PQArgBlock object PQArgBlock 140
|
||||
nim pqinitOpenSSL query_builder/libs/postgres/postgres_rdb.html#pqinitOpenSSL,int32,int32 proc pqinitOpenSSL(do_ssl: int32; do_crypto: int32) 145
|
||||
nim pqconnectStart query_builder/libs/postgres/postgres_rdb.html#pqconnectStart,cstring proc pqconnectStart(conninfo: cstring): PPGconn 147
|
||||
nim pqconnectPoll query_builder/libs/postgres/postgres_rdb.html#pqconnectPoll,PPGconn proc pqconnectPoll(conn: PPGconn): PostgresPollingStatusType 149
|
||||
nim pqconnectdb query_builder/libs/postgres/postgres_rdb.html#pqconnectdb,cstring proc pqconnectdb(conninfo: cstring): PPGconn 151
|
||||
nim pqsetdbLogin query_builder/libs/postgres/postgres_rdb.html#pqsetdbLogin,cstring,cstring,cstring,cstring,cstring,cstring,cstring proc pqsetdbLogin(pghost: cstring; pgport: cstring; pgoptions: cstring;\n pgtty: cstring; dbName: cstring; login: cstring; pwd: cstring): PPGconn 153
|
||||
nim pqsetdb query_builder/libs/postgres/postgres_rdb.html#pqsetdb,cstring,cstring,cstring,cstring,cstring proc pqsetdb(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME: cstring): PPGconn 156
|
||||
nim pqfinish query_builder/libs/postgres/postgres_rdb.html#pqfinish,PPGconn proc pqfinish(conn: PPGconn) 157
|
||||
nim pqconndefaults query_builder/libs/postgres/postgres_rdb.html#pqconndefaults proc pqconndefaults(): PPQconninfoOption 158
|
||||
nim pqconninfoFree query_builder/libs/postgres/postgres_rdb.html#pqconninfoFree,PPQconninfoOption proc pqconninfoFree(connOptions: PPQconninfoOption) 160
|
||||
nim pqresetStart query_builder/libs/postgres/postgres_rdb.html#pqresetStart,PPGconn proc pqresetStart(conn: PPGconn): int32 162
|
||||
nim pqresetPoll query_builder/libs/postgres/postgres_rdb.html#pqresetPoll,PPGconn proc pqresetPoll(conn: PPGconn): PostgresPollingStatusType 164
|
||||
nim pqreset query_builder/libs/postgres/postgres_rdb.html#pqreset,PPGconn proc pqreset(conn: PPGconn) 166
|
||||
nim pqGetCancel query_builder/libs/postgres/postgres_rdb.html#pqGetCancel,PPGconn proc pqGetCancel(conn: PPGconn): PPGcancel 170
|
||||
nim pqFreeCancel query_builder/libs/postgres/postgres_rdb.html#pqFreeCancel,PPGcancel proc pqFreeCancel(cancel: PPGcancel) 171
|
||||
nim pqCancel query_builder/libs/postgres/postgres_rdb.html#pqCancel,PPGcancel,cstring,int32 proc pqCancel(cancel: PPGcancel; errbuf: cstring; errbufsize: int32): int32 172
|
||||
nim pqrequestCancel query_builder/libs/postgres/postgres_rdb.html#pqrequestCancel,PPGconn proc pqrequestCancel(conn: PPGconn): int32 174
|
||||
nim pqdb query_builder/libs/postgres/postgres_rdb.html#pqdb,PPGconn proc pqdb(conn: PPGconn): cstring 176
|
||||
nim pquser query_builder/libs/postgres/postgres_rdb.html#pquser,PPGconn proc pquser(conn: PPGconn): cstring 177
|
||||
nim pqpass query_builder/libs/postgres/postgres_rdb.html#pqpass,PPGconn proc pqpass(conn: PPGconn): cstring 178
|
||||
nim pqhost query_builder/libs/postgres/postgres_rdb.html#pqhost,PPGconn proc pqhost(conn: PPGconn): cstring 179
|
||||
nim pqport query_builder/libs/postgres/postgres_rdb.html#pqport,PPGconn proc pqport(conn: PPGconn): cstring 180
|
||||
nim pqtty query_builder/libs/postgres/postgres_rdb.html#pqtty,PPGconn proc pqtty(conn: PPGconn): cstring 181
|
||||
nim pqoptions query_builder/libs/postgres/postgres_rdb.html#pqoptions,PPGconn proc pqoptions(conn: PPGconn): cstring 182
|
||||
nim pqstatus query_builder/libs/postgres/postgres_rdb.html#pqstatus,PPGconn proc pqstatus(conn: PPGconn): ConnStatusType 184
|
||||
nim pqtransactionStatus query_builder/libs/postgres/postgres_rdb.html#pqtransactionStatus,PPGconn proc pqtransactionStatus(conn: PPGconn): PGTransactionStatusType 186
|
||||
nim pqparameterStatus query_builder/libs/postgres/postgres_rdb.html#pqparameterStatus,PPGconn,cstring proc pqparameterStatus(conn: PPGconn; paramName: cstring): cstring 188
|
||||
nim pqserverVersion query_builder/libs/postgres/postgres_rdb.html#pqserverVersion,PPGconn proc pqserverVersion(conn: PPGconn): int32 190
|
||||
nim pqprotocolVersion query_builder/libs/postgres/postgres_rdb.html#pqprotocolVersion,PPGconn proc pqprotocolVersion(conn: PPGconn): int32 192
|
||||
nim pqerrorMessage query_builder/libs/postgres/postgres_rdb.html#pqerrorMessage,PPGconn proc pqerrorMessage(conn: PPGconn): cstring 194
|
||||
nim pqsocket query_builder/libs/postgres/postgres_rdb.html#pqsocket,PPGconn proc pqsocket(conn: PPGconn): int32 196
|
||||
nim pqbackendPID query_builder/libs/postgres/postgres_rdb.html#pqbackendPID,PPGconn proc pqbackendPID(conn: PPGconn): int32 198
|
||||
nim pqconnectionNeedsPassword query_builder/libs/postgres/postgres_rdb.html#pqconnectionNeedsPassword,PPGconn proc pqconnectionNeedsPassword(conn: PPGconn): int32 200
|
||||
nim pqconnectionUsedPassword query_builder/libs/postgres/postgres_rdb.html#pqconnectionUsedPassword,PPGconn proc pqconnectionUsedPassword(conn: PPGconn): int32 202
|
||||
nim pqclientEncoding query_builder/libs/postgres/postgres_rdb.html#pqclientEncoding,PPGconn proc pqclientEncoding(conn: PPGconn): int32 204
|
||||
nim pqsetClientEncoding query_builder/libs/postgres/postgres_rdb.html#pqsetClientEncoding,PPGconn,cstring proc pqsetClientEncoding(conn: PPGconn; encoding: cstring): int32 206
|
||||
nim pqsetErrorVerbosity query_builder/libs/postgres/postgres_rdb.html#pqsetErrorVerbosity,PPGconn,PGVerbosity proc pqsetErrorVerbosity(conn: PPGconn; verbosity: PGVerbosity): PGVerbosity 212
|
||||
nim pqtrace query_builder/libs/postgres/postgres_rdb.html#pqtrace,PPGconn,File proc pqtrace(conn: PPGconn; debug_port: File) 214
|
||||
nim pquntrace query_builder/libs/postgres/postgres_rdb.html#pquntrace,PPGconn proc pquntrace(conn: PPGconn) 216
|
||||
nim pqsetNoticeReceiver query_builder/libs/postgres/postgres_rdb.html#pqsetNoticeReceiver,PPGconn,PQnoticeReceiver,pointer proc pqsetNoticeReceiver(conn: PPGconn; theProc: PQnoticeReceiver; arg: pointer): PQnoticeReceiver 217
|
||||
nim pqsetNoticeProcessor query_builder/libs/postgres/postgres_rdb.html#pqsetNoticeProcessor,PPGconn,PQnoticeProcessor,pointer proc pqsetNoticeProcessor(conn: PPGconn; theProc: PQnoticeProcessor; arg: pointer): PQnoticeProcessor 219
|
||||
nim pqexec query_builder/libs/postgres/postgres_rdb.html#pqexec,PPGconn,cstring proc pqexec(conn: PPGconn; query: cstring): PPGresult 222
|
||||
nim pqexecParams query_builder/libs/postgres/postgres_rdb.html#pqexecParams,PPGconn,cstring,int32,POid,cstringArray,ptr.int32,ptr.int32,int32 proc pqexecParams(conn: PPGconn; command: cstring; nParams: int32; paramTypes: POid;\n paramValues: cstringArray; paramLengths, paramFormats: ptr int32;\n resultFormat: int32): PPGresult 224
|
||||
nim pqprepare query_builder/libs/postgres/postgres_rdb.html#pqprepare,PPGconn,cstring,cstring,int32,POid proc pqprepare(conn: PPGconn; stmtName, query: cstring; nParams: int32;\n paramTypes: POid): PPGresult 228
|
||||
nim pqexecPrepared query_builder/libs/postgres/postgres_rdb.html#pqexecPrepared,PPGconn,cstring,int32,cstringArray,ptr.int32,ptr.int32,int32 proc pqexecPrepared(conn: PPGconn; stmtName: cstring; nParams: int32;\n paramValues: cstringArray; paramLengths, paramFormats: ptr int32;\n resultFormat: int32): PPGresult 230
|
||||
nim pqsendQuery query_builder/libs/postgres/postgres_rdb.html#pqsendQuery,PPGconn,cstring proc pqsendQuery(conn: PPGconn; query: cstring): int32 234
|
||||
nim pqsendQueryParams query_builder/libs/postgres/postgres_rdb.html#pqsendQueryParams,PPGconn,cstring,int32,POid,cstringArray,ptr.int32,ptr.int32,int32 proc pqsendQueryParams(conn: PPGconn; command: cstring; nParams: int32;\n paramTypes: POid; paramValues: cstringArray;\n paramLengths, paramFormats: ptr int32; resultFormat: int32): int32 237
|
||||
nim pqsendPrepare query_builder/libs/postgres/postgres_rdb.html#pqsendPrepare,PPGconn,cstring,cstring,int32,POid proc pqsendPrepare(conn: PPGconn; stmtName: cstring; query: cstring; nParams: int32;\n paramTypes: POid): int32 242
|
||||
nim pqsendQueryPrepared query_builder/libs/postgres/postgres_rdb.html#pqsendQueryPrepared,PPGconn,cstring,int32,cstringArray,ptr.int32,ptr.int32,int32 proc pqsendQueryPrepared(conn: PPGconn; stmtName: cstring; nParams: int32;\n paramValues: cstringArray;\n paramLengths, paramFormats: ptr int32; resultFormat: int32): int32 245
|
||||
nim pqSetSingleRowMode query_builder/libs/postgres/postgres_rdb.html#pqSetSingleRowMode,PPGconn proc pqSetSingleRowMode(conn: PPGconn): int32 250
|
||||
nim pqgetResult query_builder/libs/postgres/postgres_rdb.html#pqgetResult,PPGconn proc pqgetResult(conn: PPGconn): PPGresult 253
|
||||
nim pqisBusy query_builder/libs/postgres/postgres_rdb.html#pqisBusy,PPGconn proc pqisBusy(conn: PPGconn): int32 255
|
||||
nim pqconsumeInput query_builder/libs/postgres/postgres_rdb.html#pqconsumeInput,PPGconn proc pqconsumeInput(conn: PPGconn): int32 257
|
||||
nim pqnotifies query_builder/libs/postgres/postgres_rdb.html#pqnotifies,PPGconn proc pqnotifies(conn: PPGconn): PPGNotify 259
|
||||
nim pqputCopyData query_builder/libs/postgres/postgres_rdb.html#pqputCopyData,PPGconn,cstring,int32 proc pqputCopyData(conn: PPGconn; buffer: cstring; nbytes: int32): int32 261
|
||||
nim pqputCopyEnd query_builder/libs/postgres/postgres_rdb.html#pqputCopyEnd,PPGconn,cstring proc pqputCopyEnd(conn: PPGconn; errormsg: cstring): int32 263
|
||||
nim pqgetCopyData query_builder/libs/postgres/postgres_rdb.html#pqgetCopyData,PPGconn,cstringArray,int32 proc pqgetCopyData(conn: PPGconn; buffer: cstringArray; async: int32): int32 265
|
||||
nim pqgetline query_builder/libs/postgres/postgres_rdb.html#pqgetline,PPGconn,cstring,int32 proc pqgetline(conn: PPGconn; str: cstring; len: int32): int32 267
|
||||
nim pqputline query_builder/libs/postgres/postgres_rdb.html#pqputline,PPGconn,cstring proc pqputline(conn: PPGconn; str: cstring): int32 269
|
||||
nim pqgetlineAsync query_builder/libs/postgres/postgres_rdb.html#pqgetlineAsync,PPGconn,cstring,int32 proc pqgetlineAsync(conn: PPGconn; buffer: cstring; bufsize: int32): int32 271
|
||||
nim pqputnbytes query_builder/libs/postgres/postgres_rdb.html#pqputnbytes,PPGconn,cstring,int32 proc pqputnbytes(conn: PPGconn; buffer: cstring; nbytes: int32): int32 273
|
||||
nim pqendcopy query_builder/libs/postgres/postgres_rdb.html#pqendcopy,PPGconn proc pqendcopy(conn: PPGconn): int32 275
|
||||
nim pqsetnonblocking query_builder/libs/postgres/postgres_rdb.html#pqsetnonblocking,PPGconn,int32 proc pqsetnonblocking(conn: PPGconn; arg: int32): int32 277
|
||||
nim pqisnonblocking query_builder/libs/postgres/postgres_rdb.html#pqisnonblocking,PPGconn proc pqisnonblocking(conn: PPGconn): int32 279
|
||||
nim pqflush query_builder/libs/postgres/postgres_rdb.html#pqflush,PPGconn proc pqflush(conn: PPGconn): int32 281
|
||||
nim pqfn query_builder/libs/postgres/postgres_rdb.html#pqfn,PPGconn,int32,ptr.int32,ptr.int32,int32,PPQArgBlock,int32 proc pqfn(conn: PPGconn; fnid: int32; result_buf, result_len: ptr int32;\n result_is_int: int32; args: PPQArgBlock; nargs: int32): PPGresult 282
|
||||
nim pqresultStatus query_builder/libs/postgres/postgres_rdb.html#pqresultStatus,PPGresult proc pqresultStatus(res: PPGresult): ExecStatusType 285
|
||||
nim pqresStatus query_builder/libs/postgres/postgres_rdb.html#pqresStatus,ExecStatusType proc pqresStatus(status: ExecStatusType): cstring 287
|
||||
nim pqresultErrorMessage query_builder/libs/postgres/postgres_rdb.html#pqresultErrorMessage,PPGresult proc pqresultErrorMessage(res: PPGresult): cstring 289
|
||||
nim pqresultErrorField query_builder/libs/postgres/postgres_rdb.html#pqresultErrorField,PPGresult,int32 proc pqresultErrorField(res: PPGresult; fieldcode: int32): cstring 291
|
||||
nim pqntuples query_builder/libs/postgres/postgres_rdb.html#pqntuples,PPGresult proc pqntuples(res: PPGresult): int32 293
|
||||
nim pqnfields query_builder/libs/postgres/postgres_rdb.html#pqnfields,PPGresult proc pqnfields(res: PPGresult): int32 295
|
||||
nim pqbinaryTuples query_builder/libs/postgres/postgres_rdb.html#pqbinaryTuples,PPGresult proc pqbinaryTuples(res: PPGresult): int32 297
|
||||
nim pqfname query_builder/libs/postgres/postgres_rdb.html#pqfname,PPGresult,int32 proc pqfname(res: PPGresult; field_num: int32): cstring 299
|
||||
nim pqfnumber query_builder/libs/postgres/postgres_rdb.html#pqfnumber,PPGresult,cstring proc pqfnumber(res: PPGresult; field_name: cstring): int32 301
|
||||
nim pqftable query_builder/libs/postgres/postgres_rdb.html#pqftable,PPGresult,int32 proc pqftable(res: PPGresult; field_num: int32): Oid 303
|
||||
nim pqftablecol query_builder/libs/postgres/postgres_rdb.html#pqftablecol,PPGresult,int32 proc pqftablecol(res: PPGresult; field_num: int32): int32 305
|
||||
nim pqfformat query_builder/libs/postgres/postgres_rdb.html#pqfformat,PPGresult,int32 proc pqfformat(res: PPGresult; field_num: int32): int32 307
|
||||
nim pqftype query_builder/libs/postgres/postgres_rdb.html#pqftype,PPGresult,int32 proc pqftype(res: PPGresult; field_num: int32): Oid 309
|
||||
nim pqfsize query_builder/libs/postgres/postgres_rdb.html#pqfsize,PPGresult,int32 proc pqfsize(res: PPGresult; field_num: int32): int32 311
|
||||
nim pqfmod query_builder/libs/postgres/postgres_rdb.html#pqfmod,PPGresult,int32 proc pqfmod(res: PPGresult; field_num: int32): int32 313
|
||||
nim pqcmdStatus query_builder/libs/postgres/postgres_rdb.html#pqcmdStatus,PPGresult proc pqcmdStatus(res: PPGresult): cstring 315
|
||||
nim pqoidStatus query_builder/libs/postgres/postgres_rdb.html#pqoidStatus,PPGresult proc pqoidStatus(res: PPGresult): cstring 317
|
||||
nim pqoidValue query_builder/libs/postgres/postgres_rdb.html#pqoidValue,PPGresult proc pqoidValue(res: PPGresult): Oid 319
|
||||
nim pqcmdTuples query_builder/libs/postgres/postgres_rdb.html#pqcmdTuples,PPGresult proc pqcmdTuples(res: PPGresult): cstring 321
|
||||
nim pqgetvalue query_builder/libs/postgres/postgres_rdb.html#pqgetvalue,PPGresult,int32,int32 proc pqgetvalue(res: PPGresult; tup_num: int32; field_num: int32): cstring 323
|
||||
nim pqgetlength query_builder/libs/postgres/postgres_rdb.html#pqgetlength,PPGresult,int32,int32 proc pqgetlength(res: PPGresult; tup_num: int32; field_num: int32): int32 325
|
||||
nim pqgetisnull query_builder/libs/postgres/postgres_rdb.html#pqgetisnull,PPGresult,int32,int32 proc pqgetisnull(res: PPGresult; tup_num: int32; field_num: int32): int32 327
|
||||
nim pqclear query_builder/libs/postgres/postgres_rdb.html#pqclear,PPGresult proc pqclear(res: PPGresult) 329
|
||||
nim pqfreemem query_builder/libs/postgres/postgres_rdb.html#pqfreemem,pointer proc pqfreemem(p: pointer) 330
|
||||
nim pqmakeEmptyPGresult query_builder/libs/postgres/postgres_rdb.html#pqmakeEmptyPGresult,PPGconn,ExecStatusType proc pqmakeEmptyPGresult(conn: PPGconn; status: ExecStatusType): PPGresult 331
|
||||
nim pqescapeString query_builder/libs/postgres/postgres_rdb.html#pqescapeString,cstring,cstring,int proc pqescapeString(till, from: cstring; len: int): int 333
|
||||
nim pqescapeBytea query_builder/libs/postgres/postgres_rdb.html#pqescapeBytea,cstring,int,int proc pqescapeBytea(bintext: cstring; binlen: int; bytealen: var int): cstring 335
|
||||
nim pqunescapeBytea query_builder/libs/postgres/postgres_rdb.html#pqunescapeBytea,cstring,int proc pqunescapeBytea(strtext: cstring; retbuflen: var int): cstring 337
|
||||
nim pqprint query_builder/libs/postgres/postgres_rdb.html#pqprint,File,PPGresult,PPQprintOpt proc pqprint(fout: File; res: PPGresult; ps: PPQprintOpt) 339
|
||||
nim pqdisplayTuples query_builder/libs/postgres/postgres_rdb.html#pqdisplayTuples,PPGresult,File,int32,cstring,int32,int32 proc pqdisplayTuples(res: PPGresult; fp: File; fillAlign: int32; fieldSep: cstring;\n printHeader: int32; quiet: int32) 341
|
||||
nim pqprintTuples query_builder/libs/postgres/postgres_rdb.html#pqprintTuples,PPGresult,File,int32,int32,int32 proc pqprintTuples(res: PPGresult; fout: File; printAttName: int32;\n terseOutput: int32; width: int32) 344
|
||||
nim lo_open query_builder/libs/postgres/postgres_rdb.html#lo_open,PPGconn,Oid,int32 proc lo_open(conn: PPGconn; lobjId: Oid; mode: int32): int32 347
|
||||
nim lo_close query_builder/libs/postgres/postgres_rdb.html#lo_close,PPGconn,int32 proc lo_close(conn: PPGconn; fd: int32): int32 349
|
||||
nim lo_read query_builder/libs/postgres/postgres_rdb.html#lo_read,PPGconn,int32,cstring,int proc lo_read(conn: PPGconn; fd: int32; buf: cstring; length: int): int32 351
|
||||
nim lo_write query_builder/libs/postgres/postgres_rdb.html#lo_write,PPGconn,int32,cstring,int proc lo_write(conn: PPGconn; fd: int32; buf: cstring; length: int): int32 353
|
||||
nim lo_lseek query_builder/libs/postgres/postgres_rdb.html#lo_lseek,PPGconn,int32,int32,int32 proc lo_lseek(conn: PPGconn; fd: int32; offset: int32; whence: int32): int32 355
|
||||
nim lo_creat query_builder/libs/postgres/postgres_rdb.html#lo_creat,PPGconn,int32 proc lo_creat(conn: PPGconn; mode: int32): Oid 357
|
||||
nim lo_tell query_builder/libs/postgres/postgres_rdb.html#lo_tell,PPGconn,int32 proc lo_tell(conn: PPGconn; fd: int32): int32 359
|
||||
nim lo_unlink query_builder/libs/postgres/postgres_rdb.html#lo_unlink,PPGconn,Oid proc lo_unlink(conn: PPGconn; lobjId: Oid): int32 361
|
||||
nim lo_import query_builder/libs/postgres/postgres_rdb.html#lo_import,PPGconn,cstring proc lo_import(conn: PPGconn; filename: cstring): Oid 363
|
||||
nim lo_export query_builder/libs/postgres/postgres_rdb.html#lo_export,PPGconn,Oid,cstring proc lo_export(conn: PPGconn; lobjId: Oid; filename: cstring): int32 365
|
||||
nim pqmblen query_builder/libs/postgres/postgres_rdb.html#pqmblen,cstring,int32 proc pqmblen(s: cstring; encoding: int32): int32 367
|
||||
nim pqenv2encoding query_builder/libs/postgres/postgres_rdb.html#pqenv2encoding proc pqenv2encoding(): int32 369
|
||||
@@ -0,0 +1,277 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/sqlite/sqlite_impl</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/sqlite/sqlite_impl</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">exec
|
||||
<li><a class="reference" href="#exec%2CPSqlite3%2Cstring%2CJsonNode%2Cseq%5B%5D%2Cint" title="exec(db: PSqlite3; query: string; args: JsonNode;
|
||||
columns: seq[(string, string)]; timeout: int): owned(Future[void])">exec(db: PSqlite3; query: string; args: JsonNode;
|
||||
columns: seq[(string, string)]; timeout: int): owned(Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CPSqlite3%2Cstring%2CJsonNode%2Cint" title="exec(db: PSqlite3; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])">exec(db: PSqlite3; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint" title="exec(db: PSqlite3; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])">exec(db: PSqlite3; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumns
|
||||
<li><a class="reference" href="#getColumns%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint" title="getColumns(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]">getColumns(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[string]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumnTypes
|
||||
<li><a class="reference" href="#getColumnTypes%2CPSqlite3%2Cstring" title="getColumnTypes(db: PSqlite3; query: string): Future[seq[(string, string)]]">getColumnTypes(db: PSqlite3; query: string): Future[seq[(string, string)]]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">prepare
|
||||
<li><a class="reference" href="#prepare%2CPSqlite3%2Cstring%2Cint" title="prepare(db: PSqlite3; query: string; timeout: int): Future[PStmt]">prepare(db: PSqlite3; query: string; timeout: int): Future[PStmt]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">preparedExec
|
||||
<li><a class="reference" href="#preparedExec%2CPSqlite3%2Cseq%5Bstring%5D%2CPStmt" title="preparedExec(db: PSqlite3; args: seq[string] = @[]; sqliteStmt: PStmt): owned(
|
||||
Future[void])">preparedExec(db: PSqlite3; args: seq[string] = @[]; sqliteStmt: PStmt): owned(
|
||||
Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">preparedQuery
|
||||
<li><a class="reference" href="#preparedQuery%2CPSqlite3%2Cseq%5Bstring%5D%2CPStmt" title="preparedQuery(db: PSqlite3; args: seq[string] = @[]; sqliteStmt: PStmt): Future[
|
||||
(seq[Row], DbRows)]">preparedQuery(db: PSqlite3; args: seq[string] = @[]; sqliteStmt: PStmt): Future[
|
||||
(seq[Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">query
|
||||
<li><a class="reference" href="#query%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint" title="query(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[Row], DbRows)]">query(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[
|
||||
(seq[Row], DbRows)]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">queryPlain
|
||||
<li><a class="reference" href="#queryPlain%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint" title="queryPlain(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[Row]]">queryPlain(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[
|
||||
seq[Row]]</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="sqlite_rdb.html">sqlite_rdb</a>, <a class="reference external" href="sqlite_lib.html">sqlite_lib</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="exec-procs-all">
|
||||
<div id="exec,PSqlite3,string,JsonNode,seq[],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPSqlite3%2Cstring%2CJsonNode%2Cseq%5B%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span>
|
||||
<span class="Identifier">columns</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Other">(</span><span class="Identifier">string</span><span class="Other">,</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span><span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">KeyError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
args is <tt class="docutils literal"><span class="pre"><span class="Identifier">JArray</span></span></tt>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,PSqlite3,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPSqlite3%2Cstring%2CJsonNode%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
used for rdb.raw().exec() args are <tt class="docutils literal"><span class="pre"><span class="Identifier">JArray</span></span></tt>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,PSqlite3,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
Not used anymore
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumns-procs-all">
|
||||
<div id="getColumns,PSqlite3,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumns%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">getColumns</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumnTypes-procs-all">
|
||||
<div id="getColumnTypes,PSqlite3,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumnTypes%2CPSqlite3%2Cstring"><span class="Identifier">getColumnTypes</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">seq</span><span class="Other">[</span><span class="Other">(</span><span class="Identifier">string</span><span class="Other">,</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">]</span><span class="Other">]</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadDbEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="prepare-procs-all">
|
||||
<div id="prepare,PSqlite3,string,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#prepare%2CPSqlite3%2Cstring%2Cint"><span class="Identifier">prepare</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span><a href="sqlite_rdb.html#PStmt"><span class="Identifier">PStmt</span></a><span class="Other">]</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="preparedExec-procs-all">
|
||||
<div id="preparedExec,PSqlite3,seq[string],PStmt">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#preparedExec%2CPSqlite3%2Cseq%5Bstring%5D%2CPStmt"><span class="Identifier">preparedExec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span> <span class="Other">=</span> <span class="Operator">@</span><span class="Other">[</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">sqliteStmt</span><span class="Other">:</span> <a href="sqlite_rdb.html#PStmt"><span class="Identifier">PStmt</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="preparedQuery-procs-all">
|
||||
<div id="preparedQuery,PSqlite3,seq[string],PStmt">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#preparedQuery%2CPSqlite3%2Cseq%5Bstring%5D%2CPStmt"><span class="Identifier">preparedQuery</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span> <span class="Other">=</span> <span class="Operator">@</span><span class="Other">[</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">sqliteStmt</span><span class="Other">:</span> <a href="sqlite_rdb.html#PStmt"><span class="Identifier">PStmt</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span>
|
||||
<span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadDbEffect</span><span class="Other">,</span> <span class="Identifier">WriteDbEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="query-procs-all">
|
||||
<div id="query,PSqlite3,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Other">(</span><span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">,</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">)</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadDbEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="queryPlain-procs-all">
|
||||
<div id="queryPlain,PSqlite3,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#queryPlain%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">queryPlain</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">seq</span><span class="Other">[</span><a href="../../models/database_types.html#Row"><span class="Identifier">Row</span></a><span class="Other">]</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadDbEffect</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:33 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,12 @@
|
||||
nimTitle sqlite_impl query_builder/libs/sqlite/sqlite_impl.html module src/allographer/query_builder/libs/sqlite/sqlite_impl 0
|
||||
nim query query_builder/libs/sqlite/sqlite_impl.html#query,PSqlite3,string,seq[string],int proc query(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[\n (seq[Row], DbRows)] 9
|
||||
nim queryPlain query_builder/libs/sqlite/sqlite_impl.html#queryPlain,PSqlite3,string,seq[string],int proc queryPlain(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[\n seq[Row]] 22
|
||||
nim getColumnTypes query_builder/libs/sqlite/sqlite_impl.html#getColumnTypes,PSqlite3,string proc getColumnTypes(db: PSqlite3; query: string): Future[seq[(string, string)]] 34
|
||||
nim exec query_builder/libs/sqlite/sqlite_impl.html#exec,PSqlite3,string,JsonNode,seq[],int proc exec(db: PSqlite3; query: string; args: JsonNode;\n columns: seq[(string, string)]; timeout: int): owned(Future[void]) 43
|
||||
nim exec query_builder/libs/sqlite/sqlite_impl.html#exec,PSqlite3,string,JsonNode,int proc exec(db: PSqlite3; query: string; args: JsonNode; timeout: int): owned(\n Future[void]) 96
|
||||
nim exec query_builder/libs/sqlite/sqlite_impl.html#exec,PSqlite3,string,seq[string],int proc exec(db: PSqlite3; query: string; args: seq[string]; timeout: int): owned(\n Future[void]) 137
|
||||
nim getColumns query_builder/libs/sqlite/sqlite_impl.html#getColumns,PSqlite3,string,seq[string],int proc getColumns(db: PSqlite3; query: string; args: seq[string]; timeout: int): Future[\n seq[string]] 155
|
||||
nim prepare query_builder/libs/sqlite/sqlite_impl.html#prepare,PSqlite3,string,int proc prepare(db: PSqlite3; query: string; timeout: int): Future[PStmt] 161
|
||||
nim preparedQuery query_builder/libs/sqlite/sqlite_impl.html#preparedQuery,PSqlite3,seq[string],PStmt proc preparedQuery(db: PSqlite3; args: seq[string] = @[]; sqliteStmt: PStmt): Future[\n (seq[Row], DbRows)] 167
|
||||
nim preparedExec query_builder/libs/sqlite/sqlite_impl.html#preparedExec,PSqlite3,seq[string],PStmt proc preparedExec(db: PSqlite3; args: seq[string] = @[]; sqliteStmt: PStmt): owned(\n Future[void]) 185
|
||||
nimgrp exec query_builder/libs/sqlite/sqlite_impl.html#exec-procs-all proc 43
|
||||
@@ -0,0 +1,331 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/sqlite/sqlite_lib</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/sqlite/sqlite_lib</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">[]
|
||||
<li><a class="reference" href="#%5B%5D%2CInstantRow%2Cint32" title="`[]`(row: InstantRow; col: int32): string">`[]`(row: InstantRow; col: int32): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">bindParam
|
||||
<li><a class="reference" href="#bindParam%2CPStmt%2Cint%2Cstring" title="bindParam(ps: PStmt; paramIdx: int; val: string; copy = true)">bindParam(ps: PStmt; paramIdx: int; val: string; copy = true)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">dbError
|
||||
<li><a class="reference" href="#dbError%2CPSqlite3" title="dbError(db: PSqlite3)">dbError(db: PSqlite3)</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">dbFormat
|
||||
<li><a class="reference" href="#dbFormat%2Cstring%2Cvarargs%5Bstring%5D" title="dbFormat(formatstr: string; args: varargs[string]): string">dbFormat(formatstr: string; args: varargs[string]): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">getColumns
|
||||
<li><a class="reference" href="#getColumns%2CPSqlite3%2CDbRows%2Cstring%2Cseq%5Bstring%5D" title="getColumns(db: PSqlite3; dbRows: var DbRows; query: string; args: seq[string]): seq[
|
||||
string]">getColumns(db: PSqlite3; dbRows: var DbRows; query: string; args: seq[string]): seq[
|
||||
string]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">len
|
||||
<li><a class="reference" href="#len%2CInstantRow" title="len(row: InstantRow): int32">len(row: InstantRow): int32</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">sqliteQuoteIdent
|
||||
<li><a class="reference" href="#sqliteQuoteIdent%2Cstring" title="sqliteQuoteIdent(name: string): string">sqliteQuoteIdent(name: string): string</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#15" id="65">Iterators</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">instantRows
|
||||
<li><a class="reference" href="#instantRows.i%2CPSqlite3%2CDbRows%2Cstring%2Cseq%5Bstring%5D" title="instantRows(db: PSqlite3; dbRows: var DbRows; query: string; args: seq[string]): InstantRow">instantRows(db: PSqlite3; dbRows: var DbRows; query: string; args: seq[string]): InstantRow</a></li>
|
||||
<li><a class="reference" href="#instantRows.i%2CPSqlite3%2CDbRows%2CPStmt" title="instantRows(db: PSqlite3; dbRows: var DbRows; sqliteStmt: PStmt): InstantRow">instantRows(db: PSqlite3; dbRows: var DbRows; sqliteStmt: PStmt): InstantRow</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">instantRowsPlain
|
||||
<li><a class="reference" href="#instantRowsPlain.i%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D" title="instantRowsPlain(db: PSqlite3; query: string; args: seq[string]): InstantRow">instantRowsPlain(db: PSqlite3; query: string; args: seq[string]): InstantRow</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#18" id="68">Templates</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">dbBindParamError
|
||||
<li><a class="reference" href="#dbBindParamError.t%2Cint%2Cvarargs%5Buntyped%5D" title="dbBindParamError(paramIdx: int; val: varargs[untyped])">dbBindParamError(paramIdx: int; val: varargs[untyped])</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="../../models/database_types.html">../../models/database_types</a>, <a class="reference external" href="sqlite_rdb.html">sqlite_rdb</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="[]-procs-all">
|
||||
<div id="[],InstantRow,int32">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#%5B%5D%2CInstantRow%2Cint32"><span class="Identifier">`[]`</span></a><span class="Other">(</span><span class="Identifier">row</span><span class="Other">:</span> <a href="sqlite_rdb.html#InstantRow"><span class="Identifier">InstantRow</span></a><span class="Other">;</span> <span class="Identifier">col</span><span class="Other">:</span> <span class="Identifier">int32</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
<p>Returns text for given column of the row.</p>
|
||||
<p>See also:</p>
|
||||
<ul class="simple"><li><a class="reference external" href="#instantRows.i,DbConn,SqlQuery,varargs[string,]">instantRows iterator</a> example code</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="bindParam-procs-all">
|
||||
<div id="bindParam,PStmt,int,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#bindParam%2CPStmt%2Cint%2Cstring"><span class="Identifier">bindParam</span></a><span class="Other">(</span><span class="Identifier">ps</span><span class="Other">:</span> <a href="sqlite_rdb.html#PStmt"><span class="Identifier">PStmt</span></a><span class="Other">;</span> <span class="Identifier">paramIdx</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">copy</span> <span class="Other">=</span> <span class="Identifier">true</span><span class="Other">)</span> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
Binds a string to the specified paramIndex. if copy is true then SQLite makes its own private copy of the data immediately
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="dbError-procs-all">
|
||||
<div id="dbError,PSqlite3">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbError%2CPSqlite3"><span class="Identifier">dbError</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">)</span> {.<span class="Identifier">noreturn</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
<p>Raises a <tt class="docutils literal"><span class="pre"><span class="Identifier">DbError</span></span></tt> exception.</p>
|
||||
<p><strong>Examples:</strong></p>
|
||||
<pre class="listing"><span class="Keyword">let</span> <span class="Identifier">db</span> <span class="Operator">=</span> <span class="Identifier">open</span><span class="Punctuation">(</span><span class="StringLit">"mytest.db"</span><span class="Punctuation">,</span> <span class="StringLit">""</span><span class="Punctuation">,</span> <span class="StringLit">""</span><span class="Punctuation">,</span> <span class="StringLit">""</span><span class="Punctuation">)</span>
|
||||
<span class="Keyword">if</span> <span class="Keyword">not</span> <span class="Identifier">db</span><span class="Operator">.</span><span class="Identifier">tryExec</span><span class="Punctuation">(</span><span class="RawData">sql"SELECT * FROM not_exist_table"</span><span class="Punctuation">)</span><span class="Punctuation">:</span>
|
||||
<span class="Identifier">dbError</span><span class="Punctuation">(</span><span class="Identifier">db</span><span class="Punctuation">)</span>
|
||||
<span class="Identifier">db</span><span class="Operator">.</span><span class="Identifier">close</span><span class="Punctuation">(</span><span class="Punctuation">)</span></pre>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="dbFormat-procs-all">
|
||||
<div id="dbFormat,string,varargs[string]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2Cstring%2Cvarargs%5Bstring%5D"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">formatstr</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">varargs</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="getColumns-procs-all">
|
||||
<div id="getColumns,PSqlite3,DbRows,string,seq[string]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#getColumns%2CPSqlite3%2CDbRows%2Cstring%2Cseq%5Bstring%5D"><span class="Identifier">getColumns</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">dbRows</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span>
|
||||
<span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="len-procs-all">
|
||||
<div id="len,InstantRow">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#len%2CInstantRow"><span class="Identifier">len</span></a><span class="Other">(</span><span class="Identifier">row</span><span class="Other">:</span> <a href="sqlite_rdb.html#InstantRow"><span class="Identifier">InstantRow</span></a><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">int32</span> {.<span class="Identifier">inline</span><span class="Other">,</span> <span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
<p>Returns number of columns in a row.</p>
|
||||
<p>See also:</p>
|
||||
<ul class="simple"><li><a class="reference external" href="#instantRows.i,DbConn,SqlQuery,varargs[string,]">instantRows iterator</a> example code</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="sqliteQuoteIdent-procs-all">
|
||||
<div id="sqliteQuoteIdent,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#sqliteQuoteIdent%2Cstring"><span class="Identifier">sqliteQuoteIdent</span></a><span class="Other">(</span><span class="Identifier">name</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
<tt class="docutils literal"><span class="pre"><span class="Identifier">PRAGMA</span></span></tt> 等で使う SQLite の二重引用符識別子(内部の <tt class="docutils literal"><span class="pre"><span class="StringLit">"</span></span></tt> は <tt class="docutils literal"><span class="pre"><span class="StringLit">""</span></span></tt> にエスケープ)。
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="15">
|
||||
<h1><a class="toc-backref" href="#15">Iterators</a></h1>
|
||||
<dl class="item">
|
||||
<div id="instantRows-iterators-all">
|
||||
<div id="instantRows.i,PSqlite3,DbRows,string,seq[string]">
|
||||
<dt><pre><span class="Keyword">iterator</span> <a href="#instantRows.i%2CPSqlite3%2CDbRows%2Cstring%2Cseq%5Bstring%5D"><span class="Identifier">instantRows</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">dbRows</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span>
|
||||
<span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="sqlite_rdb.html#InstantRow"><span class="Identifier">InstantRow</span></a> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><a href="../../models/database_types.html#ReadDbEffect"><span class="Identifier">ReadDbEffect</span></a><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
<p>Similar to <a class="reference external" href="#instantRows.i,DbConn,SqlQuery,varargs[string,]">instantRows iterator</a>, but sets information about columns to <tt class="docutils literal"><span class="pre"><span class="Identifier">columns</span></span></tt>.</p>
|
||||
<p><strong>Examples:</strong></p>
|
||||
<pre class="listing"><span class="Keyword">let</span> <span class="Identifier">db</span> <span class="Operator">=</span> <span class="Identifier">open</span><span class="Punctuation">(</span><span class="StringLit">"mytest.db"</span><span class="Punctuation">,</span> <span class="StringLit">""</span><span class="Punctuation">,</span> <span class="StringLit">""</span><span class="Punctuation">,</span> <span class="StringLit">""</span><span class="Punctuation">)</span>
|
||||
|
||||
<span class="Comment"># Records of my_table:</span>
|
||||
<span class="Comment"># | id | name |</span>
|
||||
<span class="Comment"># |----|----------|</span>
|
||||
<span class="Comment"># | 1 | item#1 |</span>
|
||||
<span class="Comment"># | 2 | item#2 |</span>
|
||||
|
||||
<span class="Keyword">var</span> <span class="Identifier">columns</span><span class="Punctuation">:</span> <span class="Identifier">DbColumns</span>
|
||||
<span class="Keyword">for</span> <span class="Identifier">row</span> <span class="Keyword">in</span> <span class="Identifier">db</span><span class="Operator">.</span><span class="Identifier">instantRows</span><span class="Punctuation">(</span><span class="Identifier">columns</span><span class="Punctuation">,</span> <span class="RawData">sql"SELECT * FROM my_table"</span><span class="Punctuation">)</span><span class="Punctuation">:</span>
|
||||
<span class="Keyword">discard</span>
|
||||
<span class="Identifier">echo</span> <span class="Identifier">columns</span><span class="Punctuation">[</span><span class="DecNumber">0</span><span class="Punctuation">]</span>
|
||||
|
||||
<span class="Comment"># Output:</span>
|
||||
<span class="Comment"># (name: "id", tableName: "my_table", typ: (kind: dbNull,</span>
|
||||
<span class="Comment"># notNull: false, name: "INTEGER", size: 0, maxReprLen: 0, precision: 0,</span>
|
||||
<span class="Comment"># scale: 0, min: 0, max: 0, validValues: @[]), primaryKey: false,</span>
|
||||
<span class="Comment"># foreignKey: false)</span>
|
||||
|
||||
<span class="Identifier">db</span><span class="Operator">.</span><span class="Identifier">close</span><span class="Punctuation">(</span><span class="Punctuation">)</span></pre>
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="instantRows.i,PSqlite3,DbRows,PStmt">
|
||||
<dt><pre><span class="Keyword">iterator</span> <a href="#instantRows.i%2CPSqlite3%2CDbRows%2CPStmt"><span class="Identifier">instantRows</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">dbRows</span><span class="Other">:</span> <span class="Keyword">var</span> <a href="../../models/database_types.html#DbRows"><span class="Identifier">DbRows</span></a><span class="Other">;</span> <span class="Identifier">sqliteStmt</span><span class="Other">:</span> <a href="sqlite_rdb.html#PStmt"><span class="Identifier">PStmt</span></a><span class="Other">)</span><span class="Other">:</span> <a href="sqlite_rdb.html#InstantRow"><span class="Identifier">InstantRow</span></a> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><a href="../../models/database_types.html#ReadDbEffect"><span class="Identifier">ReadDbEffect</span></a><span class="Other">,</span> <a href="../../models/database_types.html#WriteDbEffect"><span class="Identifier">WriteDbEffect</span></a><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="instantRowsPlain-iterators-all">
|
||||
<div id="instantRowsPlain.i,PSqlite3,string,seq[string]">
|
||||
<dt><pre><span class="Keyword">iterator</span> <a href="#instantRowsPlain.i%2CPSqlite3%2Cstring%2Cseq%5Bstring%5D"><span class="Identifier">instantRowsPlain</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="sqlite_rdb.html#PSqlite3"><span class="Identifier">PSqlite3</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <a href="sqlite_rdb.html#InstantRow"><span class="Identifier">InstantRow</span></a> {.
|
||||
<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><a href="../../models/database_types.html#ReadDbEffect"><span class="Identifier">ReadDbEffect</span></a><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">DbError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="18">
|
||||
<h1><a class="toc-backref" href="#18">Templates</a></h1>
|
||||
<dl class="item">
|
||||
<div id="dbBindParamError-templates-all">
|
||||
<div id="dbBindParamError.t,int,varargs[untyped]">
|
||||
<dt><pre><span class="Keyword">template</span> <a href="#dbBindParamError.t%2Cint%2Cvarargs%5Buntyped%5D"><span class="Identifier">dbBindParamError</span></a><span class="Other">(</span><span class="Identifier">paramIdx</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">varargs</span><span class="Other">[</span><span class="Identifier">untyped</span><span class="Other">]</span><span class="Other">)</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
Raises a <tt class="docutils literal"><span class="pre"><span class="Identifier">DbError</span></span></tt> exception.
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:33 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
nimTitle sqlite_lib query_builder/libs/sqlite/sqlite_lib.html module src/allographer/query_builder/libs/sqlite/sqlite_lib 0
|
||||
nim sqliteQuoteIdent query_builder/libs/sqlite/sqlite_lib.html#sqliteQuoteIdent,string proc sqliteQuoteIdent(name: string): string 23
|
||||
nim dbError query_builder/libs/sqlite/sqlite_lib.html#dbError,PSqlite3 proc dbError(db: PSqlite3) 34
|
||||
nim dbFormat query_builder/libs/sqlite/sqlite_lib.html#dbFormat,string,varargs[string] proc dbFormat(formatstr: string; args: varargs[string]): string 50
|
||||
nim instantRows query_builder/libs/sqlite/sqlite_lib.html#instantRows.i,PSqlite3,DbRows,string,seq[string] iterator instantRows(db: PSqlite3; dbRows: var DbRows; query: string; args: seq[string]): InstantRow 97
|
||||
nim instantRowsPlain query_builder/libs/sqlite/sqlite_lib.html#instantRowsPlain.i,PSqlite3,string,seq[string] iterator instantRowsPlain(db: PSqlite3; query: string; args: seq[string]): InstantRow 137
|
||||
nim instantRows query_builder/libs/sqlite/sqlite_lib.html#instantRows.i,PSqlite3,DbRows,PStmt iterator instantRows(db: PSqlite3; dbRows: var DbRows; sqliteStmt: PStmt): InstantRow 146
|
||||
nim getColumns query_builder/libs/sqlite/sqlite_lib.html#getColumns,PSqlite3,DbRows,string,seq[string] proc getColumns(db: PSqlite3; dbRows: var DbRows; query: string; args: seq[string]): seq[\n string] 159
|
||||
nim len query_builder/libs/sqlite/sqlite_lib.html#len,InstantRow proc len(row: InstantRow): int32 173
|
||||
nim `[]` query_builder/libs/sqlite/sqlite_lib.html#[],InstantRow,int32 proc `[]`(row: InstantRow; col: int32): string 181
|
||||
nim dbBindParamError query_builder/libs/sqlite/sqlite_lib.html#dbBindParamError.t,int,varargs[untyped] template dbBindParamError(paramIdx: int; val: varargs[untyped]) 189
|
||||
nim bindParam query_builder/libs/sqlite/sqlite_lib.html#bindParam,PStmt,int,string proc bindParam(ps: PStmt; paramIdx: int; val: string; copy = true) 196
|
||||
nimgrp instantrows query_builder/libs/sqlite/sqlite_lib.html#instantRows-iterators-all iterator 97
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,196 @@
|
||||
nimTitle sqlite_rdb query_builder/libs/sqlite/sqlite_rdb.html module src/allographer/query_builder/libs/sqlite/sqlite_rdb 0
|
||||
nim SQLITE_INTEGER query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_INTEGER const SQLITE_INTEGER 25
|
||||
nim SQLITE_FLOAT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_FLOAT const SQLITE_FLOAT 26
|
||||
nim SQLITE_BLOB query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_BLOB const SQLITE_BLOB 27
|
||||
nim SQLITE_NULL query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_NULL const SQLITE_NULL 28
|
||||
nim SQLITE_TEXT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_TEXT const SQLITE_TEXT 29
|
||||
nim SQLITE_UTF8 query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_UTF8 const SQLITE_UTF8 30
|
||||
nim SQLITE_UTF16LE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_UTF16LE const SQLITE_UTF16LE 31
|
||||
nim SQLITE_UTF16BE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_UTF16BE const SQLITE_UTF16BE 32
|
||||
nim SQLITE_UTF16 query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_UTF16 const SQLITE_UTF16 33
|
||||
nim SQLITE_ANY query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_ANY const SQLITE_ANY 34
|
||||
nim SQLITE_OK query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_OK const SQLITE_OK 35
|
||||
nim SQLITE_ERROR query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_ERROR const SQLITE_ERROR 36
|
||||
nim SQLITE_INTERNAL query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_INTERNAL const SQLITE_INTERNAL 37
|
||||
nim SQLITE_PERM query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_PERM const SQLITE_PERM 38
|
||||
nim SQLITE_ABORT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_ABORT const SQLITE_ABORT 39
|
||||
nim SQLITE_BUSY query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_BUSY const SQLITE_BUSY 40
|
||||
nim SQLITE_LOCKED query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_LOCKED const SQLITE_LOCKED 41
|
||||
nim SQLITE_NOMEM query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_NOMEM const SQLITE_NOMEM 42
|
||||
nim SQLITE_READONLY query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_READONLY const SQLITE_READONLY 43
|
||||
nim SQLITE_INTERRUPT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_INTERRUPT const SQLITE_INTERRUPT 44
|
||||
nim SQLITE_IOERR query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_IOERR const SQLITE_IOERR 45
|
||||
nim SQLITE_CORRUPT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CORRUPT const SQLITE_CORRUPT 46
|
||||
nim SQLITE_NOTFOUND query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_NOTFOUND const SQLITE_NOTFOUND 47
|
||||
nim SQLITE_FULL query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_FULL const SQLITE_FULL 48
|
||||
nim SQLITE_CANTOPEN query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CANTOPEN const SQLITE_CANTOPEN 49
|
||||
nim SQLITE_PROTOCOL query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_PROTOCOL const SQLITE_PROTOCOL 50
|
||||
nim SQLITE_EMPTY query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_EMPTY const SQLITE_EMPTY 51
|
||||
nim SQLITE_SCHEMA query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_SCHEMA const SQLITE_SCHEMA 52
|
||||
nim SQLITE_TOOBIG query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_TOOBIG const SQLITE_TOOBIG 53
|
||||
nim SQLITE_CONSTRAINT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CONSTRAINT const SQLITE_CONSTRAINT 54
|
||||
nim SQLITE_MISMATCH query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_MISMATCH const SQLITE_MISMATCH 55
|
||||
nim SQLITE_MISUSE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_MISUSE const SQLITE_MISUSE 56
|
||||
nim SQLITE_NOLFS query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_NOLFS const SQLITE_NOLFS 57
|
||||
nim SQLITE_AUTH query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_AUTH const SQLITE_AUTH 58
|
||||
nim SQLITE_FORMAT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_FORMAT const SQLITE_FORMAT 59
|
||||
nim SQLITE_RANGE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_RANGE const SQLITE_RANGE 60
|
||||
nim SQLITE_NOTADB query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_NOTADB const SQLITE_NOTADB 61
|
||||
nim SQLITE_ROW query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_ROW const SQLITE_ROW 62
|
||||
nim SQLITE_DONE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DONE const SQLITE_DONE 63
|
||||
nim SQLITE_COPY query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_COPY const SQLITE_COPY 64
|
||||
nim SQLITE_CREATE_INDEX query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_INDEX const SQLITE_CREATE_INDEX 65
|
||||
nim SQLITE_CREATE_TABLE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_TABLE const SQLITE_CREATE_TABLE 66
|
||||
nim SQLITE_CREATE_TEMP_INDEX query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_TEMP_INDEX const SQLITE_CREATE_TEMP_INDEX 67
|
||||
nim SQLITE_CREATE_TEMP_TABLE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_TEMP_TABLE const SQLITE_CREATE_TEMP_TABLE 68
|
||||
nim SQLITE_CREATE_TEMP_TRIGGER query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_TEMP_TRIGGER const SQLITE_CREATE_TEMP_TRIGGER 69
|
||||
nim SQLITE_CREATE_TEMP_VIEW query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_TEMP_VIEW const SQLITE_CREATE_TEMP_VIEW 70
|
||||
nim SQLITE_CREATE_TRIGGER query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_TRIGGER const SQLITE_CREATE_TRIGGER 71
|
||||
nim SQLITE_CREATE_VIEW query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_CREATE_VIEW const SQLITE_CREATE_VIEW 72
|
||||
nim SQLITE_DELETE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DELETE const SQLITE_DELETE 73
|
||||
nim SQLITE_DROP_INDEX query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_INDEX const SQLITE_DROP_INDEX 74
|
||||
nim SQLITE_DROP_TABLE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_TABLE const SQLITE_DROP_TABLE 75
|
||||
nim SQLITE_DROP_TEMP_INDEX query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_TEMP_INDEX const SQLITE_DROP_TEMP_INDEX 76
|
||||
nim SQLITE_DROP_TEMP_TABLE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_TEMP_TABLE const SQLITE_DROP_TEMP_TABLE 77
|
||||
nim SQLITE_DROP_TEMP_TRIGGER query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_TEMP_TRIGGER const SQLITE_DROP_TEMP_TRIGGER 78
|
||||
nim SQLITE_DROP_TEMP_VIEW query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_TEMP_VIEW const SQLITE_DROP_TEMP_VIEW 79
|
||||
nim SQLITE_DROP_TRIGGER query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_TRIGGER const SQLITE_DROP_TRIGGER 80
|
||||
nim SQLITE_DROP_VIEW query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DROP_VIEW const SQLITE_DROP_VIEW 81
|
||||
nim SQLITE_INSERT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_INSERT const SQLITE_INSERT 82
|
||||
nim SQLITE_PRAGMA query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_PRAGMA const SQLITE_PRAGMA 83
|
||||
nim SQLITE_READ query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_READ const SQLITE_READ 84
|
||||
nim SQLITE_SELECT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_SELECT const SQLITE_SELECT 85
|
||||
nim SQLITE_TRANSACTION query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_TRANSACTION const SQLITE_TRANSACTION 86
|
||||
nim SQLITE_UPDATE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_UPDATE const SQLITE_UPDATE 87
|
||||
nim SQLITE_ATTACH query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_ATTACH const SQLITE_ATTACH 88
|
||||
nim SQLITE_DETACH query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DETACH const SQLITE_DETACH 89
|
||||
nim SQLITE_ALTER_TABLE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_ALTER_TABLE const SQLITE_ALTER_TABLE 90
|
||||
nim SQLITE_REINDEX query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_REINDEX const SQLITE_REINDEX 91
|
||||
nim SQLITE_DENY query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DENY const SQLITE_DENY 92
|
||||
nim SQLITE_IGNORE query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_IGNORE const SQLITE_IGNORE 93
|
||||
nim SQLITE_DETERMINISTIC query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_DETERMINISTIC const SQLITE_DETERMINISTIC 96
|
||||
nim PSqlite3 query_builder/libs/sqlite/sqlite_rdb.html#PSqlite3 type PSqlite3 100
|
||||
nim PPSqlite3 query_builder/libs/sqlite/sqlite_rdb.html#PPSqlite3 type PPSqlite3 101
|
||||
nim PSqlite3_Backup query_builder/libs/sqlite/sqlite_rdb.html#PSqlite3_Backup type PSqlite3_Backup 103
|
||||
nim PPSqlite3_Backup query_builder/libs/sqlite/sqlite_rdb.html#PPSqlite3_Backup type PPSqlite3_Backup 104
|
||||
nim Pcontext query_builder/libs/sqlite/sqlite_rdb.html#Pcontext type Pcontext 106
|
||||
nim PStmt query_builder/libs/sqlite/sqlite_rdb.html#PStmt type PStmt 108
|
||||
nim InstantRow query_builder/libs/sqlite/sqlite_rdb.html#InstantRow type InstantRow 109
|
||||
nim PValue query_builder/libs/sqlite/sqlite_rdb.html#PValue type PValue 111
|
||||
nim PValueArg query_builder/libs/sqlite/sqlite_rdb.html#PValueArg type PValueArg 112
|
||||
nim Callback query_builder/libs/sqlite/sqlite_rdb.html#Callback type Callback 114
|
||||
nim Tbind_destructor_func query_builder/libs/sqlite/sqlite_rdb.html#Tbind_destructor_func type Tbind_destructor_func 116
|
||||
nim Create_function_step_func query_builder/libs/sqlite/sqlite_rdb.html#Create_function_step_func type Create_function_step_func 117
|
||||
nim Create_function_func_func query_builder/libs/sqlite/sqlite_rdb.html#Create_function_func_func type Create_function_func_func 119
|
||||
nim Create_function_final_func query_builder/libs/sqlite/sqlite_rdb.html#Create_function_final_func type Create_function_final_func 121
|
||||
nim Result_func query_builder/libs/sqlite/sqlite_rdb.html#Result_func type Result_func 122
|
||||
nim Create_collation_func query_builder/libs/sqlite/sqlite_rdb.html#Create_collation_func type Create_collation_func 123
|
||||
nim Collation_needed_func query_builder/libs/sqlite/sqlite_rdb.html#Collation_needed_func type Collation_needed_func 125
|
||||
nim SQLITE_STATIC query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_STATIC const SQLITE_STATIC 129
|
||||
nim SQLITE_TRANSIENT query_builder/libs/sqlite/sqlite_rdb.html#SQLITE_TRANSIENT const SQLITE_TRANSIENT 130
|
||||
nim close query_builder/libs/sqlite/sqlite_rdb.html#close,PSqlite3 proc close(para1: PSqlite3): int32 132
|
||||
nim exec query_builder/libs/sqlite/sqlite_rdb.html#exec,PSqlite3,cstring,Callback,pointer,cstring proc exec(para1: PSqlite3; sql: cstring; para3: Callback; para4: pointer;\n errmsg: var cstring): int32 133
|
||||
nim last_insert_rowid query_builder/libs/sqlite/sqlite_rdb.html#last_insert_rowid,PSqlite3 proc last_insert_rowid(para1: PSqlite3): int64 136
|
||||
nim changes query_builder/libs/sqlite/sqlite_rdb.html#changes,PSqlite3 proc changes(para1: PSqlite3): int32 138
|
||||
nim total_changes query_builder/libs/sqlite/sqlite_rdb.html#total_changes,PSqlite3 proc total_changes(para1: PSqlite3): int32 139
|
||||
nim interrupt query_builder/libs/sqlite/sqlite_rdb.html#interrupt,PSqlite3 proc interrupt(para1: PSqlite3) 141
|
||||
nim complete query_builder/libs/sqlite/sqlite_rdb.html#complete,cstring proc complete(sql: cstring): int32 142
|
||||
nim complete16 query_builder/libs/sqlite/sqlite_rdb.html#complete16,pointer proc complete16(sql: pointer): int32 144
|
||||
nim busy_handler query_builder/libs/sqlite/sqlite_rdb.html#busy_handler,PSqlite3,proc(pointer,int32),pointer proc busy_handler(para1: PSqlite3;\n para2: proc (para1: pointer; para2: int32): int32 {.cdecl.};\n para3: pointer): int32 146
|
||||
nim busy_timeout query_builder/libs/sqlite/sqlite_rdb.html#busy_timeout,PSqlite3,int32 proc busy_timeout(para1: PSqlite3; ms: int32): int32 150
|
||||
nim get_table query_builder/libs/sqlite/sqlite_rdb.html#get_table,PSqlite3,cstring,cstringArray,cint,cint,ptr.cstring proc get_table(para1: PSqlite3; sql: cstring; resultp: var cstringArray;\n nrow, ncolumn: var cint; errmsg: ptr cstring): int32 152
|
||||
nim free_table query_builder/libs/sqlite/sqlite_rdb.html#free_table,cstringArray proc free_table(result: cstringArray) 155
|
||||
nim mprintf query_builder/libs/sqlite/sqlite_rdb.html#mprintf,cstring proc mprintf(para1: cstring): cstring 159
|
||||
nim free query_builder/libs/sqlite/sqlite_rdb.html#free,cstring proc free(z: cstring) 162
|
||||
nim snprintf query_builder/libs/sqlite/sqlite_rdb.html#snprintf,int32,cstring,cstring proc snprintf(para1: int32; para2: cstring; para3: cstring): cstring 164
|
||||
nim set_authorizer query_builder/libs/sqlite/sqlite_rdb.html#set_authorizer,PSqlite3,proc(pointer,int32,cstring,cstring,cstring,cstring),pointer proc set_authorizer(para1: PSqlite3; xAuth: proc (para1: pointer; para2: int32;\n para3: cstring; para4: cstring; para5: cstring; para6: cstring): int32 {.\n cdecl.}; pUserData: pointer): int32 166
|
||||
nim trace query_builder/libs/sqlite/sqlite_rdb.html#trace,PSqlite3,proc(pointer,cstring),pointer proc trace(para1: PSqlite3; xTrace: proc (para1: pointer; para2: cstring) {.cdecl.};\n para3: pointer): pointer 170
|
||||
nim progress_handler query_builder/libs/sqlite/sqlite_rdb.html#progress_handler,PSqlite3,int32,proc(pointer),pointer proc progress_handler(para1: PSqlite3; para2: int32;\n para3: proc (para1: pointer): int32 {.cdecl.}; para4: pointer) 173
|
||||
nim commit_hook query_builder/libs/sqlite/sqlite_rdb.html#commit_hook,PSqlite3,proc(pointer),pointer proc commit_hook(para1: PSqlite3; para2: proc (para1: pointer): int32 {.cdecl.};\n para3: pointer): pointer 177
|
||||
nim open query_builder/libs/sqlite/sqlite_rdb.html#open,cstring,PSqlite3 proc open(filename: cstring; ppDb: var PSqlite3): int32 180
|
||||
nim open16 query_builder/libs/sqlite/sqlite_rdb.html#open16,pointer,PSqlite3 proc open16(filename: pointer; ppDb: var PSqlite3): int32 182
|
||||
nim errcode query_builder/libs/sqlite/sqlite_rdb.html#errcode,PSqlite3 proc errcode(db: PSqlite3): int32 184
|
||||
nim errmsg query_builder/libs/sqlite/sqlite_rdb.html#errmsg,PSqlite3 proc errmsg(para1: PSqlite3): cstring 185
|
||||
nim errmsg16 query_builder/libs/sqlite/sqlite_rdb.html#errmsg16,PSqlite3 proc errmsg16(para1: PSqlite3): pointer 186
|
||||
nim prepare query_builder/libs/sqlite/sqlite_rdb.html#prepare,PSqlite3,cstring,int32,PStmt,ptr.cstring proc prepare(db: PSqlite3; zSql: cstring; nBytes: int32; ppStmt: var PStmt;\n pzTail: ptr cstring): int32 188
|
||||
nim prepare_v2 query_builder/libs/sqlite/sqlite_rdb.html#prepare_v2,PSqlite3,cstring,cint,PStmt,ptr.cstring proc prepare_v2(db: PSqlite3; zSql: cstring; nByte: cint; ppStmt: var PStmt;\n pzTail: ptr cstring): cint 192
|
||||
nim prepare16 query_builder/libs/sqlite/sqlite_rdb.html#prepare16,PSqlite3,pointer,int32,PStmt,pointer proc prepare16(db: PSqlite3; zSql: pointer; nBytes: int32; ppStmt: var PStmt;\n pzTail: var pointer): int32 196
|
||||
nim bind_blob query_builder/libs/sqlite/sqlite_rdb.html#bind_blob,PStmt,int32,pointer,int32,Tbind_destructor_func proc bind_blob(para1: PStmt; para2: int32; para3: pointer; n: int32;\n para5: Tbind_destructor_func): int32 199
|
||||
nim bind_double query_builder/libs/sqlite/sqlite_rdb.html#bind_double,PStmt,int32,float64 proc bind_double(para1: PStmt; para2: int32; para3: float64): int32 202
|
||||
nim bind_int query_builder/libs/sqlite/sqlite_rdb.html#bind_int,PStmt,int32,int32 proc bind_int(para1: PStmt; para2: int32; para3: int32): int32 204
|
||||
nim bind_int64 query_builder/libs/sqlite/sqlite_rdb.html#bind_int64,PStmt,int32,int64 proc bind_int64(para1: PStmt; para2: int32; para3: int64): int32 206
|
||||
nim bind_null query_builder/libs/sqlite/sqlite_rdb.html#bind_null,PStmt,int32 proc bind_null(para1: PStmt; para2: int32): int32 208
|
||||
nim bind_text query_builder/libs/sqlite/sqlite_rdb.html#bind_text,PStmt,int32,cstring,int32,Tbind_destructor_func proc bind_text(para1: PStmt; para2: int32; para3: cstring; n: int32;\n para5: Tbind_destructor_func): int32 210
|
||||
nim bind_text16 query_builder/libs/sqlite/sqlite_rdb.html#bind_text16,PStmt,int32,pointer,int32,Tbind_destructor_func proc bind_text16(para1: PStmt; para2: int32; para3: pointer; para4: int32;\n para5: Tbind_destructor_func): int32 213
|
||||
nim bind_blob query_builder/libs/sqlite/sqlite_rdb.html#bind_blob,PStmt,int32,pointer,int32,int32 proc bind_blob(para1: PStmt; para2: int32; para3: pointer; n: int32; para5: int32): int32 219
|
||||
nim bind_text query_builder/libs/sqlite/sqlite_rdb.html#bind_text,PStmt,int32,cstring,int32,int32 proc bind_text(para1: PStmt; para2: int32; para3: cstring; n: int32; para5: int32): int32 222
|
||||
nim bind_text16 query_builder/libs/sqlite/sqlite_rdb.html#bind_text16,PStmt,int32,pointer,int32,int32 proc bind_text16(para1: PStmt; para2: int32; para3: pointer; para4: int32;\n para5: int32): int32 225
|
||||
nim bind_parameter_count query_builder/libs/sqlite/sqlite_rdb.html#bind_parameter_count,PStmt proc bind_parameter_count(para1: PStmt): int32 228
|
||||
nim bind_parameter_name query_builder/libs/sqlite/sqlite_rdb.html#bind_parameter_name,PStmt,int32 proc bind_parameter_name(para1: PStmt; para2: int32): cstring 230
|
||||
nim bind_parameter_index query_builder/libs/sqlite/sqlite_rdb.html#bind_parameter_index,PStmt,cstring proc bind_parameter_index(para1: PStmt; zName: cstring): int32 232
|
||||
nim clear_bindings query_builder/libs/sqlite/sqlite_rdb.html#clear_bindings,PStmt proc clear_bindings(para1: PStmt): int32 234
|
||||
nim column_count query_builder/libs/sqlite/sqlite_rdb.html#column_count,PStmt proc column_count(PStmt: PStmt): int32 236
|
||||
nim column_name query_builder/libs/sqlite/sqlite_rdb.html#column_name,PStmt,int32 proc column_name(para1: PStmt; para2: int32): cstring 238
|
||||
nim column_table_name query_builder/libs/sqlite/sqlite_rdb.html#column_table_name,PStmt,int32 proc column_table_name(para1: PStmt; para2: int32): cstring 240
|
||||
nim column_name16 query_builder/libs/sqlite/sqlite_rdb.html#column_name16,PStmt,int32 proc column_name16(para1: PStmt; para2: int32): pointer 242
|
||||
nim column_decltype query_builder/libs/sqlite/sqlite_rdb.html#column_decltype,PStmt,int32 proc column_decltype(para1: PStmt; i: int32): cstring 244
|
||||
nim column_decltype16 query_builder/libs/sqlite/sqlite_rdb.html#column_decltype16,PStmt,int32 proc column_decltype16(para1: PStmt; para2: int32): pointer 246
|
||||
nim step query_builder/libs/sqlite/sqlite_rdb.html#step,PStmt proc step(para1: PStmt): int32 248
|
||||
nim data_count query_builder/libs/sqlite/sqlite_rdb.html#data_count,PStmt proc data_count(PStmt: PStmt): int32 249
|
||||
nim column_blob query_builder/libs/sqlite/sqlite_rdb.html#column_blob,PStmt,int32 proc column_blob(para1: PStmt; iCol: int32): pointer 251
|
||||
nim column_bytes query_builder/libs/sqlite/sqlite_rdb.html#column_bytes,PStmt,int32 proc column_bytes(para1: PStmt; iCol: int32): int32 253
|
||||
nim column_bytes16 query_builder/libs/sqlite/sqlite_rdb.html#column_bytes16,PStmt,int32 proc column_bytes16(para1: PStmt; iCol: int32): int32 255
|
||||
nim column_double query_builder/libs/sqlite/sqlite_rdb.html#column_double,PStmt,int32 proc column_double(para1: PStmt; iCol: int32): float64 257
|
||||
nim column_int query_builder/libs/sqlite/sqlite_rdb.html#column_int,PStmt,int32 proc column_int(para1: PStmt; iCol: int32): int32 259
|
||||
nim column_int64 query_builder/libs/sqlite/sqlite_rdb.html#column_int64,PStmt,int32 proc column_int64(para1: PStmt; iCol: int32): int64 261
|
||||
nim column_text query_builder/libs/sqlite/sqlite_rdb.html#column_text,PStmt,int32 proc column_text(para1: PStmt; iCol: int32): cstring 263
|
||||
nim column_text16 query_builder/libs/sqlite/sqlite_rdb.html#column_text16,PStmt,int32 proc column_text16(para1: PStmt; iCol: int32): pointer 265
|
||||
nim column_type query_builder/libs/sqlite/sqlite_rdb.html#column_type,PStmt,int32 proc column_type(para1: PStmt; iCol: int32): int32 267
|
||||
nim finalize query_builder/libs/sqlite/sqlite_rdb.html#finalize,PStmt proc finalize(PStmt: PStmt): int32 269
|
||||
nim reset query_builder/libs/sqlite/sqlite_rdb.html#reset,PStmt proc reset(PStmt: PStmt): int32 271
|
||||
nim create_function query_builder/libs/sqlite/sqlite_rdb.html#create_function,PSqlite3,cstring,int32,int32,pointer,Create_function_func_func,Create_function_step_func,Create_function_final_func proc create_function(para1: PSqlite3; zFunctionName: cstring; nArg: int32;\n eTextRep: int32; para5: pointer;\n xFunc: Create_function_func_func;\n xStep: Create_function_step_func;\n xFinal: Create_function_final_func): int32 272
|
||||
nim create_function16 query_builder/libs/sqlite/sqlite_rdb.html#create_function16,PSqlite3,pointer,int32,int32,pointer,Create_function_func_func,Create_function_step_func,Create_function_final_func proc create_function16(para1: PSqlite3; zFunctionName: pointer; nArg: int32;\n eTextRep: int32; para5: pointer;\n xFunc: Create_function_func_func;\n xStep: Create_function_step_func;\n xFinal: Create_function_final_func): int32 278
|
||||
nim aggregate_count query_builder/libs/sqlite/sqlite_rdb.html#aggregate_count,Pcontext proc aggregate_count(para1: Pcontext): int32 284
|
||||
nim value_blob query_builder/libs/sqlite/sqlite_rdb.html#value_blob,PValue proc value_blob(para1: PValue): pointer 286
|
||||
nim value_bytes query_builder/libs/sqlite/sqlite_rdb.html#value_bytes,PValue proc value_bytes(para1: PValue): int32 288
|
||||
nim value_bytes16 query_builder/libs/sqlite/sqlite_rdb.html#value_bytes16,PValue proc value_bytes16(para1: PValue): int32 290
|
||||
nim value_double query_builder/libs/sqlite/sqlite_rdb.html#value_double,PValue proc value_double(para1: PValue): float64 292
|
||||
nim value_int query_builder/libs/sqlite/sqlite_rdb.html#value_int,PValue proc value_int(para1: PValue): int32 294
|
||||
nim value_int64 query_builder/libs/sqlite/sqlite_rdb.html#value_int64,PValue proc value_int64(para1: PValue): int64 296
|
||||
nim value_text query_builder/libs/sqlite/sqlite_rdb.html#value_text,PValue proc value_text(para1: PValue): cstring 298
|
||||
nim value_text16 query_builder/libs/sqlite/sqlite_rdb.html#value_text16,PValue proc value_text16(para1: PValue): pointer 300
|
||||
nim value_text16le query_builder/libs/sqlite/sqlite_rdb.html#value_text16le,PValue proc value_text16le(para1: PValue): pointer 302
|
||||
nim value_text16be query_builder/libs/sqlite/sqlite_rdb.html#value_text16be,PValue proc value_text16be(para1: PValue): pointer 304
|
||||
nim value_type query_builder/libs/sqlite/sqlite_rdb.html#value_type,PValue proc value_type(para1: PValue): int32 306
|
||||
nim aggregate_context query_builder/libs/sqlite/sqlite_rdb.html#aggregate_context,Pcontext,int32 proc aggregate_context(para1: Pcontext; nBytes: int32): pointer 308
|
||||
nim user_data query_builder/libs/sqlite/sqlite_rdb.html#user_data,Pcontext proc user_data(para1: Pcontext): pointer 310
|
||||
nim get_auxdata query_builder/libs/sqlite/sqlite_rdb.html#get_auxdata,Pcontext,int32 proc get_auxdata(para1: Pcontext; para2: int32): pointer 312
|
||||
nim set_auxdata query_builder/libs/sqlite/sqlite_rdb.html#set_auxdata,Pcontext,int32,pointer,proc(pointer) proc set_auxdata(para1: Pcontext; para2: int32; para3: pointer;\n para4: proc (para1: pointer) {.cdecl.}) 314
|
||||
nim result_blob query_builder/libs/sqlite/sqlite_rdb.html#result_blob,Pcontext,pointer,int32,Result_func proc result_blob(para1: Pcontext; para2: pointer; para3: int32; para4: Result_func) 317
|
||||
nim result_double query_builder/libs/sqlite/sqlite_rdb.html#result_double,Pcontext,float64 proc result_double(para1: Pcontext; para2: float64) 320
|
||||
nim result_error query_builder/libs/sqlite/sqlite_rdb.html#result_error,Pcontext,cstring,int32 proc result_error(para1: Pcontext; para2: cstring; para3: int32) 322
|
||||
nim result_error16 query_builder/libs/sqlite/sqlite_rdb.html#result_error16,Pcontext,pointer,int32 proc result_error16(para1: Pcontext; para2: pointer; para3: int32) 324
|
||||
nim result_int query_builder/libs/sqlite/sqlite_rdb.html#result_int,Pcontext,int32 proc result_int(para1: Pcontext; para2: int32) 326
|
||||
nim result_int64 query_builder/libs/sqlite/sqlite_rdb.html#result_int64,Pcontext,int64 proc result_int64(para1: Pcontext; para2: int64) 328
|
||||
nim result_null query_builder/libs/sqlite/sqlite_rdb.html#result_null,Pcontext proc result_null(para1: Pcontext) 330
|
||||
nim result_text query_builder/libs/sqlite/sqlite_rdb.html#result_text,Pcontext,cstring,int32,Result_func proc result_text(para1: Pcontext; para2: cstring; para3: int32; para4: Result_func) 332
|
||||
nim result_text16 query_builder/libs/sqlite/sqlite_rdb.html#result_text16,Pcontext,pointer,int32,Result_func proc result_text16(para1: Pcontext; para2: pointer; para3: int32; para4: Result_func) 335
|
||||
nim result_text16le query_builder/libs/sqlite/sqlite_rdb.html#result_text16le,Pcontext,pointer,int32,Result_func proc result_text16le(para1: Pcontext; para2: pointer; para3: int32;\n para4: Result_func) 338
|
||||
nim result_text16be query_builder/libs/sqlite/sqlite_rdb.html#result_text16be,Pcontext,pointer,int32,Result_func proc result_text16be(para1: Pcontext; para2: pointer; para3: int32;\n para4: Result_func) 341
|
||||
nim result_value query_builder/libs/sqlite/sqlite_rdb.html#result_value,Pcontext,PValue proc result_value(para1: Pcontext; para2: PValue) 344
|
||||
nim create_collation query_builder/libs/sqlite/sqlite_rdb.html#create_collation,PSqlite3,cstring,int32,pointer,Create_collation_func proc create_collation(para1: PSqlite3; zName: cstring; eTextRep: int32;\n para4: pointer; xCompare: Create_collation_func): int32 346
|
||||
nim create_collation16 query_builder/libs/sqlite/sqlite_rdb.html#create_collation16,PSqlite3,cstring,int32,pointer,Create_collation_func proc create_collation16(para1: PSqlite3; zName: cstring; eTextRep: int32;\n para4: pointer; xCompare: Create_collation_func): int32 349
|
||||
nim collation_needed query_builder/libs/sqlite/sqlite_rdb.html#collation_needed,PSqlite3,pointer,Collation_needed_func proc collation_needed(para1: PSqlite3; para2: pointer; para3: Collation_needed_func): int32 352
|
||||
nim collation_needed16 query_builder/libs/sqlite/sqlite_rdb.html#collation_needed16,PSqlite3,pointer,Collation_needed_func proc collation_needed16(para1: PSqlite3; para2: pointer; para3: Collation_needed_func): int32 354
|
||||
nim libversion query_builder/libs/sqlite/sqlite_rdb.html#libversion proc libversion(): cstring 356
|
||||
nim version query_builder/libs/sqlite/sqlite_rdb.html#version proc version(): cstring 358
|
||||
nim libversion_number query_builder/libs/sqlite/sqlite_rdb.html#libversion_number proc libversion_number(): int32 360
|
||||
nim backup_init query_builder/libs/sqlite/sqlite_rdb.html#backup_init,PSqlite3,cstring,PSqlite3,cstring proc backup_init(pDest: PSqlite3; zDestName: cstring; pSource: PSqlite3;\n zSourceName: cstring): PSqlite3_Backup 363
|
||||
nim backup_step query_builder/libs/sqlite/sqlite_rdb.html#backup_step,PSqlite3_Backup,int32 proc backup_step(pBackup: PSqlite3_Backup; nPage: int32): int32 366
|
||||
nim backup_finish query_builder/libs/sqlite/sqlite_rdb.html#backup_finish,PSqlite3_Backup proc backup_finish(pBackup: PSqlite3_Backup): int32 368
|
||||
nim backup_pagecount query_builder/libs/sqlite/sqlite_rdb.html#backup_pagecount,PSqlite3_Backup proc backup_pagecount(pBackup: PSqlite3_Backup): int32 370
|
||||
nim backup_remaining query_builder/libs/sqlite/sqlite_rdb.html#backup_remaining,PSqlite3_Backup proc backup_remaining(pBackup: PSqlite3_Backup): int32 372
|
||||
nim sqlite3_sleep query_builder/libs/sqlite/sqlite_rdb.html#sqlite3_sleep,int64 proc sqlite3_sleep(t: int64): int64 374
|
||||
nimgrp bindtext16 query_builder/libs/sqlite/sqlite_rdb.html#bind_text16-procs-all proc 213
|
||||
nimgrp bindtext query_builder/libs/sqlite/sqlite_rdb.html#bind_text-procs-all proc 210
|
||||
nimgrp bindblob query_builder/libs/sqlite/sqlite_rdb.html#bind_blob-procs-all proc 199
|
||||
@@ -0,0 +1,230 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/surreal/surreal_impl</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/surreal/surreal_impl</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<a class="reference reference-toplevel" href="#6" id="56">Imports</a>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#SurrealImpl" title="SurrealImpl = ref object">SurrealImpl</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">exec
|
||||
<li><a class="reference" href="#exec%2CSurrealConn%2Cstring%2CJsonNode%2Cint" title="exec(db: SurrealConn; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])">exec(db: SurrealConn; query: string; args: JsonNode; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
<li><a class="reference" href="#exec%2CSurrealConn%2Cstring%2Cseq%5Bstring%5D%2Cint" title="exec(db: SurrealConn; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])">exec(db: SurrealConn; query: string; args: seq[string]; timeout: int): owned(
|
||||
Future[void])</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">info
|
||||
<li><a class="reference" href="#info%2CSurrealConn%2Cstring%2CJsonNode%2Cint" title="info(db: SurrealConn; query: string; args: JsonNode; timeout: int): Future[
|
||||
JsonNode]">info(db: SurrealConn; query: string; args: JsonNode; timeout: int): Future[
|
||||
JsonNode]</a></li>
|
||||
<li><a class="reference" href="#info%2CSurrealConn%2Cstring%2Cseq%5Bstring%5D%2Cint" title="info(db: SurrealConn; query: string; args: seq[string]; timeout: int): Future[
|
||||
JsonNode]">info(db: SurrealConn; query: string; args: seq[string]; timeout: int): Future[
|
||||
JsonNode]</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">query
|
||||
<li><a class="reference" href="#query%2CSurrealConn%2Cstring%2CJsonNode%2Cint" title="query(db: SurrealConn; query: string; args: JsonNode; timeout: int): Future[
|
||||
JsonNode]">query(db: SurrealConn; query: string; args: JsonNode; timeout: int): Future[
|
||||
JsonNode]</a></li>
|
||||
<li><a class="reference" href="#query%2CSurrealConn%2Cstring%2Cseq%5Bstring%5D%2Cint" title="query(db: SurrealConn; query: string; args: seq[string]; timeout: int): Future[
|
||||
JsonNode]">query(db: SurrealConn; query: string; args: seq[string]; timeout: int): Future[
|
||||
JsonNode]</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="6">
|
||||
<h1><a class="toc-backref" href="#6">Imports</a></h1>
|
||||
<dl class="item">
|
||||
<a class="reference external" href="../../error.html">../../error</a>, <a class="reference external" href="surreal_rdb.html">surreal_rdb</a>, <a class="reference external" href="surreal_lib.html">surreal_lib</a>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="SurrealImpl">
|
||||
<dt><pre><a href="surreal_impl.html#SurrealImpl"><span class="Identifier">SurrealImpl</span></a> <span class="Other">=</span> <span class="Keyword">ref</span> <span class="Keyword">object</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="exec-procs-all">
|
||||
<div id="exec,SurrealConn,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CSurrealConn%2Cstring%2CJsonNode%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="surreal_rdb.html#SurrealConn"><span class="Identifier">SurrealConn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span>
|
||||
<span class="Identifier">HttpRequestError</span><span class="Other">,</span> <span class="Identifier">LibraryError</span><span class="Other">,</span> <span class="Identifier">SslError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">,</span> <span class="Identifier">IOError</span><span class="Other">,</span> <span class="Identifier">ProtocolError</span><span class="Other">,</span>
|
||||
<span class="Identifier">KeyError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadIOEffect</span><span class="Other">,</span> <span class="Identifier">WriteIOEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="exec,SurrealConn,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#exec%2CSurrealConn%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">exec</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="surreal_rdb.html#SurrealConn"><span class="Identifier">SurrealConn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">owned</span><span class="Other">(</span>
|
||||
<span class="Identifier">Future</span><span class="Other">[</span><span class="Identifier">void</span><span class="Other">]</span><span class="Other">)</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span>
|
||||
<span class="Identifier">HttpRequestError</span><span class="Other">,</span> <span class="Identifier">LibraryError</span><span class="Other">,</span> <span class="Identifier">SslError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">,</span> <span class="Identifier">IOError</span><span class="Other">,</span> <span class="Identifier">ProtocolError</span><span class="Other">,</span>
|
||||
<span class="Identifier">KeyError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadIOEffect</span><span class="Other">,</span> <span class="Identifier">WriteIOEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="info-procs-all">
|
||||
<div id="info,SurrealConn,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#info%2CSurrealConn%2Cstring%2CJsonNode%2Cint"><span class="Identifier">info</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="surreal_rdb.html#SurrealConn"><span class="Identifier">SurrealConn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">JsonNode</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span>
|
||||
<span class="Identifier">HttpRequestError</span><span class="Other">,</span> <span class="Identifier">LibraryError</span><span class="Other">,</span> <span class="Identifier">SslError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">,</span> <span class="Identifier">IOError</span><span class="Other">,</span> <span class="Identifier">ProtocolError</span><span class="Other">,</span>
|
||||
<span class="Identifier">KeyError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadIOEffect</span><span class="Other">,</span> <span class="Identifier">WriteIOEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="info,SurrealConn,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#info%2CSurrealConn%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">info</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="surreal_rdb.html#SurrealConn"><span class="Identifier">SurrealConn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">JsonNode</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span>
|
||||
<span class="Identifier">HttpRequestError</span><span class="Other">,</span> <span class="Identifier">LibraryError</span><span class="Other">,</span> <span class="Identifier">SslError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">,</span> <span class="Identifier">IOError</span><span class="Other">,</span> <span class="Identifier">ProtocolError</span><span class="Other">,</span>
|
||||
<span class="Identifier">KeyError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadIOEffect</span><span class="Other">,</span> <span class="Identifier">WriteIOEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="query-procs-all">
|
||||
<div id="query,SurrealConn,string,JsonNode,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CSurrealConn%2Cstring%2CJsonNode%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="surreal_rdb.html#SurrealConn"><span class="Identifier">SurrealConn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">JsonNode</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span>
|
||||
<span class="Identifier">HttpRequestError</span><span class="Other">,</span> <span class="Identifier">LibraryError</span><span class="Other">,</span> <span class="Identifier">SslError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">,</span> <span class="Identifier">IOError</span><span class="Other">,</span> <span class="Identifier">ProtocolError</span><span class="Other">,</span>
|
||||
<span class="Identifier">KeyError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadIOEffect</span><span class="Other">,</span> <span class="Identifier">WriteIOEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
return JArray
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="query,SurrealConn,string,seq[string],int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#query%2CSurrealConn%2Cstring%2Cseq%5Bstring%5D%2Cint"><span class="Identifier">query</span></a><span class="Other">(</span><span class="Identifier">db</span><span class="Other">:</span> <a href="surreal_rdb.html#SurrealConn"><span class="Identifier">SurrealConn</span></a><span class="Other">;</span> <span class="Identifier">query</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">seq</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">timeout</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">Future</span><span class="Other">[</span>
|
||||
<span class="Identifier">JsonNode</span><span class="Other">]</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">stackTrace</span><span class="Other">:</span> <span class="DecNumber">false</span><span class="Other">,</span> <span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">Exception</span><span class="Other">,</span> <span class="Identifier">ValueError</span><span class="Other">,</span> <span class="Identifier">DbError</span><span class="Other">,</span>
|
||||
<span class="Identifier">HttpRequestError</span><span class="Other">,</span> <span class="Identifier">LibraryError</span><span class="Other">,</span> <span class="Identifier">SslError</span><span class="Other">,</span> <span class="Identifier">OSError</span><span class="Other">,</span> <span class="Identifier">IOError</span><span class="Other">,</span> <span class="Identifier">ProtocolError</span><span class="Other">,</span>
|
||||
<span class="Identifier">KeyError</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Identifier">RootEffect</span><span class="Other">,</span> <span class="Identifier">TimeEffect</span><span class="Other">,</span> <span class="Identifier">ReadIOEffect</span><span class="Other">,</span> <span class="Identifier">WriteIOEffect</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
return JArray
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:36 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
nimTitle surreal_impl query_builder/libs/surreal/surreal_impl.html module src/allographer/query_builder/libs/surreal/surreal_impl 0
|
||||
nim SurrealImpl query_builder/libs/surreal/surreal_impl.html#SurrealImpl type SurrealImpl 10
|
||||
nim query query_builder/libs/surreal/surreal_impl.html#query,SurrealConn,string,seq[string],int proc query(db: SurrealConn; query: string; args: seq[string]; timeout: int): Future[\n JsonNode] 109
|
||||
nim query query_builder/libs/surreal/surreal_impl.html#query,SurrealConn,string,JsonNode,int proc query(db: SurrealConn; query: string; args: JsonNode; timeout: int): Future[\n JsonNode] 118
|
||||
nim exec query_builder/libs/surreal/surreal_impl.html#exec,SurrealConn,string,seq[string],int proc exec(db: SurrealConn; query: string; args: seq[string]; timeout: int): owned(\n Future[void]) 127
|
||||
nim exec query_builder/libs/surreal/surreal_impl.html#exec,SurrealConn,string,JsonNode,int proc exec(db: SurrealConn; query: string; args: JsonNode; timeout: int): owned(\n Future[void]) 134
|
||||
nim info query_builder/libs/surreal/surreal_impl.html#info,SurrealConn,string,seq[string],int proc info(db: SurrealConn; query: string; args: seq[string]; timeout: int): Future[\n JsonNode] 141
|
||||
nim info query_builder/libs/surreal/surreal_impl.html#info,SurrealConn,string,JsonNode,int proc info(db: SurrealConn; query: string; args: JsonNode; timeout: int): Future[\n JsonNode] 146
|
||||
nimgrp info query_builder/libs/surreal/surreal_impl.html#info-procs-all proc 141
|
||||
nimgrp query query_builder/libs/surreal/surreal_impl.html#query-procs-all proc 109
|
||||
nimgrp exec query_builder/libs/surreal/surreal_impl.html#exec-procs-all proc 127
|
||||
@@ -0,0 +1,148 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/surreal/surreal_lib</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/surreal/surreal_lib</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#12" id="62">Procs</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<ul class="simple nested-toc-section">dbFormat
|
||||
<li><a class="reference" href="#dbFormat%2Cstring%2Cvarargs%5Bstring%5D" title="dbFormat(formatstr: string; args: varargs[string]): string">dbFormat(formatstr: string; args: varargs[string]): string</a></li>
|
||||
<li><a class="reference" href="#dbFormat%2Cstring%2CJsonNode" title="dbFormat(queryString: string; args: JsonNode): string">dbFormat(queryString: string; args: JsonNode): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">numToAlphabet
|
||||
<li><a class="reference" href="#numToAlphabet%2Cint" title="numToAlphabet(n: int): string">numToAlphabet(n: int): string</a></li>
|
||||
|
||||
</ul>
|
||||
<ul class="simple nested-toc-section">questionToDaller
|
||||
<li><a class="reference" href="#questionToDaller%2Cstring" title="questionToDaller(s: string): string">questionToDaller(s: string): string</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="12">
|
||||
<h1><a class="toc-backref" href="#12">Procs</a></h1>
|
||||
<dl class="item">
|
||||
<div id="dbFormat-procs-all">
|
||||
<div id="dbFormat,string,varargs[string]">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2Cstring%2Cvarargs%5Bstring%5D"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">formatstr</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">varargs</span><span class="Other">[</span><span class="Identifier">string</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
<div id="dbFormat,string,JsonNode">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#dbFormat%2Cstring%2CJsonNode"><span class="Identifier">dbFormat</span></a><span class="Other">(</span><span class="Identifier">queryString</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">;</span> <span class="Identifier">args</span><span class="Other">:</span> <span class="Identifier">JsonNode</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span>
|
||||
<span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="numToAlphabet-procs-all">
|
||||
<div id="numToAlphabet,int">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#numToAlphabet%2Cint"><span class="Identifier">numToAlphabet</span></a><span class="Other">(</span><span class="Identifier">n</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
1 => "a", 26 => "z", 27 => "aa", 28 => "ab", 52 => "az", 53 => "ba"
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="questionToDaller-procs-all">
|
||||
<div id="questionToDaller,string">
|
||||
<dt><pre><span class="Keyword">proc</span> <a href="#questionToDaller%2Cstring"><span class="Identifier">questionToDaller</span></a><span class="Other">(</span><span class="Identifier">s</span><span class="Other">:</span> <span class="Identifier">string</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">string</span> {.<span><span class="Other pragmadots">...</span></span><span class="pragmawrap"><span class="Identifier">raises</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">tags</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span><span class="Other">,</span> <span class="Identifier">forbids</span><span class="Other">:</span> <span class="Other">[</span><span class="Other">]</span></span>.}</pre></dt>
|
||||
<dd>
|
||||
|
||||
<p>from <tt class="docutils literal"><span class="pre"><span class="Identifier">UPDATE</span> <span class="Identifier">user</span> <span class="Identifier">SET</span> <span class="Identifier">name</span> <span class="Operator">=</span> <span class="Operator">?</span><span class="Punctuation">,</span> <span class="Identifier">email</span> <span class="Operator">=</span> <span class="Operator">?</span> <span class="Identifier">WHERE</span> <span class="Identifier">id</span> <span class="Operator">=</span> <span class="Operator">?</span></span></tt></p>
|
||||
<p>to <tt class="docutils literal"><span class="pre"><span class="Identifier">UPDATE</span> <span class="Identifier">user</span> <span class="Identifier">SET</span> <span class="Identifier">name</span> <span class="Operator">=</span> <span class="Operator">$</span><span class="Identifier">a</span><span class="Punctuation">,</span> <span class="Identifier">email</span> <span class="Operator">=</span> <span class="Operator">$</span><span class="Identifier">b</span> <span class="Identifier">WHERE</span> <span class="Identifier">id</span> <span class="Operator">=</span> <span class="Operator">$</span><span class="Identifier">c</span></span></tt></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:36 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
nimTitle surreal_lib query_builder/libs/surreal/surreal_lib.html module src/allographer/query_builder/libs/surreal/surreal_lib 0
|
||||
nim dbFormat query_builder/libs/surreal/surreal_lib.html#dbFormat,string,varargs[string] proc dbFormat(formatstr: string; args: varargs[string]): string 97
|
||||
nim numToAlphabet query_builder/libs/surreal/surreal_lib.html#numToAlphabet,int proc numToAlphabet(n: int): string 112
|
||||
nim questionToDaller query_builder/libs/surreal/surreal_lib.html#questionToDaller,string proc questionToDaller(s: string): string 118
|
||||
nim dbFormat query_builder/libs/surreal/surreal_lib.html#dbFormat,string,JsonNode proc dbFormat(queryString: string; args: JsonNode): string 169
|
||||
nimgrp dbformat query_builder/libs/surreal/surreal_lib.html#dbFormat-procs-all proc 97
|
||||
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- This file is generated by Nim. -->
|
||||
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en" data-theme="auto">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>src/allographer/query_builder/libs/surreal/surreal_rdb</title>
|
||||
|
||||
<!-- Google fonts -->
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
|
||||
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QQQEwksSS9ZWwAAAk1JREFUWMPtll2ITVEUx39nn/O7Y5qR8f05wtCUUr6ZIS++8pEnkZInPImneaCQ5METNdOkeFBKUhMPRIkHKfEuUZSUlGlKPN2TrgfncpvmnntnmlEyq1Z7t89/rf9a6+y99oZxGZf/XeIq61EdtgKXgdXA0xrYAvBjOIF1AI9zvjcC74BSpndrJPkBWDScTF8Aa4E3wDlgHbASaANmVqlcCnwHvgDvgVfAJ+AikAAvgfVZwLnSVZHZaOuKoQi3ZOMi4NkYkpe1p4J7A8BpYAD49hfIy/oqG0+hLomiKP2L5L+1ubn5115S+3OAn4EnwBlgMzCjyt6ZAnQCJ4A7wOs88iRJHvw50HoujuPBoCKwHWiosy8MdfZnAdcHk8dxXFJ3VQbQlCTJvRBCGdRbD4M6uc5glpY3eAihpN5S5w12diSEcCCEcKUO4ljdr15T76ur1FDDLIQQ3qv71EdDOe3Kxj3leRXyk+pxdWnFWod6Wt2bY3de3aSuUHcPBVimHs7mK9WrmeOF6lR1o9qnzskh2ar2qm1qizpfXaPeVGdlmGN5pb09qMxz1Xb1kLqgzn1RyH7JUXW52lr5e/Kqi9qpto7V1atuUzfnARrV7jEib1T76gG2qxdGmXyiekkt1GswPTtek0aBfJp6YySGBfWg2tPQ0FAYgf1stUfdmdcjarbYJEniKIq6gY/Aw+zWHAC+p2labGpqiorFYgGYCEzN7oQdQClN07O1/EfDyGgC0ALMBdYAi4FyK+4H3gLPsxfR1zRNi+NP7nH5J+QntnXe5B5mpfQAAAAASUVORK5CYII=">
|
||||
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="../../../nimdoc.out.css?v=2.2.8">
|
||||
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="../../../dochack.js?v=2.2.8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="documentId">
|
||||
<div class="container">
|
||||
<h1 class="title">src/allographer/query_builder/libs/surreal/surreal_rdb</h1>
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div class="theme-select-wrapper">
|
||||
<label for="theme-select">Theme: </label>
|
||||
<select id="theme-select" onchange="setTheme(this.value)">
|
||||
<option value="auto">🌗 Match OS</option>
|
||||
<option value="dark">🌑 Dark</option>
|
||||
<option value="light">🌕 Light</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="global-links">
|
||||
<ul class="simple">
|
||||
<li><a id="indexLink" href="../../../theindex.html">Index</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchInputDiv">
|
||||
Search: <input type="search" id="searchInput" oninput="search()"/>
|
||||
</div>
|
||||
<div>
|
||||
Group by:
|
||||
<select onchange="groupBy(this.value)">
|
||||
<option value="section">Section</option>
|
||||
<option value="type">Type</option>
|
||||
</select>
|
||||
</div>
|
||||
<ul class="simple simple-toc" id="toc-list">
|
||||
<li>
|
||||
<details open>
|
||||
<summary><a class="reference reference-toplevel" href="#7" id="57">Types</a></summary>
|
||||
<ul class="simple simple-toc-section">
|
||||
<li><a class="reference" href="#SurrealConn" title="SurrealConn = object
|
||||
client*: AsyncHttpClient
|
||||
host*: string
|
||||
port*: int32">SurrealConn</a></li>
|
||||
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="nine columns" id="content">
|
||||
|
||||
<div id="tocRoot"></div>
|
||||
|
||||
<p class="module-desc"></p>
|
||||
<div class="section" id="7">
|
||||
<h1><a class="toc-backref" href="#7">Types</a></h1>
|
||||
<dl class="item">
|
||||
<div id="SurrealConn">
|
||||
<dt><pre><a href="surreal_rdb.html#SurrealConn"><span class="Identifier">SurrealConn</span></a> <span class="Other">=</span> <span class="Keyword">object</span>
|
||||
<span class="Identifier">client</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">AsyncHttpClient</span>
|
||||
<span class="Identifier">host</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">string</span>
|
||||
<span class="Identifier">port</span><span class="Operator">*</span><span class="Other">:</span> <span class="Identifier">int32</span></pre></dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</div>
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="twelve-columns footer">
|
||||
<span class="nim-sprite"></span>
|
||||
<br>
|
||||
<small style="color: var(--hint);">Made with Nim. Generated: 2026-03-24 13:25:36 UTC</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,2 @@
|
||||
nimTitle surreal_rdb query_builder/libs/surreal/surreal_rdb.html module src/allographer/query_builder/libs/surreal/surreal_rdb 0
|
||||
nim SurrealConn query_builder/libs/surreal/surreal_rdb.html#SurrealConn object SurrealConn 3
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user