---
name: test_db_seed
kind: function
lang: go
domain: core
version: "1.0.0"
purity: impure
signature: "func TestDBSeed(t *testing.T, db *sql.DB, table string, rows []map[string]any) error"
description: "Inserta filas en una tabla de forma dinamica usando una transaccion. Las columnas se infieren del primer mapa en orden alfabetico. Retorna error si la transaccion falla."
tags: [testing, database, sqlite, seed, fixtures, test_helper]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["database/sql", "fmt", "sort", "strings", "testing"]
params:
  - name: t
    desc: "testing.T del test actual; usado para t.Helper()"
  - name: db
    desc: "conexion a la base de datos donde insertar; tipicamente de TestDBSetup"
  - name: table
    desc: "nombre de la tabla donde insertar las filas"
  - name: rows
    desc: "slice de mapas columna->valor; las columnas se infieren del primer mapa"
output: "nil si todas las filas se insertaron correctamente; error con contexto si falla la transaccion"
tested: true
tests:
  - "inserta una fila correctamente"
  - "inserta multiples filas en una transaccion"
  - "slice vacio no hace nada y retorna nil"
  - "error en tabla inexistente retorna error"
test_file_path: "functions/core/test_db_seed_test.go"
file_path: "functions/core/test_db_seed.go"
---

## Ejemplo

```go
tdb := TestDBSetup(t, `CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);`)

err := TestDBSeed(t, tdb.DB, "users", []map[string]any{
    {"name": "Alice", "age": 30},
    {"name": "Bob",   "age": 25},
})
// err == nil
// tabla users tiene 2 filas
```

## Notas

Funcion impura — hace I/O a la base de datos.
Las columnas se ordenan alfabeticamente para consistencia entre llamadas.
No soporta columnas diferentes entre filas — todas las filas deben tener las mismas claves que la primera.
Usa prepared statements para evitar SQL injection en los valores.
