Docker images / prepare-release (push) Successful in 12s
Docker images / backend-test (push) Successful in 4m9s
Docker images / frontend-image (push) Successful in 4m28s
Docker images / updater-image (push) Successful in 58s
Docker images / backend-image (push) Successful in 2m49s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 11s
При старте backend накатывает схему PostgreSQL 18 и, если база пустая, один раз импортирует mikrotik.db с тома. Повторный старт не копирует данные. Бэкап в UI идёт через pg_dump. Co-authored-by: Cursor <[email protected]>
23 lines
626 B
TypeScript
23 lines
626 B
TypeScript
/** Convert SQLite-style @name / ? placeholders to node-pg $n. */
|
|
|
|
export function bindSql(
|
|
sql: string,
|
|
params?: unknown[] | Record<string, unknown>,
|
|
): { text: string; values: unknown[] } {
|
|
if (params == null) return { text: sql, values: [] }
|
|
if (Array.isArray(params)) {
|
|
let i = 0
|
|
const text = sql.replace(/\?/g, () => {
|
|
i += 1
|
|
return `$${i}`
|
|
})
|
|
return { text, values: params }
|
|
}
|
|
const values: unknown[] = []
|
|
const text = sql.replace(/@([a-zA-Z_][a-zA-Z0-9_]*)/g, (_, name: string) => {
|
|
values.push(params[name])
|
|
return `$${values.length}`
|
|
})
|
|
return { text, values }
|
|
}
|