feat: abstracción DB multi-engine — CRUD genérico y openers para SQLite, Postgres, ClickHouse, DuckDB
Funciones Go con interfaz unificada para operaciones DB: open, close, create_table, exec, query, insert_row, insert_batch. Openers específicos por engine. Tipo DBConfig para configuración común. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: db_insert_batch
|
||||
kind: function
|
||||
lang: go
|
||||
domain: infra
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "func DBInsertBatch(db *sql.DB, table string, columns []string, rows [][]any) (int64, error)"
|
||||
description: "Inserta multiples filas en una transaccion usando prepared statement. Retorna el total de filas afectadas. Mas eficiente que llamar DBInsertRow en un loop."
|
||||
tags: [database, sql, insert, batch, transaction, bulk]
|
||||
uses_functions: [db_insert_row_go_infra]
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: ["database/sql", "strings"]
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
file_path: "functions/infra/db_insert_batch.go"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
cols := []string{"name", "score", "ts"}
|
||||
rows := [][]any{
|
||||
{"Alice", 95.5, 1700000000},
|
||||
{"Bob", 87.2, 1700000001},
|
||||
{"Carol", 91.0, 1700000002},
|
||||
}
|
||||
n, err := DBInsertBatch(db, "results", cols, rows)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("insertadas: %d filas\n", n)
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
Usa `tx.Prepare()` + `stmt.Exec()` en un loop dentro de una transaccion. El rollback es automatico si alguna fila falla. Valida tabla y columnas con regex. Cada fila debe tener exactamente `len(columns)` valores — retorna error descriptivo si no coincide.
|
||||
Reference in New Issue
Block a user