(ctx context.Context, tableName string)
| 241 | } |
| 242 | |
| 243 | func (c *Client) getTableInfo(ctx context.Context, tableName string) (*schema.Table, error) { |
| 244 | info := tableInfo{} |
| 245 | rows, err := c.db.QueryContext(ctx, fmt.Sprintf(sqlTableInfo, tableName)) |
| 246 | if err != nil { |
| 247 | if strings.Contains(err.Error(), fmt.Sprintf("Table with name %s does not exist!", tableName)) { |
| 248 | // Table doesn't exist |
| 249 | return nil, nil |
| 250 | } |
| 251 | return nil, err |
| 252 | } |
| 253 | defer rows.Close() |
| 254 | for rows.Next() { |
| 255 | colInfo := columnInfo{} |
| 256 | if err := rows.Scan( |
| 257 | &colInfo.index, |
| 258 | &colInfo.name, |
| 259 | &colInfo.typ, |
| 260 | &colInfo.notNull, |
| 261 | &colInfo.defaultValue, |
| 262 | &colInfo.pk); err != nil { |
| 263 | return nil, err |
| 264 | } |
| 265 | colInfo.typ = strings.ToLower(colInfo.typ) |
| 266 | colInfo.unique, err = c.isColumnUnique(ctx, tableName, colInfo.name) |
| 267 | if err != nil { |
| 268 | return nil, err |
| 269 | } |
| 270 | info.columns = append(info.columns, colInfo) |
| 271 | } |
| 272 | if err := rows.Err(); err != nil { |
| 273 | return nil, err |
| 274 | } |
| 275 | |
| 276 | if len(info.columns) == 0 { |
| 277 | // Table doesn't exist |
| 278 | return nil, nil |
| 279 | } |
| 280 | |
| 281 | columns := make(schema.ColumnList, len(info.columns)) |
| 282 | for i, col := range info.columns { |
| 283 | columns[i] = schema.Column{ |
| 284 | Name: col.name, |
| 285 | Type: duckDBToArrow(col.typ), |
| 286 | NotNull: col.notNull, |
| 287 | PrimaryKey: col.pk, |
| 288 | Unique: col.unique, |
| 289 | } |
| 290 | } |
| 291 | |
| 292 | return &schema.Table{ |
| 293 | Name: tableName, |
| 294 | Columns: columns, |
| 295 | }, nil |
| 296 | } |
no test coverage detected