MCPcopy
hub / github.com/pingcap/tidb / GetSpecifiedColumnValuesAndClose

Function GetSpecifiedColumnValuesAndClose

dumpling/export/sql.go:814–856  ·  view source on GitHub ↗

GetSpecifiedColumnValuesAndClose get columns' values whose name is equal to columnName

(rows *sql.Rows, columnName ...string)

Source from the content-addressed store, hash-verified

812
813// GetSpecifiedColumnValuesAndClose get columns' values whose name is equal to columnName
814func GetSpecifiedColumnValuesAndClose(rows *sql.Rows, columnName ...string) ([][]string, error) {
815 if rows == nil {
816 return [][]string{}, nil
817 }
818 defer rows.Close()
819 var strs [][]string
820 columns, err := rows.Columns()
821 if err != nil {
822 return strs, errors.Trace(err)
823 }
824 addr := make([]any, len(columns))
825 oneRow := make([]sql.NullString, len(columns))
826 fieldIndexMp := make(map[int]int)
827 for i, col := range columns {
828 addr[i] = &oneRow[i]
829 for j, name := range columnName {
830 if strings.EqualFold(col, name) {
831 fieldIndexMp[i] = j
832 }
833 }
834 }
835 if len(fieldIndexMp) == 0 {
836 return strs, nil
837 }
838 for rows.Next() {
839 err := rows.Scan(addr...)
840 if err != nil {
841 return strs, errors.Trace(err)
842 }
843 written := false
844 tmpStr := make([]string, len(columnName))
845 for colPos, namePos := range fieldIndexMp {
846 if oneRow[colPos].Valid {
847 written = true
848 tmpStr[namePos] = oneRow[colPos].String
849 }
850 }
851 if written {
852 strs = append(strs, tmpStr)
853 }
854 }
855 return strs, errors.Trace(rows.Err())
856}
857
858// GetPdAddrs gets PD address from TiDB
859func GetPdAddrs(tctx *tcontext.Context, db *sql.DB) ([]string, error) {

Callers 5

ListAllDatabasesTablesFunction · 0.85
GetPartitionTableIDsFunction · 0.85
QuerySQLWithColumnsMethod · 0.85

Calls 4

CloseMethod · 0.65
ColumnsMethod · 0.65
NextMethod · 0.65
ScanMethod · 0.65

Tested by 1