Add plan proto and support basic boolean expr parser (#5088)

**What type of PR is this?**
- [x] Feature

**What this PR does / why we need it:**
This PR supports boolean expression as DSL.
1. The goal of this PR is to support predicates
    like `A > 3 && not B < 5 or C in [1, 2, 3]`. 
2. Defines `plan.proto`, as Intermediate Representation (IR) 
    used between go and cpp. 
3. Support expr parser, convert predicate expr to IR
    in proxynode, while doing static check there
4. Support IR to AST in cpp, enable the execution
pull/5094/head
FluorineDog 2021-04-29 16:48:06 +08:00 committed by GitHub
parent 136cd7a704
commit 88f5642603
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 9336 additions and 41112 deletions

20
go.mod
View File

@ -3,27 +3,42 @@ module github.com/milvus-io/milvus
go 1.15
require (
github.com/99designs/keyring v1.1.5 // indirect
github.com/HdrHistogram/hdrhistogram-go v1.0.1 // indirect
github.com/apache/pulsar-client-go v0.4.0
github.com/antonmedv/expr v1.8.9 // indirect
github.com/apache/pulsar-client-go v0.4.0 // indirect
github.com/beefsack/go-rate v0.0.0-20180408011153-efa7637bb9b6 // indirect
github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b // indirect
github.com/datadog/zstd v1.4.6-0.20200617134701-89f69fb7df32 // indirect
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c // indirect
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 // indirect
github.com/frankban/quicktest v1.10.2 // indirect
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/go-basic/ipv4 v1.0.0
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
github.com/golang/protobuf v1.4.2
github.com/google/btree v1.0.0
github.com/google/uuid v1.1.2 // indirect
github.com/gorilla/context v1.1.1 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/jarcoal/httpmock v1.0.8
github.com/klauspost/compress v1.10.11 // indirect
github.com/linkedin/goavro/v2 v2.9.8 // indirect
github.com/minio/minio-go/v7 v7.0.10
github.com/mitchellh/mapstructure v1.1.2
github.com/opentracing-contrib/go-grpc v0.0.0-20200813121455-4a6760c71486
github.com/opentracing/opentracing-go v1.2.0
github.com/pierrec/lz4 v2.5.2+incompatible // indirect
github.com/pkg/errors v0.9.1
github.com/prometheus/common v0.10.0 // indirect
github.com/prometheus/procfs v0.1.3 // indirect
github.com/quasilyte/go-ruleguard v0.2.1 // indirect
github.com/sirupsen/logrus v1.6.0 // indirect
github.com/spaolacci/murmur3 v1.1.0
github.com/spf13/cast v1.3.0
github.com/spf13/cobra v0.0.3 // indirect
github.com/spf13/viper v1.7.1
github.com/stretchr/testify v1.6.1
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c
@ -31,14 +46,17 @@ require (
github.com/uber/jaeger-lib v2.4.0+incompatible // indirect
github.com/yahoo/athenz v1.9.16 // indirect
go.etcd.io/etcd v3.3.25+incompatible
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/zap v1.15.0
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a // indirect
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150 // indirect
google.golang.org/grpc v1.31.0
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/yaml.v2 v2.3.0 // indirect
honnef.co/go/tools v0.0.1-2020.1.4 // indirect
sigs.k8s.io/yaml v1.2.0 // indirect
)

30
go.sum
View File

@ -15,6 +15,7 @@ github.com/99designs/keyring v1.1.5/go.mod h1:7hsVvt2qXgtadGevGJ4ujg+u8m6SpJ5TpH
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/HdrHistogram/hdrhistogram-go v1.0.1 h1:GX8GAYDuhlFQnI2fRDHQhTlkHMz8bEn0jTI6LJU0mpw=
github.com/HdrHistogram/hdrhistogram-go v1.0.1/go.mod h1:BWJ+nMSHY3L41Zj7CA3uXnloDp7xxV0YvstAE7nKTaM=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
@ -22,6 +23,8 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/antonmedv/expr v1.8.9 h1:O9stiHmHHww9b4ozhPx7T6BK7fXfOCHJ8ybxf0833zw=
github.com/antonmedv/expr v1.8.9/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8=
github.com/apache/pulsar-client-go v0.4.0 h1:boWOejOMI7MZVpnUsqGYmCYXgCK0IWKpY+LgBNW0bHk=
github.com/apache/pulsar-client-go v0.4.0/go.mod h1:C7yxreEzGR6SonCEttrFkOzb+syYT9JKId3bbXOloiM=
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20201120111947-b8bd55bc02bd h1:P5kM7jcXJ7TaftX0/EMKiSJgvQc/ct+Fw0KMvcH3WuY=
@ -60,6 +63,7 @@ github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe2
github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U=
github.com/datadog/zstd v1.4.6-0.20200617134701-89f69fb7df32 h1:QWqadCIHYA5zja4b6h9uGQn93u1vL+G/aewImumdg/M=
github.com/datadog/zstd v1.4.6-0.20200617134701-89f69fb7df32/go.mod h1:inRp+etsHuvVqMPNTXaFlpf/Tj7wqviBtdJoPVrPEFQ=
github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -84,6 +88,8 @@ github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-basic/ipv4 v1.0.0 h1:gjyFAa1USC1hhXTkPOwBWDPfMcUaIM+tvo1XzV9EZxs=
github.com/go-basic/ipv4 v1.0.0/go.mod h1:etLBnaxbidQfuqE6wgZQfs38nEWNmzALkxDZe4xY8Dg=
@ -110,6 +116,7 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
@ -186,6 +193,7 @@ github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeY
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
@ -217,10 +225,14 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/linkedin/goavro/v2 v2.9.8 h1:jN50elxBsGBDGVDEKqUlDuU1cFwJ11K/yrJCBMe/7Wg=
github.com/linkedin/goavro/v2 v2.9.8/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s=
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
@ -259,6 +271,7 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108
github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/opentracing-contrib/go-grpc v0.0.0-20200813121455-4a6760c71486 h1:K35HCWaOTJIPW6cDHK4yj3QfRY/NhE0pBbfoc0M2NMQ=
@ -278,12 +291,14 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
@ -294,19 +309,26 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/quasilyte/go-ruleguard v0.2.1 h1:56eRm0daAyny9UhJnmtJW/UyLZQusukBAB8oT8AHKHo=
github.com/quasilyte/go-ruleguard v0.2.1/go.mod h1:hN2rVc/uS4bQhQKTio2XaSJSafJwqBUWWwtssT3cQmc=
github.com/rivo/tview v0.0.0-20200219210816-cd38d7432498/go.mod h1:6lkG1x+13OShEf0EaOCaTQYyB7d5nSbb181KtjlS+84=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@ -336,6 +358,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@ -358,6 +381,7 @@ github.com/yahoo/athenz v1.8.55/go.mod h1:G7LLFUH7Z/r4QAB7FfudfuA7Am/eCzO1GlzBhD
github.com/yahoo/athenz v1.9.16 h1:2s8KtIxwAbcJIYySsfrT/t/WO0Ss5O7BPGUN/q8x2bg=
github.com/yahoo/athenz v1.9.16/go.mod h1:guj+0Ut6F33wj+OcSRlw69O0itsR7tVocv15F2wJnIo=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
@ -430,6 +454,7 @@ golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
@ -445,6 +470,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -460,13 +486,16 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -505,6 +534,7 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@ -12,7 +12,7 @@
get_property(PROTOC_EXCUTABLE GLOBAL PROPERTY PROTOC_EXCUTABLE )
set(proto_file_names common.proto etcd_meta.proto schema.proto milvus.proto index_cgo_msg.proto)
set(proto_file_names common.proto etcd_meta.proto schema.proto milvus.proto index_cgo_msg.proto plan.proto)
set( PROTO_PATH "${MILVUS_SOURCE_DIR}/../proto/" )

View File

@ -132,7 +132,7 @@ static void InitDefaultsscc_info_Status_common_2eproto() {
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_Status_common_2eproto}, {}};
static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_common_2eproto[6];
static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_common_2eproto[4];
static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_common_2eproto[5];
static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_common_2eproto = nullptr;
const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_common_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
@ -245,9 +245,10 @@ const char descriptor_table_protodef_common_2eproto[] PROTOBUF_SECTION_VARIABLE(
"TimeTick\020\260\t\022\023\n\016QueryNodeStats\020\261\t\022\016\n\tLoad"
"Index\020\262\t\022\016\n\tRequestID\020\263\t\022\017\n\nRequestTSO\020\264"
"\t\022\024\n\017AllocateSegment\020\265\t\022\026\n\021SegmentStatis"
"tics\020\266\t\022\025\n\020SegmentFlushDone\020\267\tB5Z3github"
".com/milvus-io/milvus/internal/proto/com"
"monpbb\006proto3"
"tics\020\266\t\022\025\n\020SegmentFlushDone\020\267\t*\"\n\007DslTyp"
"e\022\007\n\003Dsl\020\000\022\016\n\nBoolExprV1\020\001B5Z3github.com"
"/milvus-io/milvus/internal/proto/commonp"
"bb\006proto3"
;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_common_2eproto_deps[1] = {
};
@ -262,7 +263,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_com
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_common_2eproto_once;
static bool descriptor_table_common_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_common_2eproto = {
&descriptor_table_common_2eproto_initialized, descriptor_table_protodef_common_2eproto, "common.proto", 1973,
&descriptor_table_common_2eproto_initialized, descriptor_table_protodef_common_2eproto, "common.proto", 2009,
&descriptor_table_common_2eproto_once, descriptor_table_common_2eproto_sccs, descriptor_table_common_2eproto_deps, 6, 0,
schemas, file_default_instances, TableStruct_common_2eproto::offsets,
file_level_metadata_common_2eproto, 6, file_level_enum_descriptors_common_2eproto, file_level_service_descriptors_common_2eproto,
@ -396,6 +397,20 @@ bool MsgType_IsValid(int value) {
}
}
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* DslType_descriptor() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_common_2eproto);
return file_level_enum_descriptors_common_2eproto[4];
}
bool DslType_IsValid(int value) {
switch (value) {
case 0:
case 1:
return true;
default:
return false;
}
}
// ===================================================================

View File

