From 5ca36b0502fe5bf969fadbf1a7a38c28109ba578 Mon Sep 17 00:00:00 2001 From: Michael McGuinness Date: Wed, 15 Jan 2025 12:19:49 +0000 Subject: [PATCH] Merged in feature/listtypes (pull request #23) Feature/listtypes * started * cleanuplist * someunittestfixes * removemostflakiness --- api/api/query.go | 9 +- api/queue/queryRunner_test.go | 5 +- api/serviceInterfaces/main.pb.go | 241 +++++++++--------- internal/database/connection.go | 26 +- internal/database/connection_test.go | 14 - internal/database/migrations_test.go | 4 +- internal/database/repository/collector.sql.go | 37 ++- internal/database/repository/models.go | 119 +++++---- internal/database/repository/query.sql.go | 64 +++-- internal/database/repository/query_test.go | 68 +++-- internal/database/repository/result.sql.go | 53 ++-- internal/database/repository/result_test.go | 8 +- internal/document/service.go | 4 +- internal/document/sync_test.go | 11 +- internal/jsonExtractor/service.go | 2 +- internal/query/create.go | 4 +- internal/query/get.go | 16 +- internal/query/get_test.go | 26 ++ internal/query/list.go | 15 +- internal/query/list_test.go | 41 +++ internal/queryProcessor/parse.go | 16 +- internal/queryProcessor/parse_test.go | 22 +- internal/queryQueue/create.go | 2 +- internal/queryQueue/create_test.go | 3 +- internal/queryQueue/execute.go | 2 +- internal/queryQueue/execute_test.go | 2 +- internal/queryQueue/service_test.go | 3 +- internal/result/service.go | 2 +- internal/server/server_test.go | 4 +- internal/test/container.go | 7 +- internal/test/database.go | 14 +- internal/test/database_test.go | 6 +- internal/test/queue.go | 6 +- internal/test/queuecontainer_test.go | 6 + scripts/database.yml | 2 - serviceInterfaces/main.proto | 4 +- sqlc.yml | 7 + test/queryService/listqueries_test.go | 23 +- 38 files changed, 532 insertions(+), 366 deletions(-) diff --git a/api/api/query.go b/api/api/query.go index c1ea099a..194c0d44 100644 --- a/api/api/query.go +++ b/api/api/query.go @@ -29,14 +29,7 @@ func NewQueryController(querySvc query.Service, validator *validator.Validate) * } func (s *QueryController) List(ctx context.Context, req *serviceinterfaces.QueryFilter) (*serviceinterfaces.Queries, error) { - types := make([]queryprocessor.Type, len(req.GetTypes())) - for index, t := range req.GetTypes() { - types[index] = queryprocessor.Type(ParseSpecQueryType(t)) - } - - filters := query.ListFilters{ - Types: types, - } + filters := query.ListFilters{} queries, err := s.query.List(ctx, filters) if err != nil { diff --git a/api/queue/queryRunner_test.go b/api/queue/queryRunner_test.go index ea95bdc0..ae524ded 100644 --- a/api/queue/queryRunner_test.go +++ b/api/queue/queryRunner_test.go @@ -62,6 +62,7 @@ func TestQueryRunner(t *testing.T) { URL: qCfg.URL, Client: qCfg.Client, } + qV := int32(1) pool.ExpectQuery("name: GetCollectorFromJobID :one").WithArgs(database.MustToDBUUID(doc.JobID)). WillReturnRows( @@ -71,12 +72,12 @@ func TestQueryRunner(t *testing.T) { pool.ExpectQuery("name: ListResultsByDocumentID :many").WithArgs(database.MustToDBUUID(doc.ID), minCleanVersion, minTextVersion). WillReturnRows( pgxmock.NewRows([]string{"id", "queryId", "queryVersion"}). - AddRow(collectorID, queryID, int32(1)), + AddRow(collectorID, queryID, qV), ) pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(collectorID). WillReturnRows( pgxmock.NewRows([]string{"collectorId", "queryId", "type", "queryVersion", "requiredIds"}). - AddRow(collectorID, queryID, repository.NullQuerytype{Querytype: repository.QuerytypeContextFull, Valid: true}, pgtype.Int4{Int32: int32(1), Valid: true}, []pgtype.UUID{}), + AddRow(collectorID, queryID, repository.NullQuerytype{Querytype: repository.QuerytypeContextFull, Valid: true}, &qV, []pgtype.UUID{}), ) err = runner.Process(ctx, cfg, msg) diff --git a/api/serviceInterfaces/main.pb.go b/api/serviceInterfaces/main.pb.go index 1fb815dc..664a0ba4 100644 --- a/api/serviceInterfaces/main.pb.go +++ b/api/serviceInterfaces/main.pb.go @@ -265,8 +265,6 @@ type QueryFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Types []QueryType `protobuf:"varint,1,rep,packed,name=types,proto3,enum=queryorchestration.QueryType" json:"types,omitempty"` } func (x *QueryFilter) Reset() { @@ -299,13 +297,6 @@ func (*QueryFilter) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{3} } -func (x *QueryFilter) GetTypes() []QueryType { - if x != nil { - return x.Types - } - return nil -} - type QueryCreate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -701,100 +692,97 @@ var file_main_proto_rawDesc = []byte{ 0x69, 0x67, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x42, 0x0a, 0x0b, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x05, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, - 0x93, 0x01, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, 0x01, 0x01, 0x12, - 0x29, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xaf, 0x01, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, - 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x0d, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x29, - 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x07, 0x51, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, - 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x0e, 0x0a, 0x0c, 0x4a, 0x6f, 0x62, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x14, 0x0a, 0x12, 0x4a, 0x6f, 0x62, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x22, 0x14, 0x0a, - 0x12, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x22, 0x1b, 0x0a, 0x09, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x2a, 0x63, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, - 0x0a, 0x16, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x51, 0x55, - 0x45, 0x52, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x45, 0x58, - 0x54, 0x52, 0x41, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x51, 0x55, 0x45, - 0x52, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x5f, - 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x02, 0x32, 0xbb, 0x03, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x1f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x1a, 0x1b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, - 0x03, 0x47, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, - 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x1a, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, - 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x0d, 0x0a, 0x0b, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x93, 0x01, 0x0a, 0x0b, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x09, 0x44, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x53, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf8, 0x01, 0x0a, 0x13, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, - 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x62, 0x43, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x1d, + 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x51, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x22, 0xaf, 0x01, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, + 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, + 0x11, 0x0a, 0x0f, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x07, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x33, 0x0a, + 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x48, 0x0a, - 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x62, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1d, - 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x20, 0x2e, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, - 0x5c, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x4b, 0x0a, 0x07, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x71, 0x75, + 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x71, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x22, 0x0e, 0x0a, 0x0c, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x22, 0x14, 0x0a, 0x12, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x4a, 0x6f, 0x62, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x0f, + 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, + 0x1b, 0x0a, 0x09, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x2a, 0x63, 0x0a, 0x09, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x51, 0x55, 0x45, + 0x52, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x54, 0x52, 0x41, 0x43, 0x54, + 0x4f, 0x52, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, + 0x02, 0x32, 0xbb, 0x03, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x1b, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x1a, 0x1d, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, + 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x15, 0x5a, - 0x13, 0x2e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x06, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x1a, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, + 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, + 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x53, 0x0a, 0x04, 0x54, 0x65, + 0x73, 0x74, 0x12, 0x24, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0xf8, 0x01, 0x0a, 0x13, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x26, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x26, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x12, 0x46, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x20, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x6f, + 0x62, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32, 0x5c, 0x0a, 0x0d, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x07, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6f, 0x72, + 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x1a, 0x1d, 0x2e, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x15, 0x5a, 0x13, 0x2e, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -829,34 +817,33 @@ var file_main_proto_goTypes = []any{ } var file_main_proto_depIdxs = []int32{ 0, // 0: queryorchestration.Query.type:type_name -> queryorchestration.QueryType - 0, // 1: queryorchestration.QueryFilter.types:type_name -> queryorchestration.QueryType - 0, // 2: queryorchestration.QueryCreate.type:type_name -> queryorchestration.QueryType - 3, // 3: queryorchestration.Queries.queries:type_name -> queryorchestration.Query - 4, // 4: queryorchestration.QueryService.List:input_type -> queryorchestration.QueryFilter - 12, // 5: queryorchestration.QueryService.Get:input_type -> queryorchestration.IdMessage - 5, // 6: queryorchestration.QueryService.Create:input_type -> queryorchestration.QueryCreate - 6, // 7: queryorchestration.QueryService.Update:input_type -> queryorchestration.QueryUpdate - 12, // 8: queryorchestration.QueryService.Deprecate:input_type -> queryorchestration.IdMessage - 1, // 9: queryorchestration.QueryService.Test:input_type -> queryorchestration.QueryTestRequest - 9, // 10: queryorchestration.JobCollectorService.Create:input_type -> queryorchestration.JobCollectorCreate - 10, // 11: queryorchestration.JobCollectorService.Update:input_type -> queryorchestration.JobCollectorUpdate - 12, // 12: queryorchestration.JobCollectorService.Get:input_type -> queryorchestration.IdMessage - 11, // 13: queryorchestration.ExportService.Trigger:input_type -> queryorchestration.ExportTrigger - 7, // 14: queryorchestration.QueryService.List:output_type -> queryorchestration.Queries - 3, // 15: queryorchestration.QueryService.Get:output_type -> queryorchestration.Query - 12, // 16: queryorchestration.QueryService.Create:output_type -> queryorchestration.IdMessage - 13, // 17: queryorchestration.QueryService.Update:output_type -> google.protobuf.Empty - 13, // 18: queryorchestration.QueryService.Deprecate:output_type -> google.protobuf.Empty - 2, // 19: queryorchestration.QueryService.Test:output_type -> queryorchestration.QueryTestResponse - 12, // 20: queryorchestration.JobCollectorService.Create:output_type -> queryorchestration.IdMessage - 13, // 21: queryorchestration.JobCollectorService.Update:output_type -> google.protobuf.Empty - 8, // 22: queryorchestration.JobCollectorService.Get:output_type -> queryorchestration.JobCollector - 12, // 23: queryorchestration.ExportService.Trigger:output_type -> queryorchestration.IdMessage - 14, // [14:24] is the sub-list for method output_type - 4, // [4:14] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 0, // 1: queryorchestration.QueryCreate.type:type_name -> queryorchestration.QueryType + 3, // 2: queryorchestration.Queries.queries:type_name -> queryorchestration.Query + 4, // 3: queryorchestration.QueryService.List:input_type -> queryorchestration.QueryFilter + 12, // 4: queryorchestration.QueryService.Get:input_type -> queryorchestration.IdMessage + 5, // 5: queryorchestration.QueryService.Create:input_type -> queryorchestration.QueryCreate + 6, // 6: queryorchestration.QueryService.Update:input_type -> queryorchestration.QueryUpdate + 12, // 7: queryorchestration.QueryService.Deprecate:input_type -> queryorchestration.IdMessage + 1, // 8: queryorchestration.QueryService.Test:input_type -> queryorchestration.QueryTestRequest + 9, // 9: queryorchestration.JobCollectorService.Create:input_type -> queryorchestration.JobCollectorCreate + 10, // 10: queryorchestration.JobCollectorService.Update:input_type -> queryorchestration.JobCollectorUpdate + 12, // 11: queryorchestration.JobCollectorService.Get:input_type -> queryorchestration.IdMessage + 11, // 12: queryorchestration.ExportService.Trigger:input_type -> queryorchestration.ExportTrigger + 7, // 13: queryorchestration.QueryService.List:output_type -> queryorchestration.Queries + 3, // 14: queryorchestration.QueryService.Get:output_type -> queryorchestration.Query + 12, // 15: queryorchestration.QueryService.Create:output_type -> queryorchestration.IdMessage + 13, // 16: queryorchestration.QueryService.Update:output_type -> google.protobuf.Empty + 13, // 17: queryorchestration.QueryService.Deprecate:output_type -> google.protobuf.Empty + 2, // 18: queryorchestration.QueryService.Test:output_type -> queryorchestration.QueryTestResponse + 12, // 19: queryorchestration.JobCollectorService.Create:output_type -> queryorchestration.IdMessage + 13, // 20: queryorchestration.JobCollectorService.Update:output_type -> google.protobuf.Empty + 8, // 21: queryorchestration.JobCollectorService.Get:output_type -> queryorchestration.JobCollector + 12, // 22: queryorchestration.ExportService.Trigger:output_type -> queryorchestration.IdMessage + 13, // [13:23] is the sub-list for method output_type + 3, // [3:13] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_main_proto_init() } diff --git a/internal/database/connection.go b/internal/database/connection.go index bb66095d..40ba6a70 100644 --- a/internal/database/connection.go +++ b/internal/database/connection.go @@ -71,6 +71,21 @@ func getPoolConfig() (*pgxpool.Config, error) { return nil, err } + enumTypes := []string{ + "querytype", + } + + config.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error { + for _, enumName := range enumTypes { + dt, err := conn.LoadType(ctx, enumName) + if err != nil { + return fmt.Errorf("failed to load suitable enum type: %w", err) + } + conn.TypeMap().RegisterType(dt) + } + return nil + } + return config, nil } @@ -93,14 +108,3 @@ func GetDBPool(ctx context.Context) *pgxpool.Pool { return pool } - -func GetDBConn(ctx context.Context) *pgx.Conn { - config := mustGetURI() - - conn, err := pgx.Connect(ctx, config.String()) - if err != nil { - log.Panicf("Unable to connect to database: %v\n", err) - } - - return conn -} diff --git a/internal/database/connection_test.go b/internal/database/connection_test.go index 780b7da6..f7f0ddb7 100644 --- a/internal/database/connection_test.go +++ b/internal/database/connection_test.go @@ -20,20 +20,6 @@ func TestDBConn(t *testing.T) { }) defer cleanup() - conn := database.GetDBConn(ctx) - assert.NotNil(t, conn) - pool := database.GetDBPool(ctx) assert.NotNil(t, pool) } - -func TestDBConnNoDB(t *testing.T) { - ctx := context.Background() - t.Setenv("DB_USER", "user") - t.Setenv("DB_PASS", "pass") - t.Setenv("DB_HOST", "host") - t.Setenv("DB_PORT", "5432") - t.Setenv("DB_NAME", "name") - - assert.Panics(t, func() { database.GetDBConn(ctx) }) -} diff --git a/internal/database/migrations_test.go b/internal/database/migrations_test.go index 57e77fc8..67aba862 100644 --- a/internal/database/migrations_test.go +++ b/internal/database/migrations_test.go @@ -14,9 +14,7 @@ import ( func TestRunMigrations(t *testing.T) { ctx := context.Background() - _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ - NoPool: true, - }) + _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{}) defer cleanup() database.RunMigrations(ctx, &database.MigrationConfig{ diff --git a/internal/database/repository/collector.sql.go b/internal/database/repository/collector.sql.go index f85da2ac..3eaad6f6 100644 --- a/internal/database/repository/collector.sql.go +++ b/internal/database/repository/collector.sql.go @@ -16,13 +16,16 @@ SELECT id, jobId, minCleanVersion, minTextVersion FROM collectors WHERE jobId = ` type GetCollectorFromJobIDRow struct { - ID pgtype.UUID - Jobid pgtype.UUID - Mincleanversion int32 - Mintextversion int32 + ID pgtype.UUID `db:"id"` + Jobid pgtype.UUID `db:"jobid"` + Mincleanversion int32 `db:"mincleanversion"` + Mintextversion int32 `db:"mintextversion"` } -func (q *Queries) GetCollectorFromJobID(ctx context.Context, jobid pgtype.UUID) (GetCollectorFromJobIDRow, error) { +// GetCollectorFromJobID +// +// SELECT id, jobId, minCleanVersion, minTextVersion FROM collectors WHERE jobId = $1 LIMIT 1 +func (q *Queries) GetCollectorFromJobID(ctx context.Context, jobid pgtype.UUID) (*GetCollectorFromJobIDRow, error) { row := q.db.QueryRow(ctx, getCollectorFromJobID, jobid) var i GetCollectorFromJobIDRow err := row.Scan( @@ -31,7 +34,7 @@ func (q *Queries) GetCollectorFromJobID(ctx context.Context, jobid pgtype.UUID) &i.Mincleanversion, &i.Mintextversion, ) - return i, err + return &i, err } const getCollectorQueries = `-- name: GetCollectorQueries :many @@ -42,20 +45,26 @@ SELECT collectorId, queryId, type, queryVersion, ARRAY_AGG(requiredQueryId) AS r ` type GetCollectorQueriesRow struct { - Collectorid pgtype.UUID - Queryid pgtype.UUID - Type NullQuerytype - Queryversion pgtype.Int4 - Requiredids []pgtype.UUID + Collectorid pgtype.UUID `db:"collectorid"` + Queryid pgtype.UUID `db:"queryid"` + Type NullQuerytype `db:"type"` + Queryversion *int32 `db:"queryversion"` + Requiredids []pgtype.UUID `db:"requiredids"` } -func (q *Queries) GetCollectorQueries(ctx context.Context, collectorid pgtype.UUID) ([]GetCollectorQueriesRow, error) { +// GetCollectorQueries +// +// SELECT collectorId, queryId, type, queryVersion, ARRAY_AGG(requiredQueryId) AS requiredIds +// FROM collectorQueryDependencyTree +// WHERE collectorId = $1 +// GROUP BY queryId, collectorId, type, queryVersion +func (q *Queries) GetCollectorQueries(ctx context.Context, collectorid pgtype.UUID) ([]*GetCollectorQueriesRow, error) { rows, err := q.db.Query(ctx, getCollectorQueries, collectorid) if err != nil { return nil, err } defer rows.Close() - var items []GetCollectorQueriesRow + items := []*GetCollectorQueriesRow{} for rows.Next() { var i GetCollectorQueriesRow if err := rows.Scan( @@ -67,7 +76,7 @@ func (q *Queries) GetCollectorQueries(ctx context.Context, collectorid pgtype.UU ); err != nil { return nil, err } - items = append(items, i) + items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err diff --git a/internal/database/repository/models.go b/internal/database/repository/models.go index c7b8cdeb..4bd60a38 100644 --- a/internal/database/repository/models.go +++ b/internal/database/repository/models.go @@ -53,90 +53,99 @@ func (ns NullQuerytype) Value() (driver.Value, error) { return string(ns.Querytype), nil } +func (e Querytype) Valid() bool { + switch e { + case QuerytypeContextFull, + QuerytypeJsonExtractor: + return true + } + return false +} + type Activecollectorquery struct { - Collectorid pgtype.UUID - Activeversion int32 - Queryid pgtype.UUID + Collectorid pgtype.UUID `db:"collectorid"` + Activeversion int32 `db:"activeversion"` + Queryid pgtype.UUID `db:"queryid"` } type Activequeryrequirement struct { - ID pgtype.UUID - Type Querytype - Activeversion int32 - Requiredqueryid pgtype.UUID + ID pgtype.UUID `db:"id"` + Type Querytype `db:"type"` + Activeversion int32 `db:"activeversion"` + Requiredqueryid pgtype.UUID `db:"requiredqueryid"` } type Collector struct { - ID pgtype.UUID - Jobid pgtype.UUID - Mincleanversion int32 - Mintextversion int32 - Latestversion int32 - Activeversion int32 + ID pgtype.UUID `db:"id"` + Jobid pgtype.UUID `db:"jobid"` + Mincleanversion int32 `db:"mincleanversion"` + Mintextversion int32 `db:"mintextversion"` + Latestversion int32 `db:"latestversion"` + Activeversion int32 `db:"activeversion"` } type Collectorquery struct { - ID pgtype.UUID - Collectorid pgtype.UUID - Name string - Queryid pgtype.UUID - Addedversion int32 - Removedversion pgtype.Int4 + ID pgtype.UUID `db:"id"` + Collectorid pgtype.UUID `db:"collectorid"` + Name string `db:"name"` + Queryid pgtype.UUID `db:"queryid"` + Addedversion int32 `db:"addedversion"` + Removedversion *int32 `db:"removedversion"` } type Collectorquerydependencytree struct { - Collectorid pgtype.UUID - ID pgtype.UUID - Type Querytype - Requiredqueryid pgtype.UUID - Queryversion int32 + Collectorid pgtype.UUID `db:"collectorid"` + ID pgtype.UUID `db:"id"` + Type Querytype `db:"type"` + Requiredqueryid pgtype.UUID `db:"requiredqueryid"` + Queryversion int32 `db:"queryversion"` } type Fullactivequery struct { - ID pgtype.UUID - Type Querytype - Activeversion int32 - Latestversion int32 - Config []byte - Requiredids []pgtype.UUID + ID pgtype.UUID `db:"id"` + Type Querytype `db:"type"` + Activeversion int32 `db:"activeversion"` + Latestversion int32 `db:"latestversion"` + Config []byte `db:"config"` + Requiredids []pgtype.UUID `db:"requiredids"` } type Query struct { - ID pgtype.UUID - Latestversion int32 - Activeversion int32 - Type Querytype + ID pgtype.UUID `db:"id"` + Latestversion int32 `db:"latestversion"` + Activeversion int32 `db:"activeversion"` + Type Querytype `db:"type"` } type Queryconfig struct { - ID pgtype.UUID - Queryid pgtype.UUID - Config []byte - Addedversion int32 - Removedversion pgtype.Int4 + ID pgtype.UUID `db:"id"` + Queryid pgtype.UUID `db:"queryid"` + Config []byte `db:"config"` + Addedversion int32 `db:"addedversion"` + Removedversion *int32 `db:"removedversion"` } type Querydeprecation struct { - ID pgtype.UUID - Queryid pgtype.UUID - Time pgtype.Timestamp - Removedat pgtype.Timestamp + ID pgtype.UUID `db:"id"` + Queryid pgtype.UUID `db:"queryid"` + Time pgtype.Timestamp `db:"time"` + Removedat pgtype.Timestamp `db:"removedat"` } type Requiredquery struct { - ID pgtype.UUID - Queryid pgtype.UUID - Requiredqueryid pgtype.UUID - Addedversion int32 - Removedversion pgtype.Int4 + ID pgtype.UUID `db:"id"` + Queryid pgtype.UUID `db:"queryid"` + Requiredqueryid pgtype.UUID `db:"requiredqueryid"` + Addedversion int32 `db:"addedversion"` + Removedversion *int32 `db:"removedversion"` } type Result struct { - ID pgtype.UUID - Queryid pgtype.UUID - Documentid pgtype.UUID - Value string - Cleanversion int32 - Textversion int32 - Queryversion int32 + ID pgtype.UUID `db:"id"` + Queryid pgtype.UUID `db:"queryid"` + Documentid pgtype.UUID `db:"documentid"` + Value string `db:"value"` + Cleanversion int32 `db:"cleanversion"` + Textversion int32 `db:"textversion"` + Queryversion int32 `db:"queryversion"` } diff --git a/internal/database/repository/query.sql.go b/internal/database/repository/query.sql.go index e9445c64..ab2afdb5 100644 --- a/internal/database/repository/query.sql.go +++ b/internal/database/repository/query.sql.go @@ -15,6 +15,9 @@ const createQuery = `-- name: CreateQuery :one INSERT INTO queries (type) VALUES ($1) RETURNING id ` +// CreateQuery +// +// INSERT INTO queries (type) VALUES ($1) RETURNING id func (q *Queries) CreateQuery(ctx context.Context, type_ Querytype) (pgtype.UUID, error) { row := q.db.QueryRow(ctx, createQuery, type_) var id pgtype.UUID @@ -27,12 +30,15 @@ INSERT INTO queryConfigs (queryId, config, addedVersion) VALUES ($1, $2, $3) ` type CreateQueryConfigParams struct { - Queryid pgtype.UUID - Config []byte - Addedversion int32 + Queryid pgtype.UUID `db:"queryid"` + Config []byte `db:"config"` + Addedversion int32 `db:"addedversion"` } -func (q *Queries) CreateQueryConfig(ctx context.Context, arg CreateQueryConfigParams) error { +// CreateQueryConfig +// +// INSERT INTO queryConfigs (queryId, config, addedVersion) VALUES ($1, $2, $3) +func (q *Queries) CreateQueryConfig(ctx context.Context, arg *CreateQueryConfigParams) error { _, err := q.db.Exec(ctx, createQueryConfig, arg.Queryid, arg.Config, arg.Addedversion) return err } @@ -42,12 +48,15 @@ INSERT INTO requiredQueries (queryId, requiredQueryId, addedVersion) VALUES ($1, ` type CreateRequiredQueryParams struct { - Queryid pgtype.UUID - Requiredqueryid pgtype.UUID - Addedversion int32 + Queryid pgtype.UUID `db:"queryid"` + Requiredqueryid pgtype.UUID `db:"requiredqueryid"` + Addedversion int32 `db:"addedversion"` } -func (q *Queries) CreateRequiredQuery(ctx context.Context, arg CreateRequiredQueryParams) error { +// CreateRequiredQuery +// +// INSERT INTO requiredQueries (queryId, requiredQueryId, addedVersion) VALUES ($1, $2, $3) +func (q *Queries) CreateRequiredQuery(ctx context.Context, arg *CreateRequiredQueryParams) error { _, err := q.db.Exec(ctx, createRequiredQuery, arg.Queryid, arg.Requiredqueryid, arg.Addedversion) return err } @@ -56,6 +65,9 @@ const deprecateQuery = `-- name: DeprecateQuery :exec INSERT INTO queryDeprecations (queryId) VALUES ($1) ` +// DeprecateQuery +// +// INSERT INTO queryDeprecations (queryId) VALUES ($1) func (q *Queries) DeprecateQuery(ctx context.Context, queryid pgtype.UUID) error { _, err := q.db.Exec(ctx, deprecateQuery, queryid) return err @@ -65,7 +77,10 @@ const getQuery = `-- name: GetQuery :one SELECT id, type, activeVersion, latestVersion, config, requiredIds FROM fullActiveQueries WHERE id = $1 ` -func (q *Queries) GetQuery(ctx context.Context, id pgtype.UUID) (Fullactivequery, error) { +// GetQuery +// +// SELECT id, type, activeVersion, latestVersion, config, requiredIds FROM fullActiveQueries WHERE id = $1 +func (q *Queries) GetQuery(ctx context.Context, id pgtype.UUID) (*Fullactivequery, error) { row := q.db.QueryRow(ctx, getQuery, id) var i Fullactivequery err := row.Scan( @@ -76,7 +91,7 @@ func (q *Queries) GetQuery(ctx context.Context, id pgtype.UUID) (Fullactivequery &i.Config, &i.Requiredids, ) - return i, err + return &i, err } const getQueryConfig = `-- name: GetQueryConfig :one @@ -84,20 +99,23 @@ SELECT id, config FROM queryConfigs where queryId = $1 and addedVersion >= $2 an ` type GetQueryConfigParams struct { - Queryid pgtype.UUID - Addedversion int32 + Queryid pgtype.UUID `db:"queryid"` + Addedversion int32 `db:"addedversion"` } type GetQueryConfigRow struct { - ID pgtype.UUID - Config []byte + ID pgtype.UUID `db:"id"` + Config []byte `db:"config"` } -func (q *Queries) GetQueryConfig(ctx context.Context, arg GetQueryConfigParams) (GetQueryConfigRow, error) { +// GetQueryConfig +// +// SELECT id, config FROM queryConfigs where queryId = $1 and addedVersion >= $2 and COALESCE(removedVersion, $2 - 1) < $2 +func (q *Queries) GetQueryConfig(ctx context.Context, arg *GetQueryConfigParams) (*GetQueryConfigRow, error) { row := q.db.QueryRow(ctx, getQueryConfig, arg.Queryid, arg.Addedversion) var i GetQueryConfigRow err := row.Scan(&i.ID, &i.Config) - return i, err + return &i, err } const isQueryDeprecated = `-- name: IsQueryDeprecated :one @@ -106,6 +124,11 @@ SELECT EXISTS ( ) ` +// IsQueryDeprecated +// +// SELECT EXISTS ( +// SELECT 1 FROM queryDeprecations where queryId = $1 and removedAt is null LIMIT 1 +// ) func (q *Queries) IsQueryDeprecated(ctx context.Context, queryid pgtype.UUID) (bool, error) { row := q.db.QueryRow(ctx, isQueryDeprecated, queryid) var exists bool @@ -117,13 +140,16 @@ const listQueries = `-- name: ListQueries :many SELECT id, type, activeVersion, latestVersion, config, requiredIds FROM fullActiveQueries ` -func (q *Queries) ListQueries(ctx context.Context) ([]Fullactivequery, error) { +// ListQueries +// +// SELECT id, type, activeVersion, latestVersion, config, requiredIds FROM fullActiveQueries +func (q *Queries) ListQueries(ctx context.Context) ([]*Fullactivequery, error) { rows, err := q.db.Query(ctx, listQueries) if err != nil { return nil, err } defer rows.Close() - var items []Fullactivequery + items := []*Fullactivequery{} for rows.Next() { var i Fullactivequery if err := rows.Scan( @@ -136,7 +162,7 @@ func (q *Queries) ListQueries(ctx context.Context) ([]Fullactivequery, error) { ); err != nil { return nil, err } - items = append(items, i) + items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err diff --git a/internal/database/repository/query_test.go b/internal/database/repository/query_test.go index 659fdb6e..369b166c 100644 --- a/internal/database/repository/query_test.go +++ b/internal/database/repository/query_test.go @@ -2,7 +2,6 @@ package repository_test import ( "context" - "log" "os" "path" "queryorchestration/internal/database" @@ -35,14 +34,14 @@ func TestQueries(t *testing.T) { jsonConfig := []byte("{\"path\": \"example_path\"}") - err = queries.CreateRequiredQuery(ctx, repository.CreateRequiredQueryParams{ + err = queries.CreateRequiredQuery(ctx, &repository.CreateRequiredQueryParams{ Queryid: jsonQueryID, Requiredqueryid: contextQueryID, Addedversion: 1, }) assert.Nil(t, err) - err = queries.CreateQueryConfig(ctx, repository.CreateQueryConfigParams{ + err = queries.CreateQueryConfig(ctx, &repository.CreateQueryConfigParams{ Queryid: jsonQueryID, Config: jsonConfig, Addedversion: 1, @@ -58,34 +57,15 @@ func TestQueries(t *testing.T) { Latestversion: 1, Config: jsonConfig, Requiredids: []pgtype.UUID{contextQueryID}, - }, jsonQuery) + }, *jsonQuery) - jsonQueryConfig, err := queries.GetQueryConfig(ctx, repository.GetQueryConfigParams{ + jsonQueryConfig, err := queries.GetQueryConfig(ctx, &repository.GetQueryConfigParams{ Queryid: jsonQueryID, Addedversion: jsonQuery.Activeversion, }) assert.Nil(t, err) assert.Equal(t, jsonConfig, jsonQueryConfig.Config) - qs, err := queries.ListQueries(ctx) - assert.Nil(t, err) - assert.Len(t, qs, 2) - log.Print(qs) - assert.ElementsMatch(t, []repository.Fullactivequery{ - {ID: jsonQueryID, - Type: repository.QuerytypeJsonExtractor, - Activeversion: 1, - Latestversion: 1, - Config: jsonConfig, - Requiredids: []pgtype.UUID{contextQueryID}}, - {ID: contextQueryID, - Type: repository.QuerytypeContextFull, - Activeversion: 1, - Latestversion: 1, - Config: nil, - Requiredids: []pgtype.UUID{{}}}, - }, qs) - isDeprecated, err := queries.IsQueryDeprecated(ctx, jsonQueryID) assert.Nil(t, err) assert.False(t, isDeprecated) @@ -97,3 +77,43 @@ func TestQueries(t *testing.T) { assert.Nil(t, err) assert.True(t, isDeprecated) } + +func TestQueriesList(t *testing.T) { + ctx := context.Background() + + db, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ + Migrations: &database.MigrationConfig{ + BasePath: "../../..", + }}) + defer cleanup() + + queries := repository.New(db.Pool) + + contextQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeContextFull)) + assert.Nil(t, err) + + jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) + assert.Nil(t, err) + + qs, err := queries.ListQueries(ctx) + assert.Nil(t, err) + assert.Len(t, qs, 2) + assert.ElementsMatch(t, []*repository.Fullactivequery{ + { + ID: jsonQueryID, + Type: repository.QuerytypeJsonExtractor, + Activeversion: 1, + Latestversion: 1, + Config: nil, + Requiredids: []pgtype.UUID{{}}, + }, + { + ID: contextQueryID, + Type: repository.QuerytypeContextFull, + Activeversion: 1, + Latestversion: 1, + Config: nil, + Requiredids: []pgtype.UUID{{}}, + }, + }, qs) +} diff --git a/internal/database/repository/result.sql.go b/internal/database/repository/result.sql.go index 438f902c..4472c327 100644 --- a/internal/database/repository/result.sql.go +++ b/internal/database/repository/result.sql.go @@ -16,24 +16,27 @@ SELECT id, queryId, value FROM results where id = ANY($1) ` type ListResultValuesByIDRow struct { - ID pgtype.UUID - Queryid pgtype.UUID - Value string + ID pgtype.UUID `db:"id"` + Queryid pgtype.UUID `db:"queryid"` + Value string `db:"value"` } -func (q *Queries) ListResultValuesByID(ctx context.Context, id []pgtype.UUID) ([]ListResultValuesByIDRow, error) { +// ListResultValuesByID +// +// SELECT id, queryId, value FROM results where id = ANY($1) +func (q *Queries) ListResultValuesByID(ctx context.Context, id []pgtype.UUID) ([]*ListResultValuesByIDRow, error) { rows, err := q.db.Query(ctx, listResultValuesByID, id) if err != nil { return nil, err } defer rows.Close() - var items []ListResultValuesByIDRow + items := []*ListResultValuesByIDRow{} for rows.Next() { var i ListResultValuesByIDRow if err := rows.Scan(&i.ID, &i.Queryid, &i.Value); err != nil { return nil, err } - items = append(items, i) + items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err @@ -46,30 +49,33 @@ SELECT id, queryId, queryVersion FROM results where documentId = $1 and cleanVer ` type ListResultsByDocumentIDParams struct { - Documentid pgtype.UUID - Cleanversion int32 - Textversion int32 + Documentid pgtype.UUID `db:"documentid"` + Cleanversion int32 `db:"cleanversion"` + Textversion int32 `db:"textversion"` } type ListResultsByDocumentIDRow struct { - ID pgtype.UUID - Queryid pgtype.UUID - Queryversion int32 + ID pgtype.UUID `db:"id"` + Queryid pgtype.UUID `db:"queryid"` + Queryversion int32 `db:"queryversion"` } -func (q *Queries) ListResultsByDocumentID(ctx context.Context, arg ListResultsByDocumentIDParams) ([]ListResultsByDocumentIDRow, error) { +// ListResultsByDocumentID +// +// SELECT id, queryId, queryVersion FROM results where documentId = $1 and cleanVersion >= $2 and textVersion >= $3 +func (q *Queries) ListResultsByDocumentID(ctx context.Context, arg *ListResultsByDocumentIDParams) ([]*ListResultsByDocumentIDRow, error) { rows, err := q.db.Query(ctx, listResultsByDocumentID, arg.Documentid, arg.Cleanversion, arg.Textversion) if err != nil { return nil, err } defer rows.Close() - var items []ListResultsByDocumentIDRow + items := []*ListResultsByDocumentIDRow{} for rows.Next() { var i ListResultsByDocumentIDRow if err := rows.Scan(&i.ID, &i.Queryid, &i.Queryversion); err != nil { return nil, err } - items = append(items, i) + items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err @@ -82,15 +88,18 @@ INSERT INTO results (queryId, documentId, value, cleanVersion, textVersion, quer ` type SetResultParams struct { - Queryid pgtype.UUID - Documentid pgtype.UUID - Value string - Cleanversion int32 - Textversion int32 - Queryversion int32 + Queryid pgtype.UUID `db:"queryid"` + Documentid pgtype.UUID `db:"documentid"` + Value string `db:"value"` + Cleanversion int32 `db:"cleanversion"` + Textversion int32 `db:"textversion"` + Queryversion int32 `db:"queryversion"` } -func (q *Queries) SetResult(ctx context.Context, arg SetResultParams) (pgtype.UUID, error) { +// SetResult +// +// INSERT INTO results (queryId, documentId, value, cleanVersion, textVersion, queryVersion) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id +func (q *Queries) SetResult(ctx context.Context, arg *SetResultParams) (pgtype.UUID, error) { row := q.db.QueryRow(ctx, setResult, arg.Queryid, arg.Documentid, diff --git a/internal/database/repository/result_test.go b/internal/database/repository/result_test.go index 152e3d7a..9bec883c 100644 --- a/internal/database/repository/result_test.go +++ b/internal/database/repository/result_test.go @@ -37,7 +37,7 @@ func TestResults(t *testing.T) { textVersion := int32(1) jsonResultValue := "example_value" - jsonResultID, err := queries.SetResult(ctx, repository.SetResultParams{ + jsonResultID, err := queries.SetResult(ctx, &repository.SetResultParams{ Queryid: jsonQueryID, Documentid: documentID, Value: jsonResultValue, @@ -48,14 +48,14 @@ func TestResults(t *testing.T) { assert.Nil(t, err) assert.True(t, jsonResultID.Valid) - resultsByDoc, err := queries.ListResultsByDocumentID(ctx, repository.ListResultsByDocumentIDParams{ + resultsByDoc, err := queries.ListResultsByDocumentID(ctx, &repository.ListResultsByDocumentIDParams{ Documentid: documentID, Cleanversion: cleanVersion, Textversion: textVersion, }) assert.Nil(t, err) assert.Len(t, resultsByDoc, 1) - assert.ElementsMatch(t, []repository.ListResultsByDocumentIDRow{ + assert.ElementsMatch(t, []*repository.ListResultsByDocumentIDRow{ { ID: jsonResultID, Queryid: jsonQueryID, @@ -66,7 +66,7 @@ func TestResults(t *testing.T) { results, err := queries.ListResultValuesByID(ctx, []pgtype.UUID{jsonResultID}) assert.Nil(t, err) assert.Len(t, results, 1) - assert.ElementsMatch(t, []repository.ListResultValuesByIDRow{ + assert.ElementsMatch(t, []*repository.ListResultValuesByIDRow{ { ID: jsonResultID, Queryid: jsonQueryID, diff --git a/internal/document/service.go b/internal/document/service.go index 96809cf1..dfb1c993 100644 --- a/internal/document/service.go +++ b/internal/document/service.go @@ -56,7 +56,7 @@ func (s *Service) Sync(ctx context.Context, doc *Document) error { func (s *Service) getResults(ctx context.Context, id uuid.UUID, coll *collector.Collector) ([]*result.Result, error) { docID := database.MustToDBUUID(id) - results, err := s.db.Queries.ListResultsByDocumentID(ctx, repository.ListResultsByDocumentIDParams{ + results, err := s.db.Queries.ListResultsByDocumentID(ctx, &repository.ListResultsByDocumentIDParams{ Documentid: docID, Textversion: coll.MinTextVersion, Cleanversion: coll.MinCleanVersion, @@ -67,7 +67,7 @@ func (s *Service) getResults(ctx context.Context, id uuid.UUID, coll *collector. cleanResults := make([]*result.Result, len(results)) for index, dbResult := range results { - cleanResults[index] = result.Parse(&dbResult) + cleanResults[index] = result.Parse(dbResult) } return cleanResults, nil diff --git a/internal/document/sync_test.go b/internal/document/sync_test.go index f3dbb656..239a81e7 100644 --- a/internal/document/sync_test.go +++ b/internal/document/sync_test.go @@ -37,6 +37,7 @@ func TestSyncIsSynced(t *testing.T) { dbJobID := database.MustToDBUUID(doc.JobID) minCleanVersion := int32(1) minTextVersion := int32(1) + qV := int32(1) pool.ExpectQuery("name: GetCollectorFromJobID :one").WithArgs(dbJobID). WillReturnRows( @@ -46,12 +47,12 @@ func TestSyncIsSynced(t *testing.T) { pool.ExpectQuery("name: ListResultsByDocumentID :many").WithArgs(database.MustToDBUUID(doc.ID), minCleanVersion, minTextVersion). WillReturnRows( pgxmock.NewRows([]string{"id", "queryId", "queryVersion"}). - AddRow(pgtype.UUID{}, pgtype.UUID{}, int32(1)), + AddRow(pgtype.UUID{}, pgtype.UUID{}, qV), ) pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorId). WillReturnRows( pgxmock.NewRows([]string{"collectorId", "queryId", "type", "queryVersion", "requiredIds"}). - AddRow(dbCollectorId, pgtype.UUID{}, repository.NullQuerytype{Querytype: repository.QuerytypeJsonExtractor, Valid: true}, pgtype.Int4{Int32: int32(1), Valid: true}, []pgtype.UUID{}), + AddRow(dbCollectorId, pgtype.UUID{}, repository.NullQuerytype{Querytype: repository.QuerytypeJsonExtractor, Valid: true}, &qV, []pgtype.UUID{}), ) docSvc := document.New(db) @@ -133,10 +134,11 @@ func TestSyncDBFail(t *testing.T) { pgxmock.NewRows([]string{"id", "queryId", "queryVersion"}), ) dbErr = "database failure" + qV := int32(1) pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorId). WillReturnRows( pgxmock.NewRows([]string{"collectorId", "queryId", "type", "queryVersion", "requiredIds"}). - AddRow(dbCollectorId, dbQueryID, repository.NullQuerytype{Querytype: repository.QuerytypeJsonExtractor, Valid: true}, pgtype.Int4{Int32: int32(1), Valid: true}, []pgtype.UUID{}), + AddRow(dbCollectorId, dbQueryID, repository.NullQuerytype{Querytype: repository.QuerytypeJsonExtractor, Valid: true}, &qV, []pgtype.UUID{}), ) pool.ExpectQuery("name: ListResultValuesByID :many").WithArgs([]pgtype.UUID{}). WillReturnError(errors.New(dbErr)) @@ -180,10 +182,11 @@ func TestSync(t *testing.T) { WillReturnRows( pgxmock.NewRows([]string{"id", "queryId", "queryVersion"}), ) + qV := int32(1) pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorId). WillReturnRows( pgxmock.NewRows([]string{"collectorId", "queryId", "type", "queryVersion", "requiredIds"}). - AddRow(dbCollectorId, dbQueryID, repository.NullQuerytype{Querytype: repository.QuerytypeJsonExtractor, Valid: true}, pgtype.Int4{Int32: int32(1), Valid: true}, []pgtype.UUID{}), + AddRow(dbCollectorId, dbQueryID, repository.NullQuerytype{Querytype: repository.QuerytypeJsonExtractor, Valid: true}, &qV, []pgtype.UUID{}), ) pool.ExpectQuery("name: ListResultValuesByID :many").WithArgs([]pgtype.UUID{}). WillReturnRows( diff --git a/internal/jsonExtractor/service.go b/internal/jsonExtractor/service.go index ad42d707..86fe20de 100644 --- a/internal/jsonExtractor/service.go +++ b/internal/jsonExtractor/service.go @@ -34,7 +34,7 @@ func (e Extractor) Process(ctx context.Context, query *queryprocessor.Query, val return "", err } - byteConfig, err := e.db.Queries.GetQueryConfig(ctx, repository.GetQueryConfigParams{ + byteConfig, err := e.db.Queries.GetQueryConfig(ctx, &repository.GetQueryConfigParams{ Queryid: database.MustToDBUUID(query.ID), Addedversion: query.Version, }) diff --git a/internal/query/create.go b/internal/query/create.go index 109aae63..aec46032 100644 --- a/internal/query/create.go +++ b/internal/query/create.go @@ -54,7 +54,7 @@ func (s *Service) submitCreate(ctx context.Context, entity *queryprocessor.Creat } for _, reqQuery := range query.RequiredQueryIDs { - err = qtx.CreateRequiredQuery(ctx, repository.CreateRequiredQueryParams{ + err = qtx.CreateRequiredQuery(ctx, &repository.CreateRequiredQueryParams{ Queryid: dbID, Requiredqueryid: reqQuery, Addedversion: 1, @@ -65,7 +65,7 @@ func (s *Service) submitCreate(ctx context.Context, entity *queryprocessor.Creat } if query.Config != nil && string(query.Config) != "" { - err = qtx.CreateQueryConfig(ctx, repository.CreateQueryConfigParams{ + err = qtx.CreateQueryConfig(ctx, &repository.CreateQueryConfigParams{ Queryid: dbID, Config: query.Config, Addedversion: 1, diff --git a/internal/query/get.go b/internal/query/get.go index ea3c3511..b54f5bf9 100644 --- a/internal/query/get.go +++ b/internal/query/get.go @@ -24,7 +24,7 @@ func (s *Service) Get(ctx context.Context, id uuid.UUID) (*Query, error) { return nil, err } - return ParseFullActiveQuery(&query) + return ParseFullActiveQuery(query) } func ParseFullActiveQuery(q *repository.Fullactivequery) (*Query, error) { @@ -47,3 +47,17 @@ func ParseFullActiveQuery(q *repository.Fullactivequery) (*Query, error) { Config: string(q.Config), }, nil } + +func ParseFullActiveQueryArray(q []*repository.Fullactivequery) ([]*Query, error) { + queries := make([]*Query, len(q)) + for index, query := range q { + q, err := ParseFullActiveQuery(query) + if err != nil { + return nil, err + } + + queries[index] = q + } + + return queries, nil +} diff --git a/internal/query/get_test.go b/internal/query/get_test.go index 64099bb7..e6d8fd76 100644 --- a/internal/query/get_test.go +++ b/internal/query/get_test.go @@ -96,3 +96,29 @@ func TestFullActiveQueryWithNullUUID(t *testing.T) { RequiredQueryIDs: []uuid.UUID{}, }, *out) } + +func TestFullActiveQueryArray(t *testing.T) { + dbQueries := []*repository.Fullactivequery{ + { + ID: database.MustToDBUUID(uuid.New()), + Type: repository.QuerytypeContextFull, + Activeversion: int32(1), + Latestversion: int32(2), + Config: []byte(""), + Requiredids: []pgtype.UUID{}, + }, + } + + out, err := query.ParseFullActiveQueryArray(dbQueries) + assert.Nil(t, err) + assert.EqualExportedValues(t, []*query.Query{ + { + ID: database.MustToUUID(dbQueries[0].ID), + Type: queryprocessor.TypeContextFull, + ActiveVersion: int32(1), + LatestVersion: int32(2), + Config: "", + RequiredQueryIDs: []uuid.UUID{}, + }, + }, out) +} diff --git a/internal/query/list.go b/internal/query/list.go index 3a29f72e..e70557d8 100644 --- a/internal/query/list.go +++ b/internal/query/list.go @@ -2,29 +2,20 @@ package query import ( "context" - queryprocessor "queryorchestration/internal/queryProcessor" ) type ListFilters struct { - Types []queryprocessor.Type } func (s *Service) List(ctx context.Context, filters ListFilters) ([]*Query, error) { - // TODO - use filters - dbQueries, err := s.db.Queries.ListQueries(ctx) if err != nil { return nil, err } - queries := make([]*Query, len(dbQueries)) - for index, query := range dbQueries { - q, err := ParseFullActiveQuery(&query) - if err != nil { - return nil, err - } - - queries[index] = q + queries, err := ParseFullActiveQueryArray(dbQueries) + if err != nil { + return nil, err } return queries, nil diff --git a/internal/query/list_test.go b/internal/query/list_test.go index 23315160..bea144c0 100644 --- a/internal/query/list_test.go +++ b/internal/query/list_test.go @@ -53,3 +53,44 @@ func TestList(t *testing.T) { assert.EqualExportedValues(t, []*query.Query{q}, resList) } + +func TestListFilterType(t *testing.T) { + ctx := context.Background() + + pool, err := pgxmock.NewPool() + if err != nil { + t.Fatalf("failed to open pgxmock database: %v", err) + } + queries := repository.New(pool) + db := &database.Connection{ + Queries: queries, + Pool: pool, + } + svc := query.New(db) + + config := "{\"path\":\"example_path\"}" + q := &query.Query{ + ID: uuid.New(), + Type: queryprocessor.TypeJsonExtractor, + ActiveVersion: int32(1), + LatestVersion: int32(1), + RequiredQueryIDs: []uuid.UUID{ + uuid.New(), + }, + Config: config, + } + + dbReqIDs := database.MustToDBUUIDArray(q.RequiredQueryIDs) + + filters := query.ListFilters{} + + pool.ExpectQuery("name: ListQueries :many").WithArgs().WillReturnRows( + pgxmock.NewRows([]string{"id", "type", "activeVersion", "latestVersion", "config", "requiredIds"}). + AddRow(database.MustToDBUUID(q.ID), repository.QuerytypeJsonExtractor, q.ActiveVersion, q.LatestVersion, []byte(config), dbReqIDs), + ) + + resList, err := svc.List(ctx, filters) + assert.Nil(t, err) + + assert.EqualExportedValues(t, []*query.Query{q}, resList) +} diff --git a/internal/queryProcessor/parse.go b/internal/queryProcessor/parse.go index 8304c92b..45f7184a 100644 --- a/internal/queryProcessor/parse.go +++ b/internal/queryProcessor/parse.go @@ -40,6 +40,20 @@ func ToDBQueryType(t Type) (repository.Querytype, error) { return dbType, nil } +func ToDBQueryTypeArray(t []Type) ([]repository.Querytype, error) { + arr := make([]repository.Querytype, len(t)) + for index, value := range t { + v, err := ToDBQueryType(value) + if err != nil { + return nil, err + } + + arr[index] = v + } + + return arr, nil +} + func ToDBNullQueryType(t Type) (repository.NullQuerytype, error) { dbType, err := ToDBQueryType(t) if err != nil { @@ -59,7 +73,7 @@ func ParseDBCollectorQuery(q *repository.GetCollectorQueriesRow) (*Query, error) return &Query{ ID: database.MustToUUID(q.Queryid), - Version: q.Queryversion.Int32, + Version: *q.Queryversion, Type: qType, RequiredQueryIDs: reqQueryIDs, }, nil diff --git a/internal/queryProcessor/parse_test.go b/internal/queryProcessor/parse_test.go index 9e56420c..f1dc1af8 100644 --- a/internal/queryProcessor/parse_test.go +++ b/internal/queryProcessor/parse_test.go @@ -11,12 +11,13 @@ import ( ) func TestParseDBCollectorQuery(t *testing.T) { + qV := int32(0) dbResult := repository.GetCollectorQueriesRow{ Collectorid: pgtype.UUID{}, Queryid: pgtype.UUID{}, Requiredids: []pgtype.UUID{}, Type: repository.NullQuerytype{Valid: true, Querytype: repository.QuerytypeJsonExtractor}, - Queryversion: pgtype.Int4{}, + Queryversion: &qV, } value, err := queryprocessor.ParseDBCollectorQuery(&dbResult) assert.Nil(t, err) @@ -73,6 +74,25 @@ func TestToDBQueryType(t *testing.T) { assert.Equal(t, repository.Querytype(repository.QuerytypeContextFull), value) } +func TestToDBQueryTypeArray(t *testing.T) { + inArr := []queryprocessor.Type{ + queryprocessor.TypeJsonExtractor, + queryprocessor.TypeContextFull, + } + value, err := queryprocessor.ToDBQueryTypeArray(inArr) + assert.Nil(t, err) + assert.Equal(t, []repository.Querytype{ + repository.QuerytypeJsonExtractor, + repository.QuerytypeContextFull, + }, value) + + inArr = []queryprocessor.Type{ + queryprocessor.Type(-1), + } + _, err = queryprocessor.ToDBQueryTypeArray(inArr) + assert.EqualError(t, err, "invalid database query type") +} + func TestToDBNullQueryType(t *testing.T) { dbQueryType := queryprocessor.Type(queryprocessor.TypeJsonExtractor) value, err := queryprocessor.ToDBNullQueryType(dbQueryType) diff --git a/internal/queryQueue/create.go b/internal/queryQueue/create.go index b4930a67..f9647e0d 100644 --- a/internal/queryQueue/create.go +++ b/internal/queryQueue/create.go @@ -40,7 +40,7 @@ func (c *Queue) getCollectorQueries(ctx context.Context) error { cleanQueries := make([]*queryprocessor.Query, len(queries)) for index, dbQuery := range queries { - cleanQuery, err := queryprocessor.ParseDBCollectorQuery(&dbQuery) + cleanQuery, err := queryprocessor.ParseDBCollectorQuery(dbQuery) if err != nil { return err } diff --git a/internal/queryQueue/create_test.go b/internal/queryQueue/create_test.go index 2e54365d..bdaa80a3 100644 --- a/internal/queryQueue/create_test.go +++ b/internal/queryQueue/create_test.go @@ -10,7 +10,6 @@ import ( "testing" "github.com/google/uuid" - "github.com/jackc/pgx/v5/pgtype" "github.com/pashagolub/pgxmock/v3" "github.com/stretchr/testify/assert" ) @@ -71,7 +70,7 @@ func TestGetCollectorQueries(t *testing.T) { ty, err := queryprocessor.ToDBNullQueryType(q.Type) assert.Nil(t, err) rows = rows. - AddRow(dbCollectorID, dbID, ty, pgtype.Int4{Int32: int32(q.Version), Valid: true}, dbReqIDs) + AddRow(dbCollectorID, dbID, ty, &q.Version, dbReqIDs) } pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorID).WillReturnRows(rows) diff --git a/internal/queryQueue/execute.go b/internal/queryQueue/execute.go index f9fa393a..cdf6b361 100644 --- a/internal/queryQueue/execute.go +++ b/internal/queryQueue/execute.go @@ -52,7 +52,7 @@ func (q *Queue) executeQuery(ctx context.Context, qu *queryprocessor.Query) erro cleanValues := make([]result.Value, len(values)) for index, r := range values { - cleanValue, err := q.getResultValue(&r) + cleanValue, err := q.getResultValue(r) if err != nil { return err } diff --git a/internal/queryQueue/execute_test.go b/internal/queryQueue/execute_test.go index 0f0425a7..f8c4b31d 100644 --- a/internal/queryQueue/execute_test.go +++ b/internal/queryQueue/execute_test.go @@ -74,7 +74,7 @@ func TestExecute(t *testing.T) { ty, err := queryprocessor.ToDBNullQueryType(q.Type) assert.Nil(t, err) rows = rows. - AddRow(dbCollectorID, dbID, ty, pgtype.Int4{Int32: int32(q.Version), Valid: true}, dbReqIDs) + AddRow(dbCollectorID, dbID, ty, &q.Version, dbReqIDs) } pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorID).WillReturnRows(rows) diff --git a/internal/queryQueue/service_test.go b/internal/queryQueue/service_test.go index 60516ed2..706619bf 100644 --- a/internal/queryQueue/service_test.go +++ b/internal/queryQueue/service_test.go @@ -12,7 +12,6 @@ import ( "testing" "github.com/google/uuid" - "github.com/jackc/pgx/v5/pgtype" "github.com/pashagolub/pgxmock/v3" "github.com/stretchr/testify/assert" ) @@ -74,7 +73,7 @@ func TestService(t *testing.T) { ty, err := queryprocessor.ToDBNullQueryType(q.Type) assert.Nil(t, err) rows = rows. - AddRow(dbCollectorID, dbID, ty, pgtype.Int4{Int32: int32(q.Version), Valid: true}, dbReqIDs) + AddRow(dbCollectorID, dbID, ty, &q.Version, dbReqIDs) } pool.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorID).WillReturnRows(rows) diff --git a/internal/result/service.go b/internal/result/service.go index 66bde823..bdf6b795 100644 --- a/internal/result/service.go +++ b/internal/result/service.go @@ -28,7 +28,7 @@ type ResultStore struct { } func Store(ctx context.Context, dbQueries *repository.Queries, res *ResultStore) (uuid.UUID, error) { - dbId, err := dbQueries.SetResult(ctx, repository.SetResultParams{ + dbId, err := dbQueries.SetResult(ctx, &repository.SetResultParams{ Queryid: database.MustToDBUUID(res.QueryID), Documentid: database.MustToDBUUID(res.DocumentID), Value: res.Value, diff --git a/internal/server/server_test.go b/internal/server/server_test.go index cb416db4..5bc3c269 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -14,9 +14,7 @@ import ( func TestNew(t *testing.T) { ctx := context.Background() - _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ - NoPool: true, - }) + _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{}) defer cleanup() newCfg := &server.NewConfig{ diff --git a/internal/test/container.go b/internal/test/container.go index 98149121..32701f43 100644 --- a/internal/test/container.go +++ b/internal/test/container.go @@ -43,12 +43,17 @@ func createContainer(t *testing.T, ctx context.Context, cfg *containerConfig) (t Entrypoint: []string{fmt.Sprintf("./%s", cfg.ServiceName)}, } - if cfg.ExposedPorts != nil { + if len(cfg.ExposedPorts) > 0 { ports := make([]string, len(cfg.ExposedPorts)) for index, port := range cfg.ExposedPorts { ports[index] = port.Port() } req.ExposedPorts = ports + req.WaitingFor = wait.ForAll( + wait.ForExposedPort(), + wait.ForListeningPort(cfg.ExposedPorts[0]), + wait.ForLog(cfg.WaitForMsg), + ) } container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ diff --git a/internal/test/database.go b/internal/test/database.go index 77f292b4..4c57960b 100644 --- a/internal/test/database.go +++ b/internal/test/database.go @@ -29,7 +29,6 @@ type Database struct { type CreateDatabaseConfig struct { Network *testcontainers.DockerNetwork Migrations *database.MigrationConfig - NoPool bool } func CreateDB(t *testing.T, ctx context.Context, cfg *CreateDatabaseConfig) (*Database, func()) { @@ -52,8 +51,11 @@ func CreateDB(t *testing.T, ctx context.Context, cfg *CreateDatabaseConfig) (*Da "POSTGRES_PASSWORD": pass, }, ExposedPorts: []string{port.Port()}, - // WaitingFor: wait.ForLog("database system is ready to accept connections"), - WaitingFor: wait.ForExposedPort(), + WaitingFor: wait.ForAll( + wait.ForExposedPort(), + wait.ForListeningPort(port), + wait.ForLog("database system is ready to accept connections"), + ), } if cfg.Network != nil { @@ -87,17 +89,15 @@ func CreateDB(t *testing.T, ctx context.Context, cfg *CreateDatabaseConfig) (*Da t.Setenv("DB_NAME", name) t.Setenv("DB_NOSSL", "1") + var pool *pgxpool.Pool if cfg.Migrations != nil { database.RunMigrations(ctx, cfg.Migrations) - } - var pool *pgxpool.Pool - if !cfg.NoPool { pool = database.GetDBPool(ctx) err = pool.Ping(ctx) if err != nil { - t.Fatal("Unable to ping database") + t.Fatalf("Unable to ping database: %s", err) } } diff --git a/internal/test/database_test.go b/internal/test/database_test.go index 7cff56af..deb6c55b 100644 --- a/internal/test/database_test.go +++ b/internal/test/database_test.go @@ -14,10 +14,9 @@ import ( func TestCreateDB(t *testing.T) { ctx := context.Background() - dbcfg, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ - NoPool: true, - }) + dbcfg, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{}) assert.NotNil(t, dbcfg) + assert.Nil(t, dbcfg.Pool) assert.NotNil(t, cleanup) cleanup() @@ -32,6 +31,7 @@ func TestCreateDBWithMigrations(t *testing.T) { }, }) assert.NotNil(t, dbcfg) + assert.NotNil(t, dbcfg.Pool) assert.NotNil(t, cleanup) cleanup() diff --git a/internal/test/queue.go b/internal/test/queue.go index 6a7a2a95..310be069 100644 --- a/internal/test/queue.go +++ b/internal/test/queue.go @@ -61,7 +61,11 @@ func CreateQueue(t *testing.T, ctx context.Context, cfg *CreateQueueConfig) (*Qu "SQS_ENDPOINT_STRATEGY": "path", }, ExposedPorts: []string{port.Port()}, - WaitingFor: wait.ForListeningPort(port), + WaitingFor: wait.ForAll( + // wait.ForExposedPort(), + wait.ForListeningPort(port), + wait.ForLog("Ready."), + ), } if cfg.Network != nil { diff --git a/internal/test/queuecontainer_test.go b/internal/test/queuecontainer_test.go index 2f14ad55..9b024f86 100644 --- a/internal/test/queuecontainer_test.go +++ b/internal/test/queuecontainer_test.go @@ -2,6 +2,9 @@ package test import ( "context" + "os" + "path" + "queryorchestration/internal/database" "testing" "github.com/stretchr/testify/assert" @@ -13,6 +16,9 @@ func TestCreateQueueContainer(t *testing.T) { ncfg, ncleanup := CreateNetwork(t, ctx) defer ncleanup() dbcfg, dbcleanup := CreateDB(t, ctx, &CreateDatabaseConfig{ + Migrations: &database.MigrationConfig{ + BasePath: path.Join(os.Getenv("PWD"), "../.."), + }, Network: ncfg, }) defer dbcleanup() diff --git a/scripts/database.yml b/scripts/database.yml index fb8d60df..230231a3 100644 --- a/scripts/database.yml +++ b/scripts/database.yml @@ -9,8 +9,6 @@ vars: tasks: generate: cmds: - - task compose:up:bg - - sleep 2 - task db:mig:run - sqlc generate --file sqlc.yml lint: diff --git a/serviceInterfaces/main.proto b/serviceInterfaces/main.proto index a33f0dac..a9fa4c4d 100644 --- a/serviceInterfaces/main.proto +++ b/serviceInterfaces/main.proto @@ -40,9 +40,7 @@ message Query { repeated string required_queries = 6; } -message QueryFilter { - repeated QueryType types = 1; -} +message QueryFilter {} message QueryCreate { QueryType type = 1; diff --git a/sqlc.yml b/sqlc.yml index 2e36dc5e..21222f19 100644 --- a/sqlc.yml +++ b/sqlc.yml @@ -21,6 +21,13 @@ sql: package: "repository" out: "internal/database/repository" sql_package: "pgx/v5" + emit_pointers_for_null_types: true + emit_empty_slices: true + emit_db_tags: true + emit_result_struct_pointers: true + emit_params_struct_pointers: true + emit_enum_valid_method: true + emit_sql_as_comment: true rules: - name: no-pg message: "invalid engine: not postgresql" diff --git a/test/queryService/listqueries_test.go b/test/queryService/listqueries_test.go index 06dbf504..10809ab0 100644 --- a/test/queryService/listqueries_test.go +++ b/test/queryService/listqueries_test.go @@ -17,23 +17,24 @@ func TestQueryServiceList(t *testing.T) { client := serviceinterfaces.NewQueryServiceClient(conn) - idRes, err := client.Create(ctx, &serviceinterfaces.QueryCreate{ + contextRes, err := client.Create(ctx, &serviceinterfaces.QueryCreate{ Type: serviceinterfaces.QueryType_QUERY_TYPE_CONTEXT_FULL, Config: nil, RequiredQueries: []string{}, }) assert.Nil(t, err) - id := idRes.GetId() - assert.NotEmpty(t, id) + + config := "\"path\":\".key\"" + _, err = client.Create(ctx, &serviceinterfaces.QueryCreate{ + Type: serviceinterfaces.QueryType_QUERY_TYPE_JSON_EXTRACTOR, + Config: &config, + RequiredQueries: []string{ + contextRes.Id, + }, + }) + assert.Nil(t, err) queriesRes, err := client.List(ctx, &serviceinterfaces.QueryFilter{}) assert.Nil(t, err) - assert.Len(t, queriesRes.Queries, 1) - assert.Equal(t, id, queriesRes.Queries[0].Id) - - res, err := client.Update(ctx, &serviceinterfaces.QueryUpdate{ - Id: id, - }) - assert.Nil(t, err) - assert.NotNil(t, res) + assert.Len(t, queriesRes.Queries, 2) }