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  }