| // +build go1.8 |
| |
| package sqlmock |
| |
| import ( |
| "database/sql/driver" |
| "io" |
| "reflect" |
| ) |
| |
| // Implement the "RowsNextResultSet" interface |
| func (rs *rowSets) HasNextResultSet() bool { |
| return rs.pos+1 < len(rs.sets) |
| } |
| |
| // Implement the "RowsNextResultSet" interface |
| func (rs *rowSets) NextResultSet() error { |
| if !rs.HasNextResultSet() { |
| return io.EOF |
| } |
| |
| rs.pos++ |
| return nil |
| } |
| |
| // type for rows with columns definition created with sqlmock.NewRowsWithColumnDefinition |
| type rowSetsWithDefinition struct { |
| *rowSets |
| } |
| |
| // Implement the "RowsColumnTypeDatabaseTypeName" interface |
| func (rs *rowSetsWithDefinition) ColumnTypeDatabaseTypeName(index int) string { |
| return rs.getDefinition(index).DbType() |
| } |
| |
| // Implement the "RowsColumnTypeLength" interface |
| func (rs *rowSetsWithDefinition) ColumnTypeLength(index int) (length int64, ok bool) { |
| return rs.getDefinition(index).Length() |
| } |
| |
| // Implement the "RowsColumnTypeNullable" interface |
| func (rs *rowSetsWithDefinition) ColumnTypeNullable(index int) (nullable, ok bool) { |
| return rs.getDefinition(index).IsNullable() |
| } |
| |
| // Implement the "RowsColumnTypePrecisionScale" interface |
| func (rs *rowSetsWithDefinition) ColumnTypePrecisionScale(index int) (precision, scale int64, ok bool) { |
| return rs.getDefinition(index).PrecisionScale() |
| } |
| |
| // ColumnTypeScanType is defined from driver.RowsColumnTypeScanType |
| func (rs *rowSetsWithDefinition) ColumnTypeScanType(index int) reflect.Type { |
| return rs.getDefinition(index).ScanType() |
| } |
| |
| // return column definition from current set metadata |
| func (rs *rowSetsWithDefinition) getDefinition(index int) *Column { |
| return rs.sets[rs.pos].def[index] |
| } |
| |
| // NewRowsWithColumnDefinition return rows with columns metadata |
| func NewRowsWithColumnDefinition(columns ...*Column) *Rows { |
| cols := make([]string, len(columns)) |
| for i, column := range columns { |
| cols[i] = column.Name() |
| } |
| |
| return &Rows{ |
| cols: cols, |
| def: columns, |
| nextErr: make(map[int]error), |
| converter: driver.DefaultParameterConverter, |
| } |
| } |