dynamo-browse/internal/dynamo-browse/models/query.go
2023-01-26 10:34:43 +11:00

49 lines
1.2 KiB
Go

package models
import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression"
"github.com/lmika/audax/internal/dynamo-browse/models/itemrender"
)
type QueryExecutionPlan struct {
CanQuery bool
Expression expression.Expression
}
func (qep QueryExecutionPlan) Describe(dp DescribingPrinter) {
if qep.CanQuery {
dp.Println(" execute as: query")
} else {
dp.Println(" execute as: scan")
}
if keyCond := aws.ToString(qep.Expression.KeyCondition()); keyCond != "" {
dp.Printf(" key condition: %v", keyCond)
}
if cond := aws.ToString(qep.Expression.Condition()); cond != "" {
dp.Printf(" condition: %v", cond)
}
if filter := aws.ToString(qep.Expression.Filter()); filter != "" {
dp.Printf(" filter: %v", filter)
}
if names := qep.Expression.Names(); len(names) > 0 {
dp.Println(" names:")
for k, v := range names {
dp.Printf(" %v = %v", k, v)
}
}
if values := qep.Expression.Values(); len(values) > 0 {
dp.Println(" values:")
for k, v := range values {
r := itemrender.ToRenderer(v)
dp.Printf(" %v (%v) = %v", k, r.TypeName(), r.StringValue())
}
}
}
type DescribingPrinter interface {
Println(v ...any)
Printf(format string, v ...any)
}