diff --git a/api/queryService/job_test.go b/api/queryService/job_test.go index 326416d6..4bb90cdb 100644 --- a/api/queryService/job_test.go +++ b/api/queryService/job_test.go @@ -68,9 +68,11 @@ func TestCreateJob(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(collId)), ) - pool.ExpectExec("name: AddLatestCollectorVersion :exec").WithArgs(database.MustToDBUUID(collId)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(collId), int32(1)). + pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(collId)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(collId), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() diff --git a/api/queryService/jobcollector_test.go b/api/queryService/jobcollector_test.go index ba287d76..edde9e7f 100644 --- a/api/queryService/jobcollector_test.go +++ b/api/queryService/jobcollector_test.go @@ -93,14 +93,13 @@ func TestUpdateJobCollector(t *testing.T) { AddRow(true), ) pool.ExpectBeginTx(pgx.TxOptions{}) - rv := current.LatestVersion + 1 - pool.ExpectExec("name: AddLatestCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID)). + pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(current.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(5)), + ) + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: RemoveCollectorCodeVersion :exec").WithArgs(&rv, database.MustToDBUUID(current.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddCollectorCodeVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(5), *body.MinimumCleanerVersion, int32(0)). + pool.ExpectExec("name: SetCollectorCleanVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(5), *body.MinimumCleanerVersion). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectExec("name: AddCollectorQuery :exec").WithArgs(database.MustToDBUUID(current.ID), "a", database.MustToDBUUID((*body.Fields)[0].QueryId), int32(5)). WillReturnResult(pgxmock.NewResult("", 1)) diff --git a/api/queryService/query_test.go b/api/queryService/query_test.go index d3adf876..053d7444 100644 --- a/api/queryService/query_test.go +++ b/api/queryService/query_test.go @@ -66,8 +66,10 @@ func TestCreateQuery(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(id)), ) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(id)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(id)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) pool.ExpectExec("name: AddActiveQueryVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() diff --git a/database/migrations/00000000000002_queries.up.sql b/database/migrations/00000000000002_queries.up.sql index 97c32c38..6a964fee 100644 --- a/database/migrations/00000000000002_queries.up.sql +++ b/database/migrations/00000000000002_queries.up.sql @@ -60,4 +60,20 @@ CREATE TABLE queryConfigs ( foreign key (queryId, addedVersion) references queryVersions(queryId, id), foreign key (queryId, removedVersion) references queryVersions(queryId, id), unique (queryId, removedVersion) -); \ No newline at end of file +); + +CREATE OR REPLACE FUNCTION removeQueryConfig() +RETURNS TRIGGER AS $$ +BEGIN + UPDATE queryConfigs + SET removedVersion = NEW.addedVersion + WHERE queryId = NEW.queryId and removedVersion is null; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER removeQueryConfigTrigger +BEFORE INSERT ON queryConfigs +FOR EACH ROW +EXECUTE FUNCTION removeQueryConfig(); \ No newline at end of file diff --git a/database/migrations/00000000000005_collectors.up.sql b/database/migrations/00000000000005_collectors.up.sql index dd8b0555..28b1f04f 100644 --- a/database/migrations/00000000000005_collectors.up.sql +++ b/database/migrations/00000000000005_collectors.up.sql @@ -37,11 +37,10 @@ CREATE TABLE collectorActiveVersions ( foreign key (collectorId, versionId) references collectorVersions(collectorId, id) ); -CREATE TABLE collectorCodeVersions ( +CREATE TABLE collectorMinCleanVersions ( id uuid primary key DEFAULT uuid_generate_v7(), collectorId uuid not null, - minCleanVersion int not null, - minTextVersion int not null, + versionId int not null, addedVersion int not null, removedVersion int, foreign key (collectorId, addedVersion) references collectorVersions(collectorId, id), @@ -49,6 +48,49 @@ CREATE TABLE collectorCodeVersions ( foreign key (collectorId) references collectors(id) ); +CREATE OR REPLACE FUNCTION removeMinCleanVersion() +RETURNS TRIGGER AS $$ +BEGIN + UPDATE collectorMinCleanVersions + SET removedVersion = NEW.addedVersion + WHERE collectorId = NEW.collectorId and removedVersion is null; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER removeMinCleanVersionTrigger +BEFORE INSERT ON collectorMinCleanVersions +FOR EACH ROW +EXECUTE FUNCTION removeMinCleanVersion(); + +CREATE TABLE collectorMinTextVersions ( + id uuid primary key DEFAULT uuid_generate_v7(), + collectorId uuid not null, + versionId int not null, + addedVersion int not null, + removedVersion int, + foreign key (collectorId, addedVersion) references collectorVersions(collectorId, id), + foreign key (collectorId, removedVersion) references collectorVersions(collectorId, id), + foreign key (collectorId) references collectors(id) +); + +CREATE OR REPLACE FUNCTION removeMinTextVersion() +RETURNS TRIGGER AS $$ +BEGIN + UPDATE collectorMinTextVersions + SET removedVersion = NEW.addedVersion + WHERE collectorId = NEW.collectorId and removedVersion is null; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER removeMinTextVersionTrigger +BEFORE INSERT ON collectorMinTextVersions +FOR EACH ROW +EXECUTE FUNCTION removeMinTextVersion(); + CREATE TABLE collectorQueries ( id uuid primary key DEFAULT uuid_generate_v7(), collectorId uuid not null, diff --git a/database/migrations/00000000000101_collector_views.up.sql b/database/migrations/00000000000101_collector_views.up.sql index f09e9310..58fcb40c 100644 --- a/database/migrations/00000000000101_collector_views.up.sql +++ b/database/migrations/00000000000101_collector_views.up.sql @@ -10,16 +10,18 @@ CREATE VIEW collectorLatestVersions as GROUP BY collectorId; CREATE VIEW fullActiveCollectors AS - SELECT DISTINCT c.id, c.jobId, coalesce(cv.minCleanVersion, 0) as minCleanVersion, coalesce(cv.minTextVersion, 0) as minTextVersion, coalesce(av.id, 0) as activeVersion, coalesce(lv.id, 0) as latestVersion, + SELECT DISTINCT c.id, c.jobId, coalesce(ccv.versionId, 0) as minCleanVersion, coalesce(ctv.versionId, 0) as minTextVersion, coalesce(av.id, 0) as activeVersion, coalesce(lv.id, 0) as latestVersion, jsonb_object_agg(q.name, q.queryId) FILTER (WHERE q.name is not null) AS fields FROM collectors AS c LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId LEFT JOIN collectorLatestVersions as lv on lv.collectorId = c.id - LEFT JOIN collectorCodeVersions AS cv ON c.id = cv.collectorId - and isInVersion(av.id, cv.addedVersion, cv.removedVersion) + LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + LEFT JOIN collectorMinTextVersions AS ctv ON c.id = ctv.collectorId + and isInVersion(av.id, ctv.addedVersion, ctv.removedVersion) LEFT JOIN collectorQueries AS q ON c.id = q.collectorId and isInVersion(av.id, q.addedVersion, q.removedVersion) - GROUP BY c.id, c.jobId, cv.minCleanVersion, cv.minTextVersion, av.id, lv.id; + GROUP BY c.id, c.jobId, ccv.versionId, ctv.versionId, av.id, lv.id; CREATE VIEW collectorQueryDependencyTree AS WITH RECURSIVE diff --git a/database/queries/clean.sql b/database/queries/clean.sql index 5c8f2801..71dacdad 100644 --- a/database/queries/clean.sql +++ b/database/queries/clean.sql @@ -4,8 +4,10 @@ SELECT EXISTS( FROM documentCleans AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minCleanVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ); -- name: AddDocumentCleanEntry :exec @@ -16,6 +18,8 @@ SELECT dc.documentId, dc.bucket, dc.key, dc.version FROM documentCleans AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minCleanVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ORDER BY d.id DESC LIMIT 1; \ No newline at end of file diff --git a/database/queries/collector.sql b/database/queries/collector.sql index 487c727e..c72ab911 100644 --- a/database/queries/collector.sql +++ b/database/queries/collector.sql @@ -10,17 +10,17 @@ SELECT * FROM fullActiveCollectors WHERE id = $1 LIMIT 1; -- name: CreateCollector :one INSERT INTO collectors (jobId) VALUES ($1) RETURNING id; --- name: AddLatestCollectorVersion :exec -INSERT INTO collectorVersions (collectorId) VALUES ($1); +-- name: AddLatestCollectorVersion :one +INSERT INTO collectorVersions (collectorId) VALUES ($1) RETURNING id; --- name: AddActiveCollectorVersion :exec +-- name: SetActiveCollectorVersion :exec INSERT INTO collectorActiveVersions (collectorId, versionId) VALUES ($1, $2); --- name: AddCollectorCodeVersion :exec -INSERT INTO collectorCodeVersions (collectorId, addedVersion, minCleanVersion, minTextVersion) VALUES ($1, $2, $3, $4); +-- name: SetCollectorCleanVersion :exec +INSERT INTO collectorMinCleanVersions (collectorId, addedVersion, versionId) VALUES ($1, $2, $3); --- name: RemoveCollectorCodeVersion :exec -UPDATE collectorCodeVersions SET removedVersion = $1 WHERE collectorId = $2 and removedVersion is null; +-- name: SetCollectorTextVersion :exec +INSERT INTO collectorMinTextVersions (collectorId, addedVersion, versionId) VALUES ($1, $2, $3); -- name: AddCollectorQuery :exec INSERT INTO collectorQueries (collectorId, name, queryId, addedVersion) VALUES ($1, $2, $3, $4); diff --git a/database/queries/query.sql b/database/queries/query.sql index 0ab84772..1a3bdede 100644 --- a/database/queries/query.sql +++ b/database/queries/query.sql @@ -44,8 +44,8 @@ SELECT * FROM fullActiveQueries WHERE id = any($1); -- name: CreateQuery :one INSERT INTO queries (type) VALUES ($1) RETURNING id; --- name: AddLatestQueryVersion :exec -INSERT INTO queryVersions (queryId) VALUES ($1); +-- name: AddLatestQueryVersion :one +INSERT INTO queryVersions (queryId) VALUES ($1) RETURNING id; -- name: AddActiveQueryVersion :exec INSERT INTO queryActiveVersions (queryId, versionId) VALUES ($1, $2); @@ -56,12 +56,9 @@ INSERT INTO requiredQueries (queryId, requiredQueryId, addedVersion) VALUES ($1, -- name: RemoveRequiredQuery :exec UPDATE requiredQueries SET removedVersion = $1 WHERE requiredQueryId = $2 and queryId = $3 and removedVersion is null; --- name: AddQueryConfig :exec +-- name: SetQueryConfig :exec INSERT INTO queryConfigs (queryId, config, addedVersion) VALUES ($1, $2, $3); --- name: RemoveQueryConfig :exec -UPDATE queryConfigs SET removedVersion = $1 WHERE queryId = $2 and removedVersion is null; - -- name: AllQueriesExist :one SELECT COUNT(*) = COUNT(DISTINCT id) AS all_exist FROM unnest($1::uuid[]) AS input_id diff --git a/database/queries/result.sql b/database/queries/result.sql index a2615f8f..32cee5e0 100644 --- a/database/queries/result.sql +++ b/database/queries/result.sql @@ -15,13 +15,15 @@ docs as ( codeVersions as ( SELECT d.id as documentId, - coalesce(ccv.minCleanVersion, 1) as minCleanVersion, - coalesce(ccv.minTextVersion, 1) as minTextVersion + coalesce(ccv.versionId, 1) as minCleanVersion, + coalesce(ctv.versionId, 1) as minTextVersion FROM docs as d LEFT JOIN collectors as c on c.jobId = d.jobId LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId - LEFT JOIN collectorCodeVersions as ccv on c.id = ccv.collectorId + LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + LEFT JOIN collectorMinTextVersions AS ctv ON c.id = ctv.collectorId + and isInVersion(av.id, ctv.addedVersion, ctv.removedVersion) LIMIT 1 ), latestVersions AS ( diff --git a/database/queries/text.sql b/database/queries/text.sql index 72e324dc..d2bdfa37 100644 --- a/database/queries/text.sql +++ b/database/queries/text.sql @@ -4,8 +4,10 @@ SELECT EXISTS( FROM documentTextExtractions AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minTextVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinTextVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ); -- name: AddDocumentTextEntry :exec @@ -16,6 +18,8 @@ SELECT dc.documentId, dc.bucket, dc.key, dc.version FROM documentTextExtractions AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minTextVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinTextVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ORDER BY d.id DESC LIMIT 1; \ No newline at end of file diff --git a/internal/database/repository/clean.sql.go b/internal/database/repository/clean.sql.go index 8f3339af..014349fd 100644 --- a/internal/database/repository/clean.sql.go +++ b/internal/database/repository/clean.sql.go @@ -40,8 +40,10 @@ SELECT dc.documentId, dc.bucket, dc.key, dc.version FROM documentCleans AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minCleanVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ORDER BY d.id DESC LIMIT 1 ` @@ -58,8 +60,10 @@ type GetDocumentCleanEntryRow struct { // FROM documentCleans AS dc // JOIN documents AS d ON d.id = dc.documentId // LEFT JOIN collectors as c ON d.jobId = c.jobId -// LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId -// WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minCleanVersion, 1) +// LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId +// LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId +// and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) +// WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) // ORDER BY d.id DESC LIMIT 1 func (q *Queries) GetDocumentCleanEntry(ctx context.Context, documentid pgtype.UUID) (*GetDocumentCleanEntryRow, error) { row := q.db.QueryRow(ctx, getDocumentCleanEntry, documentid) @@ -79,8 +83,10 @@ SELECT EXISTS( FROM documentCleans AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minCleanVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ) ` @@ -91,8 +97,10 @@ SELECT EXISTS( // FROM documentCleans AS dc // JOIN documents AS d ON d.id = dc.documentId // LEFT JOIN collectors as c ON d.jobId = c.jobId -// LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId -// WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minCleanVersion, 1) +// LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId +// LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId +// and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) +// WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) // ) func (q *Queries) IsDocumentClean(ctx context.Context, documentid pgtype.UUID) (bool, error) { row := q.db.QueryRow(ctx, isDocumentClean, documentid) diff --git a/internal/database/repository/collector.sql.go b/internal/database/repository/collector.sql.go index ae9e538a..3f608f1c 100644 --- a/internal/database/repository/collector.sql.go +++ b/internal/database/repository/collector.sql.go @@ -11,47 +11,6 @@ import ( "github.com/jackc/pgx/v5/pgtype" ) -const addActiveCollectorVersion = `-- name: AddActiveCollectorVersion :exec -INSERT INTO collectorActiveVersions (collectorId, versionId) VALUES ($1, $2) -` - -type AddActiveCollectorVersionParams struct { - Collectorid pgtype.UUID `db:"collectorid"` - Versionid int32 `db:"versionid"` -} - -// AddActiveCollectorVersion -// -// INSERT INTO collectorActiveVersions (collectorId, versionId) VALUES ($1, $2) -func (q *Queries) AddActiveCollectorVersion(ctx context.Context, arg *AddActiveCollectorVersionParams) error { - _, err := q.db.Exec(ctx, addActiveCollectorVersion, arg.Collectorid, arg.Versionid) - return err -} - -const addCollectorCodeVersion = `-- name: AddCollectorCodeVersion :exec -INSERT INTO collectorCodeVersions (collectorId, addedVersion, minCleanVersion, minTextVersion) VALUES ($1, $2, $3, $4) -` - -type AddCollectorCodeVersionParams struct { - Collectorid pgtype.UUID `db:"collectorid"` - Addedversion int32 `db:"addedversion"` - Mincleanversion int32 `db:"mincleanversion"` - Mintextversion int32 `db:"mintextversion"` -} - -// AddCollectorCodeVersion -// -// INSERT INTO collectorCodeVersions (collectorId, addedVersion, minCleanVersion, minTextVersion) VALUES ($1, $2, $3, $4) -func (q *Queries) AddCollectorCodeVersion(ctx context.Context, arg *AddCollectorCodeVersionParams) error { - _, err := q.db.Exec(ctx, addCollectorCodeVersion, - arg.Collectorid, - arg.Addedversion, - arg.Mincleanversion, - arg.Mintextversion, - ) - return err -} - const addCollectorQuery = `-- name: AddCollectorQuery :exec INSERT INTO collectorQueries (collectorId, name, queryId, addedVersion) VALUES ($1, $2, $3, $4) ` @@ -76,16 +35,18 @@ func (q *Queries) AddCollectorQuery(ctx context.Context, arg *AddCollectorQueryP return err } -const addLatestCollectorVersion = `-- name: AddLatestCollectorVersion :exec -INSERT INTO collectorVersions (collectorId) VALUES ($1) +const addLatestCollectorVersion = `-- name: AddLatestCollectorVersion :one +INSERT INTO collectorVersions (collectorId) VALUES ($1) RETURNING id ` // AddLatestCollectorVersion // -// INSERT INTO collectorVersions (collectorId) VALUES ($1) -func (q *Queries) AddLatestCollectorVersion(ctx context.Context, collectorid pgtype.UUID) error { - _, err := q.db.Exec(ctx, addLatestCollectorVersion, collectorid) - return err +// INSERT INTO collectorVersions (collectorId) VALUES ($1) RETURNING id +func (q *Queries) AddLatestCollectorVersion(ctx context.Context, collectorid pgtype.UUID) (int32, error) { + row := q.db.QueryRow(ctx, addLatestCollectorVersion, collectorid) + var id int32 + err := row.Scan(&id) + return id, err } const createCollector = `-- name: CreateCollector :one @@ -180,23 +141,6 @@ func (q *Queries) ListCollectorQueries(ctx context.Context, collectorid pgtype.U return items, nil } -const removeCollectorCodeVersion = `-- name: RemoveCollectorCodeVersion :exec -UPDATE collectorCodeVersions SET removedVersion = $1 WHERE collectorId = $2 and removedVersion is null -` - -type RemoveCollectorCodeVersionParams struct { - Removedversion *int32 `db:"removedversion"` - Collectorid pgtype.UUID `db:"collectorid"` -} - -// RemoveCollectorCodeVersion -// -// UPDATE collectorCodeVersions SET removedVersion = $1 WHERE collectorId = $2 and removedVersion is null -func (q *Queries) RemoveCollectorCodeVersion(ctx context.Context, arg *RemoveCollectorCodeVersionParams) error { - _, err := q.db.Exec(ctx, removeCollectorCodeVersion, arg.Removedversion, arg.Collectorid) - return err -} - const removeCollectorQuery = `-- name: RemoveCollectorQuery :exec UPDATE collectorQueries SET removedVersion = $1 WHERE queryId = $2 and collectorId = $3 and removedVersion is null ` @@ -214,3 +158,56 @@ func (q *Queries) RemoveCollectorQuery(ctx context.Context, arg *RemoveCollector _, err := q.db.Exec(ctx, removeCollectorQuery, arg.Removedversion, arg.Queryid, arg.Collectorid) return err } + +const setActiveCollectorVersion = `-- name: SetActiveCollectorVersion :exec +INSERT INTO collectorActiveVersions (collectorId, versionId) VALUES ($1, $2) +` + +type SetActiveCollectorVersionParams struct { + Collectorid pgtype.UUID `db:"collectorid"` + Versionid int32 `db:"versionid"` +} + +// SetActiveCollectorVersion +// +// INSERT INTO collectorActiveVersions (collectorId, versionId) VALUES ($1, $2) +func (q *Queries) SetActiveCollectorVersion(ctx context.Context, arg *SetActiveCollectorVersionParams) error { + _, err := q.db.Exec(ctx, setActiveCollectorVersion, arg.Collectorid, arg.Versionid) + return err +} + +const setCollectorCleanVersion = `-- name: SetCollectorCleanVersion :exec +INSERT INTO collectorMinCleanVersions (collectorId, addedVersion, versionId) VALUES ($1, $2, $3) +` + +type SetCollectorCleanVersionParams struct { + Collectorid pgtype.UUID `db:"collectorid"` + Addedversion int32 `db:"addedversion"` + Versionid int32 `db:"versionid"` +} + +// SetCollectorCleanVersion +// +// INSERT INTO collectorMinCleanVersions (collectorId, addedVersion, versionId) VALUES ($1, $2, $3) +func (q *Queries) SetCollectorCleanVersion(ctx context.Context, arg *SetCollectorCleanVersionParams) error { + _, err := q.db.Exec(ctx, setCollectorCleanVersion, arg.Collectorid, arg.Addedversion, arg.Versionid) + return err +} + +const setCollectorTextVersion = `-- name: SetCollectorTextVersion :exec +INSERT INTO collectorMinTextVersions (collectorId, addedVersion, versionId) VALUES ($1, $2, $3) +` + +type SetCollectorTextVersionParams struct { + Collectorid pgtype.UUID `db:"collectorid"` + Addedversion int32 `db:"addedversion"` + Versionid int32 `db:"versionid"` +} + +// SetCollectorTextVersion +// +// INSERT INTO collectorMinTextVersions (collectorId, addedVersion, versionId) VALUES ($1, $2, $3) +func (q *Queries) SetCollectorTextVersion(ctx context.Context, arg *SetCollectorTextVersionParams) error { + _, err := q.db.Exec(ctx, setCollectorTextVersion, arg.Collectorid, arg.Addedversion, arg.Versionid) + return err +} diff --git a/internal/database/repository/collector_test.go b/internal/database/repository/collector_test.go index e20ecc86..cf91cc8b 100644 --- a/internal/database/repository/collector_test.go +++ b/internal/database/repository/collector_test.go @@ -36,8 +36,9 @@ func TestCollector(t *testing.T) { assert.NoError(t, err) jsonId, err := queries.CreateQuery(ctx, repository.QuerytypeJsonExtractor) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, jsonId) + version, err := queries.AddLatestQueryVersion(ctx, jsonId) assert.NoError(t, err) + assert.Equal(t, int32(1), version) err = queries.AddRequiredQuery(ctx, &repository.AddRequiredQueryParams{ Queryid: jsonId, Requiredqueryid: contextId, @@ -77,8 +78,9 @@ func TestCollector(t *testing.T) { Latestversion: 0, }, coll) - err = queries.AddLatestCollectorVersion(ctx, collId) + version, err = queries.AddLatestCollectorVersion(ctx, collId) assert.NoError(t, err) + assert.Equal(t, int32(1), version) coll, err = queries.GetCollector(ctx, collId) assert.NoError(t, err) @@ -91,7 +93,7 @@ func TestCollector(t *testing.T) { Latestversion: 1, }, coll) - err = queries.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Versionid: 1, Collectorid: collId, }) @@ -116,11 +118,29 @@ func TestCollector(t *testing.T) { }) assert.NoError(t, err) - err = queries.AddCollectorCodeVersion(ctx, &repository.AddCollectorCodeVersionParams{ - Collectorid: collId, - Addedversion: 1, - Mincleanversion: minCleanVersion, + err = queries.SetCollectorTextVersion(ctx, &repository.SetCollectorTextVersionParams{ + Collectorid: collId, + Addedversion: 1, + Versionid: minTextVersion, + }) + assert.NoError(t, err) + + coll, err = queries.GetCollector(ctx, collId) + assert.NoError(t, err) + assert.EqualExportedValues(t, &repository.Fullactivecollector{ + ID: collId, + Jobid: jobId, + Mincleanversion: 0, Mintextversion: minTextVersion, + Activeversion: 1, + Latestversion: 1, + Fields: []byte(fmt.Sprintf("{\"example_key\": \"%s\"}", database.MustToUUID(jsonId).String())), + }, coll) + + err = queries.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{ + Collectorid: collId, + Addedversion: 1, + Versionid: minCleanVersion, }) assert.NoError(t, err) @@ -158,38 +178,58 @@ func TestCollector(t *testing.T) { }, }, qs) - err = queries.AddLatestCollectorVersion(ctx, collId) + version, err = queries.AddLatestCollectorVersion(ctx, collId) assert.NoError(t, err) + assert.Equal(t, int32(2), version) - removeV := int32(2) err = queries.RemoveCollectorQuery(ctx, &repository.RemoveCollectorQueryParams{ Collectorid: collId, Queryid: jsonId, - Removedversion: &removeV, + Removedversion: &version, }) assert.NoError(t, err) - err = queries.RemoveCollectorCodeVersion(ctx, &repository.RemoveCollectorCodeVersionParams{ - Collectorid: collId, - Removedversion: &removeV, - }) - assert.NoError(t, err) - - err = queries.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Versionid: 2, Collectorid: collId, }) assert.NoError(t, err) + err = queries.SetCollectorTextVersion(ctx, &repository.SetCollectorTextVersionParams{ + Collectorid: collId, + Versionid: minTextVersion + 1, + Addedversion: version, + }) + assert.NoError(t, err) + coll, err = queries.GetCollector(ctx, collId) assert.NoError(t, err) assert.EqualExportedValues(t, &repository.Fullactivecollector{ ID: collId, Jobid: jobId, - Mincleanversion: 0, - Mintextversion: 0, + Mincleanversion: minCleanVersion, + Mintextversion: minTextVersion + 1, Activeversion: 2, Latestversion: 2, - Fields: []byte(nil), + Fields: nil, + }, coll) + + err = queries.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{ + Collectorid: collId, + Versionid: minCleanVersion + 1, + Addedversion: version, + }) + assert.NoError(t, err) + + coll, err = queries.GetCollector(ctx, collId) + assert.NoError(t, err) + assert.EqualExportedValues(t, &repository.Fullactivecollector{ + ID: collId, + Jobid: jobId, + Mincleanversion: minCleanVersion + 1, + Mintextversion: minTextVersion + 1, + Activeversion: 2, + Latestversion: 2, + Fields: nil, }, coll) } diff --git a/internal/database/repository/models.go b/internal/database/repository/models.go index a6bca182..d8998991 100644 --- a/internal/database/repository/models.go +++ b/internal/database/repository/models.go @@ -84,15 +84,6 @@ type Collectoractiveversion struct { Versionid int32 `db:"versionid"` } -type Collectorcodeversion struct { - ID pgtype.UUID `db:"id"` - Collectorid pgtype.UUID `db:"collectorid"` - Mincleanversion int32 `db:"mincleanversion"` - Mintextversion int32 `db:"mintextversion"` - Addedversion int32 `db:"addedversion"` - Removedversion *int32 `db:"removedversion"` -} - type Collectorcurrentactiveversion struct { Collectorid pgtype.UUID `db:"collectorid"` ID int32 `db:"id"` @@ -103,6 +94,22 @@ type Collectorlatestversion struct { ID int32 `db:"id"` } +type Collectormincleanversion struct { + ID pgtype.UUID `db:"id"` + Collectorid pgtype.UUID `db:"collectorid"` + Versionid int32 `db:"versionid"` + Addedversion int32 `db:"addedversion"` + Removedversion *int32 `db:"removedversion"` +} + +type Collectormintextversion struct { + ID pgtype.UUID `db:"id"` + Collectorid pgtype.UUID `db:"collectorid"` + Versionid int32 `db:"versionid"` + Addedversion int32 `db:"addedversion"` + Removedversion *int32 `db:"removedversion"` +} + type Collectorquery struct { ID pgtype.UUID `db:"id"` Collectorid pgtype.UUID `db:"collectorid"` diff --git a/internal/database/repository/query.sql.go b/internal/database/repository/query.sql.go index 5db17c0f..c1281f7f 100644 --- a/internal/database/repository/query.sql.go +++ b/internal/database/repository/query.sql.go @@ -28,34 +28,18 @@ func (q *Queries) AddActiveQueryVersion(ctx context.Context, arg *AddActiveQuery return err } -const addLatestQueryVersion = `-- name: AddLatestQueryVersion :exec -INSERT INTO queryVersions (queryId) VALUES ($1) +const addLatestQueryVersion = `-- name: AddLatestQueryVersion :one +INSERT INTO queryVersions (queryId) VALUES ($1) RETURNING id ` // AddLatestQueryVersion // -// INSERT INTO queryVersions (queryId) VALUES ($1) -func (q *Queries) AddLatestQueryVersion(ctx context.Context, queryid pgtype.UUID) error { - _, err := q.db.Exec(ctx, addLatestQueryVersion, queryid) - return err -} - -const addQueryConfig = `-- name: AddQueryConfig :exec -INSERT INTO queryConfigs (queryId, config, addedVersion) VALUES ($1, $2, $3) -` - -type AddQueryConfigParams struct { - Queryid pgtype.UUID `db:"queryid"` - Config []byte `db:"config"` - Addedversion int32 `db:"addedversion"` -} - -// AddQueryConfig -// -// INSERT INTO queryConfigs (queryId, config, addedVersion) VALUES ($1, $2, $3) -func (q *Queries) AddQueryConfig(ctx context.Context, arg *AddQueryConfigParams) error { - _, err := q.db.Exec(ctx, addQueryConfig, arg.Queryid, arg.Config, arg.Addedversion) - return err +// INSERT INTO queryVersions (queryId) VALUES ($1) RETURNING id +func (q *Queries) AddLatestQueryVersion(ctx context.Context, queryid pgtype.UUID) (int32, error) { + row := q.db.QueryRow(ctx, addLatestQueryVersion, queryid) + var id int32 + err := row.Scan(&id) + return id, err } const addRequiredQuery = `-- name: AddRequiredQuery :exec @@ -406,23 +390,6 @@ func (q *Queries) ListQueryJobIDs(ctx context.Context, queryid pgtype.UUID) ([]p return items, nil } -const removeQueryConfig = `-- name: RemoveQueryConfig :exec -UPDATE queryConfigs SET removedVersion = $1 WHERE queryId = $2 and removedVersion is null -` - -type RemoveQueryConfigParams struct { - Removedversion *int32 `db:"removedversion"` - Queryid pgtype.UUID `db:"queryid"` -} - -// RemoveQueryConfig -// -// UPDATE queryConfigs SET removedVersion = $1 WHERE queryId = $2 and removedVersion is null -func (q *Queries) RemoveQueryConfig(ctx context.Context, arg *RemoveQueryConfigParams) error { - _, err := q.db.Exec(ctx, removeQueryConfig, arg.Removedversion, arg.Queryid) - return err -} - const removeRequiredQuery = `-- name: RemoveRequiredQuery :exec UPDATE requiredQueries SET removedVersion = $1 WHERE requiredQueryId = $2 and queryId = $3 and removedVersion is null ` @@ -440,3 +407,21 @@ func (q *Queries) RemoveRequiredQuery(ctx context.Context, arg *RemoveRequiredQu _, err := q.db.Exec(ctx, removeRequiredQuery, arg.Removedversion, arg.Requiredqueryid, arg.Queryid) return err } + +const setQueryConfig = `-- name: SetQueryConfig :exec +INSERT INTO queryConfigs (queryId, config, addedVersion) VALUES ($1, $2, $3) +` + +type SetQueryConfigParams struct { + Queryid pgtype.UUID `db:"queryid"` + Config []byte `db:"config"` + Addedversion int32 `db:"addedversion"` +} + +// SetQueryConfig +// +// INSERT INTO queryConfigs (queryId, config, addedVersion) VALUES ($1, $2, $3) +func (q *Queries) SetQueryConfig(ctx context.Context, arg *SetQueryConfigParams) error { + _, err := q.db.Exec(ctx, setQueryConfig, arg.Queryid, arg.Config, arg.Addedversion) + return err +} diff --git a/internal/database/repository/query_test.go b/internal/database/repository/query_test.go index 648eb6f9..532bf53a 100644 --- a/internal/database/repository/query_test.go +++ b/internal/database/repository/query_test.go @@ -47,8 +47,9 @@ func TestQueries(t *testing.T) { Requiredids: []pgtype.UUID{}, }, contextQuery) - err = queries.AddLatestQueryVersion(ctx, contextQueryID) + ctxVersion, err := queries.AddLatestQueryVersion(ctx, contextQueryID) assert.NoError(t, err) + assert.Equal(t, int32(1), ctxVersion) contextQuery, err = queries.GetQuery(ctx, contextQueryID) assert.NoError(t, err) @@ -76,8 +77,9 @@ func TestQueries(t *testing.T) { Requiredids: []pgtype.UUID{}, }, jsonQuery) - err = queries.AddLatestQueryVersion(ctx, jsonQueryID) + jsonVersion, err := queries.AddLatestQueryVersion(ctx, jsonQueryID) assert.NoError(t, err) + assert.Equal(t, int32(1), jsonVersion) jsonQuery, err = queries.GetQuery(ctx, jsonQueryID) assert.NoError(t, err) @@ -127,8 +129,9 @@ func TestQueries(t *testing.T) { Requiredids: []pgtype.UUID{contextQueryID}, }, jsonQuery) - err = queries.AddLatestQueryVersion(ctx, jsonQueryID) + jsonVersion, err = queries.AddLatestQueryVersion(ctx, jsonQueryID) assert.NoError(t, err) + assert.Equal(t, int32(2), jsonVersion) jsonQuery, err = queries.GetQuery(ctx, jsonQueryID) assert.NoError(t, err) @@ -149,7 +152,14 @@ func TestQueries(t *testing.T) { }) assert.NoError(t, err) - err = queries.AddQueryConfig(ctx, &repository.AddQueryConfigParams{ + err = queries.SetQueryConfig(ctx, &repository.SetQueryConfigParams{ + Queryid: jsonQueryID, + Config: []byte(`{"second":"key"}`), + Addedversion: 2, + }) + assert.NoError(t, err) + + err = queries.SetQueryConfig(ctx, &repository.SetQueryConfigParams{ Queryid: jsonQueryID, Config: jsonConfig, Addedversion: 1, @@ -163,18 +173,12 @@ func TestQueries(t *testing.T) { assert.NoError(t, err) assert.Equal(t, jsonConfig, jsonQueryConfig.Config) - removeV = 2 - err = queries.RemoveQueryConfig(ctx, &repository.RemoveQueryConfigParams{ - Queryid: jsonQueryID, - Removedversion: &removeV, + jsonQueryConfig, err = queries.GetQueryConfig(ctx, &repository.GetQueryConfigParams{ + Queryid: jsonQueryID, + Addedversion: 2, }) assert.NoError(t, err) - - _, err = queries.GetQueryConfig(ctx, &repository.GetQueryConfigParams{ - Queryid: jsonQueryID, - Addedversion: jsonQuery.Activeversion, - }) - assert.EqualError(t, err, "no rows in result set") + assert.Equal(t, []byte(`{"second": "key"}`), jsonQueryConfig.Config) jsonQuery, err = queries.GetQuery(ctx, jsonQueryID) assert.NoError(t, err) @@ -246,9 +250,9 @@ func TestQueryDependencyTree(t *testing.T) { assert.NoError(t, err) collID, err := queries.CreateCollector(ctx, jobID) assert.NoError(t, err) - err = queries.AddLatestCollectorVersion(ctx, collID) + _, err = queries.AddLatestCollectorVersion(ctx, collID) assert.NoError(t, err) - err = queries.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Collectorid: collID, Versionid: 1, }) @@ -271,7 +275,7 @@ func TestQueryDependencyTree(t *testing.T) { jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, jsonQueryID) + _, err = queries.AddLatestQueryVersion(ctx, jsonQueryID) assert.NoError(t, err) dependents, err = queries.ListQueryDirectDependentsByDocumentID(ctx, &repository.ListQueryDirectDependentsByDocumentIDParams{ @@ -324,7 +328,7 @@ func TestQueryDependencyTree(t *testing.T) { secondJsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, secondJsonQueryID) + _, err = queries.AddLatestQueryVersion(ctx, secondJsonQueryID) assert.NoError(t, err) dependents, err = queries.ListQueryDirectDependentsByDocumentID(ctx, &repository.ListQueryDirectDependentsByDocumentIDParams{ @@ -519,9 +523,9 @@ func TestListQueryJobs(t *testing.T) { assert.NoError(t, err) collOneID, err := queries.CreateCollector(ctx, jobOneID) assert.NoError(t, err) - err = queries.AddLatestCollectorVersion(ctx, collOneID) + _, err = queries.AddLatestCollectorVersion(ctx, collOneID) assert.NoError(t, err) - err = queries.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Collectorid: collOneID, Versionid: 1, }) @@ -542,9 +546,9 @@ func TestListQueryJobs(t *testing.T) { assert.NoError(t, err) collTwoID, err := queries.CreateCollector(ctx, jobTwoID) assert.NoError(t, err) - err = queries.AddLatestCollectorVersion(ctx, collTwoID) + _, err = queries.AddLatestCollectorVersion(ctx, collTwoID) assert.NoError(t, err) - err = queries.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Collectorid: collTwoID, Versionid: 1, }) @@ -567,9 +571,9 @@ func TestListQueryJobs(t *testing.T) { assert.NoError(t, err) collThreeID, err := queries.CreateCollector(ctx, jobThreeID) assert.NoError(t, err) - err = queries.AddLatestCollectorVersion(ctx, collThreeID) + _, err = queries.AddLatestCollectorVersion(ctx, collThreeID) assert.NoError(t, err) - err = queries.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Collectorid: collThreeID, Versionid: 1, }) @@ -588,7 +592,7 @@ func TestListQueryJobs(t *testing.T) { jsonID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, jsonID) + _, err = queries.AddLatestQueryVersion(ctx, jsonID) assert.NoError(t, err) err = queries.AddRequiredQuery(ctx, &repository.AddRequiredQueryParams{ Queryid: jsonID, diff --git a/internal/database/repository/result.sql.go b/internal/database/repository/result.sql.go index 7be7b9f2..a3143323 100644 --- a/internal/database/repository/result.sql.go +++ b/internal/database/repository/result.sql.go @@ -61,13 +61,15 @@ docs as ( codeVersions as ( SELECT d.id as documentId, - coalesce(ccv.minCleanVersion, 1) as minCleanVersion, - coalesce(ccv.minTextVersion, 1) as minTextVersion + coalesce(ccv.versionId, 1) as minCleanVersion, + coalesce(ctv.versionId, 1) as minTextVersion FROM docs as d LEFT JOIN collectors as c on c.jobId = d.jobId LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId - LEFT JOIN collectorCodeVersions as ccv on c.id = ccv.collectorId + LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + LEFT JOIN collectorMinTextVersions AS ctv ON c.id = ctv.collectorId + and isInVersion(av.id, ctv.addedVersion, ctv.removedVersion) LIMIT 1 ), latestVersions AS ( @@ -129,13 +131,15 @@ type ListQueryRequirementValuesRow struct { // codeVersions as ( // SELECT // d.id as documentId, -// coalesce(ccv.minCleanVersion, 1) as minCleanVersion, -// coalesce(ccv.minTextVersion, 1) as minTextVersion +// coalesce(ccv.versionId, 1) as minCleanVersion, +// coalesce(ctv.versionId, 1) as minTextVersion // FROM docs as d // LEFT JOIN collectors as c on c.jobId = d.jobId // LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId -// LEFT JOIN collectorCodeVersions as ccv on c.id = ccv.collectorId +// LEFT JOIN collectorMinCleanVersions AS ccv ON c.id = ccv.collectorId // and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) +// LEFT JOIN collectorMinTextVersions AS ctv ON c.id = ctv.collectorId +// and isInVersion(av.id, ctv.addedVersion, ctv.removedVersion) // LIMIT 1 // ), // latestVersions AS ( diff --git a/internal/database/repository/result_test.go b/internal/database/repository/result_test.go index 134d97a6..c019b523 100644 --- a/internal/database/repository/result_test.go +++ b/internal/database/repository/result_test.go @@ -32,7 +32,7 @@ func TestResults(t *testing.T) { jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, jsonQueryID) + _, err = queries.AddLatestQueryVersion(ctx, jsonQueryID) assert.NoError(t, err) err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{ Queryid: jsonQueryID, @@ -116,16 +116,16 @@ func TestResultValues(t *testing.T) { contextQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeContextFull)) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, jsonQueryID) + _, err = queries.AddLatestQueryVersion(ctx, jsonQueryID) assert.NoError(t, err) err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{ Queryid: jsonQueryID, Versionid: 1, }) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, contextQueryID) + _, err = queries.AddLatestQueryVersion(ctx, contextQueryID) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, contextQueryID) + _, err = queries.AddLatestQueryVersion(ctx, contextQueryID) assert.NoError(t, err) err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{ Queryid: contextQueryID, @@ -292,9 +292,9 @@ func TestUnsyncedNoDepsQueries(t *testing.T) { assert.NoError(t, err) collectorId, err := queries.CreateCollector(ctx, jobId) assert.NoError(t, err) - err = queries.AddLatestCollectorVersion(ctx, collectorId) + _, err = queries.AddLatestCollectorVersion(ctx, collectorId) assert.NoError(t, err) - err = queries.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Collectorid: collectorId, Versionid: 1, }) @@ -314,14 +314,14 @@ func TestUnsyncedNoDepsQueries(t *testing.T) { assert.NoError(t, err) jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, jsonQueryID) + _, err = queries.AddLatestQueryVersion(ctx, jsonQueryID) assert.NoError(t, err) err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{ Queryid: jsonQueryID, Versionid: 1, }) assert.NoError(t, err) - err = queries.AddLatestQueryVersion(ctx, contextQueryID) + _, err = queries.AddLatestQueryVersion(ctx, contextQueryID) assert.NoError(t, err) err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{ Queryid: contextQueryID, @@ -424,7 +424,7 @@ func TestUnsyncedNoDepsQueries(t *testing.T) { assert.NoError(t, err) assert.Len(t, qs, 0) - err = queries.AddLatestQueryVersion(ctx, jsonQueryID) + _, err = queries.AddLatestQueryVersion(ctx, jsonQueryID) assert.NoError(t, err) err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{ Queryid: jsonQueryID, diff --git a/internal/database/repository/text.sql.go b/internal/database/repository/text.sql.go index 2fd47281..502eb486 100644 --- a/internal/database/repository/text.sql.go +++ b/internal/database/repository/text.sql.go @@ -40,8 +40,10 @@ SELECT dc.documentId, dc.bucket, dc.key, dc.version FROM documentTextExtractions AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minTextVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinTextVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ORDER BY d.id DESC LIMIT 1 ` @@ -58,8 +60,10 @@ type GetDocumentTextEntryRow struct { // FROM documentTextExtractions AS dc // JOIN documents AS d ON d.id = dc.documentId // LEFT JOIN collectors as c ON d.jobId = c.jobId -// LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId -// WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minTextVersion, 1) +// LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId +// LEFT JOIN collectorMinTextVersions AS ccv ON c.id = ccv.collectorId +// and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) +// WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) // ORDER BY d.id DESC LIMIT 1 func (q *Queries) GetDocumentTextEntry(ctx context.Context, documentid pgtype.UUID) (*GetDocumentTextEntryRow, error) { row := q.db.QueryRow(ctx, getDocumentTextEntry, documentid) @@ -79,8 +83,10 @@ SELECT EXISTS( FROM documentTextExtractions AS dc JOIN documents AS d ON d.id = dc.documentId LEFT JOIN collectors as c ON d.jobId = c.jobId - LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId - WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minTextVersion, 1) + LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId + LEFT JOIN collectorMinTextVersions AS ccv ON c.id = ccv.collectorId + and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) + WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) ) ` @@ -91,8 +97,10 @@ SELECT EXISTS( // FROM documentTextExtractions AS dc // JOIN documents AS d ON d.id = dc.documentId // LEFT JOIN collectors as c ON d.jobId = c.jobId -// LEFT JOIN collectorCodeVersions as cv ON c.id = cv.collectorId -// WHERE dc.documentId = $1 and dc.version >= coalesce(cv.minTextVersion, 1) +// LEFT JOIN collectorCurrentActiveVersions as av on c.id = av.collectorId +// LEFT JOIN collectorMinTextVersions AS ccv ON c.id = ccv.collectorId +// and isInVersion(av.id, ccv.addedVersion, ccv.removedVersion) +// WHERE dc.documentId = $1 and dc.version >= coalesce(ccv.versionId, 1) // ) func (q *Queries) IsDocumentTextExtracted(ctx context.Context, documentid pgtype.UUID) (bool, error) { row := q.db.QueryRow(ctx, isDocumentTextExtracted, documentid) diff --git a/internal/job/collector/create.go b/internal/job/collector/create.go index 4113680a..c46d80a9 100644 --- a/internal/job/collector/create.go +++ b/internal/job/collector/create.go @@ -111,13 +111,12 @@ func (s *Service) submitCreate(ctx context.Context, params *dbCreateParams) (uui } dbID = dID - err = qtx.AddLatestCollectorVersion(ctx, dbID) + version, err := qtx.AddLatestCollectorVersion(ctx, dbID) if err != nil { return err } - version := int32(1) - err = qtx.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err = qtx.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Collectorid: dbID, Versionid: version, }) @@ -125,12 +124,22 @@ func (s *Service) submitCreate(ctx context.Context, params *dbCreateParams) (uui return err } - if params.MinCleanVersion != nil || params.MinTextVersion != nil { - err = qtx.AddCollectorCodeVersion(ctx, &repository.AddCollectorCodeVersionParams{ - Collectorid: dbID, - Mincleanversion: validation.GetUpdatedValue(1, params.MinCleanVersion), - Mintextversion: validation.GetUpdatedValue(1, params.MinTextVersion), - Addedversion: version, + if params.MinCleanVersion != nil { + err = qtx.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{ + Collectorid: dbID, + Versionid: *params.MinCleanVersion, + Addedversion: version, + }) + if err != nil { + return err + } + } + + if params.MinTextVersion != nil { + err = qtx.SetCollectorTextVersion(ctx, &repository.SetCollectorTextVersionParams{ + Collectorid: dbID, + Versionid: *params.MinTextVersion, + Addedversion: version, }) if err != nil { return err diff --git a/internal/job/collector/create_test.go b/internal/job/collector/create_test.go index 646928c3..d8e93e4e 100644 --- a/internal/job/collector/create_test.go +++ b/internal/job/collector/create_test.go @@ -48,11 +48,15 @@ func TestCreate(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(id)), ) - pool.ExpectExec("name: AddLatestCollectorVersion :exec").WithArgs(database.MustToDBUUID(id)). + pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(id)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1)). + pool.ExpectExec("name: SetCollectorCleanVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1), *create.MinCleanVersion). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddCollectorCodeVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1), *create.MinCleanVersion, *create.MinTextVersion). + pool.ExpectExec("name: SetCollectorTextVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1), *create.MinTextVersion). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectExec("name: AddCollectorQuery :exec").WithArgs(database.MustToDBUUID(id), "example_key", database.MustToDBUUID((*create.Fields)["example_key"]), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) diff --git a/internal/job/collector/createprivate_test.go b/internal/job/collector/createprivate_test.go index 0231b2b7..6d5562b7 100644 --- a/internal/job/collector/createprivate_test.go +++ b/internal/job/collector/createprivate_test.go @@ -96,11 +96,15 @@ func TestSubmitCreate(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(id)), ) - pool.ExpectExec("name: AddLatestCollectorVersion :exec").WithArgs(database.MustToDBUUID(id)). + pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(id)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1)). + pool.ExpectExec("name: SetCollectorCleanVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1), *params.MinCleanVersion). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddCollectorCodeVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1), *params.MinCleanVersion, *params.MinTextVersion). + pool.ExpectExec("name: SetCollectorTextVersion :exec").WithArgs(database.MustToDBUUID(id), int32(1), *params.MinTextVersion). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectExec("name: AddCollectorQuery :exec").WithArgs(database.MustToDBUUID(id), "example_key", (*params.Fields)["example_key"], int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) diff --git a/internal/job/collector/update/update.go b/internal/job/collector/update/update.go index 5ca0f8eb..9e25730f 100644 --- a/internal/job/collector/update/update.go +++ b/internal/job/collector/update/update.go @@ -113,29 +113,26 @@ func (s *Service) normalizeCodeVersions(current *collector.Collector, params *Up return errors.New("current collector required") } - if params == nil || params.MinCleanVersion == nil && params.MinTextVersion == nil { + if params == nil { return nil } - if (params.MinCleanVersion == nil || *params.MinCleanVersion == current.MinCleanVersion) && - (params.MinTextVersion == nil || *params.MinTextVersion == current.MinTextVersion) { + if params.MinCleanVersion != nil && *params.MinCleanVersion == current.MinCleanVersion { params.MinCleanVersion = nil - params.MinTextVersion = nil - return nil } - if params.MinCleanVersion == nil { - params.MinCleanVersion = ¤t.MinCleanVersion - } else { + if params.MinCleanVersion != nil { err := s.svc.CleanVersion.IsValidVersion(*params.MinCleanVersion) if err != nil { return err } } - if params.MinTextVersion == nil { - params.MinTextVersion = ¤t.MinTextVersion - } else { + if params.MinTextVersion != nil && *params.MinTextVersion == current.MinTextVersion { + params.MinTextVersion = nil + } + + if params.MinTextVersion != nil { err := s.svc.TextVersion.IsValidVersion(*params.MinTextVersion) if err != nil { return err @@ -194,15 +191,16 @@ func (s *Service) submitUpdate(ctx context.Context, current *collector.Collector } onlyactive := validation.AreAllPointersNilExcept(params, activeName) + var latestVersion int32 if !onlyactive { - err := qtx.AddLatestCollectorVersion(ctx, id) + latestVersion, err = qtx.AddLatestCollectorVersion(ctx, id) if err != nil { return err } } if params.ActiveVersion != nil { - err := qtx.AddActiveCollectorVersion(ctx, &repository.AddActiveCollectorVersionParams{ + err := qtx.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Collectorid: id, Versionid: *params.ActiveVersion, }) @@ -211,22 +209,22 @@ func (s *Service) submitUpdate(ctx context.Context, current *collector.Collector } } - latestVersion := current.LatestVersion + 1 - - if params.MinCleanVersion != nil || params.MinTextVersion != nil { - err := qtx.RemoveCollectorCodeVersion(ctx, &repository.RemoveCollectorCodeVersionParams{ - Collectorid: id, - Removedversion: &latestVersion, + if params.MinCleanVersion != nil { + err = qtx.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{ + Collectorid: id, + Versionid: *params.MinCleanVersion, + Addedversion: latestVersion, }) if err != nil { return err } + } - err = qtx.AddCollectorCodeVersion(ctx, &repository.AddCollectorCodeVersionParams{ - Collectorid: id, - Mincleanversion: *params.MinCleanVersion, - Mintextversion: *params.MinTextVersion, - Addedversion: latestVersion, + if params.MinTextVersion != nil { + err = qtx.SetCollectorTextVersion(ctx, &repository.SetCollectorTextVersionParams{ + Collectorid: id, + Versionid: *params.MinTextVersion, + Addedversion: latestVersion, }) if err != nil { return err diff --git a/internal/job/collector/update/update_test.go b/internal/job/collector/update/update_test.go index e32553f9..12f18627 100644 --- a/internal/job/collector/update/update_test.go +++ b/internal/job/collector/update/update_test.go @@ -64,13 +64,13 @@ func TestUpdate(t *testing.T) { ) pool.ExpectBeginTx(pgx.TxOptions{}) rv := current.LatestVersion + 1 - pool.ExpectExec("name: AddLatestCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID)). + pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(current.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(rv), + ) + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: RemoveCollectorCodeVersion :exec").WithArgs(&rv, database.MustToDBUUID(current.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddCollectorCodeVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(5), *update.MinCleanVersion, int32(0)). + pool.ExpectExec("name: SetCollectorCleanVersion :exec").WithArgs(database.MustToDBUUID(current.ID), rv, *update.MinCleanVersion). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() diff --git a/internal/job/collector/update/updateprivate_test.go b/internal/job/collector/update/updateprivate_test.go index e0c8854d..aa1cfc7e 100644 --- a/internal/job/collector/update/updateprivate_test.go +++ b/internal/job/collector/update/updateprivate_test.go @@ -219,13 +219,15 @@ func TestSubmitUpdate(t *testing.T) { pool.ExpectBeginTx(pgx.TxOptions{}) rv := int32(2) - pool.ExpectExec("name: AddLatestCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID)). + pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(current.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(rv), + ) + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). + pool.ExpectExec("name: SetCollectorCleanVersion :exec").WithArgs(database.MustToDBUUID(current.ID), rv, *params.MinCleanVersion). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: RemoveCollectorCodeVersion :exec").WithArgs(&rv, database.MustToDBUUID(current.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddCollectorCodeVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2), *params.MinCleanVersion, *params.MinTextVersion). + pool.ExpectExec("name: SetCollectorTextVersion :exec").WithArgs(database.MustToDBUUID(current.ID), rv, *params.MinTextVersion). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectExec("name: RemoveCollectorQuery :exec").WithArgs(&rv, database.MustToDBUUID(current.Fields["original_key"]), database.MustToDBUUID(current.ID)). WillReturnResult(pgxmock.NewResult("", 1)) @@ -274,7 +276,7 @@ func TestSubmitUpdate(t *testing.T) { } pool.ExpectBeginTx(pgx.TxOptions{}) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.ID), int32(2)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() @@ -393,7 +395,7 @@ func TestNormalizeCodeVersions(t *testing.T) { err := svc.normalizeCodeVersions(¤t, &update) assert.NoError(t, err) assert.Equal(t, cv, *update.MinCleanVersion) - assert.Equal(t, int32(0), *update.MinTextVersion) + assert.Nil(t, update.MinTextVersion) }) t.Run("valid text", func(t *testing.T) { @@ -404,7 +406,7 @@ func TestNormalizeCodeVersions(t *testing.T) { update.MinTextVersion = &tv err := svc.normalizeCodeVersions(¤t, &update) assert.NoError(t, err) - assert.Equal(t, int32(0), *update.MinCleanVersion) + assert.Nil(t, update.MinCleanVersion) assert.Equal(t, tv, *update.MinTextVersion) }) diff --git a/internal/job/create_test.go b/internal/job/create_test.go index d01b8689..b0432206 100644 --- a/internal/job/create_test.go +++ b/internal/job/create_test.go @@ -45,9 +45,11 @@ func TestCreate(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(collId)), ) - pool.ExpectExec("name: AddLatestCollectorVersion :exec").WithArgs(database.MustToDBUUID(collId)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(collId), int32(1)). + pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(collId)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) + pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(collId), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() diff --git a/internal/query/create.go b/internal/query/create.go index 800b6d97..6c91fa3e 100644 --- a/internal/query/create.go +++ b/internal/query/create.go @@ -64,11 +64,10 @@ func (s *Service) submitCreate(ctx context.Context, entity *resultprocessor.Crea return err } - err = qtx.AddLatestQueryVersion(ctx, dbID) + version, err := qtx.AddLatestQueryVersion(ctx, dbID) if err != nil { return err } - version := int32(1) err = qtx.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{ Queryid: dbID, @@ -92,7 +91,7 @@ func (s *Service) submitCreate(ctx context.Context, entity *resultprocessor.Crea } if query.Config != nil { - err = qtx.AddQueryConfig(ctx, &repository.AddQueryConfigParams{ + err = qtx.SetQueryConfig(ctx, &repository.SetQueryConfigParams{ Queryid: dbID, Config: *query.Config, Addedversion: version, diff --git a/internal/query/create_test.go b/internal/query/create_test.go index 00a0e906..30f44ed3 100644 --- a/internal/query/create_test.go +++ b/internal/query/create_test.go @@ -55,15 +55,17 @@ func TestCreate(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(q.ID)), ) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(q.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) pool.ExpectExec("name: AddActiveQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) for _, req := range *create.RequiredQueryIDs { pool.ExpectExec("name: AddRequiredQuery :exec").WithArgs(database.MustToDBUUID(q.ID), database.MustToDBUUID(req), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) } - pool.ExpectExec("name: AddQueryConfig :exec").WithArgs(database.MustToDBUUID(q.ID), []byte(*create.Config), int32(1)). + pool.ExpectExec("name: SetQueryConfig :exec").WithArgs(database.MustToDBUUID(q.ID), []byte(*create.Config), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() @@ -100,8 +102,10 @@ func TestCreateMinimal(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(q.ID)), ) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(q.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) pool.ExpectExec("name: AddActiveQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() diff --git a/internal/query/createprivate_test.go b/internal/query/createprivate_test.go index e244c787..c2c1c582 100644 --- a/internal/query/createprivate_test.go +++ b/internal/query/createprivate_test.go @@ -109,15 +109,17 @@ func TestSubmitCreate(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(q.ID)), ) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(q.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) pool.ExpectExec("name: AddActiveQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) for _, req := range *create.RequiredQueryIDs { pool.ExpectExec("name: AddRequiredQuery :exec").WithArgs(database.MustToDBUUID(q.ID), database.MustToDBUUID(req), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) } - pool.ExpectExec("name: AddQueryConfig :exec").WithArgs(database.MustToDBUUID(q.ID), []byte(*create.Config), int32(1)). + pool.ExpectExec("name: SetQueryConfig :exec").WithArgs(database.MustToDBUUID(q.ID), []byte(*create.Config), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() @@ -154,8 +156,10 @@ func TestSubmitCreateNoReqsOrConfig(t *testing.T) { pgxmock.NewRows([]string{"id"}). AddRow(database.MustToDBUUID(q.ID)), ) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(q.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) pool.ExpectExec("name: AddActiveQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID), int32(1)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() diff --git a/internal/query/update/update.go b/internal/query/update/update.go index 05e64fb4..e6a8309d 100644 --- a/internal/query/update/update.go +++ b/internal/query/update/update.go @@ -134,8 +134,9 @@ func (s *Service) submitUpdate(ctx context.Context, current *query.Query, entity } onlyactive := validation.AreAllPointersNilExcept(entity, activeName) + var latestVersion int32 if !onlyactive { - err := q.AddLatestQueryVersion(ctx, id) + latestVersion, err = q.AddLatestQueryVersion(ctx, id) if err != nil { return err } @@ -151,8 +152,6 @@ func (s *Service) submitUpdate(ctx context.Context, current *query.Query, entity } } - latestVersion := current.LatestVersion + 1 - if entity.RequiredQueryIDs != nil { addIDs := getSetDifference(entity.RequiredQueryIDs, current.RequiredQueryIDs) for _, qID := range addIDs { @@ -180,15 +179,7 @@ func (s *Service) submitUpdate(ctx context.Context, current *query.Query, entity } if entity.Config != nil && *entity.Config != "" { - err := q.RemoveQueryConfig(ctx, &repository.RemoveQueryConfigParams{ - Queryid: id, - Removedversion: &latestVersion, - }) - if err != nil { - return err - } - - err = q.AddQueryConfig(ctx, &repository.AddQueryConfigParams{ + err = q.SetQueryConfig(ctx, &repository.SetQueryConfigParams{ Queryid: id, Config: []byte(*entity.Config), Addedversion: latestVersion, diff --git a/internal/query/update/update_test.go b/internal/query/update/update_test.go index bbdf3e8c..c2177a8c 100644 --- a/internal/query/update/update_test.go +++ b/internal/query/update/update_test.go @@ -63,13 +63,13 @@ func TestUpdate(t *testing.T) { AddRow(database.MustToDBUUID(existing.ID), repository.QuerytypeJsonExtractor, existing.ActiveVersion, existing.LatestVersion, []byte(config), []pgtype.UUID{}), ) pool.ExpectBeginTx(pgx.TxOptions{}) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(update.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(update.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(2)), + ) pool.ExpectExec("name: AddActiveQueryVersion :exec").WithArgs(database.MustToDBUUID(update.ID), av). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: RemoveQueryConfig :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(update.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddQueryConfig :exec").WithArgs(database.MustToDBUUID(update.ID), []byte(*update.Config), int32(2)). + pool.ExpectExec("name: SetQueryConfig :exec").WithArgs(database.MustToDBUUID(update.ID), []byte(*update.Config), int32(2)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() diff --git a/internal/query/update/updateprivate_test.go b/internal/query/update/updateprivate_test.go index 56a76ee1..c60e6a86 100644 --- a/internal/query/update/updateprivate_test.go +++ b/internal/query/update/updateprivate_test.go @@ -88,17 +88,17 @@ func TestSubmitUpdate(t *testing.T) { } pool.ExpectBeginTx(pgx.TxOptions{}) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(q.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(3)), + ) pool.ExpectExec("name: AddActiveQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID), aV). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectExec("name: AddRequiredQuery :exec").WithArgs(database.MustToDBUUID(update.ID), database.MustToDBUUID((*update.RequiredQueryIDs)[0]), pgxmock.AnyArg()). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectExec("name: RemoveRequiredQuery :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID((*q.RequiredQueryIDs)[0]), database.MustToDBUUID(update.ID)). WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: RemoveQueryConfig :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(update.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) - pool.ExpectExec("name: AddQueryConfig :exec").WithArgs(database.MustToDBUUID(update.ID), []byte(*update.Config), int32(3)). + pool.ExpectExec("name: SetQueryConfig :exec").WithArgs(database.MustToDBUUID(update.ID), []byte(*update.Config), int32(3)). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectCommit() @@ -179,8 +179,10 @@ func TestSubmitUpdateRequiredQueries(t *testing.T) { } pool.ExpectBeginTx(pgx.TxOptions{}) - pool.ExpectExec("name: AddLatestQueryVersion :exec").WithArgs(database.MustToDBUUID(q.ID)). - WillReturnResult(pgxmock.NewResult("", 1)) + pool.ExpectQuery("name: AddLatestQueryVersion :one").WithArgs(database.MustToDBUUID(update.ID)).WillReturnRows( + pgxmock.NewRows([]string{"version"}). + AddRow(int32(1)), + ) pool.ExpectExec("name: AddRequiredQuery :exec").WithArgs(database.MustToDBUUID(update.ID), database.MustToDBUUID((*update.RequiredQueryIDs)[0]), pgxmock.AnyArg()). WillReturnResult(pgxmock.NewResult("", 1)) pool.ExpectExec("name: AddRequiredQuery :exec").WithArgs(database.MustToDBUUID(update.ID), database.MustToDBUUID((*update.RequiredQueryIDs)[1]), pgxmock.AnyArg()).