Issue 47: Query expression planner now recognises GSIs (#48)

The query expression planner now recognises GSIs, and will use them if the expression can be executed as a query over an index.
This commit is contained in:
Leon Mika 2023-02-17 09:17:22 +11:00 committed by GitHub
parent 7caf905c82
commit 733e59ec95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 190 additions and 163 deletions

View file

@ -17,6 +17,7 @@ type TableProvider interface {
QueryItems(
ctx context.Context,
tableName string,
indexName string,
filterExpr *expression.Expression,
exclusiveStartKey map[string]types.AttributeValue,
maxItems int,

View file

@ -49,6 +49,7 @@ func (s *Service) doScan(
var (
filterExpr *expression.Expression
runAsQuery bool
index string
err error
)
if expr != nil {
@ -58,6 +59,7 @@ func (s *Service) doScan(
}
runAsQuery = plan.CanQuery
index = plan.IndexName
filterExpr = &plan.Expression
log.Printf("Running query over '%v'", tableInfo.Name)
@ -69,7 +71,7 @@ func (s *Service) doScan(
var results []models.Item
var lastEvalKey map[string]types.AttributeValue
if runAsQuery {
results, lastEvalKey, err = s.provider.QueryItems(ctx, tableInfo.Name, filterExpr, exclusiveStartKey, limit)
results, lastEvalKey, err = s.provider.QueryItems(ctx, tableInfo.Name, index, filterExpr, exclusiveStartKey, limit)
} else {
results, lastEvalKey, err = s.provider.ScanItems(ctx, tableInfo.Name, filterExpr, exclusiveStartKey, limit)
}