getDatashareTableColumns gets the columns of tables in datashare database.
(txn *sql.Tx)
| 452 | |
| 453 | // getDatashareTableColumns gets the columns of tables in datashare database. |
| 454 | func (d *Driver) getDatashareTableColumns(txn *sql.Tx) (map[db.TableKey][]*storepb.ColumnMetadata, error) { |
| 455 | columnsMap := make(map[db.TableKey][]*storepb.ColumnMetadata) |
| 456 | |
| 457 | query := ` |
| 458 | SELECT |
| 459 | schema_name, |
| 460 | table_name, |
| 461 | column_name, |
| 462 | data_type, |
| 463 | ordinal_position, |
| 464 | column_default, |
| 465 | is_nullable, |
| 466 | character_maximum_length |
| 467 | FROM SVV_ALL_COLUMNS |
| 468 | WHERE database_name = $1;` |
| 469 | rows, err := txn.Query(query, d.databaseName) |
| 470 | if err != nil { |
| 471 | return nil, err |
| 472 | } |
| 473 | defer rows.Close() |
| 474 | for rows.Next() { |
| 475 | column := &storepb.ColumnMetadata{} |
| 476 | var schemaName, tableName, nullable string |
| 477 | var defaultStr sql.NullString |
| 478 | var varcharMaxLength sql.NullInt32 |
| 479 | if err := rows.Scan(&schemaName, &tableName, &column.Name, &column.Type, &column.Position, &defaultStr, &nullable, &varcharMaxLength); err != nil { |
| 480 | return nil, err |
| 481 | } |
| 482 | if defaultStr.Valid { |
| 483 | // Store in Default field (migration from DefaultExpression to Default) |
| 484 | column.Default = defaultStr.String |
| 485 | } |
| 486 | isNullBool, err := util.ConvertYesNo(nullable) |
| 487 | if err != nil { |
| 488 | return nil, err |
| 489 | } |
| 490 | column.Nullable = isNullBool |
| 491 | if column.Type == "character varying" && varcharMaxLength.Valid { |
| 492 | column.Type = fmt.Sprintf("varchar(%d)", varcharMaxLength.Int32) |
| 493 | } |
| 494 | |
| 495 | key := db.TableKey{Schema: schemaName, Table: tableName} |
| 496 | columnsMap[key] = append(columnsMap[key], column) |
| 497 | } |
| 498 | if err := rows.Err(); err != nil { |
| 499 | return nil, err |
| 500 | } |
| 501 | |
| 502 | return columnsMap, nil |
| 503 | } |
| 504 | |
| 505 | // getViews gets all views of a database. |
| 506 | func getViews(txn *sql.Tx, columnMap map[db.TableKey][]*storepb.ColumnMetadata) (map[string][]*storepb.ViewMetadata, error) { |
no test coverage detected