mirror of https://github.com/knative/func.git
Update Knative dependencies to v1.2 (0.29) (#1002)
This commit is contained in:
parent
a694cf54b3
commit
d2914d5c25
20
go.mod
20
go.mod
|
@ -8,7 +8,7 @@ require (
|
|||
github.com/Netflix/go-expect v0.0.0-20210722184520-ef0bf57d82b3
|
||||
github.com/alecthomas/jsonschema v0.0.0-20210526225647-edb03dcab7bc
|
||||
github.com/buildpacks/pack v0.24.0
|
||||
github.com/cloudevents/sdk-go/v2 v2.5.0
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0
|
||||
github.com/containers/image/v5 v5.19.1
|
||||
github.com/coreos/go-semver v0.3.0
|
||||
github.com/docker/cli v20.10.12+incompatible
|
||||
|
@ -18,7 +18,7 @@ require (
|
|||
github.com/go-git/go-billy/v5 v5.3.1
|
||||
github.com/go-git/go-git/v5 v5.4.2
|
||||
github.com/google/go-cmp v0.5.7
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220219142810-1571d7fdc46e
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220414143355-892d7a808387
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
|
@ -34,21 +34,23 @@ require (
|
|||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
k8s.io/api v0.23.4
|
||||
k8s.io/apimachinery v0.23.4
|
||||
k8s.io/api v0.23.5
|
||||
k8s.io/apimachinery v0.23.5
|
||||
k8s.io/client-go v1.5.2
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
|
||||
knative.dev/client v0.28.0
|
||||
knative.dev/eventing v0.28.4
|
||||
knative.dev/client v0.29.0
|
||||
knative.dev/eventing v0.29.2-0.20220420140829-ce4fe0990d23
|
||||
knative.dev/hack v0.0.0-20220128200847-51a42b2eb63e
|
||||
knative.dev/pkg v0.0.0-20220222214539-0b8a9403de7e
|
||||
knative.dev/serving v0.28.4
|
||||
knative.dev/networking v0.0.0-20220120045035-ec849677a316 // indirect
|
||||
knative.dev/pkg v0.0.0-20220222214439-083dd97300e1
|
||||
knative.dev/serving v0.29.5
|
||||
)
|
||||
|
||||
replace (
|
||||
// Tekton Triggers imports old google/cel-go, should be fixed with tektoncd/cli >=v0.24.x transitively
|
||||
github.com/google/cel-go => github.com/google/cel-go v0.11.2
|
||||
// update docker to be compatible with version used by pack and removes invalid pseudo-version
|
||||
github.com/openshift/source-to-image => github.com/boson-project/source-to-image v1.3.2
|
||||
|
||||
// Pin k8s.io dependencies to align with Knative and Tekton needs
|
||||
k8s.io/api => k8s.io/api v0.22.5
|
||||
k8s.io/apimachinery => k8s.io/apimachinery v0.22.5
|
||||
|
|
149
go.sum
149
go.sum
|
@ -1,6 +1,7 @@
|
|||
4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo=
|
||||
bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
|
||||
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
|
||||
bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM=
|
||||
bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M=
|
||||
bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA=
|
||||
cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
|
@ -56,8 +57,9 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g
|
|||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
||||
cloud.google.com/go/compute v1.1.0/go.mod h1:2NIffxgWfORSI7EOYMFatGTfjMLnqrOKBEyYb6NoRgA=
|
||||
cloud.google.com/go/compute v1.3.0 h1:mPL/MzDDYHsh5tHRS9mhmhWlcgClCrCa6ApQCU6wnHI=
|
||||
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
|
||||
cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM=
|
||||
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
||||
|
@ -117,6 +119,7 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7
|
|||
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
|
||||
git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
|
||||
github.com/14rcole/gopopulate v0.0.0-20180821133914-b175b219e774/go.mod h1:6/0dYRLLXyJjbkIPeeGyoJ/eKOSI0eU6eTlCBYibgd0=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20211102141018-f7be0cbad29c/go.mod h1:WpB7kf89yJUETZxQnP1kgYPNwlT2jjdDYUCoxVggM3g=
|
||||
github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0/go.mod h1:0mMDvQFeLbbn1Wy8P2j3hwFhqBq+FKn8OZPno8WLmp8=
|
||||
github.com/AlecAivazis/survey/v2 v2.2.12/go.mod h1:6d4saEvBsfSHXeN1a5OA5m2+HJ2LuVokllnC77pAIKI=
|
||||
|
@ -150,6 +153,7 @@ github.com/Azure/azure-sdk-for-go v61.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9mo
|
|||
github.com/Azure/azure-sdk-for-go v61.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v61.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v61.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-sdk-for-go v62.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0=
|
||||
github.com/Azure/azure-service-bus-go v0.11.5/go.mod h1:MI6ge2CuQWBVq+ly456MY7XqNLJip5LO1iSFodbNLbU=
|
||||
github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0=
|
||||
|
@ -265,8 +269,9 @@ github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JP
|
|||
github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||
github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||
github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=
|
||||
github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||
github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA=
|
||||
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
|
||||
github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
|
||||
github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
|
||||
github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
|
||||
|
@ -275,6 +280,7 @@ github.com/Microsoft/hcsshim v0.8.10/go.mod h1:g5uw8EV2mAlzqe94tfNBNdr89fnbD/n3H
|
|||
github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
|
||||
github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
|
||||
github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
|
||||
github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
||||
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
||||
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
|
||||
github.com/Microsoft/hcsshim v0.9.2 h1:wB06W5aYFfUB3IvootYAY2WnOmIdgPGfqSI6tufQNnY=
|
||||
|
@ -340,6 +346,7 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
|
|||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
|
||||
github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
|
||||
github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk=
|
||||
github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE=
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||
github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
|
||||
|
@ -349,8 +356,9 @@ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo
|
|||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
|
||||
github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/antlr/antlr4 v0.0.0-20200503195918-621b933c7a7f h1:0cEys61Sr2hUBEXfNV8eyQP01oZuBgoMeHunebPirK8=
|
||||
github.com/antlr/antlr4 v0.0.0-20200503195918-621b933c7a7f/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211221011931-643d94fcab96/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220209173558-ad29539cd2e9 h1:zvkJv+9Pxm1nnEMcKnShREt4qtduHKz4iw4AB4ul0Ao=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220209173558-ad29539cd2e9/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
|
||||
github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ=
|
||||
github.com/apache/beam v2.28.0+incompatible/go.mod h1:/8NX3Qi8vGstDLLaeaU7+lzVEu/ACaQhYjeefzQ0y1o=
|
||||
github.com/apache/beam v2.32.0+incompatible/go.mod h1:/8NX3Qi8vGstDLLaeaU7+lzVEu/ACaQhYjeefzQ0y1o=
|
||||
|
@ -412,43 +420,53 @@ github.com/aws/aws-sdk-go-v2 v1.7.1/go.mod h1:L5LuPC1ZgDr2xQS7AmIec/Jlc7O/Y1u2Kx
|
|||
github.com/aws/aws-sdk-go-v2 v1.11.0/go.mod h1:SQfA+m2ltnu1cA0soUkj4dRSsmITiVQUJvBIZjzfPyQ=
|
||||
github.com/aws/aws-sdk-go-v2 v1.12.0/go.mod h1:tWhQI5N5SiMawto3uMAQJU5OUN/1ivhDDHq7HTsJvZ0=
|
||||
github.com/aws/aws-sdk-go-v2 v1.13.0/go.mod h1:L6+ZpqHaLbAaxsqV0L4cvxZY7QupWJB4fhkf8LXvC7w=
|
||||
github.com/aws/aws-sdk-go-v2 v1.14.0/go.mod h1:ZA3Y8V0LrlWj63MQAnRHgKf/5QB//LSZCPNWlWrNGLU=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0/go.mod h1:Xn6sxgRuIDflLRJFj5Ev7UxABIkNbccFPV/p8itDReM=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.5.0/go.mod h1:RWlPOAW3E3tbtNAqTwvSW54Of/yP3oiZXMI0xfUdjyA=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.10.1/go.mod h1:auIv5pIIn3jIBHNRcVQcsczn6Pfa6Dyv80Fai0ueoJU=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.12.0/go.mod h1:GQONFVSDdG6RRho1C730SGNyDhS1kSTnxpOE76ptBqo=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.13.0/go.mod h1:Pjv2OafecIn+4miw9VFDCr06YhKyf/oKOkIcpQOgWKk=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.13.1/go.mod h1:Ba5Z4yL/UGbjQUzsiaN378YobhFo0MLfueXGiOsYtEs=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.14.0/go.mod h1:GKDRrvsq/PTaOYc9252u8Uah1hsIdtor4oIrFvUNPNM=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.3.1/go.mod h1:r0n73xwsIVagq8RsxmZbGSRQFj9As3je72C2WzUIToc=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.6.1/go.mod h1:QyvQk1IYTqBWSi1T6UgT/W8DMxBVa5pVuLFSRLLhGf8=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.7.0/go.mod h1:Kmq64kahHJtXfmnEwnvRKeNjLBqkdP++Itln9BmQerE=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.8.0/go.mod h1:gnMo58Vwx3Mu7hj1wpcG8DI0s57c9o42UQ6wgTQT5to=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.9.0/go.mod h1:PyHKqk/+tJuDY7T8R580S1j/AcSD+ODeUZ99CAUKLqQ=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.3.0/go.mod h1:2LAuqPx1I6jNfaGDucWfA2zqQCYCOMCDHiCOciALyNw=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.8.0/go.mod h1:5E1J3/TTYy6z909QNR0QnXGBpfESYGDqd3O0zqONghU=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.9.0/go.mod h1:19SxQ+9zANyJCnNaoF3ovl8bFil4TaqCYEDdqNGKM+A=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.10.0/go.mod h1:I6/fHT/fH460v09eg2gVrd8B/IqskhNdpcLH0WNO3QI=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.11.0/go.mod h1:rwdUKJV5rm+vHu1ncD1iGDqahBEL8O0tBjVqo9eO2N0=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.7.1/go.mod h1:wN/mvkow08GauDwJ70jnzJ1e+hE+Q3Q7TwpYLXOe9oI=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.0/go.mod h1:NO3Q5ZTTQtO2xIg2+xTXYDiT7knSejfeDm7WGDaOo0U=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.3/go.mod h1:L72JSFj9OwHwyukeuKFFyTj6uFWE4AjB0IQp97bd9Lc=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.4/go.mod h1:XHgQ7Hz2WY2GAn//UXHofLfPXWh+s62MbMOijrg12Lw=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.5/go.mod h1:2hXc8ooJqF2nAznsbJQIn+7h851/bu8GVC80OVTTqf8=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.0.0/go.mod h1:anlUzBoEWglcUxUQwZA7HQOEVEnQALVZsizAapB2hq8=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.1.0/go.mod h1:KdVvdk4gb7iatuHZgIkIqvJlWHBtjCJLUtD/uO/FkWw=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.2.0/go.mod h1:BsCSJHx5DnDXIrOcqB8KN1/B+hXLG/bi4Y6Vjcx/x9E=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.3.0/go.mod h1:miRSv9l093jX/t/j+mBCaLqFHo9xKYzJ7DGm1BsGoJM=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.1.1/go.mod h1:Zy8smImhTdOETZqfyn01iNOe0CNggVbPjCajyaz6Gvg=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.0/go.mod h1:6oXGy4GLpypD3uCh8wcqztigGgmhLToMfjavgh+VySg=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.3/go.mod h1:N4dv+zawriMFZBO/6UKg3zt+XO6xWOQo1neAA0lFbo4=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.4/go.mod h1:R3sWUqPcfXSiF/LSFJhjyJmpg9uV6yP2yv3YZZjldVI=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.5/go.mod h1:R3sWUqPcfXSiF/LSFJhjyJmpg9uV6yP2yv3YZZjldVI=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.6/go.mod h1:o1ippSg3yJx5EuT4AOGXJCUcmt5vrcxla1cg6K1Q8Iw=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.4.1/go.mod h1:FglZcyeiBqcbvyinl+n14aT/EWC7S1MIH+Gan2iizt0=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.13.0/go.mod h1:X9rkClmo0/dXh2fwvhkMoXR5zxirrzCqMgfU+Z0HIgs=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.14.0/go.mod h1:a3WUi3JjM3MFtIYenSYPJ7UZPXsw7U7vzebnynxucks=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecr v1.15.0/go.mod h1:4zYI85WiYDhFaU1jPFVfkD7HlBcdnITDE3QxDwy4Kus=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.4.1/go.mod h1:eD5Eo4drVP2FLTw0G+SMIPWNWvQRGGTtIZR2XeAagoA=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.10.0/go.mod h1:wlxlU/f1AOpsYIxt86LyrztTAIhyp/6HRNHcZjLzHjg=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.11.0/go.mod h1:iurUYk+aG+E2DO0MnQEZKh9zsaIxuTcrvCaAUTUhuTU=
|
||||
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.12.0/go.mod h1:IArQ3IBR00FkuraKwudKZZU32OxJfdTdwV+W5iZh3Y4=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0/go.mod h1:80NaCIH9YU3rzTTs/J/ECATjXuRqzo/wB6ukO6MZ0XY=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.1/go.mod h1:zceowr5Z1Nh2WVP8bf/3ikB41IZW59E4yIYbg+pC6mw=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.5.0/go.mod h1:Mq6AEc+oEjCUlBuLiK5YwW4shSOAKCQ3tXN0sQeYoBA=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.6.0/go.mod h1:wTgFkG6t7jS/6Y0SILXwfspV3IXowb6ngsAlSajW0Kc=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.7.0/go.mod h1:K/qPe6AP2TGYv4l6n7c88zh9jWBDf6nHhvg1fx/EWfU=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.8.0/go.mod h1:rBDLgXDAwHOfxZKLRDl8OGTPzFDC+a2pLqNNj8+QwfI=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.9.0/go.mod h1:xKCZ4YFSF2s4Hnb/J0TLeOsKuGzICzcElaOKNGrVnx4=
|
||||
github.com/aws/aws-sdk-go-v2/service/kms v1.10.0/go.mod h1:ZkHWL8m5Nw1g9yMXqpCjnIJtSDToAmNbXXZ9gj0bO7s=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.19.0/go.mod h1:Gwz3aVctJe6mUY9T//bcALArPUaFmNAy2rTB9qN4No8=
|
||||
|
@ -460,16 +478,20 @@ github.com/aws/aws-sdk-go-v2/service/sso v1.3.1/go.mod h1:J3A3RGUvuCZjvSuZEcOpHD
|
|||
github.com/aws/aws-sdk-go-v2/service/sso v1.6.0/go.mod h1:Q/l0ON1annSU+mc0JybDy1Gy6dnJxIcWjphO6qJPzvM=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.8.0/go.mod h1:AB6v3BedyhVRIbPQbJnUsBmtup2pFiikpp5n3YyB6Ac=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.9.0/go.mod h1:vCV4glupK3tR7pw7ks7Y4jYRL86VvxS+g5qk04YeWrU=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.10.0/go.mod h1:m1CRRFX7eH3EE6w0ntdu+lo+Ph9VS7y8qRV/vdym0ZY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.6.0/go.mod h1:q7o0j7d7HrJk/vr9uUt3BVRASvcU7gYZB9PUgPiByXg=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.10.0/go.mod h1:jLKCFqS+1T4i7HDqCP9GM4Uk75YW1cS0o82LdxpMyOE=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.13.0/go.mod h1:jQto17aC9pJ6xRa1g29uXZhbcS6qNT3PSnKfPShq4sY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.14.0/go.mod h1:u0xMJKDvvfocRjiozsoZglVNXRG19043xzp3r2ivLIk=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.15.0/go.mod h1:E264g2Gl5U9KTGzmd8ypGEAoh75VmqyuA/Ox5O1eRE4=
|
||||
github.com/aws/smithy-go v1.6.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.9.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.9.1/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.10.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.11.0/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM=
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20211215200129-69c85dc22db6/go.mod h1:8vJsEZ4iRqG+Vx6pKhWK6U00qcj0KC37IsfszMkY6UE=
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220216180153-3d7835abdf40/go.mod h1:8vJsEZ4iRqG+Vx6pKhWK6U00qcj0KC37IsfszMkY6UE=
|
||||
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220228164355-396b2034c795/go.mod h1:8vJsEZ4iRqG+Vx6pKhWK6U00qcj0KC37IsfszMkY6UE=
|
||||
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
|
||||
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
|
||||
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
|
||||
|
@ -510,6 +532,7 @@ github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQ
|
|||
github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso=
|
||||
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
|
||||
github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
|
||||
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
|
||||
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
|
||||
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
|
||||
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
||||
|
@ -533,6 +556,7 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH
|
|||
github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
|
||||
github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
|
||||
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||
github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/census-instrumentation/opencensus-proto v0.3.0 h1:t/LhUZLVitR1Ow2YOnduCsavhwFUklBMoGVYUCqmCqk=
|
||||
|
@ -565,9 +589,12 @@ github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4
|
|||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cloudevents/conformance v0.2.0/go.mod h1:rHKDwylBH89Rns6U3wL9ww8bg9/4GbwRCDNuyoC6bcc=
|
||||
github.com/cloudevents/sdk-go/observability/opencensus/v2 v2.4.1/go.mod h1:lhEpxMrIUkeu9rVRgoAbyqZ8GR8Hd3DUy+thHUxAHoI=
|
||||
github.com/cloudevents/sdk-go/sql/v2 v2.8.0 h1:gWednxJHL0Ycf93XeEFyQxYj81A7b4eNwkzjNxGunAM=
|
||||
github.com/cloudevents/sdk-go/sql/v2 v2.8.0/go.mod h1:u9acNJbhmi1wnDJro4PEAqbr4N1LTCyEUClErxbPS1A=
|
||||
github.com/cloudevents/sdk-go/v2 v2.4.1/go.mod h1:MZiMwmAh5tGj+fPFvtHv9hKurKqXtdB9haJYMJ/7GJY=
|
||||
github.com/cloudevents/sdk-go/v2 v2.5.0 h1:Ts6aLHbBUJfcNcZ4ouAfJ4+Np7SE1Yf2w4ADKRCd7Fo=
|
||||
github.com/cloudevents/sdk-go/v2 v2.5.0/go.mod h1:nlXhgFkf0uTopxmRXalyMwS2LG70cRGPrxzmjJgSG0U=
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0 h1:kmRaLbsafZmidZ0rZ6h7WOMqCkRMcVTLV5lxV/HKQ9Y=
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0/go.mod h1:GpCBmUj7DIRiDhVvsK5d6WCbgTWs8DxAWTRtAwQmIXs=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
|
@ -600,8 +627,9 @@ github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1
|
|||
github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
|
||||
github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
|
||||
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
|
||||
github.com/containerd/cgroups v1.0.1 h1:iJnMvco9XGvKUvNQkv88bE4uJXxRQH18efbKo9w5vHQ=
|
||||
github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
|
||||
github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4=
|
||||
github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8=
|
||||
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||
github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE=
|
||||
|
@ -629,16 +657,18 @@ github.com/containerd/containerd v1.5.2/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTV
|
|||
github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c=
|
||||
github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s=
|
||||
github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
|
||||
github.com/containerd/containerd v1.5.10 h1:3cQ2uRVCkJVcx5VombsE7105Gl9Wrl7ORAO3+4+ogf4=
|
||||
github.com/containerd/containerd v1.5.10/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
|
||||
github.com/containerd/containerd v1.6.0 h1:CLa12ZcV0d2ZTRKq1ssioeJpTnPJBMyndpEKA+UtzJg=
|
||||
github.com/containerd/containerd v1.6.0/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE=
|
||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
|
||||
github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
|
||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
|
||||
github.com/containerd/continuity v0.1.0 h1:UFRRY5JemiAhPZrr/uE0n8fMTLcZsUvySPr1+D7pgr8=
|
||||
github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
|
||||
github.com/containerd/continuity v0.2.2 h1:QSqfxcn8c+12slxwu00AtzXrsami0MJb/MQs9lOLHLA=
|
||||
github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk=
|
||||
github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
|
||||
|
@ -648,6 +678,8 @@ github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O1
|
|||
github.com/containerd/fuse-overlayfs-snapshotter v1.0.2/go.mod h1:nRZceC8a7dRm3Ao6cJAwuJWPFiBPaibHiFntRUnzhwU=
|
||||
github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU=
|
||||
github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
|
||||
github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||
github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
|
||||
|
@ -657,6 +689,7 @@ github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak
|
|||
github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA=
|
||||
github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow=
|
||||
github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms=
|
||||
github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4=
|
||||
github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c=
|
||||
github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
|
||||
github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
|
||||
|
@ -668,8 +701,9 @@ github.com/containerd/stargz-snapshotter/estargz v0.6.4/go.mod h1:83VWDqHnurTKli
|
|||
github.com/containerd/stargz-snapshotter/estargz v0.7.0/go.mod h1:83VWDqHnurTKliEB0YvWMiCfLDwv4Cjj1X9Vk98GJZw=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.10.0/go.mod h1:aE5PCyhFMwR8sbrErO5eM2GcvkyXTTJremG883D4qF0=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.10.1/go.mod h1:aE5PCyhFMwR8sbrErO5eM2GcvkyXTTJremG883D4qF0=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.11.0 h1:t0IW5kOmY7AXDAWRUs2uVzDhijAUOAYVr/dyRhOQvBg=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.11.0/go.mod h1:/KsZXsJRllMbTKFfG0miFQWViQKdI9+9aSXs+HN0+ac=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.11.1 h1:mNQqxcAWmDrV6d6yUvzFhfY8puNzoQz9v4diW+Pmei4=
|
||||
github.com/containerd/stargz-snapshotter/estargz v0.11.1/go.mod h1:6VoPcf4M1wvnogWxqc4TqBWWErCS+R+ucnPZId2VbpQ=
|
||||
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
|
||||
github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
|
||||
github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8=
|
||||
|
@ -689,8 +723,10 @@ github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNR
|
|||
github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
||||
github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
||||
github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
||||
github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y=
|
||||
github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
|
||||
github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
|
||||
github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE=
|
||||
github.com/containers/image/v5 v5.19.1 h1:g4/+XIuh1kRoRn2MfLDhfHhkNOIO9JtqhSyo55tjpfE=
|
||||
github.com/containers/image/v5 v5.19.1/go.mod h1:ewoo3u+TpJvGmsz64XgzbyTHwHtM94q7mgK/pX+v2SE=
|
||||
github.com/containers/libtrust v0.0.0-20190913040956-14b96171aa3b/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY=
|
||||
|
@ -706,6 +742,7 @@ github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc
|
|||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
||||
github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
|
||||
github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
|
||||
github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q=
|
||||
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
|
||||
github.com/coreos/go-oidc/v3 v3.1.0/go.mod h1:rEJ/idjfUyfkBit1eI1fvyr+64/g9dcKpAm8MJMesvo=
|
||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
|
@ -956,8 +993,11 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7
|
|||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
|
||||
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
|
@ -1027,7 +1067,6 @@ github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFut
|
|||
github.com/go-openapi/spec v0.20.1/go.mod h1:93x7oh+d+FQsmsieroS4cmR3u0p/ywH649a3qwC9OsQ=
|
||||
github.com/go-openapi/spec v0.20.2/go.mod h1:RW6Xcbs6LOyWLU/mXGdzn2Qc+3aj+ASfI7rvSZh1Vls=
|
||||
github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg=
|
||||
github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
|
||||
github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
|
||||
github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
|
||||
github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
|
||||
|
@ -1251,9 +1290,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
|
|||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
|
||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
|
||||
github.com/google/cel-go v0.7.3 h1:8v9BSN0avuGwrHFKNCjfiQ/CE6+D6sW+BDyOVoEeP6o=
|
||||
github.com/google/cel-go v0.7.3/go.mod h1:4EtyFAHT5xNr0Msu0MJjyGxPUgdr9DlcaPyzLt/kkt8=
|
||||
github.com/google/cel-spec v0.5.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA=
|
||||
github.com/google/cel-go v0.11.2 h1:o16cOggWWtH1a3ZHQ8uWqt8nd255vDrEK1mDE1cFRSQ=
|
||||
github.com/google/cel-go v0.11.2/go.mod h1:drz+knCRsctDZ180KZHwIEEUb9IdK/nxPoyhxi+O1K0=
|
||||
github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg=
|
||||
github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs=
|
||||
github.com/google/certificate-transparency-go v1.1.2-0.20210422104406-9f33727a7a18/go.mod h1:6CKh9dscIRoqc2kC6YUFICHZMT9NrClyPrRVFrdw1QQ=
|
||||
|
@ -1286,21 +1324,24 @@ github.com/google/go-containerregistry v0.7.1-0.20211118220127-abdc633f8305/go.m
|
|||
github.com/google/go-containerregistry v0.7.1-0.20211203164431-c75901cce627/go.mod h1:IwJblnDNiCs8sxubbfPNniYsUqr8m+nt7YbPzecsGuE=
|
||||
github.com/google/go-containerregistry v0.8.0/go.mod h1:wW5v71NHGnQyb4k+gSshjxidrC7lN33MdWEn+Mz9TsI=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220110151055-a61fd0a8e2bb/go.mod h1:wW5v71NHGnQyb4k+gSshjxidrC7lN33MdWEn+Mz9TsI=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220120151853-ac864e57b117/go.mod h1:wW5v71NHGnQyb4k+gSshjxidrC7lN33MdWEn+Mz9TsI=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220202214207-9c35968ef47e/go.mod h1:cwx3SjrH84Rh9VFJSIhPh43ovyOp3DCWgY3h8nWmdGQ=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220211173031-41f8d92709b7/go.mod h1:cwx3SjrH84Rh9VFJSIhPh43ovyOp3DCWgY3h8nWmdGQ=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220216220642-00c59d91847c/go.mod h1:MMbnwuvLeZJRPqhTs8jDWc8xGlOs5YCGx1TSc/qdExk=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220219142810-1571d7fdc46e h1:1KGep3inUBSyCDbpk4noN5CfemOpEpQPPnN7UbBrdCU=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220219142810-1571d7fdc46e/go.mod h1:MMbnwuvLeZJRPqhTs8jDWc8xGlOs5YCGx1TSc/qdExk=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220414133640-f1b729141d33/go.mod h1:eTLvLZaEe2FoQsb25t7BLxQQryyrwHTzFfwxN87mhAw=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220414143355-892d7a808387 h1:GWICy4b02s8EA1M9H5krRQ48BKpIHO5LtBBm2BQLhx0=
|
||||
github.com/google/go-containerregistry v0.8.1-0.20220414143355-892d7a808387/go.mod h1:eTLvLZaEe2FoQsb25t7BLxQQryyrwHTzFfwxN87mhAw=
|
||||
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20210610160139-c086c7f16d4e/go.mod h1:u9BUkrFoN0hojbyaW5occdRyQvT74KjJKx2VClbrDC8=
|
||||
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20210918223331-0e8b581974dd/go.mod h1:j3IqhBG3Ox1NXmmhbWU4UmiHVAf2dUgB7le1Ch7JZQ0=
|
||||
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20211118220127-abdc633f8305/go.mod h1:/wxgGW8xlALyJwgyqAOe19EMFzNi+pePDhT33XMD1Yo=
|
||||
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20211215180950-ab77ea68f600/go.mod h1:j3IqhBG3Ox1NXmmhbWU4UmiHVAf2dUgB7le1Ch7JZQ0=
|
||||
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20220120151853-ac864e57b117/go.mod h1:BH7pLQnIZhfVpL7cRyWhvvz1bZLY9V45/HvXVh5UMDY=
|
||||
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20220216220642-00c59d91847c/go.mod h1:m6nUV1MgElByyfWJCAKsEt+5s/BtU9ZLjyHDmoeAHcM=
|
||||
github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20220414154538-570ba6c88a50/go.mod h1:m7mMYMlUraMy65yWp4AXkMgousS5LFPYcvI19yjz6W0=
|
||||
github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20220110151055-a61fd0a8e2bb/go.mod h1:SK4EqntTk6tHEyNngoqHUwjjZaW6mfzLukei4+cbvu8=
|
||||
github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20220120123041-d22850aca581/go.mod h1:SK4EqntTk6tHEyNngoqHUwjjZaW6mfzLukei4+cbvu8=
|
||||
github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20220128225446-c63684ed5f15/go.mod h1:juPcrnQFaTyH72YA4Lt2MwEFSGi3orvGXyzxzo+RLss=
|
||||
github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20220223122423-dd8d514a9b24/go.mod h1:MO/Ilc3XTxy/Pi8aMXEiRUl6icOqResFyhSFCLlqtR8=
|
||||
github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20220414143355-892d7a808387/go.mod h1:QOryQrrP9Uq/1w9F7WOWWhK2/gHXg7F0i3J/hPG6yQA=
|
||||
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
|
||||
github.com/google/go-github/v27 v27.0.6/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0=
|
||||
github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM=
|
||||
|
@ -1574,9 +1615,11 @@ github.com/influxdata/tdigest v0.0.0-20180711151920-a7d76c6f093a/go.mod h1:9Gkys
|
|||
github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0=
|
||||
github.com/influxdata/tdigest v0.0.0-20191024211133-5d87a7585faa/go.mod h1:Z0kXnxzbTC2qrx4NaIzYkE1k66+6oEDQTvL95hQFh5Y=
|
||||
github.com/influxdata/tdigest v0.0.1/go.mod h1:Z0kXnxzbTC2qrx4NaIzYkE1k66+6oEDQTvL95hQFh5Y=
|
||||
github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ=
|
||||
github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg=
|
||||
github.com/ishidawataru/sctp v0.0.0-20210226210310-f2269e66cdee/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg=
|
||||
github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
|
||||
github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw=
|
||||
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
|
||||
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||
github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||
|
@ -1714,6 +1757,7 @@ github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8
|
|||
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.14.3/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.14.4 h1:eijASRJcobkVtSt81Olfh7JX43osYLwy5krOJo6YEu4=
|
||||
github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||
|
@ -1916,7 +1960,9 @@ github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2J
|
|||
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||
github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI=
|
||||
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
||||
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
||||
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
|
||||
github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUrjiz0MCtMV38jdMNW4doKSiBrEvCQQ=
|
||||
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
|
||||
|
@ -1994,6 +2040,7 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
|
|||
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
|
||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
||||
|
@ -2012,6 +2059,7 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
|
|||
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
|
||||
github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
|
||||
github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
||||
github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
|
||||
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
|
||||
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
||||
|
@ -2260,6 +2308,7 @@ github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIH
|
|||
github.com/sabhiram/go-gitignore v0.0.0-20201211074657-223ce5d391b0 h1:4Q/TASkyjpqyR5DL5+6c2FGSDpHM5bTMSspcXr7J6R8=
|
||||
github.com/sabhiram/go-gitignore v0.0.0-20201211074657-223ce5d391b0/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ=
|
||||
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
|
||||
github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
|
||||
github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE=
|
||||
github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig=
|
||||
github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM=
|
||||
|
@ -2269,6 +2318,7 @@ github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:
|
|||
github.com/sassoftware/go-rpmutils v0.1.1/go.mod h1:euhXULoBpvAxqrBHEyJS4Tsu3hHxUmQWNymxoJbzgUY=
|
||||
github.com/sassoftware/relic v0.0.0-20210427151427-dfb082b79b74/go.mod h1:YlB8wFIZmFLZ1JllNBfSURzz52fBxbliNgYALk1UDmk=
|
||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
|
||||
github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U=
|
||||
github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8=
|
||||
github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM=
|
||||
|
@ -2487,6 +2537,7 @@ github.com/tsenart/go-tsz v0.0.0-20180814235614-0bd30b3df1c3/go.mod h1:SWZznP1z5
|
|||
github.com/tsenart/vegeta v12.7.1-0.20190725001342-b5f4fca92137+incompatible/go.mod h1:Smz/ZWfhKRcyDDChZkG3CyTHdj87lHzio/HOCkbndXM=
|
||||
github.com/tsenart/vegeta/v12 v12.8.4/go.mod h1:ZiJtwLn/9M4fTPdMY7bdbIeyNeFVE8/AHbWFqCsUuho=
|
||||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||
github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM=
|
||||
github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||
|
@ -2528,9 +2579,11 @@ github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG
|
|||
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
|
||||
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
|
||||
github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
|
||||
github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
|
||||
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
|
||||
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
|
||||
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
|
||||
github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
|
||||
github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU=
|
||||
github.com/wavesoftware/go-ensure v1.0.0/go.mod h1:K2UAFSwMTvpiRGay/M3aEYYuurcR8S4A6HkQlJPV8k4=
|
||||
github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU=
|
||||
|
@ -2653,17 +2706,23 @@ go.opentelemetry.io/contrib v0.21.0/go.mod h1:EH4yDYeNoaTqn/8yCWQmfNB78VHfGX2Jt2
|
|||
go.opentelemetry.io/contrib v1.3.0/go.mod h1:FlyPNX9s4U6MCsWEc5YAK4KzKNHFDsjrDUZijJiXvy8=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.21.0/go.mod h1:Vm5u/mtkj1OMhtao0v+BGo2LUoLCgHYXvRmj0jWITlE=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.21.0/go.mod h1:a9cocRplhIBkUAJmak+BPDx+LVL7cTmqUPB0uBcTA4k=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.21.0/go.mod h1:JQAtechjxLEL81EjmbRwxBq/XEzGaHcsPuDHAx54hg4=
|
||||
go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
|
||||
go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
|
||||
go.opentelemetry.io/otel v1.0.0-RC1/go.mod h1:x9tRa9HK4hSSq7jf2TKbqFbtt58/TGk0f9XiEYISI1I=
|
||||
go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
|
||||
go.opentelemetry.io/otel/exporters/jaeger v1.0.0-RC1/go.mod h1:FXJnjGCoTQL6nQ8OpFJ0JI1DrdOvMoVx49ic0Hg4+D4=
|
||||
go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
|
||||
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.0-RC1/go.mod h1:FliQjImlo7emZVjixV8nbDMAa4iAkcWTE9zzSEOiEPw=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.0-RC1/go.mod h1:cDwRc2Jrh5Gku1peGK8p9rRuX/Uq2OtVmLicjlw2WYU=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.0.0-RC1/go.mod h1:OYKzEoxgXFvehW7X12WYT4/a2BlASJK9l7RtG4A91fg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE=
|
||||
go.opentelemetry.io/otel/internal/metric v0.21.0/go.mod h1:iOfAaY2YycsXfYD4kaRSbLx2LKmfpKObWBEv9QK5zFo=
|
||||
go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
|
||||
go.opentelemetry.io/otel/metric v0.21.0/go.mod h1:JWCt1bjivC4iCrz/aCrM1GSw+ZcvY44KCbaeeRhzHnc=
|
||||
|
@ -2671,10 +2730,12 @@ go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa
|
|||
go.opentelemetry.io/otel/oteltest v1.0.0-RC1/go.mod h1:+eoIG0gdEOaPNftuy1YScLr1Gb4mL/9lpDkZ0JjMRq4=
|
||||
go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
|
||||
go.opentelemetry.io/otel/sdk v1.0.0-RC1/go.mod h1:kj6yPn7Pgt5ByRuwesbaWcRLA+V7BSDg3Hf8xRvsvf8=
|
||||
go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
|
||||
go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
|
||||
go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
|
||||
go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
|
||||
go.opentelemetry.io/otel/trace v1.0.0-RC1/go.mod h1:86UHmyHWFEtWjfWPSbu0+d0Pf9Q6e1U+3ViBOc+NXAg=
|
||||
go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
|
||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||
go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg=
|
||||
go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ=
|
||||
|
@ -3119,6 +3180,8 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
|
@ -3171,8 +3234,9 @@ golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxb
|
|||
golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs=
|
||||
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
@ -3392,8 +3456,9 @@ google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFd
|
|||
google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
|
||||
google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM=
|
||||
google.golang.org/api v0.65.0/go.mod h1:ArYhxgGadlWmqO1IqVujw6Cs8IdD33bTmzKo2Sh+cbg=
|
||||
google.golang.org/api v0.67.0 h1:lYaaLa+x3VVUhtosaK9xihwQ9H9KRa557REHwwZ2orM=
|
||||
google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
|
||||
google.golang.org/api v0.70.0 h1:67zQnAE0T2rB0A3CwLSas0K+SbVzSxP+zTLkQLexeiw=
|
||||
google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
|
@ -3457,7 +3522,6 @@ google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6D
|
|||
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200929141702-51c3e5b607fe/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
|
@ -3517,8 +3581,12 @@ google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ6
|
|||
google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc h1:fb/ViRpv3ln/LvbqZtTpoOd1YQDNH12gaGZreoSFovE=
|
||||
google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc=
|
||||
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
|
@ -3697,8 +3765,9 @@ k8s.io/apiserver v0.20.7/go.mod h1:7gbB7UjDdP1/epYBGnIUE6jWY4Wpz99cZ7igfDa9rv4=
|
|||
k8s.io/apiserver v0.21.0/go.mod h1:w2YSn4/WIwYuxG5zJmcqtRdtqgW/J2JRgFAqps3bBpg=
|
||||
k8s.io/apiserver v0.21.4/go.mod h1:SErUuFBBPZUcD2nsUU8hItxoYheqyYr2o/pCINEPW8g=
|
||||
k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ=
|
||||
k8s.io/cli-runtime v0.21.4 h1:kvOzx6dKg+9wRuHTzSqo8tfTV6ixZCkmi+ag54s7mn8=
|
||||
k8s.io/cli-runtime v0.21.4/go.mod h1:eRbLHYkdVWzvG87yrkgGd8CqX6/+fAG9DTdAqTXmlRY=
|
||||
k8s.io/cli-runtime v0.22.5 h1:bZqLgx1INiPgXyMk/Hu3o5NFmdfvlvtsoE+wHJuKA2U=
|
||||
k8s.io/cli-runtime v0.22.5/go.mod h1:12ah4O0kaevIYHsRcFGt8RKER0wlTN2yCgHp1c4Uxp4=
|
||||
k8s.io/client-go v0.22.5 h1:I8Zn/UqIdi2r02aZmhaJ1hqMxcpfJ3t5VqvHtctHYFo=
|
||||
k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y=
|
||||
k8s.io/cloud-provider v0.17.4/go.mod h1:XEjKDzfD+b9MTLXQFlDGkk6Ho8SGMpaU8Uugx/KNK9U=
|
||||
|
@ -3723,6 +3792,7 @@ k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
|
|||
k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
|
||||
k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
|
||||
k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4=
|
||||
k8s.io/csi-translation-lib v0.17.4/go.mod h1:CsxmjwxEI0tTNMzffIAcgR9lX4wOh6AKHdxQrT7L0oo=
|
||||
k8s.io/csi-translation-lib v0.19.7/go.mod h1:WghizPQuzuygr2WdpgN2EjcNpDD2V4EAbxFXsgHgSBk=
|
||||
k8s.io/csi-translation-lib v0.21.0/go.mod h1:edq+UMpgqEx3roTuGF/03uIuSOsI986jtu65+ytLlkA=
|
||||
|
@ -3756,6 +3826,7 @@ k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H
|
|||
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
|
||||
k8s.io/kube-openapi v0.0.0-20210113233702-8566a335510f/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
|
||||
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
|
||||
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
|
||||
k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
|
||||
k8s.io/kube-openapi v0.0.0-20220114203427-a0453230fd26/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
|
||||
|
@ -3778,37 +3849,39 @@ k8s.io/utils v0.0.0-20220127004650-9b3446523e65/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
|
|||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
knative.dev/caching v0.0.0-20210803185815-4e553d2275a0/go.mod h1:Vs+HND39+KKaIQp9M3m3Jmt4YtznpitDQ3n53gxbDYQ=
|
||||
knative.dev/caching v0.0.0-20211206133228-c29dc56d8f03/go.mod h1:xki+LBTL1riXSoU2dKznqUfgOlQ2eO/F1WF+GMXxH0k=
|
||||
knative.dev/client v0.28.0 h1:x+wghPn3tZ/rPf7gsBcEro43Ev4zSwq91NGfNi/7lPI=
|
||||
knative.dev/client v0.28.0/go.mod h1:QcPrTsTdc/3sGKugtjL9yYyTwcNvD5Su/KHltFVLlJ0=
|
||||
knative.dev/caching v0.0.0-20220118175933-0c1cc094a7f4/go.mod h1:OHsK3XaWmdi2/mPaNBiX8LbefbtM6TptnT90eVbYGSA=
|
||||
knative.dev/client v0.29.0 h1:VzmXYWNfzF5O1OUpCYv2rd8hj6Q3mwGNwOyx6y4G0g8=
|
||||
knative.dev/client v0.29.0/go.mod h1:VaTZlNkplns4UrscGPp4CwKcIVRcfC4Po1yRvfF4JiQ=
|
||||
knative.dev/eventing v0.25.0/go.mod h1:8jIsrnSONPgv+m63OTzpwZQJiQASYl77C3llCyYlBMU=
|
||||
knative.dev/eventing v0.28.0/go.mod h1:zxoB37kQxEkfCvKA7wZuHOPYInz6SFJzrhmG9IAd/iY=
|
||||
knative.dev/eventing v0.28.4 h1:frHm4zNcJaAfA1m11pn+ueyAyqQOSmy5j9I4dpf2c0M=
|
||||
knative.dev/eventing v0.28.4/go.mod h1:zxoB37kQxEkfCvKA7wZuHOPYInz6SFJzrhmG9IAd/iY=
|
||||
knative.dev/eventing v0.29.0/go.mod h1:u5T5NZTDUsLR7yJwp5MDnBnDX5MhywD3yK3Rq+7gTtI=
|
||||
knative.dev/eventing v0.29.2-0.20220420140829-ce4fe0990d23 h1:9DucdcOalX90T2QMhQjh4MLjXUEgqgsRxuK1o1Tt+44=
|
||||
knative.dev/eventing v0.29.2-0.20220420140829-ce4fe0990d23/go.mod h1:u5T5NZTDUsLR7yJwp5MDnBnDX5MhywD3yK3Rq+7gTtI=
|
||||
knative.dev/hack v0.0.0-20210622141627-e28525d8d260/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||
knative.dev/hack v0.0.0-20211122162614-813559cefdda/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||
knative.dev/hack v0.0.0-20211203062838-e11ac125e707/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||
knative.dev/hack v0.0.0-20220118141833-9b2ed8471e30/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||
knative.dev/hack v0.0.0-20220128200847-51a42b2eb63e h1:pW3LMToyFhAhbHQWQwUHLY57i7gjvyFwFC8Sg6oNkJ8=
|
||||
knative.dev/hack v0.0.0-20220128200847-51a42b2eb63e/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||
knative.dev/hack/schema v0.0.0-20210622141627-e28525d8d260/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
|
||||
knative.dev/hack/schema v0.0.0-20211203062838-e11ac125e707/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
|
||||
knative.dev/hack/schema v0.0.0-20220118141833-9b2ed8471e30/go.mod h1:ffjwmdcrH5vN3mPhO8RrF2KfNnbHeCE2C60A+2cv3U0=
|
||||
knative.dev/networking v0.0.0-20210803181815-acdfd41c575c/go.mod h1:UA9m1M3rGssy63gVwjSh7CYoWTKZNO8cnY9QsIu7tyo=
|
||||
knative.dev/networking v0.0.0-20211209101835-8ef631418fc0/go.mod h1:+ozCw7PVf//G9+HOW04hfWnU8UJE5fmWAQkb+ieMaXY=
|
||||
knative.dev/networking v0.0.0-20220120043934-ec785540a732/go.mod h1:6cKBV/h/vIQWCPOkds/RvzUmMR8Vz6Dks2NWb0+3xks=
|
||||
knative.dev/networking v0.0.0-20220120045035-ec849677a316 h1:fHgHP3nnJSfq115RgTMYVHPQBsBKQYtjUVGhMT/VLaA=
|
||||
knative.dev/networking v0.0.0-20220120045035-ec849677a316/go.mod h1:+ozCw7PVf//G9+HOW04hfWnU8UJE5fmWAQkb+ieMaXY=
|
||||
knative.dev/pkg v0.0.0-20210803160015-21eb4c167cc5/go.mod h1:RPk5txNA3apR9X40D4MpUOP9/VqOG8CrtABWfOwGVS4=
|
||||
knative.dev/pkg v0.0.0-20211206113427-18589ac7627e/go.mod h1:E6B4RTjZyxe55a0kxOlnEHEl71zuG7gghnqYvNBKwBw=
|
||||
knative.dev/pkg v0.0.0-20211215065729-552319d4f55b/go.mod h1:hrD91/shO1o4KMZa4oWhnbRPmVJhvq86TLy/STF/qf8=
|
||||
knative.dev/pkg v0.0.0-20220104185830-52e42b760b54/go.mod h1:189cvGP0mwpqwZGFrLk5WuERIsNI/J6HuQ1CIX7SXxY=
|
||||
knative.dev/pkg v0.0.0-20220118160532-77555ea48cd4/go.mod h1:etVT7Tm8pSDf4RKhGk4r7j/hj3dNBpvT7bO6a6wpahs=
|
||||
knative.dev/pkg v0.0.0-20220131144930-f4b57aef0006/go.mod h1:bZMFTPDPHV3wXuiQ09UJuEGYYQnfpe81MCxNvsMAiJk=
|
||||
knative.dev/pkg v0.0.0-20220222214539-0b8a9403de7e h1:+5xPVmp1aajA1z1BxGmUrPLj8y0GEDdHh0y+YTi8XHk=
|
||||
knative.dev/pkg v0.0.0-20220222214539-0b8a9403de7e/go.mod h1:E6B4RTjZyxe55a0kxOlnEHEl71zuG7gghnqYvNBKwBw=
|
||||
knative.dev/pkg v0.0.0-20220222214439-083dd97300e1 h1:p6MI/Rs9AZC5+qRvqX48njRjmFBYi4Y80q23efgJ+38=
|
||||
knative.dev/pkg v0.0.0-20220222214439-083dd97300e1/go.mod h1:etVT7Tm8pSDf4RKhGk4r7j/hj3dNBpvT7bO6a6wpahs=
|
||||
knative.dev/reconciler-test v0.0.0-20210803183715-b61cc77c06f6/go.mod h1:+Kovy+G5zXZNcuO/uB+zfo37vFKZzsLIlWezt/nKMz0=
|
||||
knative.dev/reconciler-test v0.0.0-20211207070557-0d138a88867b/go.mod h1:dCq1Fuu+eUISdnxABMvoDhefF91DYwE6O3rTYTraXbw=
|
||||
knative.dev/reconciler-test v0.0.0-20220118183433-c8bfbe66bada/go.mod h1:XV4cghzCtdASkfUsfMYSnGfGRyd/naDjy9h7Tnae22g=
|
||||
knative.dev/serving v0.25.0/go.mod h1:24E4fVyViFnz8aAaafzdrYKB7CAsQr4FMU7QXoIE6CI=
|
||||
knative.dev/serving v0.28.0/go.mod h1:1d8YYUu0hY19KlIRs2SgAn/o64Hr265+3fhOtV3FFVA=
|
||||
knative.dev/serving v0.28.4 h1:745+sWSEaSxDVpKXqmPVaKb4nzo1n8W6cw++TCvHD3U=
|
||||
knative.dev/serving v0.28.4/go.mod h1:jTq5OY/B4PazjfQI5MjTMEDdZgxlWRXA7qIU8FrDwSU=
|
||||
knative.dev/serving v0.29.0/go.mod h1:8Ay9QjyTcqoJE+2PietSmT5/VMdSQHe5aIBhsAFOCjM=
|
||||
knative.dev/serving v0.29.5 h1:+NUjm2Npo43hWlQTkGsG89johEzIf9aiMKUsKfidzjA=
|
||||
knative.dev/serving v0.29.5/go.mod h1:00SLmEVPRwqtDPu4dXn2L8BVyvILurecO1z/v6oDAg0=
|
||||
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
|
||||
modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
|
||||
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
|
||||
|
@ -3831,10 +3904,12 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyz
|
|||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
|
||||
sigs.k8s.io/kustomize/api v0.8.8 h1:G2z6JPSSjtWWgMeWSoHdXqyftJNmMmyxXpwENGoOtGE=
|
||||
sigs.k8s.io/kustomize/api v0.8.8/go.mod h1:He1zoK0nk43Pc6NlV085xDXDXTNprtcyKZVm3swsdNY=
|
||||
sigs.k8s.io/kustomize/kyaml v0.10.17 h1:4zrV0ym5AYa0e512q7K3Wp1u7mzoWW0xR3UHJcGWGIg=
|
||||
sigs.k8s.io/kustomize/api v0.8.11 h1:LzQzlq6Z023b+mBtc6v72N2mSHYmN8x7ssgbf/hv0H8=
|
||||
sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g=
|
||||
sigs.k8s.io/kustomize/kyaml v0.10.17/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg=
|
||||
sigs.k8s.io/kustomize/kyaml v0.11.0 h1:9KhiCPKaVyuPcgOLJXkvytOvjMJLoxpjodiycb4gHsA=
|
||||
sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM=
|
||||
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
|
||||
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=
|
||||
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18=
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
Copyright 2021 The ANTLR Project
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,52 +0,0 @@
|
|||
[The "BSD 3-clause license"]
|
||||
Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
=====
|
||||
|
||||
MIT License for codepointat.js from https://git.io/codepointat
|
||||
MIT License for fromcodepoint.js from https://git.io/vDW1m
|
||||
|
||||
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
|
@ -200,3 +200,34 @@
|
|||
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.
|
||||
|
||||
===========================================================================
|
||||
The common/types/pb/equal.go modification of proto.Equal logic
|
||||
===========================================================================
|
||||
Copyright (c) 2018 The Go Authors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
|
@ -1,191 +0,0 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the copyright
|
||||
owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other entities
|
||||
that control, are controlled by, or are under common control with that entity.
|
||||
For the purposes of this definition, "control" means (i) the power, direct or
|
||||
indirect, to cause the direction or management of such entity, whether by
|
||||
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications, including
|
||||
but not limited to software source code, documentation source, and configuration
|
||||
files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation or
|
||||
translation of a Source form, including but not limited to compiled object code,
|
||||
generated documentation, and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form, made
|
||||
available under the License, as indicated by a copyright notice that is included
|
||||
in or attached to the work (an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form, that
|
||||
is based on (or derived from) the Work and for which the editorial revisions,
|
||||
annotations, elaborations, or other modifications represent, as a whole, an
|
||||
original work of authorship. For the purposes of this License, Derivative Works
|
||||
shall not include works that remain separable from, or merely link (or bind by
|
||||
name) to the interfaces of, the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original version
|
||||
of the Work and any modifications or additions to that Work or Derivative Works
|
||||
thereof, that is intentionally submitted to Licensor for inclusion in the Work
|
||||
by the copyright owner or by an individual or Legal Entity authorized to submit
|
||||
on behalf of the copyright owner. For the purposes of this definition,
|
||||
"submitted" means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems, and
|
||||
issue tracking systems that are managed by, or on behalf of, the Licensor for
|
||||
the purpose of discussing and improving the Work, but excluding communication
|
||||
that is conspicuously marked or otherwise designated in writing by the copyright
|
||||
owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
|
||||
of whom a Contribution has been received by Licensor and subsequently
|
||||
incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License.
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby
|
||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||
irrevocable copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the Work and such
|
||||
Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License.
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby
|
||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||
irrevocable (except as stated in this section) patent license to make, have
|
||||
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
|
||||
such license applies only to those patent claims licensable by such Contributor
|
||||
that are necessarily infringed by their Contribution(s) alone or by combination
|
||||
of their Contribution(s) with the Work to which such Contribution(s) was
|
||||
submitted. If You institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
|
||||
Contribution incorporated within the Work constitutes direct or contributory
|
||||
patent infringement, then any patent licenses granted to You under this License
|
||||
for that Work shall terminate as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution.
|
||||
|
||||
You may reproduce and distribute copies of the Work or Derivative Works thereof
|
||||
in any medium, with or without modifications, and in Source or Object form,
|
||||
provided that You meet the following conditions:
|
||||
|
||||
You must give any other recipients of the Work or Derivative Works a copy of
|
||||
this License; and
|
||||
You must cause any modified files to carry prominent notices stating that You
|
||||
changed the files; and
|
||||
You must retain, in the Source form of any Derivative Works that You distribute,
|
||||
all copyright, patent, trademark, and attribution notices from the Source form
|
||||
of the Work, excluding those notices that do not pertain to any part of the
|
||||
Derivative Works; and
|
||||
If the Work includes a "NOTICE" text file as part of its distribution, then any
|
||||
Derivative Works that You distribute must include a readable copy of the
|
||||
attribution notices contained within such NOTICE file, excluding those notices
|
||||
that do not pertain to any part of the Derivative Works, in at least one of the
|
||||
following places: within a NOTICE text file distributed as part of the
|
||||
Derivative Works; within the Source form or documentation, if provided along
|
||||
with the Derivative Works; or, within a display generated by the Derivative
|
||||
Works, if and wherever such third-party notices normally appear. The contents of
|
||||
the NOTICE file are for informational purposes only and do not modify the
|
||||
License. You may add Your own attribution notices within Derivative Works that
|
||||
You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
||||
provided that such additional attribution notices cannot be construed as
|
||||
modifying the License.
|
||||
You may add Your own copyright statement to Your modifications and may provide
|
||||
additional or different license terms and conditions for use, reproduction, or
|
||||
distribution of Your modifications, or for any such Derivative Works as a whole,
|
||||
provided Your use, reproduction, and distribution of the Work otherwise complies
|
||||
with the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions.
|
||||
|
||||
Unless You explicitly state otherwise, any Contribution intentionally submitted
|
||||
for inclusion in the Work by You to the Licensor shall be under the terms and
|
||||
conditions of this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify the terms of
|
||||
any separate license agreement you may have executed with Licensor regarding
|
||||
such Contributions.
|
||||
|
||||
6. Trademarks.
|
||||
|
||||
This License does not grant permission to use the trade names, trademarks,
|
||||
service marks, or product names of the Licensor, except as required for
|
||||
reasonable and customary use in describing the origin of the Work and
|
||||
reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty.
|
||||
|
||||
Unless required by applicable law or agreed to in writing, Licensor provides the
|
||||
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
||||
including, without limitation, any warranties or conditions of TITLE,
|
||||
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
|
||||
solely responsible for determining the appropriateness of using or
|
||||
redistributing the Work and assume any risks associated with Your exercise of
|
||||
permissions under this License.
|
||||
|
||||
8. Limitation of Liability.
|
||||
|
||||
In no event and under no legal theory, whether in tort (including negligence),
|
||||
contract, or otherwise, unless required by applicable law (such as deliberate
|
||||
and grossly negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special, incidental,
|
||||
or consequential damages of any character arising as a result of this License or
|
||||
out of the use or inability to use the Work (including but not limited to
|
||||
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
||||
any and all other commercial damages or losses), even if such Contributor has
|
||||
been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability.
|
||||
|
||||
While redistributing the Work or Derivative Works thereof, You may choose to
|
||||
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
|
||||
other liability obligations and/or rights consistent with this License. However,
|
||||
in accepting such obligations, You may act only on Your own behalf and on Your
|
||||
sole responsibility, not on behalf of any other Contributor, and only if You
|
||||
agree to indemnify, defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason of your
|
||||
accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work
|
||||
|
||||
To apply the Apache License to your work, attach the following boilerplate
|
||||
notice, with the fields enclosed by brackets "[]" replaced with your own
|
||||
identifying information. (Don't include the brackets!) The text should be
|
||||
enclosed in the appropriate comment syntax for the file format. We also
|
||||
recommend that a file or class name and description of purpose be included on
|
||||
the same "printed page" as the copyright notice for easier identification within
|
||||
third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
|
@ -0,0 +1,50 @@
|
|||
|
||||
This project is covered by two different licenses: MIT and Apache.
|
||||
|
||||
#### MIT License ####
|
||||
|
||||
The following files were ported to Go from C files of libyaml, and thus
|
||||
are still covered by their original MIT license, with the additional
|
||||
copyright staring in 2011 when the project was ported over:
|
||||
|
||||
apic.go emitterc.go parserc.go readerc.go scannerc.go
|
||||
writerc.go yamlh.go yamlprivateh.go
|
||||
|
||||
Copyright (c) 2006-2010 Kirill Simonov
|
||||
Copyright (c) 2006-2011 Kirill Simonov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
### Apache License ###
|
||||
|
||||
All the remaining project files are covered by the Apache license:
|
||||
|
||||
Copyright (c) 2011-2019 Canonical Ltd
|
||||
|
||||
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.
|
|
@ -0,0 +1,13 @@
|
|||
Copyright 2011-2016 Canonical Ltd.
|
||||
|
||||
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.
|
|
@ -1,3 +1,4 @@
|
|||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package winio
|
||||
|
@ -143,6 +144,11 @@ func (f *win32File) Close() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// IsClosed checks if the file has been closed
|
||||
func (f *win32File) IsClosed() bool {
|
||||
return f.closing.isSet()
|
||||
}
|
||||
|
||||
// prepareIo prepares for a new IO operation.
|
||||
// The caller must call f.wg.Done() when the IO is finished, prior to Close() returning.
|
||||
func (f *win32File) prepareIo() (*ioOperation, error) {
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
module github.com/Microsoft/go-winio
|
||||
|
||||
go 1.12
|
||||
go 1.13
|
||||
|
||||
require (
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/sirupsen/logrus v1.7.0
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c
|
||||
)
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
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=
|
||||
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 v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package winio
|
||||
|
@ -252,15 +253,23 @@ func (conn *HvsockConn) Close() error {
|
|||
return conn.sock.Close()
|
||||
}
|
||||
|
||||
func (conn *HvsockConn) IsClosed() bool {
|
||||
return conn.sock.IsClosed()
|
||||
}
|
||||
|
||||
func (conn *HvsockConn) shutdown(how int) error {
|
||||
err := syscall.Shutdown(conn.sock.handle, syscall.SHUT_RD)
|
||||
if conn.IsClosed() {
|
||||
return ErrFileClosed
|
||||
}
|
||||
|
||||
err := syscall.Shutdown(conn.sock.handle, how)
|
||||
if err != nil {
|
||||
return os.NewSyscallError("shutdown", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CloseRead shuts down the read end of the socket.
|
||||
// CloseRead shuts down the read end of the socket, preventing future read operations.
|
||||
func (conn *HvsockConn) CloseRead() error {
|
||||
err := conn.shutdown(syscall.SHUT_RD)
|
||||
if err != nil {
|
||||
|
@ -269,8 +278,8 @@ func (conn *HvsockConn) CloseRead() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// CloseWrite shuts down the write end of the socket, notifying the other endpoint that
|
||||
// no more data will be written.
|
||||
// CloseWrite shuts down the write end of the socket, preventing future write operations and
|
||||
// notifying the other endpoint that no more data will be written.
|
||||
func (conn *HvsockConn) CloseWrite() error {
|
||||
err := conn.shutdown(syscall.SHUT_WR)
|
||||
if err != nil {
|
||||
|
|
|
@ -14,8 +14,6 @@ import (
|
|||
"encoding/binary"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
// Variant specifies which GUID variant (or "type") of the GUID. It determines
|
||||
|
@ -41,13 +39,6 @@ type Version uint8
|
|||
var _ = (encoding.TextMarshaler)(GUID{})
|
||||
var _ = (encoding.TextUnmarshaler)(&GUID{})
|
||||
|
||||
// GUID represents a GUID/UUID. It has the same structure as
|
||||
// golang.org/x/sys/windows.GUID so that it can be used with functions expecting
|
||||
// that type. It is defined as its own type so that stringification and
|
||||
// marshaling can be supported. The representation matches that used by native
|
||||
// Windows code.
|
||||
type GUID windows.GUID
|
||||
|
||||
// NewV4 returns a new version 4 (pseudorandom) GUID, as defined by RFC 4122.
|
||||
func NewV4() (GUID, error) {
|
||||
var b [16]byte
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// +build !windows
|
||||
|
||||
package guid
|
||||
|
||||
// GUID represents a GUID/UUID. It has the same structure as
|
||||
// golang.org/x/sys/windows.GUID so that it can be used with functions expecting
|
||||
// that type. It is defined as its own type as that is only available to builds
|
||||
// targeted at `windows`. The representation matches that used by native Windows
|
||||
// code.
|
||||
type GUID struct {
|
||||
Data1 uint32
|
||||
Data2 uint16
|
||||
Data3 uint16
|
||||
Data4 [8]byte
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package guid
|
||||
|
||||
import "golang.org/x/sys/windows"
|
||||
|
||||
// GUID represents a GUID/UUID. It has the same structure as
|
||||
// golang.org/x/sys/windows.GUID so that it can be used with functions expecting
|
||||
// that type. It is defined as its own type so that stringification and
|
||||
// marshaling can be supported. The representation matches that used by native
|
||||
// Windows code.
|
||||
type GUID windows.GUID
|
|
@ -3,11 +3,10 @@
|
|||
package security
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -72,7 +71,7 @@ func GrantVmGroupAccess(name string) error {
|
|||
// Stat (to determine if `name` is a directory).
|
||||
s, err := os.Stat(name)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "%s os.Stat %s", gvmga, name)
|
||||
return fmt.Errorf("%s os.Stat %s: %w", gvmga, name, err)
|
||||
}
|
||||
|
||||
// Get a handle to the file/directory. Must defer Close on success.
|
||||
|
@ -88,7 +87,7 @@ func GrantVmGroupAccess(name string) error {
|
|||
sd := uintptr(0)
|
||||
origDACL := uintptr(0)
|
||||
if err := getSecurityInfo(fd, uint32(ot), uint32(si), nil, nil, &origDACL, nil, &sd); err != nil {
|
||||
return errors.Wrapf(err, "%s GetSecurityInfo %s", gvmga, name)
|
||||
return fmt.Errorf("%s GetSecurityInfo %s: %w", gvmga, name, err)
|
||||
}
|
||||
defer syscall.LocalFree((syscall.Handle)(unsafe.Pointer(sd)))
|
||||
|
||||
|
@ -102,7 +101,7 @@ func GrantVmGroupAccess(name string) error {
|
|||
|
||||
// And finally use SetSecurityInfo to apply the updated DACL.
|
||||
if err := setSecurityInfo(fd, uint32(ot), uint32(si), uintptr(0), uintptr(0), newDACL, uintptr(0)); err != nil {
|
||||
return errors.Wrapf(err, "%s SetSecurityInfo %s", gvmga, name)
|
||||
return fmt.Errorf("%s SetSecurityInfo %s: %w", gvmga, name, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -120,7 +119,7 @@ func createFile(name string, isDir bool) (syscall.Handle, error) {
|
|||
}
|
||||
fd, err := syscall.CreateFile(&namep[0], da, sm, nil, syscall.OPEN_EXISTING, fa, 0)
|
||||
if err != nil {
|
||||
return 0, errors.Wrapf(err, "%s syscall.CreateFile %s", gvmga, name)
|
||||
return 0, fmt.Errorf("%s syscall.CreateFile %s: %w", gvmga, name, err)
|
||||
}
|
||||
return fd, nil
|
||||
}
|
||||
|
@ -131,7 +130,7 @@ func generateDACLWithAcesAdded(name string, isDir bool, origDACL uintptr) (uintp
|
|||
// Generate pointers to the SIDs based on the string SIDs
|
||||
sid, err := syscall.StringToSid(sidVmGroup)
|
||||
if err != nil {
|
||||
return 0, errors.Wrapf(err, "%s syscall.StringToSid %s %s", gvmga, name, sidVmGroup)
|
||||
return 0, fmt.Errorf("%s syscall.StringToSid %s %s: %w", gvmga, name, sidVmGroup, err)
|
||||
}
|
||||
|
||||
inheritance := inheritModeNoInheritance
|
||||
|
@ -154,7 +153,7 @@ func generateDACLWithAcesAdded(name string, isDir bool, origDACL uintptr) (uintp
|
|||
|
||||
modifiedDACL := uintptr(0)
|
||||
if err := setEntriesInAcl(uintptr(uint32(1)), uintptr(unsafe.Pointer(&eaArray[0])), origDACL, &modifiedDACL); err != nil {
|
||||
return 0, errors.Wrapf(err, "%s SetEntriesInAcl %s", gvmga, name)
|
||||
return 0, fmt.Errorf("%s SetEntriesInAcl %s: %w", gvmga, name, err)
|
||||
}
|
||||
|
||||
return modifiedDACL, nil
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package vhd
|
||||
|
@ -7,14 +8,13 @@ import (
|
|||
"syscall"
|
||||
|
||||
"github.com/Microsoft/go-winio/pkg/guid"
|
||||
"github.com/pkg/errors"
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
//go:generate go run mksyscall_windows.go -output zvhd_windows.go vhd.go
|
||||
|
||||
//sys createVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtualDiskAccessMask uint32, securityDescriptor *uintptr, createVirtualDiskFlags uint32, providerSpecificFlags uint32, parameters *CreateVirtualDiskParameters, overlapped *syscall.Overlapped, handle *syscall.Handle) (win32err error) = virtdisk.CreateVirtualDisk
|
||||
//sys openVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *OpenVirtualDiskParameters, handle *syscall.Handle) (win32err error) = virtdisk.OpenVirtualDisk
|
||||
//sys openVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (win32err error) = virtdisk.OpenVirtualDisk
|
||||
//sys attachVirtualDisk(handle syscall.Handle, securityDescriptor *uintptr, attachVirtualDiskFlag uint32, providerSpecificFlags uint32, parameters *AttachVirtualDiskParameters, overlapped *syscall.Overlapped) (win32err error) = virtdisk.AttachVirtualDisk
|
||||
//sys detachVirtualDisk(handle syscall.Handle, detachVirtualDiskFlags uint32, providerSpecificFlags uint32) (win32err error) = virtdisk.DetachVirtualDisk
|
||||
//sys getVirtualDiskPhysicalPath(handle syscall.Handle, diskPathSizeInBytes *uint32, buffer *uint16) (win32err error) = virtdisk.GetVirtualDiskPhysicalPath
|
||||
|
@ -62,13 +62,27 @@ type OpenVirtualDiskParameters struct {
|
|||
Version2 OpenVersion2
|
||||
}
|
||||
|
||||
// The higher level `OpenVersion2` struct uses bools to refer to `GetInfoOnly` and `ReadOnly` for ease of use. However,
|
||||
// the internal windows structure uses `BOOLS` aka int32s for these types. `openVersion2` is used for translating
|
||||
// `OpenVersion2` fields to the correct windows internal field types on the `Open____` methods.
|
||||
type openVersion2 struct {
|
||||
getInfoOnly int32
|
||||
readOnly int32
|
||||
resiliencyGUID guid.GUID
|
||||
}
|
||||
|
||||
type openVirtualDiskParameters struct {
|
||||
version uint32
|
||||
version2 openVersion2
|
||||
}
|
||||
|
||||
type AttachVersion2 struct {
|
||||
RestrictedOffset uint64
|
||||
RestrictedLength uint64
|
||||
}
|
||||
|
||||
type AttachVirtualDiskParameters struct {
|
||||
Version uint32 // Must always be set to 2
|
||||
Version uint32
|
||||
Version2 AttachVersion2
|
||||
}
|
||||
|
||||
|
@ -146,16 +160,13 @@ func CreateVhdx(path string, maxSizeInGb, blockSizeInMb uint32) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if err := syscall.CloseHandle(handle); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return syscall.CloseHandle(handle)
|
||||
}
|
||||
|
||||
// DetachVirtualDisk detaches a virtual hard disk by handle.
|
||||
func DetachVirtualDisk(handle syscall.Handle) (err error) {
|
||||
if err := detachVirtualDisk(handle, 0, 0); err != nil {
|
||||
return errors.Wrap(err, "failed to detach virtual disk")
|
||||
return fmt.Errorf("failed to detach virtual disk: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -185,7 +196,7 @@ func AttachVirtualDisk(handle syscall.Handle, attachVirtualDiskFlag AttachVirtua
|
|||
parameters,
|
||||
nil,
|
||||
); err != nil {
|
||||
return errors.Wrap(err, "failed to attach virtual disk")
|
||||
return fmt.Errorf("failed to attach virtual disk: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -209,7 +220,7 @@ func AttachVhd(path string) (err error) {
|
|||
AttachVirtualDiskFlagNone,
|
||||
¶ms,
|
||||
); err != nil {
|
||||
return errors.Wrap(err, "failed to attach virtual disk")
|
||||
return fmt.Errorf("failed to attach virtual disk: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -234,19 +245,35 @@ func OpenVirtualDiskWithParameters(vhdPath string, virtualDiskAccessMask Virtual
|
|||
var (
|
||||
handle syscall.Handle
|
||||
defaultType VirtualStorageType
|
||||
getInfoOnly int32
|
||||
readOnly int32
|
||||
)
|
||||
if parameters.Version != 2 {
|
||||
return handle, fmt.Errorf("only version 2 VHDs are supported, found version: %d", parameters.Version)
|
||||
}
|
||||
if parameters.Version2.GetInfoOnly {
|
||||
getInfoOnly = 1
|
||||
}
|
||||
if parameters.Version2.ReadOnly {
|
||||
readOnly = 1
|
||||
}
|
||||
params := &openVirtualDiskParameters{
|
||||
version: parameters.Version,
|
||||
version2: openVersion2{
|
||||
getInfoOnly,
|
||||
readOnly,
|
||||
parameters.Version2.ResiliencyGUID,
|
||||
},
|
||||
}
|
||||
if err := openVirtualDisk(
|
||||
&defaultType,
|
||||
vhdPath,
|
||||
uint32(virtualDiskAccessMask),
|
||||
uint32(openVirtualDiskFlags),
|
||||
parameters,
|
||||
params,
|
||||
&handle,
|
||||
); err != nil {
|
||||
return 0, errors.Wrap(err, "failed to open virtual disk")
|
||||
return 0, fmt.Errorf("failed to open virtual disk: %w", err)
|
||||
}
|
||||
return handle, nil
|
||||
}
|
||||
|
@ -272,7 +299,7 @@ func CreateVirtualDisk(path string, virtualDiskAccessMask VirtualDiskAccessMask,
|
|||
nil,
|
||||
&handle,
|
||||
); err != nil {
|
||||
return handle, errors.Wrap(err, "failed to create virtual disk")
|
||||
return handle, fmt.Errorf("failed to create virtual disk: %w", err)
|
||||
}
|
||||
return handle, nil
|
||||
}
|
||||
|
@ -290,7 +317,7 @@ func GetVirtualDiskPhysicalPath(handle syscall.Handle) (_ string, err error) {
|
|||
&diskPathSizeInBytes,
|
||||
&diskPhysicalPathBuf[0],
|
||||
); err != nil {
|
||||
return "", errors.Wrap(err, "failed to get disk physical path")
|
||||
return "", fmt.Errorf("failed to get disk physical path: %w", err)
|
||||
}
|
||||
return windows.UTF16ToString(diskPhysicalPathBuf[:]), nil
|
||||
}
|
||||
|
@ -314,10 +341,10 @@ func CreateDiffVhd(diffVhdPath, baseVhdPath string, blockSizeInMB uint32) error
|
|||
createParams,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create differencing vhd: %s", err)
|
||||
return fmt.Errorf("failed to create differencing vhd: %w", err)
|
||||
}
|
||||
if err := syscall.CloseHandle(vhdHandle); err != nil {
|
||||
return fmt.Errorf("failed to close differencing vhd handle: %s", err)
|
||||
return fmt.Errorf("failed to close differencing vhd handle: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ func getVirtualDiskPhysicalPath(handle syscall.Handle, diskPathSizeInBytes *uint
|
|||
return
|
||||
}
|
||||
|
||||
func openVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *OpenVirtualDiskParameters, handle *syscall.Handle) (win32err error) {
|
||||
func openVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (win32err error) {
|
||||
var _p0 *uint16
|
||||
_p0, win32err = syscall.UTF16PtrFromString(path)
|
||||
if win32err != nil {
|
||||
|
@ -97,7 +97,7 @@ func openVirtualDisk(virtualStorageType *VirtualStorageType, path string, virtua
|
|||
return _openVirtualDisk(virtualStorageType, _p0, virtualDiskAccessMask, openVirtualDiskFlags, parameters, handle)
|
||||
}
|
||||
|
||||
func _openVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *OpenVirtualDiskParameters, handle *syscall.Handle) (win32err error) {
|
||||
func _openVirtualDisk(virtualStorageType *VirtualStorageType, path *uint16, virtualDiskAccessMask uint32, openVirtualDiskFlags uint32, parameters *openVirtualDiskParameters, handle *syscall.Handle) (win32err error) {
|
||||
r0, _, _ := syscall.Syscall6(procOpenVirtualDisk.Addr(), 6, uintptr(unsafe.Pointer(virtualStorageType)), uintptr(unsafe.Pointer(path)), uintptr(virtualDiskAccessMask), uintptr(openVirtualDiskFlags), uintptr(unsafe.Pointer(parameters)), uintptr(unsafe.Pointer(handle)))
|
||||
if r0 != 0 {
|
||||
win32err = syscall.Errno(r0)
|
||||
|
|
|
@ -1,52 +0,0 @@
|
|||
[The "BSD 3-clause license"]
|
||||
Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
=====
|
||||
|
||||
MIT License for codepointat.js from https://git.io/codepointat
|
||||
MIT License for fromcodepoint.js from https://git.io/vDW1m
|
||||
|
||||
Copyright Mathias Bynens <https://mathiasbynens.be/>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,26 @@
|
|||
Copyright 2021 The ANTLR Project
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -251,7 +251,7 @@ func (l *LexerATNConfig) hash() int {
|
|||
f = 0
|
||||
}
|
||||
h := murmurInit(7)
|
||||
h = murmurUpdate(h, l.state.hash())
|
||||
h = murmurUpdate(h, l.state.GetStateNumber())
|
||||
h = murmurUpdate(h, l.alt)
|
||||
h = murmurUpdate(h, l.context.hash())
|
||||
h = murmurUpdate(h, l.semanticContext.hash())
|
||||
|
|
|
@ -11,7 +11,7 @@ type ATNConfigSet interface {
|
|||
Add(ATNConfig, *DoubleDict) bool
|
||||
AddAll([]ATNConfig) bool
|
||||
|
||||
GetStates() *Set
|
||||
GetStates() Set
|
||||
GetPredicates() []SemanticContext
|
||||
GetItems() []ATNConfig
|
||||
|
||||
|
@ -35,6 +35,8 @@ type ATNConfigSet interface {
|
|||
GetConflictingAlts() *BitSet
|
||||
SetConflictingAlts(*BitSet)
|
||||
|
||||
Alts() *BitSet
|
||||
|
||||
FullContext() bool
|
||||
|
||||
GetUniqueAlt() int
|
||||
|
@ -55,7 +57,7 @@ type BaseATNConfigSet struct {
|
|||
// effectively doubles the number of objects associated with ATNConfigs. All
|
||||
// keys are hashed by (s, i, _, pi), not including the context. Wiped out when
|
||||
// read-only because a set becomes a DFA state.
|
||||
configLookup *Set
|
||||
configLookup Set
|
||||
|
||||
// configs is the added elements.
|
||||
configs []ATNConfig
|
||||
|
@ -91,11 +93,19 @@ type BaseATNConfigSet struct {
|
|||
uniqueAlt int
|
||||
}
|
||||
|
||||
func (b *BaseATNConfigSet) Alts() *BitSet {
|
||||
alts := NewBitSet()
|
||||
for _, it := range b.configs {
|
||||
alts.add(it.GetAlt())
|
||||
}
|
||||
return alts
|
||||
}
|
||||
|
||||
func NewBaseATNConfigSet(fullCtx bool) *BaseATNConfigSet {
|
||||
return &BaseATNConfigSet{
|
||||
cachedHash: -1,
|
||||
configLookup: NewSet(nil, equalATNConfigs),
|
||||
fullCtx: fullCtx,
|
||||
cachedHash: -1,
|
||||
configLookup: NewArray2DHashSetWithCap(hashATNConfig, equalATNConfigs, 16, 2),
|
||||
fullCtx: fullCtx,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,12 +126,11 @@ func (b *BaseATNConfigSet) Add(config ATNConfig, mergeCache *DoubleDict) bool {
|
|||
b.dipsIntoOuterContext = true
|
||||
}
|
||||
|
||||
existing := b.configLookup.add(config).(ATNConfig)
|
||||
existing := b.configLookup.Add(config).(ATNConfig)
|
||||
|
||||
if existing == config {
|
||||
b.cachedHash = -1
|
||||
b.configs = append(b.configs, config) // Track order here
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -145,11 +154,11 @@ func (b *BaseATNConfigSet) Add(config ATNConfig, mergeCache *DoubleDict) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (b *BaseATNConfigSet) GetStates() *Set {
|
||||
states := NewSet(nil, nil)
|
||||
func (b *BaseATNConfigSet) GetStates() Set {
|
||||
states := NewArray2DHashSet(nil, nil)
|
||||
|
||||
for i := 0; i < len(b.configs); i++ {
|
||||
states.add(b.configs[i].GetState())
|
||||
states.Add(b.configs[i].GetState())
|
||||
}
|
||||
|
||||
return states
|
||||
|
@ -186,7 +195,7 @@ func (b *BaseATNConfigSet) OptimizeConfigs(interpreter *BaseATNSimulator) {
|
|||
panic("set is read-only")
|
||||
}
|
||||
|
||||
if b.configLookup.length() == 0 {
|
||||
if b.configLookup.Len() == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -236,13 +245,11 @@ func (b *BaseATNConfigSet) hash() int {
|
|||
}
|
||||
|
||||
func (b *BaseATNConfigSet) hashCodeConfigs() int {
|
||||
h := murmurInit(1)
|
||||
for _, c := range b.configs {
|
||||
if c != nil {
|
||||
h = murmurUpdate(h, c.hash())
|
||||
}
|
||||
h := 1
|
||||
for _, config := range b.configs {
|
||||
h = 31*h + config.hash()
|
||||
}
|
||||
return murmurFinish(h, len(b.configs))
|
||||
return h
|
||||
}
|
||||
|
||||
func (b *BaseATNConfigSet) Length() int {
|
||||
|
@ -258,7 +265,7 @@ func (b *BaseATNConfigSet) Contains(item ATNConfig) bool {
|
|||
panic("not implemented for read-only sets")
|
||||
}
|
||||
|
||||
return b.configLookup.contains(item)
|
||||
return b.configLookup.Contains(item)
|
||||
}
|
||||
|
||||
func (b *BaseATNConfigSet) ContainsFast(item ATNConfig) bool {
|
||||
|
@ -266,7 +273,7 @@ func (b *BaseATNConfigSet) ContainsFast(item ATNConfig) bool {
|
|||
panic("not implemented for read-only sets")
|
||||
}
|
||||
|
||||
return b.configLookup.contains(item) // TODO: containsFast is not implemented for Set
|
||||
return b.configLookup.Contains(item) // TODO: containsFast is not implemented for Set
|
||||
}
|
||||
|
||||
func (b *BaseATNConfigSet) Clear() {
|
||||
|
@ -276,7 +283,7 @@ func (b *BaseATNConfigSet) Clear() {
|
|||
|
||||
b.configs = make([]ATNConfig, 0)
|
||||
b.cachedHash = -1
|
||||
b.configLookup = NewSet(nil, equalATNConfigs)
|
||||
b.configLookup = NewArray2DHashSet(nil, equalATNConfigs)
|
||||
}
|
||||
|
||||
func (b *BaseATNConfigSet) FullContext() bool {
|
||||
|
@ -358,11 +365,20 @@ type OrderedATNConfigSet struct {
|
|||
func NewOrderedATNConfigSet() *OrderedATNConfigSet {
|
||||
b := NewBaseATNConfigSet(false)
|
||||
|
||||
b.configLookup = NewSet(nil, nil)
|
||||
b.configLookup = NewArray2DHashSet(nil, nil)
|
||||
|
||||
return &OrderedATNConfigSet{BaseATNConfigSet: b}
|
||||
}
|
||||
|
||||
func hashATNConfig(i interface{}) int {
|
||||
o := i.(ATNConfig)
|
||||
hash := 7
|
||||
hash = 31*hash + o.GetState().GetStateNumber()
|
||||
hash = 31*hash + o.GetAlt()
|
||||
hash = 31*hash + o.GetSemanticContext().hash()
|
||||
return hash
|
||||
}
|
||||
|
||||
func equalATNConfigs(a, b interface{}) bool {
|
||||
if a == nil || b == nil {
|
||||
return false
|
||||
|
@ -379,9 +395,13 @@ func equalATNConfigs(a, b interface{}) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
nums := ai.GetState().GetStateNumber() == bi.GetState().GetStateNumber()
|
||||
alts := ai.GetAlt() == bi.GetAlt()
|
||||
cons := ai.GetSemanticContext().equals(bi.GetSemanticContext())
|
||||
if ai.GetState().GetStateNumber() != bi.GetState().GetStateNumber() {
|
||||
return false
|
||||
}
|
||||
|
||||
return nums && alts && cons
|
||||
if ai.GetAlt() != bi.GetAlt() {
|
||||
return false
|
||||
}
|
||||
|
||||
return ai.GetSemanticContext().equals(bi.GetSemanticContext())
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ type DFA struct {
|
|||
// precedenceDfa is the backing field for isPrecedenceDfa and setPrecedenceDfa.
|
||||
// True if the DFA is for a precedence decision and false otherwise.
|
||||
precedenceDfa bool
|
||||
precedenceDfaMu sync.RWMutex
|
||||
}
|
||||
|
||||
func NewDFA(atnStartState DecisionState, decision int) *DFA {
|
||||
|
@ -41,25 +42,22 @@ func NewDFA(atnStartState DecisionState, decision int) *DFA {
|
|||
// state exists for the specified precedence and nil otherwise. d must be a
|
||||
// precedence DFA. See also isPrecedenceDfa.
|
||||
func (d *DFA) getPrecedenceStartState(precedence int) *DFAState {
|
||||
if !d.precedenceDfa {
|
||||
if !d.getPrecedenceDfa() {
|
||||
panic("only precedence DFAs may contain a precedence start state")
|
||||
}
|
||||
|
||||
d.s0Mu.RLock()
|
||||
defer d.s0Mu.RUnlock()
|
||||
|
||||
// s0.edges is never nil for a precedence DFA
|
||||
if precedence < 0 || precedence >= len(d.s0.edges) {
|
||||
if precedence < 0 || precedence >= len(d.getS0().getEdges()) {
|
||||
return nil
|
||||
}
|
||||
|
||||
return d.s0.edges[precedence]
|
||||
return d.getS0().getIthEdge(precedence)
|
||||
}
|
||||
|
||||
// setPrecedenceStartState sets the start state for the current precedence. d
|
||||
// must be a precedence DFA. See also isPrecedenceDfa.
|
||||
func (d *DFA) setPrecedenceStartState(precedence int, startState *DFAState) {
|
||||
if !d.precedenceDfa {
|
||||
if !d.getPrecedenceDfa() {
|
||||
panic("only precedence DFAs may contain a precedence start state")
|
||||
}
|
||||
|
||||
|
@ -67,17 +65,23 @@ func (d *DFA) setPrecedenceStartState(precedence int, startState *DFAState) {
|
|||
return
|
||||
}
|
||||
|
||||
d.s0Mu.Lock()
|
||||
defer d.s0Mu.Unlock()
|
||||
|
||||
// Synchronization on s0 here is ok. When the DFA is turned into a
|
||||
// precedence DFA, s0 will be initialized once and not updated again. s0.edges
|
||||
// is never nil for a precedence DFA.
|
||||
if precedence >= len(d.s0.edges) {
|
||||
d.s0.edges = append(d.s0.edges, make([]*DFAState, precedence+1-len(d.s0.edges))...)
|
||||
s0 := d.getS0()
|
||||
if precedence >= s0.numEdges() {
|
||||
edges := append(s0.getEdges(), make([]*DFAState, precedence+1-s0.numEdges())...)
|
||||
s0.setEdges(edges)
|
||||
d.setS0(s0)
|
||||
}
|
||||
|
||||
d.s0.edges[precedence] = startState
|
||||
s0.setIthEdge(precedence, startState)
|
||||
}
|
||||
|
||||
func (d *DFA) getPrecedenceDfa() bool {
|
||||
d.precedenceDfaMu.RLock()
|
||||
defer d.precedenceDfaMu.RUnlock()
|
||||
return d.precedenceDfa
|
||||
}
|
||||
|
||||
// setPrecedenceDfa sets whether d is a precedence DFA. If precedenceDfa differs
|
||||
|
@ -86,20 +90,22 @@ func (d *DFA) setPrecedenceStartState(precedence int, startState *DFAState) {
|
|||
// store the start states for individual precedence values if precedenceDfa is
|
||||
// true or nil otherwise, and d.precedenceDfa is updated.
|
||||
func (d *DFA) setPrecedenceDfa(precedenceDfa bool) {
|
||||
if d.precedenceDfa != precedenceDfa {
|
||||
d.states = make(map[int]*DFAState)
|
||||
if d.getPrecedenceDfa() != precedenceDfa {
|
||||
d.setStates(make(map[int]*DFAState))
|
||||
|
||||
if precedenceDfa {
|
||||
precedenceState := NewDFAState(-1, NewBaseATNConfigSet(false))
|
||||
|
||||
precedenceState.edges = make([]*DFAState, 0)
|
||||
precedenceState.setEdges(make([]*DFAState, 0))
|
||||
precedenceState.isAcceptState = false
|
||||
precedenceState.requiresFullContext = false
|
||||
d.s0 = precedenceState
|
||||
d.setS0(precedenceState)
|
||||
} else {
|
||||
d.s0 = nil
|
||||
d.setS0(nil)
|
||||
}
|
||||
|
||||
d.precedenceDfaMu.Lock()
|
||||
defer d.precedenceDfaMu.Unlock()
|
||||
d.precedenceDfa = precedenceDfa
|
||||
}
|
||||
}
|
||||
|
@ -123,6 +129,12 @@ func (d *DFA) getState(hash int) (*DFAState, bool) {
|
|||
return s, ok
|
||||
}
|
||||
|
||||
func (d *DFA) setStates(states map[int]*DFAState) {
|
||||
d.statesMu.Lock()
|
||||
defer d.statesMu.Unlock()
|
||||
d.states = states
|
||||
}
|
||||
|
||||
func (d *DFA) setState(hash int, state *DFAState) {
|
||||
d.statesMu.Lock()
|
||||
defer d.statesMu.Unlock()
|
||||
|
@ -155,7 +167,7 @@ func (d *DFA) sortedStates() []*DFAState {
|
|||
}
|
||||
|
||||
func (d *DFA) String(literalNames []string, symbolicNames []string) string {
|
||||
if d.s0 == nil {
|
||||
if d.getS0() == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
|
@ -163,7 +175,7 @@ func (d *DFA) String(literalNames []string, symbolicNames []string) string {
|
|||
}
|
||||
|
||||
func (d *DFA) ToLexerString() string {
|
||||
if d.s0 == nil {
|
||||
if d.getS0() == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ package antlr
|
|||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// DFASerializer is a DFA walker that knows how to dump them to serialized
|
||||
|
@ -34,7 +35,7 @@ func NewDFASerializer(dfa *DFA, literalNames, symbolicNames []string) *DFASerial
|
|||
}
|
||||
|
||||
func (d *DFASerializer) String() string {
|
||||
if d.dfa.s0 == nil {
|
||||
if d.dfa.getS0() == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
|
@ -112,11 +113,16 @@ func NewLexerDFASerializer(dfa *DFA) *LexerDFASerializer {
|
|||
}
|
||||
|
||||
func (l *LexerDFASerializer) getEdgeLabel(i int) string {
|
||||
return "'" + string(i) + "'"
|
||||
var sb strings.Builder
|
||||
sb.Grow(6)
|
||||
sb.WriteByte('\'')
|
||||
sb.WriteRune(rune(i))
|
||||
sb.WriteByte('\'')
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func (l *LexerDFASerializer) String() string {
|
||||
if l.dfa.s0 == nil {
|
||||
if l.dfa.getS0() == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ package antlr
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// PredPrediction maps a predicate to a predicted alternative.
|
||||
|
@ -49,7 +50,8 @@ type DFAState struct {
|
|||
|
||||
// edges elements point to the target of the symbol. Shift up by 1 so (-1)
|
||||
// Token.EOF maps to the first element.
|
||||
edges []*DFAState
|
||||
edges []*DFAState
|
||||
edgesMu sync.RWMutex
|
||||
|
||||
isAcceptState bool
|
||||
|
||||
|
@ -90,22 +92,52 @@ func NewDFAState(stateNumber int, configs ATNConfigSet) *DFAState {
|
|||
}
|
||||
|
||||
// GetAltSet gets the set of all alts mentioned by all ATN configurations in d.
|
||||
func (d *DFAState) GetAltSet() *Set {
|
||||
alts := NewSet(nil, nil)
|
||||
func (d *DFAState) GetAltSet() Set {
|
||||
alts := NewArray2DHashSet(nil, nil)
|
||||
|
||||
if d.configs != nil {
|
||||
for _, c := range d.configs.GetItems() {
|
||||
alts.add(c.GetAlt())
|
||||
alts.Add(c.GetAlt())
|
||||
}
|
||||
}
|
||||
|
||||
if alts.length() == 0 {
|
||||
if alts.Len() == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return alts
|
||||
}
|
||||
|
||||
func (d *DFAState) getEdges() []*DFAState {
|
||||
d.edgesMu.RLock()
|
||||
defer d.edgesMu.RUnlock()
|
||||
return d.edges
|
||||
}
|
||||
|
||||
func (d *DFAState) numEdges() int {
|
||||
d.edgesMu.RLock()
|
||||
defer d.edgesMu.RUnlock()
|
||||
return len(d.edges)
|
||||
}
|
||||
|
||||
func (d *DFAState) getIthEdge(i int) *DFAState {
|
||||
d.edgesMu.RLock()
|
||||
defer d.edgesMu.RUnlock()
|
||||
return d.edges[i]
|
||||
}
|
||||
|
||||
func (d *DFAState) setEdges(newEdges []*DFAState) {
|
||||
d.edgesMu.Lock()
|
||||
defer d.edgesMu.Unlock()
|
||||
d.edges = newEdges
|
||||
}
|
||||
|
||||
func (d *DFAState) setIthEdge(i int, edge *DFAState) {
|
||||
d.edgesMu.Lock()
|
||||
defer d.edgesMu.Unlock()
|
||||
d.edges[i] = edge
|
||||
}
|
||||
|
||||
func (d *DFAState) setPrediction(v int) {
|
||||
d.prediction = v
|
||||
}
|
||||
|
@ -141,26 +173,11 @@ func (d *DFAState) String() string {
|
|||
}
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%d:%s%s", fmt.Sprint(d.configs), s)
|
||||
return fmt.Sprintf("%d:%s%s", d.stateNumber, fmt.Sprint(d.configs), s)
|
||||
}
|
||||
|
||||
func (d *DFAState) hash() int {
|
||||
h := murmurInit(11)
|
||||
|
||||
c := 1
|
||||
if d.isAcceptState {
|
||||
if d.predicates != nil {
|
||||
for _, p := range d.predicates {
|
||||
h = murmurUpdate(h, p.alt)
|
||||
h = murmurUpdate(h, p.pred.hash())
|
||||
c += 2
|
||||
}
|
||||
} else {
|
||||
h = murmurUpdate(h, d.prediction)
|
||||
c += 1
|
||||
}
|
||||
}
|
||||
|
||||
h := murmurInit(7)
|
||||
h = murmurUpdate(h, d.configs.hash())
|
||||
return murmurFinish(h, c)
|
||||
}
|
||||
return murmurFinish(h, 1)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
module github.com/antlr/antlr4/runtime/Go/antlr
|
||||
|
||||
go 1.16
|
|
@ -226,16 +226,28 @@ func (i *IntervalSet) StringVerbose(literalNames []string, symbolicNames []strin
|
|||
func (i *IntervalSet) toCharString() string {
|
||||
names := make([]string, len(i.intervals))
|
||||
|
||||
var sb strings.Builder
|
||||
|
||||
for j := 0; j < len(i.intervals); j++ {
|
||||
v := i.intervals[j]
|
||||
if v.Stop == v.Start+1 {
|
||||
if v.Start == TokenEOF {
|
||||
names = append(names, "<EOF>")
|
||||
} else {
|
||||
names = append(names, ("'" + string(v.Start) + "'"))
|
||||
sb.WriteByte('\'')
|
||||
sb.WriteRune(rune(v.Start))
|
||||
sb.WriteByte('\'')
|
||||
names = append(names, sb.String())
|
||||
sb.Reset()
|
||||
}
|
||||
} else {
|
||||
names = append(names, "'"+string(v.Start)+"'..'"+string(v.Stop-1)+"'")
|
||||
sb.WriteByte('\'')
|
||||
sb.WriteRune(rune(v.Start))
|
||||
sb.WriteString("'..'")
|
||||
sb.WriteRune(rune(v.Stop - 1))
|
||||
sb.WriteByte('\'')
|
||||
names = append(names, sb.String())
|
||||
sb.Reset()
|
||||
}
|
||||
}
|
||||
if len(names) > 1 {
|
||||
|
|
|
@ -414,10 +414,9 @@ func (l *LexerIndexedCustomAction) execute(lexer Lexer) {
|
|||
|
||||
func (l *LexerIndexedCustomAction) hash() int {
|
||||
h := murmurInit(0)
|
||||
h = murmurUpdate(h, l.actionType)
|
||||
h = murmurUpdate(h, l.offset)
|
||||
h = murmurUpdate(h, l.lexerAction.hash())
|
||||
return murmurFinish(h, 3)
|
||||
return murmurFinish(h, 2)
|
||||
}
|
||||
|
||||
func (l *LexerIndexedCustomAction) equals(other LexerAction) bool {
|
||||
|
|
|
@ -161,10 +161,13 @@ func (l *LexerActionExecutor) hash() int {
|
|||
func (l *LexerActionExecutor) equals(other interface{}) bool {
|
||||
if l == other {
|
||||
return true
|
||||
} else if _, ok := other.(*LexerActionExecutor); !ok {
|
||||
return false
|
||||
} else {
|
||||
return l.cachedHash == other.(*LexerActionExecutor).cachedHash &&
|
||||
&l.lexerActions == &other.(*LexerActionExecutor).lexerActions
|
||||
}
|
||||
othert, ok := other.(*LexerActionExecutor)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
if othert == nil {
|
||||
return false
|
||||
}
|
||||
return l.cachedHash == othert.cachedHash && &l.lexerActions == &othert.lexerActions
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ package antlr
|
|||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -90,11 +91,11 @@ func (l *LexerATNSimulator) Match(input CharStream, mode int) int {
|
|||
|
||||
dfa := l.decisionToDFA[mode]
|
||||
|
||||
if dfa.s0 == nil {
|
||||
if dfa.getS0() == nil {
|
||||
return l.MatchATN(input)
|
||||
}
|
||||
|
||||
return l.execATN(input, dfa.s0)
|
||||
return l.execATN(input, dfa.getS0())
|
||||
}
|
||||
|
||||
func (l *LexerATNSimulator) reset() {
|
||||
|
@ -202,11 +203,11 @@ func (l *LexerATNSimulator) execATN(input CharStream, ds0 *DFAState) int {
|
|||
// {@code t}, or {@code nil} if the target state for l edge is not
|
||||
// already cached
|
||||
func (l *LexerATNSimulator) getExistingTargetState(s *DFAState, t int) *DFAState {
|
||||
if s.edges == nil || t < LexerATNSimulatorMinDFAEdge || t > LexerATNSimulatorMaxDFAEdge {
|
||||
if s.getEdges() == nil || t < LexerATNSimulatorMinDFAEdge || t > LexerATNSimulatorMaxDFAEdge {
|
||||
return nil
|
||||
}
|
||||
|
||||
target := s.edges[t-LexerATNSimulatorMinDFAEdge]
|
||||
target := s.getIthEdge(t - LexerATNSimulatorMinDFAEdge)
|
||||
if LexerATNSimulatorDebug && target != nil {
|
||||
fmt.Println("reuse state " + strconv.Itoa(s.stateNumber) + " edge to " + strconv.Itoa(target.stateNumber))
|
||||
}
|
||||
|
@ -299,7 +300,7 @@ func (l *LexerATNSimulator) getReachableConfigSet(input CharStream, closure ATNC
|
|||
|
||||
func (l *LexerATNSimulator) accept(input CharStream, lexerActionExecutor *LexerActionExecutor, startIndex, index, line, charPos int) {
|
||||
if LexerATNSimulatorDebug {
|
||||
fmt.Printf("ACTION %s\n", lexerActionExecutor)
|
||||
fmt.Printf("ACTION %v\n", lexerActionExecutor)
|
||||
}
|
||||
// seek to after last char in token
|
||||
input.Seek(index)
|
||||
|
@ -550,11 +551,11 @@ func (l *LexerATNSimulator) addDFAEdge(from *DFAState, tk int, to *DFAState, cfg
|
|||
if LexerATNSimulatorDebug {
|
||||
fmt.Println("EDGE " + from.String() + " -> " + to.String() + " upon " + strconv.Itoa(tk))
|
||||
}
|
||||
if from.edges == nil {
|
||||
if from.getEdges() == nil {
|
||||
// make room for tokens 1..n and -1 masquerading as index 0
|
||||
from.edges = make([]*DFAState, LexerATNSimulatorMaxDFAEdge-LexerATNSimulatorMinDFAEdge+1)
|
||||
from.setEdges(make([]*DFAState, LexerATNSimulatorMaxDFAEdge-LexerATNSimulatorMinDFAEdge+1))
|
||||
}
|
||||
from.edges[tk-LexerATNSimulatorMinDFAEdge] = to // connect
|
||||
from.setIthEdge(tk-LexerATNSimulatorMinDFAEdge, to) // connect
|
||||
|
||||
return to
|
||||
}
|
||||
|
@ -630,7 +631,13 @@ func (l *LexerATNSimulator) GetTokenName(tt int) string {
|
|||
return "EOF"
|
||||
}
|
||||
|
||||
return "'" + string(tt) + "'"
|
||||
var sb strings.Builder
|
||||
sb.Grow(6)
|
||||
sb.WriteByte('\'')
|
||||
sb.WriteRune(rune(tt))
|
||||
sb.WriteByte('\'')
|
||||
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func resetSimState(sim *SimState) {
|
||||
|
|
|
@ -38,7 +38,7 @@ func (la *LL1Analyzer) getDecisionLookahead(s ATNState) []*IntervalSet {
|
|||
look := make([]*IntervalSet, count)
|
||||
for alt := 0; alt < count; alt++ {
|
||||
look[alt] = NewIntervalSet()
|
||||
lookBusy := NewSet(nil, nil)
|
||||
lookBusy := NewArray2DHashSet(nil, nil)
|
||||
seeThruPreds := false // fail to get lookahead upon pred
|
||||
la.look1(s.GetTransitions()[alt].getTarget(), nil, BasePredictionContextEMPTY, look[alt], lookBusy, NewBitSet(), seeThruPreds, false)
|
||||
// Wipe out lookahead for la alternative if we found nothing
|
||||
|
@ -75,7 +75,7 @@ func (la *LL1Analyzer) Look(s, stopState ATNState, ctx RuleContext) *IntervalSet
|
|||
if ctx != nil {
|
||||
lookContext = predictionContextFromRuleContext(s.GetATN(), ctx)
|
||||
}
|
||||
la.look1(s, stopState, lookContext, r, NewSet(nil, nil), NewBitSet(), seeThruPreds, true)
|
||||
la.look1(s, stopState, lookContext, r, NewArray2DHashSet(nil, nil), NewBitSet(), seeThruPreds, true)
|
||||
return r
|
||||
}
|
||||
|
||||
|
@ -109,32 +109,22 @@ func (la *LL1Analyzer) Look(s, stopState ATNState, ctx RuleContext) *IntervalSet
|
|||
// outermost context is reached. This parameter has no effect if {@code ctx}
|
||||
// is {@code nil}.
|
||||
|
||||
func (la *LL1Analyzer) look2(s, stopState ATNState, ctx PredictionContext, look *IntervalSet, lookBusy *Set, calledRuleStack *BitSet, seeThruPreds, addEOF bool, i int) {
|
||||
func (la *LL1Analyzer) look2(s, stopState ATNState, ctx PredictionContext, look *IntervalSet, lookBusy Set, calledRuleStack *BitSet, seeThruPreds, addEOF bool, i int) {
|
||||
|
||||
returnState := la.atn.states[ctx.getReturnState(i)]
|
||||
|
||||
removed := calledRuleStack.contains(returnState.GetRuleIndex())
|
||||
|
||||
defer func() {
|
||||
if removed {
|
||||
calledRuleStack.add(returnState.GetRuleIndex())
|
||||
}
|
||||
}()
|
||||
|
||||
calledRuleStack.remove(returnState.GetRuleIndex())
|
||||
la.look1(returnState, stopState, ctx.GetParent(i), look, lookBusy, calledRuleStack, seeThruPreds, addEOF)
|
||||
|
||||
}
|
||||
|
||||
func (la *LL1Analyzer) look1(s, stopState ATNState, ctx PredictionContext, look *IntervalSet, lookBusy *Set, calledRuleStack *BitSet, seeThruPreds, addEOF bool) {
|
||||
func (la *LL1Analyzer) look1(s, stopState ATNState, ctx PredictionContext, look *IntervalSet, lookBusy Set, calledRuleStack *BitSet, seeThruPreds, addEOF bool) {
|
||||
|
||||
c := NewBaseATNConfig6(s, 0, ctx)
|
||||
|
||||
if lookBusy.contains(c) {
|
||||
if lookBusy.Contains(c) {
|
||||
return
|
||||
}
|
||||
|
||||
lookBusy.add(c)
|
||||
lookBusy.Add(c)
|
||||
|
||||
if s == stopState {
|
||||
if ctx == nil {
|
||||
|
@ -158,6 +148,13 @@ func (la *LL1Analyzer) look1(s, stopState ATNState, ctx PredictionContext, look
|
|||
}
|
||||
|
||||
if ctx != BasePredictionContextEMPTY {
|
||||
removed := calledRuleStack.contains(s.GetRuleIndex())
|
||||
defer func() {
|
||||
if removed {
|
||||
calledRuleStack.add(s.GetRuleIndex())
|
||||
}
|
||||
}()
|
||||
calledRuleStack.remove(s.GetRuleIndex())
|
||||
// run thru all possible stack tops in ctx
|
||||
for i := 0; i < ctx.length(); i++ {
|
||||
returnState := la.atn.states[ctx.getReturnState(i)]
|
||||
|
@ -201,7 +198,7 @@ func (la *LL1Analyzer) look1(s, stopState ATNState, ctx PredictionContext, look
|
|||
}
|
||||
}
|
||||
|
||||
func (la *LL1Analyzer) look3(stopState ATNState, ctx PredictionContext, look *IntervalSet, lookBusy *Set, calledRuleStack *BitSet, seeThruPreds, addEOF bool, t1 *RuleTransition) {
|
||||
func (la *LL1Analyzer) look3(stopState ATNState, ctx PredictionContext, look *IntervalSet, lookBusy Set, calledRuleStack *BitSet, seeThruPreds, addEOF bool, t1 *RuleTransition) {
|
||||
|
||||
newContext := SingletonBasePredictionContextCreate(ctx, t1.followState.GetStateNumber())
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ var (
|
|||
ParserATNSimulatorListATNDecisions = false
|
||||
ParserATNSimulatorDFADebug = false
|
||||
ParserATNSimulatorRetryDebug = false
|
||||
TurnOffLRLoopEntryBranchOpt = false
|
||||
)
|
||||
|
||||
type ParserATNSimulator struct {
|
||||
|
@ -95,13 +96,13 @@ func (p *ParserATNSimulator) AdaptivePredict(input TokenStream, decision int, ou
|
|||
// Now we are certain to have a specific decision's DFA
|
||||
// But, do we still need an initial state?
|
||||
var s0 *DFAState
|
||||
if dfa.precedenceDfa {
|
||||
if dfa.getPrecedenceDfa() {
|
||||
// the start state for a precedence DFA depends on the current
|
||||
// parser precedence, and is provided by a DFA method.
|
||||
s0 = dfa.getPrecedenceStartState(p.parser.GetPrecedence())
|
||||
} else {
|
||||
// the start state for a "regular" DFA is just s0
|
||||
s0 = dfa.s0
|
||||
s0 = dfa.getS0()
|
||||
}
|
||||
|
||||
if s0 == nil {
|
||||
|
@ -120,7 +121,7 @@ func (p *ParserATNSimulator) AdaptivePredict(input TokenStream, decision int, ou
|
|||
|
||||
t2 := dfa.atnStartState
|
||||
t, ok := t2.(*StarLoopEntryState)
|
||||
if !dfa.precedenceDfa && ok {
|
||||
if !dfa.getPrecedenceDfa() && ok {
|
||||
if t.precedenceRuleDecision {
|
||||
dfa.setPrecedenceDfa(true)
|
||||
}
|
||||
|
@ -128,19 +129,20 @@ func (p *ParserATNSimulator) AdaptivePredict(input TokenStream, decision int, ou
|
|||
fullCtx := false
|
||||
s0Closure := p.computeStartState(dfa.atnStartState, RuleContextEmpty, fullCtx)
|
||||
|
||||
if dfa.precedenceDfa {
|
||||
if dfa.getPrecedenceDfa() {
|
||||
// If p is a precedence DFA, we use applyPrecedenceFilter
|
||||
// to convert the computed start state to a precedence start
|
||||
// state. We then use DFA.setPrecedenceStartState to set the
|
||||
// appropriate start state for the precedence level rather
|
||||
// than simply setting DFA.s0.
|
||||
//
|
||||
dfa.s0.configs = s0Closure
|
||||
s0Closure = p.applyPrecedenceFilter(s0Closure)
|
||||
s0 = p.addDFAState(dfa, NewDFAState(-1, s0Closure))
|
||||
dfa.setPrecedenceStartState(p.parser.GetPrecedence(), s0)
|
||||
} else {
|
||||
s0 = p.addDFAState(dfa, NewDFAState(-1, s0Closure))
|
||||
dfa.s0 = s0
|
||||
dfa.setS0(s0)
|
||||
}
|
||||
}
|
||||
alt := p.execATN(dfa, s0, input, index, outerContext)
|
||||
|
@ -259,11 +261,13 @@ func (p *ParserATNSimulator) execATN(dfa *DFA, s0 *DFAState, input TokenStream,
|
|||
stopIndex := input.Index()
|
||||
input.Seek(startIndex)
|
||||
alts := p.evalSemanticContext(D.predicates, outerContext, true)
|
||||
if alts.length() == 0 {
|
||||
|
||||
switch alts.length() {
|
||||
case 0:
|
||||
panic(p.noViableAlt(input, outerContext, D.configs, startIndex))
|
||||
} else if alts.length() == 1 {
|
||||
case 1:
|
||||
return alts.minValue()
|
||||
} else {
|
||||
default:
|
||||
// Report ambiguity after predicate evaluation to make sure the correct set of ambig alts is Reported.
|
||||
p.ReportAmbiguity(dfa, D, startIndex, stopIndex, false, alts, D.configs)
|
||||
return alts.minValue()
|
||||
|
@ -291,12 +295,12 @@ func (p *ParserATNSimulator) execATN(dfa *DFA, s0 *DFAState, input TokenStream,
|
|||
// already cached
|
||||
|
||||
func (p *ParserATNSimulator) getExistingTargetState(previousD *DFAState, t int) *DFAState {
|
||||
edges := previousD.edges
|
||||
if edges == nil {
|
||||
edges := previousD.getEdges()
|
||||
if edges == nil || t+1 < 0 || t+1 >= len(edges) {
|
||||
return nil
|
||||
}
|
||||
|
||||
return edges[t+1]
|
||||
return previousD.getIthEdge(t + 1)
|
||||
}
|
||||
|
||||
// Compute a target state for an edge in the DFA, and attempt to add the
|
||||
|
@ -422,7 +426,8 @@ func (p *ParserATNSimulator) execATNWithFullContext(dfa *DFA, D *DFAState, s0 AT
|
|||
if reach.GetUniqueAlt() != ATNInvalidAltNumber {
|
||||
predictedAlt = reach.GetUniqueAlt()
|
||||
break
|
||||
} else if p.predictionMode != PredictionModeLLExactAmbigDetection {
|
||||
}
|
||||
if p.predictionMode != PredictionModeLLExactAmbigDetection {
|
||||
predictedAlt = PredictionModeresolvesToJustOneViableAlt(altSubSets)
|
||||
if predictedAlt != ATNInvalidAltNumber {
|
||||
break
|
||||
|
@ -479,7 +484,7 @@ func (p *ParserATNSimulator) execATNWithFullContext(dfa *DFA, D *DFAState, s0 AT
|
|||
// the fact that we should predict alternative 1. We just can't say for
|
||||
// sure that there is an ambiguity without looking further.
|
||||
|
||||
p.ReportAmbiguity(dfa, D, startIndex, input.Index(), foundExactAmbig, nil, reach)
|
||||
p.ReportAmbiguity(dfa, D, startIndex, input.Index(), foundExactAmbig, reach.Alts(), reach)
|
||||
|
||||
return predictedAlt
|
||||
}
|
||||
|
@ -503,7 +508,7 @@ func (p *ParserATNSimulator) computeReachSet(closure ATNConfigSet, t int, fullCt
|
|||
// ensure that the alternative Matching the longest overall sequence is
|
||||
// chosen when multiple such configurations can Match the input.
|
||||
|
||||
var SkippedStopStates []*BaseATNConfig
|
||||
var skippedStopStates []*BaseATNConfig
|
||||
|
||||
// First figure out where we can reach on input t
|
||||
for _, c := range closure.GetItems() {
|
||||
|
@ -511,14 +516,9 @@ func (p *ParserATNSimulator) computeReachSet(closure ATNConfigSet, t int, fullCt
|
|||
fmt.Println("testing " + p.GetTokenName(t) + " at " + c.String())
|
||||
}
|
||||
|
||||
_, ok := c.GetState().(*RuleStopState)
|
||||
|
||||
if ok {
|
||||
if _, ok := c.GetState().(*RuleStopState); ok {
|
||||
if fullCtx || t == TokenEOF {
|
||||
if SkippedStopStates == nil {
|
||||
SkippedStopStates = make([]*BaseATNConfig, 0)
|
||||
}
|
||||
SkippedStopStates = append(SkippedStopStates, c.(*BaseATNConfig))
|
||||
skippedStopStates = append(skippedStopStates, c.(*BaseATNConfig))
|
||||
if ParserATNSimulatorDebug {
|
||||
fmt.Println("added " + c.String() + " to SkippedStopStates")
|
||||
}
|
||||
|
@ -526,8 +526,7 @@ func (p *ParserATNSimulator) computeReachSet(closure ATNConfigSet, t int, fullCt
|
|||
continue
|
||||
}
|
||||
|
||||
for j := 0; j < len(c.GetState().GetTransitions()); j++ {
|
||||
trans := c.GetState().GetTransitions()[j]
|
||||
for _, trans := range c.GetState().GetTransitions() {
|
||||
target := p.getReachableTarget(trans, t)
|
||||
if target != nil {
|
||||
cfg := NewBaseATNConfig4(c, target)
|
||||
|
@ -538,6 +537,7 @@ func (p *ParserATNSimulator) computeReachSet(closure ATNConfigSet, t int, fullCt
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now figure out where the reach operation can take us...
|
||||
var reach ATNConfigSet
|
||||
|
||||
|
@ -550,7 +550,7 @@ func (p *ParserATNSimulator) computeReachSet(closure ATNConfigSet, t int, fullCt
|
|||
// condition is not true when one or more configurations have been
|
||||
// withheld in SkippedStopStates, or when the current symbol is EOF.
|
||||
//
|
||||
if SkippedStopStates == nil && t != TokenEOF {
|
||||
if skippedStopStates == nil && t != TokenEOF {
|
||||
if len(intermediate.configs) == 1 {
|
||||
// Don't pursue the closure if there is just one state.
|
||||
// It can only have one alternative just add to result
|
||||
|
@ -568,9 +568,10 @@ func (p *ParserATNSimulator) computeReachSet(closure ATNConfigSet, t int, fullCt
|
|||
//
|
||||
if reach == nil {
|
||||
reach = NewBaseATNConfigSet(fullCtx)
|
||||
closureBusy := NewSet(nil, nil)
|
||||
closureBusy := NewArray2DHashSet(nil, nil)
|
||||
treatEOFAsEpsilon := t == TokenEOF
|
||||
for k := 0; k < len(intermediate.configs); k++ {
|
||||
amount := len(intermediate.configs)
|
||||
for k := 0; k < amount; k++ {
|
||||
p.closure(intermediate.configs[k], reach, closureBusy, false, fullCtx, treatEOFAsEpsilon)
|
||||
}
|
||||
}
|
||||
|
@ -602,9 +603,9 @@ func (p *ParserATNSimulator) computeReachSet(closure ATNConfigSet, t int, fullCt
|
|||
// chooses an alternative Matching the longest overall sequence when
|
||||
// multiple alternatives are viable.
|
||||
//
|
||||
if SkippedStopStates != nil && ((!fullCtx) || (!PredictionModehasConfigInRuleStopState(reach))) {
|
||||
for l := 0; l < len(SkippedStopStates); l++ {
|
||||
reach.Add(SkippedStopStates[l], p.mergeCache)
|
||||
if skippedStopStates != nil && ((!fullCtx) || (!PredictionModehasConfigInRuleStopState(reach))) {
|
||||
for l := 0; l < len(skippedStopStates); l++ {
|
||||
reach.Add(skippedStopStates[l], p.mergeCache)
|
||||
}
|
||||
}
|
||||
if len(reach.GetItems()) == 0 {
|
||||
|
@ -640,10 +641,7 @@ func (p *ParserATNSimulator) removeAllConfigsNotInRuleStopState(configs ATNConfi
|
|||
}
|
||||
result := NewBaseATNConfigSet(configs.FullContext())
|
||||
for _, config := range configs.GetItems() {
|
||||
|
||||
_, ok := config.GetState().(*RuleStopState)
|
||||
|
||||
if ok {
|
||||
if _, ok := config.GetState().(*RuleStopState); ok {
|
||||
result.Add(config, p.mergeCache)
|
||||
continue
|
||||
}
|
||||
|
@ -665,7 +663,7 @@ func (p *ParserATNSimulator) computeStartState(a ATNState, ctx RuleContext, full
|
|||
for i := 0; i < len(a.GetTransitions()); i++ {
|
||||
target := a.GetTransitions()[i].getTarget()
|
||||
c := NewBaseATNConfig6(target, i+1, initialContext)
|
||||
closureBusy := NewSet(nil, nil)
|
||||
closureBusy := NewArray2DHashSet(nil, nil)
|
||||
p.closure(c, configs, closureBusy, true, fullCtx, false)
|
||||
}
|
||||
return configs
|
||||
|
@ -787,7 +785,7 @@ func (p *ParserATNSimulator) getPredsForAmbigAlts(ambigAlts *BitSet, configs ATN
|
|||
}
|
||||
}
|
||||
nPredAlts := 0
|
||||
for i := 1; i < nalts+1; i++ {
|
||||
for i := 1; i <= nalts; i++ {
|
||||
pred := altToPred[i]
|
||||
if pred == nil {
|
||||
altToPred[i] = SemanticContextNone
|
||||
|
@ -972,14 +970,13 @@ func (p *ParserATNSimulator) evalSemanticContext(predPredictions []*PredPredicti
|
|||
return predictions
|
||||
}
|
||||
|
||||
func (p *ParserATNSimulator) closure(config ATNConfig, configs ATNConfigSet, closureBusy *Set, collectPredicates, fullCtx, treatEOFAsEpsilon bool) {
|
||||
func (p *ParserATNSimulator) closure(config ATNConfig, configs ATNConfigSet, closureBusy Set, collectPredicates, fullCtx, treatEOFAsEpsilon bool) {
|
||||
initialDepth := 0
|
||||
p.closureCheckingStopState(config, configs, closureBusy, collectPredicates,
|
||||
fullCtx, initialDepth, treatEOFAsEpsilon)
|
||||
}
|
||||
|
||||
func (p *ParserATNSimulator) closureCheckingStopState(config ATNConfig, configs ATNConfigSet, closureBusy *Set, collectPredicates, fullCtx bool, depth int, treatEOFAsEpsilon bool) {
|
||||
|
||||
func (p *ParserATNSimulator) closureCheckingStopState(config ATNConfig, configs ATNConfigSet, closureBusy Set, collectPredicates, fullCtx bool, depth int, treatEOFAsEpsilon bool) {
|
||||
if ParserATNSimulatorDebug {
|
||||
fmt.Println("closure(" + config.String() + ")")
|
||||
fmt.Println("configs(" + configs.String() + ")")
|
||||
|
@ -988,8 +985,7 @@ func (p *ParserATNSimulator) closureCheckingStopState(config ATNConfig, configs
|
|||
}
|
||||
}
|
||||
|
||||
_, ok := config.GetState().(*RuleStopState)
|
||||
if ok {
|
||||
if _, ok := config.GetState().(*RuleStopState); ok {
|
||||
// We hit rule end. If we have context info, use it
|
||||
// run thru all possible stack tops in ctx
|
||||
if !config.GetContext().isEmpty() {
|
||||
|
@ -1033,7 +1029,7 @@ func (p *ParserATNSimulator) closureCheckingStopState(config ATNConfig, configs
|
|||
}
|
||||
|
||||
// Do the actual work of walking epsilon edges//
|
||||
func (p *ParserATNSimulator) closureWork(config ATNConfig, configs ATNConfigSet, closureBusy *Set, collectPredicates, fullCtx bool, depth int, treatEOFAsEpsilon bool) {
|
||||
func (p *ParserATNSimulator) closureWork(config ATNConfig, configs ATNConfigSet, closureBusy Set, collectPredicates, fullCtx bool, depth int, treatEOFAsEpsilon bool) {
|
||||
state := config.GetState()
|
||||
// optimization
|
||||
if !state.GetEpsilonOnlyTransitions() {
|
||||
|
@ -1042,46 +1038,52 @@ func (p *ParserATNSimulator) closureWork(config ATNConfig, configs ATNConfigSet,
|
|||
// both epsilon transitions and non-epsilon transitions.
|
||||
}
|
||||
for i := 0; i < len(state.GetTransitions()); i++ {
|
||||
if i == 0 && p.canDropLoopEntryEdgeInLeftRecursiveRule(config) {
|
||||
continue
|
||||
}
|
||||
|
||||
t := state.GetTransitions()[i]
|
||||
_, ok := t.(*ActionTransition)
|
||||
continueCollecting := collectPredicates && !ok
|
||||
c := p.getEpsilonTarget(config, t, continueCollecting, depth == 0, fullCtx, treatEOFAsEpsilon)
|
||||
if ci, ok := c.(*BaseATNConfig); ok && ci != nil {
|
||||
if !t.getIsEpsilon() && closureBusy.add(c) != c {
|
||||
// avoid infinite recursion for EOF* and EOF+
|
||||
continue
|
||||
}
|
||||
newDepth := depth
|
||||
|
||||
if _, ok := config.GetState().(*RuleStopState); ok {
|
||||
|
||||
// target fell off end of rule mark resulting c as having dipped into outer context
|
||||
// We can't get here if incoming config was rule stop and we had context
|
||||
// track how far we dip into outer context. Might
|
||||
// come in handy and we avoid evaluating context dependent
|
||||
// preds if p is > 0.
|
||||
|
||||
if closureBusy.add(c) != c {
|
||||
// avoid infinite recursion for right-recursive rules
|
||||
continue
|
||||
}
|
||||
|
||||
if p.dfa != nil && p.dfa.precedenceDfa {
|
||||
if p.dfa != nil && p.dfa.getPrecedenceDfa() {
|
||||
if t.(*EpsilonTransition).outermostPrecedenceReturn == p.dfa.atnStartState.GetRuleIndex() {
|
||||
c.setPrecedenceFilterSuppressed(true)
|
||||
}
|
||||
}
|
||||
|
||||
c.SetReachesIntoOuterContext(c.GetReachesIntoOuterContext() + 1)
|
||||
|
||||
if closureBusy.Add(c) != c {
|
||||
// avoid infinite recursion for right-recursive rules
|
||||
continue
|
||||
}
|
||||
|
||||
configs.SetDipsIntoOuterContext(true) // TODO: can remove? only care when we add to set per middle of p method
|
||||
newDepth--
|
||||
if ParserATNSimulatorDebug {
|
||||
fmt.Println("dips into outer ctx: " + c.String())
|
||||
}
|
||||
} else if _, ok := t.(*RuleTransition); ok {
|
||||
// latch when newDepth goes negative - once we step out of the entry context we can't return
|
||||
if newDepth >= 0 {
|
||||
newDepth++
|
||||
} else {
|
||||
if !t.getIsEpsilon() && closureBusy.Add(c) != c {
|
||||
// avoid infinite recursion for EOF* and EOF+
|
||||
continue
|
||||
}
|
||||
if _, ok := t.(*RuleTransition); ok {
|
||||
// latch when newDepth goes negative - once we step out of the entry context we can't return
|
||||
if newDepth >= 0 {
|
||||
newDepth++
|
||||
}
|
||||
}
|
||||
}
|
||||
p.closureCheckingStopState(c, configs, closureBusy, continueCollecting, fullCtx, newDepth, treatEOFAsEpsilon)
|
||||
|
@ -1089,12 +1091,93 @@ func (p *ParserATNSimulator) closureWork(config ATNConfig, configs ATNConfigSet,
|
|||
}
|
||||
}
|
||||
|
||||
func (p *ParserATNSimulator) canDropLoopEntryEdgeInLeftRecursiveRule(config ATNConfig) bool {
|
||||
if TurnOffLRLoopEntryBranchOpt {
|
||||
return false
|
||||
}
|
||||
|
||||
_p := config.GetState()
|
||||
|
||||
// First check to see if we are in StarLoopEntryState generated during
|
||||
// left-recursion elimination. For efficiency, also check if
|
||||
// the context has an empty stack case. If so, it would mean
|
||||
// global FOLLOW so we can't perform optimization
|
||||
if startLoop, ok := _p.(StarLoopEntryState); !ok || !startLoop.precedenceRuleDecision || config.GetContext().isEmpty() || config.GetContext().hasEmptyPath() {
|
||||
return false
|
||||
}
|
||||
|
||||
// Require all return states to return back to the same rule
|
||||
// that p is in.
|
||||
numCtxs := config.GetContext().length()
|
||||
for i := 0; i < numCtxs; i++ {
|
||||
returnState := p.atn.states[config.GetContext().getReturnState(i)]
|
||||
if returnState.GetRuleIndex() != _p.GetRuleIndex() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
decisionStartState := _p.(BlockStartState).GetTransitions()[0].getTarget().(BlockStartState)
|
||||
blockEndStateNum := decisionStartState.getEndState().stateNumber
|
||||
blockEndState := p.atn.states[blockEndStateNum].(*BlockEndState)
|
||||
|
||||
// Verify that the top of each stack context leads to loop entry/exit
|
||||
// state through epsilon edges and w/o leaving rule.
|
||||
|
||||
for i := 0; i < numCtxs; i++ { // for each stack context
|
||||
returnStateNumber := config.GetContext().getReturnState(i)
|
||||
returnState := p.atn.states[returnStateNumber]
|
||||
|
||||
// all states must have single outgoing epsilon edge
|
||||
if len(returnState.GetTransitions()) != 1 || !returnState.GetTransitions()[0].getIsEpsilon() {
|
||||
return false
|
||||
}
|
||||
|
||||
// Look for prefix op case like 'not expr', (' type ')' expr
|
||||
returnStateTarget := returnState.GetTransitions()[0].getTarget()
|
||||
if returnState.GetStateType() == ATNStateBlockEnd && returnStateTarget == _p {
|
||||
continue
|
||||
}
|
||||
|
||||
// Look for 'expr op expr' or case where expr's return state is block end
|
||||
// of (...)* internal block; the block end points to loop back
|
||||
// which points to p but we don't need to check that
|
||||
if returnState == blockEndState {
|
||||
continue
|
||||
}
|
||||
|
||||
// Look for ternary expr ? expr : expr. The return state points at block end,
|
||||
// which points at loop entry state
|
||||
if returnStateTarget == blockEndState {
|
||||
continue
|
||||
}
|
||||
|
||||
// Look for complex prefix 'between expr and expr' case where 2nd expr's
|
||||
// return state points at block end state of (...)* internal block
|
||||
if returnStateTarget.GetStateType() == ATNStateBlockEnd &&
|
||||
len(returnStateTarget.GetTransitions()) == 1 &&
|
||||
returnStateTarget.GetTransitions()[0].getIsEpsilon() &&
|
||||
returnStateTarget.GetTransitions()[0].getTarget() == _p {
|
||||
continue
|
||||
}
|
||||
|
||||
// anything else ain't conforming
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *ParserATNSimulator) getRuleName(index int) string {
|
||||
if p.parser != nil && index >= 0 {
|
||||
return p.parser.GetRuleNames()[index]
|
||||
}
|
||||
var sb strings.Builder
|
||||
sb.Grow(32)
|
||||
|
||||
return "<rule " + fmt.Sprint(index) + ">"
|
||||
sb.WriteString("<rule ")
|
||||
sb.WriteString(strconv.FormatInt(int64(index), 10))
|
||||
sb.WriteByte('>')
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func (p *ParserATNSimulator) getEpsilonTarget(config ATNConfig, t Transition, collectPredicates, inContext, fullCtx, treatEOFAsEpsilon bool) ATNConfig {
|
||||
|
@ -1110,25 +1193,7 @@ func (p *ParserATNSimulator) getEpsilonTarget(config ATNConfig, t Transition, co
|
|||
return p.actionTransition(config, t.(*ActionTransition))
|
||||
case TransitionEPSILON:
|
||||
return NewBaseATNConfig4(config, t.getTarget())
|
||||
case TransitionATOM:
|
||||
// EOF transitions act like epsilon transitions after the first EOF
|
||||
// transition is traversed
|
||||
if treatEOFAsEpsilon {
|
||||
if t.Matches(TokenEOF, 0, 1) {
|
||||
return NewBaseATNConfig4(config, t.getTarget())
|
||||
}
|
||||
}
|
||||
return nil
|
||||
case TransitionRANGE:
|
||||
// EOF transitions act like epsilon transitions after the first EOF
|
||||
// transition is traversed
|
||||
if treatEOFAsEpsilon {
|
||||
if t.Matches(TokenEOF, 0, 1) {
|
||||
return NewBaseATNConfig4(config, t.getTarget())
|
||||
}
|
||||
}
|
||||
return nil
|
||||
case TransitionSET:
|
||||
case TransitionATOM, TransitionRANGE, TransitionSET:
|
||||
// EOF transitions act like epsilon transitions after the first EOF
|
||||
// transition is traversed
|
||||
if treatEOFAsEpsilon {
|
||||
|
@ -1196,7 +1261,7 @@ func (p *ParserATNSimulator) predTransition(config ATNConfig, pt *PredicateTrans
|
|||
}
|
||||
}
|
||||
var c *BaseATNConfig
|
||||
if collectPredicates && ((pt.isCtxDependent && inContext) || !pt.isCtxDependent) {
|
||||
if collectPredicates && (!pt.isCtxDependent || inContext) {
|
||||
if fullCtx {
|
||||
// In full context mode, we can evaluate predicates on-the-fly
|
||||
// during closure, which dramatically reduces the size of
|
||||
|
@ -1385,10 +1450,10 @@ func (p *ParserATNSimulator) addDFAEdge(dfa *DFA, from *DFAState, t int, to *DFA
|
|||
if from == nil || t < -1 || t > p.atn.maxTokenType {
|
||||
return to
|
||||
}
|
||||
if from.edges == nil {
|
||||
from.edges = make([]*DFAState, p.atn.maxTokenType+1+1)
|
||||
if from.getEdges() == nil {
|
||||
from.setEdges(make([]*DFAState, p.atn.maxTokenType+1+1))
|
||||
}
|
||||
from.edges[t+1] = to // connect
|
||||
from.setIthEdge(t+1, to) // connect
|
||||
|
||||
if ParserATNSimulatorDebug {
|
||||
var names []string
|
||||
|
|
|
@ -58,9 +58,15 @@ func calculateHash(parent PredictionContext, returnState int) int {
|
|||
return murmurFinish(h, 2)
|
||||
}
|
||||
|
||||
var _emptyPredictionContextHash int
|
||||
|
||||
func init() {
|
||||
_emptyPredictionContextHash = murmurInit(1)
|
||||
_emptyPredictionContextHash = murmurFinish(_emptyPredictionContextHash, 0)
|
||||
}
|
||||
|
||||
func calculateEmptyHash() int {
|
||||
h := murmurInit(1)
|
||||
return murmurFinish(h, 0)
|
||||
return _emptyPredictionContextHash
|
||||
}
|
||||
|
||||
// Used to cache {@link BasePredictionContext} objects. Its used for the shared
|
||||
|
@ -113,15 +119,15 @@ type BaseSingletonPredictionContext struct {
|
|||
}
|
||||
|
||||
func NewBaseSingletonPredictionContext(parent PredictionContext, returnState int) *BaseSingletonPredictionContext {
|
||||
var cachedHash int
|
||||
if parent != nil {
|
||||
cachedHash = calculateHash(parent, returnState)
|
||||
} else {
|
||||
cachedHash = calculateEmptyHash()
|
||||
}
|
||||
|
||||
s := new(BaseSingletonPredictionContext)
|
||||
s.BasePredictionContext = NewBasePredictionContext(37)
|
||||
|
||||
if parent != nil {
|
||||
s.cachedHash = calculateHash(parent, returnState)
|
||||
} else {
|
||||
s.cachedHash = calculateEmptyHash()
|
||||
}
|
||||
s.BasePredictionContext = NewBasePredictionContext(cachedHash)
|
||||
|
||||
s.parentCtx = parent
|
||||
s.returnState = returnState
|
||||
|
@ -175,15 +181,7 @@ func (b *BaseSingletonPredictionContext) equals(other PredictionContext) bool {
|
|||
}
|
||||
|
||||
func (b *BaseSingletonPredictionContext) hash() int {
|
||||
h := murmurInit(1)
|
||||
|
||||
if b.parentCtx == nil {
|
||||
return murmurFinish(h, 0)
|
||||
}
|
||||
|
||||
h = murmurUpdate(h, b.parentCtx.hash())
|
||||
h = murmurUpdate(h, b.returnState)
|
||||
return murmurFinish(h, 2)
|
||||
return b.cachedHash
|
||||
}
|
||||
|
||||
func (b *BaseSingletonPredictionContext) String() string {
|
||||
|
@ -253,13 +251,20 @@ func NewArrayPredictionContext(parents []PredictionContext, returnStates []int)
|
|||
// from {@link //EMPTY} and non-empty. We merge {@link //EMPTY} by using
|
||||
// nil parent and
|
||||
// returnState == {@link //EmptyReturnState}.
|
||||
hash := murmurInit(1)
|
||||
|
||||
for _, parent := range parents {
|
||||
hash = murmurUpdate(hash, parent.hash())
|
||||
}
|
||||
|
||||
for _, returnState := range returnStates {
|
||||
hash = murmurUpdate(hash, returnState)
|
||||
}
|
||||
|
||||
hash = murmurFinish(hash, len(parents)<<1)
|
||||
|
||||
c := new(ArrayPredictionContext)
|
||||
c.BasePredictionContext = NewBasePredictionContext(37)
|
||||
|
||||
for i := range parents {
|
||||
c.cachedHash += calculateHash(parents[i], returnStates[i])
|
||||
}
|
||||
c.BasePredictionContext = NewBasePredictionContext(hash)
|
||||
|
||||
c.parents = parents
|
||||
c.returnStates = returnStates
|
||||
|
@ -305,17 +310,7 @@ func (a *ArrayPredictionContext) equals(other PredictionContext) bool {
|
|||
}
|
||||
|
||||
func (a *ArrayPredictionContext) hash() int {
|
||||
h := murmurInit(1)
|
||||
|
||||
for _, p := range a.parents {
|
||||
h = murmurUpdate(h, p.hash())
|
||||
}
|
||||
|
||||
for _, r := range a.returnStates {
|
||||
h = murmurUpdate(h, r)
|
||||
}
|
||||
|
||||
return murmurFinish(h, 2 * len(a.parents))
|
||||
return a.BasePredictionContext.cachedHash
|
||||
}
|
||||
|
||||
func (a *ArrayPredictionContext) String() string {
|
||||
|
|
|
@ -49,7 +49,7 @@ var tokenTypeMapCache = make(map[string]int)
|
|||
var ruleIndexMapCache = make(map[string]int)
|
||||
|
||||
func (b *BaseRecognizer) checkVersion(toolVersion string) {
|
||||
runtimeVersion := "4.8"
|
||||
runtimeVersion := "4.9.3"
|
||||
if runtimeVersion != toolVersion {
|
||||
fmt.Println("ANTLR runtime and generated code versions disagree: " + runtimeVersion + "!=" + toolVersion)
|
||||
}
|
||||
|
|
|
@ -108,7 +108,15 @@ func (p *Predicate) equals(other interface{}) bool {
|
|||
}
|
||||
|
||||
func (p *Predicate) hash() int {
|
||||
return p.ruleIndex*43 + p.predIndex*47
|
||||
h := murmurInit(0)
|
||||
h = murmurUpdate(h, p.ruleIndex)
|
||||
h = murmurUpdate(h, p.predIndex)
|
||||
if p.isCtxDependent {
|
||||
h = murmurUpdate(h, 1)
|
||||
} else {
|
||||
h = murmurUpdate(h, 0)
|
||||
}
|
||||
return murmurFinish(h, 3)
|
||||
}
|
||||
|
||||
func (p *Predicate) String() string {
|
||||
|
@ -154,21 +162,24 @@ func (p *PrecedencePredicate) equals(other interface{}) bool {
|
|||
}
|
||||
|
||||
func (p *PrecedencePredicate) hash() int {
|
||||
return p.precedence * 51
|
||||
h := uint32(1)
|
||||
h = 31*h + uint32(p.precedence)
|
||||
return int(h)
|
||||
}
|
||||
|
||||
func (p *PrecedencePredicate) String() string {
|
||||
return "{" + strconv.Itoa(p.precedence) + ">=prec}?"
|
||||
}
|
||||
|
||||
func PrecedencePredicatefilterPrecedencePredicates(set *Set) []*PrecedencePredicate {
|
||||
func PrecedencePredicatefilterPrecedencePredicates(set Set) []*PrecedencePredicate {
|
||||
result := make([]*PrecedencePredicate, 0)
|
||||
|
||||
for _, v := range set.values() {
|
||||
set.Each(func(v interface{}) bool {
|
||||
if c2, ok := v.(*PrecedencePredicate); ok {
|
||||
result = append(result, c2)
|
||||
}
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
return result
|
||||
}
|
||||
|
@ -182,21 +193,21 @@ type AND struct {
|
|||
|
||||
func NewAND(a, b SemanticContext) *AND {
|
||||
|
||||
operands := NewSet(nil, nil)
|
||||
operands := NewArray2DHashSet(nil, nil)
|
||||
if aa, ok := a.(*AND); ok {
|
||||
for _, o := range aa.opnds {
|
||||
operands.add(o)
|
||||
operands.Add(o)
|
||||
}
|
||||
} else {
|
||||
operands.add(a)
|
||||
operands.Add(a)
|
||||
}
|
||||
|
||||
if ba, ok := b.(*AND); ok {
|
||||
for _, o := range ba.opnds {
|
||||
operands.add(o)
|
||||
operands.Add(o)
|
||||
}
|
||||
} else {
|
||||
operands.add(b)
|
||||
operands.Add(b)
|
||||
}
|
||||
precedencePredicates := PrecedencePredicatefilterPrecedencePredicates(operands)
|
||||
if len(precedencePredicates) > 0 {
|
||||
|
@ -209,10 +220,10 @@ func NewAND(a, b SemanticContext) *AND {
|
|||
}
|
||||
}
|
||||
|
||||
operands.add(reduced)
|
||||
operands.Add(reduced)
|
||||
}
|
||||
|
||||
vs := operands.values()
|
||||
vs := operands.Values()
|
||||
opnds := make([]SemanticContext, len(vs))
|
||||
for i, v := range vs {
|
||||
opnds[i] = v.(SemanticContext)
|
||||
|
@ -334,21 +345,21 @@ type OR struct {
|
|||
|
||||
func NewOR(a, b SemanticContext) *OR {
|
||||
|
||||
operands := NewSet(nil, nil)
|
||||
operands := NewArray2DHashSet(nil, nil)
|
||||
if aa, ok := a.(*OR); ok {
|
||||
for _, o := range aa.opnds {
|
||||
operands.add(o)
|
||||
operands.Add(o)
|
||||
}
|
||||
} else {
|
||||
operands.add(a)
|
||||
operands.Add(a)
|
||||
}
|
||||
|
||||
if ba, ok := b.(*OR); ok {
|
||||
for _, o := range ba.opnds {
|
||||
operands.add(o)
|
||||
operands.Add(o)
|
||||
}
|
||||
} else {
|
||||
operands.add(b)
|
||||
operands.Add(b)
|
||||
}
|
||||
precedencePredicates := PrecedencePredicatefilterPrecedencePredicates(operands)
|
||||
if len(precedencePredicates) > 0 {
|
||||
|
@ -361,10 +372,10 @@ func NewOR(a, b SemanticContext) *OR {
|
|||
}
|
||||
}
|
||||
|
||||
operands.add(reduced)
|
||||
operands.Add(reduced)
|
||||
}
|
||||
|
||||
vs := operands.values()
|
||||
vs := operands.Values()
|
||||
|
||||
opnds := make([]SemanticContext, len(vs))
|
||||
for i, v := range vs {
|
||||
|
|
|
@ -7,6 +7,7 @@ package antlr
|
|||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// atom, set, epsilon, action, predicate, rule transitions.
|
||||
|
@ -236,7 +237,13 @@ func (t *RangeTransition) Matches(symbol, minVocabSymbol, maxVocabSymbol int) bo
|
|||
}
|
||||
|
||||
func (t *RangeTransition) String() string {
|
||||
return "'" + string(t.start) + "'..'" + string(t.stop) + "'"
|
||||
var sb strings.Builder
|
||||
sb.WriteByte('\'')
|
||||
sb.WriteRune(rune(t.start))
|
||||
sb.WriteString("'..'")
|
||||
sb.WriteRune(rune(t.stop))
|
||||
sb.WriteByte('\'')
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
type AbstractPredicateTransition interface {
|
||||
|
|
|
@ -47,35 +47,6 @@ func (s *IntStack) Push(e int) {
|
|||
*s = append(*s, e)
|
||||
}
|
||||
|
||||
type Set struct {
|
||||
data map[int][]interface{}
|
||||
hashcodeFunction func(interface{}) int
|
||||
equalsFunction func(interface{}, interface{}) bool
|
||||
}
|
||||
|
||||
func NewSet(
|
||||
hashcodeFunction func(interface{}) int,
|
||||
equalsFunction func(interface{}, interface{}) bool) *Set {
|
||||
|
||||
s := new(Set)
|
||||
|
||||
s.data = make(map[int][]interface{})
|
||||
|
||||
if hashcodeFunction != nil {
|
||||
s.hashcodeFunction = hashcodeFunction
|
||||
} else {
|
||||
s.hashcodeFunction = standardHashFunction
|
||||
}
|
||||
|
||||
if equalsFunction == nil {
|
||||
s.equalsFunction = standardEqualsFunction
|
||||
} else {
|
||||
s.equalsFunction = equalsFunction
|
||||
}
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func standardEqualsFunction(a interface{}, b interface{}) bool {
|
||||
|
||||
ac, oka := a.(comparable)
|
||||
|
@ -100,72 +71,6 @@ type hasher interface {
|
|||
hash() int
|
||||
}
|
||||
|
||||
func (s *Set) length() int {
|
||||
return len(s.data)
|
||||
}
|
||||
|
||||
func (s *Set) add(value interface{}) interface{} {
|
||||
|
||||
key := s.hashcodeFunction(value)
|
||||
|
||||
values := s.data[key]
|
||||
|
||||
if s.data[key] != nil {
|
||||
for i := 0; i < len(values); i++ {
|
||||
if s.equalsFunction(value, values[i]) {
|
||||
return values[i]
|
||||
}
|
||||
}
|
||||
|
||||
s.data[key] = append(s.data[key], value)
|
||||
return value
|
||||
}
|
||||
|
||||
v := make([]interface{}, 1, 10)
|
||||
v[0] = value
|
||||
s.data[key] = v
|
||||
|
||||
return value
|
||||
}
|
||||
|
||||
func (s *Set) contains(value interface{}) bool {
|
||||
|
||||
key := s.hashcodeFunction(value)
|
||||
|
||||
values := s.data[key]
|
||||
|
||||
if s.data[key] != nil {
|
||||
for i := 0; i < len(values); i++ {
|
||||
if s.equalsFunction(value, values[i]) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (s *Set) values() []interface{} {
|
||||
var l []interface{}
|
||||
|
||||
for _, v := range s.data {
|
||||
l = append(l, v...)
|
||||
}
|
||||
|
||||
return l
|
||||
}
|
||||
|
||||
func (s *Set) String() string {
|
||||
r := ""
|
||||
|
||||
for _, av := range s.data {
|
||||
for _, v := range av {
|
||||
r += fmt.Sprint(v)
|
||||
}
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
type BitSet struct {
|
||||
data map[int]bool
|
||||
}
|
||||
|
@ -353,65 +258,38 @@ func PrintArrayJavaStyle(sa []string) string {
|
|||
return buffer.String()
|
||||
}
|
||||
|
||||
// The following routines were lifted from bits.rotate* available in Go 1.9.
|
||||
|
||||
const uintSize = 32 << (^uint(0) >> 32 & 1) // 32 or 64
|
||||
|
||||
// rotateLeft returns the value of x rotated left by (k mod UintSize) bits.
|
||||
// To rotate x right by k bits, call RotateLeft(x, -k).
|
||||
func rotateLeft(x uint, k int) uint {
|
||||
if uintSize == 32 {
|
||||
return uint(rotateLeft32(uint32(x), k))
|
||||
}
|
||||
return uint(rotateLeft64(uint64(x), k))
|
||||
}
|
||||
|
||||
// rotateLeft32 returns the value of x rotated left by (k mod 32) bits.
|
||||
func rotateLeft32(x uint32, k int) uint32 {
|
||||
const n = 32
|
||||
s := uint(k) & (n - 1)
|
||||
return x<<s | x>>(n-s)
|
||||
}
|
||||
|
||||
// rotateLeft64 returns the value of x rotated left by (k mod 64) bits.
|
||||
func rotateLeft64(x uint64, k int) uint64 {
|
||||
const n = 64
|
||||
s := uint(k) & (n - 1)
|
||||
return x<<s | x>>(n-s)
|
||||
}
|
||||
|
||||
|
||||
// murmur hash
|
||||
const (
|
||||
c1_32 uint = 0xCC9E2D51
|
||||
c2_32 uint = 0x1B873593
|
||||
n1_32 uint = 0xE6546B64
|
||||
)
|
||||
|
||||
func murmurInit(seed int) int {
|
||||
return seed
|
||||
}
|
||||
|
||||
func murmurUpdate(h1 int, k1 int) int {
|
||||
var k1u uint
|
||||
k1u = uint(k1) * c1_32
|
||||
k1u = rotateLeft(k1u, 15)
|
||||
k1u *= c2_32
|
||||
func murmurUpdate(h int, value int) int {
|
||||
const c1 uint32 = 0xCC9E2D51
|
||||
const c2 uint32 = 0x1B873593
|
||||
const r1 uint32 = 15
|
||||
const r2 uint32 = 13
|
||||
const m uint32 = 5
|
||||
const n uint32 = 0xE6546B64
|
||||
|
||||
var h1u = uint(h1) ^ k1u
|
||||
k1u = rotateLeft(k1u, 13)
|
||||
h1u = h1u*5 + 0xe6546b64
|
||||
return int(h1u)
|
||||
k := uint32(value)
|
||||
k *= c1
|
||||
k = (k << r1) | (k >> (32 - r1))
|
||||
k *= c2
|
||||
|
||||
hash := uint32(h) ^ k
|
||||
hash = (hash << r2) | (hash >> (32 - r2))
|
||||
hash = hash*m + n
|
||||
return int(hash)
|
||||
}
|
||||
|
||||
func murmurFinish(h1 int, numberOfWords int) int {
|
||||
var h1u uint = uint(h1)
|
||||
h1u ^= uint(numberOfWords * 4)
|
||||
h1u ^= h1u >> 16
|
||||
h1u *= uint(0x85ebca6b)
|
||||
h1u ^= h1u >> 13
|
||||
h1u *= 0xc2b2ae35
|
||||
h1u ^= h1u >> 16
|
||||
func murmurFinish(h int, numberOfWords int) int {
|
||||
var hash = uint32(h)
|
||||
hash ^= uint32(numberOfWords) << 2
|
||||
hash ^= hash >> 16
|
||||
hash *= 0x85ebca6b
|
||||
hash ^= hash >> 13
|
||||
hash *= 0xc2b2ae35
|
||||
hash ^= hash >> 16
|
||||
|
||||
return int(h1u)
|
||||
return int(hash)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,237 @@
|
|||
package antlr
|
||||
|
||||
import "math"
|
||||
|
||||
const (
|
||||
_initalCapacity = 16
|
||||
_initalBucketCapacity = 8
|
||||
_loadFactor = 0.75
|
||||
)
|
||||
|
||||
var _ Set = (*Array2DHashSet)(nil)
|
||||
|
||||
type Set interface {
|
||||
Add(value interface{}) (added interface{})
|
||||
Len() int
|
||||
Get(value interface{}) (found interface{})
|
||||
Contains(value interface{}) bool
|
||||
Values() []interface{}
|
||||
Each(f func(interface{}) bool)
|
||||
}
|
||||
|
||||
type Array2DHashSet struct {
|
||||
buckets [][]interface{}
|
||||
hashcodeFunction func(interface{}) int
|
||||
equalsFunction func(interface{}, interface{}) bool
|
||||
|
||||
n int // How many elements in set
|
||||
threshold int // when to expand
|
||||
|
||||
currentPrime int // jump by 4 primes each expand or whatever
|
||||
initialBucketCapacity int
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) Each(f func(interface{}) bool) {
|
||||
if as.Len() < 1 {
|
||||
return
|
||||
}
|
||||
|
||||
for _, bucket := range as.buckets {
|
||||
for _, o := range bucket {
|
||||
if o == nil {
|
||||
break
|
||||
}
|
||||
if !f(o) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) Values() []interface{} {
|
||||
if as.Len() < 1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
values := make([]interface{}, 0, as.Len())
|
||||
as.Each(func(i interface{}) bool {
|
||||
values = append(values, i)
|
||||
return true
|
||||
})
|
||||
return values
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) Contains(value interface{}) bool {
|
||||
return as.Get(value) != nil
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) Add(value interface{}) interface{} {
|
||||
if as.n > as.threshold {
|
||||
as.expand()
|
||||
}
|
||||
return as.innerAdd(value)
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) expand() {
|
||||
old := as.buckets
|
||||
|
||||
as.currentPrime += 4
|
||||
|
||||
var (
|
||||
newCapacity = len(as.buckets) << 1
|
||||
newTable = as.createBuckets(newCapacity)
|
||||
newBucketLengths = make([]int, len(newTable))
|
||||
)
|
||||
|
||||
as.buckets = newTable
|
||||
as.threshold = int(float64(newCapacity) * _loadFactor)
|
||||
|
||||
for _, bucket := range old {
|
||||
if bucket == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, o := range bucket {
|
||||
if o == nil {
|
||||
break
|
||||
}
|
||||
|
||||
b := as.getBuckets(o)
|
||||
bucketLength := newBucketLengths[b]
|
||||
var newBucket []interface{}
|
||||
if bucketLength == 0 {
|
||||
// new bucket
|
||||
newBucket = as.createBucket(as.initialBucketCapacity)
|
||||
newTable[b] = newBucket
|
||||
} else {
|
||||
newBucket = newTable[b]
|
||||
if bucketLength == len(newBucket) {
|
||||
// expand
|
||||
newBucketCopy := make([]interface{}, len(newBucket)<<1)
|
||||
copy(newBucketCopy[:bucketLength], newBucket)
|
||||
newBucket = newBucketCopy
|
||||
newTable[b] = newBucket
|
||||
}
|
||||
}
|
||||
|
||||
newBucket[bucketLength] = o
|
||||
newBucketLengths[b]++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) Len() int {
|
||||
return as.n
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) Get(o interface{}) interface{} {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
b := as.getBuckets(o)
|
||||
bucket := as.buckets[b]
|
||||
if bucket == nil { // no bucket
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, e := range bucket {
|
||||
if e == nil {
|
||||
return nil // empty slot; not there
|
||||
}
|
||||
if as.equalsFunction(e, o) {
|
||||
return e
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) innerAdd(o interface{}) interface{} {
|
||||
b := as.getBuckets(o)
|
||||
|
||||
bucket := as.buckets[b]
|
||||
|
||||
// new bucket
|
||||
if bucket == nil {
|
||||
bucket = as.createBucket(as.initialBucketCapacity)
|
||||
bucket[0] = o
|
||||
|
||||
as.buckets[b] = bucket
|
||||
as.n++
|
||||
return o
|
||||
}
|
||||
|
||||
// look for it in bucket
|
||||
for i := 0; i < len(bucket); i++ {
|
||||
existing := bucket[i]
|
||||
if existing == nil { // empty slot; not there, add.
|
||||
bucket[i] = o
|
||||
as.n++
|
||||
return o
|
||||
}
|
||||
|
||||
if as.equalsFunction(existing, o) { // found existing, quit
|
||||
return existing
|
||||
}
|
||||
}
|
||||
|
||||
// full bucket, expand and add to end
|
||||
oldLength := len(bucket)
|
||||
bucketCopy := make([]interface{}, oldLength<<1)
|
||||
copy(bucketCopy[:oldLength], bucket)
|
||||
bucket = bucketCopy
|
||||
as.buckets[b] = bucket
|
||||
bucket[oldLength] = o
|
||||
as.n++
|
||||
return o
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) getBuckets(value interface{}) int {
|
||||
hash := as.hashcodeFunction(value)
|
||||
return hash & (len(as.buckets) - 1)
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) createBuckets(cap int) [][]interface{} {
|
||||
return make([][]interface{}, cap)
|
||||
}
|
||||
|
||||
func (as *Array2DHashSet) createBucket(cap int) []interface{} {
|
||||
return make([]interface{}, cap)
|
||||
}
|
||||
|
||||
func NewArray2DHashSetWithCap(
|
||||
hashcodeFunction func(interface{}) int,
|
||||
equalsFunction func(interface{}, interface{}) bool,
|
||||
initCap int,
|
||||
initBucketCap int,
|
||||
) *Array2DHashSet {
|
||||
if hashcodeFunction == nil {
|
||||
hashcodeFunction = standardHashFunction
|
||||
}
|
||||
|
||||
if equalsFunction == nil {
|
||||
equalsFunction = standardEqualsFunction
|
||||
}
|
||||
|
||||
ret := &Array2DHashSet{
|
||||
hashcodeFunction: hashcodeFunction,
|
||||
equalsFunction: equalsFunction,
|
||||
|
||||
n: 0,
|
||||
threshold: int(math.Floor(_initalCapacity * _loadFactor)),
|
||||
|
||||
currentPrime: 1,
|
||||
initialBucketCapacity: initBucketCap,
|
||||
}
|
||||
|
||||
ret.buckets = ret.createBuckets(initCap)
|
||||
return ret
|
||||
}
|
||||
|
||||
func NewArray2DHashSet(
|
||||
hashcodeFunction func(interface{}) int,
|
||||
equalsFunction func(interface{}, interface{}) bool,
|
||||
) *Array2DHashSet {
|
||||
return NewArray2DHashSetWithCap(hashcodeFunction, equalsFunction, _initalCapacity, _initalBucketCapacity)
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
lexer grammar CESQLLexer;
|
||||
|
||||
// NOTE:
|
||||
// This grammar is case-sensitive, although CESQL keywords are case-insensitive.
|
||||
// In order to implement case-insensitivity, check out
|
||||
// https://github.com/antlr/antlr4/blob/master/doc/case-insensitive-lexing.md#custom-character-streams-approach
|
||||
|
||||
// Skip tab, carriage return and newlines
|
||||
|
||||
SPACE: [ \t\r\n]+ -> skip;
|
||||
|
||||
// Fragments for Literal primitives
|
||||
|
||||
fragment ID_LITERAL: [a-zA-Z0-9]+;
|
||||
fragment DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"';
|
||||
fragment SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\'';
|
||||
fragment INT_DIGIT: [0-9];
|
||||
fragment FN_LITERAL: [A-Z] [A-Z_]*;
|
||||
|
||||
// Constructors symbols
|
||||
|
||||
LR_BRACKET: '(';
|
||||
RR_BRACKET: ')';
|
||||
COMMA: ',';
|
||||
SINGLE_QUOTE_SYMB: '\'';
|
||||
DOUBLE_QUOTE_SYMB: '"';
|
||||
|
||||
fragment QUOTE_SYMB
|
||||
: SINGLE_QUOTE_SYMB | DOUBLE_QUOTE_SYMB
|
||||
;
|
||||
|
||||
// Operators
|
||||
// - Logic
|
||||
|
||||
AND: 'AND';
|
||||
OR: 'OR';
|
||||
XOR: 'XOR';
|
||||
NOT: 'NOT';
|
||||
|
||||
// - Arithmetics
|
||||
|
||||
STAR: '*';
|
||||
DIVIDE: '/';
|
||||
MODULE: '%';
|
||||
PLUS: '+';
|
||||
MINUS: '-';
|
||||
|
||||
// - Comparison
|
||||
|
||||
EQUAL: '=';
|
||||
NOT_EQUAL: '!=';
|
||||
GREATER: '>';
|
||||
GREATER_OR_EQUAL: '>=';
|
||||
LESS: '<';
|
||||
LESS_GREATER: '<>';
|
||||
LESS_OR_EQUAL: '<=';
|
||||
|
||||
// Like, exists, in
|
||||
|
||||
LIKE: 'LIKE';
|
||||
EXISTS: 'EXISTS';
|
||||
IN: 'IN';
|
||||
|
||||
// Booleans
|
||||
|
||||
TRUE: 'TRUE';
|
||||
FALSE: 'FALSE';
|
||||
|
||||
// Literals
|
||||
|
||||
DQUOTED_STRING_LITERAL: DQUOTA_STRING;
|
||||
SQUOTED_STRING_LITERAL: SQUOTA_STRING;
|
||||
INTEGER_LITERAL: INT_DIGIT+;
|
||||
|
||||
// Identifiers
|
||||
|
||||
IDENTIFIER: [a-zA-Z]+;
|
||||
IDENTIFIER_WITH_NUMBER: [a-zA-Z0-9]+;
|
||||
FUNCTION_IDENTIFIER_WITH_UNDERSCORE: [A-Z] [A-Z_]*;
|
|
@ -0,0 +1,62 @@
|
|||
grammar CESQLParser;
|
||||
|
||||
import CESQLLexer;
|
||||
|
||||
// Entrypoint
|
||||
cesql: expression EOF;
|
||||
|
||||
// Structure of operations, function invocations and expression
|
||||
expression
|
||||
: functionIdentifier functionParameterList #functionInvocationExpression
|
||||
// unary operators are the highest priority
|
||||
| NOT expression #unaryLogicExpression
|
||||
| MINUS expression # unaryNumericExpression
|
||||
// LIKE, EXISTS and IN takes precedence over all the other binary operators
|
||||
| expression NOT? LIKE stringLiteral #likeExpression
|
||||
| EXISTS identifier #existsExpression
|
||||
| expression NOT? IN setExpression #inExpression
|
||||
// Numeric operations
|
||||
| expression (STAR | DIVIDE | MODULE) expression #binaryMultiplicativeExpression
|
||||
| expression (PLUS | MINUS) expression #binaryAdditiveExpression
|
||||
// Comparison operations
|
||||
| expression (EQUAL | NOT_EQUAL | LESS_GREATER | GREATER_OR_EQUAL | LESS_OR_EQUAL | LESS | GREATER) expression #binaryComparisonExpression
|
||||
// Logic operations
|
||||
|<assoc=right> expression (AND | OR | XOR) expression #binaryLogicExpression
|
||||
// Subexpressions and atoms
|
||||
| LR_BRACKET expression RR_BRACKET #subExpression
|
||||
| atom #atomExpression
|
||||
;
|
||||
|
||||
atom
|
||||
: booleanLiteral #booleanAtom
|
||||
| integerLiteral #integerAtom
|
||||
| stringLiteral #stringAtom
|
||||
| identifier #identifierAtom
|
||||
;
|
||||
|
||||
// Identifiers
|
||||
|
||||
identifier
|
||||
: (IDENTIFIER | IDENTIFIER_WITH_NUMBER)
|
||||
;
|
||||
functionIdentifier
|
||||
: (IDENTIFIER | FUNCTION_IDENTIFIER_WITH_UNDERSCORE)
|
||||
;
|
||||
|
||||
// Literals
|
||||
|
||||
booleanLiteral: (TRUE | FALSE);
|
||||
stringLiteral: (DQUOTED_STRING_LITERAL | SQUOTED_STRING_LITERAL);
|
||||
integerLiteral: INTEGER_LITERAL;
|
||||
|
||||
// Functions
|
||||
|
||||
functionParameterList
|
||||
: LR_BRACKET ( expression ( COMMA expression )* )? RR_BRACKET
|
||||
;
|
||||
|
||||
// Sets
|
||||
|
||||
setExpression
|
||||
: LR_BRACKET expression ( COMMA expression )* RR_BRACKET // Empty sets are not allowed
|
||||
;
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
|
@ -0,0 +1,32 @@
|
|||
# CloudEvents Expression Language Go implementation
|
||||
|
||||
CloudEvents Expression Language implementation.
|
||||
|
||||
Note: this package is a work in progress, APIs might break in future releases.
|
||||
|
||||
## User guide
|
||||
|
||||
To start using it:
|
||||
|
||||
```go
|
||||
import cesqlparser "github.com/cloudevents/sdk-go/sql/v2/parser"
|
||||
|
||||
// Parse the expression
|
||||
expression, err := cesqlparser.Parse("subject = 'Hello world'")
|
||||
|
||||
// Res can be either int32, bool or string
|
||||
res, err := expression.Evaluate(event)
|
||||
```
|
||||
|
||||
## Development guide
|
||||
|
||||
To regenerate the parser, make sure you have [ANTLR4 installed](https://github.com/antlr/antlr4/blob/master/doc/getting-started.md) and then run:
|
||||
|
||||
```shell
|
||||
antlr4 -Dlanguage=Go -package gen -o gen -visitor -no-listener CESQLParser.g4
|
||||
```
|
||||
|
||||
Then you need to run this sed command as a workaround until this ANTLR [issue](https://github.com/antlr/antlr4/issues/2433) is resolved. Without this, building for 32bit platforms will throw an int overflow error:
|
||||
```shell
|
||||
sed -i 's/(1<</(int64(1)<</g' gen/cesqlparser_parser.go
|
||||
```
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
import cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
|
||||
// Expression represents a parsed CloudEvents SQL Expression.
|
||||
type Expression interface {
|
||||
|
||||
// Evaluate the expression using the provided input type.
|
||||
// The return value can be either int32, bool or string.
|
||||
// The evaluation fails as soon as an error arises.
|
||||
Evaluate(event cloudevents.Event) (interface{}, error)
|
||||
}
|
17
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/base_expressions.go
generated
vendored
Normal file
17
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/base_expressions.go
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
|
||||
type baseUnaryExpression struct {
|
||||
child cesql.Expression
|
||||
}
|
||||
|
||||
type baseBinaryExpression struct {
|
||||
left cesql.Expression
|
||||
right cesql.Expression
|
||||
}
|
56
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/comparison_expressions.go
generated
vendored
Normal file
56
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/comparison_expressions.go
generated
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type equalExpression struct {
|
||||
baseBinaryExpression
|
||||
equal bool
|
||||
}
|
||||
|
||||
func (s equalExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
leftVal, err := s.left.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightVal, err := s.right.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
leftVal, err = utils.Cast(leftVal, cesql.TypeFromVal(rightVal))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return (leftVal == rightVal) == s.equal, nil
|
||||
}
|
||||
|
||||
func NewEqualExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return equalExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
equal: true,
|
||||
}
|
||||
}
|
||||
|
||||
func NewNotEqualExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return equalExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
equal: false,
|
||||
}
|
||||
}
|
24
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/exists_expression.go
generated
vendored
Normal file
24
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/exists_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type existsExpression struct {
|
||||
identifier string
|
||||
}
|
||||
|
||||
func (l existsExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
return utils.ContainsAttribute(event, l.identifier), nil
|
||||
}
|
||||
|
||||
func NewExistsExpression(identifier string) cesql.Expression {
|
||||
return existsExpression{identifier: identifier}
|
||||
}
|
57
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/function_invocation_expression.go
generated
vendored
Normal file
57
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/function_invocation_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/runtime"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type functionInvocationExpression struct {
|
||||
name string
|
||||
argumentsExpression []cesql.Expression
|
||||
}
|
||||
|
||||
func (expr functionInvocationExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
fn := runtime.ResolveFunction(expr.name, len(expr.argumentsExpression))
|
||||
if fn == nil {
|
||||
return nil, fmt.Errorf("cannot resolve function %s", expr.name)
|
||||
}
|
||||
|
||||
args := make([]interface{}, len(expr.argumentsExpression))
|
||||
|
||||
for i, expr := range expr.argumentsExpression {
|
||||
arg, err := expr.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
argType := fn.ArgType(i)
|
||||
if argType == nil {
|
||||
return nil, fmt.Errorf("cannot resolve arg type at index %d", i)
|
||||
}
|
||||
|
||||
arg, err = utils.Cast(arg, *argType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
args[i] = arg
|
||||
}
|
||||
|
||||
return fn.Run(event, args)
|
||||
}
|
||||
|
||||
func NewFunctionInvocationExpression(name string, argumentsExpression []cesql.Expression) cesql.Expression {
|
||||
return functionInvocationExpression{
|
||||
name: name,
|
||||
argumentsExpression: argumentsExpression,
|
||||
}
|
||||
}
|
31
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/identifier_expression.go
generated
vendored
Normal file
31
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/identifier_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type identifierExpression struct {
|
||||
identifier string
|
||||
}
|
||||
|
||||
func (l identifierExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
value := utils.GetAttribute(event, l.identifier)
|
||||
if value == nil {
|
||||
return nil, fmt.Errorf("missing attribute '%s'", l.identifier)
|
||||
}
|
||||
|
||||
return value, nil
|
||||
}
|
||||
|
||||
func NewIdentifierExpression(identifier string) cesql.Expression {
|
||||
return identifierExpression{identifier: identifier}
|
||||
}
|
46
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/in_expression.go
generated
vendored
Normal file
46
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/in_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type inExpression struct {
|
||||
leftExpression cesql.Expression
|
||||
setExpression []cesql.Expression
|
||||
}
|
||||
|
||||
func (l inExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
leftValue, err := l.leftExpression.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, rightExpression := range l.setExpression {
|
||||
rightValue, err := rightExpression.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightValue, err = utils.Cast(rightValue, cesql.TypeFromVal(leftValue))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if leftValue == rightValue {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func NewInExpression(leftExpression cesql.Expression, setExpression []cesql.Expression) cesql.Expression {
|
||||
return inExpression{leftExpression, setExpression}
|
||||
}
|
89
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/integer_comparison_expressions.go
generated
vendored
Normal file
89
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/integer_comparison_expressions.go
generated
vendored
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type integerComparisonExpression struct {
|
||||
baseBinaryExpression
|
||||
fn func(x, y int32) bool
|
||||
}
|
||||
|
||||
func (s integerComparisonExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
leftVal, err := s.left.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightVal, err := s.right.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
leftVal, err = utils.Cast(leftVal, cesql.IntegerType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightVal, err = utils.Cast(rightVal, cesql.IntegerType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s.fn(leftVal.(int32), rightVal.(int32)), nil
|
||||
}
|
||||
|
||||
func NewLessExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return integerComparisonExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) bool {
|
||||
return x < y
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewLessOrEqualExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return integerComparisonExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) bool {
|
||||
return x <= y
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewGreaterExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return integerComparisonExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) bool {
|
||||
return x > y
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewGreaterOrEqualExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return integerComparisonExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) bool {
|
||||
return x >= y
|
||||
},
|
||||
}
|
||||
}
|
96
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/like_expression.go
generated
vendored
Normal file
96
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/like_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type likeExpression struct {
|
||||
baseUnaryExpression
|
||||
pattern *regexp.Regexp
|
||||
}
|
||||
|
||||
func (l likeExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
val, err := l.child.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
val, err = utils.Cast(val, cesql.StringType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return l.pattern.MatchString(val.(string)), nil
|
||||
}
|
||||
|
||||
func NewLikeExpression(child cesql.Expression, pattern string) (cesql.Expression, error) {
|
||||
// Converting to regex is not the most performant impl, but it works
|
||||
p, err := convertLikePatternToRegex(pattern)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return likeExpression{
|
||||
baseUnaryExpression: baseUnaryExpression{
|
||||
child: child,
|
||||
},
|
||||
pattern: p,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func convertLikePatternToRegex(pattern string) (*regexp.Regexp, error) {
|
||||
var chunks []string
|
||||
chunks = append(chunks, "^")
|
||||
|
||||
var chunk strings.Builder
|
||||
|
||||
for i := 0; i < len(pattern); i++ {
|
||||
if pattern[i] == '\\' && i < len(pattern)-1 {
|
||||
if pattern[i+1] == '%' {
|
||||
// \% case
|
||||
chunk.WriteRune('%')
|
||||
chunks = append(chunks, "\\Q"+chunk.String()+"\\E")
|
||||
chunk.Reset()
|
||||
i++
|
||||
continue
|
||||
} else if pattern[i+1] == '_' {
|
||||
// \_ case
|
||||
chunk.WriteRune('_')
|
||||
chunks = append(chunks, "\\Q"+chunk.String()+"\\E")
|
||||
chunk.Reset()
|
||||
i++
|
||||
continue
|
||||
}
|
||||
} else if pattern[i] == '_' {
|
||||
// replace with .
|
||||
chunks = append(chunks, "\\Q"+chunk.String()+"\\E")
|
||||
chunk.Reset()
|
||||
chunks = append(chunks, ".")
|
||||
} else if pattern[i] == '%' {
|
||||
// replace with .*
|
||||
chunks = append(chunks, "\\Q"+chunk.String()+"\\E")
|
||||
chunk.Reset()
|
||||
chunks = append(chunks, ".*")
|
||||
} else {
|
||||
chunk.WriteByte(pattern[i])
|
||||
}
|
||||
}
|
||||
|
||||
if chunk.Len() != 0 {
|
||||
chunks = append(chunks, "\\Q"+chunk.String()+"\\E")
|
||||
}
|
||||
|
||||
chunks = append(chunks, "$")
|
||||
|
||||
return regexp.Compile(strings.Join(chunks, ""))
|
||||
}
|
23
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/literal_expression.go
generated
vendored
Normal file
23
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/literal_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type literalExpression struct {
|
||||
value interface{}
|
||||
}
|
||||
|
||||
func (l literalExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
return l.value, nil
|
||||
}
|
||||
|
||||
func NewLiteralExpression(value interface{}) cesql.Expression {
|
||||
return literalExpression{value: value}
|
||||
}
|
77
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/logic_expressions.go
generated
vendored
Normal file
77
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/logic_expressions.go
generated
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type logicExpression struct {
|
||||
baseBinaryExpression
|
||||
fn func(x, y bool) bool
|
||||
}
|
||||
|
||||
func (s logicExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
leftVal, err := s.left.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightVal, err := s.right.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
leftVal, err = utils.Cast(leftVal, cesql.BooleanType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightVal, err = utils.Cast(rightVal, cesql.BooleanType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s.fn(leftVal.(bool), rightVal.(bool)), nil
|
||||
}
|
||||
|
||||
func NewAndExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return logicExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y bool) bool {
|
||||
return x && y
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewOrExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return logicExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y bool) bool {
|
||||
return x || y
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewXorExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return logicExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y bool) bool {
|
||||
return x != y
|
||||
},
|
||||
}
|
||||
}
|
109
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/math_expressions.go
generated
vendored
Normal file
109
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/math_expressions.go
generated
vendored
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type mathExpression struct {
|
||||
baseBinaryExpression
|
||||
fn func(x, y int32) (int32, error)
|
||||
}
|
||||
|
||||
func (s mathExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
leftVal, err := s.left.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightVal, err := s.right.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
leftVal, err = utils.Cast(leftVal, cesql.IntegerType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rightVal, err = utils.Cast(rightVal, cesql.IntegerType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s.fn(leftVal.(int32), rightVal.(int32))
|
||||
}
|
||||
|
||||
func NewSumExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return mathExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) (int32, error) {
|
||||
return x + y, nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewDifferenceExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return mathExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) (int32, error) {
|
||||
return x - y, nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewMultiplicationExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return mathExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) (int32, error) {
|
||||
return x * y, nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewModuleExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return mathExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) (int32, error) {
|
||||
if y == 0 {
|
||||
return 0, errors.New("math error: division by zero")
|
||||
}
|
||||
return x % y, nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func NewDivisionExpression(left cesql.Expression, right cesql.Expression) cesql.Expression {
|
||||
return mathExpression{
|
||||
baseBinaryExpression: baseBinaryExpression{
|
||||
left: left,
|
||||
right: right,
|
||||
},
|
||||
fn: func(x, y int32) (int32, error) {
|
||||
if y == 0 {
|
||||
return 0, errors.New("math error: division by zero")
|
||||
}
|
||||
return x / y, nil
|
||||
},
|
||||
}
|
||||
}
|
32
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/negate_expression.go
generated
vendored
Normal file
32
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/negate_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type negateExpression baseUnaryExpression
|
||||
|
||||
func (l negateExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
val, err := l.child.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
val, err = utils.Cast(val, cesql.IntegerType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return -(val.(int32)), nil
|
||||
}
|
||||
|
||||
func NewNegateExpression(child cesql.Expression) cesql.Expression {
|
||||
return negateExpression{child: child}
|
||||
}
|
32
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/not_expression.go
generated
vendored
Normal file
32
vendor/github.com/cloudevents/sdk-go/sql/v2/expression/not_expression.go
generated
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package expression
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type notExpression baseUnaryExpression
|
||||
|
||||
func (l notExpression) Evaluate(event cloudevents.Event) (interface{}, error) {
|
||||
val, err := l.child.Evaluate(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
val, err = utils.Cast(val, cesql.BooleanType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return !(val.(bool)), nil
|
||||
}
|
||||
|
||||
func NewNotExpression(child cesql.Expression) cesql.Expression {
|
||||
return notExpression{child: child}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
import cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
|
||||
type Function interface {
|
||||
Name() string
|
||||
Arity() int
|
||||
IsVariadic() bool
|
||||
ArgType(index int) *Type
|
||||
|
||||
Run(event cloudevents.Event, arguments []interface{}) (interface{}, error)
|
||||
}
|
57
vendor/github.com/cloudevents/sdk-go/sql/v2/function/casting_functions.go
generated
vendored
Normal file
57
vendor/github.com/cloudevents/sdk-go/sql/v2/function/casting_functions.go
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package function
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/utils"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
var IntFunction function = function{
|
||||
name: "INT",
|
||||
fixedArgs: []cesql.Type{cesql.AnyType},
|
||||
variadicArgs: nil,
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return utils.Cast(i[0], cesql.IntegerType)
|
||||
},
|
||||
}
|
||||
|
||||
var BoolFunction function = function{
|
||||
name: "BOOL",
|
||||
fixedArgs: []cesql.Type{cesql.AnyType},
|
||||
variadicArgs: nil,
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return utils.Cast(i[0], cesql.BooleanType)
|
||||
},
|
||||
}
|
||||
|
||||
var StringFunction function = function{
|
||||
name: "STRING",
|
||||
fixedArgs: []cesql.Type{cesql.AnyType},
|
||||
variadicArgs: nil,
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return utils.Cast(i[0], cesql.StringType)
|
||||
},
|
||||
}
|
||||
|
||||
var IsIntFunction function = function{
|
||||
name: "IS_INT",
|
||||
fixedArgs: []cesql.Type{cesql.AnyType},
|
||||
variadicArgs: nil,
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return utils.CanCast(i[0], cesql.IntegerType), nil
|
||||
},
|
||||
}
|
||||
|
||||
var IsBoolFunction function = function{
|
||||
name: "IS_BOOL",
|
||||
fixedArgs: []cesql.Type{cesql.AnyType},
|
||||
variadicArgs: nil,
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return utils.CanCast(i[0], cesql.BooleanType), nil
|
||||
},
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package function
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type function struct {
|
||||
name string
|
||||
fixedArgs []cesql.Type
|
||||
variadicArgs *cesql.Type
|
||||
fn func(cloudevents.Event, []interface{}) (interface{}, error)
|
||||
}
|
||||
|
||||
func (f function) Name() string {
|
||||
return f.name
|
||||
}
|
||||
|
||||
func (f function) Arity() int {
|
||||
return len(f.fixedArgs)
|
||||
}
|
||||
|
||||
func (f function) IsVariadic() bool {
|
||||
return f.variadicArgs != nil
|
||||
}
|
||||
|
||||
func (f function) ArgType(index int) *cesql.Type {
|
||||
if index < len(f.fixedArgs) {
|
||||
return &f.fixedArgs[index]
|
||||
}
|
||||
return f.variadicArgs
|
||||
}
|
||||
|
||||
func (f function) Run(event cloudevents.Event, arguments []interface{}) (interface{}, error) {
|
||||
return f.fn(event, arguments)
|
||||
}
|
24
vendor/github.com/cloudevents/sdk-go/sql/v2/function/integer_functions.go
generated
vendored
Normal file
24
vendor/github.com/cloudevents/sdk-go/sql/v2/function/integer_functions.go
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package function
|
||||
|
||||
import (
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
var AbsFunction function = function{
|
||||
name: "ABS",
|
||||
fixedArgs: []cesql.Type{cesql.IntegerType},
|
||||
variadicArgs: nil,
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
x := i[0].(int32)
|
||||
if x < 0 {
|
||||
return -x, nil
|
||||
}
|
||||
return x, nil
|
||||
},
|
||||
}
|
177
vendor/github.com/cloudevents/sdk-go/sql/v2/function/string_functions.go
generated
vendored
Normal file
177
vendor/github.com/cloudevents/sdk-go/sql/v2/function/string_functions.go
generated
vendored
Normal file
|
@ -0,0 +1,177 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package function
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
var LengthFunction function = function{
|
||||
name: "LENGTH",
|
||||
fixedArgs: []cesql.Type{cesql.StringType},
|
||||
variadicArgs: nil,
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return int32(len(i[0].(string))), nil
|
||||
},
|
||||
}
|
||||
|
||||
var ConcatFunction function = function{
|
||||
name: "CONCAT",
|
||||
variadicArgs: cesql.TypePtr(cesql.StringType),
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
var sb strings.Builder
|
||||
for _, v := range i {
|
||||
sb.WriteString(v.(string))
|
||||
}
|
||||
return sb.String(), nil
|
||||
},
|
||||
}
|
||||
|
||||
var ConcatWSFunction function = function{
|
||||
name: "CONCAT_WS",
|
||||
fixedArgs: []cesql.Type{cesql.StringType},
|
||||
variadicArgs: cesql.TypePtr(cesql.StringType),
|
||||
fn: func(event cloudevents.Event, args []interface{}) (interface{}, error) {
|
||||
if len(args) == 1 {
|
||||
return "", nil
|
||||
}
|
||||
separator := args[0].(string)
|
||||
|
||||
var sb strings.Builder
|
||||
for i := 1; i < len(args)-1; i++ {
|
||||
sb.WriteString(args[i].(string))
|
||||
sb.WriteString(separator)
|
||||
}
|
||||
sb.WriteString(args[len(args)-1].(string))
|
||||
return sb.String(), nil
|
||||
},
|
||||
}
|
||||
|
||||
var LowerFunction function = function{
|
||||
name: "LOWER",
|
||||
fixedArgs: []cesql.Type{cesql.StringType},
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return strings.ToLower(i[0].(string)), nil
|
||||
},
|
||||
}
|
||||
|
||||
var UpperFunction function = function{
|
||||
name: "UPPER",
|
||||
fixedArgs: []cesql.Type{cesql.StringType},
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return strings.ToUpper(i[0].(string)), nil
|
||||
},
|
||||
}
|
||||
|
||||
var TrimFunction function = function{
|
||||
name: "TRIM",
|
||||
fixedArgs: []cesql.Type{cesql.StringType},
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
return strings.TrimSpace(i[0].(string)), nil
|
||||
},
|
||||
}
|
||||
|
||||
var LeftFunction function = function{
|
||||
name: "LEFT",
|
||||
fixedArgs: []cesql.Type{cesql.StringType, cesql.IntegerType},
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
str := i[0].(string)
|
||||
y := int(i[1].(int32))
|
||||
|
||||
if y > len(str) {
|
||||
return str, nil
|
||||
}
|
||||
|
||||
if y < 0 {
|
||||
return nil, fmt.Errorf("LEFT y argument is < 0: %d", y)
|
||||
}
|
||||
|
||||
return str[0:y], nil
|
||||
},
|
||||
}
|
||||
|
||||
var RightFunction function = function{
|
||||
name: "RIGHT",
|
||||
fixedArgs: []cesql.Type{cesql.StringType, cesql.IntegerType},
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
str := i[0].(string)
|
||||
y := int(i[1].(int32))
|
||||
|
||||
if y > len(str) {
|
||||
return str, nil
|
||||
}
|
||||
|
||||
if y < 0 {
|
||||
return nil, fmt.Errorf("RIGHT y argument is < 0: %d", y)
|
||||
}
|
||||
|
||||
return str[len(str)-y:], nil
|
||||
},
|
||||
}
|
||||
|
||||
var SubstringFunction function = function{
|
||||
name: "SUBSTRING",
|
||||
fixedArgs: []cesql.Type{cesql.StringType, cesql.IntegerType},
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
str := i[0].(string)
|
||||
pos := int(i[1].(int32))
|
||||
|
||||
if pos == 0 {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
if pos < -len(str) || pos > len(str) {
|
||||
return "", fmt.Errorf("SUBSTRING invalid pos argument: %d", pos)
|
||||
}
|
||||
|
||||
var beginning int
|
||||
if pos < 0 {
|
||||
beginning = len(str) + pos
|
||||
} else {
|
||||
beginning = pos - 1
|
||||
}
|
||||
|
||||
return str[beginning:], nil
|
||||
},
|
||||
}
|
||||
|
||||
var SubstringWithLengthFunction function = function{
|
||||
name: "SUBSTRING",
|
||||
fixedArgs: []cesql.Type{cesql.StringType, cesql.IntegerType, cesql.IntegerType},
|
||||
fn: func(event cloudevents.Event, i []interface{}) (interface{}, error) {
|
||||
str := i[0].(string)
|
||||
pos := int(i[1].(int32))
|
||||
length := int(i[2].(int32))
|
||||
|
||||
if pos == 0 {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
if pos < -len(str) || pos > len(str) {
|
||||
return "", fmt.Errorf("SUBSTRING invalid pos argument: %d", pos)
|
||||
}
|
||||
|
||||
var beginning int
|
||||
if pos < 0 {
|
||||
beginning = len(str) + pos
|
||||
} else {
|
||||
beginning = pos - 1
|
||||
}
|
||||
|
||||
var end int
|
||||
if beginning+length > len(str) {
|
||||
end = len(str)
|
||||
} else {
|
||||
end = beginning + length
|
||||
}
|
||||
|
||||
return str[beginning:end], nil
|
||||
},
|
||||
}
|
87
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParser.interp
generated
vendored
Normal file
87
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParser.interp
generated
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
token literal names:
|
||||
null
|
||||
null
|
||||
'('
|
||||
')'
|
||||
','
|
||||
'\''
|
||||
'"'
|
||||
'AND'
|
||||
'OR'
|
||||
'XOR'
|
||||
'NOT'
|
||||
'*'
|
||||
'/'
|
||||
'%'
|
||||
'+'
|
||||
'-'
|
||||
'='
|
||||
'!='
|
||||
'>'
|
||||
'>='
|
||||
'<'
|
||||
'<>'
|
||||
'<='
|
||||
'LIKE'
|
||||
'EXISTS'
|
||||
'IN'
|
||||
'TRUE'
|
||||
'FALSE'
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
|
||||
token symbolic names:
|
||||
null
|
||||
SPACE
|
||||
LR_BRACKET
|
||||
RR_BRACKET
|
||||
COMMA
|
||||
SINGLE_QUOTE_SYMB
|
||||
DOUBLE_QUOTE_SYMB
|
||||
AND
|
||||
OR
|
||||
XOR
|
||||
NOT
|
||||
STAR
|
||||
DIVIDE
|
||||
MODULE
|
||||
PLUS
|
||||
MINUS
|
||||
EQUAL
|
||||
NOT_EQUAL
|
||||
GREATER
|
||||
GREATER_OR_EQUAL
|
||||
LESS
|
||||
LESS_GREATER
|
||||
LESS_OR_EQUAL
|
||||
LIKE
|
||||
EXISTS
|
||||
IN
|
||||
TRUE
|
||||
FALSE
|
||||
DQUOTED_STRING_LITERAL
|
||||
SQUOTED_STRING_LITERAL
|
||||
INTEGER_LITERAL
|
||||
IDENTIFIER
|
||||
IDENTIFIER_WITH_NUMBER
|
||||
FUNCTION_IDENTIFIER_WITH_UNDERSCORE
|
||||
|
||||
rule names:
|
||||
cesql
|
||||
expression
|
||||
atom
|
||||
identifier
|
||||
functionIdentifier
|
||||
booleanLiteral
|
||||
stringLiteral
|
||||
integerLiteral
|
||||
functionParameterList
|
||||
setExpression
|
||||
|
||||
|
||||
atn:
|
||||
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 35, 112, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 41, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 57, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 63, 10, 3, 3, 3, 3, 3, 7, 3, 67, 10, 3, 12, 3, 14, 3, 70, 11, 3, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 76, 10, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 92, 10, 10, 12, 10, 14, 10, 95, 11, 10, 5, 10, 97, 10, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 105, 10, 11, 12, 11, 14, 11, 108, 11, 11, 3, 11, 3, 11, 3, 11, 2, 3, 4, 12, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 2, 10, 3, 2, 13, 15, 3, 2, 16, 17, 3, 2, 18, 24, 3, 2, 9, 11, 3, 2, 33, 34, 4, 2, 33, 33, 35, 35, 3, 2, 28, 29, 3, 2, 30, 31, 2, 120, 2, 22, 3, 2, 2, 2, 4, 40, 3, 2, 2, 2, 6, 75, 3, 2, 2, 2, 8, 77, 3, 2, 2, 2, 10, 79, 3, 2, 2, 2, 12, 81, 3, 2, 2, 2, 14, 83, 3, 2, 2, 2, 16, 85, 3, 2, 2, 2, 18, 87, 3, 2, 2, 2, 20, 100, 3, 2, 2, 2, 22, 23, 5, 4, 3, 2, 23, 24, 7, 2, 2, 3, 24, 3, 3, 2, 2, 2, 25, 26, 8, 3, 1, 2, 26, 27, 5, 10, 6, 2, 27, 28, 5, 18, 10, 2, 28, 41, 3, 2, 2, 2, 29, 30, 7, 12, 2, 2, 30, 41, 5, 4, 3, 13, 31, 32, 7, 17, 2, 2, 32, 41, 5, 4, 3, 12, 33, 34, 7, 26, 2, 2, 34, 41, 5, 8, 5, 2, 35, 36, 7, 4, 2, 2, 36, 37, 5, 4, 3, 2, 37, 38, 7, 5, 2, 2, 38, 41, 3, 2, 2, 2, 39, 41, 5, 6, 4, 2, 40, 25, 3, 2, 2, 2, 40, 29, 3, 2, 2, 2, 40, 31, 3, 2, 2, 2, 40, 33, 3, 2, 2, 2, 40, 35, 3, 2, 2, 2, 40, 39, 3, 2, 2, 2, 41, 68, 3, 2, 2, 2, 42, 43, 12, 8, 2, 2, 43, 44, 9, 2, 2, 2, 44, 67, 5, 4, 3, 9, 45, 46, 12, 7, 2, 2, 46, 47, 9, 3, 2, 2, 47, 67, 5, 4, 3, 8, 48, 49, 12, 6, 2, 2, 49, 50, 9, 4, 2, 2, 50, 67, 5, 4, 3, 7, 51, 52, 12, 5, 2, 2, 52, 53, 9, 5, 2, 2, 53, 67, 5, 4, 3, 5, 54, 56, 12, 11, 2, 2, 55, 57, 7, 12, 2, 2, 56, 55, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 7, 25, 2, 2, 59, 67, 5, 14, 8, 2, 60, 62, 12, 9, 2, 2, 61, 63, 7, 12, 2, 2, 62, 61, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 65, 7, 27, 2, 2, 65, 67, 5, 20, 11, 2, 66, 42, 3, 2, 2, 2, 66, 45, 3, 2, 2, 2, 66, 48, 3, 2, 2, 2, 66, 51, 3, 2, 2, 2, 66, 54, 3, 2, 2, 2, 66, 60, 3, 2, 2, 2, 67, 70, 3, 2, 2, 2, 68, 66, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 5, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 76, 5, 12, 7, 2, 72, 76, 5, 16, 9, 2, 73, 76, 5, 14, 8, 2, 74, 76, 5, 8, 5, 2, 75, 71, 3, 2, 2, 2, 75, 72, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 75, 74, 3, 2, 2, 2, 76, 7, 3, 2, 2, 2, 77, 78, 9, 6, 2, 2, 78, 9, 3, 2, 2, 2, 79, 80, 9, 7, 2, 2, 80, 11, 3, 2, 2, 2, 81, 82, 9, 8, 2, 2, 82, 13, 3, 2, 2, 2, 83, 84, 9, 9, 2, 2, 84, 15, 3, 2, 2, 2, 85, 86, 7, 32, 2, 2, 86, 17, 3, 2, 2, 2, 87, 96, 7, 4, 2, 2, 88, 93, 5, 4, 3, 2, 89, 90, 7, 6, 2, 2, 90, 92, 5, 4, 3, 2, 91, 89, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 97, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 88, 3, 2, 2, 2, 96, 97, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 99, 7, 5, 2, 2, 99, 19, 3, 2, 2, 2, 100, 101, 7, 4, 2, 2, 101, 106, 5, 4, 3, 2, 102, 103, 7, 6, 2, 2, 103, 105, 5, 4, 3, 2, 104, 102, 3, 2, 2, 2, 105, 108, 3, 2, 2, 2, 106, 104, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 109, 3, 2, 2, 2, 108, 106, 3, 2, 2, 2, 109, 110, 7, 5, 2, 2, 110, 21, 3, 2, 2, 2, 11, 40, 56, 62, 66, 68, 75, 93, 96, 106]
|
59
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParser.tokens
generated
vendored
Normal file
59
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParser.tokens
generated
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
SPACE=1
|
||||
LR_BRACKET=2
|
||||
RR_BRACKET=3
|
||||
COMMA=4
|
||||
SINGLE_QUOTE_SYMB=5
|
||||
DOUBLE_QUOTE_SYMB=6
|
||||
AND=7
|
||||
OR=8
|
||||
XOR=9
|
||||
NOT=10
|
||||
STAR=11
|
||||
DIVIDE=12
|
||||
MODULE=13
|
||||
PLUS=14
|
||||
MINUS=15
|
||||
EQUAL=16
|
||||
NOT_EQUAL=17
|
||||
GREATER=18
|
||||
GREATER_OR_EQUAL=19
|
||||
LESS=20
|
||||
LESS_GREATER=21
|
||||
LESS_OR_EQUAL=22
|
||||
LIKE=23
|
||||
EXISTS=24
|
||||
IN=25
|
||||
TRUE=26
|
||||
FALSE=27
|
||||
DQUOTED_STRING_LITERAL=28
|
||||
SQUOTED_STRING_LITERAL=29
|
||||
INTEGER_LITERAL=30
|
||||
IDENTIFIER=31
|
||||
IDENTIFIER_WITH_NUMBER=32
|
||||
FUNCTION_IDENTIFIER_WITH_UNDERSCORE=33
|
||||
'('=2
|
||||
')'=3
|
||||
','=4
|
||||
'\''=5
|
||||
'"'=6
|
||||
'AND'=7
|
||||
'OR'=8
|
||||
'XOR'=9
|
||||
'NOT'=10
|
||||
'*'=11
|
||||
'/'=12
|
||||
'%'=13
|
||||
'+'=14
|
||||
'-'=15
|
||||
'='=16
|
||||
'!='=17
|
||||
'>'=18
|
||||
'>='=19
|
||||
'<'=20
|
||||
'<>'=21
|
||||
'<='=22
|
||||
'LIKE'=23
|
||||
'EXISTS'=24
|
||||
'IN'=25
|
||||
'TRUE'=26
|
||||
'FALSE'=27
|
122
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParserLexer.interp
generated
vendored
Normal file
122
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParserLexer.interp
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
59
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParserLexer.tokens
generated
vendored
Normal file
59
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/CESQLParserLexer.tokens
generated
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
SPACE=1
|
||||
LR_BRACKET=2
|
||||
RR_BRACKET=3
|
||||
COMMA=4
|
||||
SINGLE_QUOTE_SYMB=5
|
||||
DOUBLE_QUOTE_SYMB=6
|
||||
AND=7
|
||||
OR=8
|
||||
XOR=9
|
||||
NOT=10
|
||||
STAR=11
|
||||
DIVIDE=12
|
||||
MODULE=13
|
||||
PLUS=14
|
||||
MINUS=15
|
||||
EQUAL=16
|
||||
NOT_EQUAL=17
|
||||
GREATER=18
|
||||
GREATER_OR_EQUAL=19
|
||||
LESS=20
|
||||
LESS_GREATER=21
|
||||
LESS_OR_EQUAL=22
|
||||
LIKE=23
|
||||
EXISTS=24
|
||||
IN=25
|
||||
TRUE=26
|
||||
FALSE=27
|
||||
DQUOTED_STRING_LITERAL=28
|
||||
SQUOTED_STRING_LITERAL=29
|
||||
INTEGER_LITERAL=30
|
||||
IDENTIFIER=31
|
||||
IDENTIFIER_WITH_NUMBER=32
|
||||
FUNCTION_IDENTIFIER_WITH_UNDERSCORE=33
|
||||
'('=2
|
||||
')'=3
|
||||
','=4
|
||||
'\''=5
|
||||
'"'=6
|
||||
'AND'=7
|
||||
'OR'=8
|
||||
'XOR'=9
|
||||
'NOT'=10
|
||||
'*'=11
|
||||
'/'=12
|
||||
'%'=13
|
||||
'+'=14
|
||||
'-'=15
|
||||
'='=16
|
||||
'!='=17
|
||||
'>'=18
|
||||
'>='=19
|
||||
'<'=20
|
||||
'<>'=21
|
||||
'<='=22
|
||||
'LIKE'=23
|
||||
'EXISTS'=24
|
||||
'IN'=25
|
||||
'TRUE'=26
|
||||
'FALSE'=27
|
109
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_base_visitor.go
generated
vendored
Normal file
109
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_base_visitor.go
generated
vendored
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
// Code generated from CESQLParser.g4 by ANTLR 4.9. DO NOT EDIT.
|
||||
|
||||
package gen // CESQLParser
|
||||
import "github.com/antlr/antlr4/runtime/Go/antlr"
|
||||
|
||||
type BaseCESQLParserVisitor struct {
|
||||
*antlr.BaseParseTreeVisitor
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitCesql(ctx *CesqlContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitInExpression(ctx *InExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitBinaryComparisonExpression(ctx *BinaryComparisonExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitAtomExpression(ctx *AtomExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitExistsExpression(ctx *ExistsExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitBinaryLogicExpression(ctx *BinaryLogicExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitLikeExpression(ctx *LikeExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitFunctionInvocationExpression(ctx *FunctionInvocationExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitBinaryMultiplicativeExpression(ctx *BinaryMultiplicativeExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitUnaryLogicExpression(ctx *UnaryLogicExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitUnaryNumericExpression(ctx *UnaryNumericExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitSubExpression(ctx *SubExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitBinaryAdditiveExpression(ctx *BinaryAdditiveExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitBooleanAtom(ctx *BooleanAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitIntegerAtom(ctx *IntegerAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitStringAtom(ctx *StringAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitIdentifierAtom(ctx *IdentifierAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitIdentifier(ctx *IdentifierContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitFunctionIdentifier(ctx *FunctionIdentifierContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitBooleanLiteral(ctx *BooleanLiteralContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitStringLiteral(ctx *StringLiteralContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitIntegerLiteral(ctx *IntegerLiteralContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitFunctionParameterList(ctx *FunctionParameterListContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *BaseCESQLParserVisitor) VisitSetExpression(ctx *SetExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
231
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_lexer.go
generated
vendored
Normal file
231
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_lexer.go
generated
vendored
Normal file
|
@ -0,0 +1,231 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
// Code generated from CESQLParser.g4 by ANTLR 4.9. DO NOT EDIT.
|
||||
|
||||
package gen
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unicode"
|
||||
|
||||
"github.com/antlr/antlr4/runtime/Go/antlr"
|
||||
)
|
||||
|
||||
// Suppress unused import error
|
||||
var _ = fmt.Printf
|
||||
var _ = unicode.IsLetter
|
||||
|
||||
var serializedLexerAtn = []uint16{
|
||||
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 35, 237,
|
||||
8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7,
|
||||
9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12,
|
||||
4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4,
|
||||
18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23,
|
||||
9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9,
|
||||
28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33,
|
||||
4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4,
|
||||
39, 9, 39, 4, 40, 9, 40, 3, 2, 6, 2, 83, 10, 2, 13, 2, 14, 2, 84, 3, 2,
|
||||
3, 2, 3, 3, 6, 3, 90, 10, 3, 13, 3, 14, 3, 91, 3, 4, 3, 4, 3, 4, 3, 4,
|
||||
3, 4, 3, 4, 7, 4, 100, 10, 4, 12, 4, 14, 4, 103, 11, 4, 3, 4, 3, 4, 3,
|
||||
5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 113, 10, 5, 12, 5, 14, 5, 116, 11,
|
||||
5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 7, 7, 124, 10, 7, 12, 7, 14, 7,
|
||||
127, 11, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12,
|
||||
3, 12, 3, 13, 3, 13, 5, 13, 141, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3,
|
||||
15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17,
|
||||
3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3,
|
||||
23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27,
|
||||
3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3,
|
||||
30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32,
|
||||
3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3,
|
||||
34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 6, 37, 217, 10, 37, 13, 37,
|
||||
14, 37, 218, 3, 38, 6, 38, 222, 10, 38, 13, 38, 14, 38, 223, 3, 39, 6,
|
||||
39, 227, 10, 39, 13, 39, 14, 39, 228, 3, 40, 3, 40, 7, 40, 233, 10, 40,
|
||||
12, 40, 14, 40, 236, 11, 40, 2, 2, 41, 3, 3, 5, 2, 7, 2, 9, 2, 11, 2, 13,
|
||||
2, 15, 4, 17, 5, 19, 6, 21, 7, 23, 8, 25, 2, 27, 9, 29, 10, 31, 11, 33,
|
||||
12, 35, 13, 37, 14, 39, 15, 41, 16, 43, 17, 45, 18, 47, 19, 49, 20, 51,
|
||||
21, 53, 22, 55, 23, 57, 24, 59, 25, 61, 26, 63, 27, 65, 28, 67, 29, 69,
|
||||
30, 71, 31, 73, 32, 75, 33, 77, 34, 79, 35, 3, 2, 10, 5, 2, 11, 12, 15,
|
||||
15, 34, 34, 5, 2, 50, 59, 67, 92, 99, 124, 4, 2, 36, 36, 94, 94, 4, 2,
|
||||
41, 41, 94, 94, 3, 2, 50, 59, 3, 2, 67, 92, 4, 2, 67, 92, 97, 97, 4, 2,
|
||||
67, 92, 99, 124, 2, 244, 2, 3, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3,
|
||||
2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 27,
|
||||
3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2,
|
||||
35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2,
|
||||
2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2,
|
||||
2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2,
|
||||
2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3,
|
||||
2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73,
|
||||
3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 3,
|
||||
82, 3, 2, 2, 2, 5, 89, 3, 2, 2, 2, 7, 93, 3, 2, 2, 2, 9, 106, 3, 2, 2,
|
||||
2, 11, 119, 3, 2, 2, 2, 13, 121, 3, 2, 2, 2, 15, 128, 3, 2, 2, 2, 17, 130,
|
||||
3, 2, 2, 2, 19, 132, 3, 2, 2, 2, 21, 134, 3, 2, 2, 2, 23, 136, 3, 2, 2,
|
||||
2, 25, 140, 3, 2, 2, 2, 27, 142, 3, 2, 2, 2, 29, 146, 3, 2, 2, 2, 31, 149,
|
||||
3, 2, 2, 2, 33, 153, 3, 2, 2, 2, 35, 157, 3, 2, 2, 2, 37, 159, 3, 2, 2,
|
||||
2, 39, 161, 3, 2, 2, 2, 41, 163, 3, 2, 2, 2, 43, 165, 3, 2, 2, 2, 45, 167,
|
||||
3, 2, 2, 2, 47, 169, 3, 2, 2, 2, 49, 172, 3, 2, 2, 2, 51, 174, 3, 2, 2,
|
||||
2, 53, 177, 3, 2, 2, 2, 55, 179, 3, 2, 2, 2, 57, 182, 3, 2, 2, 2, 59, 185,
|
||||
3, 2, 2, 2, 61, 190, 3, 2, 2, 2, 63, 197, 3, 2, 2, 2, 65, 200, 3, 2, 2,
|
||||
2, 67, 205, 3, 2, 2, 2, 69, 211, 3, 2, 2, 2, 71, 213, 3, 2, 2, 2, 73, 216,
|
||||
3, 2, 2, 2, 75, 221, 3, 2, 2, 2, 77, 226, 3, 2, 2, 2, 79, 230, 3, 2, 2,
|
||||
2, 81, 83, 9, 2, 2, 2, 82, 81, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 82,
|
||||
3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 86, 3, 2, 2, 2, 86, 87, 8, 2, 2, 2,
|
||||
87, 4, 3, 2, 2, 2, 88, 90, 9, 3, 2, 2, 89, 88, 3, 2, 2, 2, 90, 91, 3, 2,
|
||||
2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 6, 3, 2, 2, 2, 93, 101,
|
||||
7, 36, 2, 2, 94, 95, 7, 94, 2, 2, 95, 100, 11, 2, 2, 2, 96, 97, 7, 36,
|
||||
2, 2, 97, 100, 7, 36, 2, 2, 98, 100, 10, 4, 2, 2, 99, 94, 3, 2, 2, 2, 99,
|
||||
96, 3, 2, 2, 2, 99, 98, 3, 2, 2, 2, 100, 103, 3, 2, 2, 2, 101, 99, 3, 2,
|
||||
2, 2, 101, 102, 3, 2, 2, 2, 102, 104, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2,
|
||||
104, 105, 7, 36, 2, 2, 105, 8, 3, 2, 2, 2, 106, 114, 7, 41, 2, 2, 107,
|
||||
108, 7, 94, 2, 2, 108, 113, 11, 2, 2, 2, 109, 110, 7, 41, 2, 2, 110, 113,
|
||||
7, 41, 2, 2, 111, 113, 10, 5, 2, 2, 112, 107, 3, 2, 2, 2, 112, 109, 3,
|
||||
2, 2, 2, 112, 111, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2,
|
||||
2, 114, 115, 3, 2, 2, 2, 115, 117, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 117,
|
||||
118, 7, 41, 2, 2, 118, 10, 3, 2, 2, 2, 119, 120, 9, 6, 2, 2, 120, 12, 3,
|
||||
2, 2, 2, 121, 125, 9, 7, 2, 2, 122, 124, 9, 8, 2, 2, 123, 122, 3, 2, 2,
|
||||
2, 124, 127, 3, 2, 2, 2, 125, 123, 3, 2, 2, 2, 125, 126, 3, 2, 2, 2, 126,
|
||||
14, 3, 2, 2, 2, 127, 125, 3, 2, 2, 2, 128, 129, 7, 42, 2, 2, 129, 16, 3,
|
||||
2, 2, 2, 130, 131, 7, 43, 2, 2, 131, 18, 3, 2, 2, 2, 132, 133, 7, 46, 2,
|
||||
2, 133, 20, 3, 2, 2, 2, 134, 135, 7, 41, 2, 2, 135, 22, 3, 2, 2, 2, 136,
|
||||
137, 7, 36, 2, 2, 137, 24, 3, 2, 2, 2, 138, 141, 5, 21, 11, 2, 139, 141,
|
||||
5, 23, 12, 2, 140, 138, 3, 2, 2, 2, 140, 139, 3, 2, 2, 2, 141, 26, 3, 2,
|
||||
2, 2, 142, 143, 7, 67, 2, 2, 143, 144, 7, 80, 2, 2, 144, 145, 7, 70, 2,
|
||||
2, 145, 28, 3, 2, 2, 2, 146, 147, 7, 81, 2, 2, 147, 148, 7, 84, 2, 2, 148,
|
||||
30, 3, 2, 2, 2, 149, 150, 7, 90, 2, 2, 150, 151, 7, 81, 2, 2, 151, 152,
|
||||
7, 84, 2, 2, 152, 32, 3, 2, 2, 2, 153, 154, 7, 80, 2, 2, 154, 155, 7, 81,
|
||||
2, 2, 155, 156, 7, 86, 2, 2, 156, 34, 3, 2, 2, 2, 157, 158, 7, 44, 2, 2,
|
||||
158, 36, 3, 2, 2, 2, 159, 160, 7, 49, 2, 2, 160, 38, 3, 2, 2, 2, 161, 162,
|
||||
7, 39, 2, 2, 162, 40, 3, 2, 2, 2, 163, 164, 7, 45, 2, 2, 164, 42, 3, 2,
|
||||
2, 2, 165, 166, 7, 47, 2, 2, 166, 44, 3, 2, 2, 2, 167, 168, 7, 63, 2, 2,
|
||||
168, 46, 3, 2, 2, 2, 169, 170, 7, 35, 2, 2, 170, 171, 7, 63, 2, 2, 171,
|
||||
48, 3, 2, 2, 2, 172, 173, 7, 64, 2, 2, 173, 50, 3, 2, 2, 2, 174, 175, 7,
|
||||
64, 2, 2, 175, 176, 7, 63, 2, 2, 176, 52, 3, 2, 2, 2, 177, 178, 7, 62,
|
||||
2, 2, 178, 54, 3, 2, 2, 2, 179, 180, 7, 62, 2, 2, 180, 181, 7, 64, 2, 2,
|
||||
181, 56, 3, 2, 2, 2, 182, 183, 7, 62, 2, 2, 183, 184, 7, 63, 2, 2, 184,
|
||||
58, 3, 2, 2, 2, 185, 186, 7, 78, 2, 2, 186, 187, 7, 75, 2, 2, 187, 188,
|
||||
7, 77, 2, 2, 188, 189, 7, 71, 2, 2, 189, 60, 3, 2, 2, 2, 190, 191, 7, 71,
|
||||
2, 2, 191, 192, 7, 90, 2, 2, 192, 193, 7, 75, 2, 2, 193, 194, 7, 85, 2,
|
||||
2, 194, 195, 7, 86, 2, 2, 195, 196, 7, 85, 2, 2, 196, 62, 3, 2, 2, 2, 197,
|
||||
198, 7, 75, 2, 2, 198, 199, 7, 80, 2, 2, 199, 64, 3, 2, 2, 2, 200, 201,
|
||||
7, 86, 2, 2, 201, 202, 7, 84, 2, 2, 202, 203, 7, 87, 2, 2, 203, 204, 7,
|
||||
71, 2, 2, 204, 66, 3, 2, 2, 2, 205, 206, 7, 72, 2, 2, 206, 207, 7, 67,
|
||||
2, 2, 207, 208, 7, 78, 2, 2, 208, 209, 7, 85, 2, 2, 209, 210, 7, 71, 2,
|
||||
2, 210, 68, 3, 2, 2, 2, 211, 212, 5, 7, 4, 2, 212, 70, 3, 2, 2, 2, 213,
|
||||
214, 5, 9, 5, 2, 214, 72, 3, 2, 2, 2, 215, 217, 5, 11, 6, 2, 216, 215,
|
||||
3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2,
|
||||
2, 2, 219, 74, 3, 2, 2, 2, 220, 222, 9, 9, 2, 2, 221, 220, 3, 2, 2, 2,
|
||||
222, 223, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224,
|
||||
76, 3, 2, 2, 2, 225, 227, 9, 3, 2, 2, 226, 225, 3, 2, 2, 2, 227, 228, 3,
|
||||
2, 2, 2, 228, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 78, 3, 2, 2,
|
||||
2, 230, 234, 9, 7, 2, 2, 231, 233, 9, 8, 2, 2, 232, 231, 3, 2, 2, 2, 233,
|
||||
236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 80, 3,
|
||||
2, 2, 2, 236, 234, 3, 2, 2, 2, 15, 2, 84, 91, 99, 101, 112, 114, 125, 140,
|
||||
218, 223, 228, 234, 3, 8, 2, 2,
|
||||
}
|
||||
|
||||
var lexerChannelNames = []string{
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN",
|
||||
}
|
||||
|
||||
var lexerModeNames = []string{
|
||||
"DEFAULT_MODE",
|
||||
}
|
||||
|
||||
var lexerLiteralNames = []string{
|
||||
"", "", "'('", "')'", "','", "'''", "'\"'", "'AND'", "'OR'", "'XOR'", "'NOT'",
|
||||
"'*'", "'/'", "'%'", "'+'", "'-'", "'='", "'!='", "'>'", "'>='", "'<'",
|
||||
"'<>'", "'<='", "'LIKE'", "'EXISTS'", "'IN'", "'TRUE'", "'FALSE'",
|
||||
}
|
||||
|
||||
var lexerSymbolicNames = []string{
|
||||
"", "SPACE", "LR_BRACKET", "RR_BRACKET", "COMMA", "SINGLE_QUOTE_SYMB",
|
||||
"DOUBLE_QUOTE_SYMB", "AND", "OR", "XOR", "NOT", "STAR", "DIVIDE", "MODULE",
|
||||
"PLUS", "MINUS", "EQUAL", "NOT_EQUAL", "GREATER", "GREATER_OR_EQUAL", "LESS",
|
||||
"LESS_GREATER", "LESS_OR_EQUAL", "LIKE", "EXISTS", "IN", "TRUE", "FALSE",
|
||||
"DQUOTED_STRING_LITERAL", "SQUOTED_STRING_LITERAL", "INTEGER_LITERAL",
|
||||
"IDENTIFIER", "IDENTIFIER_WITH_NUMBER", "FUNCTION_IDENTIFIER_WITH_UNDERSCORE",
|
||||
}
|
||||
|
||||
var lexerRuleNames = []string{
|
||||
"SPACE", "ID_LITERAL", "DQUOTA_STRING", "SQUOTA_STRING", "INT_DIGIT", "FN_LITERAL",
|
||||
"LR_BRACKET", "RR_BRACKET", "COMMA", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB",
|
||||
"QUOTE_SYMB", "AND", "OR", "XOR", "NOT", "STAR", "DIVIDE", "MODULE", "PLUS",
|
||||
"MINUS", "EQUAL", "NOT_EQUAL", "GREATER", "GREATER_OR_EQUAL", "LESS", "LESS_GREATER",
|
||||
"LESS_OR_EQUAL", "LIKE", "EXISTS", "IN", "TRUE", "FALSE", "DQUOTED_STRING_LITERAL",
|
||||
"SQUOTED_STRING_LITERAL", "INTEGER_LITERAL", "IDENTIFIER", "IDENTIFIER_WITH_NUMBER",
|
||||
"FUNCTION_IDENTIFIER_WITH_UNDERSCORE",
|
||||
}
|
||||
|
||||
type CESQLParserLexer struct {
|
||||
*antlr.BaseLexer
|
||||
channelNames []string
|
||||
modeNames []string
|
||||
// TODO: EOF string
|
||||
}
|
||||
|
||||
// NewCESQLParserLexer produces a new lexer instance for the optional input antlr.CharStream.
|
||||
//
|
||||
// The *CESQLParserLexer instance produced may be reused by calling the SetInputStream method.
|
||||
// The initial lexer configuration is expensive to construct, and the object is not thread-safe;
|
||||
// however, if used within a Golang sync.Pool, the construction cost amortizes well and the
|
||||
// objects can be used in a thread-safe manner.
|
||||
func NewCESQLParserLexer(input antlr.CharStream) *CESQLParserLexer {
|
||||
l := new(CESQLParserLexer)
|
||||
lexerDeserializer := antlr.NewATNDeserializer(nil)
|
||||
lexerAtn := lexerDeserializer.DeserializeFromUInt16(serializedLexerAtn)
|
||||
lexerDecisionToDFA := make([]*antlr.DFA, len(lexerAtn.DecisionToState))
|
||||
for index, ds := range lexerAtn.DecisionToState {
|
||||
lexerDecisionToDFA[index] = antlr.NewDFA(ds, index)
|
||||
}
|
||||
l.BaseLexer = antlr.NewBaseLexer(input)
|
||||
l.Interpreter = antlr.NewLexerATNSimulator(l, lexerAtn, lexerDecisionToDFA, antlr.NewPredictionContextCache())
|
||||
|
||||
l.channelNames = lexerChannelNames
|
||||
l.modeNames = lexerModeNames
|
||||
l.RuleNames = lexerRuleNames
|
||||
l.LiteralNames = lexerLiteralNames
|
||||
l.SymbolicNames = lexerSymbolicNames
|
||||
l.GrammarFileName = "CESQLParser.g4"
|
||||
// TODO: l.EOF = antlr.TokenEOF
|
||||
|
||||
return l
|
||||
}
|
||||
|
||||
// CESQLParserLexer tokens.
|
||||
const (
|
||||
CESQLParserLexerSPACE = 1
|
||||
CESQLParserLexerLR_BRACKET = 2
|
||||
CESQLParserLexerRR_BRACKET = 3
|
||||
CESQLParserLexerCOMMA = 4
|
||||
CESQLParserLexerSINGLE_QUOTE_SYMB = 5
|
||||
CESQLParserLexerDOUBLE_QUOTE_SYMB = 6
|
||||
CESQLParserLexerAND = 7
|
||||
CESQLParserLexerOR = 8
|
||||
CESQLParserLexerXOR = 9
|
||||
CESQLParserLexerNOT = 10
|
||||
CESQLParserLexerSTAR = 11
|
||||
CESQLParserLexerDIVIDE = 12
|
||||
CESQLParserLexerMODULE = 13
|
||||
CESQLParserLexerPLUS = 14
|
||||
CESQLParserLexerMINUS = 15
|
||||
CESQLParserLexerEQUAL = 16
|
||||
CESQLParserLexerNOT_EQUAL = 17
|
||||
CESQLParserLexerGREATER = 18
|
||||
CESQLParserLexerGREATER_OR_EQUAL = 19
|
||||
CESQLParserLexerLESS = 20
|
||||
CESQLParserLexerLESS_GREATER = 21
|
||||
CESQLParserLexerLESS_OR_EQUAL = 22
|
||||
CESQLParserLexerLIKE = 23
|
||||
CESQLParserLexerEXISTS = 24
|
||||
CESQLParserLexerIN = 25
|
||||
CESQLParserLexerTRUE = 26
|
||||
CESQLParserLexerFALSE = 27
|
||||
CESQLParserLexerDQUOTED_STRING_LITERAL = 28
|
||||
CESQLParserLexerSQUOTED_STRING_LITERAL = 29
|
||||
CESQLParserLexerINTEGER_LITERAL = 30
|
||||
CESQLParserLexerIDENTIFIER = 31
|
||||
CESQLParserLexerIDENTIFIER_WITH_NUMBER = 32
|
||||
CESQLParserLexerFUNCTION_IDENTIFIER_WITH_UNDERSCORE = 33
|
||||
)
|
2356
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_parser.go
generated
vendored
Normal file
2356
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_parser.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
86
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_visitor.go
generated
vendored
Normal file
86
vendor/github.com/cloudevents/sdk-go/sql/v2/gen/cesqlparser_visitor.go
generated
vendored
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
// Code generated from CESQLParser.g4 by ANTLR 4.9. DO NOT EDIT.
|
||||
|
||||
package gen // CESQLParser
|
||||
import "github.com/antlr/antlr4/runtime/Go/antlr"
|
||||
|
||||
// A complete Visitor for a parse tree produced by CESQLParserParser.
|
||||
type CESQLParserVisitor interface {
|
||||
antlr.ParseTreeVisitor
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#cesql.
|
||||
VisitCesql(ctx *CesqlContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#inExpression.
|
||||
VisitInExpression(ctx *InExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#binaryComparisonExpression.
|
||||
VisitBinaryComparisonExpression(ctx *BinaryComparisonExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#atomExpression.
|
||||
VisitAtomExpression(ctx *AtomExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#existsExpression.
|
||||
VisitExistsExpression(ctx *ExistsExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#binaryLogicExpression.
|
||||
VisitBinaryLogicExpression(ctx *BinaryLogicExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#likeExpression.
|
||||
VisitLikeExpression(ctx *LikeExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#functionInvocationExpression.
|
||||
VisitFunctionInvocationExpression(ctx *FunctionInvocationExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#binaryMultiplicativeExpression.
|
||||
VisitBinaryMultiplicativeExpression(ctx *BinaryMultiplicativeExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#unaryLogicExpression.
|
||||
VisitUnaryLogicExpression(ctx *UnaryLogicExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#unaryNumericExpression.
|
||||
VisitUnaryNumericExpression(ctx *UnaryNumericExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#subExpression.
|
||||
VisitSubExpression(ctx *SubExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#binaryAdditiveExpression.
|
||||
VisitBinaryAdditiveExpression(ctx *BinaryAdditiveExpressionContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#booleanAtom.
|
||||
VisitBooleanAtom(ctx *BooleanAtomContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#integerAtom.
|
||||
VisitIntegerAtom(ctx *IntegerAtomContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#stringAtom.
|
||||
VisitStringAtom(ctx *StringAtomContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#identifierAtom.
|
||||
VisitIdentifierAtom(ctx *IdentifierAtomContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#identifier.
|
||||
VisitIdentifier(ctx *IdentifierContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#functionIdentifier.
|
||||
VisitFunctionIdentifier(ctx *FunctionIdentifierContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#booleanLiteral.
|
||||
VisitBooleanLiteral(ctx *BooleanLiteralContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#stringLiteral.
|
||||
VisitStringLiteral(ctx *StringLiteralContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#integerLiteral.
|
||||
VisitIntegerLiteral(ctx *IntegerLiteralContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#functionParameterList.
|
||||
VisitFunctionParameterList(ctx *FunctionParameterListContext) interface{}
|
||||
|
||||
// Visit a parse tree produced by CESQLParserParser#setExpression.
|
||||
VisitSetExpression(ctx *SetExpressionContext) interface{}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
module github.com/cloudevents/sdk-go/sql/v2
|
||||
|
||||
go 1.14
|
||||
|
||||
require (
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211221011931-643d94fcab96
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0
|
||||
github.com/stretchr/testify v1.5.1
|
||||
sigs.k8s.io/yaml v1.2.0
|
||||
)
|
|
@ -0,0 +1,55 @@
|
|||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211221011931-643d94fcab96 h1:2P/dm3KbCLnRHQN/Ma50elhMx1Si9loEZe5hOrsuvuE=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211221011931-643d94fcab96/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0 h1:kmRaLbsafZmidZ0rZ6h7WOMqCkRMcVTLV5lxV/HKQ9Y=
|
||||
github.com/cloudevents/sdk-go/v2 v2.8.0/go.mod h1:GpCBmUj7DIRiDhVvsK5d6WCbgTWs8DxAWTRtAwQmIXs=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
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=
|
||||
github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
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/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
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 v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
|
||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
|
||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
44
vendor/github.com/cloudevents/sdk-go/sql/v2/parser/case_changing_stream.go
generated
vendored
Normal file
44
vendor/github.com/cloudevents/sdk-go/sql/v2/parser/case_changing_stream.go
generated
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package parser
|
||||
|
||||
import (
|
||||
"unicode"
|
||||
|
||||
"github.com/antlr/antlr4/runtime/Go/antlr"
|
||||
)
|
||||
|
||||
// Took from https://github.com/antlr/antlr4/blob/master/doc/resources/case_changing_stream.go
|
||||
|
||||
// CaseChangingStream wraps an existing CharStream, but upper cases, or
|
||||
// lower cases the input before it is tokenized.
|
||||
type CaseChangingStream struct {
|
||||
antlr.CharStream
|
||||
|
||||
upper bool
|
||||
}
|
||||
|
||||
// NewCaseChangingStream returns a new CaseChangingStream that forces
|
||||
// all tokens read from the underlying stream to be either upper case
|
||||
// or lower case based on the upper argument.
|
||||
func NewCaseChangingStream(in antlr.CharStream, upper bool) *CaseChangingStream {
|
||||
return &CaseChangingStream{in, upper}
|
||||
}
|
||||
|
||||
// LA gets the value of the symbol at offset from the current position
|
||||
// from the underlying CharStream and converts it to either upper case
|
||||
// or lower case.
|
||||
func (is *CaseChangingStream) LA(offset int) int {
|
||||
in := is.CharStream.LA(offset)
|
||||
if in < 0 {
|
||||
// Such as antlr.TokenEOF which is -1
|
||||
return in
|
||||
}
|
||||
if is.upper {
|
||||
return int(unicode.ToUpper(rune(in)))
|
||||
}
|
||||
return int(unicode.ToLower(rune(in)))
|
||||
}
|
343
vendor/github.com/cloudevents/sdk-go/sql/v2/parser/expression_visitor.go
generated
vendored
Normal file
343
vendor/github.com/cloudevents/sdk-go/sql/v2/parser/expression_visitor.go
generated
vendored
Normal file
|
@ -0,0 +1,343 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package parser
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/antlr/antlr4/runtime/Go/antlr"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/expression"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/gen"
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
)
|
||||
|
||||
type expressionVisitor struct {
|
||||
parsingErrors []error
|
||||
}
|
||||
|
||||
var _ gen.CESQLParserVisitor = (*expressionVisitor)(nil)
|
||||
|
||||
func NewExpressionVisitor() gen.CESQLParserVisitor {
|
||||
return &expressionVisitor{}
|
||||
}
|
||||
|
||||
// antlr.ParseTreeVisitor implementation
|
||||
|
||||
func (v *expressionVisitor) Visit(tree antlr.ParseTree) interface{} {
|
||||
// If you're wondering why I had to manually implement this stuff:
|
||||
// https://github.com/antlr/antlr4/issues/2504
|
||||
switch tree.(type) {
|
||||
case *gen.CesqlContext:
|
||||
return v.VisitCesql(tree.(*gen.CesqlContext))
|
||||
case *gen.AtomExpressionContext:
|
||||
return v.VisitAtomExpression(tree.(*gen.AtomExpressionContext))
|
||||
case *gen.UnaryNumericExpressionContext:
|
||||
return v.VisitUnaryNumericExpression(tree.(*gen.UnaryNumericExpressionContext))
|
||||
case *gen.UnaryLogicExpressionContext:
|
||||
return v.VisitUnaryLogicExpression(tree.(*gen.UnaryLogicExpressionContext))
|
||||
case *gen.BooleanAtomContext:
|
||||
return v.VisitBooleanAtom(tree.(*gen.BooleanAtomContext))
|
||||
case *gen.BooleanLiteralContext:
|
||||
return v.VisitBooleanLiteral(tree.(*gen.BooleanLiteralContext))
|
||||
case *gen.IntegerAtomContext:
|
||||
return v.VisitIntegerAtom(tree.(*gen.IntegerAtomContext))
|
||||
case *gen.IntegerLiteralContext:
|
||||
return v.VisitIntegerLiteral(tree.(*gen.IntegerLiteralContext))
|
||||
case *gen.StringAtomContext:
|
||||
return v.VisitStringAtom(tree.(*gen.StringAtomContext))
|
||||
case *gen.StringLiteralContext:
|
||||
return v.VisitStringLiteral(tree.(*gen.StringLiteralContext))
|
||||
case *gen.ExistsExpressionContext:
|
||||
return v.VisitExistsExpression(tree.(*gen.ExistsExpressionContext))
|
||||
case *gen.InExpressionContext:
|
||||
return v.VisitInExpression(tree.(*gen.InExpressionContext))
|
||||
case *gen.IdentifierAtomContext:
|
||||
return v.VisitIdentifierAtom(tree.(*gen.IdentifierAtomContext))
|
||||
case *gen.IdentifierContext:
|
||||
return v.VisitIdentifier(tree.(*gen.IdentifierContext))
|
||||
case *gen.BinaryMultiplicativeExpressionContext:
|
||||
return v.VisitBinaryMultiplicativeExpression(tree.(*gen.BinaryMultiplicativeExpressionContext))
|
||||
case *gen.BinaryAdditiveExpressionContext:
|
||||
return v.VisitBinaryAdditiveExpression(tree.(*gen.BinaryAdditiveExpressionContext))
|
||||
case *gen.SubExpressionContext:
|
||||
return v.VisitSubExpression(tree.(*gen.SubExpressionContext))
|
||||
case *gen.BinaryLogicExpressionContext:
|
||||
return v.VisitBinaryLogicExpression(tree.(*gen.BinaryLogicExpressionContext))
|
||||
case *gen.BinaryComparisonExpressionContext:
|
||||
return v.VisitBinaryComparisonExpression(tree.(*gen.BinaryComparisonExpressionContext))
|
||||
case *gen.LikeExpressionContext:
|
||||
return v.VisitLikeExpression(tree.(*gen.LikeExpressionContext))
|
||||
case *gen.FunctionInvocationExpressionContext:
|
||||
return v.VisitFunctionInvocationExpression(tree.(*gen.FunctionInvocationExpressionContext))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitChildren(node antlr.RuleNode) interface{} {
|
||||
return v.Visit(node.GetChild(0).(antlr.ParseTree))
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitTerminal(node antlr.TerminalNode) interface{} {
|
||||
// We never visit terminal nodes
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitErrorNode(node antlr.ErrorNode) interface{} {
|
||||
// We already collect errors using the error listener
|
||||
return nil
|
||||
}
|
||||
|
||||
// gen.CESQLParserVisitor implementation
|
||||
|
||||
func (v *expressionVisitor) VisitInExpression(ctx *gen.InExpressionContext) interface{} {
|
||||
leftExpression := v.Visit(ctx.Expression()).(cesql.Expression)
|
||||
|
||||
var setExpression []cesql.Expression
|
||||
|
||||
for _, expr := range ctx.SetExpression().(*gen.SetExpressionContext).AllExpression() {
|
||||
setExpression = append(setExpression, v.Visit(expr).(cesql.Expression))
|
||||
}
|
||||
|
||||
if ctx.NOT() != nil {
|
||||
return expression.NewNotExpression(expression.NewInExpression(leftExpression, setExpression))
|
||||
}
|
||||
|
||||
return expression.NewInExpression(leftExpression, setExpression)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitBinaryComparisonExpression(ctx *gen.BinaryComparisonExpressionContext) interface{} {
|
||||
if ctx.LESS() != nil {
|
||||
return expression.NewLessExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else if ctx.LESS_OR_EQUAL() != nil {
|
||||
return expression.NewLessOrEqualExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else if ctx.GREATER() != nil {
|
||||
return expression.NewGreaterExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else if ctx.GREATER_OR_EQUAL() != nil {
|
||||
return expression.NewGreaterOrEqualExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else if ctx.EQUAL() != nil {
|
||||
return expression.NewEqualExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else {
|
||||
return expression.NewNotEqualExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitExistsExpression(ctx *gen.ExistsExpressionContext) interface{} {
|
||||
return expression.NewExistsExpression(strings.ToLower(ctx.Identifier().GetText()))
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitBinaryLogicExpression(ctx *gen.BinaryLogicExpressionContext) interface{} {
|
||||
if ctx.AND() != nil {
|
||||
return expression.NewAndExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else if ctx.OR() != nil {
|
||||
return expression.NewOrExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else {
|
||||
return expression.NewXorExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitLikeExpression(ctx *gen.LikeExpressionContext) interface{} {
|
||||
patternContext := ctx.StringLiteral().(*gen.StringLiteralContext)
|
||||
|
||||
var pattern string
|
||||
if patternContext.DQUOTED_STRING_LITERAL() != nil {
|
||||
// Parse double quoted string
|
||||
pattern = dQuotedStringToString(patternContext.DQUOTED_STRING_LITERAL().GetText())
|
||||
} else {
|
||||
// Parse single quoted string
|
||||
pattern = sQuotedStringToString(patternContext.SQUOTED_STRING_LITERAL().GetText())
|
||||
}
|
||||
|
||||
likeExpression, err := expression.NewLikeExpression(v.Visit(ctx.Expression()).(cesql.Expression), pattern)
|
||||
if err != nil {
|
||||
v.parsingErrors = append(v.parsingErrors, err)
|
||||
return noopExpression{}
|
||||
}
|
||||
|
||||
if ctx.NOT() != nil {
|
||||
return expression.NewNotExpression(likeExpression)
|
||||
}
|
||||
|
||||
return likeExpression
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitFunctionInvocationExpression(ctx *gen.FunctionInvocationExpressionContext) interface{} {
|
||||
paramsCtx := ctx.FunctionParameterList().(*gen.FunctionParameterListContext)
|
||||
|
||||
name := ctx.FunctionIdentifier().GetText()
|
||||
|
||||
var args []cesql.Expression
|
||||
for _, expr := range paramsCtx.AllExpression() {
|
||||
args = append(args, v.Visit(expr).(cesql.Expression))
|
||||
}
|
||||
|
||||
return expression.NewFunctionInvocationExpression(strings.ToUpper(name), args)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitBinaryMultiplicativeExpression(ctx *gen.BinaryMultiplicativeExpressionContext) interface{} {
|
||||
if ctx.STAR() != nil {
|
||||
return expression.NewMultiplicationExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else if ctx.MODULE() != nil {
|
||||
return expression.NewModuleExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else {
|
||||
return expression.NewDivisionExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitUnaryLogicExpression(ctx *gen.UnaryLogicExpressionContext) interface{} {
|
||||
return expression.NewNotExpression(
|
||||
v.Visit(ctx.Expression()).(cesql.Expression),
|
||||
)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitUnaryNumericExpression(ctx *gen.UnaryNumericExpressionContext) interface{} {
|
||||
return expression.NewNegateExpression(
|
||||
v.Visit(ctx.Expression()).(cesql.Expression),
|
||||
)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitSubExpression(ctx *gen.SubExpressionContext) interface{} {
|
||||
return v.Visit(ctx.Expression())
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitBinaryAdditiveExpression(ctx *gen.BinaryAdditiveExpressionContext) interface{} {
|
||||
if ctx.PLUS() != nil {
|
||||
return expression.NewSumExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
} else {
|
||||
return expression.NewDifferenceExpression(
|
||||
v.Visit(ctx.Expression(0)).(cesql.Expression),
|
||||
v.Visit(ctx.Expression(1)).(cesql.Expression),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitIdentifier(ctx *gen.IdentifierContext) interface{} {
|
||||
return expression.NewIdentifierExpression(strings.ToLower(ctx.GetText()))
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitBooleanLiteral(ctx *gen.BooleanLiteralContext) interface{} {
|
||||
return expression.NewLiteralExpression(ctx.TRUE() != nil)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitStringLiteral(ctx *gen.StringLiteralContext) interface{} {
|
||||
var str string
|
||||
if ctx.DQUOTED_STRING_LITERAL() != nil {
|
||||
// Parse double quoted string
|
||||
str = dQuotedStringToString(ctx.DQUOTED_STRING_LITERAL().GetText())
|
||||
} else {
|
||||
// Parse single quoted string
|
||||
str = sQuotedStringToString(ctx.SQUOTED_STRING_LITERAL().GetText())
|
||||
}
|
||||
|
||||
return expression.NewLiteralExpression(str)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitIntegerLiteral(ctx *gen.IntegerLiteralContext) interface{} {
|
||||
val, err := strconv.Atoi(ctx.GetText())
|
||||
if err != nil {
|
||||
v.parsingErrors = append(v.parsingErrors, err)
|
||||
}
|
||||
return expression.NewLiteralExpression(int32(val))
|
||||
}
|
||||
|
||||
// gen.CESQLParserVisitor implementation - noop methods
|
||||
|
||||
func (v *expressionVisitor) VisitCesql(ctx *gen.CesqlContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitAtomExpression(ctx *gen.AtomExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitBooleanAtom(ctx *gen.BooleanAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitIntegerAtom(ctx *gen.IntegerAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitStringAtom(ctx *gen.StringAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitIdentifierAtom(ctx *gen.IdentifierAtomContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitSetExpression(ctx *gen.SetExpressionContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitFunctionIdentifier(ctx *gen.FunctionIdentifierContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
func (v *expressionVisitor) VisitFunctionParameterList(ctx *gen.FunctionParameterListContext) interface{} {
|
||||
return v.VisitChildren(ctx)
|
||||
}
|
||||
|
||||
// noop expression. This is necessary to continue to walk through the tree, even if there's a failure in the parsing
|
||||
|
||||
type noopExpression struct{}
|
||||
|
||||
func (n noopExpression) Evaluate(cloudevents.Event) (interface{}, error) {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// Utilities
|
||||
|
||||
func dQuotedStringToString(str string) string {
|
||||
str = str[1 : len(str)-1]
|
||||
return strings.ReplaceAll(str, "\\\"", "\"")
|
||||
}
|
||||
|
||||
func sQuotedStringToString(str string) string {
|
||||
str = str[1 : len(str)-1]
|
||||
return strings.ReplaceAll(str, "\\'", "'")
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package parser
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/antlr/antlr4/runtime/Go/antlr"
|
||||
|
||||
"github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/gen"
|
||||
)
|
||||
|
||||
type Parser struct {
|
||||
// TODO parser options
|
||||
}
|
||||
|
||||
func (p *Parser) Parse(input string) (v2.Expression, error) {
|
||||
var is antlr.CharStream = antlr.NewInputStream(input)
|
||||
is = NewCaseChangingStream(is, true)
|
||||
|
||||
// Create the JSON Lexer
|
||||
lexer := gen.NewCESQLParserLexer(is)
|
||||
var stream antlr.TokenStream = antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel)
|
||||
|
||||
// Create the JSON Parser
|
||||
antlrParser := gen.NewCESQLParserParser(stream)
|
||||
antlrParser.RemoveErrorListeners()
|
||||
collectingErrorListener := errorListener{}
|
||||
antlrParser.AddErrorListener(&collectingErrorListener)
|
||||
|
||||
// Finally walk the tree
|
||||
visitor := expressionVisitor{}
|
||||
result := antlrParser.Cesql().Accept(&visitor)
|
||||
|
||||
if result == nil {
|
||||
return nil, mergeErrs(append(collectingErrorListener.errs, visitor.parsingErrors...))
|
||||
}
|
||||
|
||||
return result.(v2.Expression), mergeErrs(append(collectingErrorListener.errs, visitor.parsingErrors...))
|
||||
}
|
||||
|
||||
type errorListener struct {
|
||||
antlr.DefaultErrorListener
|
||||
errs []error
|
||||
}
|
||||
|
||||
func (d *errorListener) SyntaxError(recognizer antlr.Recognizer, offendingSymbol interface{}, line, column int, msg string, e antlr.RecognitionException) {
|
||||
d.errs = append(d.errs, fmt.Errorf("syntax error: %v", e.GetMessage()))
|
||||
}
|
||||
|
||||
func mergeErrs(errs []error) error {
|
||||
if len(errs) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var errStrings []string
|
||||
for _, err := range errs {
|
||||
errStrings = append(errStrings, err.Error())
|
||||
}
|
||||
|
||||
return errors.New(strings.Join(errStrings, ","))
|
||||
}
|
||||
|
||||
var defaultParser = Parser{}
|
||||
|
||||
func Parse(input string) (v2.Expression, error) {
|
||||
return defaultParser.Parse(input)
|
||||
}
|
107
vendor/github.com/cloudevents/sdk-go/sql/v2/runtime/functions_resolver.go
generated
vendored
Normal file
107
vendor/github.com/cloudevents/sdk-go/sql/v2/runtime/functions_resolver.go
generated
vendored
Normal file
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package runtime
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
"github.com/cloudevents/sdk-go/sql/v2/function"
|
||||
)
|
||||
|
||||
type functionItem struct {
|
||||
fixedArgsFunctions map[int]cesql.Function
|
||||
variadicFunction cesql.Function
|
||||
}
|
||||
|
||||
type functionTable map[string]*functionItem
|
||||
|
||||
func (table functionTable) AddFunction(function cesql.Function) error {
|
||||
item := table[function.Name()]
|
||||
if item == nil {
|
||||
item = &functionItem{
|
||||
fixedArgsFunctions: make(map[int]cesql.Function),
|
||||
}
|
||||
table[function.Name()] = item
|
||||
}
|
||||
|
||||
if function.IsVariadic() {
|
||||
if item.variadicFunction != nil {
|
||||
return errors.New("cannot add the variadic function, " +
|
||||
"because there is already another variadic function defined with the same name")
|
||||
}
|
||||
maxArity := -1
|
||||
for a := range item.fixedArgsFunctions {
|
||||
if a > maxArity {
|
||||
maxArity = a
|
||||
}
|
||||
}
|
||||
if maxArity >= function.Arity() {
|
||||
return errors.New("cannot add the variadic function, " +
|
||||
"because there is already another function defined with the same name and same or greater arity")
|
||||
}
|
||||
|
||||
item.variadicFunction = function
|
||||
return nil
|
||||
} else {
|
||||
if _, ok := item.fixedArgsFunctions[function.Arity()]; ok {
|
||||
return errors.New("cannot add the function, " +
|
||||
"because there is already another function defined with the same arity and same name")
|
||||
}
|
||||
|
||||
item.fixedArgsFunctions[function.Arity()] = function
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (table functionTable) ResolveFunction(name string, args int) cesql.Function {
|
||||
item := table[strings.ToUpper(name)]
|
||||
if item == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if fn, ok := item.fixedArgsFunctions[args]; ok {
|
||||
return fn
|
||||
}
|
||||
|
||||
if item.variadicFunction == nil || item.variadicFunction.Arity() > args {
|
||||
return nil
|
||||
}
|
||||
|
||||
return item.variadicFunction
|
||||
}
|
||||
|
||||
var globalFunctionTable = functionTable{}
|
||||
|
||||
func init() {
|
||||
for _, fn := range []cesql.Function{
|
||||
function.IntFunction,
|
||||
function.BoolFunction,
|
||||
function.StringFunction,
|
||||
function.IsBoolFunction,
|
||||
function.IsIntFunction,
|
||||
function.AbsFunction,
|
||||
function.LengthFunction,
|
||||
function.ConcatFunction,
|
||||
function.ConcatWSFunction,
|
||||
function.LowerFunction,
|
||||
function.UpperFunction,
|
||||
function.TrimFunction,
|
||||
function.LeftFunction,
|
||||
function.RightFunction,
|
||||
function.SubstringFunction,
|
||||
function.SubstringWithLengthFunction,
|
||||
} {
|
||||
if err := globalFunctionTable.AddFunction(fn); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func ResolveFunction(name string, args int) cesql.Function {
|
||||
return globalFunctionTable.ResolveFunction(name, args)
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package v2
|
||||
|
||||
type Type uint8
|
||||
|
||||
const (
|
||||
StringType Type = iota
|
||||
IntegerType
|
||||
BooleanType
|
||||
AnyType
|
||||
)
|
||||
|
||||
func TypePtr(t Type) *Type {
|
||||
return &t
|
||||
}
|
||||
|
||||
func (t Type) IsSameType(val interface{}) bool {
|
||||
return TypeFromVal(val) == t
|
||||
}
|
||||
|
||||
func (t Type) String() string {
|
||||
switch t {
|
||||
case IntegerType:
|
||||
return "Integer"
|
||||
case BooleanType:
|
||||
return "Boolean"
|
||||
case StringType:
|
||||
return "String"
|
||||
}
|
||||
return "Any"
|
||||
}
|
||||
|
||||
func TypeFromVal(val interface{}) Type {
|
||||
switch val.(type) {
|
||||
case string:
|
||||
return StringType
|
||||
case int32:
|
||||
return IntegerType
|
||||
case bool:
|
||||
return BooleanType
|
||||
}
|
||||
return AnyType
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
cesql "github.com/cloudevents/sdk-go/sql/v2"
|
||||
)
|
||||
|
||||
func Cast(val interface{}, target cesql.Type) (interface{}, error) {
|
||||
if target.IsSameType(val) {
|
||||
return val, nil
|
||||
}
|
||||
switch target {
|
||||
case cesql.StringType:
|
||||
switch val.(type) {
|
||||
case int32:
|
||||
return strconv.Itoa(int(val.(int32))), nil
|
||||
case bool:
|
||||
if val.(bool) {
|
||||
return "true", nil
|
||||
} else {
|
||||
return "false", nil
|
||||
}
|
||||
}
|
||||
// Casting to string is always defined
|
||||
return fmt.Sprintf("%v", val), nil
|
||||
case cesql.IntegerType:
|
||||
switch val.(type) {
|
||||
case string:
|
||||
v, err := strconv.Atoi(val.(string))
|
||||
if err != nil {
|
||||
err = fmt.Errorf("cannot cast from String to Integer: %w", err)
|
||||
}
|
||||
return int32(v), err
|
||||
}
|
||||
return 0, fmt.Errorf("undefined cast from %v to %v", cesql.TypeFromVal(val), target)
|
||||
case cesql.BooleanType:
|
||||
switch val.(type) {
|
||||
case string:
|
||||
lowerCase := strings.ToLower(val.(string))
|
||||
if lowerCase == "true" {
|
||||
return true, nil
|
||||
} else if lowerCase == "false" {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("cannot cast String to Boolean, actual value: %v", val)
|
||||
}
|
||||
return false, fmt.Errorf("undefined cast from %v to %v", cesql.TypeFromVal(val), target)
|
||||
}
|
||||
|
||||
// AnyType doesn't need casting
|
||||
return val, nil
|
||||
}
|
||||
|
||||
func CanCast(val interface{}, target cesql.Type) bool {
|
||||
_, err := Cast(val, target)
|
||||
return err == nil
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
cloudevents "github.com/cloudevents/sdk-go/v2"
|
||||
"github.com/cloudevents/sdk-go/v2/binding/spec"
|
||||
"github.com/cloudevents/sdk-go/v2/types"
|
||||
)
|
||||
|
||||
func GetAttribute(event cloudevents.Event, attributeName string) interface{} {
|
||||
var val interface{}
|
||||
|
||||
if a := spec.V1.Attribute(attributeName); a != nil { // Standard attribute
|
||||
val = a.Get(event.Context)
|
||||
} else {
|
||||
val = event.Extensions()[attributeName]
|
||||
}
|
||||
|
||||
if val == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Type cohercion
|
||||
switch val.(type) {
|
||||
case bool, int32, string:
|
||||
return val
|
||||
case int8:
|
||||
return int32(val.(int8))
|
||||
case uint8:
|
||||
return int32(val.(uint8))
|
||||
case int16:
|
||||
return int32(val.(int16))
|
||||
case uint16:
|
||||
return int32(val.(uint16))
|
||||
case uint32:
|
||||
return int32(val.(uint32))
|
||||
case int64:
|
||||
return int32(val.(int64))
|
||||
case uint64:
|
||||
return int32(val.(uint64))
|
||||
case time.Time:
|
||||
return val.(time.Time).Format(time.RFC3339Nano)
|
||||
case []byte:
|
||||
return types.FormatBinary(val.([]byte))
|
||||
}
|
||||
return fmt.Sprintf("%v", val)
|
||||
}
|
||||
|
||||
func ContainsAttribute(event cloudevents.Event, attributeName string) bool {
|
||||
if attributeName == "specversion" || attributeName == "id" || attributeName == "source" || attributeName == "type" {
|
||||
return true
|
||||
}
|
||||
|
||||
if attr := spec.V1.Attribute(attributeName); attr != nil {
|
||||
return attr.Get(event.Context) != nil
|
||||
}
|
||||
|
||||
_, ok := event.Extensions()[attributeName]
|
||||
return ok
|
||||
}
|
|
@ -128,11 +128,10 @@ func (c *ceClient) Send(ctx context.Context, e event.Event) protocol.Result {
|
|||
return err
|
||||
}
|
||||
|
||||
// Event has been defaulted and validated, record we are going to preform send.
|
||||
// Event has been defaulted and validated, record we are going to perform send.
|
||||
ctx, cb := c.observabilityService.RecordSendingEvent(ctx, e)
|
||||
defer cb(err)
|
||||
|
||||
err = c.sender.Send(ctx, (*binding.EventMessage)(&e))
|
||||
defer cb(err)
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -160,7 +159,6 @@ func (c *ceClient) Request(ctx context.Context, e event.Event) (*event.Event, pr
|
|||
|
||||
// Event has been defaulted and validated, record we are going to perform request.
|
||||
ctx, cb := c.observabilityService.RecordRequestEvent(ctx, e)
|
||||
defer cb(err, resp)
|
||||
|
||||
// If provided a requester, use it to do request/response.
|
||||
var msg binding.Message
|
||||
|
@ -186,7 +184,7 @@ func (c *ceClient) Request(ctx context.Context, e event.Event) (*event.Event, pr
|
|||
} else {
|
||||
resp = rs
|
||||
}
|
||||
|
||||
defer cb(err, resp)
|
||||
return resp, err
|
||||
}
|
||||
|
||||
|
|
|
@ -81,9 +81,9 @@ func (r *receiveInvoker) Invoke(ctx context.Context, m binding.Message, respFn p
|
|||
|
||||
var cb func(error)
|
||||
ctx, cb = r.observabilityService.RecordCallingInvoker(ctx, e)
|
||||
defer cb(result)
|
||||
|
||||
resp, result = r.fn.invoke(ctx, e)
|
||||
defer cb(result)
|
||||
return
|
||||
}()
|
||||
|
||||
|
@ -127,6 +127,9 @@ func (r *receiveInvoker) IsResponder() bool {
|
|||
|
||||
func computeInboundContext(message binding.Message, fallback context.Context, inboundContextDecorators []func(context.Context, binding.Message) context.Context) context.Context {
|
||||
result := fallback
|
||||
if mctx, ok := message.(binding.MessageContext); ok {
|
||||
result = cecontext.ValuesDelegating(mctx.Context(), fallback)
|
||||
}
|
||||
for _, f := range inboundContextDecorators {
|
||||
result = f(result, message)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package context
|
||||
|
||||
import "context"
|
||||
|
||||
type valuesDelegating struct {
|
||||
context.Context
|
||||
parent context.Context
|
||||
}
|
||||
|
||||
// ValuesDelegating wraps a child and parent context. It will perform Value()
|
||||
// lookups first on the child, and then fall back to the child. All other calls
|
||||
// go solely to the child context.
|
||||
func ValuesDelegating(child, parent context.Context) context.Context {
|
||||
return &valuesDelegating{
|
||||
Context: child,
|
||||
parent: parent,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *valuesDelegating) Value(key interface{}) interface{} {
|
||||
if val := c.Context.Value(key); val != nil {
|
||||
return val
|
||||
}
|
||||
return c.parent.Value(key)
|
||||
}
|
|
@ -20,6 +20,17 @@ const (
|
|||
CloudEventsVersionV03 = "0.3"
|
||||
)
|
||||
|
||||
var specV03Attributes = map[string]struct{}{
|
||||
"type": {},
|
||||
"source": {},
|
||||
"subject": {},
|
||||
"id": {},
|
||||
"time": {},
|
||||
"schemaurl": {},
|
||||
"datacontenttype": {},
|
||||
"datacontentencoding": {},
|
||||
}
|
||||
|
||||
// EventContextV03 represents the non-data attributes of a CloudEvents v0.3
|
||||
// event.
|
||||
type EventContextV03 struct {
|
||||
|
@ -78,11 +89,17 @@ func (ec EventContextV03) ExtensionAs(name string, obj interface{}) error {
|
|||
}
|
||||
}
|
||||
|
||||
// SetExtension adds the extension 'name' with value 'value' to the CloudEvents context.
|
||||
// SetExtension adds the extension 'name' with value 'value' to the CloudEvents
|
||||
// context. This function fails if the name uses a reserved event context key.
|
||||
func (ec *EventContextV03) SetExtension(name string, value interface{}) error {
|
||||
if ec.Extensions == nil {
|
||||
ec.Extensions = make(map[string]interface{})
|
||||
}
|
||||
|
||||
if _, ok := specV03Attributes[strings.ToLower(name)]; ok {
|
||||
return fmt.Errorf("bad key %q: CloudEvents spec attribute MUST NOT be overwritten by extension", name)
|
||||
}
|
||||
|
||||
if value == nil {
|
||||
delete(ec.Extensions, name)
|
||||
if len(ec.Extensions) == 0 {
|
||||
|
|
|
@ -21,6 +21,17 @@ const (
|
|||
CloudEventsVersionV1 = "1.0"
|
||||
)
|
||||
|
||||
var specV1Attributes = map[string]struct{}{
|
||||
"id": {},
|
||||
"source": {},
|
||||
"type": {},
|
||||
"datacontenttype": {},
|
||||
"subject": {},
|
||||
"time": {},
|
||||
"specversion": {},
|
||||
"dataschema": {},
|
||||
}
|
||||
|
||||
// EventContextV1 represents the non-data attributes of a CloudEvents v1.0
|
||||
// event.
|
||||
type EventContextV1 struct {
|
||||
|
@ -73,13 +84,18 @@ func (ec EventContextV1) ExtensionAs(name string, obj interface{}) error {
|
|||
return fmt.Errorf("unknown extension type %T", obj)
|
||||
}
|
||||
|
||||
// SetExtension adds the extension 'name' with value 'value' to the CloudEvents context.
|
||||
// This function fails if the name doesn't respect the regex ^[a-zA-Z0-9]+$
|
||||
// SetExtension adds the extension 'name' with value 'value' to the CloudEvents
|
||||
// context. This function fails if the name doesn't respect the regex
|
||||
// ^[a-zA-Z0-9]+$ or if the name uses a reserved event context key.
|
||||
func (ec *EventContextV1) SetExtension(name string, value interface{}) error {
|
||||
if err := validateExtensionName(name); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, ok := specV1Attributes[strings.ToLower(name)]; ok {
|
||||
return fmt.Errorf("bad key %q: CloudEvents spec attribute MUST NOT be overwritten by extension", name)
|
||||
}
|
||||
|
||||
name = strings.ToLower(name)
|
||||
if ec.Extensions == nil {
|
||||
ec.Extensions = make(map[string]interface{})
|
||||
|
|
|
@ -15,6 +15,7 @@ require (
|
|||
go.uber.org/multierr v1.1.0 // indirect
|
||||
go.uber.org/zap v1.10.0
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
|
||||
gopkg.in/yaml.v2 v2.3.0 // indirect
|
||||
)
|
||||
|
|
|
@ -37,6 +37,8 @@ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
|||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
nethttp "net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
type requestKey struct{}
|
||||
|
||||
// RequestData holds the http.Request information subset that can be
|
||||
// used to retrieve HTTP information for an incoming CloudEvent.
|
||||
type RequestData struct {
|
||||
URL *url.URL
|
||||
Header nethttp.Header
|
||||
RemoteAddr string
|
||||
Host string
|
||||
}
|
||||
|
||||
// WithRequestDataAtContext uses the http.Request to add RequestData
|
||||
// information to the Context.
|
||||
func WithRequestDataAtContext(ctx context.Context, r *nethttp.Request) context.Context {
|
||||
if r == nil {
|
||||
return ctx
|
||||
}
|
||||
|
||||
return context.WithValue(ctx, requestKey{}, &RequestData{
|
||||
URL: r.URL,
|
||||
Header: r.Header,
|
||||
RemoteAddr: r.RemoteAddr,
|
||||
Host: r.Host,
|
||||
})
|
||||
}
|
||||
|
||||
// RequestDataFromContext retrieves RequestData from the Context.
|
||||
// If not set nil is returned.
|
||||
func RequestDataFromContext(ctx context.Context) *RequestData {
|
||||
if req := ctx.Value(requestKey{}); req != nil {
|
||||
return req.(*RequestData)
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -248,7 +248,7 @@ func WithDefaultOptionsHandlerFunc(methods []string, rate int, origins []string,
|
|||
if p == nil {
|
||||
return fmt.Errorf("http OPTIONS handler func can not set nil protocol")
|
||||
}
|
||||
p.OptionsHandlerFn = p.DeleteHandlerFn
|
||||
p.OptionsHandlerFn = p.OptionsHandler
|
||||
p.WebhookConfig = &WebhookConfig{
|
||||
AllowedMethods: methods,
|
||||
AllowedRate: &rate,
|
||||
|
@ -277,3 +277,25 @@ func WithIsRetriableFunc(isRetriable IsRetriable) Option {
|
|||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func WithRateLimiter(rl RateLimiter) Option {
|
||||
return func(p *Protocol) error {
|
||||
if p == nil {
|
||||
return fmt.Errorf("http OPTIONS handler func can not set nil protocol")
|
||||
}
|
||||
p.limiter = rl
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithRequestDataAtContextMiddleware adds to the Context RequestData.
|
||||
// This enables a user's dispatch handler to inspect HTTP request information by
|
||||
// retrieving it from the Context.
|
||||
func WithRequestDataAtContextMiddleware() Option {
|
||||
return WithMiddleware(func(next nethttp.Handler) nethttp.Handler {
|
||||
return nethttp.HandlerFunc(func(w nethttp.ResponseWriter, r *nethttp.Request) {
|
||||
ctx := WithRequestDataAtContext(r.Context(), r)
|
||||
next.ServeHTTP(w, r.WithContext(ctx))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import (
|
|||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
@ -86,6 +87,7 @@ type Protocol struct {
|
|||
server *http.Server
|
||||
handlerRegistered bool
|
||||
middleware []Middleware
|
||||
limiter RateLimiter
|
||||
|
||||
isRetriableFunc IsRetriable
|
||||
}
|
||||
|
@ -115,6 +117,10 @@ func New(opts ...Option) (*Protocol, error) {
|
|||
p.isRetriableFunc = defaultIsRetriableFunc
|
||||
}
|
||||
|
||||
if p.limiter == nil {
|
||||
p.limiter = noOpLimiter{}
|
||||
}
|
||||
|
||||
return p, nil
|
||||
}
|
||||
|
||||
|
@ -277,6 +283,20 @@ func (p *Protocol) Respond(ctx context.Context) (binding.Message, protocol.Respo
|
|||
// ServeHTTP implements http.Handler.
|
||||
// Blocks until ResponseFn is invoked.
|
||||
func (p *Protocol) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
||||
// always apply limiter first using req context
|
||||
ok, reset, err := p.limiter.Allow(req.Context(), req)
|
||||
if err != nil {
|
||||
p.incoming <- msgErr{msg: nil, err: fmt.Errorf("unable to acquire rate limit token: %w", err)}
|
||||
rw.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if !ok {
|
||||
rw.Header().Add("Retry-After", strconv.Itoa(int(reset)))
|
||||
http.Error(rw, "limit exceeded", 429)
|
||||
return
|
||||
}
|
||||
|
||||
// Filter the GET style methods:
|
||||
switch req.Method {
|
||||
case http.MethodOptions:
|
||||
|
|
34
vendor/github.com/cloudevents/sdk-go/v2/protocol/http/protocol_rate.go
generated
vendored
Normal file
34
vendor/github.com/cloudevents/sdk-go/v2/protocol/http/protocol_rate.go
generated
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
Copyright 2021 The CloudEvents Authors
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type RateLimiter interface {
|
||||
// Allow attempts to take one token from the rate limiter for the specified
|
||||
// request. It returns ok when this operation was successful. In case ok is
|
||||
// false, reset will indicate the time in seconds when it is safe to perform
|
||||
// another attempt. An error is returned when this operation failed, e.g. due to
|
||||
// a backend error.
|
||||
Allow(ctx context.Context, r *http.Request) (ok bool, reset uint64, err error)
|
||||
// Close terminates rate limiter and cleans up any data structures or
|
||||
// connections that may remain open. After a store is stopped, Take() should
|
||||
// always return zero values.
|
||||
Close(ctx context.Context) error
|
||||
}
|
||||
|
||||
type noOpLimiter struct{}
|
||||
|
||||
func (n noOpLimiter) Allow(ctx context.Context, r *http.Request) (bool, uint64, error) {
|
||||
return true, 0, nil
|
||||
}
|
||||
|
||||
func (n noOpLimiter) Close(ctx context.Context) error {
|
||||
return nil
|
||||
}
|
|
@ -17,7 +17,7 @@
|
|||
// Package errdefs defines the common errors used throughout containerd
|
||||
// packages.
|
||||
//
|
||||
// Use with errors.Wrap and error.Wrapf to add context to an error.
|
||||
// Use with fmt.Errorf to add context to an error.
|
||||
//
|
||||
// To detect an error class, use the IsXXX functions to tell whether an error
|
||||
// is of a certain type.
|
||||
|
@ -28,8 +28,7 @@ package errdefs
|
|||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"errors"
|
||||
)
|
||||
|
||||
// Definitions of common error types used throughout containerd. All containerd
|
||||
|
|
|
@ -18,9 +18,9 @@ package errdefs
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
@ -68,9 +68,9 @@ func ToGRPC(err error) error {
|
|||
// ToGRPCf maps the error to grpc error codes, assembling the formatting string
|
||||
// and combining it with the target error string.
|
||||
//
|
||||
// This is equivalent to errors.ToGRPC(errors.Wrapf(err, format, args...))
|
||||
// This is equivalent to errdefs.ToGRPC(fmt.Errorf("%s: %w", fmt.Sprintf(format, args...), err))
|
||||
func ToGRPCf(err error, format string, args ...interface{}) error {
|
||||
return ToGRPC(errors.Wrapf(err, format, args...))
|
||||
return ToGRPC(fmt.Errorf("%s: %w", fmt.Sprintf(format, args...), err))
|
||||
}
|
||||
|
||||
// FromGRPC returns the underlying error from a grpc service based on the grpc error code
|
||||
|
@ -104,9 +104,9 @@ func FromGRPC(err error) error {
|
|||
|
||||
msg := rebaseMessage(cls, err)
|
||||
if msg != "" {
|
||||
err = errors.Wrap(cls, msg)
|
||||
err = fmt.Errorf("%s: %w", msg, cls)
|
||||
} else {
|
||||
err = errors.WithStack(cls)
|
||||
err = cls
|
||||
}
|
||||
|
||||
return err
|
||||
|
|
|
@ -52,7 +52,8 @@ const (
|
|||
// WithLogger returns a new context with the provided logger. Use in
|
||||
// combination with logger.WithField(s) for great effect.
|
||||
func WithLogger(ctx context.Context, logger *logrus.Entry) context.Context {
|
||||
return context.WithValue(ctx, loggerKey{}, logger)
|
||||
e := logger.WithContext(ctx)
|
||||
return context.WithValue(ctx, loggerKey{}, e)
|
||||
}
|
||||
|
||||
// GetLogger retrieves the current logger from the context. If no logger is
|
||||
|
@ -61,7 +62,7 @@ func GetLogger(ctx context.Context) *logrus.Entry {
|
|||
logger := ctx.Value(loggerKey{})
|
||||
|
||||
if logger == nil {
|
||||
return L
|
||||
return L.WithContext(ctx)
|
||||
}
|
||||
|
||||
return logger.(*logrus.Entry)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !linux
|
||||
// +build !linux
|
||||
|
||||
/*
|
||||
|
|
|
@ -38,12 +38,22 @@ func platformVector(platform specs.Platform) []specs.Platform {
|
|||
|
||||
switch platform.Architecture {
|
||||
case "amd64":
|
||||
if amd64Version, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, "v")); err == nil && amd64Version > 1 {
|
||||
for amd64Version--; amd64Version >= 1; amd64Version-- {
|
||||
vector = append(vector, specs.Platform{
|
||||
Architecture: platform.Architecture,
|
||||
OS: platform.OS,
|
||||
OSVersion: platform.OSVersion,
|
||||
OSFeatures: platform.OSFeatures,
|
||||
Variant: "v" + strconv.Itoa(amd64Version),
|
||||
})
|
||||
}
|
||||
}
|
||||
vector = append(vector, specs.Platform{
|
||||
Architecture: "386",
|
||||
OS: platform.OS,
|
||||
OSVersion: platform.OSVersion,
|
||||
OSFeatures: platform.OSFeatures,
|
||||
Variant: platform.Variant,
|
||||
})
|
||||
case "arm":
|
||||
if armVersion, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, "v")); err == nil && armVersion > 5 {
|
||||
|
|
|
@ -18,6 +18,7 @@ package platforms
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
@ -25,7 +26,6 @@ import (
|
|||
|
||||
"github.com/containerd/containerd/errdefs"
|
||||
"github.com/containerd/containerd/log"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// Present the ARM instruction set architecture, eg: v7, v8
|
||||
|
@ -48,7 +48,7 @@ func cpuVariant() string {
|
|||
// by ourselves. We can just parse these information from /proc/cpuinfo
|
||||
func getCPUInfo(pattern string) (info string, err error) {
|
||||
if !isLinuxOS(runtime.GOOS) {
|
||||
return "", errors.Wrapf(errdefs.ErrNotImplemented, "getCPUInfo for OS %s", runtime.GOOS)
|
||||
return "", fmt.Errorf("getCPUInfo for OS %s: %w", runtime.GOOS, errdefs.ErrNotImplemented)
|
||||
}
|
||||
|
||||
cpuinfo, err := os.Open("/proc/cpuinfo")
|
||||
|
@ -75,7 +75,7 @@ func getCPUInfo(pattern string) (info string, err error) {
|
|||
return "", err
|
||||
}
|
||||
|
||||
return "", errors.Wrapf(errdefs.ErrNotFound, "getCPUInfo for pattern: %s", pattern)
|
||||
return "", fmt.Errorf("getCPUInfo for pattern: %s: %w", pattern, errdefs.ErrNotFound)
|
||||
}
|
||||
|
||||
func getCPUVariant() string {
|
||||
|
|
|
@ -38,7 +38,7 @@ func isLinuxOS(os string) bool {
|
|||
// The OS value should be normalized before calling this function.
|
||||
func isKnownOS(os string) bool {
|
||||
switch os {
|
||||
case "aix", "android", "darwin", "dragonfly", "freebsd", "hurd", "illumos", "js", "linux", "nacl", "netbsd", "openbsd", "plan9", "solaris", "windows", "zos":
|
||||
case "aix", "android", "darwin", "dragonfly", "freebsd", "hurd", "illumos", "ios", "js", "linux", "nacl", "netbsd", "openbsd", "plan9", "solaris", "windows", "zos":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -60,7 +60,7 @@ func isArmArch(arch string) bool {
|
|||
// The arch value should be normalized before being passed to this function.
|
||||
func isKnownArch(arch string) bool {
|
||||
switch arch {
|
||||
case "386", "amd64", "amd64p32", "arm", "armbe", "arm64", "arm64be", "ppc64", "ppc64le", "mips", "mipsle", "mips64", "mips64le", "mips64p32", "mips64p32le", "ppc", "riscv", "riscv64", "s390", "s390x", "sparc", "sparc64", "wasm":
|
||||
case "386", "amd64", "amd64p32", "arm", "armbe", "arm64", "arm64be", "ppc64", "ppc64le", "loong64", "mips", "mipsle", "mips64", "mips64le", "mips64p32", "mips64p32le", "ppc", "riscv", "riscv64", "s390", "s390x", "sparc", "sparc64", "wasm":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -86,9 +86,11 @@ func normalizeArch(arch, variant string) (string, string) {
|
|||
case "i386":
|
||||
arch = "386"
|
||||
variant = ""
|
||||
case "x86_64", "x86-64":
|
||||
case "x86_64", "x86-64", "amd64":
|
||||
arch = "amd64"
|
||||
variant = ""
|
||||
if variant == "v1" {
|
||||
variant = ""
|
||||
}
|
||||
case "aarch64", "arm64":
|
||||
arch = "arm64"
|
||||
switch variant {
|
||||
|
|
|
@ -16,27 +16,11 @@
|
|||
|
||||
package platforms
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
|
||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
)
|
||||
|
||||
// DefaultString returns the default string specifier for the platform.
|
||||
func DefaultString() string {
|
||||
return Format(DefaultSpec())
|
||||
}
|
||||
|
||||
// DefaultSpec returns the current platform's default platform specification.
|
||||
func DefaultSpec() specs.Platform {
|
||||
return specs.Platform{
|
||||
OS: runtime.GOOS,
|
||||
Architecture: runtime.GOARCH,
|
||||
// The Variant field will be empty if arch != ARM.
|
||||
Variant: cpuVariant(),
|
||||
}
|
||||
}
|
||||
|
||||
// DefaultStrict returns strict form of Default.
|
||||
func DefaultStrict() MatchComparer {
|
||||
return OnlyStrict(DefaultSpec())
|
||||
|
|
45
vendor/github.com/containerd/containerd/platforms/defaults_darwin.go
generated
vendored
Normal file
45
vendor/github.com/containerd/containerd/platforms/defaults_darwin.go
generated
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
//go:build darwin
|
||||
// +build darwin
|
||||
|
||||
/*
|
||||
Copyright The containerd Authors.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
package platforms
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
|
||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
)
|
||||
|
||||
// DefaultSpec returns the current platform's default platform specification.
|
||||
func DefaultSpec() specs.Platform {
|
||||
return specs.Platform{
|
||||
OS: runtime.GOOS,
|
||||
Architecture: runtime.GOARCH,
|
||||
// The Variant field will be empty if arch != ARM.
|
||||
Variant: cpuVariant(),
|
||||
}
|
||||
}
|
||||
|
||||
// Default returns the default matcher for the platform.
|
||||
func Default() MatchComparer {
|
||||
return Ordered(DefaultSpec(), specs.Platform{
|
||||
// darwin runtime also supports Linux binary via runu/LKL
|
||||
OS: "linux",
|
||||
Architecture: runtime.GOARCH,
|
||||
})
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue