mirror of
https://github.com/minio/minio.git
synced 2025-11-20 18:06:10 -05:00
SIMDJSON S3 select input (#8401)
This commit is contained in:
@@ -20,9 +20,11 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"github.com/bcicen/jstream"
|
||||
"github.com/minio/simdjson-go"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -370,11 +372,9 @@ func (e *JSONPath) evalNode(r Record) (*Value, error) {
|
||||
keypath = ps[1]
|
||||
}
|
||||
}
|
||||
objFmt, rawVal := r.Raw()
|
||||
switch objFmt {
|
||||
case SelectFmtJSON, SelectFmtParquet:
|
||||
rowVal := rawVal.(jstream.KVS)
|
||||
|
||||
_, rawVal := r.Raw()
|
||||
switch rowVal := rawVal.(type) {
|
||||
case jstream.KVS, simdjson.Object:
|
||||
pathExpr := e.PathExpr
|
||||
if len(pathExpr) == 0 {
|
||||
pathExpr = []*JSONPathElement{{Key: &ObjectKey{ID: e.BaseKey}}}
|
||||
@@ -400,6 +400,11 @@ func jsonToValue(result interface{}) (*Value, error) {
|
||||
return FromFloat(rval), nil
|
||||
case int64:
|
||||
return FromInt(rval), nil
|
||||
case uint64:
|
||||
if rval <= math.MaxInt64 {
|
||||
return FromInt(int64(rval)), nil
|
||||
}
|
||||
return FromFloat(float64(rval)), nil
|
||||
case bool:
|
||||
return FromBool(rval), nil
|
||||
case jstream.KVS:
|
||||
@@ -418,6 +423,17 @@ func jsonToValue(result interface{}) (*Value, error) {
|
||||
dst[i] = *v
|
||||
}
|
||||
return FromArray(dst), nil
|
||||
case simdjson.Object:
|
||||
o := rval
|
||||
elems, err := o.Parse(nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
bs, err := elems.MarshalJSON()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return FromBytes(bs), nil
|
||||
case []Value:
|
||||
return FromArray(rval), nil
|
||||
case nil:
|
||||
|
||||
Reference in New Issue
Block a user