@ -258,6 +258,31 @@ inline bool MsgType_Parse(
return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<MsgType>(
MsgType_descriptor(), name, value);
}
enum DslType : int {
Dsl = 0,
BoolExprV1 = 1,
DslType_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(),
DslType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max()
};
bool DslType_IsValid(int value);
constexpr DslType DslType_MIN = Dsl;
constexpr DslType DslType_MAX = BoolExprV1;
constexpr int DslType_ARRAYSIZE = DslType_MAX + 1;
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* DslType_descriptor();
template<typename T>
inline const std::string& DslType_Name(T enum_t_value) {
static_assert(::std::is_same<T, DslType>::value ||
::std::is_integral<T>::value,
"Incorrect type passed to function DslType_Name.");
return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
DslType_descriptor(), enum_t_value);
}
inline bool DslType_Parse(
const std::string& name, DslType* value) {
return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<DslType>(
DslType_descriptor(), name, value);
}
// ===================================================================
class Status :
@ -1582,6 +1607,11 @@ template <>
inline const EnumDescriptor* GetEnumDescriptor< ::milvus::proto::common::MsgType>() {
return ::milvus::proto::common::MsgType_descriptor();
}
template <> struct is_proto_enum< ::milvus::proto::common::DslType> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::milvus::proto::common::DslType>() {
return ::milvus::proto::common::DslType_descriptor();
}
PROTOBUF_NAMESPACE_CLOSE

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -880,9 +880,10 @@ static void InitDefaultsscc_info_SearchRequest_milvus_2eproto() {
::milvus::proto::milvus::SearchRequest::InitAsDefaultInstance();
}
::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_SearchRequest_milvus_2eproto =
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_SearchRequest_milvus_2eproto}, {
&scc_info_MsgBase_common_2eproto.base,}};
::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_SearchRequest_milvus_2eproto =
{{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsscc_info_SearchRequest_milvus_2eproto}, {
&scc_info_MsgBase_common_2eproto.base,
&scc_info_KeyValuePair_common_2eproto.base,}};
static void InitDefaultsscc_info_SearchResults_milvus_2eproto() {
GOOGLE_PROTOBUF_VERIFY_VERSION;
@ -1345,6 +1346,8 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_milvus_2eproto::offsets[] PROT
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, partition_names_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, dsl_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, placeholder_group_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, dsl_type_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::SearchRequest, search_params_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::milvus::proto::milvus::Hits, _internal_metadata_),
~0u, // no _extensions_
@ -1478,17 +1481,17 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB
{ 311, -1, sizeof(::milvus::proto::milvus::PlaceholderValue)},
{ 319, -1, sizeof(::milvus::proto::milvus::PlaceholderGroup)},
{ 325, -1, sizeof(::milvus::proto::milvus::SearchRequest)},
{ 336, -1, sizeof(::milvus::proto::milvus::Hits)},
{ 344, -1, sizeof(::milvus::proto::milvus::SearchResults)},
{ 351, -1, sizeof(::milvus::proto::milvus::FlushRequest)},
{ 359, -1, sizeof(::milvus::proto::milvus::PersistentSegmentInfo)},
{ 373, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoRequest)},
{ 381, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoResponse)},
{ 388, -1, sizeof(::milvus::proto::milvus::QuerySegmentInfo)},
{ 400, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoRequest)},
{ 408, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoResponse)},
{ 415, -1, sizeof(::milvus::proto::milvus::RegisterLinkRequest)},
{ 420, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)},
{ 338, -1, sizeof(::milvus::proto::milvus::Hits)},
{ 346, -1, sizeof(::milvus::proto::milvus::SearchResults)},
{ 353, -1, sizeof(::milvus::proto::milvus::FlushRequest)},
{ 361, -1, sizeof(::milvus::proto::milvus::PersistentSegmentInfo)},
{ 375, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoRequest)},
{ 383, -1, sizeof(::milvus::proto::milvus::GetPersistentSegmentInfoResponse)},
{ 390, -1, sizeof(::milvus::proto::milvus::QuerySegmentInfo)},
{ 402, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoRequest)},
{ 410, -1, sizeof(::milvus::proto::milvus::GetQuerySegmentInfoResponse)},
{ 417, -1, sizeof(::milvus::proto::milvus::RegisterLinkRequest)},
{ 422, -1, sizeof(::milvus::proto::milvus::RegisterLinkResponse)},
};
static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@ -1669,117 +1672,119 @@ const char descriptor_table_protodef_milvus_2eproto[] PROTOBUF_SECTION_VARIABLE(
"\002 \001(\0162$.milvus.proto.milvus.PlaceholderT"
"ype\022\016\n\006values\030\003 \003(\014\"O\n\020PlaceholderGroup\022"
";\n\014placeholders\030\001 \003(\0132%.milvus.proto.mil"
"vus.PlaceholderValue\"\246\001\n\rSearchRequest\022*"
"vus.PlaceholderValue\"\220\002\n\rSearchRequest\022*"
"\n\004base\030\001 \001(\0132\034.milvus.proto.common.MsgBa"
"se\022\017\n\007db_name\030\002 \001(\t\022\027\n\017collection_name\030\003"
" \001(\t\022\027\n\017partition_names\030\004 \003(\t\022\013\n\003dsl\030\005 \001"
"(\t\022\031\n\021placeholder_group\030\006 \001(\014\"5\n\004Hits\022\013\n"
"\003IDs\030\001 \003(\003\022\020\n\010row_data\030\002 \003(\014\022\016\n\006scores\030\003"
" \003(\002\"J\n\rSearchResults\022+\n\006status\030\001 \001(\0132\033."
"milvus.proto.common.Status\022\014\n\004hits\030\002 \003(\014"
"\"e\n\014FlushRequest\022*\n\004base\030\001 \001(\0132\034.milvus."
"proto.common.MsgBase\022\017\n\007db_name\030\002 \001(\t\022\030\n"
"\020collection_names\030\003 \003(\t\"\351\001\n\025PersistentSe"
"gmentInfo\022\021\n\tsegmentID\030\001 \001(\003\022\024\n\014collecti"
"onID\030\002 \001(\003\022\023\n\013partitionID\030\003 \001(\003\022\021\n\topen_"
"time\030\004 \001(\004\022\023\n\013sealed_time\030\005 \001(\004\022\024\n\014flush"
"ed_time\030\006 \001(\004\022\020\n\010num_rows\030\007 \001(\003\022\020\n\010mem_s"
"ize\030\010 \001(\003\0220\n\005state\030\t \001(\0162!.milvus.proto."
"common.SegmentState\"u\n\037GetPersistentSegm"
"entInfoRequest\022*\n\004base\030\001 \001(\0132\034.milvus.pr"
"oto.common.MsgBase\022\016\n\006dbName\030\002 \001(\t\022\026\n\016co"
"llectionName\030\003 \001(\t\"\212\001\n GetPersistentSegm"
"entInfoResponse\022+\n\006status\030\001 \001(\0132\033.milvus"
".proto.common.Status\0229\n\005infos\030\002 \003(\0132*.mi"
"lvus.proto.milvus.PersistentSegmentInfo\""
"\231\001\n\020QuerySegmentInfo\022\021\n\tsegmentID\030\001 \001(\003\022"
"\024\n\014collectionID\030\002 \001(\003\022\023\n\013partitionID\030\003 \001"
"(\003\022\020\n\010mem_size\030\004 \001(\003\022\020\n\010num_rows\030\005 \001(\003\022\022"
"\n\nindex_name\030\006 \001(\t\022\017\n\007indexID\030\007 \001(\003\"p\n\032G"
"etQuerySegmentInfoRequest\022*\n\004base\030\001 \001(\0132"
"\034.milvus.proto.common.MsgBase\022\016\n\006dbName\030"
"\002 \001(\t\022\026\n\016collectionName\030\003 \001(\t\"\200\001\n\033GetQue"
"rySegmentInfoResponse\022+\n\006status\030\001 \001(\0132\033."
"milvus.proto.common.Status\0224\n\005infos\030\002 \003("
"\0132%.milvus.proto.milvus.QuerySegmentInfo"
"\"\025\n\023RegisterLinkRequest\"r\n\024RegisterLinkR"
"esponse\022-\n\007address\030\001 \001(\0132\034.milvus.proto."
"common.Address\022+\n\006status\030\002 \001(\0132\033.milvus."
"proto.common.Status*>\n\017PlaceholderType\022\010"
"\n\004None\020\000\022\020\n\014BinaryVector\020d\022\017\n\013FloatVecto"
"r\020e2\220\025\n\rMilvusService\022_\n\020CreateCollectio"
"n\022,.milvus.proto.milvus.CreateCollection"
"Request\032\033.milvus.proto.common.Status\"\000\022["
"\n\016DropCollection\022*.milvus.proto.milvus.D"
"ropCollectionRequest\032\033.milvus.proto.comm"
"on.Status\"\000\022_\n\rHasCollection\022).milvus.pr"
"oto.milvus.HasCollectionRequest\032!.milvus"
".proto.milvus.BoolResponse\"\000\022[\n\016LoadColl"
"ection\022*.milvus.proto.milvus.LoadCollect"
"ionRequest\032\033.milvus.proto.common.Status\""
"\000\022a\n\021ReleaseCollection\022-.milvus.proto.mi"
"lvus.ReleaseCollectionRequest\032\033.milvus.p"
"roto.common.Status\"\000\022w\n\022DescribeCollecti"
"on\022..milvus.proto.milvus.DescribeCollect"
"ionRequest\032/.milvus.proto.milvus.Describ"
"eCollectionResponse\"\000\022\206\001\n\027GetCollectionS"
"tatistics\0223.milvus.proto.milvus.GetColle"
"ctionStatisticsRequest\0324.milvus.proto.mi"
"lvus.GetCollectionStatisticsResponse\"\000\022n"
"\n\017ShowCollections\022+.milvus.proto.milvus."
"ShowCollectionsRequest\032,.milvus.proto.mi"
"lvus.ShowCollectionsResponse\"\000\022]\n\017Create"
"Partition\022+.milvus.proto.milvus.CreatePa"
"rtitionRequest\032\033.milvus.proto.common.Sta"
"tus\"\000\022Y\n\rDropPartition\022).milvus.proto.mi"
"lvus.DropPartitionRequest\032\033.milvus.proto"
".common.Status\"\000\022]\n\014HasPartition\022(.milvu"
"s.proto.milvus.HasPartitionRequest\032!.mil"
"vus.proto.milvus.BoolResponse\"\000\022[\n\016LoadP"
"artitions\022*.milvus.proto.milvus.LoadPart"
"itionsRequest\032\033.milvus.proto.common.Stat"
"us\"\000\022a\n\021ReleasePartitions\022-.milvus.proto"
".milvus.ReleasePartitionsRequest\032\033.milvu"
"s.proto.common.Status\"\000\022\203\001\n\026GetPartition"
"Statistics\0222.milvus.proto.milvus.GetPart"
"itionStatisticsRequest\0323.milvus.proto.mi"
"lvus.GetPartitionStatisticsResponse\"\000\022k\n"
"\016ShowPartitions\022*.milvus.proto.milvus.Sh"
"owPartitionsRequest\032+.milvus.proto.milvu"
"s.ShowPartitionsResponse\"\000\022U\n\013CreateInde"
"x\022\'.milvus.proto.milvus.CreateIndexReque"
"st\032\033.milvus.proto.common.Status\"\000\022h\n\rDes"
"cribeIndex\022).milvus.proto.milvus.Describ"
"eIndexRequest\032*.milvus.proto.milvus.Desc"
"ribeIndexResponse\"\000\022h\n\rGetIndexState\022).m"
"ilvus.proto.milvus.GetIndexStateRequest\032"
"*.milvus.proto.milvus.GetIndexStateRespo"
"nse\"\000\022\200\001\n\025GetIndexBuildProgress\0221.milvus"
".proto.milvus.GetIndexBuildProgressReque"
"st\0322.milvus.proto.milvus.GetIndexBuildPr"
"ogressResponse\"\000\022Q\n\tDropIndex\022%.milvus.p"
"roto.milvus.DropIndexRequest\032\033.milvus.pr"
"oto.common.Status\"\000\022S\n\006Insert\022\".milvus.p"
"roto.milvus.InsertRequest\032#.milvus.proto"
".milvus.InsertResponse\"\000\022R\n\006Search\022\".mil"
"vus.proto.milvus.SearchRequest\032\".milvus."
"proto.milvus.SearchResults\"\000\022I\n\005Flush\022!."
"milvus.proto.milvus.FlushRequest\032\033.milvu"
"s.proto.common.Status\"\000\022\211\001\n\030GetPersisten"
"tSegmentInfo\0224.milvus.proto.milvus.GetPe"
"rsistentSegmentInfoRequest\0325.milvus.prot"
"o.milvus.GetPersistentSegmentInfoRespons"
"e\"\000\022z\n\023GetQuerySegmentInfo\022/.milvus.prot"
"o.milvus.GetQuerySegmentInfoRequest\0320.mi"
"lvus.proto.milvus.GetQuerySegmentInfoRes"
"ponse\"\000\022e\n\014RegisterLink\022(.milvus.proto.m"
"ilvus.RegisterLinkRequest\032).milvus.proto"
".milvus.RegisterLinkResponse\"\0002u\n\014ProxyS"
"ervice\022e\n\014RegisterLink\022(.milvus.proto.mi"
"lvus.RegisterLinkRequest\032).milvus.proto."
"milvus.RegisterLinkResponse\"\000B5Z3github."
"com/milvus-io/milvus/internal/proto/milv"
"uspbb\006proto3"
"(\t\022\031\n\021placeholder_group\030\006 \001(\014\022.\n\010dsl_typ"
"e\030\007 \001(\0162\034.milvus.proto.common.DslType\0228\n"
"\rsearch_params\030\010 \003(\0132!.milvus.proto.comm"
"on.KeyValuePair\"5\n\004Hits\022\013\n\003IDs\030\001 \003(\003\022\020\n\010"
"row_data\030\002 \003(\014\022\016\n\006scores\030\003 \003(\002\"J\n\rSearch"
"Results\022+\n\006status\030\001 \001(\0132\033.milvus.proto.c"
"ommon.Status\022\014\n\004hits\030\002 \003(\014\"e\n\014FlushReque"
"st\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common.M"
"sgBase\022\017\n\007db_name\030\002 \001(\t\022\030\n\020collection_na"
"mes\030\003 \003(\t\"\351\001\n\025PersistentSegmentInfo\022\021\n\ts"
"egmentID\030\001 \001(\003\022\024\n\014collectionID\030\002 \001(\003\022\023\n\013"
"partitionID\030\003 \001(\003\022\021\n\topen_time\030\004 \001(\004\022\023\n\013"
"sealed_time\030\005 \001(\004\022\024\n\014flushed_time\030\006 \001(\004\022"
"\020\n\010num_rows\030\007 \001(\003\022\020\n\010mem_size\030\010 \001(\003\0220\n\005s"
"tate\030\t \001(\0162!.milvus.proto.common.Segment"
"State\"u\n\037GetPersistentSegmentInfoRequest"
"\022*\n\004base\030\001 \001(\0132\034.milvus.proto.common.Msg"
"Base\022\016\n\006dbName\030\002 \001(\t\022\026\n\016collectionName\030\003"
" \001(\t\"\212\001\n GetPersistentSegmentInfoRespons"
"e\022+\n\006status\030\001 \001(\0132\033.milvus.proto.common."
"Status\0229\n\005infos\030\002 \003(\0132*.milvus.proto.mil"
"vus.PersistentSegmentInfo\"\231\001\n\020QuerySegme"
"ntInfo\022\021\n\tsegmentID\030\001 \001(\003\022\024\n\014collectionI"
"D\030\002 \001(\003\022\023\n\013partitionID\030\003 \001(\003\022\020\n\010mem_size"
"\030\004 \001(\003\022\020\n\010num_rows\030\005 \001(\003\022\022\n\nindex_name\030\006"
" \001(\t\022\017\n\007indexID\030\007 \001(\003\"p\n\032GetQuerySegment"
"InfoRequest\022*\n\004base\030\001 \001(\0132\034.milvus.proto"
".common.MsgBase\022\016\n\006dbName\030\002 \001(\t\022\026\n\016colle"
"ctionName\030\003 \001(\t\"\200\001\n\033GetQuerySegmentInfoR"
"esponse\022+\n\006status\030\001 \001(\0132\033.milvus.proto.c"
"ommon.Status\0224\n\005infos\030\002 \003(\0132%.milvus.pro"
"to.milvus.QuerySegmentInfo\"\025\n\023RegisterLi"
"nkRequest\"r\n\024RegisterLinkResponse\022-\n\007add"
"ress\030\001 \001(\0132\034.milvus.proto.common.Address"
"\022+\n\006status\030\002 \001(\0132\033.milvus.proto.common.S"
"tatus*>\n\017PlaceholderType\022\010\n\004None\020\000\022\020\n\014Bi"
"naryVector\020d\022\017\n\013FloatVector\020e2\220\025\n\rMilvus"
"Service\022_\n\020CreateCollection\022,.milvus.pro"
"to.milvus.CreateCollectionRequest\032\033.milv"
"us.proto.common.Status\"\000\022[\n\016DropCollecti"
"on\022*.milvus.proto.milvus.DropCollectionR"
"equest\032\033.milvus.proto.common.Status\"\000\022_\n"
"\rHasCollection\022).milvus.proto.milvus.Has"
"CollectionRequest\032!.milvus.proto.milvus."
"BoolResponse\"\000\022[\n\016LoadCollection\022*.milvu"
"s.proto.milvus.LoadCollectionRequest\032\033.m"
"ilvus.proto.common.Status\"\000\022a\n\021ReleaseCo"
"llection\022-.milvus.proto.milvus.ReleaseCo"
"llectionRequest\032\033.milvus.proto.common.St"
"atus\"\000\022w\n\022DescribeCollection\022..milvus.pr"
"oto.milvus.DescribeCollectionRequest\032/.m"
"ilvus.proto.milvus.DescribeCollectionRes"
"ponse\"\000\022\206\001\n\027GetCollectionStatistics\0223.mi"
"lvus.proto.milvus.GetCollectionStatistic"
"sRequest\0324.milvus.proto.milvus.GetCollec"
"tionStatisticsResponse\"\000\022n\n\017ShowCollecti"
"ons\022+.milvus.proto.milvus.ShowCollection"
"sRequest\032,.milvus.proto.milvus.ShowColle"
"ctionsResponse\"\000\022]\n\017CreatePartition\022+.mi"
"lvus.proto.milvus.CreatePartitionRequest"
"\032\033.milvus.proto.common.Status\"\000\022Y\n\rDropP"
"artition\022).milvus.proto.milvus.DropParti"
"tionRequest\032\033.milvus.proto.common.Status"
"\"\000\022]\n\014HasPartition\022(.milvus.proto.milvus"
".HasPartitionRequest\032!.milvus.proto.milv"
"us.BoolResponse\"\000\022[\n\016LoadPartitions\022*.mi"
"lvus.proto.milvus.LoadPartitionsRequest\032"
"\033.milvus.proto.common.Status\"\000\022a\n\021Releas"
"ePartitions\022-.milvus.proto.milvus.Releas"
"ePartitionsRequest\032\033.milvus.proto.common"
".Status\"\000\022\203\001\n\026GetPartitionStatistics\0222.m"
"ilvus.proto.milvus.GetPartitionStatistic"
"sRequest\0323.milvus.proto.milvus.GetPartit"
"ionStatisticsResponse\"\000\022k\n\016ShowPartition"
"s\022*.milvus.proto.milvus.ShowPartitionsRe"
"quest\032+.milvus.proto.milvus.ShowPartitio"
"nsResponse\"\000\022U\n\013CreateIndex\022\'.milvus.pro"
"to.milvus.CreateIndexRequest\032\033.milvus.pr"
"oto.common.Status\"\000\022h\n\rDescribeIndex\022).m"
"ilvus.proto.milvus.DescribeIndexRequest\032"
"*.milvus.proto.milvus.DescribeIndexRespo"
"nse\"\000\022h\n\rGetIndexState\022).milvus.proto.mi"
"lvus.GetIndexStateRequest\032*.milvus.proto"
".milvus.GetIndexStateResponse\"\000\022\200\001\n\025GetI"
"ndexBuildProgress\0221.milvus.proto.milvus."
"GetIndexBuildProgressRequest\0322.milvus.pr"
"oto.milvus.GetIndexBuildProgressResponse"
"\"\000\022Q\n\tDropIndex\022%.milvus.proto.milvus.Dr"
"opIndexRequest\032\033.milvus.proto.common.Sta"
"tus\"\000\022S\n\006Insert\022\".milvus.proto.milvus.In"
"sertRequest\032#.milvus.proto.milvus.Insert"
"Response\"\000\022R\n\006Search\022\".milvus.proto.milv"
"us.SearchRequest\032\".milvus.proto.milvus.S"
"earchResults\"\000\022I\n\005Flush\022!.milvus.proto.m"
"ilvus.FlushRequest\032\033.milvus.proto.common"
".Status\"\000\022\211\001\n\030GetPersistentSegmentInfo\0224"
".milvus.proto.milvus.GetPersistentSegmen"
"tInfoRequest\0325.milvus.proto.milvus.GetPe"
"rsistentSegmentInfoResponse\"\000\022z\n\023GetQuer"
"ySegmentInfo\022/.milvus.proto.milvus.GetQu"
"erySegmentInfoRequest\0320.milvus.proto.mil"
"vus.GetQuerySegmentInfoResponse\"\000\022e\n\014Reg"
"isterLink\022(.milvus.proto.milvus.Register"
"LinkRequest\032).milvus.proto.milvus.Regist"
"erLinkResponse\"\0002u\n\014ProxyService\022e\n\014Regi"
"sterLink\022(.milvus.proto.milvus.RegisterL"
"inkRequest\032).milvus.proto.milvus.Registe"
"rLinkResponse\"\000B5Z3github.com/milvus-io/"
"milvus/internal/proto/milvuspbb\006proto3"
;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_milvus_2eproto_deps[2] = {
&::descriptor_table_common_2eproto,
@ -1841,7 +1846,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mil
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_milvus_2eproto_once;
static bool descriptor_table_milvus_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_milvus_2eproto = {
&descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 9332,
&descriptor_table_milvus_2eproto_initialized, descriptor_table_protodef_milvus_2eproto, "milvus.proto", 9438,
&descriptor_table_milvus_2eproto_once, descriptor_table_milvus_2eproto_sccs, descriptor_table_milvus_2eproto_deps, 51, 2,
schemas, file_default_instances, TableStruct_milvus_2eproto::offsets,
file_level_metadata_milvus_2eproto, 51, file_level_enum_descriptors_milvus_2eproto, file_level_service_descriptors_milvus_2eproto,
@ -17832,6 +17837,9 @@ void SearchRequest::clear_base() {
}
base_ = nullptr;
}
void SearchRequest::clear_search_params() {
search_params_.Clear();
}
SearchRequest::SearchRequest()
: ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
SharedCtor();
@ -17840,7 +17848,8 @@ SearchRequest::SearchRequest()
SearchRequest::SearchRequest(const SearchRequest& from)
: ::PROTOBUF_NAMESPACE_ID::Message(),
_internal_metadata_(nullptr),
partition_names_(from.partition_names_) {
partition_names_(from.partition_names_),
search_params_(from.search_params_) {
_internal_metadata_.MergeFrom(from._internal_metadata_);
db_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
if (!from.db_name().empty()) {
@ -17863,6 +17872,7 @@ SearchRequest::SearchRequest(const SearchRequest& from)
} else {
base_ = nullptr;
}
dsl_type_ = from.dsl_type_;
// @@protoc_insertion_point(copy_constructor:milvus.proto.milvus.SearchRequest)
}
@ -17872,7 +17882,9 @@ void SearchRequest::SharedCtor() {
collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
dsl_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
placeholder_group_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
base_ = nullptr;
::memset(&base_, 0, static_cast<size_t>(
reinterpret_cast<char*>(&dsl_type_) -
reinterpret_cast<char*>(&base_)) + sizeof(dsl_type_));
}
SearchRequest::~SearchRequest() {
@ -17904,6 +17916,7 @@ void SearchRequest::Clear() {
(void) cached_has_bits;
partition_names_.Clear();
search_params_.Clear();
db_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
dsl_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
@ -17912,6 +17925,7 @@ void SearchRequest::Clear() {
delete base_;
}
base_ = nullptr;
dsl_type_ = 0;
_internal_metadata_.Clear();
}
@ -17970,6 +17984,26 @@ const char* SearchRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_
CHK_(ptr);
} else goto handle_unusual;
continue;
// .milvus.proto.common.DslType dsl_type = 7;
case 7:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 56)) {
::PROTOBUF_NAMESPACE_ID::uint64 val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
CHK_(ptr);
set_dsl_type(static_cast<::milvus::proto::common::DslType>(val));
} else goto handle_unusual;
continue;
// repeated .milvus.proto.common.KeyValuePair search_params = 8;
case 8:
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 66)) {
ptr -= 1;
do {
ptr += 1;
ptr = ctx->ParseMessage(add_search_params(), ptr);
CHK_(ptr);
if (!ctx->DataAvailable(ptr)) break;
} while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 66);
} else goto handle_unusual;
continue;
default: {
handle_unusual:
if ((tag & 7) == 4 || tag == 0) {
@ -18083,6 +18117,31 @@ bool SearchRequest::MergePartialFromCodedStream(
break;
}
// .milvus.proto.common.DslType dsl_type = 7;
case 7: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (56 & 0xFF)) {
int value = 0;
DO_((::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadPrimitive<
int, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_ENUM>(
input, &value)));
set_dsl_type(static_cast< ::milvus::proto::common::DslType >(value));
} else {
goto handle_unusual;
}
break;
}
// repeated .milvus.proto.common.KeyValuePair search_params = 8;
case 8: {
if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (66 & 0xFF)) {
DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
input, add_search_params()));
} else {
goto handle_unusual;
}
break;
}
default: {
handle_unusual:
if (tag == 0) {
@ -18162,6 +18221,21 @@ void SearchRequest::SerializeWithCachedSizes(
6, this->placeholder_group(), output);
}
// .milvus.proto.common.DslType dsl_type = 7;
if (this->dsl_type() != 0) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteEnum(
7, this->dsl_type(), output);
}
// repeated .milvus.proto.common.KeyValuePair search_params = 8;
for (unsigned int i = 0,
n = static_cast<unsigned int>(this->search_params_size()); i < n; i++) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
8,
this->search_params(static_cast<int>(i)),
output);
}
if (_internal_metadata_.have_unknown_fields()) {
::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
_internal_metadata_.unknown_fields(), output);
@ -18232,6 +18306,20 @@ void SearchRequest::SerializeWithCachedSizes(
6, this->placeholder_group(), target);
}
// .milvus.proto.common.DslType dsl_type = 7;
if (this->dsl_type() != 0) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteEnumToArray(
7, this->dsl_type(), target);
}
// repeated .milvus.proto.common.KeyValuePair search_params = 8;
for (unsigned int i = 0,
n = static_cast<unsigned int>(this->search_params_size()); i < n; i++) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
InternalWriteMessageToArray(
8, this->search_params(static_cast<int>(i)), target);
}
if (_internal_metadata_.have_unknown_fields()) {
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
_internal_metadata_.unknown_fields(), target);
@ -18261,6 +18349,17 @@ size_t SearchRequest::ByteSizeLong() const {
this->partition_names(i));
}
// repeated .milvus.proto.common.KeyValuePair search_params = 8;
{
unsigned int count = static_cast<unsigned int>(this->search_params_size());
total_size += 1UL * count;
for (unsigned int i = 0; i < count; i++) {
total_size +=
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
this->search_params(static_cast<int>(i)));
}
}
// string db_name = 2;
if (this->db_name().size() > 0) {
total_size += 1 +
@ -18296,6 +18395,12 @@ size_t SearchRequest::ByteSizeLong() const {
*base_);
}
// .milvus.proto.common.DslType dsl_type = 7;
if (this->dsl_type() != 0) {
total_size += 1 +
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::EnumSize(this->dsl_type());
}
int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
SetCachedSize(cached_size);
return total_size;
@ -18324,6 +18429,7 @@ void SearchRequest::MergeFrom(const SearchRequest& from) {
(void) cached_has_bits;
partition_names_.MergeFrom(from.partition_names_);
search_params_.MergeFrom(from.search_params_);
if (from.db_name().size() > 0) {
db_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.db_name_);
@ -18343,6 +18449,9 @@ void SearchRequest::MergeFrom(const SearchRequest& from) {
if (from.has_base()) {
mutable_base()->::milvus::proto::common::MsgBase::MergeFrom(from.base());
}
if (from.dsl_type() != 0) {
set_dsl_type(from.dsl_type());
}
}
void SearchRequest::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
@ -18367,6 +18476,7 @@ void SearchRequest::InternalSwap(SearchRequest* other) {
using std::swap;
_internal_metadata_.Swap(&other->_internal_metadata_);
partition_names_.InternalSwap(CastToBase(&other->partition_names_));
CastToBase(&search_params_)->InternalSwap(CastToBase(&other->search_params_));
db_name_.Swap(&other->db_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
GetArenaNoVirtual());
collection_name_.Swap(&other->collection_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
@ -18376,6 +18486,7 @@ void SearchRequest::InternalSwap(SearchRequest* other) {
placeholder_group_.Swap(&other->placeholder_group_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
GetArenaNoVirtual());
swap(base_, other->base_);
swap(dsl_type_, other->dsl_type_);
}
::PROTOBUF_NAMESPACE_ID::Metadata SearchRequest::GetMetadata() const {

View File

@ -6755,11 +6755,13 @@ class SearchRequest :
enum : int {
kPartitionNamesFieldNumber = 4,
kSearchParamsFieldNumber = 8,
kDbNameFieldNumber = 2,
kCollectionNameFieldNumber = 3,
kDslFieldNumber = 5,
kPlaceholderGroupFieldNumber = 6,
kBaseFieldNumber = 1,
kDslTypeFieldNumber = 7,
};
// repeated string partition_names = 4;
int partition_names_size() const;
@ -6778,6 +6780,17 @@ class SearchRequest :
const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>& partition_names() const;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string>* mutable_partition_names();
// repeated .milvus.proto.common.KeyValuePair search_params = 8;
int search_params_size() const;
void clear_search_params();
::milvus::proto::common::KeyValuePair* mutable_search_params(int index);
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >*
mutable_search_params();
const ::milvus::proto::common::KeyValuePair& search_params(int index) const;
::milvus::proto::common::KeyValuePair* add_search_params();
const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >&
search_params() const;
// string db_name = 2;
void clear_db_name();
const std::string& db_name() const;
@ -6830,17 +6843,24 @@ class SearchRequest :
::milvus::proto::common::MsgBase* mutable_base();
void set_allocated_base(::milvus::proto::common::MsgBase* base);
// .milvus.proto.common.DslType dsl_type = 7;
void clear_dsl_type();
::milvus::proto::common::DslType dsl_type() const;
void set_dsl_type(::milvus::proto::common::DslType value);
// @@protoc_insertion_point(class_scope:milvus.proto.milvus.SearchRequest)
private:
class _Internal;
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField<std::string> partition_names_;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair > search_params_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr db_name_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr dsl_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr placeholder_group_;
::milvus::proto::common::MsgBase* base_;
int dsl_type_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_milvus_2eproto;
};
@ -14648,6 +14668,47 @@ inline void SearchRequest::set_allocated_placeholder_group(std::string* placehol
// @@protoc_insertion_point(field_set_allocated:milvus.proto.milvus.SearchRequest.placeholder_group)
}
// .milvus.proto.common.DslType dsl_type = 7;
inline void SearchRequest::clear_dsl_type() {
dsl_type_ = 0;
}
inline ::milvus::proto::common::DslType SearchRequest::dsl_type() const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.SearchRequest.dsl_type)
return static_cast< ::milvus::proto::common::DslType >(dsl_type_);
}
inline void SearchRequest::set_dsl_type(::milvus::proto::common::DslType value) {
dsl_type_ = value;
// @@protoc_insertion_point(field_set:milvus.proto.milvus.SearchRequest.dsl_type)
}
// repeated .milvus.proto.common.KeyValuePair search_params = 8;
inline int SearchRequest::search_params_size() const {
return search_params_.size();
}
inline ::milvus::proto::common::KeyValuePair* SearchRequest::mutable_search_params(int index) {
// @@protoc_insertion_point(field_mutable:milvus.proto.milvus.SearchRequest.search_params)
return search_params_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >*
SearchRequest::mutable_search_params() {
// @@protoc_insertion_point(field_mutable_list:milvus.proto.milvus.SearchRequest.search_params)
return &search_params_;
}
inline const ::milvus::proto::common::KeyValuePair& SearchRequest::search_params(int index) const {
// @@protoc_insertion_point(field_get:milvus.proto.milvus.SearchRequest.search_params)
return search_params_.Get(index);
}
inline ::milvus::proto::common::KeyValuePair* SearchRequest::add_search_params() {
// @@protoc_insertion_point(field_add:milvus.proto.milvus.SearchRequest.search_params)
return search_params_.Add();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >&
SearchRequest::search_params() const {
// @@protoc_insertion_point(field_list:milvus.proto.milvus.SearchRequest.search_params)
return search_params_;
}
// -------------------------------------------------------------------
// Hits

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -27,6 +27,7 @@ set(MILVUS_QUERY_SRCS
SearchOnIndex.cpp
SearchBruteForce.cpp
SubQueryResult.cpp
PlanProto.cpp
)
add_library(milvus_query ${MILVUS_QUERY_SRCS})
target_link_libraries(milvus_query milvus_proto milvus_utils knowhere boost_bitset_ext)

View File

@ -41,7 +41,7 @@ struct UnaryExpr : Expr {
};
struct BoolUnaryExpr : UnaryExpr {
enum class OpType { LogicalNot };
enum class OpType { Invalid = 0, LogicalNot = 1 };
OpType op_type_;
public:
@ -51,7 +51,7 @@ struct BoolUnaryExpr : UnaryExpr {
struct BoolBinaryExpr : BinaryExpr {
// Note: bitA - bitB == bitA & ~bitB, alias to LogicalMinus
enum class OpType { LogicalAnd, LogicalOr, LogicalXor, LogicalMinus };
enum class OpType { Invalid = 0, LogicalAnd = 1, LogicalOr = 2, LogicalXor = 3, LogicalMinus = 4 };
OpType op_type_;
public:
@ -76,7 +76,15 @@ struct TermExpr : Expr {
struct RangeExpr : Expr {
FieldOffset field_offset_;
DataType data_type_ = DataType::NONE;
enum class OpType { GreaterThan = 0, GreaterEqual = 1, LessThan = 2, LessEqual = 3, Equal, NotEqual };
enum class OpType {
Invalid = 0,
GreaterThan = 1,
GreaterEqual = 2,
LessThan = 3,
LessEqual = 4,
Equal = 5,
NotEqual = 6
};
static const std::map<std::string, OpType> mapping_; // op_name -> op
// std::vector<std::tuple<OpType, std::any>> conditions_;

View File

@ -18,11 +18,13 @@
#include "pb/milvus.pb.h"
#include <vector>
#include <memory>
#include <boost/align/aligned_allocator.hpp>
#include <boost/algorithm/string.hpp>
#include <algorithm>
#include "query/generated/VerifyPlanNodeVisitor.h"
#include "query/generated/ExtractInfoPlanNodeVisitor.h"
#include <google/protobuf/text_format.h>
#include "query/PlanProto.h"
#include "query/generated/ShowPlanNodeVisitor.h"
namespace milvus::query {
@ -47,7 +49,7 @@ class Parser {
private:
std::unique_ptr<Plan>
CreatePlanImpl(const std::string& dsl_str);
CreatePlanImpl(const Json& dsl);
explicit Parser(const Schema& schema) : schema(schema) {
}
@ -131,8 +133,7 @@ Parser::ParseRangeNode(const Json& out_body) {
}
std::unique_ptr<Plan>
Parser::CreatePlanImpl(const std::string& dsl_str) {
auto dsl = Json::parse(dsl_str);
Parser::CreatePlanImpl(const Json& dsl) {
auto bool_dsl = dsl.at("bool");
auto predicate = ParseAnyNode(bool_dsl);
Assert(vector_node_opt_.has_value());
@ -316,7 +317,17 @@ ParsePlaceholderGroup(const Plan* plan, const std::string& blob) {
std::unique_ptr<Plan>
CreatePlan(const Schema& schema, const std::string& dsl_str) {
auto plan = Parser(schema).CreatePlanImpl(dsl_str);
Json dsl;
try {
dsl = json::parse(dsl_str);
} catch (std::exception& e) {
// assume protobuf text format
proto::plan::PlanNode plan_node;
auto ok = google::protobuf::TextFormat::ParseFromString(dsl_str, &plan_node);
AssertInfo(ok, "Failed to parse");
return ProtoParser(schema).CreatePlan(plan_node);
}
auto plan = Parser(schema).CreatePlanImpl(dsl);
return plan;
}
@ -468,4 +479,19 @@ GetNumOfQueries(const PlaceholderGroup* group) {
return group->at(0).num_of_queries_;
}
void
Plan::check_identical(Plan& other) {
Assert(&schema_ == &other.schema_);
auto json = ShowPlanNodeVisitor().call_child(*this->plan_node_);
auto other_json = ShowPlanNodeVisitor().call_child(*other.plan_node_);
std::cout << json.dump(2) << std::endl << other_json.dump(2) << std::endl;
Assert(json.dump(2) == other_json.dump(2));
Assert(this->extra_info_opt_.has_value() == other.extra_info_opt_.has_value());
if (this->extra_info_opt_.has_value()) {
Assert(this->extra_info_opt_->involved_fields_ == other.extra_info_opt_->involved_fields_);
}
Assert(this->tag2field_ == other.tag2field_);
Assert(this->target_entries_ == other.target_entries_);
}
} // namespace milvus::query

View File

@ -52,6 +52,8 @@ struct Plan {
std::unique_ptr<VectorPlanNode> plan_node_;
std::map<std::string, FieldOffset> tag2field_; // PlaceholderName -> FieldOffset
std::vector<FieldOffset> target_entries_;
void
check_identical(Plan& other);
public:
std::optional<ExtractedPlanInfo> extra_info_opt_;
@ -78,6 +80,8 @@ struct Placeholder {
}
};
using PlanPtr = std::unique_ptr<Plan>;
struct PlaceholderGroup : std::vector<Placeholder> {
using std::vector<Placeholder>::vector;
};

View File

@ -20,16 +20,8 @@
namespace milvus::query {
class PlanNodeVisitor;
enum class PlanNodeType {
kInvalid = 0,
kScan,
kANNS,
};
// Base of all Nodes
struct PlanNode {
PlanNodeType node_type;
public:
virtual ~PlanNode() = default;
virtual void

View File

@ -0,0 +1,110 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License
#include "query/PlanProto.h"
#include "PlanNode.h"
#include "ExprImpl.h"
#include "pb/plan.pb.h"
#include <google/protobuf/text_format.h>
#include "query/generated/ExtractInfoExprVisitor.h"
namespace milvus::query {
namespace planpb = milvus::proto::plan;
ExprPtr
ProtoParser::ExprFromProto(const planpb::Expr& expr_proto) {
// TODO: make naive works
Assert(expr_proto.has_range_expr());
auto& range_expr = expr_proto.range_expr();
auto& columen_info = range_expr.column_info();
auto field_id = FieldId(columen_info.field_id());
auto field_offset = schema.get_offset(field_id);
auto data_type = schema[field_offset].get_data_type();
involved_fields.set(field_offset.get(), true);
// auto& field_meta = schema[field_offset];
ExprPtr result = [&]() {
switch ((DataType)columen_info.data_type()) {
case DataType::INT64: {
auto result = std::make_unique<RangeExprImpl<int64_t>>();
result->field_offset_ = field_offset;
result->data_type_ = data_type;
Assert(range_expr.ops_size() == range_expr.values_size());
auto sz = range_expr.ops_size();
// TODO simplify this
for (int i = 0; i < sz; ++i) {
result->conditions_.emplace_back((RangeExpr::OpType)range_expr.ops(i),
range_expr.values(i).int64_val());
}
return result;
}
default: {
PanicInfo("unsupported yet");
}
}
}();
return result;
}
std::unique_ptr<VectorPlanNode>
ProtoParser::PlanNodeFromProto(const planpb::PlanNode& plan_node_proto) {
// TODO: add more buffs
Assert(plan_node_proto.has_vector_anns());
auto& anns_proto = plan_node_proto.vector_anns();
AssertInfo(anns_proto.is_binary() == false, "unimplemented");
auto expr_opt = [&]() -> std::optional<ExprPtr> {
if (!anns_proto.has_predicates()) {
return std::nullopt;
} else {
return ExprFromProto(anns_proto.predicates());
}
}();
auto& query_info_proto = anns_proto.query_info();
QueryInfo query_info;
auto field_id = FieldId(anns_proto.field_id());
auto field_offset = schema.get_offset(field_id);
query_info.field_offset_ = field_offset;
this->involved_fields.set(field_offset.get(), true);
query_info.metric_type_ = GetMetricType(query_info_proto.metric_type());
query_info.topK_ = query_info_proto.topk();
query_info.search_params_ = json::parse(query_info_proto.search_params());
auto plan_node = [&]() -> std::unique_ptr<VectorPlanNode> {
if (anns_proto.is_binary()) {
return std::make_unique<BinaryVectorANNS>();
} else {
return std::make_unique<FloatVectorANNS>();
}
}();
plan_node->placeholder_tag_ = anns_proto.placeholder_tag();
plan_node->predicate_ = std::move(expr_opt);
plan_node->query_info_ = std::move(query_info);
return plan_node;
}
std::unique_ptr<Plan>
ProtoParser::CreatePlan(const proto::plan::PlanNode& plan_node_proto) {
auto plan = std::make_unique<Plan>(schema);
auto plan_node = PlanNodeFromProto(plan_node_proto);
plan->tag2field_["$0"] = plan_node->query_info_.field_offset_;
plan->plan_node_ = std::move(plan_node);
ExtractedPlanInfo extract_info(schema.size());
extract_info.involved_fields_ = std::move(involved_fields);
plan->extra_info_opt_ = std::move(extract_info);
return plan;
}
} // namespace milvus::query

View File

@ -0,0 +1,40 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License
#include "common/Schema.h"
#include "query/PlanNode.h"
#include "pb/plan.pb.h"
#include "query/Plan.h"
#include <boost/dynamic_bitset.hpp>
#include <memory>
namespace milvus::query {
class ProtoParser {
public:
explicit ProtoParser(const Schema& schema) : schema(schema), involved_fields(schema.size()) {
}
ExprPtr
ExprFromProto(const proto::plan::Expr& expr_proto);
std::unique_ptr<VectorPlanNode>
PlanNodeFromProto(const proto::plan::PlanNode& plan_node_proto);
std::unique_ptr<Plan>
CreatePlan(const proto::plan::PlanNode& plan_node_proto);
private:
const Schema& schema;
boost::dynamic_bitset<> involved_fields;
};
} // namespace milvus::query

View File

@ -129,8 +129,6 @@ ShowExprVisitor::visit(TermExpr& expr) {
return TermExtract<double>(expr);
case DataType::FLOAT:
return TermExtract<float>(expr);
// case DataType::BOOL:
// return TermExtract<bool>(expr);
default:
PanicInfo("unsupported type");
}

View File

@ -34,6 +34,7 @@ set(MILVUS_TEST_FILES
test_load.cpp
init_gtest.cpp
test_init.cpp
test_plan_proto.cpp
)
add_executable(all_tests

View File

@ -0,0 +1,91 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License
#include <gtest/gtest.h>
#include <google/protobuf/text_format.h>
#include "query/PlanProto.h"
#include "pb/plan.pb.h"
#include "query/generated/ShowPlanNodeVisitor.h"
#include <vector>
#include <queue>
#include <random>
using namespace milvus;
using namespace milvus::query;
namespace planpb = proto::plan;
TEST(PlanProto, Naive) {
auto schema = std::make_unique<Schema>();
schema->AddField(FieldName("vectorfield"), FieldId(101), DataType::VECTOR_FLOAT, 16, MetricType::METRIC_L2);
schema->AddField(FieldName("int64field"), FieldId(100), DataType::INT64);
std::string proto_text = R"(
vector_anns: <
field_id: 101
predicates: <
range_expr: <
column_info: <
field_id: 100
data_type: Int64
>
ops: GreaterThan
values: <
int64_val: 3
>
>
>
query_info: <
topk: 10
metric_type: "L2"
search_params: "{\"nprobe\": 10}"
>
placeholder_tag: "$0"
>
)";
planpb::PlanNode node_proto;
google::protobuf::TextFormat::ParseFromString(proto_text, &node_proto);
std::cout << node_proto.DebugString();
auto plan = ProtoParser(*schema).CreatePlan(node_proto);
ShowPlanNodeVisitor visitor;
auto json = visitor.call_child(*plan->plan_node_);
std::cout << json.dump(2);
auto extra_info = plan->extra_info_opt_.value();
std::string dsl_text = R"(
{
"bool": {
"must": [
{
"range": {
"int64field": {
"GT": 3
}
}
},
{
"vector": {
"vectorfield": {
"metric_type": "L2",
"params": {
"nprobe": 10
},
"query": "$0",
"topk": 10
}
}
}
]
}
}
)";
auto ref_plan = CreatePlan(*schema, dsl_text);
plan->check_identical(*ref_plan);
}

View File

@ -134,6 +134,10 @@ message MsgBase {
int64 sourceID = 4;
}
enum DslType {
Dsl = 0;
BoolExprV1 = 1;
}
// Don't Modify This. @czs
message MsgHeader {

View File

@ -330,6 +330,31 @@ func (MsgType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_555bd8c177793206, []int{3}
}
type DslType int32
const (
DslType_Dsl DslType = 0
DslType_BoolExprV1 DslType = 1
)
var DslType_name = map[int32]string{
0: "Dsl",
1: "BoolExprV1",
}
var DslType_value = map[string]int32{
"Dsl": 0,
"BoolExprV1": 1,
}
func (x DslType) String() string {
return proto.EnumName(DslType_name, int32(x))
}
func (DslType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_555bd8c177793206, []int{4}
}
type Status struct {
ErrorCode ErrorCode `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3,enum=milvus.proto.common.ErrorCode" json:"error_code,omitempty"`
Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"`
@ -618,6 +643,7 @@ func init() {
proto.RegisterEnum("milvus.proto.common.IndexState", IndexState_name, IndexState_value)
proto.RegisterEnum("milvus.proto.common.SegmentState", SegmentState_name, SegmentState_value)
proto.RegisterEnum("milvus.proto.common.MsgType", MsgType_name, MsgType_value)
proto.RegisterEnum("milvus.proto.common.DslType", DslType_name, DslType_value)
proto.RegisterType((*Status)(nil), "milvus.proto.common.Status")
proto.RegisterType((*KeyValuePair)(nil), "milvus.proto.common.KeyValuePair")
proto.RegisterType((*Blob)(nil), "milvus.proto.common.Blob")
@ -629,77 +655,78 @@ func init() {
func init() { proto.RegisterFile("common.proto", fileDescriptor_555bd8c177793206) }
var fileDescriptor_555bd8c177793206 = []byte{
// 1137 bytes of a gzipped FileDescriptorProto
// 1164 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x55, 0xcb, 0x6e, 0xdb, 0x46,
0x14, 0x0d, 0x25, 0xc5, 0x32, 0xaf, 0x64, 0x79, 0x3c, 0x7e, 0xc4, 0x49, 0x8d, 0x22, 0xf0, 0x2a,
0x30, 0x10, 0xbb, 0x68, 0xd0, 0x76, 0x95, 0x45, 0x2c, 0xc5, 0x8e, 0x90, 0xf8, 0x51, 0xca, 0x09,
0x82, 0x6e, 0x02, 0x9a, 0xbc, 0xa6, 0xa7, 0x21, 0x67, 0xd4, 0x99, 0x61, 0x12, 0xfd, 0x45, 0x9b,
0x45, 0xff, 0xa0, 0xbb, 0xb6, 0xe8, 0xbb, 0xbf, 0xd0, 0xf7, 0xba, 0x9f, 0xd0, 0x0f, 0xe8, 0xbb,
0x9b, 0xe2, 0x0e, 0x29, 0x91, 0x05, 0xd2, 0xdd, 0xdc, 0x33, 0x77, 0xce, 0x3d, 0xf7, 0x45, 0x42,
0x37, 0x52, 0x59, 0xa6, 0xe4, 0xf6, 0x58, 0x2b, 0xab, 0xf8, 0x72, 0x26, 0xd2, 0x27, 0xb9, 0x29,
0xac, 0xed, 0xe2, 0x6a, 0xf3, 0x11, 0xcc, 0x8d, 0x6c, 0x68, 0x73, 0xc3, 0x6f, 0x02, 0xa0, 0xd6,
0x4a, 0x3f, 0x8a, 0x54, 0x8c, 0xeb, 0xde, 0x55, 0xef, 0x5a, 0xef, 0xd5, 0x97, 0xb7, 0x5f, 0xf0,
0x66, 0xfb, 0x36, 0xb9, 0xf5, 0x55, 0x8c, 0x81, 0x8f, 0xd3, 0x23, 0x5f, 0x83, 0x39, 0x8d, 0xa1,
0x51, 0x72, 0xbd, 0x71, 0xd5, 0xbb, 0xe6, 0x07, 0xa5, 0xb5, 0xf9, 0x3a, 0x74, 0xef, 0xe2, 0xe4,
0x41, 0x98, 0xe6, 0x78, 0x1c, 0x0a, 0xcd, 0x19, 0x34, 0x1f, 0xe3, 0xc4, 0xf1, 0xfb, 0x01, 0x1d,
0xf9, 0x0a, 0x5c, 0x7c, 0x42, 0xd7, 0xe5, 0xc3, 0xc2, 0xd8, 0xdc, 0x80, 0xd6, 0x6e, 0xaa, 0x4e,
0xab, 0x5b, 0x7a, 0xd1, 0x9d, 0xde, 0x5e, 0x87, 0xf6, 0xad, 0x38, 0xd6, 0x68, 0x0c, 0xef, 0x41,
0x43, 0x8c, 0x4b, 0xbe, 0x86, 0x18, 0x73, 0x0e, 0xad, 0xb1, 0xd2, 0xd6, 0xb1, 0x35, 0x03, 0x77,
0xde, 0x7c, 0xee, 0x41, 0xfb, 0xc0, 0x24, 0xbb, 0xa1, 0x41, 0xfe, 0x06, 0xcc, 0x67, 0x26, 0x79,
0x64, 0x27, 0xe3, 0x69, 0x96, 0x1b, 0x2f, 0xcc, 0xf2, 0xc0, 0x24, 0x27, 0x93, 0x31, 0x06, 0xed,
0xac, 0x38, 0x90, 0x92, 0xcc, 0x24, 0xc3, 0x41, 0xc9, 0x5c, 0x18, 0x7c, 0x03, 0x7c, 0x2b, 0x32,
0x34, 0x36, 0xcc, 0xc6, 0xeb, 0xcd, 0xab, 0xde, 0xb5, 0x56, 0x50, 0x01, 0xfc, 0x0a, 0xcc, 0x1b,
0x95, 0xeb, 0x08, 0x87, 0x83, 0xf5, 0x96, 0x7b, 0x36, 0xb3, 0x37, 0x6f, 0x82, 0x7f, 0x60, 0x92,
0x3b, 0x18, 0xc6, 0xa8, 0xf9, 0x2b, 0xd0, 0x3a, 0x0d, 0x4d, 0xa1, 0xa8, 0xf3, 0xff, 0x8a, 0x28,
0x83, 0xc0, 0x79, 0x6e, 0x7d, 0xd0, 0x02, 0x7f, 0xd6, 0x09, 0xde, 0x81, 0xf6, 0x28, 0x8f, 0x22,
0x34, 0x86, 0x5d, 0xe0, 0xcb, 0xb0, 0x78, 0x5f, 0xe2, 0xb3, 0x31, 0x46, 0x16, 0x63, 0xe7, 0xc3,
0x3c, 0xbe, 0x04, 0x0b, 0x7d, 0x25, 0x25, 0x46, 0x76, 0x2f, 0x14, 0x29, 0xc6, 0xac, 0xc1, 0x57,
0x80, 0x1d, 0xa3, 0xce, 0x84, 0x31, 0x42, 0xc9, 0x01, 0x4a, 0x81, 0x31, 0x6b, 0xf2, 0x4b, 0xb0,
0xdc, 0x57, 0x69, 0x8a, 0x91, 0x15, 0x4a, 0x1e, 0x2a, 0x7b, 0xfb, 0x99, 0x30, 0xd6, 0xb0, 0x16,
0xd1, 0x0e, 0xd3, 0x14, 0x93, 0x30, 0xbd, 0xa5, 0x93, 0x3c, 0x43, 0x69, 0xd9, 0x45, 0xe2, 0x28,
0xc1, 0x81, 0xc8, 0x50, 0x12, 0x13, 0x6b, 0xd7, 0xd0, 0xa1, 0x8c, 0xf1, 0x19, 0xd5, 0x8f, 0xcd,
0xf3, 0xcb, 0xb0, 0x5a, 0xa2, 0xb5, 0x00, 0x61, 0x86, 0xcc, 0xe7, 0x8b, 0xd0, 0x29, 0xaf, 0x4e,
0x8e, 0x8e, 0xef, 0x32, 0xa8, 0x31, 0x04, 0xea, 0x69, 0x80, 0x91, 0xd2, 0x31, 0xeb, 0xd4, 0x24,
0x3c, 0xc0, 0xc8, 0x2a, 0x3d, 0x1c, 0xb0, 0x2e, 0x09, 0x2e, 0xc1, 0x11, 0x86, 0x3a, 0x3a, 0x0f,
0xd0, 0xe4, 0xa9, 0x65, 0x0b, 0x9c, 0x41, 0x77, 0x4f, 0xa4, 0x78, 0xa8, 0xec, 0x9e, 0xca, 0x65,
0xcc, 0x7a, 0xbc, 0x07, 0x70, 0x80, 0x36, 0x2c, 0x2b, 0xb0, 0x48, 0x61, 0xfb, 0x61, 0x74, 0x8e,
0x25, 0xc0, 0xf8, 0x1a, 0xf0, 0x7e, 0x28, 0xa5, 0xb2, 0x7d, 0x8d, 0xa1, 0xc5, 0x3d, 0x95, 0xc6,
0xa8, 0xd9, 0x12, 0xc9, 0xf9, 0x0f, 0x2e, 0x52, 0x64, 0xbc, 0xf2, 0x1e, 0x60, 0x8a, 0x33, 0xef,
0xe5, 0xca, 0xbb, 0xc4, 0xc9, 0x7b, 0x85, 0xc4, 0xef, 0xe6, 0x22, 0x8d, 0x5d, 0x49, 0x8a, 0xb6,
0xac, 0x92, 0xc6, 0x52, 0xfc, 0xe1, 0xbd, 0xe1, 0xe8, 0x84, 0xad, 0xf1, 0x55, 0x58, 0x2a, 0x91,
0x03, 0xb4, 0x5a, 0x44, 0xae, 0x78, 0x97, 0x48, 0xea, 0x51, 0x6e, 0x8f, 0xce, 0x0e, 0x30, 0x53,
0x7a, 0xc2, 0xd6, 0xa9, 0xa1, 0x8e, 0x69, 0xda, 0x22, 0x76, 0x99, 0x73, 0x58, 0x18, 0x0c, 0x02,
0x7c, 0x27, 0x47, 0x63, 0x83, 0x30, 0x42, 0xf6, 0x4b, 0x7b, 0xeb, 0x21, 0x80, 0x73, 0xa3, 0x35,
0x47, 0xce, 0xa1, 0x57, 0x59, 0x87, 0x4a, 0x22, 0xbb, 0xc0, 0xbb, 0x30, 0x7f, 0x5f, 0x0a, 0x63,
0x72, 0x8c, 0x99, 0x47, 0x25, 0x1a, 0xca, 0x63, 0xad, 0x12, 0xda, 0x2e, 0xd6, 0xa0, 0xdb, 0x3d,
0x21, 0x85, 0x39, 0x77, 0xc3, 0x01, 0x30, 0x57, 0xd6, 0xaa, 0xb5, 0xf5, 0x10, 0xba, 0x23, 0x4c,
0x68, 0x0e, 0x0a, 0xee, 0x15, 0x60, 0x75, 0xbb, 0x62, 0x9f, 0x29, 0xf4, 0x68, 0x4e, 0xf7, 0xb5,
0x7a, 0x2a, 0x64, 0xc2, 0x1a, 0x44, 0x36, 0xc2, 0x30, 0x75, 0xc4, 0x1d, 0x68, 0xef, 0xa5, 0xb9,
0x8b, 0xd2, 0xda, 0x7a, 0x7f, 0xce, 0xed, 0xab, 0x5b, 0xbb, 0x05, 0xf0, 0xef, 0xcb, 0x18, 0xcf,
0x84, 0xc4, 0x98, 0x5d, 0x70, 0xa5, 0x75, 0x2d, 0xa8, 0x46, 0x88, 0xc5, 0x94, 0xd6, 0x40, 0xab,
0x71, 0x0d, 0x43, 0xaa, 0xcf, 0x9d, 0xd0, 0xd4, 0xa0, 0x33, 0xea, 0xd7, 0x00, 0x4d, 0xa4, 0xc5,
0x69, 0xfd, 0x79, 0x42, 0x9d, 0x19, 0x9d, 0xab, 0xa7, 0x15, 0x66, 0xd8, 0x39, 0x45, 0xda, 0x47,
0x3b, 0x9a, 0x18, 0x8b, 0x59, 0x5f, 0xc9, 0x33, 0x91, 0x18, 0x26, 0x28, 0xd2, 0x3d, 0x15, 0xc6,
0xb5, 0xe7, 0x6f, 0x53, 0xc7, 0x02, 0x4c, 0x31, 0x34, 0x75, 0xd6, 0xc7, 0x7c, 0x05, 0x16, 0x0b,
0xa9, 0xc7, 0xa1, 0xb6, 0xc2, 0x81, 0xdf, 0x78, 0xae, 0x47, 0x5a, 0x8d, 0x2b, 0xec, 0x5b, 0xda,
0xcd, 0xee, 0x9d, 0xd0, 0x54, 0xd0, 0x77, 0x1e, 0x5f, 0x83, 0xa5, 0xa9, 0xd4, 0x0a, 0xff, 0xde,
0xe3, 0xcb, 0xd0, 0x23, 0xa9, 0x33, 0xcc, 0xb0, 0x1f, 0x1c, 0x48, 0xa2, 0x6a, 0xe0, 0x8f, 0x8e,
0xa1, 0x54, 0x55, 0xc3, 0x7f, 0x72, 0xc1, 0x88, 0xa1, 0x6c, 0x95, 0x61, 0x7f, 0x7b, 0xa4, 0x74,
0x1a, 0xac, 0x84, 0xd9, 0x3f, 0x1e, 0x67, 0xd0, 0x29, 0xf4, 0xbb, 0x89, 0x61, 0x1f, 0x36, 0x9c,
0xf6, 0xd2, 0xaf, 0xc0, 0x3e, 0x6a, 0xf0, 0x1e, 0xf8, 0x94, 0x4f, 0x61, 0x7f, 0xdc, 0xe0, 0x1d,
0x98, 0x1b, 0x4a, 0x83, 0xda, 0xb2, 0x77, 0xa9, 0xab, 0x73, 0xc5, 0x0a, 0xb0, 0xf7, 0x68, 0x76,
0x2e, 0xba, 0x16, 0xb3, 0xe7, 0xee, 0xa2, 0x58, 0x56, 0xf6, 0x6b, 0xd3, 0x29, 0xaa, 0x6f, 0xee,
0x6f, 0x4d, 0x8a, 0xb4, 0x8f, 0xb6, 0x1a, 0x55, 0xf6, 0x7b, 0x93, 0x5f, 0x81, 0xd5, 0x29, 0xe6,
0xf6, 0x68, 0x36, 0xa4, 0x7f, 0x34, 0xf9, 0x06, 0x5c, 0xda, 0x47, 0x5b, 0x95, 0x9f, 0x1e, 0x09,
0x63, 0x45, 0x64, 0xd8, 0x9f, 0x4d, 0xfe, 0x12, 0xac, 0xed, 0xa3, 0x9d, 0x95, 0xa1, 0x76, 0xf9,
0x57, 0x93, 0xd2, 0x2c, 0x93, 0x1e, 0xca, 0x33, 0xc5, 0x7e, 0x6e, 0xf1, 0x05, 0x98, 0x3f, 0x11,
0x19, 0x9e, 0x88, 0xe8, 0x31, 0xfb, 0xc4, 0xa7, 0xea, 0xbe, 0x99, 0xa3, 0x9e, 0x1c, 0xaa, 0x18,
0xe9, 0xa9, 0x61, 0x9f, 0xfa, 0x94, 0x36, 0x95, 0xbc, 0x48, 0xfb, 0x33, 0x67, 0x97, 0x8b, 0x37,
0x1c, 0xb0, 0xcf, 0xe9, 0x83, 0x06, 0xa5, 0x7d, 0x32, 0x3a, 0x62, 0x5f, 0xf8, 0x54, 0xe3, 0x5b,
0x69, 0xaa, 0xa2, 0xd0, 0xce, 0x6a, 0xfc, 0xa5, 0x4f, 0x4d, 0xaa, 0xed, 0x4c, 0x29, 0xea, 0x2b,
0x9f, 0xaf, 0xce, 0x76, 0xc9, 0x95, 0x6c, 0x40, 0xbb, 0xf4, 0xb5, 0xbf, 0xfb, 0xda, 0x5b, 0x37,
0x12, 0x61, 0xcf, 0xf3, 0x53, 0xfa, 0x27, 0xec, 0x14, 0x3f, 0x89, 0xeb, 0x42, 0x95, 0xa7, 0x1d,
0x21, 0x2d, 0x6a, 0x19, 0xa6, 0x3b, 0xee, 0xbf, 0xb1, 0x53, 0xfc, 0x37, 0xc6, 0xa7, 0xa7, 0x73,
0xce, 0xbe, 0xf1, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0xbc, 0x04, 0x20, 0x11, 0x08, 0x00,
0x00,
0x17, 0x36, 0x25, 0x45, 0x32, 0x8f, 0x64, 0x79, 0x3c, 0xbe, 0xc4, 0xc9, 0x6f, 0xfc, 0x08, 0xbc,
0x0a, 0x0c, 0xc4, 0x6e, 0x1b, 0xb4, 0x5d, 0x65, 0x11, 0x8b, 0xb1, 0x23, 0x24, 0xbe, 0x54, 0x72,
0x82, 0xa0, 0x9b, 0x80, 0x26, 0x8f, 0xe5, 0x69, 0xc8, 0x19, 0x75, 0x66, 0x98, 0x58, 0x6f, 0xd1,
0x66, 0xd1, 0x37, 0xe8, 0xae, 0x2d, 0x7a, 0xef, 0x2b, 0xf4, 0xbe, 0xee, 0x23, 0xf4, 0x01, 0x7a,
0xef, 0xa6, 0x38, 0x43, 0x4a, 0x64, 0x81, 0x74, 0x37, 0xe7, 0x9b, 0x33, 0xdf, 0xf9, 0xce, 0x8d,
0x84, 0x4e, 0xa4, 0xd2, 0x54, 0xc9, 0xed, 0xb1, 0x56, 0x56, 0xf1, 0xe5, 0x54, 0x24, 0x4f, 0x33,
0x93, 0x5b, 0xdb, 0xf9, 0xd5, 0xe6, 0x63, 0x68, 0x0e, 0x6d, 0x68, 0x33, 0xc3, 0x6f, 0x01, 0xa0,
0xd6, 0x4a, 0x3f, 0x8e, 0x54, 0x8c, 0xeb, 0xde, 0x35, 0xef, 0x7a, 0xf7, 0x95, 0xff, 0x6f, 0xbf,
0xe0, 0xcd, 0xf6, 0x1d, 0x72, 0xeb, 0xa9, 0x18, 0x07, 0x3e, 0x4e, 0x8f, 0x7c, 0x0d, 0x9a, 0x1a,
0x43, 0xa3, 0xe4, 0x7a, 0xed, 0x9a, 0x77, 0xdd, 0x1f, 0x14, 0xd6, 0xe6, 0x6b, 0xd0, 0xb9, 0x87,
0x93, 0x87, 0x61, 0x92, 0xe1, 0x71, 0x28, 0x34, 0x67, 0x50, 0x7f, 0x82, 0x13, 0xc7, 0xef, 0x0f,
0xe8, 0xc8, 0x57, 0xe0, 0xd2, 0x53, 0xba, 0x2e, 0x1e, 0xe6, 0xc6, 0xe6, 0x06, 0x34, 0x76, 0x13,
0x75, 0x5a, 0xde, 0xd2, 0x8b, 0xce, 0xf4, 0xf6, 0x06, 0xb4, 0x6e, 0xc7, 0xb1, 0x46, 0x63, 0x78,
0x17, 0x6a, 0x62, 0x5c, 0xf0, 0xd5, 0xc4, 0x98, 0x73, 0x68, 0x8c, 0x95, 0xb6, 0x8e, 0xad, 0x3e,
0x70, 0xe7, 0xcd, 0xe7, 0x1e, 0xb4, 0x0e, 0xcc, 0x68, 0x37, 0x34, 0xc8, 0x5f, 0x87, 0xf9, 0xd4,
0x8c, 0x1e, 0xdb, 0xc9, 0x78, 0x9a, 0xe5, 0xc6, 0x0b, 0xb3, 0x3c, 0x30, 0xa3, 0x93, 0xc9, 0x18,
0x07, 0xad, 0x34, 0x3f, 0x90, 0x92, 0xd4, 0x8c, 0xfa, 0x41, 0xc1, 0x9c, 0x1b, 0x7c, 0x03, 0x7c,
0x2b, 0x52, 0x34, 0x36, 0x4c, 0xc7, 0xeb, 0xf5, 0x6b, 0xde, 0xf5, 0xc6, 0xa0, 0x04, 0xf8, 0x55,
0x98, 0x37, 0x2a, 0xd3, 0x11, 0xf6, 0x83, 0xf5, 0x86, 0x7b, 0x36, 0xb3, 0x37, 0x6f, 0x81, 0x7f,
0x60, 0x46, 0x77, 0x31, 0x8c, 0x51, 0xf3, 0x97, 0xa0, 0x71, 0x1a, 0x9a, 0x5c, 0x51, 0xfb, 0xbf,
0x15, 0x51, 0x06, 0x03, 0xe7, 0xb9, 0xf5, 0x7e, 0x03, 0xfc, 0x59, 0x27, 0x78, 0x1b, 0x5a, 0xc3,
0x2c, 0x8a, 0xd0, 0x18, 0x36, 0xc7, 0x97, 0x61, 0xf1, 0x81, 0xc4, 0x8b, 0x31, 0x46, 0x16, 0x63,
0xe7, 0xc3, 0x3c, 0xbe, 0x04, 0x0b, 0x3d, 0x25, 0x25, 0x46, 0x76, 0x2f, 0x14, 0x09, 0xc6, 0xac,
0xc6, 0x57, 0x80, 0x1d, 0xa3, 0x4e, 0x85, 0x31, 0x42, 0xc9, 0x00, 0xa5, 0xc0, 0x98, 0xd5, 0xf9,
0x65, 0x58, 0xee, 0xa9, 0x24, 0xc1, 0xc8, 0x0a, 0x25, 0x0f, 0x95, 0xbd, 0x73, 0x21, 0x8c, 0x35,
0xac, 0x41, 0xb4, 0xfd, 0x24, 0xc1, 0x51, 0x98, 0xdc, 0xd6, 0xa3, 0x2c, 0x45, 0x69, 0xd9, 0x25,
0xe2, 0x28, 0xc0, 0x40, 0xa4, 0x28, 0x89, 0x89, 0xb5, 0x2a, 0x68, 0x5f, 0xc6, 0x78, 0x41, 0xf5,
0x63, 0xf3, 0xfc, 0x0a, 0xac, 0x16, 0x68, 0x25, 0x40, 0x98, 0x22, 0xf3, 0xf9, 0x22, 0xb4, 0x8b,
0xab, 0x93, 0xa3, 0xe3, 0x7b, 0x0c, 0x2a, 0x0c, 0x03, 0xf5, 0x6c, 0x80, 0x91, 0xd2, 0x31, 0x6b,
0x57, 0x24, 0x3c, 0xc4, 0xc8, 0x2a, 0xdd, 0x0f, 0x58, 0x87, 0x04, 0x17, 0xe0, 0x10, 0x43, 0x1d,
0x9d, 0x0f, 0xd0, 0x64, 0x89, 0x65, 0x0b, 0x9c, 0x41, 0x67, 0x4f, 0x24, 0x78, 0xa8, 0xec, 0x9e,
0xca, 0x64, 0xcc, 0xba, 0xbc, 0x0b, 0x70, 0x80, 0x36, 0x2c, 0x2a, 0xb0, 0x48, 0x61, 0x7b, 0x61,
0x74, 0x8e, 0x05, 0xc0, 0xf8, 0x1a, 0xf0, 0x5e, 0x28, 0xa5, 0xb2, 0x3d, 0x8d, 0xa1, 0xc5, 0x3d,
0x95, 0xc4, 0xa8, 0xd9, 0x12, 0xc9, 0xf9, 0x17, 0x2e, 0x12, 0x64, 0xbc, 0xf4, 0x0e, 0x30, 0xc1,
0x99, 0xf7, 0x72, 0xe9, 0x5d, 0xe0, 0xe4, 0xbd, 0x42, 0xe2, 0x77, 0x33, 0x91, 0xc4, 0xae, 0x24,
0x79, 0x5b, 0x56, 0x49, 0x63, 0x21, 0xfe, 0xf0, 0x7e, 0x7f, 0x78, 0xc2, 0xd6, 0xf8, 0x2a, 0x2c,
0x15, 0xc8, 0x01, 0x5a, 0x2d, 0x22, 0x57, 0xbc, 0xcb, 0x24, 0xf5, 0x28, 0xb3, 0x47, 0x67, 0x07,
0x98, 0x2a, 0x3d, 0x61, 0xeb, 0xd4, 0x50, 0xc7, 0x34, 0x6d, 0x11, 0xbb, 0xc2, 0x39, 0x2c, 0x04,
0xc1, 0x00, 0xdf, 0xce, 0xd0, 0xd8, 0x41, 0x18, 0x21, 0xfb, 0xb9, 0xb5, 0xf5, 0x08, 0xc0, 0xb9,
0xd1, 0x9a, 0x23, 0xe7, 0xd0, 0x2d, 0xad, 0x43, 0x25, 0x91, 0xcd, 0xf1, 0x0e, 0xcc, 0x3f, 0x90,
0xc2, 0x98, 0x0c, 0x63, 0xe6, 0x51, 0x89, 0xfa, 0xf2, 0x58, 0xab, 0x11, 0x6d, 0x17, 0xab, 0xd1,
0xed, 0x9e, 0x90, 0xc2, 0x9c, 0xbb, 0xe1, 0x00, 0x68, 0x16, 0xb5, 0x6a, 0x6c, 0x3d, 0x82, 0xce,
0x10, 0x47, 0x34, 0x07, 0x39, 0xf7, 0x0a, 0xb0, 0xaa, 0x5d, 0xb2, 0xcf, 0x14, 0x7a, 0x34, 0xa7,
0xfb, 0x5a, 0x3d, 0x13, 0x72, 0xc4, 0x6a, 0x44, 0x36, 0xc4, 0x30, 0x71, 0xc4, 0x6d, 0x68, 0xed,
0x25, 0x99, 0x8b, 0xd2, 0xd8, 0x7a, 0xaf, 0xe9, 0xf6, 0xd5, 0xad, 0xdd, 0x02, 0xf8, 0x0f, 0x64,
0x8c, 0x67, 0x42, 0x62, 0xcc, 0xe6, 0x5c, 0x69, 0x5d, 0x0b, 0xca, 0x11, 0x62, 0x31, 0xa5, 0x15,
0x68, 0x35, 0xae, 0x60, 0x48, 0xf5, 0xb9, 0x1b, 0x9a, 0x0a, 0x74, 0x46, 0xfd, 0x0a, 0xd0, 0x44,
0x5a, 0x9c, 0x56, 0x9f, 0x8f, 0xa8, 0x33, 0xc3, 0x73, 0xf5, 0xac, 0xc4, 0x0c, 0x3b, 0xa7, 0x48,
0xfb, 0x68, 0x87, 0x13, 0x63, 0x31, 0xed, 0x29, 0x79, 0x26, 0x46, 0x86, 0x09, 0x8a, 0x74, 0x5f,
0x85, 0x71, 0xe5, 0xf9, 0x5b, 0xd4, 0xb1, 0x01, 0x26, 0x18, 0x9a, 0x2a, 0xeb, 0x13, 0xbe, 0x02,
0x8b, 0xb9, 0xd4, 0xe3, 0x50, 0x5b, 0xe1, 0xc0, 0xaf, 0x3d, 0xd7, 0x23, 0xad, 0xc6, 0x25, 0xf6,
0x0d, 0xed, 0x66, 0xe7, 0x6e, 0x68, 0x4a, 0xe8, 0x5b, 0x8f, 0xaf, 0xc1, 0xd2, 0x54, 0x6a, 0x89,
0x7f, 0xe7, 0xf1, 0x65, 0xe8, 0x92, 0xd4, 0x19, 0x66, 0xd8, 0xf7, 0x0e, 0x24, 0x51, 0x15, 0xf0,
0x07, 0xc7, 0x50, 0xa8, 0xaa, 0xe0, 0x3f, 0xba, 0x60, 0xc4, 0x50, 0xb4, 0xca, 0xb0, 0xbf, 0x3c,
0x52, 0x3a, 0x0d, 0x56, 0xc0, 0xec, 0x6f, 0x8f, 0x33, 0x68, 0xe7, 0xfa, 0xdd, 0xc4, 0xb0, 0x0f,
0x6a, 0x4e, 0x7b, 0xe1, 0x97, 0x63, 0x1f, 0xd6, 0x78, 0x17, 0x7c, 0xca, 0x27, 0xb7, 0x3f, 0xaa,
0xf1, 0x36, 0x34, 0xfb, 0xd2, 0xa0, 0xb6, 0xec, 0x1d, 0xea, 0x6a, 0x33, 0x5f, 0x01, 0xf6, 0x2e,
0xcd, 0xce, 0x25, 0xd7, 0x62, 0xf6, 0xdc, 0x5d, 0xe4, 0xcb, 0xca, 0x7e, 0xa9, 0x3b, 0x45, 0xd5,
0xcd, 0xfd, 0xb5, 0x4e, 0x91, 0xf6, 0xd1, 0x96, 0xa3, 0xca, 0x7e, 0xab, 0xf3, 0xab, 0xb0, 0x3a,
0xc5, 0xdc, 0x1e, 0xcd, 0x86, 0xf4, 0xf7, 0x3a, 0xdf, 0x80, 0xcb, 0xfb, 0x68, 0xcb, 0xf2, 0xd3,
0x23, 0x61, 0xac, 0x88, 0x0c, 0xfb, 0xa3, 0xce, 0xff, 0x07, 0x6b, 0xfb, 0x68, 0x67, 0x65, 0xa8,
0x5c, 0xfe, 0x59, 0xa7, 0x34, 0x8b, 0xa4, 0xfb, 0xf2, 0x4c, 0xb1, 0x9f, 0x1a, 0x7c, 0x01, 0xe6,
0x4f, 0x44, 0x8a, 0x27, 0x22, 0x7a, 0xc2, 0x3e, 0xf6, 0xa9, 0xba, 0x6f, 0x64, 0xa8, 0x27, 0x87,
0x2a, 0x46, 0x7a, 0x6a, 0xd8, 0x27, 0x3e, 0xa5, 0x4d, 0x25, 0xcf, 0xd3, 0xfe, 0xd4, 0xd9, 0xc5,
0xe2, 0xf5, 0x03, 0xf6, 0x19, 0x7d, 0xd0, 0xa0, 0xb0, 0x4f, 0x86, 0x47, 0xec, 0x73, 0x9f, 0x6a,
0x7c, 0x3b, 0x49, 0x54, 0x14, 0xda, 0x59, 0x8d, 0xbf, 0xf0, 0xa9, 0x49, 0x95, 0x9d, 0x29, 0x44,
0x7d, 0xe9, 0xf3, 0xd5, 0xd9, 0x2e, 0xb9, 0x92, 0x05, 0xb4, 0x4b, 0x5f, 0xf9, 0x5b, 0x9b, 0xd0,
0x0a, 0x4c, 0xe2, 0xf6, 0xa2, 0x05, 0xf5, 0xc0, 0x24, 0x6c, 0x8e, 0x16, 0x76, 0x57, 0xa9, 0xe4,
0xce, 0xc5, 0x58, 0x3f, 0x7c, 0x99, 0x79, 0xbb, 0xaf, 0xbe, 0x79, 0x73, 0x24, 0xec, 0x79, 0x76,
0x4a, 0xff, 0x8d, 0x9d, 0xfc, 0x47, 0x72, 0x43, 0xa8, 0xe2, 0xb4, 0x23, 0xa4, 0x45, 0x2d, 0xc3,
0x64, 0xc7, 0xfd, 0x5b, 0x76, 0xf2, 0x7f, 0xcb, 0xf8, 0xf4, 0xb4, 0xe9, 0xec, 0x9b, 0xff, 0x04,
0x00, 0x00, 0xff, 0xff, 0x2d, 0x7f, 0xd4, 0x22, 0x35, 0x08, 0x00, 0x00,
}

View File

@ -304,6 +304,8 @@ message SearchRequest {
string dsl = 5;
// serialized `PlaceholderGroup`
bytes placeholder_group = 6;
common.DslType dsl_type = 7;
repeated common.KeyValuePair search_params = 8;
}
message Hits {

View File

@ -2312,10 +2312,12 @@ type SearchRequest struct {
PartitionNames []string `protobuf:"bytes,4,rep,name=partition_names,json=partitionNames,proto3" json:"partition_names,omitempty"`
Dsl string `protobuf:"bytes,5,opt,name=dsl,proto3" json:"dsl,omitempty"`
// serialized `PlaceholderGroup`
PlaceholderGroup []byte `protobuf:"bytes,6,opt,name=placeholder_group,json=placeholderGroup,proto3" json:"placeholder_group,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
PlaceholderGroup []byte `protobuf:"bytes,6,opt,name=placeholder_group,json=placeholderGroup,proto3" json:"placeholder_group,omitempty"`
DslType commonpb.DslType `protobuf:"varint,7,opt,name=dsl_type,json=dslType,proto3,enum=milvus.proto.common.DslType" json:"dsl_type,omitempty"`
SearchParams []*commonpb.KeyValuePair `protobuf:"bytes,8,rep,name=search_params,json=searchParams,proto3" json:"search_params,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SearchRequest) Reset() { *m = SearchRequest{} }
@ -2385,6 +2387,20 @@ func (m *SearchRequest) GetPlaceholderGroup() []byte {
return nil
}
func (m *SearchRequest) GetDslType() commonpb.DslType {
if m != nil {
return m.DslType
}
return commonpb.DslType_Dsl
}
func (m *SearchRequest) GetSearchParams() []*commonpb.KeyValuePair {
if m != nil {
return m.SearchParams
}
return nil
}
type Hits struct {
IDs []int64 `protobuf:"varint,1,rep,packed,name=IDs,proto3" json:"IDs,omitempty"`
RowData [][]byte `protobuf:"bytes,2,rep,name=row_data,json=rowData,proto3" json:"row_data,omitempty"`
@ -3072,135 +3088,138 @@ func init() {
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{
// 2042 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xdd, 0x6f, 0x1b, 0xc7,
0x11, 0xf7, 0x92, 0x14, 0x45, 0x0d, 0x8f, 0x12, 0xbd, 0xfa, 0x30, 0x75, 0xb6, 0x63, 0xe9, 0x5a,
0x37, 0xb2, 0x9d, 0x58, 0xa9, 0x14, 0xf7, 0x03, 0x45, 0x8b, 0x56, 0x51, 0x23, 0x0b, 0x4e, 0x02,
0xe5, 0xe8, 0x06, 0x4d, 0x03, 0x83, 0x38, 0x92, 0x6b, 0xf2, 0xe0, 0xe3, 0x1d, 0x7b, 0x7b, 0xb4,
0x4c, 0x3f, 0x15, 0x48, 0x51, 0xa0, 0x5f, 0x4e, 0x81, 0x16, 0x05, 0xda, 0xc7, 0x02, 0x79, 0x6e,
0x8b, 0x06, 0x28, 0xd0, 0xe7, 0x3e, 0x14, 0xe8, 0x4b, 0xff, 0x89, 0x3e, 0x15, 0xfd, 0x13, 0x0a,
0x14, 0xfb, 0xc1, 0xe3, 0xdd, 0x71, 0x8f, 0xa2, 0xcc, 0xd8, 0xa2, 0xde, 0xb8, 0x73, 0xb3, 0xb3,
0xbf, 0x9d, 0x9d, 0x99, 0x9d, 0x9d, 0x21, 0x68, 0x1d, 0xdb, 0x79, 0xdc, 0xa3, 0xb7, 0xbb, 0xbe,
0x17, 0x78, 0x78, 0x39, 0x3a, 0xba, 0x2d, 0x06, 0xba, 0xd6, 0xf0, 0x3a, 0x1d, 0xcf, 0x15, 0x44,
0x5d, 0xa3, 0x8d, 0x36, 0xe9, 0x58, 0x62, 0x64, 0x7c, 0x8a, 0xe0, 0xd2, 0x5b, 0x3e, 0xb1, 0x02,
0xf2, 0x96, 0xe7, 0x38, 0xa4, 0x11, 0xd8, 0x9e, 0x6b, 0x92, 0x1f, 0xf6, 0x08, 0x0d, 0xf0, 0x1b,
0x90, 0xab, 0x5b, 0x94, 0x54, 0xd0, 0x06, 0xda, 0x2a, 0xee, 0x5c, 0xb9, 0x1d, 0x93, 0x2d, 0x65,
0xbe, 0x4b, 0x5b, 0x7b, 0x16, 0x25, 0x26, 0xe7, 0xc4, 0x97, 0x60, 0xbe, 0x59, 0xaf, 0xb9, 0x56,
0x87, 0x54, 0x32, 0x1b, 0x68, 0x6b, 0xc1, 0xcc, 0x37, 0xeb, 0xef, 0x59, 0x1d, 0x82, 0x5f, 0x85,
0xa5, 0x46, 0x28, 0x5f, 0x30, 0x64, 0x39, 0xc3, 0xe2, 0x90, 0xcc, 0x19, 0xd7, 0x20, 0x2f, 0xf0,
0x55, 0x72, 0x1b, 0x68, 0x4b, 0x33, 0xe5, 0xc8, 0xf8, 0x39, 0x82, 0xd5, 0x7d, 0xdf, 0xeb, 0xce,
0x04, 0x4a, 0xe3, 0x67, 0x08, 0x56, 0xee, 0x5a, 0x74, 0x36, 0xc0, 0x7c, 0x08, 0xda, 0x9e, 0xe7,
0x39, 0x26, 0xa1, 0x5d, 0xcf, 0xa5, 0x04, 0xef, 0x42, 0x9e, 0x06, 0x56, 0xd0, 0xa3, 0x12, 0xc5,
0x65, 0x25, 0x8a, 0x2a, 0x67, 0x31, 0x25, 0x2b, 0x5e, 0x81, 0xb9, 0xc7, 0x96, 0xd3, 0x13, 0x20,
0x0a, 0xa6, 0x18, 0x18, 0x1f, 0xc1, 0x62, 0x35, 0xf0, 0x6d, 0xb7, 0xf5, 0x39, 0x0a, 0x5f, 0x18,
0x08, 0xff, 0x0b, 0x82, 0xf5, 0x7d, 0x42, 0x1b, 0xbe, 0x5d, 0x9f, 0x11, 0xe3, 0x33, 0x40, 0x1b,
0x52, 0x0e, 0xf7, 0xb9, 0x09, 0x66, 0xcd, 0x18, 0xcd, 0xf8, 0x0c, 0x81, 0xae, 0x42, 0x3d, 0x8d,
0x7e, 0xbe, 0x19, 0x1a, 0x7d, 0x86, 0x4f, 0xba, 0x1e, 0x9f, 0x24, 0x1d, 0x76, 0xb8, 0x5a, 0x95,
0x13, 0x06, 0xbe, 0x31, 0x02, 0x3b, 0xab, 0x80, 0xcd, 0xfc, 0xe7, 0x1d, 0xcf, 0x6a, 0xce, 0x86,
0xc9, 0x3e, 0x43, 0x50, 0x31, 0x89, 0x43, 0x2c, 0x3a, 0x1b, 0x27, 0x6f, 0xfc, 0x06, 0xc1, 0x2b,
0x07, 0x24, 0x88, 0xa8, 0x38, 0xb0, 0x02, 0x9b, 0x06, 0x76, 0x83, 0x9e, 0x25, 0xac, 0x4f, 0x10,
0x5c, 0x4b, 0x85, 0x35, 0x8d, 0xc5, 0x7d, 0x15, 0xe6, 0xd8, 0x2f, 0x5a, 0xc9, 0x6c, 0x64, 0xb7,
0x8a, 0x3b, 0x9b, 0xca, 0x39, 0xf7, 0x48, 0xff, 0x03, 0xe6, 0xa9, 0x47, 0x96, 0xed, 0x9b, 0x82,
0xdf, 0x68, 0xc0, 0x5a, 0xb5, 0xed, 0x1d, 0x0f, 0x11, 0xbd, 0x00, 0xfd, 0x18, 0x7d, 0xb8, 0x34,
0xb2, 0xc8, 0x34, 0xbb, 0xbd, 0x01, 0xe5, 0x84, 0xbe, 0xc5, 0xc6, 0x17, 0xcc, 0xa5, 0xb8, 0xc2,
0x29, 0x0b, 0x4a, 0x6b, 0xe2, 0x3e, 0x3c, 0xb2, 0xfc, 0xc0, 0x3e, 0xeb, 0x88, 0x74, 0x1d, 0x16,
0xbb, 0x03, 0x1c, 0x82, 0x2f, 0xc7, 0xf9, 0x4a, 0x21, 0x95, 0x2b, 0xec, 0xcf, 0x08, 0x56, 0xd8,
0xed, 0x78, 0x9e, 0x30, 0xff, 0x09, 0xc1, 0xf2, 0x5d, 0x8b, 0x9e, 0x27, 0xc8, 0x9f, 0xc9, 0x20,
0x1a, 0x62, 0x3e, 0xcb, 0xe0, 0xc0, 0x18, 0xe3, 0xa0, 0x69, 0x25, 0xc7, 0x8d, 0x7a, 0x31, 0x86,
0x9a, 0x1a, 0x7f, 0x1d, 0x46, 0xdb, 0x73, 0x86, 0xfc, 0x6f, 0x08, 0xae, 0x1e, 0x90, 0x20, 0x44,
0x3d, 0x13, 0x51, 0x79, 0x52, 0x6b, 0x79, 0x26, 0xee, 0x14, 0x25, 0xf8, 0x33, 0x89, 0xdd, 0x7f,
0x44, 0xb0, 0xca, 0xe2, 0xea, 0x6c, 0x18, 0xc1, 0x24, 0xc9, 0xd6, 0xef, 0x91, 0xb8, 0x6e, 0xa2,
0x88, 0xa7, 0x51, 0x9d, 0xc2, 0xf0, 0x32, 0x2a, 0xc3, 0x63, 0xe0, 0x42, 0xca, 0xe1, 0x3e, 0xad,
0x64, 0x37, 0xb2, 0x0c, 0x5c, 0x94, 0x66, 0xfc, 0x02, 0xc1, 0xda, 0x20, 0x13, 0xac, 0x92, 0x56,
0x87, 0xb8, 0xc1, 0xf3, 0xeb, 0x33, 0xa9, 0x8d, 0xcc, 0xa8, 0x36, 0xf0, 0x15, 0x58, 0xa0, 0x62,
0x9d, 0x30, 0xc9, 0x1b, 0x12, 0xf8, 0x4b, 0x6e, 0x04, 0xce, 0x34, 0xca, 0xaa, 0xc0, 0xbc, 0xed,
0x36, 0xc9, 0x93, 0x10, 0xcd, 0x60, 0xc8, 0xbe, 0xd4, 0x7b, 0xb6, 0xd3, 0x0c, 0x61, 0x0c, 0x86,
0x78, 0x13, 0x34, 0xe2, 0x5a, 0x75, 0x87, 0xd4, 0x38, 0x2f, 0x3f, 0xd4, 0x82, 0x59, 0x14, 0xb4,
0x43, 0x46, 0x32, 0x7e, 0x89, 0x60, 0x99, 0x9d, 0xa9, 0xc4, 0x48, 0x5f, 0xac, 0xce, 0x36, 0xa0,
0x18, 0x39, 0x34, 0x09, 0x37, 0x4a, 0x32, 0x1e, 0xc1, 0x4a, 0x1c, 0xce, 0x34, 0x3a, 0x7b, 0x05,
0x20, 0x3c, 0x11, 0x61, 0x5b, 0x59, 0x33, 0x42, 0x31, 0xfe, 0x8b, 0x00, 0x8b, 0xf4, 0x82, 0x2b,
0xe3, 0x2c, 0xfd, 0xef, 0x2a, 0xc0, 0x43, 0x9b, 0x38, 0xcd, 0x68, 0x04, 0x5b, 0xe0, 0x14, 0xfe,
0x79, 0x1f, 0x34, 0xf2, 0x24, 0xf0, 0xad, 0x5a, 0xd7, 0xf2, 0xad, 0x0e, 0xad, 0xcc, 0x4d, 0x1a,
0x6c, 0x8a, 0x7c, 0xda, 0x11, 0x9f, 0x65, 0xfc, 0x83, 0x25, 0x26, 0xd2, 0x28, 0x67, 0x7d, 0xc7,
0x57, 0x01, 0xb8, 0xd1, 0x8a, 0xcf, 0x73, 0xe2, 0x33, 0xa7, 0xf0, 0x70, 0xfe, 0x29, 0x82, 0x32,
0xdf, 0x82, 0xd8, 0x4f, 0x97, 0x89, 0x4d, 0xcc, 0x41, 0x89, 0x39, 0x63, 0x5c, 0xe8, 0xeb, 0x90,
0x97, 0x8a, 0xcd, 0x4e, 0xaa, 0x58, 0x39, 0xe1, 0x84, 0x6d, 0x18, 0x7f, 0x40, 0xb0, 0x9a, 0x50,
0xf9, 0x34, 0x16, 0x7d, 0x1f, 0xb0, 0xd8, 0x61, 0x73, 0xb8, 0xed, 0xc1, 0xd5, 0x93, 0x78, 0xa7,
0xca, 0x41, 0x52, 0x49, 0xe6, 0x45, 0x3b, 0x41, 0xa1, 0xc6, 0xbf, 0x10, 0x5c, 0x39, 0x20, 0x01,
0x67, 0xdd, 0x63, 0xb1, 0xe3, 0xc8, 0xf7, 0x5a, 0x3e, 0xa1, 0xf4, 0xfc, 0xda, 0xc7, 0x6f, 0x45,
0xae, 0xa2, 0xda, 0xd2, 0x34, 0xfa, 0xdf, 0x04, 0x8d, 0xaf, 0x41, 0x9a, 0x35, 0xdf, 0x3b, 0xa6,
0xd2, 0x8e, 0x8a, 0x92, 0x66, 0x7a, 0xc7, 0xdc, 0x20, 0x02, 0x2f, 0xb0, 0x1c, 0xc1, 0x20, 0x2f,
0x06, 0x4e, 0x61, 0x9f, 0xb9, 0x0f, 0x0e, 0x80, 0x31, 0xe1, 0xe4, 0xfc, 0xea, 0xf8, 0x63, 0x04,
0xab, 0x89, 0xad, 0x4c, 0xa3, 0xdb, 0x3b, 0x22, 0x93, 0x12, 0x9b, 0x59, 0xdc, 0xb9, 0xa6, 0x9c,
0x13, 0x59, 0x4c, 0x70, 0x1b, 0x7f, 0x47, 0x50, 0x66, 0xaf, 0xad, 0x73, 0x1e, 0xd0, 0xfe, 0x87,
0xa0, 0x74, 0xe8, 0x52, 0xe2, 0x07, 0xb3, 0x9f, 0x4c, 0xe3, 0x37, 0xa1, 0xe0, 0x7b, 0xc7, 0xb5,
0xa6, 0x15, 0x58, 0xf2, 0x2a, 0x5a, 0x57, 0xc2, 0xdb, 0x73, 0xbc, 0xba, 0x39, 0xef, 0x7b, 0xc7,
0xfb, 0x56, 0x60, 0xe1, 0xcb, 0xb0, 0xd0, 0xb6, 0x68, 0xbb, 0xf6, 0x88, 0xf4, 0x69, 0x25, 0xbf,
0x91, 0xdd, 0x2a, 0x99, 0x05, 0x46, 0xb8, 0x47, 0xfa, 0x94, 0x19, 0xd3, 0xe2, 0x60, 0xff, 0xd3,
0x58, 0xd1, 0x35, 0x28, 0xfa, 0xde, 0xf1, 0xe1, 0x7e, 0xad, 0x4e, 0x5a, 0xb6, 0x2b, 0x1d, 0x14,
0x38, 0x69, 0x8f, 0x51, 0x18, 0x0a, 0xc1, 0x40, 0xdc, 0xa6, 0x74, 0xcf, 0x02, 0x27, 0x7c, 0xd7,
0x6d, 0x1a, 0x8f, 0xa1, 0x7c, 0xe4, 0x58, 0x0d, 0xd2, 0xf6, 0x9c, 0x26, 0xf1, 0x79, 0xb4, 0xc7,
0x65, 0xc8, 0x06, 0x56, 0x4b, 0x5e, 0x27, 0xec, 0x27, 0xfe, 0x1a, 0xe4, 0x82, 0x7e, 0x77, 0x60,
0xa8, 0x5f, 0x54, 0xc6, 0xdd, 0x88, 0x98, 0xfb, 0xfd, 0x2e, 0x31, 0xf9, 0x0c, 0xbc, 0x06, 0x79,
0x5e, 0x6e, 0x15, 0x17, 0x8d, 0x66, 0xca, 0x91, 0xf1, 0x20, 0xb6, 0xee, 0x81, 0xef, 0xf5, 0xba,
0xf8, 0x10, 0xb4, 0xee, 0x90, 0xc6, 0x94, 0x90, 0x1e, 0xe5, 0x93, 0xa0, 0xcd, 0xd8, 0x54, 0xe3,
0x3f, 0x08, 0x4a, 0x55, 0x62, 0xf9, 0x8d, 0xf6, 0x79, 0x78, 0x68, 0x32, 0x8d, 0x37, 0xa9, 0x23,
0x7d, 0x84, 0xfd, 0xc4, 0xb7, 0xe0, 0x62, 0x64, 0x43, 0xb5, 0x16, 0x53, 0x50, 0x25, 0xcf, 0x7b,
0x12, 0xe5, 0x6e, 0x42, 0x71, 0xc6, 0x3d, 0xc8, 0xdd, 0xb5, 0x03, 0x2e, 0x86, 0xe5, 0x7d, 0x88,
0xe7, 0x7d, 0xec, 0x27, 0x5e, 0x8f, 0xd8, 0x6d, 0x86, 0x1f, 0x40, 0x68, 0x9c, 0xbc, 0xd5, 0xe1,
0xf9, 0xf2, 0x64, 0x32, 0xa6, 0x1c, 0x19, 0xdf, 0x1f, 0x6a, 0x8e, 0xf6, 0x9c, 0x80, 0x3e, 0x9f,
0x55, 0x62, 0xc8, 0xb5, 0x6d, 0xf9, 0x48, 0xd4, 0x4c, 0xfe, 0xdb, 0xf8, 0x31, 0x02, 0xed, 0x6d,
0xa7, 0x47, 0x5f, 0xc4, 0x99, 0xa8, 0x6a, 0x6c, 0x59, 0x75, 0x8d, 0xed, 0x9f, 0x19, 0x58, 0x3d,
0x22, 0x3e, 0xb5, 0x69, 0x40, 0xdc, 0x40, 0x26, 0xde, 0x87, 0xee, 0x43, 0x2f, 0xfe, 0xc2, 0x41,
0x89, 0x17, 0xce, 0xe7, 0x93, 0xef, 0x33, 0x6f, 0xf4, 0xba, 0xc4, 0xad, 0x05, 0xb6, 0x8c, 0x35,
0x39, 0xb3, 0xc0, 0x08, 0xf7, 0xed, 0x0e, 0x61, 0xbe, 0x4c, 0x89, 0xe5, 0x90, 0xa6, 0xf8, 0x3c,
0xc7, 0x3f, 0x83, 0x20, 0x71, 0x86, 0x4d, 0xd0, 0x1e, 0x32, 0x0d, 0x0e, 0x38, 0xf2, 0x9c, 0xa3,
0x28, 0x69, 0x9c, 0x65, 0x1d, 0x0a, 0x6e, 0xaf, 0x23, 0x2e, 0xe3, 0x79, 0x91, 0xf5, 0xb9, 0xbd,
0x0e, 0xbf, 0xa9, 0xd7, 0xa1, 0xd0, 0x21, 0x9d, 0x1a, 0xb5, 0x9f, 0x92, 0x4a, 0x41, 0x7c, 0xea,
0x90, 0x4e, 0xd5, 0x7e, 0x4a, 0x06, 0xaf, 0x7a, 0x52, 0x59, 0xe0, 0x2e, 0xae, 0xce, 0x07, 0xa5,
0xae, 0x62, 0xb7, 0xd1, 0xaf, 0x45, 0x8d, 0x58, 0xa9, 0xd0, 0xe7, 0x3f, 0xe7, 0x35, 0x90, 0x07,
0x9b, 0x38, 0xe6, 0x2f, 0x41, 0xc2, 0xc7, 0x52, 0x2a, 0xd7, 0xbf, 0x43, 0xb0, 0x91, 0x8e, 0x6a,
0x9a, 0x70, 0xfb, 0x6d, 0x98, 0xb3, 0xdd, 0x87, 0xde, 0x20, 0x07, 0xbd, 0xa9, 0x8e, 0x4e, 0xca,
0x75, 0xc5, 0x44, 0xe3, 0xdf, 0x08, 0xca, 0xef, 0xf7, 0x88, 0xdf, 0x7f, 0xd9, 0xa6, 0x17, 0x3d,
0xfe, 0x5c, 0xfc, 0xf8, 0xa3, 0x46, 0x33, 0x17, 0x37, 0x9a, 0xf8, 0x35, 0x9e, 0x1f, 0xf3, 0xc6,
0x98, 0x8f, 0xbd, 0x31, 0x8c, 0x67, 0x08, 0xf4, 0x03, 0x12, 0x24, 0xb7, 0x7a, 0x76, 0x46, 0xf1,
0x09, 0x82, 0xcb, 0x4a, 0x40, 0xd3, 0xd8, 0xc3, 0x37, 0xe2, 0xf6, 0xa0, 0xbe, 0xad, 0x46, 0x96,
0x94, 0xa6, 0xb0, 0x0a, 0xcb, 0x26, 0x69, 0x31, 0x4b, 0xf1, 0xdf, 0xb1, 0xdd, 0x47, 0x52, 0x35,
0x2c, 0x35, 0x58, 0x89, 0xd3, 0x25, 0xc2, 0xaf, 0xc0, 0xbc, 0xd5, 0x6c, 0xb2, 0xac, 0x7e, 0xac,
0xda, 0xbe, 0x23, 0x78, 0xcc, 0x01, 0x73, 0x64, 0x67, 0x99, 0x89, 0x77, 0x76, 0xf3, 0x5b, 0xb0,
0x94, 0xb8, 0xd3, 0x71, 0x01, 0x72, 0xef, 0x79, 0x2e, 0x29, 0x5f, 0xc0, 0x65, 0xd0, 0xf6, 0x6c,
0xd7, 0xf2, 0xfb, 0x1f, 0x90, 0x46, 0xe0, 0xf9, 0xe5, 0x26, 0x5e, 0x82, 0xe2, 0xdb, 0x8e, 0x67,
0x05, 0x92, 0x40, 0x76, 0x7e, 0xb5, 0x0a, 0xa5, 0x77, 0xf9, 0x32, 0x55, 0xe2, 0x3f, 0xb6, 0x1b,
0x04, 0xd7, 0xa0, 0x9c, 0x6c, 0xf6, 0xe3, 0xd7, 0x94, 0x0a, 0x4b, 0xf9, 0x4f, 0x80, 0x3e, 0x0e,
0xb8, 0x71, 0x01, 0x7f, 0x04, 0x8b, 0xf1, 0x2e, 0x3d, 0x56, 0xfb, 0xa7, 0xb2, 0x95, 0x7f, 0x92,
0xf0, 0x1a, 0x94, 0x62, 0x4d, 0x77, 0x7c, 0x43, 0x29, 0x5b, 0xd5, 0x98, 0xd7, 0x37, 0x95, 0xac,
0xd1, 0xbe, 0xb9, 0x40, 0x1f, 0xef, 0x91, 0xa6, 0xa0, 0x57, 0x36, 0x52, 0x4f, 0x42, 0x6f, 0xc1,
0xc5, 0x91, 0x96, 0x27, 0x7e, 0x5d, 0x29, 0x3f, 0xad, 0x35, 0x7a, 0xd2, 0x12, 0xc7, 0x80, 0x47,
0x5b, 0xd3, 0xf8, 0xb6, 0xfa, 0x04, 0xd2, 0x3a, 0xef, 0xfa, 0xf6, 0xc4, 0xfc, 0xa1, 0xe2, 0x7e,
0x82, 0xe0, 0x52, 0x4a, 0x9f, 0x12, 0xef, 0x2a, 0xc5, 0x8d, 0x6f, 0xb6, 0xea, 0x6f, 0x9e, 0x6e,
0x52, 0x08, 0xc4, 0x85, 0xa5, 0x44, 0xe7, 0x10, 0xdf, 0x52, 0x8a, 0x52, 0x37, 0x31, 0xf5, 0xd7,
0x26, 0x63, 0x0e, 0xd7, 0x7b, 0x00, 0x4b, 0x89, 0x6e, 0x61, 0xca, 0x7a, 0xea, 0x9e, 0xe2, 0x49,
0x07, 0xfa, 0x21, 0x94, 0x62, 0x6d, 0xbd, 0x14, 0x8b, 0x57, 0xb5, 0xfe, 0x4e, 0x12, 0xfd, 0x00,
0xb4, 0x68, 0xf7, 0x0d, 0x6f, 0xa5, 0xf9, 0xd2, 0x88, 0xe0, 0xd3, 0xb8, 0xd2, 0xb0, 0x70, 0x3f,
0xc6, 0x95, 0x46, 0xfa, 0x11, 0x93, 0xbb, 0x52, 0x44, 0xfe, 0x58, 0x57, 0x3a, 0xf5, 0x12, 0x1f,
0x23, 0x58, 0x53, 0x37, 0x6f, 0xf0, 0x4e, 0x9a, 0x6d, 0xa6, 0xb7, 0xa9, 0xf4, 0xdd, 0x53, 0xcd,
0x09, 0xb5, 0xf8, 0x08, 0x16, 0xe3, 0xed, 0x8f, 0x14, 0x2d, 0x2a, 0xbb, 0x3a, 0xfa, 0xad, 0x89,
0x78, 0xc3, 0xc5, 0xbe, 0x07, 0xc5, 0x48, 0x69, 0x1a, 0xbf, 0x3a, 0xc6, 0x8e, 0xa3, 0x95, 0x8f,
0x93, 0x34, 0xd9, 0x86, 0x52, 0xac, 0x1c, 0x99, 0x66, 0xc3, 0x8a, 0x2a, 0xb1, 0x7e, 0x73, 0x12,
0xd6, 0x70, 0x03, 0x6d, 0x28, 0xc5, 0x8a, 0x43, 0x29, 0x2b, 0xa9, 0x6a, 0x61, 0x29, 0x2b, 0x29,
0x6b, 0x4d, 0xc6, 0x05, 0xfc, 0xa3, 0x48, 0x1d, 0x2a, 0x56, 0xeb, 0xc3, 0x5f, 0x1e, 0x2b, 0x47,
0x55, 0xea, 0xd4, 0x77, 0x4e, 0x33, 0x25, 0x84, 0xf0, 0x3e, 0x2c, 0x84, 0x35, 0x28, 0x7c, 0x3d,
0x35, 0x2c, 0x9c, 0xe6, 0xa4, 0xaa, 0x90, 0x17, 0xf5, 0x10, 0x6c, 0xa4, 0x14, 0x76, 0x23, 0xc5,
0x22, 0xfd, 0x0b, 0x63, 0x79, 0x42, 0x9c, 0x26, 0xe4, 0xc5, 0x6b, 0x36, 0x45, 0x68, 0xac, 0x48,
0xa0, 0x8f, 0xe7, 0xe1, 0xcf, 0x61, 0xe3, 0x02, 0x3e, 0x84, 0x39, 0xfe, 0x8c, 0xc5, 0xea, 0x50,
0x14, 0x7d, 0xe2, 0x9e, 0xb4, 0xe7, 0x9f, 0x22, 0xa8, 0xa4, 0xbd, 0x53, 0x70, 0xea, 0x2d, 0x34,
0xee, 0xb1, 0xa5, 0xdf, 0x39, 0xe5, 0xac, 0x50, 0x55, 0x4f, 0x61, 0x59, 0x91, 0x1d, 0xe3, 0xed,
0x34, 0x79, 0x29, 0x89, 0xbd, 0xfe, 0xc6, 0xe4, 0x13, 0xc2, 0xb5, 0x09, 0x68, 0xd1, 0x84, 0x37,
0xe5, 0x3a, 0x50, 0xe4, 0xca, 0xfa, 0x8d, 0x09, 0x38, 0x07, 0xcb, 0xec, 0xf4, 0x40, 0x3b, 0xf2,
0xbd, 0x27, 0xfd, 0x41, 0x42, 0xfa, 0x72, 0x96, 0xdd, 0xbb, 0xf3, 0x83, 0xdd, 0x96, 0x1d, 0xb4,
0x7b, 0x75, 0x76, 0xfe, 0xdb, 0x82, 0xf7, 0x75, 0xdb, 0x93, 0xbf, 0xb6, 0x6d, 0x37, 0x20, 0xbe,
0x6b, 0x39, 0xdb, 0x5c, 0x96, 0xa4, 0x76, 0xeb, 0xf5, 0x3c, 0x1f, 0xef, 0xfe, 0x3f, 0x00, 0x00,
0xff, 0xff, 0xed, 0xa9, 0xf8, 0x31, 0x64, 0x2b, 0x00, 0x00,
// 2084 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xdf, 0x6f, 0x1b, 0xc7,
0xf1, 0xf7, 0x92, 0x14, 0x45, 0x0d, 0x8f, 0x12, 0xbd, 0xfa, 0x61, 0xea, 0x6c, 0xc7, 0xd2, 0x7d,
0xbf, 0x6e, 0x64, 0x3b, 0xb1, 0x52, 0x29, 0x6e, 0x5a, 0x14, 0x2d, 0x5a, 0x45, 0xb5, 0x2c, 0x38,
0x09, 0x94, 0x93, 0x1b, 0x34, 0x0d, 0x0c, 0xe2, 0xc8, 0x5b, 0x8b, 0x07, 0x1f, 0xef, 0xd8, 0xdb,
0xa3, 0x65, 0xfa, 0xa9, 0x40, 0x8a, 0x02, 0xfd, 0xe5, 0x14, 0x68, 0x51, 0xa0, 0x7d, 0x2c, 0x90,
0xe7, 0xb6, 0x68, 0x80, 0x02, 0x7d, 0xee, 0x43, 0x81, 0xbe, 0xf4, 0x9f, 0xe8, 0x5b, 0xfb, 0x27,
0x14, 0x28, 0xf6, 0x07, 0x8f, 0x77, 0xc7, 0x3d, 0x8a, 0x32, 0xe3, 0x88, 0x7a, 0xbb, 0x9b, 0x9b,
0xdd, 0xfd, 0xcc, 0xec, 0xcc, 0xec, 0xec, 0xcc, 0x81, 0xd6, 0x76, 0xdc, 0x27, 0x5d, 0x7a, 0xbb,
0x13, 0xf8, 0xa1, 0x8f, 0x17, 0xe3, 0x6f, 0xb7, 0xc5, 0x8b, 0xae, 0x35, 0xfd, 0x76, 0xdb, 0xf7,
0x04, 0x51, 0xd7, 0x68, 0xb3, 0x45, 0xda, 0x96, 0x78, 0x33, 0x3e, 0x45, 0x70, 0xe9, 0xed, 0x80,
0x58, 0x21, 0x79, 0xdb, 0x77, 0x5d, 0xd2, 0x0c, 0x1d, 0xdf, 0x33, 0xc9, 0x0f, 0xba, 0x84, 0x86,
0xf8, 0x0d, 0x28, 0x34, 0x2c, 0x4a, 0x6a, 0x68, 0x0d, 0x6d, 0x94, 0xb7, 0xae, 0xdc, 0x4e, 0xcc,
0x2d, 0xe7, 0x7c, 0x97, 0x1e, 0xed, 0x58, 0x94, 0x98, 0x9c, 0x13, 0x5f, 0x82, 0x59, 0xbb, 0x51,
0xf7, 0xac, 0x36, 0xa9, 0xe5, 0xd6, 0xd0, 0xc6, 0x9c, 0x59, 0xb4, 0x1b, 0xef, 0x59, 0x6d, 0x82,
0x5f, 0x85, 0x85, 0x66, 0x34, 0xbf, 0x60, 0xc8, 0x73, 0x86, 0xf9, 0x01, 0x99, 0x33, 0xae, 0x40,
0x51, 0xe0, 0xab, 0x15, 0xd6, 0xd0, 0x86, 0x66, 0xca, 0x37, 0xe3, 0x67, 0x08, 0x96, 0x77, 0x03,
0xbf, 0x33, 0x15, 0x28, 0x8d, 0x9f, 0x22, 0x58, 0xba, 0x67, 0xd1, 0xe9, 0x00, 0xf3, 0x21, 0x68,
0x3b, 0xbe, 0xef, 0x9a, 0x84, 0x76, 0x7c, 0x8f, 0x12, 0xbc, 0x0d, 0x45, 0x1a, 0x5a, 0x61, 0x97,
0x4a, 0x14, 0x97, 0x95, 0x28, 0x0e, 0x39, 0x8b, 0x29, 0x59, 0xf1, 0x12, 0xcc, 0x3c, 0xb1, 0xdc,
0xae, 0x00, 0x51, 0x32, 0xc5, 0x8b, 0xf1, 0x11, 0xcc, 0x1f, 0x86, 0x81, 0xe3, 0x1d, 0x7d, 0x8e,
0x93, 0xcf, 0xf5, 0x27, 0xff, 0x33, 0x82, 0xd5, 0x5d, 0x42, 0x9b, 0x81, 0xd3, 0x98, 0x12, 0xe3,
0x33, 0x40, 0x1b, 0x50, 0xf6, 0x77, 0xb9, 0x09, 0xe6, 0xcd, 0x04, 0xcd, 0xf8, 0x0c, 0x81, 0xae,
0x42, 0x3d, 0x89, 0x7e, 0xbe, 0x11, 0x19, 0x7d, 0x8e, 0x0f, 0xba, 0x9e, 0x1c, 0x24, 0x1d, 0x76,
0xb0, 0xda, 0x21, 0x27, 0xf4, 0x7d, 0x63, 0x08, 0x76, 0x5e, 0x01, 0x9b, 0xf9, 0xcf, 0x3b, 0xbe,
0x65, 0x4f, 0x87, 0xc9, 0x3e, 0x47, 0x50, 0x33, 0x89, 0x4b, 0x2c, 0x3a, 0x1d, 0x3b, 0x6f, 0xfc,
0x1a, 0xc1, 0x2b, 0x7b, 0x24, 0x8c, 0xa9, 0x38, 0xb4, 0x42, 0x87, 0x86, 0x4e, 0x93, 0x9e, 0x25,
0xac, 0x4f, 0x10, 0x5c, 0xcb, 0x84, 0x35, 0x89, 0xc5, 0xbd, 0x05, 0x33, 0xec, 0x89, 0xd6, 0x72,
0x6b, 0xf9, 0x8d, 0xf2, 0xd6, 0xba, 0x72, 0xcc, 0x7d, 0xd2, 0xfb, 0x80, 0x79, 0xea, 0x81, 0xe5,
0x04, 0xa6, 0xe0, 0x37, 0x9a, 0xb0, 0x72, 0xd8, 0xf2, 0x8f, 0x07, 0x88, 0x5e, 0x82, 0x7e, 0x8c,
0x1e, 0x5c, 0x1a, 0x5a, 0x64, 0x12, 0x69, 0x6f, 0x40, 0x35, 0xa5, 0x6f, 0x21, 0xf8, 0x9c, 0xb9,
0x90, 0x54, 0x38, 0x65, 0x41, 0x69, 0x45, 0x9c, 0x87, 0x07, 0x56, 0x10, 0x3a, 0x67, 0x1d, 0x91,
0xae, 0xc3, 0x7c, 0xa7, 0x8f, 0x43, 0xf0, 0x15, 0x38, 0x5f, 0x25, 0xa2, 0x72, 0x85, 0xfd, 0x09,
0xc1, 0x12, 0x3b, 0x1d, 0xcf, 0x13, 0xe6, 0x3f, 0x22, 0x58, 0xbc, 0x67, 0xd1, 0xf3, 0x04, 0xf9,
0x33, 0x19, 0x44, 0x23, 0xcc, 0x67, 0x19, 0x1c, 0x18, 0x63, 0x12, 0x34, 0xad, 0x15, 0xb8, 0x51,
0xcf, 0x27, 0x50, 0x53, 0xe3, 0x2f, 0x83, 0x68, 0x7b, 0xce, 0x90, 0xff, 0x15, 0xc1, 0xd5, 0x3d,
0x12, 0x46, 0xa8, 0xa7, 0x22, 0x2a, 0x8f, 0x6b, 0x2d, 0xcf, 0xc5, 0x99, 0xa2, 0x04, 0x7f, 0x26,
0xb1, 0xfb, 0x0f, 0x08, 0x96, 0x59, 0x5c, 0x9d, 0x0e, 0x23, 0x18, 0x27, 0xd9, 0xfa, 0x1d, 0x12,
0xc7, 0x4d, 0x1c, 0xf1, 0x24, 0xaa, 0x53, 0x18, 0x5e, 0x4e, 0x65, 0x78, 0x0c, 0x5c, 0x44, 0xd9,
0xdf, 0xa5, 0xb5, 0xfc, 0x5a, 0x9e, 0x81, 0x8b, 0xd3, 0x8c, 0x9f, 0x23, 0x58, 0xe9, 0x67, 0x82,
0x87, 0xe4, 0xa8, 0x4d, 0xbc, 0xf0, 0xc5, 0xf5, 0x99, 0xd6, 0x46, 0x6e, 0x58, 0x1b, 0xf8, 0x0a,
0xcc, 0x51, 0xb1, 0x4e, 0x94, 0xe4, 0x0d, 0x08, 0xfc, 0x26, 0x37, 0x04, 0x67, 0x12, 0x65, 0xd5,
0x60, 0xd6, 0xf1, 0x6c, 0xf2, 0x34, 0x42, 0xd3, 0x7f, 0x65, 0x5f, 0x1a, 0x5d, 0xc7, 0xb5, 0x23,
0x18, 0xfd, 0x57, 0xbc, 0x0e, 0x1a, 0xf1, 0xac, 0x86, 0x4b, 0xea, 0x9c, 0x97, 0x6f, 0x6a, 0xc9,
0x2c, 0x0b, 0xda, 0x3e, 0x23, 0x19, 0xbf, 0x40, 0xb0, 0xc8, 0xf6, 0x54, 0x62, 0xa4, 0x2f, 0x57,
0x67, 0x6b, 0x50, 0x8e, 0x6d, 0x9a, 0x84, 0x1b, 0x27, 0x19, 0x8f, 0x61, 0x29, 0x09, 0x67, 0x12,
0x9d, 0xbd, 0x02, 0x10, 0xed, 0x88, 0xb0, 0xad, 0xbc, 0x19, 0xa3, 0x18, 0xff, 0x41, 0x80, 0x45,
0x7a, 0xc1, 0x95, 0x71, 0x96, 0xfe, 0x77, 0x15, 0xe0, 0x91, 0x43, 0x5c, 0x3b, 0x1e, 0xc1, 0xe6,
0x38, 0x85, 0x7f, 0xde, 0x05, 0x8d, 0x3c, 0x0d, 0x03, 0xab, 0xde, 0xb1, 0x02, 0xab, 0x4d, 0x6b,
0x33, 0xe3, 0x06, 0x9b, 0x32, 0x1f, 0x76, 0xc0, 0x47, 0x19, 0x7f, 0x67, 0x89, 0x89, 0x34, 0xca,
0x69, 0x97, 0xf8, 0x2a, 0x00, 0x37, 0x5a, 0xf1, 0x79, 0x46, 0x7c, 0xe6, 0x14, 0x1e, 0xce, 0x3f,
0x45, 0x50, 0xe5, 0x22, 0x08, 0x79, 0x3a, 0x6c, 0xda, 0xd4, 0x18, 0x94, 0x1a, 0x33, 0xc2, 0x85,
0xbe, 0x06, 0x45, 0xa9, 0xd8, 0xfc, 0xb8, 0x8a, 0x95, 0x03, 0x4e, 0x10, 0xc3, 0xf8, 0x3d, 0x82,
0xe5, 0x94, 0xca, 0x27, 0xb1, 0xe8, 0x07, 0x80, 0x85, 0x84, 0xf6, 0x40, 0xec, 0xfe, 0xd1, 0x93,
0xba, 0xa7, 0xca, 0x97, 0xb4, 0x92, 0xcc, 0x8b, 0x4e, 0x8a, 0x42, 0x8d, 0x7f, 0x22, 0xb8, 0xb2,
0x47, 0x42, 0xce, 0xba, 0xc3, 0x62, 0xc7, 0x41, 0xe0, 0x1f, 0x05, 0x84, 0xd2, 0xf3, 0x6b, 0x1f,
0xbf, 0x11, 0xb9, 0x8a, 0x4a, 0xa4, 0x49, 0xf4, 0xbf, 0x0e, 0x1a, 0x5f, 0x83, 0xd8, 0xf5, 0xc0,
0x3f, 0xa6, 0xd2, 0x8e, 0xca, 0x92, 0x66, 0xfa, 0xc7, 0xdc, 0x20, 0x42, 0x3f, 0xb4, 0x5c, 0xc1,
0x20, 0x0f, 0x06, 0x4e, 0x61, 0x9f, 0xb9, 0x0f, 0xf6, 0x81, 0xb1, 0xc9, 0xc9, 0xf9, 0xd5, 0xf1,
0xc7, 0x08, 0x96, 0x53, 0xa2, 0x4c, 0xa2, 0xdb, 0x3b, 0x22, 0x93, 0x12, 0xc2, 0xcc, 0x6f, 0x5d,
0x53, 0x8e, 0x89, 0x2d, 0x26, 0xb8, 0x8d, 0xbf, 0x21, 0xa8, 0xb2, 0xdb, 0xd6, 0x39, 0x0f, 0x68,
0xff, 0x45, 0x50, 0xd9, 0xf7, 0x28, 0x09, 0xc2, 0xe9, 0x4f, 0xa6, 0xf1, 0x9b, 0x50, 0x0a, 0xfc,
0xe3, 0xba, 0x6d, 0x85, 0x96, 0x3c, 0x8a, 0x56, 0x95, 0xf0, 0x76, 0x5c, 0xbf, 0x61, 0xce, 0x06,
0xfe, 0xf1, 0xae, 0x15, 0x5a, 0xf8, 0x32, 0xcc, 0xb5, 0x2c, 0xda, 0xaa, 0x3f, 0x26, 0x3d, 0x5a,
0x2b, 0xae, 0xe5, 0x37, 0x2a, 0x66, 0x89, 0x11, 0xee, 0x93, 0x1e, 0x65, 0xc6, 0x34, 0xdf, 0x97,
0x7f, 0x12, 0x2b, 0xba, 0x06, 0xe5, 0xc0, 0x3f, 0xde, 0xdf, 0xad, 0x37, 0xc8, 0x91, 0xe3, 0x49,
0x07, 0x05, 0x4e, 0xda, 0x61, 0x14, 0x86, 0x42, 0x30, 0x10, 0xcf, 0x96, 0xee, 0x59, 0xe2, 0x84,
0xef, 0x78, 0xb6, 0xf1, 0x04, 0xaa, 0x07, 0xae, 0xd5, 0x24, 0x2d, 0xdf, 0xb5, 0x49, 0xc0, 0xa3,
0x3d, 0xae, 0x42, 0x3e, 0xb4, 0x8e, 0xe4, 0x71, 0xc2, 0x1e, 0xf1, 0x57, 0xa1, 0x10, 0xf6, 0x3a,
0x7d, 0x43, 0xfd, 0x7f, 0x65, 0xdc, 0x8d, 0x4d, 0xf3, 0xa0, 0xd7, 0x21, 0x26, 0x1f, 0x81, 0x57,
0xa0, 0xc8, 0xcb, 0xad, 0xe2, 0xa0, 0xd1, 0x4c, 0xf9, 0x66, 0x3c, 0x4c, 0xac, 0xbb, 0x17, 0xf8,
0xdd, 0x0e, 0xde, 0x07, 0xad, 0x33, 0xa0, 0x31, 0x25, 0x64, 0x47, 0xf9, 0x34, 0x68, 0x33, 0x31,
0xd4, 0xf8, 0x77, 0x0e, 0x2a, 0x87, 0xc4, 0x0a, 0x9a, 0xad, 0xf3, 0x70, 0xd1, 0x64, 0x1a, 0xb7,
0xa9, 0x2b, 0x7d, 0x84, 0x3d, 0xe2, 0x5b, 0x70, 0x31, 0x26, 0x50, 0xfd, 0x88, 0x29, 0xa8, 0x56,
0xe4, 0x3d, 0x89, 0x6a, 0x27, 0xad, 0xb8, 0xb7, 0xa0, 0x64, 0x53, 0xb7, 0xce, 0xb7, 0x68, 0x96,
0x6f, 0x91, 0x5a, 0xbe, 0x5d, 0xea, 0xf2, 0xad, 0x99, 0xb5, 0xc5, 0x03, 0xbe, 0x0b, 0x15, 0xca,
0xb5, 0xd4, 0x4f, 0xb3, 0x4a, 0xe3, 0x66, 0x03, 0x9a, 0x18, 0x27, 0xf3, 0xac, 0xfb, 0x50, 0xb8,
0xe7, 0x84, 0x5c, 0x0e, 0x96, 0x78, 0x22, 0x9e, 0x78, 0xb2, 0x47, 0xbc, 0x1a, 0x73, 0x9c, 0x1c,
0xb7, 0x80, 0xc8, 0x3b, 0x78, 0xaf, 0xc5, 0x0f, 0xa4, 0x69, 0xe4, 0x4c, 0xf9, 0x66, 0x7c, 0x6f,
0xb0, 0x75, 0xb4, 0xeb, 0x86, 0xf4, 0xc5, 0xdc, 0x02, 0x43, 0xa1, 0xe5, 0xc8, 0x5b, 0xaa, 0x66,
0xf2, 0x67, 0xe3, 0x47, 0x08, 0xb4, 0xbb, 0x6e, 0x97, 0xbe, 0x0c, 0xa3, 0x50, 0x15, 0xf9, 0xf2,
0xea, 0x22, 0xdf, 0x3f, 0x72, 0xb0, 0x7c, 0x40, 0x02, 0xea, 0xd0, 0x90, 0x78, 0xa1, 0xcc, 0xfc,
0xf7, 0xbd, 0x47, 0x7e, 0xf2, 0x8a, 0x85, 0x52, 0x57, 0xac, 0xcf, 0xe7, 0xc2, 0xc1, 0xc2, 0x81,
0xdf, 0x21, 0x5e, 0x3d, 0x74, 0x64, 0xb0, 0x2b, 0x98, 0x25, 0x46, 0x78, 0xe0, 0xb4, 0x09, 0x0b,
0x26, 0x94, 0x58, 0x2e, 0xb1, 0xc5, 0xe7, 0x19, 0xfe, 0x19, 0x04, 0x89, 0x33, 0xac, 0x83, 0xf6,
0x88, 0x69, 0xb0, 0xcf, 0x51, 0xe4, 0x1c, 0x65, 0x49, 0xe3, 0x2c, 0xab, 0x50, 0xf2, 0xba, 0x6d,
0x91, 0x0d, 0xcc, 0x8a, 0xb4, 0xd3, 0xeb, 0xb6, 0x79, 0xaa, 0xb0, 0x0a, 0xa5, 0x36, 0x69, 0xd7,
0xa9, 0xf3, 0x8c, 0xd4, 0x4a, 0xe2, 0x53, 0x9b, 0xb4, 0x0f, 0x9d, 0x67, 0xa4, 0x5f, 0x56, 0x20,
0xb5, 0x39, 0x6e, 0xc0, 0x6a, 0x13, 0x94, 0xba, 0x4a, 0x1c, 0x87, 0xbf, 0x12, 0x45, 0x6a, 0xa5,
0x42, 0x5f, 0x7c, 0x9f, 0x57, 0x40, 0x6e, 0x6c, 0x6a, 0x9b, 0xbf, 0x04, 0x29, 0x27, 0xcf, 0x28,
0x9d, 0xff, 0x16, 0xc1, 0x5a, 0x36, 0xaa, 0x49, 0xe2, 0xfd, 0xb7, 0x60, 0xc6, 0xf1, 0x1e, 0xf9,
0xfd, 0x24, 0xf8, 0xa6, 0x3a, 0x3c, 0x2a, 0xd7, 0x15, 0x03, 0x8d, 0x7f, 0x21, 0xa8, 0xbe, 0xdf,
0x25, 0x41, 0xef, 0x8b, 0x36, 0xbd, 0xf8, 0xf6, 0x17, 0x92, 0xdb, 0x1f, 0x37, 0x9a, 0x99, 0xa4,
0xd1, 0x24, 0xf3, 0x88, 0xe2, 0x88, 0x4b, 0xce, 0x6c, 0xe2, 0x92, 0x63, 0x3c, 0x47, 0xa0, 0xef,
0x91, 0x30, 0x2d, 0xea, 0xd9, 0x19, 0xc5, 0x27, 0x08, 0x2e, 0x2b, 0x01, 0x4d, 0x62, 0x0f, 0x5f,
0x4f, 0xda, 0x83, 0xfa, 0xb8, 0x1c, 0x5a, 0x52, 0x9a, 0xc2, 0x32, 0x2c, 0x9a, 0xe4, 0x88, 0x59,
0x4a, 0xf0, 0x8e, 0xe3, 0x3d, 0x96, 0xaa, 0x61, 0xb9, 0xc9, 0x52, 0x92, 0x2e, 0x11, 0x7e, 0x05,
0x66, 0x2d, 0xdb, 0x66, 0xd7, 0x8a, 0x91, 0x6a, 0xfb, 0xb6, 0xe0, 0x31, 0xfb, 0xcc, 0x31, 0xc9,
0x72, 0x63, 0x4b, 0x76, 0xf3, 0x9b, 0xb0, 0x90, 0x4a, 0x2a, 0x70, 0x09, 0x0a, 0xef, 0xf9, 0x1e,
0xa9, 0x5e, 0xc0, 0x55, 0xd0, 0x76, 0x1c, 0xcf, 0x0a, 0x7a, 0x1f, 0x90, 0x66, 0xe8, 0x07, 0x55,
0x1b, 0x2f, 0x40, 0xf9, 0xae, 0xeb, 0x5b, 0xa1, 0x24, 0x90, 0xad, 0x5f, 0x2e, 0x43, 0xe5, 0x5d,
0xbe, 0xcc, 0x21, 0x09, 0x9e, 0x38, 0x4d, 0x82, 0xeb, 0x50, 0x4d, 0xff, 0x6d, 0x80, 0x5f, 0x53,
0x2a, 0x2c, 0xe3, 0xa7, 0x04, 0x7d, 0x14, 0x70, 0xe3, 0x02, 0xfe, 0x08, 0xe6, 0x93, 0xbf, 0x09,
0x60, 0xb5, 0x7f, 0x2a, 0xff, 0x25, 0x38, 0x69, 0xf2, 0x3a, 0x54, 0x12, 0x5d, 0x7f, 0x7c, 0x43,
0x39, 0xb7, 0xea, 0xcf, 0x00, 0x7d, 0x5d, 0xc9, 0x1a, 0x6f, 0xdc, 0x0b, 0xf4, 0xc9, 0x26, 0x6d,
0x06, 0x7a, 0x65, 0x27, 0xf7, 0x24, 0xf4, 0x16, 0x5c, 0x1c, 0xea, 0xb9, 0xe2, 0xd7, 0x95, 0xf3,
0x67, 0xf5, 0x66, 0x4f, 0x5a, 0xe2, 0x18, 0xf0, 0x70, 0x6f, 0x1c, 0xdf, 0x56, 0xef, 0x40, 0x56,
0xeb, 0x5f, 0xdf, 0x1c, 0x9b, 0x3f, 0x52, 0xdc, 0x8f, 0x11, 0x5c, 0xca, 0x68, 0x94, 0xe2, 0x6d,
0xe5, 0x74, 0xa3, 0xbb, 0xbd, 0xfa, 0x9b, 0xa7, 0x1b, 0x14, 0x01, 0xf1, 0x60, 0x21, 0xd5, 0xba,
0xc4, 0xb7, 0x94, 0x53, 0xa9, 0xbb, 0xa8, 0xfa, 0x6b, 0xe3, 0x31, 0x47, 0xeb, 0x3d, 0x84, 0x85,
0x54, 0xbb, 0x32, 0x63, 0x3d, 0x75, 0x53, 0xf3, 0xa4, 0x0d, 0xfd, 0x10, 0x2a, 0x89, 0xbe, 0x62,
0x86, 0xc5, 0xab, 0x7a, 0x8f, 0x27, 0x4d, 0xfd, 0x10, 0xb4, 0x78, 0xfb, 0x0f, 0x6f, 0x64, 0xf9,
0xd2, 0xd0, 0xc4, 0xa7, 0x71, 0xa5, 0x41, 0xe7, 0x60, 0x84, 0x2b, 0x0d, 0x35, 0x44, 0xc6, 0x77,
0xa5, 0xd8, 0xfc, 0x23, 0x5d, 0xe9, 0xd4, 0x4b, 0x7c, 0x8c, 0x60, 0x45, 0xdd, 0x3d, 0xc2, 0x5b,
0x59, 0xb6, 0x99, 0xdd, 0x27, 0xd3, 0xb7, 0x4f, 0x35, 0x26, 0xd2, 0xe2, 0x63, 0x98, 0x4f, 0xf6,
0x5f, 0x32, 0xb4, 0xa8, 0x6c, 0x2b, 0xe9, 0xb7, 0xc6, 0xe2, 0x8d, 0x16, 0xfb, 0x2e, 0x94, 0x63,
0xb5, 0x71, 0xfc, 0xea, 0x08, 0x3b, 0x8e, 0x97, 0x5e, 0x4e, 0xd2, 0x64, 0x0b, 0x2a, 0x89, 0x7a,
0x68, 0x96, 0x0d, 0x2b, 0xca, 0xd4, 0xfa, 0xcd, 0x71, 0x58, 0x23, 0x01, 0x5a, 0x50, 0x49, 0x54,
0xa7, 0x32, 0x56, 0x52, 0x15, 0xe3, 0x32, 0x56, 0x52, 0x16, 0xbb, 0x8c, 0x0b, 0xf8, 0x87, 0xb1,
0x42, 0x58, 0xa2, 0xd8, 0x88, 0xbf, 0x3c, 0x72, 0x1e, 0x55, 0xad, 0x55, 0xdf, 0x3a, 0xcd, 0x90,
0x08, 0xc2, 0xfb, 0x30, 0x17, 0x15, 0xc1, 0xf0, 0xf5, 0xcc, 0xb0, 0x70, 0x9a, 0x9d, 0x3a, 0x84,
0xa2, 0x28, 0xc8, 0x60, 0x23, 0xa3, 0xb2, 0x1c, 0xab, 0x56, 0xe9, 0xff, 0x37, 0x92, 0x27, 0xc2,
0x69, 0x42, 0x51, 0xdc, 0x66, 0x33, 0x26, 0x4d, 0x54, 0x29, 0xf4, 0xd1, 0x3c, 0xfc, 0x3a, 0x6c,
0x5c, 0xc0, 0xfb, 0x30, 0xc3, 0xaf, 0xb1, 0x58, 0x1d, 0x8a, 0xe2, 0x57, 0xdc, 0x93, 0x64, 0xfe,
0x09, 0x82, 0x5a, 0xd6, 0x3d, 0x05, 0x67, 0x9e, 0x42, 0xa3, 0x2e, 0x5b, 0xfa, 0x9d, 0x53, 0x8e,
0x8a, 0x54, 0xf5, 0x0c, 0x16, 0x15, 0xd9, 0x31, 0xde, 0xcc, 0x9a, 0x2f, 0x23, 0xb1, 0xd7, 0xdf,
0x18, 0x7f, 0x40, 0xb4, 0x36, 0x01, 0x2d, 0x9e, 0xf0, 0x66, 0x1c, 0x07, 0x8a, 0x5c, 0x59, 0xbf,
0x31, 0x06, 0x67, 0x7f, 0x99, 0xad, 0x2e, 0x68, 0x07, 0x81, 0xff, 0xb4, 0xd7, 0x4f, 0x48, 0xbf,
0x98, 0x65, 0x77, 0xee, 0x7c, 0x7f, 0xfb, 0xc8, 0x09, 0x5b, 0xdd, 0x06, 0xdb, 0xff, 0x4d, 0xc1,
0xfb, 0xba, 0xe3, 0xcb, 0xa7, 0x4d, 0xc7, 0x0b, 0x49, 0xe0, 0x59, 0xee, 0x26, 0x9f, 0x4b, 0x52,
0x3b, 0x8d, 0x46, 0x91, 0xbf, 0x6f, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x24, 0x9e, 0xb3, 0x1f,
0xe5, 0x2b, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

85
internal/proto/plan.proto Normal file
View File

@ -0,0 +1,85 @@
syntax = "proto3";
package milvus.proto.plan;
option go_package = "github.com/milvus-io/milvus/internal/proto/planpb";
import "schema.proto";
message GenericValue {
oneof val {
bool bool_val = 1;
int64 int64_val = 2;
double float_val = 3;
};
}
message QueryInfo {
int64 topk = 1;
string metric_type = 3;
string search_params = 4;
}
message ColumnInfo {
int64 field_id = 1;
schema.DataType data_type = 2;
}
message RangeExpr {
ColumnInfo column_info = 1;
enum OpType {
Invalid = 0;
GreaterThan = 1;
GreaterEqual = 2;
LessThan = 3;
LessEqual = 4;
Equal = 5;
NotEqual = 6;
};
repeated OpType ops = 2;
repeated GenericValue values = 3;
}
message TermExpr {
ColumnInfo column_info = 1;
repeated GenericValue values = 2;
}
message UnaryExpr {
enum UnaryOp{
Invalid = 0;
Not = 1;
};
UnaryOp op = 1;
Expr child = 2;
}
message BinaryExpr {
enum BinaryOp {
Invalid = 0;
LogicalAnd = 1;
LogicalOr = 2;
}
}
message Expr {
oneof expr {
RangeExpr range_expr = 1;
TermExpr term_expr = 2;
UnaryExpr unary_expr = 3;
BinaryExpr binary_expr = 4;
};
}
message VectorANNS {
bool is_binary = 1;
int64 field_id = 2;
Expr predicates = 3;
QueryInfo query_info = 4;
string placeholder_tag = 5; // always be "$0"
}
message PlanNode {
oneof node {
VectorANNS vector_anns = 1;
}
}

View File

@ -0,0 +1,810 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: plan.proto
package planpb
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
schemapb "github.com/milvus-io/milvus/internal/proto/schemapb"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type RangeExpr_OpType int32
const (
RangeExpr_Invalid RangeExpr_OpType = 0
RangeExpr_GreaterThan RangeExpr_OpType = 1
RangeExpr_GreaterEqual RangeExpr_OpType = 2
RangeExpr_LessThan RangeExpr_OpType = 3
RangeExpr_LessEqual RangeExpr_OpType = 4
RangeExpr_Equal RangeExpr_OpType = 5
RangeExpr_NotEqual RangeExpr_OpType = 6
)
var RangeExpr_OpType_name = map[int32]string{
0: "Invalid",
1: "GreaterThan",
2: "GreaterEqual",
3: "LessThan",
4: "LessEqual",
5: "Equal",
6: "NotEqual",
}
var RangeExpr_OpType_value = map[string]int32{
"Invalid": 0,
"GreaterThan": 1,
"GreaterEqual": 2,
"LessThan": 3,
"LessEqual": 4,
"Equal": 5,
"NotEqual": 6,
}
func (x RangeExpr_OpType) String() string {
return proto.EnumName(RangeExpr_OpType_name, int32(x))
}
func (RangeExpr_OpType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{3, 0}
}
type UnaryExpr_UnaryOp int32
const (
UnaryExpr_Invalid UnaryExpr_UnaryOp = 0
UnaryExpr_Not UnaryExpr_UnaryOp = 1
)
var UnaryExpr_UnaryOp_name = map[int32]string{
0: "Invalid",
1: "Not",
}
var UnaryExpr_UnaryOp_value = map[string]int32{
"Invalid": 0,
"Not": 1,
}
func (x UnaryExpr_UnaryOp) String() string {
return proto.EnumName(UnaryExpr_UnaryOp_name, int32(x))
}
func (UnaryExpr_UnaryOp) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{5, 0}
}
type BinaryExpr_BinaryOp int32
const (
BinaryExpr_Invalid BinaryExpr_BinaryOp = 0
BinaryExpr_LogicalAnd BinaryExpr_BinaryOp = 1
BinaryExpr_LogicalOr BinaryExpr_BinaryOp = 2
)
var BinaryExpr_BinaryOp_name = map[int32]string{
0: "Invalid",
1: "LogicalAnd",
2: "LogicalOr",
}
var BinaryExpr_BinaryOp_value = map[string]int32{
"Invalid": 0,
"LogicalAnd": 1,
"LogicalOr": 2,
}
func (x BinaryExpr_BinaryOp) String() string {
return proto.EnumName(BinaryExpr_BinaryOp_name, int32(x))
}
func (BinaryExpr_BinaryOp) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{6, 0}
}
type GenericValue struct {
// Types that are valid to be assigned to Val:
// *GenericValue_BoolVal
// *GenericValue_Int64Val
// *GenericValue_FloatVal
Val isGenericValue_Val `protobuf_oneof:"val"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GenericValue) Reset() { *m = GenericValue{} }
func (m *GenericValue) String() string { return proto.CompactTextString(m) }
func (*GenericValue) ProtoMessage() {}
func (*GenericValue) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{0}
}
func (m *GenericValue) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GenericValue.Unmarshal(m, b)
}
func (m *GenericValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GenericValue.Marshal(b, m, deterministic)
}
func (m *GenericValue) XXX_Merge(src proto.Message) {
xxx_messageInfo_GenericValue.Merge(m, src)
}
func (m *GenericValue) XXX_Size() int {
return xxx_messageInfo_GenericValue.Size(m)
}
func (m *GenericValue) XXX_DiscardUnknown() {
xxx_messageInfo_GenericValue.DiscardUnknown(m)
}
var xxx_messageInfo_GenericValue proto.InternalMessageInfo
type isGenericValue_Val interface {
isGenericValue_Val()
}
type GenericValue_BoolVal struct {
BoolVal bool `protobuf:"varint,1,opt,name=bool_val,json=boolVal,proto3,oneof"`
}
type GenericValue_Int64Val struct {
Int64Val int64 `protobuf:"varint,2,opt,name=int64_val,json=int64Val,proto3,oneof"`
}
type GenericValue_FloatVal struct {
FloatVal float64 `protobuf:"fixed64,3,opt,name=float_val,json=floatVal,proto3,oneof"`
}
func (*GenericValue_BoolVal) isGenericValue_Val() {}
func (*GenericValue_Int64Val) isGenericValue_Val() {}
func (*GenericValue_FloatVal) isGenericValue_Val() {}
func (m *GenericValue) GetVal() isGenericValue_Val {
if m != nil {
return m.Val
}
return nil
}
func (m *GenericValue) GetBoolVal() bool {
if x, ok := m.GetVal().(*GenericValue_BoolVal); ok {
return x.BoolVal
}
return false
}
func (m *GenericValue) GetInt64Val() int64 {
if x, ok := m.GetVal().(*GenericValue_Int64Val); ok {
return x.Int64Val
}
return 0
}
func (m *GenericValue) GetFloatVal() float64 {
if x, ok := m.GetVal().(*GenericValue_FloatVal); ok {
return x.FloatVal
}
return 0
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*GenericValue) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*GenericValue_BoolVal)(nil),
(*GenericValue_Int64Val)(nil),
(*GenericValue_FloatVal)(nil),
}
}
type QueryInfo struct {
Topk int64 `protobuf:"varint,1,opt,name=topk,proto3" json:"topk,omitempty"`
MetricType string `protobuf:"bytes,3,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"`
SearchParams string `protobuf:"bytes,4,opt,name=search_params,json=searchParams,proto3" json:"search_params,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryInfo) Reset() { *m = QueryInfo{} }
func (m *QueryInfo) String() string { return proto.CompactTextString(m) }
func (*QueryInfo) ProtoMessage() {}
func (*QueryInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{1}
}
func (m *QueryInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryInfo.Unmarshal(m, b)
}
func (m *QueryInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryInfo.Marshal(b, m, deterministic)
}
func (m *QueryInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryInfo.Merge(m, src)
}
func (m *QueryInfo) XXX_Size() int {
return xxx_messageInfo_QueryInfo.Size(m)
}
func (m *QueryInfo) XXX_DiscardUnknown() {
xxx_messageInfo_QueryInfo.DiscardUnknown(m)
}
var xxx_messageInfo_QueryInfo proto.InternalMessageInfo
func (m *QueryInfo) GetTopk() int64 {
if m != nil {
return m.Topk
}
return 0
}
func (m *QueryInfo) GetMetricType() string {
if m != nil {
return m.MetricType
}
return ""
}
func (m *QueryInfo) GetSearchParams() string {
if m != nil {
return m.SearchParams
}
return ""
}
type ColumnInfo struct {
FieldId int64 `protobuf:"varint,1,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"`
DataType schemapb.DataType `protobuf:"varint,2,opt,name=data_type,json=dataType,proto3,enum=milvus.proto.schema.DataType" json:"data_type,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ColumnInfo) Reset() { *m = ColumnInfo{} }
func (m *ColumnInfo) String() string { return proto.CompactTextString(m) }
func (*ColumnInfo) ProtoMessage() {}
func (*ColumnInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{2}
}
func (m *ColumnInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ColumnInfo.Unmarshal(m, b)
}
func (m *ColumnInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ColumnInfo.Marshal(b, m, deterministic)
}
func (m *ColumnInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_ColumnInfo.Merge(m, src)
}
func (m *ColumnInfo) XXX_Size() int {
return xxx_messageInfo_ColumnInfo.Size(m)
}
func (m *ColumnInfo) XXX_DiscardUnknown() {
xxx_messageInfo_ColumnInfo.DiscardUnknown(m)
}
var xxx_messageInfo_ColumnInfo proto.InternalMessageInfo
func (m *ColumnInfo) GetFieldId() int64 {
if m != nil {
return m.FieldId
}
return 0
}
func (m *ColumnInfo) GetDataType() schemapb.DataType {
if m != nil {
return m.DataType
}
return schemapb.DataType_None
}
type RangeExpr struct {
ColumnInfo *ColumnInfo `protobuf:"bytes,1,opt,name=column_info,json=columnInfo,proto3" json:"column_info,omitempty"`
Ops []RangeExpr_OpType `protobuf:"varint,2,rep,packed,name=ops,proto3,enum=milvus.proto.plan.RangeExpr_OpType" json:"ops,omitempty"`
Values []*GenericValue `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RangeExpr) Reset() { *m = RangeExpr{} }
func (m *RangeExpr) String() string { return proto.CompactTextString(m) }
func (*RangeExpr) ProtoMessage() {}
func (*RangeExpr) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{3}
}
func (m *RangeExpr) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RangeExpr.Unmarshal(m, b)
}
func (m *RangeExpr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RangeExpr.Marshal(b, m, deterministic)
}
func (m *RangeExpr) XXX_Merge(src proto.Message) {
xxx_messageInfo_RangeExpr.Merge(m, src)
}
func (m *RangeExpr) XXX_Size() int {
return xxx_messageInfo_RangeExpr.Size(m)
}
func (m *RangeExpr) XXX_DiscardUnknown() {
xxx_messageInfo_RangeExpr.DiscardUnknown(m)
}
var xxx_messageInfo_RangeExpr proto.InternalMessageInfo
func (m *RangeExpr) GetColumnInfo() *ColumnInfo {
if m != nil {
return m.ColumnInfo
}
return nil
}
func (m *RangeExpr) GetOps() []RangeExpr_OpType {
if m != nil {
return m.Ops
}
return nil
}
func (m *RangeExpr) GetValues() []*GenericValue {
if m != nil {
return m.Values
}
return nil
}
type TermExpr struct {
ColumnInfo *ColumnInfo `protobuf:"bytes,1,opt,name=column_info,json=columnInfo,proto3" json:"column_info,omitempty"`
Values []*GenericValue `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TermExpr) Reset() { *m = TermExpr{} }
func (m *TermExpr) String() string { return proto.CompactTextString(m) }
func (*TermExpr) ProtoMessage() {}
func (*TermExpr) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{4}
}
func (m *TermExpr) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TermExpr.Unmarshal(m, b)
}
func (m *TermExpr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TermExpr.Marshal(b, m, deterministic)
}
func (m *TermExpr) XXX_Merge(src proto.Message) {
xxx_messageInfo_TermExpr.Merge(m, src)
}
func (m *TermExpr) XXX_Size() int {
return xxx_messageInfo_TermExpr.Size(m)
}
func (m *TermExpr) XXX_DiscardUnknown() {
xxx_messageInfo_TermExpr.DiscardUnknown(m)
}
var xxx_messageInfo_TermExpr proto.InternalMessageInfo
func (m *TermExpr) GetColumnInfo() *ColumnInfo {
if m != nil {
return m.ColumnInfo
}
return nil
}
func (m *TermExpr) GetValues() []*GenericValue {
if m != nil {
return m.Values
}
return nil
}
type UnaryExpr struct {
Op UnaryExpr_UnaryOp `protobuf:"varint,1,opt,name=op,proto3,enum=milvus.proto.plan.UnaryExpr_UnaryOp" json:"op,omitempty"`
Child *Expr `protobuf:"bytes,2,opt,name=child,proto3" json:"child,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UnaryExpr) Reset() { *m = UnaryExpr{} }
func (m *UnaryExpr) String() string { return proto.CompactTextString(m) }
func (*UnaryExpr) ProtoMessage() {}
func (*UnaryExpr) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{5}
}
func (m *UnaryExpr) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnaryExpr.Unmarshal(m, b)
}
func (m *UnaryExpr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UnaryExpr.Marshal(b, m, deterministic)
}
func (m *UnaryExpr) XXX_Merge(src proto.Message) {
xxx_messageInfo_UnaryExpr.Merge(m, src)
}
func (m *UnaryExpr) XXX_Size() int {
return xxx_messageInfo_UnaryExpr.Size(m)
}
func (m *UnaryExpr) XXX_DiscardUnknown() {
xxx_messageInfo_UnaryExpr.DiscardUnknown(m)
}
var xxx_messageInfo_UnaryExpr proto.InternalMessageInfo
func (m *UnaryExpr) GetOp() UnaryExpr_UnaryOp {
if m != nil {
return m.Op
}
return UnaryExpr_Invalid
}
func (m *UnaryExpr) GetChild() *Expr {
if m != nil {
return m.Child
}
return nil
}
type BinaryExpr struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BinaryExpr) Reset() { *m = BinaryExpr{} }
func (m *BinaryExpr) String() string { return proto.CompactTextString(m) }
func (*BinaryExpr) ProtoMessage() {}
func (*BinaryExpr) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{6}
}
func (m *BinaryExpr) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BinaryExpr.Unmarshal(m, b)
}
func (m *BinaryExpr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BinaryExpr.Marshal(b, m, deterministic)
}
func (m *BinaryExpr) XXX_Merge(src proto.Message) {
xxx_messageInfo_BinaryExpr.Merge(m, src)
}
func (m *BinaryExpr) XXX_Size() int {
return xxx_messageInfo_BinaryExpr.Size(m)
}
func (m *BinaryExpr) XXX_DiscardUnknown() {
xxx_messageInfo_BinaryExpr.DiscardUnknown(m)
}
var xxx_messageInfo_BinaryExpr proto.InternalMessageInfo
type Expr struct {
// Types that are valid to be assigned to Expr:
// *Expr_RangeExpr
// *Expr_TermExpr
// *Expr_UnaryExpr
// *Expr_BinaryExpr
Expr isExpr_Expr `protobuf_oneof:"expr"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Expr) Reset() { *m = Expr{} }
func (m *Expr) String() string { return proto.CompactTextString(m) }
func (*Expr) ProtoMessage() {}
func (*Expr) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{7}
}
func (m *Expr) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Expr.Unmarshal(m, b)
}
func (m *Expr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Expr.Marshal(b, m, deterministic)
}
func (m *Expr) XXX_Merge(src proto.Message) {
xxx_messageInfo_Expr.Merge(m, src)
}
func (m *Expr) XXX_Size() int {
return xxx_messageInfo_Expr.Size(m)
}
func (m *Expr) XXX_DiscardUnknown() {
xxx_messageInfo_Expr.DiscardUnknown(m)
}
var xxx_messageInfo_Expr proto.InternalMessageInfo
type isExpr_Expr interface {
isExpr_Expr()
}
type Expr_RangeExpr struct {
RangeExpr *RangeExpr `protobuf:"bytes,1,opt,name=range_expr,json=rangeExpr,proto3,oneof"`
}
type Expr_TermExpr struct {
TermExpr *TermExpr `protobuf:"bytes,2,opt,name=term_expr,json=termExpr,proto3,oneof"`
}
type Expr_UnaryExpr struct {
UnaryExpr *UnaryExpr `protobuf:"bytes,3,opt,name=unary_expr,json=unaryExpr,proto3,oneof"`
}
type Expr_BinaryExpr struct {
BinaryExpr *BinaryExpr `protobuf:"bytes,4,opt,name=binary_expr,json=binaryExpr,proto3,oneof"`
}
func (*Expr_RangeExpr) isExpr_Expr() {}
func (*Expr_TermExpr) isExpr_Expr() {}
func (*Expr_UnaryExpr) isExpr_Expr() {}
func (*Expr_BinaryExpr) isExpr_Expr() {}
func (m *Expr) GetExpr() isExpr_Expr {
if m != nil {
return m.Expr
}
return nil
}
func (m *Expr) GetRangeExpr() *RangeExpr {
if x, ok := m.GetExpr().(*Expr_RangeExpr); ok {
return x.RangeExpr
}
return nil
}
func (m *Expr) GetTermExpr() *TermExpr {
if x, ok := m.GetExpr().(*Expr_TermExpr); ok {
return x.TermExpr
}
return nil
}
func (m *Expr) GetUnaryExpr() *UnaryExpr {
if x, ok := m.GetExpr().(*Expr_UnaryExpr); ok {
return x.UnaryExpr
}
return nil
}
func (m *Expr) GetBinaryExpr() *BinaryExpr {
if x, ok := m.GetExpr().(*Expr_BinaryExpr); ok {
return x.BinaryExpr
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*Expr) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*Expr_RangeExpr)(nil),
(*Expr_TermExpr)(nil),
(*Expr_UnaryExpr)(nil),
(*Expr_BinaryExpr)(nil),
}
}
type VectorANNS struct {
IsBinary bool `protobuf:"varint,1,opt,name=is_binary,json=isBinary,proto3" json:"is_binary,omitempty"`
FieldId int64 `protobuf:"varint,2,opt,name=field_id,json=fieldId,proto3" json:"field_id,omitempty"`
Predicates *Expr `protobuf:"bytes,3,opt,name=predicates,proto3" json:"predicates,omitempty"`
QueryInfo *QueryInfo `protobuf:"bytes,4,opt,name=query_info,json=queryInfo,proto3" json:"query_info,omitempty"`
PlaceholderTag string `protobuf:"bytes,5,opt,name=placeholder_tag,json=placeholderTag,proto3" json:"placeholder_tag,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *VectorANNS) Reset() { *m = VectorANNS{} }
func (m *VectorANNS) String() string { return proto.CompactTextString(m) }
func (*VectorANNS) ProtoMessage() {}
func (*VectorANNS) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{8}
}
func (m *VectorANNS) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VectorANNS.Unmarshal(m, b)
}
func (m *VectorANNS) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_VectorANNS.Marshal(b, m, deterministic)
}
func (m *VectorANNS) XXX_Merge(src proto.Message) {
xxx_messageInfo_VectorANNS.Merge(m, src)
}
func (m *VectorANNS) XXX_Size() int {
return xxx_messageInfo_VectorANNS.Size(m)
}
func (m *VectorANNS) XXX_DiscardUnknown() {
xxx_messageInfo_VectorANNS.DiscardUnknown(m)
}
var xxx_messageInfo_VectorANNS proto.InternalMessageInfo
func (m *VectorANNS) GetIsBinary() bool {
if m != nil {
return m.IsBinary
}
return false
}
func (m *VectorANNS) GetFieldId() int64 {
if m != nil {
return m.FieldId
}
return 0
}
func (m *VectorANNS) GetPredicates() *Expr {
if m != nil {
return m.Predicates
}
return nil
}
func (m *VectorANNS) GetQueryInfo() *QueryInfo {
if m != nil {
return m.QueryInfo
}
return nil
}
func (m *VectorANNS) GetPlaceholderTag() string {
if m != nil {
return m.PlaceholderTag
}
return ""
}
type PlanNode struct {
// Types that are valid to be assigned to Node:
// *PlanNode_VectorAnns
Node isPlanNode_Node `protobuf_oneof:"node"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *PlanNode) Reset() { *m = PlanNode{} }
func (m *PlanNode) String() string { return proto.CompactTextString(m) }
func (*PlanNode) ProtoMessage() {}
func (*PlanNode) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{9}
}
func (m *PlanNode) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PlanNode.Unmarshal(m, b)
}
func (m *PlanNode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_PlanNode.Marshal(b, m, deterministic)
}
func (m *PlanNode) XXX_Merge(src proto.Message) {
xxx_messageInfo_PlanNode.Merge(m, src)
}
func (m *PlanNode) XXX_Size() int {
return xxx_messageInfo_PlanNode.Size(m)
}
func (m *PlanNode) XXX_DiscardUnknown() {
xxx_messageInfo_PlanNode.DiscardUnknown(m)
}
var xxx_messageInfo_PlanNode proto.InternalMessageInfo
type isPlanNode_Node interface {
isPlanNode_Node()
}
type PlanNode_VectorAnns struct {
VectorAnns *VectorANNS `protobuf:"bytes,1,opt,name=vector_anns,json=vectorAnns,proto3,oneof"`
}
func (*PlanNode_VectorAnns) isPlanNode_Node() {}
func (m *PlanNode) GetNode() isPlanNode_Node {
if m != nil {
return m.Node
}
return nil
}
func (m *PlanNode) GetVectorAnns() *VectorANNS {
if x, ok := m.GetNode().(*PlanNode_VectorAnns); ok {
return x.VectorAnns
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*PlanNode) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*PlanNode_VectorAnns)(nil),
}
}
func init() {
proto.RegisterEnum("milvus.proto.plan.RangeExpr_OpType", RangeExpr_OpType_name, RangeExpr_OpType_value)
proto.RegisterEnum("milvus.proto.plan.UnaryExpr_UnaryOp", UnaryExpr_UnaryOp_name, UnaryExpr_UnaryOp_value)
proto.RegisterEnum("milvus.proto.plan.BinaryExpr_BinaryOp", BinaryExpr_BinaryOp_name, BinaryExpr_BinaryOp_value)
proto.RegisterType((*GenericValue)(nil), "milvus.proto.plan.GenericValue")
proto.RegisterType((*QueryInfo)(nil), "milvus.proto.plan.QueryInfo")
proto.RegisterType((*ColumnInfo)(nil), "milvus.proto.plan.ColumnInfo")
proto.RegisterType((*RangeExpr)(nil), "milvus.proto.plan.RangeExpr")
proto.RegisterType((*TermExpr)(nil), "milvus.proto.plan.TermExpr")
proto.RegisterType((*UnaryExpr)(nil), "milvus.proto.plan.UnaryExpr")
proto.RegisterType((*BinaryExpr)(nil), "milvus.proto.plan.BinaryExpr")
proto.RegisterType((*Expr)(nil), "milvus.proto.plan.Expr")
proto.RegisterType((*VectorANNS)(nil), "milvus.proto.plan.VectorANNS")
proto.RegisterType((*PlanNode)(nil), "milvus.proto.plan.PlanNode")
}
func init() { proto.RegisterFile("plan.proto", fileDescriptor_2d655ab2f7683c23) }
var fileDescriptor_2d655ab2f7683c23 = []byte{
// 792 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4f, 0x6f, 0xdb, 0x36,
0x14, 0xb7, 0x24, 0xff, 0x91, 0x9e, 0x5d, 0xd7, 0xe3, 0x65, 0xde, 0xb2, 0x22, 0x86, 0x3a, 0x60,
0xbe, 0xd4, 0xc1, 0xdc, 0xae, 0x05, 0x3a, 0x74, 0x58, 0xb2, 0x16, 0x4d, 0x80, 0xc2, 0xe9, 0x34,
0x2f, 0x87, 0x5d, 0x04, 0x5a, 0x62, 0x6c, 0x62, 0x34, 0xc9, 0x50, 0x94, 0xd1, 0x9c, 0x77, 0xdb,
0x6d, 0x9f, 0x63, 0x1f, 0x6b, 0x5f, 0x64, 0x20, 0xa9, 0xc8, 0x71, 0xe0, 0x04, 0x18, 0xb0, 0x1b,
0xdf, 0x9f, 0xdf, 0xfb, 0x91, 0xbf, 0xf7, 0xf8, 0x00, 0x24, 0xc3, 0x7c, 0x22, 0x95, 0xd0, 0x02,
0x7d, 0xb6, 0xa6, 0x6c, 0x53, 0x16, 0xce, 0x9a, 0x98, 0xc0, 0x97, 0xbd, 0x22, 0x5b, 0x91, 0x35,
0x76, 0xae, 0x58, 0x42, 0xef, 0x3d, 0xe1, 0x44, 0xd1, 0xec, 0x02, 0xb3, 0x92, 0xa0, 0x03, 0x08,
0x17, 0x42, 0xb0, 0x74, 0x83, 0xd9, 0xd0, 0x1b, 0x79, 0xe3, 0xf0, 0xb4, 0x91, 0x74, 0x8c, 0xe7,
0x02, 0x33, 0xf4, 0x04, 0x22, 0xca, 0xf5, 0xcb, 0x17, 0x36, 0xea, 0x8f, 0xbc, 0x71, 0x70, 0xda,
0x48, 0x42, 0xeb, 0xaa, 0xc2, 0x97, 0x4c, 0x60, 0x6d, 0xc3, 0xc1, 0xc8, 0x1b, 0x7b, 0x26, 0x6c,
0x5d, 0x17, 0x98, 0x9d, 0xb4, 0x20, 0xd8, 0x60, 0x16, 0x13, 0x88, 0x7e, 0x2e, 0x89, 0xba, 0x3e,
0xe3, 0x97, 0x02, 0x21, 0x68, 0x6a, 0x21, 0x7f, 0xb7, 0x54, 0x41, 0x62, 0xcf, 0xe8, 0x10, 0xba,
0x6b, 0xa2, 0x15, 0xcd, 0x52, 0x7d, 0x2d, 0x89, 0x2d, 0x14, 0x25, 0xe0, 0x5c, 0xf3, 0x6b, 0x49,
0xd0, 0x53, 0x78, 0x54, 0x10, 0xac, 0xb2, 0x55, 0x2a, 0xb1, 0xc2, 0xeb, 0x62, 0xd8, 0xb4, 0x29,
0x3d, 0xe7, 0xfc, 0x68, 0x7d, 0x71, 0x06, 0xf0, 0x93, 0x60, 0xe5, 0x9a, 0x5b, 0x9e, 0x2f, 0x20,
0xbc, 0xa4, 0x84, 0xe5, 0x29, 0xcd, 0x2b, 0xae, 0x8e, 0xb5, 0xcf, 0x72, 0xf4, 0x1a, 0xa2, 0x1c,
0x6b, 0xec, 0xc8, 0xcc, 0xa3, 0xfa, 0xd3, 0x27, 0x93, 0x1d, 0xd9, 0x2a, 0xc1, 0xde, 0x62, 0x8d,
0x0d, 0x7f, 0x12, 0xe6, 0xd5, 0x29, 0xfe, 0xdb, 0x87, 0x28, 0xc1, 0x7c, 0x49, 0xde, 0x7d, 0x92,
0x0a, 0xfd, 0x00, 0xdd, 0xcc, 0x52, 0xa6, 0x94, 0x5f, 0x0a, 0xcb, 0xd3, 0xbd, 0x5b, 0xcb, 0xf6,
0x66, 0x7b, 0xb1, 0x04, 0xb2, 0xed, 0x25, 0xbf, 0x83, 0x40, 0xc8, 0x62, 0xe8, 0x8f, 0x82, 0x71,
0x7f, 0xfa, 0x74, 0x0f, 0xae, 0xa6, 0x9a, 0x9c, 0x4b, 0x7b, 0x13, 0x93, 0x8f, 0x5e, 0x41, 0x7b,
0x63, 0x7a, 0x57, 0x0c, 0x83, 0x51, 0x30, 0xee, 0x4e, 0x0f, 0xf7, 0x20, 0x6f, 0xf7, 0x38, 0xa9,
0xd2, 0x63, 0x0e, 0x6d, 0x57, 0x07, 0x75, 0xa1, 0x73, 0xc6, 0x37, 0x98, 0xd1, 0x7c, 0xd0, 0x40,
0x8f, 0xa1, 0xfb, 0x5e, 0x11, 0xac, 0x89, 0x9a, 0xaf, 0x30, 0x1f, 0x78, 0x68, 0x00, 0xbd, 0xca,
0xf1, 0xee, 0xaa, 0xc4, 0x6c, 0xe0, 0xa3, 0x1e, 0x84, 0x1f, 0x48, 0x51, 0xd8, 0x78, 0x80, 0x1e,
0x41, 0x64, 0x2c, 0x17, 0x6c, 0xa2, 0x08, 0x5a, 0xee, 0xd8, 0x32, 0x79, 0x33, 0xa1, 0x9d, 0xd5,
0x8e, 0xff, 0xf0, 0x20, 0x9c, 0x13, 0xb5, 0xfe, 0x5f, 0xc4, 0xda, 0xbe, 0xda, 0xff, 0x6f, 0xaf,
0xfe, 0xcb, 0x83, 0xe8, 0x57, 0x8e, 0xd5, 0xb5, 0xbd, 0xc6, 0x0b, 0xf0, 0x85, 0xb4, 0xec, 0xfd,
0xe9, 0xd7, 0x7b, 0x4a, 0xd4, 0x99, 0xee, 0x74, 0x2e, 0x13, 0x5f, 0x48, 0xf4, 0x0c, 0x5a, 0xd9,
0x8a, 0xb2, 0xdc, 0xce, 0x4b, 0x77, 0xfa, 0xf9, 0x1e, 0xa0, 0xc1, 0x24, 0x2e, 0x2b, 0x3e, 0x84,
0x4e, 0x85, 0xde, 0x55, 0xba, 0x03, 0xc1, 0x4c, 0xe8, 0x81, 0x17, 0xbf, 0x05, 0x38, 0xa1, 0x37,
0x4c, 0xf1, 0x4b, 0x08, 0x9d, 0x75, 0x37, 0xbf, 0x0f, 0xf0, 0x41, 0x2c, 0x69, 0x86, 0xd9, 0x31,
0xcf, 0x07, 0x9e, 0x15, 0xde, 0xd9, 0xe7, 0x6a, 0xe0, 0xc7, 0x7f, 0xfa, 0xd0, 0xb4, 0x8f, 0x7a,
0x03, 0xa0, 0xcc, 0xa8, 0xa4, 0xe4, 0x93, 0x54, 0x95, 0xb4, 0x5f, 0x3d, 0x34, 0x4f, 0xa7, 0x8d,
0x24, 0x52, 0xf5, 0x1c, 0xbf, 0x86, 0x48, 0x13, 0xb5, 0x76, 0x68, 0xf7, 0xc2, 0x83, 0x3d, 0xe8,
0x9b, 0x56, 0x9a, 0x4f, 0xae, 0x6f, 0xda, 0xfa, 0x06, 0xa0, 0x34, 0x57, 0x77, 0xe0, 0xe0, 0x5e,
0xea, 0x5a, 0x57, 0x43, 0x5d, 0xd6, 0xed, 0xf8, 0x11, 0xba, 0x0b, 0xba, 0xc5, 0x37, 0xef, 0x9d,
0x8a, 0xad, 0x5c, 0xa7, 0x8d, 0x04, 0x16, 0xb5, 0x75, 0xd2, 0x86, 0xa6, 0x81, 0xc6, 0xff, 0x78,
0x00, 0x17, 0x24, 0xd3, 0x42, 0x1d, 0xcf, 0x66, 0xbf, 0xa0, 0x03, 0x88, 0x68, 0x91, 0xba, 0x3c,
0xb7, 0xd8, 0x92, 0x90, 0x16, 0xae, 0xca, 0xce, 0x76, 0xf0, 0x77, 0xb7, 0xc3, 0x2b, 0x00, 0xa9,
0x48, 0x4e, 0x33, 0xac, 0xed, 0x07, 0x7b, 0xb0, 0xdd, 0xb7, 0x52, 0xd1, 0xf7, 0x00, 0x57, 0x66,
0xcd, 0xb9, 0xf1, 0x6e, 0xde, 0x2b, 0x44, 0xbd, 0x0b, 0x93, 0xe8, 0xaa, 0x5e, 0x8b, 0xdf, 0xc0,
0x63, 0xc9, 0x70, 0x46, 0x56, 0x82, 0xe5, 0x44, 0xa5, 0x1a, 0x2f, 0x87, 0x2d, 0xbb, 0xe3, 0xfa,
0xb7, 0xdc, 0x73, 0xbc, 0x8c, 0xe7, 0x10, 0x7e, 0x64, 0x98, 0xcf, 0x44, 0x4e, 0x8c, 0x76, 0x1b,
0xfb, 0xe0, 0x14, 0x73, 0x5e, 0x3c, 0xf0, 0xa3, 0xb6, 0xb2, 0x18, 0xed, 0x1c, 0xe6, 0x98, 0xf3,
0xc2, 0x68, 0xc7, 0x45, 0x4e, 0x4e, 0x9e, 0xff, 0xf6, 0xed, 0x92, 0xea, 0x55, 0xb9, 0x98, 0x64,
0x62, 0x7d, 0xe4, 0x0a, 0x3c, 0xa3, 0xa2, 0x3a, 0x1d, 0x51, 0xae, 0x89, 0xe2, 0x98, 0x1d, 0xd9,
0x9a, 0x47, 0xa6, 0xa6, 0x5c, 0x2c, 0xda, 0xd6, 0x7a, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff,
0x33, 0x17, 0x7b, 0x52, 0x7f, 0x06, 0x00, 0x00,
}

View File

@ -0,0 +1,294 @@
package proxynode
import (
"fmt"
ant_ast "github.com/antonmedv/expr/ast"
ant_parser "github.com/antonmedv/expr/parser"
"github.com/milvus-io/milvus/internal/proto/planpb"
"github.com/milvus-io/milvus/internal/proto/schemapb"
"github.com/milvus-io/milvus/internal/util/typeutil"
)
//func parseQueryExprNaive(schema *typeutil.SchemaHelper, exprStr string) (*planpb.Expr, error) {
// // TODO: handle more cases
// // TODO: currently just A > 3
//
// tmps := strings.Split(exprStr, ">")
// if len(tmps) != 2 {
// return nil, errors.New("unsupported yet")
// }
// for i, str := range tmps {
// tmps[i] = strings.TrimSpace(str)
// }
// fieldName := tmps[0]
// tmpValue, err := strconv.ParseInt(tmps[1], 10, 64)
// if err != nil {
// return nil, err
// }
// fieldValue := &planpb.GenericValue{
// Val: &planpb.GenericValue_Int64Val{Int64Val: tmpValue},
// }
//
// field, err := schema.GetFieldFromName(fieldName)
// if err != nil {
// return nil, err
// }
//
// expr := &planpb.Expr{
// Expr: &planpb.Expr_RangeExpr{
// RangeExpr: &planpb.RangeExpr{
// ColumnInfo: &planpb.ColumnInfo{
// FieldId: field.FieldID,
// DataType: field.DataType,
// },
// Ops: []planpb.RangeExpr_OpType{planpb.RangeExpr_GreaterThan},
// Values: []*planpb.GenericValue{fieldValue},
// },
// },
// }
// return expr, nil
//}
func parseQueryExpr(schema *typeutil.SchemaHelper, exprStrNullable *string) (*planpb.Expr, error) {
if exprStrNullable == nil {
return nil, nil
}
exprStr := *exprStrNullable
return parseQueryExprAdvanced(schema, exprStr)
}
type ParserContext struct {
schema *typeutil.SchemaHelper
}
func parseQueryExprAdvanced(schema *typeutil.SchemaHelper, exprStr string) (*planpb.Expr, error) {
ast, err := ant_parser.Parse(exprStr)
if err != nil {
return nil, err
}
context := ParserContext{schema}
return context.parseExpr(&ast.Node)
}
func (context *ParserContext) createColumnInfo(field *schemapb.FieldSchema) *planpb.ColumnInfo {
return &planpb.ColumnInfo{
FieldId: field.FieldID,
DataType: field.DataType,
}
}
func createSingleOps(opStr string, reverse bool) planpb.RangeExpr_OpType {
type OpType = planpb.RangeExpr_OpType
var op planpb.RangeExpr_OpType
if !reverse {
switch opStr {
case "<":
op = planpb.RangeExpr_LessThan
case ">":
op = planpb.RangeExpr_GreaterThan
case "<=":
op = planpb.RangeExpr_LessEqual
case ">=":
op = planpb.RangeExpr_GreaterEqual
case "==":
op = planpb.RangeExpr_Equal
case "!=":
op = planpb.RangeExpr_NotEqual
default:
op = planpb.RangeExpr_Invalid
}
} else {
switch opStr {
case ">":
op = planpb.RangeExpr_LessThan
case "<":
op = planpb.RangeExpr_GreaterThan
case ">=":
op = planpb.RangeExpr_LessEqual
case "<=":
op = planpb.RangeExpr_GreaterEqual
case "==":
op = planpb.RangeExpr_Equal
case "!=":
op = planpb.RangeExpr_NotEqual
default:
op = planpb.RangeExpr_Invalid
}
}
return op
}
func (context *ParserContext) handleCmpExpr(node *ant_ast.BinaryNode) (*planpb.Expr, error) {
idNode, leftOk := node.Left.(*ant_ast.IdentifierNode)
if !leftOk {
return nil, fmt.Errorf("compare require left to be identifier")
}
field, err := context.handleIdentifier(idNode)
if err != nil {
return nil, err
}
val, err := context.handleLeafValue(&node.Right, field.DataType)
if err != nil {
return nil, err
}
op := createSingleOps(node.Operator, false)
if op == planpb.RangeExpr_Invalid {
return nil, fmt.Errorf("invalid binary operator %s", node.Operator)
}
final := &planpb.Expr{
Expr: &planpb.Expr_RangeExpr{
RangeExpr: &planpb.RangeExpr{
ColumnInfo: context.createColumnInfo(field),
Ops: []planpb.RangeExpr_OpType{op},
Values: []*planpb.GenericValue{val},
},
},
}
return final, nil
}
func (context *ParserContext) handleLogicalExpr(node *ant_ast.BinaryNode) (*planpb.Expr, error) {
return nil, fmt.Errorf("unimplemented")
}
func (context *ParserContext) handleInExpr(node *ant_ast.BinaryNode) (*planpb.Expr, error) {
return nil, fmt.Errorf("unimplemented")
}
func (context *ParserContext) handleBinaryExpr(node *ant_ast.BinaryNode) (*planpb.Expr, error) {
// TODO
switch node.Operator {
case "<", "<=", ">", ">=", "==", "!=":
return context.handleCmpExpr(node)
case "and", "or":
return context.handleLogicalExpr(node)
case "in", "not in":
return context.handleInExpr(node)
}
return nil, fmt.Errorf("unimplemented")
}
func (context *ParserContext) handleNotExpr(node *ant_ast.UnaryNode) (*planpb.Expr, error) {
return nil, fmt.Errorf("unimplemented")
}
func (context *ParserContext) handleLeafValue(nodeRaw *ant_ast.Node, dataType schemapb.DataType) (gv *planpb.GenericValue, err error) {
switch node := (*nodeRaw).(type) {
case *ant_ast.FloatNode:
if typeutil.IsFloatingType(dataType) {
gv = &planpb.GenericValue{
Val: &planpb.GenericValue_FloatVal{
FloatVal: node.Value,
},
}
} else {
return nil, fmt.Errorf("type mismatch")
}
case *ant_ast.IntegerNode:
if typeutil.IsFloatingType(dataType) {
gv = &planpb.GenericValue{
Val: &planpb.GenericValue_FloatVal{
FloatVal: float64(node.Value),
},
}
} else if typeutil.IsIntergerType(dataType) {
gv = &planpb.GenericValue{
Val: &planpb.GenericValue_Int64Val{
Int64Val: int64(node.Value),
},
}
} else {
return nil, fmt.Errorf("type mismatch")
}
case *ant_ast.BoolNode:
if typeutil.IsFloatingType(dataType) {
gv = &planpb.GenericValue{
Val: &planpb.GenericValue_BoolVal{
BoolVal: node.Value,
},
}
} else {
return nil, fmt.Errorf("type mismatch")
}
default:
return nil, fmt.Errorf("unsupported leaf node")
}
return gv, nil
}
func (context *ParserContext) handleIdentifier(node *ant_ast.IdentifierNode) (*schemapb.FieldSchema, error) {
fieldName := node.Value
field, err := context.schema.GetFieldFromName(fieldName)
return field, err
}
func (context *ParserContext) handleUnaryExpr(node *ant_ast.UnaryNode) (*planpb.Expr, error) {
switch node.Operator {
case "!", "not":
return context.handleNotExpr(node)
default:
return nil, fmt.Errorf("invalid unary operator(%s)", node.Operator)
}
}
func (context *ParserContext) parseExpr(nodeRaw *ant_ast.Node) (*planpb.Expr, error) {
switch node := (*nodeRaw).(type) {
case *ant_ast.IdentifierNode,
*ant_ast.FloatNode,
*ant_ast.IntegerNode,
*ant_ast.BoolNode:
return nil, fmt.Errorf("scalar expr is not supported yet")
case *ant_ast.UnaryNode:
expr, err := context.handleUnaryExpr(node)
if err != nil {
return nil, err
}
return expr, nil
case *ant_ast.BinaryNode:
return context.handleBinaryExpr(node)
default:
return nil, fmt.Errorf("unsupported node (%s)", node.Type().String())
}
}
func CreateQueryPlan(schemaPb *schemapb.CollectionSchema, exprStrNullable *string, vectorFieldName string, queryInfo *planpb.QueryInfo) (*planpb.PlanNode, error) {
schema, err := typeutil.CreateSchemaHelper(schemaPb)
if err != nil {
return nil, err
}
expr, err := parseQueryExpr(schema, exprStrNullable)
if err != nil {
return nil, err
}
vectorField, err := schema.GetFieldFromName(vectorFieldName)
if err != nil {
return nil, err
}
fieldID := vectorField.FieldID
dataType := vectorField.DataType
if !typeutil.IsVectorType(dataType) {
return nil, fmt.Errorf("field (%s) to search is not of vector data type", vectorFieldName)
}
planNode := &planpb.PlanNode{
Node: &planpb.PlanNode_VectorAnns{
VectorAnns: &planpb.VectorANNS{
IsBinary: dataType == schemapb.DataType_BinaryVector,
Predicates: expr,
QueryInfo: queryInfo,
PlaceholderTag: "$0",
FieldId: fieldID,
},
},
}
return planNode, nil
}

View File

@ -0,0 +1,69 @@
package proxynode
import (
"testing"
ant_ast "github.com/antonmedv/expr/ast"
ant_parser "github.com/antonmedv/expr/parser"
"github.com/golang/protobuf/proto"
"github.com/stretchr/testify/assert"
"github.com/milvus-io/milvus/internal/proto/planpb"
"github.com/milvus-io/milvus/internal/proto/schemapb"
"github.com/milvus-io/milvus/internal/util/typeutil"
)
func newTestSchema() *schemapb.CollectionSchema {
return &schemapb.CollectionSchema{
Name: "test",
Description: "schema for test used",
AutoID: true,
Fields: []*schemapb.FieldSchema{
{FieldID: 0, Name: "FieldID", IsPrimaryKey: false, Description: "field no.1", DataType: schemapb.DataType_Int64},
{FieldID: 101, Name: "vectorField", IsPrimaryKey: false, Description: "field no.2", DataType: schemapb.DataType_FloatVector},
{FieldID: 100, Name: "int64Field", IsPrimaryKey: false, Description: "field no.1", DataType: schemapb.DataType_Int64},
},
}
}
func TestParseQueryExpr_Naive(t *testing.T) {
exprStr := "int64Field > 3"
schemaPb := newTestSchema()
schema, err := typeutil.CreateSchemaHelper(schemaPb)
assert.Nil(t, err)
exprProto, err := parseQueryExpr(schema, &exprStr)
assert.Nil(t, err)
str := proto.MarshalTextString(exprProto)
println(str)
}
func TestParsePlanNode_Naive(t *testing.T) {
exprStr := "int64Field > 3"
schema := newTestSchema()
queryInfo := &planpb.QueryInfo{
Topk: 10,
MetricType: "L2",
SearchParams: "{\"nprobe\": 10}",
}
// Note: use pointer to string to represent nullable string
// TODO: change it to better solution
planProto, err := CreateQueryPlan(schema, &exprStr, "vectorField", queryInfo)
assert.Nil(t, err)
dbgStr := proto.MarshalTextString(planProto)
println(dbgStr)
}
func TestExternalParser(t *testing.T) {
ast, err := ant_parser.Parse("!(1 < a < 2 or b in [1, 2, 3]) or (c < 3 and b > 5) or ")
var node ant_ast.Node = nil
if node == nil {
// TODO
}
assert.Nil(t, err)
println(ast.Node.Location().Column)
}

View File

@ -21,6 +21,8 @@ import (
"strconv"
"time"
"github.com/milvus-io/milvus/internal/proto/planpb"
"github.com/milvus-io/milvus/internal/util/funcutil"
"go.uber.org/zap"
@ -45,6 +47,10 @@ const (
CreateCollectionTaskName = "CreateCollectionTask"
DropCollectionTaskName = "DropCollectionTask"
SearchTaskName = "SearchTask"
AnnsFieldKey = "anns_field"
TopKKey = "topk"
MetricTypeKey = "metric_type"
SearchParamsKey = "params"
HasCollectionTaskName = "HasCollectionTask"
DescribeCollectionTaskName = "DescribeCollectionTask"
GetCollectionStatisticsTaskName = "GetCollectionStatisticsTask"
@ -556,6 +562,54 @@ func (st *SearchTask) PreExecute(ctx context.Context) error {
}
}
st.Base.MsgType = commonpb.MsgType_Search
var dsl string
dsl = st.query.Dsl
if st.query.GetDslType() == commonpb.DslType_BoolExprV1 {
schema, err := globalMetaCache.GetCollectionSchema(ctx, collectionName)
if err != nil { // err is not nil if collection not exists
return err
}
annsField, err := GetAttrByKeyFromRepeatedKV(AnnsFieldKey, st.query.SearchParams)
if err != nil {
return errors.New(AnnsFieldKey + " not found in search_params")
}
topKStr, err := GetAttrByKeyFromRepeatedKV(TopKKey, st.query.SearchParams)
if err != nil {
return errors.New(TopKKey + " not found in search_params")
}
topK, err := strconv.Atoi(topKStr)
if err != nil {
return errors.New(TopKKey + " " + topKStr + " is not invalid")
}
metricType, err := GetAttrByKeyFromRepeatedKV(MetricTypeKey, st.query.SearchParams)
if err != nil {
return errors.New(MetricTypeKey + " not found in search_params")
}
searchParams, err := GetAttrByKeyFromRepeatedKV(SearchParamsKey, st.query.SearchParams)
if err != nil {
return errors.New(SearchParamsKey + " not found in search_params")
}
queryInfo := &planpb.QueryInfo{
Topk: int64(topK),
MetricType: metricType,
SearchParams: searchParams,
}
plan, err := CreateQueryPlan(schema, &st.query.Dsl, annsField, queryInfo)
if err != nil {
return errors.New("invalid expression: " + st.query.Dsl)
}
dsl = proto.MarshalTextString(plan)
st.query.Dsl = dsl
}
queryBytes, err := proto.Marshal(st.query)
if err != nil {
return err
@ -601,7 +655,7 @@ func (st *SearchTask) PreExecute(ctx context.Context) error {
}
}
st.Dsl = st.query.Dsl
st.Dsl = dsl
st.PlaceholderGroup = st.query.PlaceholderGroup
return nil

View File

@ -13,16 +13,17 @@ package proxynode
import (
"encoding/json"
"errors"
"io/ioutil"
"net/http"
"strconv"
"time"
"github.com/milvus-io/milvus/internal/util/funcutil"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/proto/commonpb"
"github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/internal/util/retry"
)
@ -92,3 +93,13 @@ func CheckStrByValues(params map[string]string, key string, container []string)
return funcutil.SliceContain(container, value)
}
func GetAttrByKeyFromRepeatedKV(key string, kvs []*commonpb.KeyValuePair) (string, error) {
for _, kv := range kvs {
if kv.Key == key {
return kv.Value, nil
}
}
return "", errors.New("key " + key + " not found")
}

View File

@ -17,6 +17,8 @@ import (
"strconv"
"testing"
"github.com/milvus-io/milvus/internal/proto/commonpb"
"github.com/stretchr/testify/assert"
"github.com/jarcoal/httpmock"
@ -128,3 +130,29 @@ func TestCheckStrByValues(t *testing.T) {
}
}
}
func TestGetAttrByKeyFromRepeatedKV(t *testing.T) {
kvs := []*commonpb.KeyValuePair{
{Key: "Key1", Value: "Value1"},
{Key: "Key2", Value: "Value2"},
{Key: "Key3", Value: "Value3"},
}
cases := []struct {
key string
kvs []*commonpb.KeyValuePair
value string
errIsNil bool
}{
{"Key1", kvs, "Value1", true},
{"Key2", kvs, "Value2", true},
{"Key3", kvs, "Value3", true},
{"other", kvs, "", false},
}
for _, test := range cases {
value, err := GetAttrByKeyFromRepeatedKV(test.key, test.kvs)
assert.Equal(t, test.value, value)
assert.Equal(t, test.errIsNil, err == nil)
}
}

View File

@ -36,8 +36,9 @@ func createPlan(col Collection, dsl string) (*Plan, error) {
var cPlan C.CPlan
status := C.CreatePlan(col.collectionPtr, cDsl, &cPlan)
if err := HandleCStatus(&status, "Create Plan failed"); err != nil {
return nil, err
err1 := HandleCStatus(&status, "Create Plan failed")
if err1 != nil {
return nil, err1
}
var newPlan = &Plan{cPlan: cPlan}

View File

@ -12,6 +12,8 @@
package typeutil
import (
"errors"
"fmt"
"strconv"
"github.com/milvus-io/milvus/internal/proto/schemapb"
@ -57,3 +59,71 @@ func EstimateSizePerRecord(schema *schemapb.CollectionSchema) (int, error) {
}
return res, nil
}
type SchemaHelper struct {
schema *schemapb.CollectionSchema
nameOffset map[string]int
idOffset map[int64]int
}
func CreateSchemaHelper(schema *schemapb.CollectionSchema) (*SchemaHelper, error) {
if schema == nil {
return nil, errors.New("schema is nil")
}
schemaHelper := SchemaHelper{schema: schema, nameOffset: make(map[string]int), idOffset: make(map[int64]int)}
for offset, field := range schema.Fields {
if _, ok := schemaHelper.nameOffset[field.Name]; ok {
return nil, errors.New("duplicated fieldName: " + field.Name)
}
if _, ok := schemaHelper.idOffset[field.FieldID]; ok {
return nil, errors.New("duplicated fieldID: " + strconv.FormatInt(field.FieldID, 10))
}
schemaHelper.nameOffset[field.Name] = offset
schemaHelper.idOffset[field.FieldID] = offset
}
return &schemaHelper, nil
}
func (helper *SchemaHelper) GetFieldFromName(fieldName string) (*schemapb.FieldSchema, error) {
offset, ok := helper.nameOffset[fieldName]
if !ok {
return nil, fmt.Errorf("fieldName(%s) not found", fieldName)
}
return helper.schema.Fields[offset], nil
}
func (helper *SchemaHelper) GetFieldFromID(fieldID int64) (*schemapb.FieldSchema, error) {
offset, ok := helper.idOffset[fieldID]
if !ok {
return nil, fmt.Errorf("fieldName(%d) not found", fieldID)
}
return helper.schema.Fields[offset], nil
}
func IsVectorType(dataType schemapb.DataType) bool {
switch dataType {
case schemapb.DataType_FloatVector, schemapb.DataType_BinaryVector:
return true
default:
return false
}
}
func IsIntergerType(dataType schemapb.DataType) bool {
switch dataType {
case schemapb.DataType_Int8, schemapb.DataType_Int16,
schemapb.DataType_Int32, schemapb.DataType_Int64:
return true
default:
return false
}
}
func IsFloatingType(dataType schemapb.DataType) bool {
switch dataType {
case schemapb.DataType_Float, schemapb.DataType_Double:
return true
default:
return false
}
}

View File

@ -33,6 +33,7 @@ mkdir -p proxypb
mkdir -p indexpb
mkdir -p datapb
mkdir -p querypb
mkdir -p planpb
${protoc} --go_out=plugins=grpc,paths=source_relative:./commonpb common.proto
${protoc} --go_out=plugins=grpc,paths=source_relative:./schemapb schema.proto
@ -49,5 +50,6 @@ ${protoc} --go_out=plugins=grpc,paths=source_relative:./proxypb proxy_service.pr
${protoc} --go_out=plugins=grpc,paths=source_relative:./indexpb index_service.proto
${protoc} --go_out=plugins=grpc,paths=source_relative:./datapb data_service.proto
${protoc} --go_out=plugins=grpc,paths=source_relative:./querypb query_service.proto
${protoc} --go_out=plugins=grpc,paths=source_relative:./planpb plan.proto
popd