(ctx context.Context, query string, parameters []interface{})
| 95 | } |
| 96 | |
| 97 | func (tr *TestRunner) executeQuery(ctx context.Context, query string, parameters []interface{}) (interface{}, error) { |
| 98 | rows, err := tr.driver.Query(ctx, query, parameters...) |
| 99 | if err != nil { |
| 100 | return err.Error(), nil |
| 101 | } |
| 102 | defer rows.Close() |
| 103 | |
| 104 | var result [][]interface{} |
| 105 | |
| 106 | // Process query results |
| 107 | for rows.Next() { |
| 108 | values, err := rows.Values() |
| 109 | if err != nil { |
| 110 | return err.Error(), nil |
| 111 | } |
| 112 | result = append(result, values) |
| 113 | } |
| 114 | |
| 115 | if err = rows.Err(); err != nil { |
| 116 | return err.Error(), nil |
| 117 | } |
| 118 | |
| 119 | // For non-SELECT queries (like INSERT/UPDATE/DELETE) |
| 120 | // return the rows affected if we got no result rows |
| 121 | if len(result) == 0 { |
| 122 | rowsAffected := rows.RowsAffected() |
| 123 | return [][]interface{}{{rowsAffected}}, nil |
| 124 | } |
| 125 | |
| 126 | return result, nil |
| 127 | } |
| 128 | |
| 129 | // parseArrayString parses a Postgres array string into a slice |
| 130 | func (tr *TestRunner) parseArrayString(arrayStr string) ([]interface{}, error) { |
no test coverage detected