Merged in feature/postprocessing (pull request #114)
Feature/postprocessing * tests * passtest * fixshorttests * mosttests * improvingbasedockerfile * testspeeds * testing * host * canparallel * clean * passfullsuite * singlepagemax * test * findfeatures * findstables * tbls * tablestoo * tablestoo * lateraltests * tableloc * cleanup * inlinetable * childids * cleanup * tests
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"queryorchestration/internal/serviceconfig"
|
||||
"queryorchestration/internal/serviceconfig/database"
|
||||
|
||||
"github.com/golang-migrate/migrate/v4"
|
||||
@@ -17,38 +16,52 @@ import (
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
func createDB(cfg database.ConfigProvider) error {
|
||||
connStr := fmt.Sprintf("%s?%s", cfg.GetDBBaseURI(), cfg.GetDBOptsString())
|
||||
func createDB(ctx context.Context, cfg database.ConfigProvider) error {
|
||||
slog.Debug("creating connection to admin database", "uri", cfg.GetDBAdminDBURI())
|
||||
|
||||
db, err := sql.Open(cfg.GetDBDriver(), connStr)
|
||||
db, err := sql.Open(cfg.GetDBDriver(), cfg.GetDBAdminDBURI())
|
||||
if err != nil {
|
||||
return fmt.Errorf("error opening admin database: %v", err)
|
||||
}
|
||||
|
||||
slog.Debug("pinging admin database", "uri", cfg.GetDBAdminDBURI())
|
||||
|
||||
err = db.PingContext(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error pinging admin database: %v", err)
|
||||
}
|
||||
|
||||
slog.Debug("creating admin database", "uri", cfg.GetDBAdminDBURI())
|
||||
|
||||
_, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", cfg.GetDBName()))
|
||||
if err != nil {
|
||||
slog.Info("database not created", "name", cfg.GetDBName(), "error", err.Error())
|
||||
} else {
|
||||
slog.Info("database created", "name", cfg.GetDBName())
|
||||
}
|
||||
|
||||
slog.Debug("creating connection to database", "uri", cfg.GetDBAdminDBURI())
|
||||
|
||||
db, err = sql.Open(cfg.GetDBDriver(), cfg.GetDBURI())
|
||||
if err != nil {
|
||||
return fmt.Errorf("error opening database: %v", err)
|
||||
}
|
||||
|
||||
err = db.Ping()
|
||||
slog.Debug("pinging database", "uri", cfg.GetDBAdminDBURI())
|
||||
|
||||
err = db.PingContext(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error pinging database: %v", err)
|
||||
}
|
||||
|
||||
rs, err := db.Query(fmt.Sprintf("SELECT 'CREATE DATABASE %s' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '%s')", cfg.GetDBName(), cfg.GetDBName()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating database: %v", err)
|
||||
}
|
||||
|
||||
if rs.Next() {
|
||||
slog.Info("database created", "name", cfg.GetDBName())
|
||||
} else {
|
||||
slog.Info("database already exists", "name", cfg.GetDBName())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
//go:embed migrations/*.up.sql
|
||||
var migrations embed.FS
|
||||
|
||||
func RunMigrations(ctx context.Context, cfg serviceconfig.ConfigProvider) error {
|
||||
err := createDB(cfg)
|
||||
func RunMigrations(ctx context.Context, cfg database.ConfigProvider) error {
|
||||
err := createDB(ctx, cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ CREATE TYPE cleanFailType AS ENUM (
|
||||
'invalid_read',
|
||||
'invalid_read_pages',
|
||||
'zero_page_count',
|
||||
'large_page_count',
|
||||
'large_file',
|
||||
'small_dimensions',
|
||||
'large_dimensions',
|
||||
@@ -50,30 +49,20 @@ CREATE TABLE documentCleanEntries (
|
||||
foreign key (cleanId) references documentCleans(id)
|
||||
);
|
||||
|
||||
CREATE TABLE documentTextTriggerExtractions (
|
||||
id uuid primary key DEFAULT uuid_generate_v7(),
|
||||
cleanId uuid not null,
|
||||
version bigint not null,
|
||||
createdAt timestamp not null,
|
||||
part unsignedsmallint not null,
|
||||
textractJobId text,
|
||||
foreign key (cleanId) references documentCleans(id)
|
||||
);
|
||||
|
||||
CREATE TABLE documentTextExtractions (
|
||||
id uuid primary key DEFAULT uuid_generate_v7(),
|
||||
cleanId uuid not null,
|
||||
bucket text not null,
|
||||
key text not null,
|
||||
hash text not null,
|
||||
createdAt timestamp not null,
|
||||
part unsignedsmallint not null
|
||||
part unsignedsmallint not null,
|
||||
foreign key (cleanId) references documentCleans(id)
|
||||
);
|
||||
|
||||
CREATE TABLE documentTextExtractionEntries (
|
||||
id uuid primary key DEFAULT uuid_generate_v7(),
|
||||
textId uuid not null,
|
||||
triggerId uuid not null,
|
||||
version bigint not null,
|
||||
foreign key (triggerId) references documentTextTriggerExtractions(id),
|
||||
foreign key (textId) references documentTextExtractions(id)
|
||||
);
|
||||
|
||||
@@ -54,25 +54,20 @@ WHERE row_num = 1;
|
||||
CREATE VIEW currentTextEntries as
|
||||
WITH RankedExtractions AS (
|
||||
SELECT
|
||||
dte.id,
|
||||
extract.id,
|
||||
cc.documentId,
|
||||
dte.bucket,
|
||||
dte.key,
|
||||
dte.hash,
|
||||
trigger.id as triggerId,
|
||||
trigger.cleanId,
|
||||
trigger.textractJobId,
|
||||
trigger.version as triggerVersion,
|
||||
extract.bucket,
|
||||
extract.key,
|
||||
extract.hash,
|
||||
extract.cleanId,
|
||||
dtee.version as extractionVersion,
|
||||
ROW_NUMBER() OVER (PARTITION BY cc.documentId ORDER BY dte.id DESC) as row_num
|
||||
ROW_NUMBER() OVER (PARTITION BY cc.documentId ORDER BY dtee.id DESC) as row_num
|
||||
FROM documents d
|
||||
JOIN currentCleanEntries cc on cc.documentId = d.id
|
||||
JOIN currentCollectorMinTextVersions ctv ON ctv.clientId = d.clientId
|
||||
JOIN documentTextTriggerExtractions trigger ON trigger.cleanId = cc.id
|
||||
AND trigger.version >= ctv.minTextVersion
|
||||
JOIN documentTextExtractionEntries dtee on dtee.triggerId = trigger.id
|
||||
JOIN documentTextExtractions extract ON extract.cleanId = cc.id
|
||||
JOIN documentTextExtractionEntries dtee on dtee.textId = extract.id
|
||||
AND dtee.version >= ctv.minTextVersion
|
||||
JOIN documentTextExtractions dte ON dte.id = dtee.textId
|
||||
)
|
||||
SELECT
|
||||
id,
|
||||
@@ -81,9 +76,6 @@ SELECT
|
||||
key,
|
||||
hash,
|
||||
cleanId,
|
||||
triggerId,
|
||||
textractJobId,
|
||||
triggerVersion,
|
||||
extractionVersion
|
||||
FROM RankedExtractions
|
||||
WHERE row_num = 1;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package database_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
migrations "queryorchestration/internal/database"
|
||||
@@ -16,23 +15,18 @@ func TestRunMigrations(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
ctx := t.Context()
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{})
|
||||
defer cleanup()
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
||||
|
||||
err := migrations.RunMigrations(ctx, cfg)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestRunMigrationsNoDB(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
cfg.SetDBUser("invalid_user")
|
||||
cfg.SetDBSecret("invalid_pass")
|
||||
cfg.SetDBHost("invalid_host")
|
||||
@@ -40,6 +34,6 @@ func TestRunMigrationsNoDB(t *testing.T) {
|
||||
cfg.SetDBName("invalid_name")
|
||||
cfg.SetDBNoSSL(true)
|
||||
|
||||
err := migrations.RunMigrations(ctx, cfg)
|
||||
err := migrations.RunMigrations(t.Context(), cfg)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"queryorchestration/internal/serviceconfig/database"
|
||||
@@ -9,10 +10,11 @@ import (
|
||||
)
|
||||
|
||||
func TestCreateDB(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
cfg := &database.DBConfig{
|
||||
DBHost: "invalid_value",
|
||||
}
|
||||
|
||||
err := createDB(cfg)
|
||||
err := createDB(ctx, cfg)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
@@ -6,24 +6,18 @@ SELECT EXISTS(
|
||||
-- name: GetDocumentTextExtractionByHash :one
|
||||
SELECT id FROM currentTextEntries WHERE cleanId = @cleanEntryId and hash = @hash;
|
||||
|
||||
-- name: AddDocumentTextTrigger :one
|
||||
INSERT INTO documentTextTriggerExtractions
|
||||
(cleanId, version, createdAt, part) VALUES
|
||||
($1, $2, $3, $4)
|
||||
returning id;
|
||||
|
||||
-- name: GetTextractOutputCurrentPart :one
|
||||
WITH client as (
|
||||
select id from clients where id = @clientId
|
||||
),
|
||||
parts as (
|
||||
SELECT triggers.part
|
||||
SELECT extract.part
|
||||
FROM client as c
|
||||
JOIN documents as docs on docs.clientId = c.id
|
||||
JOIN documentCleans as clean on docs.id = clean.documentId
|
||||
JOIN documentTextTriggerExtractions as triggers
|
||||
on triggers.cleanId = clean.id
|
||||
WHERE date(triggers.createdAt) = date(@queryDate)
|
||||
JOIN documentTextExtractions as extract
|
||||
on extract.cleanId = clean.id
|
||||
WHERE date(extract.createdAt) = date(@queryDate)
|
||||
),
|
||||
max_part as (
|
||||
SELECT COALESCE(max(part), 0) as max_part_num FROM parts
|
||||
@@ -40,17 +34,12 @@ WITH client as (
|
||||
select id from clients where id = @clientId
|
||||
),
|
||||
parts as (
|
||||
SELECT extractions.part
|
||||
SELECT extract.part
|
||||
FROM client as c
|
||||
JOIN documents as docs on docs.clientId = c.id
|
||||
JOIN documentCleans as clean on docs.id = clean.documentId
|
||||
JOIN documentTextTriggerExtractions as triggers
|
||||
on triggers.cleanId = clean.id
|
||||
JOIN documentTextExtractionEntries as textEntries
|
||||
on textEntries.triggerId = triggers.id
|
||||
JOIN documentTextExtractions as extractions
|
||||
on extractions.id = textEntries.textId
|
||||
WHERE date(extractions.createdAt) = date(@queryDate)
|
||||
JOIN documentTextExtractions extract ON extract.cleanId = clean.id
|
||||
WHERE date(extract.createdAt) = date(@queryDate)
|
||||
),
|
||||
max_part as (
|
||||
SELECT COALESCE(max(part), 0) as max_part_num FROM parts
|
||||
@@ -62,30 +51,18 @@ FROM parts p
|
||||
RIGHT JOIN max_part mp ON p.part = mp.max_part_num
|
||||
GROUP BY p.part;
|
||||
|
||||
-- name: AddDocumentTextTriggerJobId :exec
|
||||
UPDATE documentTextTriggerExtractions
|
||||
SET textractJobId = @textractJobId
|
||||
WHERE id = @id;
|
||||
|
||||
-- name: GetDocumentTextTrigger :one
|
||||
SELECT dt.id, dt.cleanId, dt.version, dt.textractJobId, dc.documentId
|
||||
from documentTextTriggerExtractions as dt
|
||||
join documentCleans as dc on dt.cleanId = dc.id
|
||||
where dt.id = @triggerId;
|
||||
|
||||
-- name: AddDocumentText :one
|
||||
INSERT INTO documentTextExtractions
|
||||
(bucket, key, hash, createdAt, part)
|
||||
VALUES ($1, $2, $3, $4, $5)
|
||||
(cleanId, bucket, key, hash, createdAt, part)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)
|
||||
returning id;
|
||||
|
||||
-- name: AddDocumentTextEntry :exec
|
||||
INSERT INTO documentTextExtractionEntries
|
||||
(textId, triggerId, version)
|
||||
VALUES ($1, $2, $3);
|
||||
(textId, version)
|
||||
VALUES ($1, $2);
|
||||
|
||||
-- name: GetTextEntryByDocId :one
|
||||
SELECT id, documentId, bucket, key, hash, cleanId,
|
||||
triggerId, textractJobId, triggerVersion, extractionVersion
|
||||
SELECT id, documentId, bucket, key, hash, cleanId, extractionVersion
|
||||
FROM currentTextEntries
|
||||
WHERE documentId = @documentId;
|
||||
|
||||
@@ -13,17 +13,17 @@ import (
|
||||
)
|
||||
|
||||
func TestClean(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
|
||||
@@ -13,17 +13,17 @@ import (
|
||||
)
|
||||
|
||||
func TestClient(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
|
||||
@@ -15,17 +15,17 @@ import (
|
||||
)
|
||||
|
||||
func TestCollector(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
|
||||
@@ -13,17 +13,17 @@ import (
|
||||
)
|
||||
|
||||
func TestDocument(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ const (
|
||||
CleanfailtypeInvalidRead Cleanfailtype = "invalid_read"
|
||||
CleanfailtypeInvalidReadPages Cleanfailtype = "invalid_read_pages"
|
||||
CleanfailtypeZeroPageCount Cleanfailtype = "zero_page_count"
|
||||
CleanfailtypeLargePageCount Cleanfailtype = "large_page_count"
|
||||
CleanfailtypeLargeFile Cleanfailtype = "large_file"
|
||||
CleanfailtypeSmallDimensions Cleanfailtype = "small_dimensions"
|
||||
CleanfailtypeLargeDimensions Cleanfailtype = "large_dimensions"
|
||||
@@ -68,7 +67,6 @@ func (e Cleanfailtype) Valid() bool {
|
||||
CleanfailtypeInvalidRead,
|
||||
CleanfailtypeInvalidReadPages,
|
||||
CleanfailtypeZeroPageCount,
|
||||
CleanfailtypeLargePageCount,
|
||||
CleanfailtypeLargeFile,
|
||||
CleanfailtypeSmallDimensions,
|
||||
CleanfailtypeLargeDimensions,
|
||||
@@ -290,9 +288,6 @@ type Currenttextentry struct {
|
||||
Key string `db:"key"`
|
||||
Hash string `db:"hash"`
|
||||
Cleanid uuid.UUID `db:"cleanid"`
|
||||
Triggerid uuid.UUID `db:"triggerid"`
|
||||
Textractjobid *string `db:"textractjobid"`
|
||||
Triggerversion int64 `db:"triggerversion"`
|
||||
Extractionversion int64 `db:"extractionversion"`
|
||||
}
|
||||
|
||||
@@ -327,6 +322,7 @@ type Documententry struct {
|
||||
|
||||
type Documenttextextraction struct {
|
||||
ID uuid.UUID `db:"id"`
|
||||
Cleanid uuid.UUID `db:"cleanid"`
|
||||
Bucket string `db:"bucket"`
|
||||
Key string `db:"key"`
|
||||
Hash string `db:"hash"`
|
||||
@@ -335,19 +331,9 @@ type Documenttextextraction struct {
|
||||
}
|
||||
|
||||
type Documenttextextractionentry struct {
|
||||
ID uuid.UUID `db:"id"`
|
||||
Textid uuid.UUID `db:"textid"`
|
||||
Triggerid uuid.UUID `db:"triggerid"`
|
||||
Version int64 `db:"version"`
|
||||
}
|
||||
|
||||
type Documenttexttriggerextraction struct {
|
||||
ID uuid.UUID `db:"id"`
|
||||
Cleanid uuid.UUID `db:"cleanid"`
|
||||
Version int64 `db:"version"`
|
||||
Createdat pgtype.Timestamp `db:"createdat"`
|
||||
Part uint16 `db:"part"`
|
||||
Textractjobid *string `db:"textractjobid"`
|
||||
ID uuid.UUID `db:"id"`
|
||||
Textid uuid.UUID `db:"textid"`
|
||||
Version int64 `db:"version"`
|
||||
}
|
||||
|
||||
type Fullactivecollector struct {
|
||||
|
||||
@@ -14,17 +14,17 @@ import (
|
||||
)
|
||||
|
||||
func TestQueries(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -226,17 +226,17 @@ func TestQueries(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestQueryDependencyTree(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -447,17 +447,17 @@ func TestQueryDependencyTree(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestQueriesList(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -505,17 +505,17 @@ func TestQueriesList(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestListQueryClients(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
|
||||
@@ -16,17 +16,17 @@ import (
|
||||
)
|
||||
|
||||
func TestResults(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -97,9 +97,11 @@ func TestResults(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.False(t, issynced)
|
||||
|
||||
triggerId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Hash: "example",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -107,21 +109,9 @@ func TestResults(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Hash: "example",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -167,17 +157,17 @@ func TestResults(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestResultValues(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -274,9 +264,11 @@ func TestResultValues(t *testing.T) {
|
||||
Version: 1,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
triggerId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Hash: "example",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -284,21 +276,9 @@ func TestResultValues(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Hash: "example",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -393,17 +373,17 @@ func TestResultValues(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUnsyncedNoDepsQueries(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -498,9 +478,10 @@ func TestUnsyncedNoDepsQueries(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, qs, 0)
|
||||
|
||||
triggerId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -508,20 +489,9 @@ func TestUnsyncedNoDepsQueries(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -588,9 +558,10 @@ func TestUnsyncedNoDepsQueries(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, qs, 0)
|
||||
|
||||
triggerTwoId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
textTwoId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleantwoid,
|
||||
Version: 123,
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -598,20 +569,9 @@ func TestUnsyncedNoDepsQueries(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
textTwoId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Version: 1,
|
||||
Textid: textTwoId,
|
||||
Triggerid: triggerTwoId,
|
||||
Version: 1,
|
||||
Textid: textTwoId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
|
||||
@@ -15,17 +15,17 @@ import (
|
||||
)
|
||||
|
||||
func TestListClientDocumentIDs(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -120,17 +120,17 @@ func TestListClientDocumentIDs(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestClientSync(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, cleanup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer cleanup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -285,31 +285,21 @@ func TestClientSync(t *testing.T) {
|
||||
Fields: []byte(`{"first_key": null}`),
|
||||
}, docExternal)
|
||||
|
||||
triggerId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanId,
|
||||
Version: 123,
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
Hash: "example",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -467,16 +457,6 @@ func TestClientSync(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("update text entry", func(t *testing.T) {
|
||||
triggerId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
Cleanid: cleanId,
|
||||
Version: 123,
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
@@ -485,12 +465,12 @@ func TestClientSync(t *testing.T) {
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
Cleanid: cleanId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 1,
|
||||
Textid: textId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -594,16 +574,6 @@ func TestClientSync(t *testing.T) {
|
||||
Fields: []byte(`{"first_key": null}`),
|
||||
}, docExternal)
|
||||
|
||||
triggerThreeId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
Cleanid: cleanthreeid,
|
||||
Version: 123,
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
textThreeId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hello",
|
||||
@@ -612,12 +582,12 @@ func TestClientSync(t *testing.T) {
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
Cleanid: cleanthreeid,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Version: 1,
|
||||
Textid: textThreeId,
|
||||
Triggerid: triggerThreeId,
|
||||
Version: 1,
|
||||
Textid: textThreeId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
|
||||
@@ -14,12 +14,13 @@ import (
|
||||
|
||||
const addDocumentText = `-- name: AddDocumentText :one
|
||||
INSERT INTO documentTextExtractions
|
||||
(bucket, key, hash, createdAt, part)
|
||||
VALUES ($1, $2, $3, $4, $5)
|
||||
(cleanId, bucket, key, hash, createdAt, part)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)
|
||||
returning id
|
||||
`
|
||||
|
||||
type AddDocumentTextParams struct {
|
||||
Cleanid uuid.UUID `db:"cleanid"`
|
||||
Bucket string `db:"bucket"`
|
||||
Key string `db:"key"`
|
||||
Hash string `db:"hash"`
|
||||
@@ -30,11 +31,12 @@ type AddDocumentTextParams struct {
|
||||
// AddDocumentText
|
||||
//
|
||||
// INSERT INTO documentTextExtractions
|
||||
// (bucket, key, hash, createdAt, part)
|
||||
// VALUES ($1, $2, $3, $4, $5)
|
||||
// (cleanId, bucket, key, hash, createdAt, part)
|
||||
// VALUES ($1, $2, $3, $4, $5, $6)
|
||||
// returning id
|
||||
func (q *Queries) AddDocumentText(ctx context.Context, arg *AddDocumentTextParams) (uuid.UUID, error) {
|
||||
row := q.db.QueryRow(ctx, addDocumentText,
|
||||
arg.Cleanid,
|
||||
arg.Bucket,
|
||||
arg.Key,
|
||||
arg.Hash,
|
||||
@@ -48,76 +50,22 @@ func (q *Queries) AddDocumentText(ctx context.Context, arg *AddDocumentTextParam
|
||||
|
||||
const addDocumentTextEntry = `-- name: AddDocumentTextEntry :exec
|
||||
INSERT INTO documentTextExtractionEntries
|
||||
(textId, triggerId, version)
|
||||
VALUES ($1, $2, $3)
|
||||
(textId, version)
|
||||
VALUES ($1, $2)
|
||||
`
|
||||
|
||||
type AddDocumentTextEntryParams struct {
|
||||
Textid uuid.UUID `db:"textid"`
|
||||
Triggerid uuid.UUID `db:"triggerid"`
|
||||
Version int64 `db:"version"`
|
||||
Textid uuid.UUID `db:"textid"`
|
||||
Version int64 `db:"version"`
|
||||
}
|
||||
|
||||
// AddDocumentTextEntry
|
||||
//
|
||||
// INSERT INTO documentTextExtractionEntries
|
||||
// (textId, triggerId, version)
|
||||
// VALUES ($1, $2, $3)
|
||||
// (textId, version)
|
||||
// VALUES ($1, $2)
|
||||
func (q *Queries) AddDocumentTextEntry(ctx context.Context, arg *AddDocumentTextEntryParams) error {
|
||||
_, err := q.db.Exec(ctx, addDocumentTextEntry, arg.Textid, arg.Triggerid, arg.Version)
|
||||
return err
|
||||
}
|
||||
|
||||
const addDocumentTextTrigger = `-- name: AddDocumentTextTrigger :one
|
||||
INSERT INTO documentTextTriggerExtractions
|
||||
(cleanId, version, createdAt, part) VALUES
|
||||
($1, $2, $3, $4)
|
||||
returning id
|
||||
`
|
||||
|
||||
type AddDocumentTextTriggerParams struct {
|
||||
Cleanid uuid.UUID `db:"cleanid"`
|
||||
Version int64 `db:"version"`
|
||||
Createdat pgtype.Timestamp `db:"createdat"`
|
||||
Part uint16 `db:"part"`
|
||||
}
|
||||
|
||||
// AddDocumentTextTrigger
|
||||
//
|
||||
// INSERT INTO documentTextTriggerExtractions
|
||||
// (cleanId, version, createdAt, part) VALUES
|
||||
// ($1, $2, $3, $4)
|
||||
// returning id
|
||||
func (q *Queries) AddDocumentTextTrigger(ctx context.Context, arg *AddDocumentTextTriggerParams) (uuid.UUID, error) {
|
||||
row := q.db.QueryRow(ctx, addDocumentTextTrigger,
|
||||
arg.Cleanid,
|
||||
arg.Version,
|
||||
arg.Createdat,
|
||||
arg.Part,
|
||||
)
|
||||
var id uuid.UUID
|
||||
err := row.Scan(&id)
|
||||
return id, err
|
||||
}
|
||||
|
||||
const addDocumentTextTriggerJobId = `-- name: AddDocumentTextTriggerJobId :exec
|
||||
UPDATE documentTextTriggerExtractions
|
||||
SET textractJobId = $1
|
||||
WHERE id = $2
|
||||
`
|
||||
|
||||
type AddDocumentTextTriggerJobIdParams struct {
|
||||
Textractjobid *string `db:"textractjobid"`
|
||||
ID uuid.UUID `db:"id"`
|
||||
}
|
||||
|
||||
// AddDocumentTextTriggerJobId
|
||||
//
|
||||
// UPDATE documentTextTriggerExtractions
|
||||
// SET textractJobId = $1
|
||||
// WHERE id = $2
|
||||
func (q *Queries) AddDocumentTextTriggerJobId(ctx context.Context, arg *AddDocumentTextTriggerJobIdParams) error {
|
||||
_, err := q.db.Exec(ctx, addDocumentTextTriggerJobId, arg.Textractjobid, arg.ID)
|
||||
_, err := q.db.Exec(ctx, addDocumentTextEntry, arg.Textid, arg.Version)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -140,51 +88,15 @@ func (q *Queries) GetDocumentTextExtractionByHash(ctx context.Context, arg *GetD
|
||||
return id, err
|
||||
}
|
||||
|
||||
const getDocumentTextTrigger = `-- name: GetDocumentTextTrigger :one
|
||||
SELECT dt.id, dt.cleanId, dt.version, dt.textractJobId, dc.documentId
|
||||
from documentTextTriggerExtractions as dt
|
||||
join documentCleans as dc on dt.cleanId = dc.id
|
||||
where dt.id = $1
|
||||
`
|
||||
|
||||
type GetDocumentTextTriggerRow struct {
|
||||
ID uuid.UUID `db:"id"`
|
||||
Cleanid uuid.UUID `db:"cleanid"`
|
||||
Version int64 `db:"version"`
|
||||
Textractjobid *string `db:"textractjobid"`
|
||||
Documentid uuid.UUID `db:"documentid"`
|
||||
}
|
||||
|
||||
// GetDocumentTextTrigger
|
||||
//
|
||||
// SELECT dt.id, dt.cleanId, dt.version, dt.textractJobId, dc.documentId
|
||||
// from documentTextTriggerExtractions as dt
|
||||
// join documentCleans as dc on dt.cleanId = dc.id
|
||||
// where dt.id = $1
|
||||
func (q *Queries) GetDocumentTextTrigger(ctx context.Context, triggerid uuid.UUID) (*GetDocumentTextTriggerRow, error) {
|
||||
row := q.db.QueryRow(ctx, getDocumentTextTrigger, triggerid)
|
||||
var i GetDocumentTextTriggerRow
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.Cleanid,
|
||||
&i.Version,
|
||||
&i.Textractjobid,
|
||||
&i.Documentid,
|
||||
)
|
||||
return &i, err
|
||||
}
|
||||
|
||||
const getTextEntryByDocId = `-- name: GetTextEntryByDocId :one
|
||||
SELECT id, documentId, bucket, key, hash, cleanId,
|
||||
triggerId, textractJobId, triggerVersion, extractionVersion
|
||||
SELECT id, documentId, bucket, key, hash, cleanId, extractionVersion
|
||||
FROM currentTextEntries
|
||||
WHERE documentId = $1
|
||||
`
|
||||
|
||||
// GetTextEntryByDocId
|
||||
//
|
||||
// SELECT id, documentId, bucket, key, hash, cleanId,
|
||||
// triggerId, textractJobId, triggerVersion, extractionVersion
|
||||
// SELECT id, documentId, bucket, key, hash, cleanId, extractionVersion
|
||||
// FROM currentTextEntries
|
||||
// WHERE documentId = $1
|
||||
func (q *Queries) GetTextEntryByDocId(ctx context.Context, documentid uuid.UUID) (*Currenttextentry, error) {
|
||||
@@ -197,9 +109,6 @@ func (q *Queries) GetTextEntryByDocId(ctx context.Context, documentid uuid.UUID)
|
||||
&i.Key,
|
||||
&i.Hash,
|
||||
&i.Cleanid,
|
||||
&i.Triggerid,
|
||||
&i.Textractjobid,
|
||||
&i.Triggerversion,
|
||||
&i.Extractionversion,
|
||||
)
|
||||
return &i, err
|
||||
@@ -210,17 +119,12 @@ WITH client as (
|
||||
select id from clients where id = $1
|
||||
),
|
||||
parts as (
|
||||
SELECT extractions.part
|
||||
SELECT extract.part
|
||||
FROM client as c
|
||||
JOIN documents as docs on docs.clientId = c.id
|
||||
JOIN documentCleans as clean on docs.id = clean.documentId
|
||||
JOIN documentTextTriggerExtractions as triggers
|
||||
on triggers.cleanId = clean.id
|
||||
JOIN documentTextExtractionEntries as textEntries
|
||||
on textEntries.triggerId = triggers.id
|
||||
JOIN documentTextExtractions as extractions
|
||||
on extractions.id = textEntries.textId
|
||||
WHERE date(extractions.createdAt) = date($2)
|
||||
JOIN documentTextExtractions extract ON extract.cleanId = clean.id
|
||||
WHERE date(extract.createdAt) = date($2)
|
||||
),
|
||||
max_part as (
|
||||
SELECT COALESCE(max(part), 0) as max_part_num FROM parts
|
||||
@@ -249,17 +153,12 @@ type GetTextOutCurrentPartRow struct {
|
||||
// select id from clients where id = $1
|
||||
// ),
|
||||
// parts as (
|
||||
// SELECT extractions.part
|
||||
// SELECT extract.part
|
||||
// FROM client as c
|
||||
// JOIN documents as docs on docs.clientId = c.id
|
||||
// JOIN documentCleans as clean on docs.id = clean.documentId
|
||||
// JOIN documentTextTriggerExtractions as triggers
|
||||
// on triggers.cleanId = clean.id
|
||||
// JOIN documentTextExtractionEntries as textEntries
|
||||
// on textEntries.triggerId = triggers.id
|
||||
// JOIN documentTextExtractions as extractions
|
||||
// on extractions.id = textEntries.textId
|
||||
// WHERE date(extractions.createdAt) = date($2)
|
||||
// JOIN documentTextExtractions extract ON extract.cleanId = clean.id
|
||||
// WHERE date(extract.createdAt) = date($2)
|
||||
// ),
|
||||
// max_part as (
|
||||
// SELECT COALESCE(max(part), 0) as max_part_num FROM parts
|
||||
@@ -282,13 +181,13 @@ WITH client as (
|
||||
select id from clients where id = $1
|
||||
),
|
||||
parts as (
|
||||
SELECT triggers.part
|
||||
SELECT extract.part
|
||||
FROM client as c
|
||||
JOIN documents as docs on docs.clientId = c.id
|
||||
JOIN documentCleans as clean on docs.id = clean.documentId
|
||||
JOIN documentTextTriggerExtractions as triggers
|
||||
on triggers.cleanId = clean.id
|
||||
WHERE date(triggers.createdAt) = date($2)
|
||||
JOIN documentTextExtractions as extract
|
||||
on extract.cleanId = clean.id
|
||||
WHERE date(extract.createdAt) = date($2)
|
||||
),
|
||||
max_part as (
|
||||
SELECT COALESCE(max(part), 0) as max_part_num FROM parts
|
||||
@@ -317,13 +216,13 @@ type GetTextractOutputCurrentPartRow struct {
|
||||
// select id from clients where id = $1
|
||||
// ),
|
||||
// parts as (
|
||||
// SELECT triggers.part
|
||||
// SELECT extract.part
|
||||
// FROM client as c
|
||||
// JOIN documents as docs on docs.clientId = c.id
|
||||
// JOIN documentCleans as clean on docs.id = clean.documentId
|
||||
// JOIN documentTextTriggerExtractions as triggers
|
||||
// on triggers.cleanId = clean.id
|
||||
// WHERE date(triggers.createdAt) = date($2)
|
||||
// JOIN documentTextExtractions as extract
|
||||
// on extract.cleanId = clean.id
|
||||
// WHERE date(extract.createdAt) = date($2)
|
||||
// ),
|
||||
// max_part as (
|
||||
// SELECT COALESCE(max(part), 0) as max_part_num FROM parts
|
||||
|
||||
@@ -16,17 +16,17 @@ import (
|
||||
)
|
||||
|
||||
func TestTextExtraction(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, textup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer textup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -68,73 +68,31 @@ func TestTextExtraction(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.False(t, isextract)
|
||||
|
||||
triggerId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
trigger, err := queries.GetDocumentTextTrigger(ctx, triggerId)
|
||||
require.NoError(t, err)
|
||||
assert.EqualExportedValues(t, &repository.GetDocumentTextTriggerRow{
|
||||
ID: triggerId,
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Documentid: id,
|
||||
}, trigger)
|
||||
|
||||
isextract, err = queries.IsDocumentTextExtracted(ctx, id)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, isextract)
|
||||
|
||||
textractId := "hello"
|
||||
err = queries.AddDocumentTextTriggerJobId(ctx, &repository.AddDocumentTextTriggerJobIdParams{
|
||||
Textractjobid: &textractId,
|
||||
ID: triggerId,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
trigger, err = queries.GetDocumentTextTrigger(ctx, triggerId)
|
||||
require.NoError(t, err)
|
||||
assert.EqualExportedValues(t, &repository.GetDocumentTextTriggerRow{
|
||||
ID: triggerId,
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Textractjobid: &textractId,
|
||||
Documentid: id,
|
||||
}, trigger)
|
||||
|
||||
isextract, err = queries.IsDocumentTextExtracted(ctx, id)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, isextract)
|
||||
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: bucket,
|
||||
Key: key,
|
||||
Hash: "example",
|
||||
Part: 0,
|
||||
Cleanid: cleanid,
|
||||
Part: 0,
|
||||
Bucket: bucket,
|
||||
Key: key,
|
||||
Hash: "example",
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, textId)
|
||||
assert.NotEqual(t, uuid.UUID{}, textId)
|
||||
|
||||
isextract, err = queries.IsDocumentTextExtracted(ctx, id)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, isextract)
|
||||
|
||||
isextract, err = queries.IsDocumentTextExtracted(ctx, id)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, isextract)
|
||||
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 543,
|
||||
Textid: textId,
|
||||
Version: 543,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -150,9 +108,6 @@ func TestTextExtraction(t *testing.T) {
|
||||
assert.Equal(t, key, text.Key)
|
||||
assert.Equal(t, "example", text.Hash)
|
||||
assert.Equal(t, cleanid, text.Cleanid)
|
||||
assert.Equal(t, triggerId, text.Triggerid)
|
||||
assert.Equal(t, textractId, *text.Textractjobid)
|
||||
assert.Equal(t, int64(123), text.Triggerversion)
|
||||
assert.Equal(t, int64(543), text.Extractionversion)
|
||||
assert.Equal(t, textId, text.ID)
|
||||
|
||||
@@ -171,17 +126,17 @@ func TestTextExtraction(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTextTextractPart(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, textup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer textup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -232,9 +187,8 @@ func TestTextTextractPart(t *testing.T) {
|
||||
Part: 0,
|
||||
}, part)
|
||||
|
||||
_, err = queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
_, err = queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -256,9 +210,8 @@ func TestTextTextractPart(t *testing.T) {
|
||||
Part: 0,
|
||||
}, part)
|
||||
|
||||
_, err = queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
_, err = queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -280,9 +233,8 @@ func TestTextTextractPart(t *testing.T) {
|
||||
Part: 0,
|
||||
}, part)
|
||||
|
||||
_, err = queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
_, err = queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Part: 1,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -306,17 +258,17 @@ func TestTextTextractPart(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTextOutPart(t *testing.T) {
|
||||
t.Parallel()
|
||||
if testing.Short() {
|
||||
t.Skip("Skipping long test in short mode")
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
cfg := &serviceconfig.BaseConfig{}
|
||||
test.SetCfgProvider(t, cfg)
|
||||
_, textup := test.CreateDB(t, ctx, cfg, &test.CreateDatabaseConfig{
|
||||
net := test.DepNetwork.Get(t, ctx)
|
||||
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{
|
||||
RunMigrations: true,
|
||||
})
|
||||
defer textup()
|
||||
|
||||
queries := cfg.GetDBQueries()
|
||||
|
||||
@@ -354,9 +306,11 @@ func TestTextOutPart(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
triggerId, err := queries.AddDocumentTextTrigger(ctx, &repository.AddDocumentTextTriggerParams{
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Cleanid: cleanid,
|
||||
Version: 123,
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
@@ -364,6 +318,11 @@ func TestTextOutPart(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Textid: textId,
|
||||
Version: 123,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
part, err := queries.GetTextOutCurrentPart(ctx, &repository.GetTextOutCurrentPartParams{
|
||||
Clientid: &clientId,
|
||||
@@ -373,47 +332,17 @@ func TestTextOutPart(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, &repository.GetTextOutCurrentPartRow{
|
||||
Count: 0,
|
||||
Part: 0,
|
||||
}, part)
|
||||
|
||||
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 123,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
part, err = queries.GetTextOutCurrentPart(ctx, &repository.GetTextOutCurrentPartParams{
|
||||
Clientid: &clientId,
|
||||
Querydate: pgtype.Timestamptz{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, &repository.GetTextOutCurrentPartRow{
|
||||
Count: 1,
|
||||
Part: 0,
|
||||
}, part)
|
||||
|
||||
textId, err = queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 0,
|
||||
Cleanid: cleanid,
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
@@ -421,9 +350,8 @@ func TestTextOutPart(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 123,
|
||||
Textid: textId,
|
||||
Version: 123,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -441,10 +369,11 @@ func TestTextOutPart(t *testing.T) {
|
||||
}, part)
|
||||
|
||||
textId, err = queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 0,
|
||||
Cleanid: cleanid,
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 0,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
@@ -452,9 +381,8 @@ func TestTextOutPart(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 123,
|
||||
Textid: textId,
|
||||
Version: 123,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -472,10 +400,11 @@ func TestTextOutPart(t *testing.T) {
|
||||
}, part)
|
||||
|
||||
textId, err = queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 1,
|
||||
Cleanid: cleanid,
|
||||
Bucket: "hi",
|
||||
Key: "hi",
|
||||
Hash: "hi",
|
||||
Part: 1,
|
||||
Createdat: pgtype.Timestamp{
|
||||
Time: time.Now().UTC(),
|
||||
Valid: true,
|
||||
@@ -483,9 +412,8 @@ func TestTextOutPart(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
||||
Textid: textId,
|
||||
Triggerid: triggerId,
|
||||
Version: 123,
|
||||
Textid: textId,
|
||||
Version: 123,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user