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

Function selectTiDBTableSample

dumpling/export/dump.go:968–1013  ·  view source on GitHub ↗
(tctx *tcontext.Context, conn *BaseConn, meta TableMeta)

Source from the content-addressed store, hash-verified

966}
967
968func selectTiDBTableSample(tctx *tcontext.Context, conn *BaseConn, meta TableMeta) (pkFields []string, pkVals [][]string, err error) {
969 pkFields, pkColTypes, err := selectTiDBRowKeyFields(tctx, conn, meta, nil)
970 if err != nil {
971 return nil, nil, errors.Trace(err)
972 }
973
974 query := buildTiDBTableSampleQuery(pkFields, meta.DatabaseName(), meta.TableName())
975 pkValNum := len(pkFields)
976 var iter SQLRowIter
977 rowRec := MakeRowReceiver(pkColTypes)
978 buf := new(bytes.Buffer)
979
980 err = conn.QuerySQL(tctx, func(rows *sql.Rows) error {
981 if iter == nil {
982 iter = &rowIter{
983 rows: rows,
984 args: make([]any, pkValNum),
985 }
986 }
987 err = iter.Decode(rowRec)
988 if err != nil {
989 return errors.Trace(err)
990 }
991 pkValRow := make([]string, 0, pkValNum)
992 for _, rec := range rowRec.receivers {
993 rec.WriteToBuffer(buf, true)
994 pkValRow = append(pkValRow, buf.String())
995 buf.Reset()
996 }
997 pkVals = append(pkVals, pkValRow)
998 return nil
999 }, func() {
1000 if iter != nil {
1001 _ = iter.Close()
1002 iter = nil
1003 }
1004 rowRec = MakeRowReceiver(pkColTypes)
1005 pkVals = pkVals[:0]
1006 buf.Reset()
1007 }, query)
1008 if err == nil && iter != nil && iter.Error() != nil {
1009 err = iter.Error()
1010 }
1011
1012 return pkFields, pkVals, err
1013}
1014
1015func buildTiDBTableSampleQuery(pkFields []string, dbName, tblName string) string {
1016 template := "SELECT %s FROM `%s`.`%s` TABLESAMPLE REGIONS() ORDER BY %s"

Callers 1

Calls 12

DecodeMethod · 0.95
CloseMethod · 0.95
ErrorMethod · 0.95
selectTiDBRowKeyFieldsFunction · 0.85
MakeRowReceiverFunction · 0.85
QuerySQLMethod · 0.80
DatabaseNameMethod · 0.65
TableNameMethod · 0.65
WriteToBufferMethod · 0.65
StringMethod · 0.65
ResetMethod · 0.65

Tested by

no test coverage detected