github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/stats/query_test.go (about) 1 package stats 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 "github.com/ydb-platform/ydb-go-genproto/protos/Ydb_TableStats" 8 ) 9 10 func TestFromQueryStats(t *testing.T) { 11 s := FromQueryStats(&Ydb_TableStats.QueryStats{ 12 QueryPhases: []*Ydb_TableStats.QueryPhaseStats{ 13 { 14 DurationUs: 10, 15 TableAccess: []*Ydb_TableStats.TableAccessStats{ 16 { 17 Name: "a", 18 Reads: &Ydb_TableStats.OperationStats{ 19 Rows: 100, 20 Bytes: 200, 21 }, 22 Updates: &Ydb_TableStats.OperationStats{ 23 Rows: 300, 24 Bytes: 400, 25 }, 26 Deletes: &Ydb_TableStats.OperationStats{ 27 Rows: 500, 28 Bytes: 600, 29 }, 30 PartitionsCount: 700, 31 }, 32 }, 33 CpuTimeUs: 20, 34 AffectedShards: 30, 35 LiteralPhase: true, 36 }, 37 { 38 DurationUs: 11, 39 TableAccess: []*Ydb_TableStats.TableAccessStats{ 40 { 41 Name: "b", 42 Reads: &Ydb_TableStats.OperationStats{ 43 Rows: 101, 44 Bytes: 201, 45 }, 46 Updates: &Ydb_TableStats.OperationStats{ 47 Rows: 301, 48 Bytes: 401, 49 }, 50 Deletes: &Ydb_TableStats.OperationStats{ 51 Rows: 501, 52 Bytes: 601, 53 }, 54 PartitionsCount: 701, 55 }, 56 }, 57 CpuTimeUs: 21, 58 AffectedShards: 31, 59 LiteralPhase: false, 60 }, 61 }, 62 Compilation: &Ydb_TableStats.CompilationStats{ 63 FromCache: true, 64 DurationUs: 123, 65 CpuTimeUs: 456, 66 }, 67 ProcessCpuTimeUs: 100, 68 QueryPlan: "plan", 69 QueryAst: "ast", 70 TotalDurationUs: 200, 71 TotalCpuTimeUs: 300, 72 }) 73 require.Equal(t, fromUs(100), s.ProcessCPUTime()) 74 require.Equal(t, fromUs(200), s.TotalDuration()) 75 require.Equal(t, fromUs(300), s.TotalCPUTime()) 76 require.Equal(t, "ast", s.QueryAST()) 77 require.Equal(t, "plan", s.QueryPlan()) 78 require.Equal(t, &CompilationStats{ 79 FromCache: true, 80 Duration: fromUs(123), 81 CPUTime: fromUs(456), 82 }, s.Compilation()) 83 phase1, ok := s.NextPhase() 84 require.True(t, ok) 85 require.True(t, phase1.IsLiteralPhase()) 86 require.Equal(t, fromUs(10), phase1.Duration()) 87 require.Equal(t, fromUs(20), phase1.CPUTime()) 88 require.Equal(t, uint64(30), phase1.AffectedShards()) 89 tableAccess1FromPhase1, ok := phase1.NextTableAccess() 90 require.True(t, ok) 91 require.Equal(t, &TableAccess{ 92 Name: "a", 93 Reads: OperationStats{ 94 Rows: 100, 95 Bytes: 200, 96 }, 97 Updates: OperationStats{ 98 Rows: 300, 99 Bytes: 400, 100 }, 101 Deletes: OperationStats{ 102 Rows: 500, 103 Bytes: 600, 104 }, 105 PartitionsCount: 700, 106 }, tableAccess1FromPhase1) 107 tableAccess2FromPhase1, ok := phase1.NextTableAccess() 108 require.False(t, ok) 109 require.Nil(t, tableAccess2FromPhase1) 110 phase2, ok := s.NextPhase() 111 require.True(t, ok) 112 require.False(t, phase2.IsLiteralPhase()) 113 require.Equal(t, fromUs(11), phase2.Duration()) 114 require.Equal(t, fromUs(21), phase2.CPUTime()) 115 require.Equal(t, uint64(31), phase2.AffectedShards()) 116 tableAccess1FromPhase2, ok := phase2.NextTableAccess() 117 require.True(t, ok) 118 require.Equal(t, &TableAccess{ 119 Name: "b", 120 Reads: OperationStats{ 121 Rows: 101, 122 Bytes: 201, 123 }, 124 Updates: OperationStats{ 125 Rows: 301, 126 Bytes: 401, 127 }, 128 Deletes: OperationStats{ 129 Rows: 501, 130 Bytes: 601, 131 }, 132 PartitionsCount: 701, 133 }, tableAccess1FromPhase2) 134 tableAccess2FromPhase2, ok := phase2.NextTableAccess() 135 require.False(t, ok) 136 require.Nil(t, tableAccess2FromPhase2) 137 }