mirror of
https://github.com/minio/minio.git
synced 2025-02-28 05:49:16 -05:00
S3 Select: Detect full object (#8456)
Check if select is `SELECT s.* from S3Object s` and forward it to All Fixes #8371 and makes this case run significantly faster.
This commit is contained in:
parent
47b13cdb80
commit
38e6d911ea
@ -165,6 +165,16 @@ func TestJSONQueries(t *testing.T) {
|
|||||||
query: `SELECT * from s3object s WHERE (7,8.5,9) = s.nested[1]`,
|
query: `SELECT * from s3object s WHERE (7,8.5,9) = s.nested[1]`,
|
||||||
wantResult: `{"id":3,"title":"Second Record","desc":"another text","nested":[[2,3,4],[7,8.5,9]]}`,
|
wantResult: `{"id":3,"title":"Second Record","desc":"another text","nested":[[2,3,4],[7,8.5,9]]}`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "indexed-list-match-equals-s-star",
|
||||||
|
query: `SELECT s.* from s3object s WHERE (7,8.5,9) = s.nested[1]`,
|
||||||
|
wantResult: `{"id":3,"title":"Second Record","desc":"another text","nested":[[2,3,4],[7,8.5,9]]}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "indexed-list-match-equals-s-index",
|
||||||
|
query: `SELECT s.nested[1], s.nested[0] from s3object s WHERE (7,8.5,9) = s.nested[1]`,
|
||||||
|
wantResult: `{"_1":[7,8.5,9],"_2":[2,3,4]}`,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "indexed-list-match-not-equals",
|
name: "indexed-list-match-not-equals",
|
||||||
query: `SELECT * from s3object s WHERE (7,8.5,9) != s.nested[1]`,
|
query: `SELECT * from s3object s WHERE (7,8.5,9) != s.nested[1]`,
|
||||||
|
@ -56,6 +56,21 @@ func ParseSelectStatement(s string) (stmt SelectStatement, err error) {
|
|||||||
err = errQueryParseFailure(err)
|
err = errQueryParseFailure(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if select is "SELECT s.* from S3Object s"
|
||||||
|
if !selectAST.Expression.All &&
|
||||||
|
len(selectAST.Expression.Expressions) == 1 &&
|
||||||
|
len(selectAST.Expression.Expressions[0].Expression.And) == 1 &&
|
||||||
|
len(selectAST.Expression.Expressions[0].Expression.And[0].Condition) == 1 &&
|
||||||
|
selectAST.Expression.Expressions[0].Expression.And[0].Condition[0].Operand != nil &&
|
||||||
|
selectAST.Expression.Expressions[0].Expression.And[0].Condition[0].Operand.Operand.Left != nil &&
|
||||||
|
selectAST.Expression.Expressions[0].Expression.And[0].Condition[0].Operand.Operand.Left.Left != nil &&
|
||||||
|
selectAST.Expression.Expressions[0].Expression.And[0].Condition[0].Operand.Operand.Left.Left.Primary != nil &&
|
||||||
|
selectAST.Expression.Expressions[0].Expression.And[0].Condition[0].Operand.Operand.Left.Left.Primary.JPathExpr != nil {
|
||||||
|
if selectAST.Expression.Expressions[0].Expression.And[0].Condition[0].Operand.Operand.Left.Left.Primary.JPathExpr.String() == selectAST.From.As+".*" {
|
||||||
|
selectAST.Expression.All = true
|
||||||
|
}
|
||||||
|
}
|
||||||
stmt.selectAST = &selectAST
|
stmt.selectAST = &selectAST
|
||||||
|
|
||||||
// Check the parsed limit value
|
// Check the parsed limit value
|
||||||
|
Loading…
x
Reference in New Issue
Block a user