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:
parent
7caf905c82
commit
733e59ec95
15 changed files with 190 additions and 163 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue