feat(db2): C++20 数据库 RPC 服务,对齐 Python db 模块 execute 路由
- 完整实现 execute 路由(select/insert/update/delete) - 相同 where 语法(eq/ne/gt/lt/ge/le/like/in)及响应格式 - 启动时从 confs 拉取 db.ini,支持环境变量和命令行覆盖 - per-thread SQLite 连接 + WAL/mmap/busy_timeout PRAGMA - PRAGMA table_info 驱动的列类型反射与缓存 - $now 哨兵值自动替换为 UTC 时间 - 内置 Logs 表自动建表 + 后台清理线程(retention_days + max_records) - 表名白名单校验防 SQL 注入 - gateway DbC::call_msg() 零改动可直接切换
This commit is contained in:
1 parent
49ed3f738f
commit
1970f3f824
6 files changed
+928
No files matched your search
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 从 DATABASE_URL 提取 SQLite 文件路径并确保目录存在
|
||||
if [[ "${DATABASE_URL:-}" == sqlite:///* ]]; then
|
||||
DB_PATH="${DATABASE_URL#sqlite:///}"
|
||||
mkdir -p "$(dirname "$DB_PATH")"
|
||||
fi
|
||||
|
||||
# 初始化 schema(幂等)
|
||||
if [[ -n "${DATABASE_URL:-}" ]]; then
|
||||
DB_FILE="${DATABASE_URL#sqlite:///}"
|
||||
sqlite3 "$DB_FILE" <<'SQL'
|
||||
CREATE TABLE IF NOT EXISTS Users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT UNIQUE NOT NULL,
|
||||
password_hash TEXT NOT NULL,
|
||||
create_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
last_login DATETIME,
|
||||
is_active BOOLEAN DEFAULT 1
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS Notes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
pid INTEGER NOT NULL,
|
||||
owner VARCHAR(128) DEFAULT 'Unknow',
|
||||
title VARCHAR(128) NOT NULL,
|
||||
content TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS Logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
ts TEXT NOT NULL,
|
||||
service TEXT NOT NULL,
|
||||
level TEXT NOT NULL,
|
||||
message TEXT NOT NULL,
|
||||
trace_id TEXT,
|
||||
extra TEXT
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_logs_service_ts ON Logs(service, ts);
|
||||
CREATE INDEX IF NOT EXISTS idx_logs_level_ts ON Logs(level, ts);
|
||||
CREATE INDEX IF NOT EXISTS idx_logs_ts ON Logs(ts);
|
||||
CREATE INDEX IF NOT EXISTS idx_logs_trace ON Logs(trace_id);
|
||||
SQL
|
||||
fi
|
||||
|
||||
exec /app/db2 \
|
||||
--addr "${LISTEN_ADDR:-0.0.0.0}" \
|
||||
--port "${LISTEN_PORT:-8005}" \
|
||||
--workers "${WORKERS:-4}"
|
||||
Reference in new issue
Block a user