- 完整实现 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() 零改动可直接切换
49 lines
1.5 KiB
Bash
Executable File
49 lines
1.5 KiB
Bash
Executable File
#!/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}"
|