(ctx context.Context, req *runtimev1.ColumnTopKRequest)
| 12 | ) |
| 13 | |
| 14 | func (s *Server) ColumnTopK(ctx context.Context, req *runtimev1.ColumnTopKRequest) (*runtimev1.ColumnTopKResponse, error) { |
| 15 | observability.AddRequestAttributes(ctx, |
| 16 | attribute.String("args.instance_id", req.InstanceId), |
| 17 | attribute.String("args.connector", req.Connector), |
| 18 | attribute.String("args.database", req.Database), |
| 19 | attribute.String("args.database_schema", req.DatabaseSchema), |
| 20 | attribute.String("args.table", req.TableName), |
| 21 | attribute.String("args.column", req.ColumnName), |
| 22 | attribute.Int("args.k", int(req.K)), |
| 23 | attribute.Int("args.priority", int(req.Priority)), |
| 24 | ) |
| 25 | |
| 26 | s.addInstanceRequestAttributes(ctx, req.InstanceId) |
| 27 | |
| 28 | if !auth.GetClaims(ctx, req.InstanceId).Can(runtime.ReadProfiling) { |
| 29 | return nil, ErrForbidden |
| 30 | } |
| 31 | |
| 32 | agg := "count(*)" |
| 33 | if req.Agg != "" { |
| 34 | agg = req.Agg |
| 35 | } |
| 36 | |
| 37 | k := 50 |
| 38 | if req.K != 0 { |
| 39 | k = int(req.K) |
| 40 | } |
| 41 | |
| 42 | q := &queries.ColumnTopK{ |
| 43 | Connector: req.Connector, |
| 44 | Database: req.Database, |
| 45 | DatabaseSchema: req.DatabaseSchema, |
| 46 | TableName: req.TableName, |
| 47 | ColumnName: req.ColumnName, |
| 48 | Agg: agg, |
| 49 | K: k, |
| 50 | } |
| 51 | |
| 52 | err := s.runtime.Query(ctx, req.InstanceId, q, int(req.Priority)) |
| 53 | if err != nil { |
| 54 | return nil, err |
| 55 | } |
| 56 | |
| 57 | return &runtimev1.ColumnTopKResponse{ |
| 58 | CategoricalSummary: &runtimev1.CategoricalSummary{ |
| 59 | Case: &runtimev1.CategoricalSummary_TopK{ |
| 60 | TopK: q.Result, |
| 61 | }, |
| 62 | }, |
| 63 | }, nil |
| 64 | } |
| 65 | |
| 66 | func (s *Server) ColumnNullCount(ctx context.Context, req *runtimev1.ColumnNullCountRequest) (*runtimev1.ColumnNullCountResponse, error) { |
| 67 | observability.AddRequestAttributes(ctx, |
no test coverage detected