From 5233d2eca8cec7bf6db295c346ff2e6eaad835ad Mon Sep 17 00:00:00 2001 From: LemonHX Date: Mon, 21 Feb 2022 15:11:42 +0800 Subject: [PATCH] stmtsummary: issue left in #32156 (#32427) close pingcap/tidb#32156 --- infoschema/cluster_tables_test.go | 14 ++++++++++++-- util/stmtsummary/reader.go | 16 ++++++++++++---- util/stmtsummary/statement_summary_test.go | 4 ++-- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/infoschema/cluster_tables_test.go b/infoschema/cluster_tables_test.go index 8f2ab2c81990e..258f35141c0f7 100644 --- a/infoschema/cluster_tables_test.go +++ b/infoschema/cluster_tables_test.go @@ -415,20 +415,30 @@ func TestStmtSummaryHistoryTableWithUserTimezone(t *testing.T) { tk.MustExec("use test;") tk.MustExec("set time_zone = '+08:00';") tk.MustExec("select sleep(0.1);") - r := tk.MustQuery("select FIRST_SEEN, LAST_SEEN from INFORMATION_SCHEMA.STATEMENTS_SUMMARY_HISTORY order by LAST_SEEN limit 1;") + r := tk.MustQuery("select FIRST_SEEN, LAST_SEEN, SUMMARY_BEGIN_TIME, SUMMARY_END_TIME from INFORMATION_SCHEMA.STATEMENTS_SUMMARY_HISTORY order by LAST_SEEN limit 1;") date8First, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][0].(string)) require.NoError(t, err) date8Last, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][1].(string)) require.NoError(t, err) + date8Begin, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][2].(string)) + require.NoError(t, err) + date8End, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][3].(string)) + require.NoError(t, err) tk.MustExec("set time_zone = '+01:00';") - r = tk.MustQuery("select FIRST_SEEN, LAST_SEEN from INFORMATION_SCHEMA.STATEMENTS_SUMMARY_HISTORY order by LAST_SEEN limit 1;") + r = tk.MustQuery("select FIRST_SEEN, LAST_SEEN, SUMMARY_BEGIN_TIME, SUMMARY_END_TIME from INFORMATION_SCHEMA.STATEMENTS_SUMMARY_HISTORY order by LAST_SEEN limit 1;") date1First, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][0].(string)) require.NoError(t, err) date1Last, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][1].(string)) require.NoError(t, err) + date1Begin, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][2].(string)) + require.NoError(t, err) + date1End, err := time.Parse("2006-01-02 15:04:05", r.Rows()[0][3].(string)) + require.NoError(t, err) require.Less(t, date1First.Unix(), date8First.Unix()) require.Less(t, date1Last.Unix(), date8Last.Unix()) + require.Less(t, date1Begin.Unix(), date8Begin.Unix()) + require.Less(t, date1End.Unix(), date8End.Unix()) } func TestStmtSummaryHistoryTable(t *testing.T) { diff --git a/util/stmtsummary/reader.go b/util/stmtsummary/reader.go index 6551a275239b7..a0003d9390eef 100644 --- a/util/stmtsummary/reader.go +++ b/util/stmtsummary/reader.go @@ -313,11 +313,19 @@ var columnValueFactoryMap = map[string]columnValueFactory{ ClusterTableInstanceColumnNameStr: func(reader *stmtSummaryReader, ssElement *stmtSummaryByDigestElement, ssbd *stmtSummaryByDigest) interface{} { return reader.instanceAddr }, - SummaryBeginTimeStr: func(_ *stmtSummaryReader, ssElement *stmtSummaryByDigestElement, _ *stmtSummaryByDigest) interface{} { - return types.NewTime(types.FromGoTime(time.Unix(ssElement.beginTime, 0)), mysql.TypeTimestamp, 0) + SummaryBeginTimeStr: func(reader *stmtSummaryReader, ssElement *stmtSummaryByDigestElement, _ *stmtSummaryByDigest) interface{} { + beginTime := time.Unix(ssElement.beginTime, 0) + if beginTime.Location() != reader.tz { + beginTime = beginTime.In(reader.tz) + } + return types.NewTime(types.FromGoTime(beginTime), mysql.TypeTimestamp, 0) }, - SummaryEndTimeStr: func(_ *stmtSummaryReader, ssElement *stmtSummaryByDigestElement, _ *stmtSummaryByDigest) interface{} { - return types.NewTime(types.FromGoTime(time.Unix(ssElement.endTime, 0)), mysql.TypeTimestamp, 0) + SummaryEndTimeStr: func(reader *stmtSummaryReader, ssElement *stmtSummaryByDigestElement, _ *stmtSummaryByDigest) interface{} { + endTime := time.Unix(ssElement.endTime, 0) + if endTime.Location() != reader.tz { + endTime = endTime.In(reader.tz) + } + return types.NewTime(types.FromGoTime(endTime), mysql.TypeTimestamp, 0) }, StmtTypeStr: func(_ *stmtSummaryReader, _ *stmtSummaryByDigestElement, ssbd *stmtSummaryByDigest) interface{} { return ssbd.stmtType diff --git a/util/stmtsummary/statement_summary_test.go b/util/stmtsummary/statement_summary_test.go index c883b08005c92..a84eb8799af07 100644 --- a/util/stmtsummary/statement_summary_test.go +++ b/util/stmtsummary/statement_summary_test.go @@ -758,8 +758,8 @@ func TestToDatum(t *testing.T) { reader := newStmtSummaryReaderForTest(ssMap) datums := reader.GetStmtSummaryCurrentRows() require.Equal(t, 1, len(datums)) - n := types.NewTime(types.FromGoTime(time.Unix(ssMap.beginTimeForCurInterval, 0)), mysql.TypeTimestamp, types.DefaultFsp) - e := types.NewTime(types.FromGoTime(time.Unix(ssMap.beginTimeForCurInterval+1800, 0)), mysql.TypeTimestamp, types.DefaultFsp) + n := types.NewTime(types.FromGoTime(time.Unix(ssMap.beginTimeForCurInterval, 0).In(time.UTC)), mysql.TypeTimestamp, types.DefaultFsp) + e := types.NewTime(types.FromGoTime(time.Unix(ssMap.beginTimeForCurInterval+1800, 0).In(time.UTC)), mysql.TypeTimestamp, types.DefaultFsp) f := types.NewTime(types.FromGoTime(stmtExecInfo1.StartTime), mysql.TypeTimestamp, types.DefaultFsp) stmtExecInfo1.ExecDetail.CommitDetail.Mu.Lock() expectedDatum := []interface{}{n, e, "Select", stmtExecInfo1.SchemaName, stmtExecInfo1.Digest, stmtExecInfo1.NormalizedSQL,