--- name: db_exec kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "func DBExec(db *sql.DB, query string, args ...any) (int64, error)" description: "Ejecuta un statement no-SELECT (INSERT, UPDATE, DELETE, DDL) y retorna el numero de filas afectadas." tags: [database, sql, exec, insert, update, delete, ddl, pendiente-usar] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: ["database/sql"] params: - name: db desc: "conexion sql.DB abierta" - name: query desc: "statement SQL no-SELECT (INSERT, UPDATE, DELETE, DDL) con placeholders ?" - name: args desc: "argumentos para los placeholders en la query" output: "numero de filas afectadas por la ejecucion" tested: false tests: [] test_file_path: "" file_path: "functions/infra/db_exec.go" --- ## Ejemplo ```go n, err := DBExec(db, "UPDATE users SET active = ? WHERE last_login < ?", false, cutoff) if err != nil { return err } fmt.Printf("desactivados: %d usuarios\n", n) ``` ## Notas Agnóstica al driver. Para DDL algunos drivers retornan 0 en RowsAffected — esto es normal. Para INSERT con last_insert_id usar `DBInsertRow` que retorna ese valor. Para multiples filas en una transaccion usar `DBInsertBatch`.