From 1ce3d9e15326e4541b114bc91ebf849d5189c7f2 Mon Sep 17 00:00:00 2001 From: Kylesoda <249518290+kylesoda@users.noreply.github.com> Date: Mon, 13 Apr 2026 22:36:07 -0500 Subject: [PATCH] refactor: update partition handling to use Range struct for better clarity and consistency --- internal/app/custom_errors/extractor.error.go | 4 ++-- internal/app/etl/extractors/mssql.go | 8 +++---- internal/app/etl/extractors/postgres.go | 2 +- internal/app/etl/table_analyzers/main.go | 6 +++--- internal/app/etl/table_analyzers/mssql.go | 12 ++++++----- internal/app/models/main.go | 21 ++++++++++++------- 6 files changed, 30 insertions(+), 23 deletions(-) diff --git a/internal/app/custom_errors/extractor.error.go b/internal/app/custom_errors/extractor.error.go index cea8da4..b282be0 100644 --- a/internal/app/custom_errors/extractor.error.go +++ b/internal/app/custom_errors/extractor.error.go @@ -103,8 +103,8 @@ func ExtractorErrorHandler( if err.HasLastId { newPartition.ParentId = err.Partition.Id newPartition.Id = uuid.New() - newPartition.LowerLimit = err.LastId - newPartition.IsLowerLimitInclusive = false + newPartition.Range.Min = err.LastId + newPartition.Range.IsMinInclusive = false } requeueWithBackoff(ctx, delay, func() { diff --git a/internal/app/etl/extractors/mssql.go b/internal/app/etl/extractors/mssql.go index fba5a8c..a62ba5c 100644 --- a/internal/app/etl/extractors/mssql.go +++ b/internal/app/etl/extractors/mssql.go @@ -107,13 +107,13 @@ func (mssqlEx *MssqlExtractor) ProcessPartition( indexPrimaryKey int, chBatchesOut chan<- models.Batch, ) (int, error) { - query := buildExtractQueryMssql(tableInfo, columns, partition.ShouldUseRange, partition.IsLowerLimitInclusive) + query := buildExtractQueryMssql(tableInfo, columns, partition.HasRange, partition.Range.IsMinInclusive) var queryArgs []any - if partition.ShouldUseRange { + if partition.HasRange { queryArgs = append(queryArgs, - sql.Named("min", partition.LowerLimit), - sql.Named("max", partition.UpperLimit), + sql.Named("min", partition.Range.Min), + sql.Named("max", partition.Range.Max), ) } diff --git a/internal/app/etl/extractors/postgres.go b/internal/app/etl/extractors/postgres.go index e2b522c..ad46d2e 100644 --- a/internal/app/etl/extractors/postgres.go +++ b/internal/app/etl/extractors/postgres.go @@ -62,7 +62,7 @@ func (postgresEx *PostgresExtractor) ProcessPartition( ) (int, error) { query := buildExtractQueryPostgres(tableInfo, columns) - if partition.ShouldUseRange { + if partition.HasRange { return 0, errors.New("Batch config not yet supported") } diff --git a/internal/app/etl/table_analyzers/main.go b/internal/app/etl/table_analyzers/main.go index 1ed61d0..c226dbe 100644 --- a/internal/app/etl/table_analyzers/main.go +++ b/internal/app/etl/table_analyzers/main.go @@ -23,9 +23,9 @@ func PartitionRangeGenerator( if rowsCount <= rowsPerPartition { return []models.Partition{{ - Id: uuid.New(), - ShouldUseRange: false, - RetryCounter: 0, + Id: uuid.New(), + HasRange: false, + RetryCounter: 0, }}, nil } diff --git a/internal/app/etl/table_analyzers/mssql.go b/internal/app/etl/table_analyzers/mssql.go index abe6ac6..2f46aca 100644 --- a/internal/app/etl/table_analyzers/mssql.go +++ b/internal/app/etl/table_analyzers/mssql.go @@ -228,13 +228,15 @@ ORDER BY batch_id`, for rows.Next() { partition := models.Partition{ - Id: uuid.New(), - ShouldUseRange: true, - RetryCounter: 0, - IsLowerLimitInclusive: true, + Id: uuid.New(), + HasRange: true, + RetryCounter: 0, + Range: models.PartitionRange{ + IsMinInclusive: true, + }, } - if err := rows.Scan(&partition.LowerLimit, &partition.UpperLimit); err != nil { + if err := rows.Scan(&partition.Range.Min, &partition.Range.Max); err != nil { return nil, err } diff --git a/internal/app/models/main.go b/internal/app/models/main.go index 6eafb8d..6156a86 100644 --- a/internal/app/models/main.go +++ b/internal/app/models/main.go @@ -11,12 +11,17 @@ type Batch struct { RetryCounter int } -type Partition struct { - Id uuid.UUID - ParentId uuid.UUID - LowerLimit int64 - UpperLimit int64 - IsLowerLimitInclusive bool - ShouldUseRange bool - RetryCounter int +type PartitionRange struct { + Min int64 + Max int64 + IsMinInclusive bool + IsMaxInclusive bool +} + +type Partition struct { + Id uuid.UUID + ParentId uuid.UUID + Range PartitionRange + HasRange bool + RetryCounter int }