(mem memory.Allocator, rows *sql.Rows)
| 164 | } |
| 165 | |
| 166 | func NewSqlBatchReader(mem memory.Allocator, rows *sql.Rows) (*SqlBatchReader, error) { |
| 167 | bldr := flightsql.NewColumnMetadataBuilder() |
| 168 | |
| 169 | cols, err := rows.ColumnTypes() |
| 170 | if err != nil { |
| 171 | rows.Close() |
| 172 | return nil, err |
| 173 | } |
| 174 | |
| 175 | rowdest := make([]interface{}, len(cols)) |
| 176 | fields := make([]arrow.Field, len(cols)) |
| 177 | for i, c := range cols { |
| 178 | fields[i].Name = c.Name() |
| 179 | if c.Name() == "?" { |
| 180 | fields[i].Name += ":" + strconv.Itoa(i) |
| 181 | } |
| 182 | fields[i].Nullable, _ = c.Nullable() |
| 183 | fields[i].Type = getArrowType(c) |
| 184 | fields[i].Metadata = getColumnMetadata(bldr, getSqlTypeFromTypeName(c.DatabaseTypeName()), "") |
| 185 | switch fields[i].Type.ID() { |
| 186 | case arrow.DENSE_UNION, arrow.SPARSE_UNION: |
| 187 | rowdest[i] = new(interface{}) |
| 188 | case arrow.UINT8, arrow.INT8: |
| 189 | if fields[i].Nullable { |
| 190 | rowdest[i] = &sql.NullByte{} |
| 191 | } else { |
| 192 | rowdest[i] = new(uint8) |
| 193 | } |
| 194 | case arrow.INT32: |
| 195 | if fields[i].Nullable { |
| 196 | rowdest[i] = &sql.NullInt32{} |
| 197 | } else { |
| 198 | rowdest[i] = new(int32) |
| 199 | } |
| 200 | case arrow.INT64: |
| 201 | if fields[i].Nullable { |
| 202 | rowdest[i] = &sql.NullInt64{} |
| 203 | } else { |
| 204 | rowdest[i] = new(int64) |
| 205 | } |
| 206 | case arrow.FLOAT64, arrow.FLOAT32: |
| 207 | if fields[i].Nullable { |
| 208 | rowdest[i] = &sql.NullFloat64{} |
| 209 | } else { |
| 210 | rowdest[i] = new(float64) |
| 211 | } |
| 212 | case arrow.BINARY: |
| 213 | var b []byte |
| 214 | rowdest[i] = &b |
| 215 | case arrow.STRING: |
| 216 | if fields[i].Nullable { |
| 217 | rowdest[i] = &sql.NullString{} |
| 218 | } else { |
| 219 | rowdest[i] = new(string) |
| 220 | } |
| 221 | } |
| 222 | } |
| 223 |
nothing calls this directly
no test coverage detected