master
李光春 2 years ago
parent 9bc3033360
commit 64b68e26b6

@ -7,7 +7,7 @@ require (
gitee.com/chunanyong/zorm v1.5.6
github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible
github.com/allegro/bigcache/v3 v3.0.2
github.com/aws/aws-sdk-go v1.44.58
github.com/aws/aws-sdk-go v1.44.61
github.com/baidubce/bce-sdk-go v0.9.130
github.com/basgys/goxml2json v1.1.0
github.com/beego/beego/v2 v2.0.4
@ -25,7 +25,7 @@ require (
github.com/go-redis/redis/v8 v8.11.5
github.com/go-redis/redis/v9 v9.0.0-beta.1
github.com/go-sql-driver/mysql v1.6.0
github.com/godror/godror v0.33.3
github.com/godror/godror v0.34.0
github.com/gomodule/redigo v2.0.0+incompatible
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible
github.com/jasonlvhit/gocron v0.0.1
@ -60,8 +60,8 @@ require (
go.etcd.io/etcd/client/v3 v3.5.4
go.mongodb.org/mongo-driver v1.10.0
go.uber.org/zap v1.21.0
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d
golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c
golang.org/x/text v0.3.7
google.golang.org/grpc v1.48.0
google.golang.org/protobuf v1.28.0
@ -93,7 +93,7 @@ require (
github.com/docker/go-units v0.4.0 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
github.com/edsrzf/mmap-go v1.1.0 // indirect
github.com/emicklei/go-restful/v3 v3.8.0 // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/fsnotify/fsnotify v1.5.4 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/glebarez/go-sqlite v1.17.3 // indirect
@ -131,7 +131,7 @@ require (
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/klauspost/compress v1.15.8 // indirect
github.com/klauspost/compress v1.15.9 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
@ -168,14 +168,14 @@ require (
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.8.0 // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect
golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect
golang.org/x/tools v0.1.11 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f // indirect
google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
@ -191,7 +191,7 @@ require (
mellium.im/sasl v0.2.1 // indirect
modernc.org/b v1.0.2 // indirect
modernc.org/cc/v3 v3.36.0 // indirect
modernc.org/ccgo/v3 v3.16.7 // indirect
modernc.org/ccgo/v3 v3.16.8 // indirect
modernc.org/db v1.0.4 // indirect
modernc.org/file v1.0.3 // indirect
modernc.org/fileutil v1.1.0 // indirect

@ -96,8 +96,10 @@ github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQ
github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.42.27/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc=
github.com/aws/aws-sdk-go v1.44.58 h1:VPfVj0Fa1v+/8HUegdNvGg9XtmuJ3z08WerBuT730gk=
github.com/aws/aws-sdk-go v1.44.58/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
github.com/aws/aws-sdk-go v1.44.60 h1:KTTogelVR+4dWiIPl7eyxoxaJkziChON6/Y/hVfTipk=
github.com/aws/aws-sdk-go v1.44.60/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
github.com/aws/aws-sdk-go v1.44.61 h1:NcpLSS3Z0MiVQIYugx4I40vSIEEAXT0baO684ExNRco=
github.com/aws/aws-sdk-go v1.44.61/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
github.com/baidubce/bce-sdk-go v0.9.130 h1:5FYIocNnGKl72/+Ei+xyScl3Asmw7O+H9q8bv/H/ttI=
github.com/baidubce/bce-sdk-go v0.9.130/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg=
@ -201,8 +203,8 @@ github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8E
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw=
github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@ -311,8 +313,8 @@ github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGF
github.com/goccy/go-json v0.9.10 h1:hCeNmprSNLB8B8vQKWl6DpuH0t60oEs+TAk9a7CScKc=
github.com/goccy/go-json v0.9.10/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godror/godror v0.33.3 h1:GyjbWV0cKGDTRe1KClB1c+bCKXpn27UlIjwyNZs1qpg=
github.com/godror/godror v0.33.3/go.mod h1:FbrZ7po7LyS3gUTdW/K1+kIoePvP/E044HpwptL4vqw=
github.com/godror/godror v0.34.0 h1:/D40cxuWY3PtMa1oIcfXqqInlts5anEL3vj6IkTW8Q8=
github.com/godror/godror v0.34.0/go.mod h1:9QtjJWw+r1v9zh93Qx+hSOfYRVgj11a/7TUnU/00Wbc=
github.com/godror/knownpb v0.1.0 h1:dJPK8s/I3PQzGGaGcUStL2zIaaICNzKKAK8BzP1uLio=
github.com/godror/knownpb v0.1.0/go.mod h1:4nRFbQo1dDuwKnblRXDxrfCFYeT4hjg3GjMqef58eRE=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
@ -391,7 +393,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
@ -580,8 +581,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.15.8 h1:JahtItbkWjf2jzm/T+qgMxkP9EMHsqEUA6vCMGmXvhA=
github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@ -695,7 +696,6 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/ulid/v2 v2.0.2 h1:r4fFzBm+bv0wNKNh5eXTwU7i85y5x+uwkxCUTNVQqLc=
github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@ -728,7 +728,6 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw=
@ -991,6 +990,8 @@ golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@ -1080,6 +1081,8 @@ golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qx
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220708220712-1185a9018129 h1:vucSRfWwTsoXro7P+3Cjlr6flUMtzCwzlvkxEQtHHB0=
golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -1094,6 +1097,8 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68=
golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY=
golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -1106,9 +1111,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8=
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -1187,13 +1193,18 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220721230656-c6bc011c0c49 h1:TMjZDarEwf621XDryfitp/8awEhiZNiwgphKlTMGRIg=
golang.org/x/sys v0.0.0-20220721230656-c6bc011c0c49/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc=
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -1211,6 +1222,8 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U=
golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ=
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/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-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@ -1359,8 +1372,10 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f h1:P8EiVSxZwC6xH2niv2N66aqwMtYFg+D54gbjpcqKJtM=
google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE=
google.golang.org/genproto v0.0.0-20220720214146-176da50484ac h1:EOa+Yrhx1C0O+4pHeXeWrCwdI0tWI6IfUU56Vebs9wQ=
google.golang.org/genproto v0.0.0-20220720214146-176da50484ac/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE=
google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 h1:G5AjFxR+ibe9Taamo0TdW+iylfBYK10DSkHYdx7PZ9w=
google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
@ -1557,8 +1572,8 @@ modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6r
modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
modernc.org/ccgo/v3 v3.16.7 h1:aX3IUFUc5Gy+GkLh2lu866tybZkg4e8Ccfs7dKNzYGI=
modernc.org/ccgo/v3 v3.16.7/go.mod h1:ruJe28kDQ8nvFDJu3k7lCcD81Dbij6LC7/pSMaujEkQ=
modernc.org/ccgo/v3 v3.16.8 h1:G0QNlTqI5uVgczBWfGKs7B++EPwCfXPWGD2MdeKloDs=
modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws=
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
@ -1621,7 +1636,6 @@ modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A=
modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU=
modernc.org/libc v1.16.7/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU=
modernc.org/libc v1.16.8/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU=
modernc.org/libc v1.16.10/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU=
modernc.org/libc v1.16.17 h1:rXo8IZJvP+QSN1KrlV23dtkM3XfGYXjx3RbLLzBtndM=
modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU=
modernc.org/lldb v1.0.2/go.mod h1:ovbKqyzA9H/iPwHkAOH0qJbIQVT9rlijecenxDwVUi0=

@ -1,5 +1,5 @@
package go_library
func Version() string {
return "v1.0.48"
return "v1.0.49"
}

@ -1,7 +1,7 @@
package pinduoduo
const (
apiUrl = "https://whois.pconline.com.cn"
apiUrl = "https://gw-api.pinduoduo.com/api/router"
)
const (

@ -15882,6 +15882,9 @@ var awsPartition = partition{
endpointKey{
Region: "ap-southeast-2",
}: endpoint{},
endpointKey{
Region: "ap-southeast-3",
}: endpoint{},
endpointKey{
Region: "ca-central-1",
}: endpoint{},
@ -24203,6 +24206,18 @@ var awsPartition = partition{
},
"workspaces-web": service{
Endpoints: serviceEndpoints{
endpointKey{
Region: "ap-northeast-1",
}: endpoint{},
endpointKey{
Region: "ap-south-1",
}: endpoint{},
endpointKey{
Region: "ap-southeast-1",
}: endpoint{},
endpointKey{
Region: "ap-southeast-2",
}: endpoint{},
endpointKey{
Region: "eu-west-1",
}: endpoint{},
@ -31741,6 +31756,9 @@ var awsisoPartition = partition{
endpointKey{
Region: "us-iso-east-1",
}: endpoint{},
endpointKey{
Region: "us-iso-west-1",
}: endpoint{},
},
},
"sts": service{

@ -5,4 +5,4 @@ package aws
const SDKName = "aws-sdk-go"
// SDKVersion is the version of this SDK
const SDKVersion = "1.44.58"
const SDKVersion = "1.44.61"

@ -1,5 +1,9 @@
# Change history of go-restful
## [v3.9.0] - 20221-07-21
- add support for http.Handler implementations to work as FilterFunction, issue #504 (thanks to https://github.com/ggicci)
## [v3.8.0] - 20221-06-06
- use exact matching of allowed domain entries, issue #489 (#493)

@ -84,6 +84,7 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo
- Route errors produce HTTP 404/405/406/415 errors, customizable using ServiceErrorHandler(...)
- Configurable (trace) logging
- Customizable gzip/deflate readers and writers using CompressorProvider registration
- Inject your own http.Handler using the `HttpMiddlewareHandlerToFilter` function
## How to customize
There are several hooks to customize the behavior of the go-restful package.
@ -94,7 +95,7 @@ There are several hooks to customize the behavior of the go-restful package.
- Trace logging
- Compression
- Encoders for other serializers
- Use [jsoniter](https://github.com/json-iterator/go) by build this package using a tag, e.g. `go build -tags=jsoniter .`
- Use [jsoniter](https://github.com/json-iterator/go) by building this package using a build tag, e.g. `go build -tags=jsoniter .`
## Resources

@ -0,0 +1,21 @@
package restful
import (
"net/http"
)
// HttpMiddlewareHandler is a function that takes a http.Handler and returns a http.Handler
type HttpMiddlewareHandler func(http.Handler) http.Handler
// HttpMiddlewareHandlerToFilter converts a HttpMiddlewareHandler to a FilterFunction.
func HttpMiddlewareHandlerToFilter(middleware HttpMiddlewareHandler) FilterFunction {
return func(req *Request, resp *Response, chain *FilterChain) {
next := http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
req.Request = r
resp.ResponseWriter = rw
chain.ProcessFilter(req, resp)
})
middleware(next).ServeHTTP(resp.ResponseWriter, req.Request)
}
}

@ -22,6 +22,9 @@ const (
// FormParameterKind = indicator of Request parameter type "form"
FormParameterKind
// MultiPartFormParameterKind = indicator of Request parameter type "multipart/form-data"
MultiPartFormParameterKind
// CollectionFormatCSV comma separated values `foo,bar`
CollectionFormatCSV = CollectionFormat("csv")
@ -108,6 +111,11 @@ func (p *Parameter) beForm() *Parameter {
return p
}
func (p *Parameter) beMultiPartForm() *Parameter {
p.data.Kind = MultiPartFormParameterKind
return p
}
// Required sets the required field and returns the receiver
func (p *Parameter) Required(required bool) *Parameter {
p.data.Required = required

@ -165,6 +165,18 @@ func FormParameter(name, description string) *Parameter {
return p
}
// MultiPartFormParameter creates a new Parameter of kind Form (using multipart/form-data) for documentation purposes.
// It is initialized as required with string as its DataType.
func (w *WebService) MultiPartFormParameter(name, description string) *Parameter {
return MultiPartFormParameter(name, description)
}
func MultiPartFormParameter(name, description string) *Parameter {
p := &Parameter{&ParameterData{Name: name, Description: description, Required: false, DataType: "string"}}
p.beMultiPartForm()
return p
}
// Route creates a new Route using the RouteBuilder and add to the ordered list of Routes.
func (w *WebService) Route(builder *RouteBuilder) *WebService {
w.routesLock.Lock()

@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
## [v0.34.0]
### Added
- ObjectType.AttributeNames() returns the attribute names in DB order.
- PoolStats has a DBStats method to convert it to sql.DBStats.
- By embedding godror.ObjectTypeName and setting the field tag with `"godror:,type=my_pkg.type"` you can use structs in place of Oracle objects in ExecStmt.
## [v0.33.0]
### Changed
- SetLogger accept github.com/go-logr/logr.Logger

@ -58,8 +58,9 @@ type conn struct {
poolKey string
Server VersionInfo
params dsn.ConnectionParams
tzOffSecs int
mu sync.RWMutex
objTypes map[string]*ObjectType
tzOffSecs int
inTransaction bool
released bool
tzValid bool
@ -248,6 +249,10 @@ func (c *conn) closeNotLocking() error {
if dpiConn.refCount <= 1 {
c.tzOffSecs, c.tzValid, c.params.Timezone = 0, false, nil
}
for k, v := range c.objTypes {
v.Close()
delete(c.objTypes, k)
}
// dpiConn_release decrements dpiConn's reference counting,
// and closes it when it reaches zero.
@ -453,7 +458,7 @@ func (c *conn) newVar(vi varInfo) (*C.dpiVar, []C.dpiData, error) {
}); err != nil {
return nil, nil, fmt.Errorf("newVar(typ=%d, natTyp=%d, sliceLen=%d, bufSize=%d): %w", vi.Typ, vi.NatTyp, vi.SliceLen, vi.BufSize, err)
}
return v, dpiDataSlice(dataArr, C.uint(vi.SliceLen)), nil
return v, unsafe.Slice(dataArr, vi.SliceLen), nil
}
var _ = driver.Tx((*conn)(nil))

@ -69,6 +69,7 @@ func (d *Data) SetBool(b bool) {
if b {
i = 1
}
d.NativeTypeNum = C.DPI_NATIVE_TYPE_BOOLEAN
C.dpiData_setBool(&d.dpiData, i)
}
@ -91,6 +92,7 @@ func (d *Data) SetBytes(b []byte) {
d.dpiData.isNull = 1
return
}
d.NativeTypeNum = C.DPI_NATIVE_TYPE_BYTES
C.dpiData_setBytes(&d.dpiData, (*C.char)(unsafe.Pointer(&b[0])), C.uint32_t(len(b)))
}
@ -105,6 +107,7 @@ func (d *Data) GetFloat32() float32 {
// SetFloat32 sets the data as float32.
func (d *Data) SetFloat32(f float32) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_FLOAT
C.dpiData_setFloat(&d.dpiData, C.float(f))
}
@ -120,6 +123,7 @@ func (d *Data) GetFloat64() float64 {
// SetFloat64 sets the data as float64.
func (d *Data) SetFloat64(f float64) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_DOUBLE
C.dpiData_setDouble(&d.dpiData, C.double(f))
}
@ -139,6 +143,7 @@ func (d *Data) GetInt64() int64 {
// SetInt64 sets the data as int64.
func (d *Data) SetInt64(i int64) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64
C.dpiData_setInt64(&d.dpiData, C.int64_t(i))
}
@ -167,6 +172,7 @@ func (d *Data) SetIntervalDS(dur time.Duration) {
dur, rem = rem, dur%time.Second
secs := C.int32_t(dur / time.Second)
fsecs := C.int32_t(rem)
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_DS
C.dpiData_setIntervalDS(&d.dpiData, days, hrs, mins, secs, fsecs)
}
@ -182,6 +188,7 @@ func (d *Data) GetIntervalYM() IntervalYM {
// SetIntervalYM sets IntervalYM to the data.
func (d *Data) SetIntervalYM(ym IntervalYM) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_YM
C.dpiData_setIntervalYM(&d.dpiData, C.int32_t(ym.Years), C.int32_t(ym.Months))
}
@ -195,6 +202,7 @@ func (d *Data) GetLob() *Lob {
// SetLob sets Lob to the data.
func (d *Data) SetLob(lob *DirectLob) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_LOB
C.dpiData_setLOB(&d.dpiData, lob.dpiLob)
}
@ -227,6 +235,8 @@ func (d *Data) GetObject() *Object {
// SetObject sets Object to data.
func (d *Data) SetObject(o *Object) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_OBJECT
d.ObjectType = o.ObjectType
C.dpiData_setObject(&d.dpiData, o.dpiObject)
}
@ -240,6 +250,7 @@ func (d *Data) GetStmt() driver.Stmt {
// SetStmt sets Stmt to data.
func (d *Data) SetStmt(s *statement) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_STMT
C.dpiData_setStmt(&d.dpiData, s.dpiStmt)
}
@ -268,6 +279,7 @@ func (d *Data) SetTime(t time.Time) {
if d.dpiData.isNull == 1 {
return
}
d.NativeTypeNum = C.DPI_NATIVE_TYPE_TIMESTAMP
_, z := t.Zone()
C.dpiData_setTimestamp(&d.dpiData,
C.int16_t(t.Year()), C.uint8_t(t.Month()), C.uint8_t(t.Day()),
@ -287,6 +299,7 @@ func (d *Data) GetUint64() uint64 {
// SetUint64 sets data to uint64.
func (d *Data) SetUint64(u uint64) {
d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64
C.dpiData_setUint64(&d.dpiData, C.uint64_t(u))
}
@ -343,49 +356,34 @@ func (d *Data) Set(v interface{}) error {
}
switch x := v.(type) {
case int8:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64
d.SetInt64(int64(x))
case int16:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64
d.SetInt64(int64(x))
case int32:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64
d.SetInt64(int64(x))
case int64:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64
d.SetInt64(x)
case int:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INT64
d.SetInt64(int64(x))
case uint8:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64
d.SetUint64(uint64(x))
case uint16:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64
d.SetUint64(uint64(x))
case uint32:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64
d.SetUint64(uint64(x))
case uint64:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64
d.SetUint64(x)
case uint:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_UINT64
d.SetUint64(uint64(x))
case float32:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_FLOAT
d.SetFloat32(x)
case float64:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_DOUBLE
d.SetFloat64(x)
case string:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_BYTES
d.SetBytes([]byte(x))
case []byte:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_BYTES
d.SetBytes(x)
case time.Time:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_TIMESTAMP
d.SetTime(x)
case NullTime:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_TIMESTAMP
@ -393,27 +391,21 @@ func (d *Data) Set(v interface{}) error {
d.SetTime(x.Time)
}
case time.Duration:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_DS
d.SetIntervalDS(x)
case IntervalYM:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_INTERVAL_YM
d.SetIntervalYM(x)
case *DirectLob:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_LOB
d.SetLob(x)
case *Object:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_OBJECT
d.ObjectType = x.ObjectType
d.SetObject(x)
case ObjectCollection:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_OBJECT
d.ObjectType = x.Object.ObjectType
d.SetObject(x.Object)
//case *stmt:
//d.NativeTypeNum = C.DPI_NATIVE_TYPE_STMT
//d.SetStmt(x)
case bool:
d.NativeTypeNum = C.DPI_NATIVE_TYPE_BOOLEAN
d.SetBool(x)
//case rowid:
//d.NativeTypeNum = C.DPI_NATIVE_TYPE_ROWID

@ -75,6 +75,7 @@ import "C"
import (
"context"
"crypto/sha256"
"database/sql"
"database/sql/driver"
"errors"
@ -179,16 +180,7 @@ type drv struct {
mu sync.RWMutex
}
const oneContext = false
func NewDriver() *drv {
var d drv
if !oneContext || defaultDrv == nil {
return &d
}
d.dpiContext = defaultDrv.dpiContext
return &d
}
func NewDriver() *drv { return &drv{} }
func (d *drv) Close() error {
if d == nil {
return nil
@ -204,18 +196,11 @@ func (d *drv) Close() error {
}
done <- nil
}()
var err error
select {
case err = <-done:
case <-done:
case <-time.After(5 * time.Second):
err = fmt.Errorf("Driver.Close: %w", context.DeadlineExceeded)
}
if oneContext &&
// As we use one global dpiContext, don't destroy it
(dpiCtx == nil || (d != defaultDrv && defaultDrv.dpiContext == dpiCtx)) {
return err
}
go func() {
if C.dpiContext_destroy(dpiCtx) == C.DPI_FAILURE {
done <- fmt.Errorf("error destroying dpiContext %p", dpiCtx)
@ -401,8 +386,9 @@ func (d *drv) createConn(pool *connPool, P commonAndConnParams) (*conn, error) {
// create connection and initialize it, if needed
c := conn{
drv: d, dpiConn: dc,
params: dsn.ConnectionParams{CommonParams: P.CommonParams, ConnParams: P.ConnParams},
poolKey: poolKey,
params: dsn.ConnectionParams{CommonParams: P.CommonParams, ConnParams: P.ConnParams},
poolKey: poolKey,
objTypes: make(map[string]*ObjectType),
}
if pool != nil {
c.params.PoolParams = pool.params.PoolParams
@ -637,13 +623,15 @@ func (d *drv) getPool(P commonAndPoolParams) (*connPool, error) {
}
var usernameKey string
var passwordHash [sha256.Size]byte
if !P.Heterogeneous && !P.ExternalAuth {
// skip username being part of key in heterogeneous pools
usernameKey = P.Username
passwordHash = sha256.Sum256([]byte(P.Password.Secret())) // See issue #245
}
// determine key to use for pool
poolKey := fmt.Sprintf("%s\t%s\t%d\t%d\t%d\t%s\t%s\t%s\t%t\t%t\t%t\t%s\t%d\t%s",
usernameKey, P.ConnectString, P.MinSessions, P.MaxSessions,
poolKey := fmt.Sprintf("%s\t%x\t%s\t%d\t%d\t%d\t%s\t%s\t%s\t%t\t%t\t%t\t%s\t%d\t%s",
usernameKey, passwordHash[:4], P.ConnectString, P.MinSessions, P.MaxSessions,
P.SessionIncrement, P.WaitTimeout, P.MaxLifeTime, P.SessionTimeout,
P.Heterogeneous, P.EnableEvents, P.ExternalAuth,
P.Timezone, P.MaxSessionsPerShard, P.PingInterval,
@ -813,6 +801,15 @@ func (s PoolStats) String() string {
return fmt.Sprintf("busy=%d open=%d max=%d maxLifetime=%s timeout=%s waitTimeout=%s",
s.Busy, s.Open, s.Max, s.MaxLifetime, s.Timeout, s.WaitTimeout)
}
func (p PoolStats) AsDBStats() sql.DBStats {
return sql.DBStats{
MaxOpenConnections: int(p.Max),
// Pool Status
OpenConnections: int(p.Open),
InUse: int(p.Busy),
Idle: int(p.Open) - int(p.Busy),
}
}
// Stats returns PoolStats of the pool.
func (d *drv) getPoolStats(p *connPool) (stats PoolStats, err error) {
@ -1125,7 +1122,7 @@ func (c connector) Driver() driver.Driver { return c.drv }
//
// From Go 1.17 sql.DB.Close() will call this method.
func (c connector) Close() error {
if c.drv == nil || oneContext || c.drv == defaultDrv {
if c.drv == nil || c.drv == defaultDrv {
return nil
}
return c.drv.Close()

@ -84,7 +84,10 @@ func (O *Object) SetAttribute(name string, data *Data) error {
if !strings.Contains(name, `"`) {
name = strings.ToUpper(name)
}
attr := O.Attributes[name]
attr, ok := O.Attributes[name]
if !ok {
return fmt.Errorf("%s[%q]: %w", O, name, ErrNoSuchKey)
}
if data.NativeTypeNum == 0 {
data.NativeTypeNum = attr.NativeTypeNum
data.ObjectType = attr.ObjectType
@ -368,48 +371,60 @@ func (O *Object) FromMap(recursive bool, m map[string]interface{}) error {
logger.Log("msg", "FromMap", "attribute", a, "value", v, "type", fmt.Sprintf("%T", v), "recursive", recursive, "ot", ot.ObjectType)
}
if ot.ObjectType.CollectionOf != nil { // Collection case
coll, err := ot.NewCollection()
if err != nil {
return fmt.Errorf("%q.FromMap: %w", a, err)
}
switch v := v.(type) {
case []map[string]interface{}:
if err := coll.FromMapSlice(recursive, v); err != nil {
return fmt.Errorf("%q.FromMapSlice: %w", a, err)
if err := func() error {
coll, err := ot.NewCollection()
if err != nil {
return fmt.Errorf("%q.FromMap: %w", a, err)
}
case []interface{}:
if ot.IsObject() {
m := make([]map[string]interface{}, 0, len(v))
for _, e := range v {
m = append(m, e.(map[string]interface{}))
}
if err := coll.FromMapSlice(recursive, m); err != nil {
defer coll.Close()
switch v := v.(type) {
case []map[string]interface{}:
if err := coll.FromMapSlice(recursive, v); err != nil {
return fmt.Errorf("%q.FromMapSlice: %w", a, err)
}
} else {
data := scratch.Get()
defer scratch.Put(data)
for _, e := range v {
if err := data.Set(e); err != nil {
return err
case []interface{}:
if ot.IsObject() {
m := make([]map[string]interface{}, 0, len(v))
for _, e := range v {
m = append(m, e.(map[string]interface{}))
}
if err := coll.FromMapSlice(recursive, m); err != nil {
return fmt.Errorf("%q.FromMapSlice: %w", a, err)
}
if err := coll.AppendData(data); err != nil {
return err
} else {
data := scratch.Get()
defer scratch.Put(data)
for _, e := range v {
if err := data.Set(e); err != nil {
return err
}
if err := coll.AppendData(data); err != nil {
return err
}
}
}
default:
return fmt.Errorf("%q is a collection, needs []interface{} or []map[string]interface{}, got %T", a, v)
}
default:
return fmt.Errorf("%q is a collection, needs []interface{} or []map[string]interface{}, got %T", a, v)
}
if err := O.Set(a, coll); err != nil {
return fmt.Errorf("%q.Set(%v): %w", a, coll, err)
if err = O.Set(a, coll); err != nil {
return fmt.Errorf("%q.Set(%v): %w", a, coll, err)
}
return nil
}(); err != nil {
return err
}
} else if ot.ObjectType.Attributes != nil { // Object case
if newO, err := ot.NewObject(); err != nil {
newO, err := ot.NewObject()
if err != nil {
return fmt.Errorf("%q.FromMap: %w", a, err)
} else if err := newO.FromMap(recursive, v.(map[string]interface{})); err != nil {
}
if err := newO.FromMap(recursive, v.(map[string]interface{})); err != nil {
newO.Close()
return fmt.Errorf("%q.FromMap: %w", a, err)
} else if err := O.Set(a, newO); err != nil {
}
err = O.Set(a, newO)
newO.Close()
if err != nil {
return fmt.Errorf("%q.Set(%v): %w", a, newO.ObjectType, err)
}
} else if err := O.Set(a, v); err != nil { // Plain type case
@ -453,6 +468,7 @@ func (O *Object) FromJSON(dec *json.Decoder) error {
return fmt.Errorf("key %q not found", k)
}
var v interface{}
var C func() error
if a.ObjectType.CollectionOf != nil {
coll, err := a.ObjectType.NewCollection()
if err != nil {
@ -462,6 +478,7 @@ func (O *Object) FromJSON(dec *json.Decoder) error {
return fmt.Errorf("%q.FromJSON: %w", k, err)
}
v = coll
C = coll.Close
} else if a.ObjectType.IsObject() {
obj, err := a.ObjectType.NewObject()
if err != nil {
@ -471,13 +488,18 @@ func (O *Object) FromJSON(dec *json.Decoder) error {
return fmt.Errorf("%q.FromJSON: %w", k, err)
}
v = obj
C = obj.Close
} else {
if tok, err = dec.Token(); err != nil {
return err
}
v = tok
}
if err = O.Set(k, v); err != nil {
err = O.Set(k, v)
if C != nil {
C()
}
if err != nil {
return fmt.Errorf("%q.Set(%v): %w", k, v, err)
}
if !dec.More() {
@ -506,9 +528,12 @@ func (O ObjectCollection) FromMapSlice(recursive bool, m []map[string]interface{
return fmt.Errorf("%d.FromMapSlice: %w", i, err)
}
if err := elt.FromMap(recursive, o); err != nil {
elt.Close()
return fmt.Errorf("%d.FromMapSlice: %w", i, err)
}
if err := O.Append(elt); err != nil {
err = O.Append(elt)
elt.Close()
if err != nil {
return err
}
}
@ -529,10 +554,14 @@ func (O ObjectCollection) FromJSON(dec *json.Decoder) error {
if err != nil {
return err
}
if err = elt.FromJSON(dec); err != nil {
err = elt.FromJSON(dec)
if err != nil {
elt.Close()
return err
}
if err = O.Append(elt); err != nil {
err = O.Append(elt)
elt.Close()
if err != nil {
return err
}
if !dec.More() {
@ -798,6 +827,15 @@ type ObjectType struct {
FsPrecision uint8
}
// AttributeNames returns the Attributes' names ordered as on the database (by ObjectAttribute.Sequence).
func (t *ObjectType) AttributeNames() []string {
names := make([]string, len(t.Attributes))
for k, v := range t.Attributes {
names[v.Sequence] = k
}
return names
}
func (t *ObjectType) String() string {
if t.Schema == "" {
return t.Name
@ -823,18 +861,22 @@ func (c *conn) GetObjectType(name string) (*ObjectType, error) {
if !strings.Contains(name, "\"") {
name = strings.ToUpper(name)
}
logger := getLogger()
if logger != nil {
logger.Log("msg", "GetObjectType", "name", name)
}
cName := C.CString(name)
defer func() { C.free(unsafe.Pointer(cName)) }()
objType := (*C.dpiObjectType)(C.malloc(C.sizeof_void))
c.mu.RLock()
defer c.mu.RUnlock()
if c.dpiConn == nil {
return nil, driver.ErrBadConn
}
if t := c.objTypes[name]; t != nil {
if t.drv != nil {
return t, nil
}
// t is closed
delete(c.objTypes, name)
}
cName := C.CString(name)
defer func() { C.free(unsafe.Pointer(cName)) }()
objType := (*C.dpiObjectType)(C.malloc(C.sizeof_void))
if err := c.checkExec(func() C.int {
return C.dpiConn_getObjectType(c.dpiConn, cName, C.uint32_t(len(name)), &objType)
}); err != nil {
@ -848,7 +890,11 @@ func (c *conn) GetObjectType(name string) (*ObjectType, error) {
}
t := &ObjectType{drv: c.drv, dpiObjectType: objType}
err := t.init()
return t, err
if err != nil {
return t, err
}
c.objTypes[name] = t
return t, nil
}
// NewObject returns a new Object with ObjectType type.
@ -868,6 +914,15 @@ func (t *ObjectType) NewObject() (*Object, error) {
return nil, err
}
O := &Object{ObjectType: t, dpiObject: obj}
if true {
runtime.SetFinalizer(O, func(O *Object) {
if O == nil || O.dpiObject == nil {
return
}
fmt.Printf("WARN Object %v is not closed\n", O)
O.Close()
})
}
// https://github.com/oracle/odpi/issues/112#issuecomment-524479532
return O, O.ResetAttributes()
}
@ -1005,6 +1060,7 @@ func (t *ObjectType) init() error {
dpiObjectAttr: attr,
Name: C.GoStringN(attrInfo.name, C.int(attrInfo.nameLength)),
ObjectType: sub,
Sequence: uint32(i),
}
if sub.dpiObjectType != nil {
C.dpiObjectType_addRef(sub.dpiObjectType)
@ -1049,6 +1105,7 @@ type ObjectAttribute struct {
*ObjectType
dpiObjectAttr *C.dpiObjectAttr
Name string
Sequence uint32
}
// Close the ObjectAttribute.

@ -2,6 +2,7 @@
//
// SPDX-License-Identifier: UPL-1.0 OR Apache-2.0
//go:build require
// +build require
// Package embed contains required external dependencies from ODPI-C

@ -2,6 +2,7 @@
//
// SPDX-License-Identifier: UPL-1.0 OR Apache-2.0
//go:build require
// +build require
// Package include contains required external dependencies from ODPI-C

@ -2,6 +2,7 @@
//
// SPDX-License-Identifier: UPL-1.0 OR Apache-2.0
//go:build require
// +build require
// Package src contains required external dependencies from ODPI-C

@ -81,7 +81,7 @@ func (intType) ConvertValue(v interface{}) (driver.Value, error) {
}
return strconv.ParseInt(string(*x), 10, 64)
default:
return nil, fmt.Errorf("unknown type %T", v)
return nil, fmt.Errorf("%T: %w", v, errUnknownType)
}
}
@ -128,7 +128,7 @@ func (floatType) ConvertValue(v interface{}) (driver.Value, error) {
}
return strconv.ParseFloat(string(*x), 64)
default:
return nil, fmt.Errorf("unknown type %T", v)
return nil, fmt.Errorf("%T: %w", v, errUnknownType)
}
}
@ -165,7 +165,7 @@ func (numType) ConvertValue(v interface{}) (driver.Value, error) {
err := n.Compose(x.Decompose(nil))
return string(n), err
default:
return nil, fmt.Errorf("unknown type %T", v)
return nil, fmt.Errorf("%T: %w", v, errUnknownType)
}
}
func (n Number) String() string { return string(n) }
@ -199,7 +199,7 @@ func (n *Number) Scan(v interface{}) error {
case decimalDecompose:
return n.Compose(x.Decompose(nil))
default:
return fmt.Errorf("unknown type %T", v)
return fmt.Errorf("%T: %w", v, errUnknownType)
}
return nil
}
@ -616,3 +616,81 @@ func Raw(ctx context.Context, ex Execer, f func(driverConn Conn) error) error {
defer cx.Close()
return f(cx)
}
// ConnPool is a concurrent-safe fixed size connection pool.
//
// This is a very simple implementation, usable, but serving more as an example - if possible, use *sql.DB !
type ConnPool struct {
get func(context.Context) (*sql.Conn, error)
freeList chan *PooledConn
}
// NewConnPool returns a connection pool that acquires new connections from the given pool (an *sql.DB for example).
//
// The default size is 1.
func NewConnPool(pool interface {
Conn(context.Context) (*sql.Conn, error)
}, size int) *ConnPool {
if size < 1 {
size = 1
}
return &ConnPool{get: pool.Conn, freeList: make(chan *PooledConn, size)}
}
// Conn returns a pooled connection if there exists one, or creates a new if not.
//
// You must call Close on the returned PooledConn to return it to the pool!
func (p *ConnPool) Conn(ctx context.Context) (*PooledConn, error) {
select {
case c := <-p.freeList:
return c, nil
default:
}
c, err := p.get(ctx)
if err != nil {
return nil, err
}
return &PooledConn{Conn: c, pool: p}, nil
}
// Close releases all the pooled resources.
func (p *ConnPool) Close() error {
if p == nil || p.freeList == nil {
return nil
}
freeList := p.freeList
p.get, p.freeList = nil, nil
close(freeList)
var firstErr error
for c := range freeList {
if c != nil && c.Conn != nil {
if err := c.Conn.Close(); err != nil && firstErr == nil {
firstErr = err
}
}
}
return firstErr
}
// PooledConn is a wrapped *sql.Conn that puts back the Conn into the pool on Close is possible (or does a real Close when the pool is full).
type PooledConn struct {
*sql.Conn
pool *ConnPool
}
// Close tries to return the connection to the pool, or Closes it when the pools is full.
func (c *PooledConn) Close() error {
if c == nil || c.Conn == nil {
return nil
}
if c.pool != nil && c.pool.freeList != nil {
select {
case c.pool.freeList <- c:
return nil
default:
}
}
conn := c.Conn
c.Conn, c.pool = nil, nil
return conn.Close()
}

@ -85,9 +85,8 @@ func NewQueue(ctx context.Context, execer Execer, name string, payloadObjectType
if payloadObjectTypeName != "" {
if Q.PayloadObjectType, err = Q.conn.GetObjectType(payloadObjectTypeName); err != nil {
return nil, err
} else {
payloadType = Q.PayloadObjectType.dpiObjectType
}
payloadType = Q.PayloadObjectType.dpiObjectType
}
value := C.CString(name)
err = Q.conn.checkExec(func() C.int {

@ -368,7 +368,7 @@ func (r *rows) Next(dest []driver.Value) error {
}); err != nil {
return fmt.Errorf("getReturnedData[%d]: %w", i, err)
}
r.data[i] = dpiDataSlice(data, n)
r.data[i] = unsafe.Slice(data, n)
//fmt.Printf("data %d=%+v\n%+v\n", n, data, r.data[i][0])
}
}

@ -41,6 +41,7 @@ import (
"github.com/godror/knownpb/timestamppb"
)
// NullTime is an alias for sql.NullTime
type NullTime = sql.NullTime
var nullTime interface{} = nil
@ -109,11 +110,11 @@ func (o stmtOptions) PrefetchCount() int {
}
}
func (o stmtOptions) FetchArraySize() int {
if n := o.fetchArraySize; n <= 0 {
n := o.fetchArraySize
if n <= 0 {
return DefaultFetchArraySize
} else {
return n
}
return n
}
func (o stmtOptions) PlSQLArrays() bool { return o.plSQLArrays }
@ -486,8 +487,7 @@ func (st *statement) ExecContext(ctx context.Context, args []driver.NamedValue)
if n == 0 {
st.data[i] = st.data[i][:0]
} else {
//st.data[i] = unsafe.Slice(data, n) // go1.17
st.data[i] = dpiDataSlice(data, n)
st.data[i] = unsafe.Slice(data, n)
}
}
dest := st.dests[i]
@ -947,7 +947,9 @@ func (st *statement) bindVarTypeSwitch(info *argInfo, get *dataGetter, value int
nilPtr := false
logger := getLogger()
if logger != nil {
logger.Log("msg", "bindVarTypeSwitch", "info", info, "value", fmt.Sprintf("[%T]%v", value, value))
defer func() {
logger.Log("msg", "bindVarTypeSwitch", "info", info, "value", fmt.Sprintf("[%T]%v", value, value))
}()
}
vlr, isValuer := value.(driver.Valuer)
@ -1238,7 +1240,27 @@ func (st *statement) bindVarTypeSwitch(info *argInfo, get *dataGetter, value int
logger.Log("msg", "bindVarTypeSwitch default", "value", value)
}
if !isValuer {
return value, fmt.Errorf("unknown type %T", value)
if ot, err := st.conn.getStructObjectType(value, ""); err != nil {
if logger != nil {
logger.Log("msg", "getStructObjectType", "value", fmt.Sprintf("%T", value), "error", err)
}
if !errors.Is(err, errUnknownType) {
return value, err
}
} else {
info.objType = ot.dpiObjectType
info.typ, info.natTyp = C.DPI_ORACLE_TYPE_OBJECT, C.DPI_NATIVE_TYPE_OBJECT
info.set = func(dv *C.dpiVar, data []C.dpiData, vv interface{}) error {
return st.dataSetObjectStruct(ot, dv, &data[0], vv)
}
if info.isOut {
*get = func(v interface{}, data []C.dpiData) error {
return st.dataGetObjectStruct(ot, v, data)
}
}
return value, nil
}
return value, fmt.Errorf("bindVarTypeSwitch(%T): %w", value, errUnknownType)
}
oval := value
var err error
@ -2636,38 +2658,181 @@ func (c *conn) dataSetObject(dv *C.dpiVar, data []C.dpiData, vv interface{}) err
return nil
}
// dataSetObjectStructObj creates an ot typed object from rv.
func (c *conn) dataSetObjectStructObj(ot *ObjectType, rv reflect.Value) (*Object, error) {
logger := getLogger()
if rv.Type().Kind() == reflect.Ptr {
rv = rv.Elem()
}
if rv.IsZero() {
return nil, nil
}
rvt := rv.Type()
switch rvt.Kind() {
case reflect.Slice:
coll, err := ot.NewCollection()
if err != nil {
return nil, err
}
if logger != nil {
logger.Log("msg", "collection", "obj", coll)
}
for i, n := 0, rv.Len(); i < n; i++ {
if logger != nil {
logger.Log("msg", "dataSetObjectStructObj", "i", i, "collectionOf", ot.CollectionOf, "elt", rv.Index(i).Interface())
}
if !ot.CollectionOf.IsObject() {
coll.Append(rv.Index(i).Interface())
} else {
sub, err := c.dataSetObjectStructObj(ot.CollectionOf, rv.Index(i))
if err != nil {
return nil, fmt.Errorf("%d. dataSetObjectStruct: %w", i, err)
}
err = coll.Append(sub)
sub.Close() // ?
if err != nil {
return nil, err
}
}
}
return coll.Object, nil
case reflect.Struct:
var obj *Object
if ot.CollectionOf == nil {
var err error
if obj, err = ot.NewObject(); err != nil {
return nil, err
}
}
for i, n := 0, rvt.NumField(); i < n; i++ {
f := rvt.Field(i)
if !f.IsExported() || f.Name == "ObjectTypeName" {
continue
}
rf := rv.FieldByIndex(f.Index)
if obj == nil {
// we must find the slice in the struct
if f.Type.Kind() != reflect.Slice {
continue
}
return c.dataSetObjectStructObj(ot, rf)
}
nm, typ, _ := parseStructTag(f.Tag)
if nm == "-" {
continue
}
if nm == "" {
nm = strings.ToUpper(f.Name)
}
attr, ok := obj.Attributes[nm]
if !ok {
return nil, fmt.Errorf("%s[%q]: %w", obj, nm, ErrNoSuchKey)
}
var ad Data
if !attr.IsObject() {
ad.Set(rv.Interface())
} else {
ot := attr.ObjectType
if ot == nil && typ != "" {
var err error
if ot, err = c.GetObjectType(typ); err != nil {
return nil, err
}
}
if logger != nil {
logger.Log("msg", "dataSetObjectStructObj", "name", nm, "tag", f.Tag, "ot", ot, "typ", typ)
}
sub, err := c.dataSetObjectStructObj(ot, rf)
if err != nil {
return nil, err
}
ad.SetObject(sub)
}
if err := obj.SetAttribute(nm, &ad); err != nil {
if logger != nil {
logger.Log("msg", "SetAttribute", "obj", ot.Name, "nm", nm,
"index", f.Index, "kind", f.Type.Kind(),
"value", rv.Interface(), "data", ad.Get(),
"dataNative", ad.NativeTypeNum, "dataObject", ad.ObjectType,
"attrNative", attr.NativeTypeNum, "dataObject", attr.ObjectType,
)
}
return nil, fmt.Errorf("SetAttribute(%q): %w", nm, err)
}
}
return obj, nil
default:
return nil, fmt.Errorf("%T: not a struct or a slice: %w", rv.Interface(), errUnknownType)
}
}
// dataSetObjectStruct reads from vv, writes it to an ot typed object, and puts it into data.
func (c *conn) dataSetObjectStruct(ot *ObjectType, dv *C.dpiVar, data *C.dpiData, vv interface{}) error {
if ot == nil {
panic("dataSetObjectStruct with nil ObjectType")
}
logger := getLogger()
rv := reflect.ValueOf(vv)
if rv.Type().Kind() == reflect.Ptr {
rv = rv.Elem()
}
if logger != nil {
logger.Log("msg", "dataSetObjectStruct", "v", fmt.Sprintf("%T", vv))
}
if vv == nil || rv.IsZero() {
return nil
}
obj, err := c.dataSetObjectStructObj(ot, rv)
if err != nil {
return err
}
if obj.dpiObject == nil {
data.isNull = 1
return nil
}
data.isNull = 0
if err := c.checkExec(func() C.int { return C.dpiVar_setFromObject(dv, C.uint32_t(0), obj.dpiObject) }); err != nil {
if logger != nil {
logger.Log("msg", "setFromObject", "i", 0, "dv", dv, "obj", obj, "error", err)
}
return fmt.Errorf("setFromObject[%d]: %w", 0, err)
}
return obj.Close()
}
func (c *conn) dataGetObject(v interface{}, data []C.dpiData) error {
logger := getLogger()
switch out := v.(type) {
case *Object:
case *ObjectCollection:
d := Data{
ObjectType: out.ObjectType,
ObjectType: out.Object.ObjectType,
dpiData: data[0],
}
if logger != nil {
logger.Log("msg", "dataGetObject", "v", fmt.Sprintf("%T", v), "d", d)
logger.Log("msg", "dataGetObject", "typ", "ObjectCollection", "v", fmt.Sprintf("%T", v), "d", d)
}
obj := d.GetObject()
if obj == nil {
*out = Object{ObjectType: d.ObjectType}
*out = ObjectCollection{}
} else {
*out = *obj
// copy the underlying object
obj2 := *obj
*out = ObjectCollection{Object: &obj2}
}
case *ObjectCollection:
case *Object:
d := Data{
ObjectType: out.Collection().ObjectType,
ObjectType: out.ObjectType,
dpiData: data[0],
}
if logger != nil {
logger.Log("msg", "dataGetObject", "v", fmt.Sprintf("%T", v), "d", d)
logger.Log("msg", "dataGetObject", "typ", "Object", "v", fmt.Sprintf("%T", v), "d", d)
}
obj := d.GetObject()
if obj == nil {
*out = ObjectCollection{}
*out = Object{ObjectType: d.ObjectType}
} else {
// copy the underlying object
obj2 := *obj
*out = ObjectCollection{Object: &obj2}
*out = *obj
}
case ObjectScanner:
d := Data{
@ -2675,20 +2840,293 @@ func (c *conn) dataGetObject(v interface{}, data []C.dpiData) error {
dpiData: data[0],
}
if logger != nil {
logger.Log("msg", "dataGetObjectScanner", "v", fmt.Sprintf("%T", v), "d", d, "obj", d.GetObject())
logger.Log("msg", "dataGetObjectScanner", "typ", "ObjectScanner", "v", fmt.Sprintf("%T", v), "d", d, "obj", d.GetObject())
}
obj := d.GetObject()
err := out.Scan(obj)
obj.Close()
return err
default:
default:
return fmt.Errorf("dataGetObject not implemented for type %T (maybe you need to implement the Scan method)", v)
}
return nil
}
// dataGetObjectStructObj reads an object and writes it to rv.
func (c *conn) dataGetObjectStructObj(rv reflect.Value, obj *Object) error {
logger := getLogger()
rvt := rv.Type()
if obj == nil {
rv.Set(reflect.Zero(rvt))
return nil
}
if logger != nil {
logger.Log("msg", "dataGetObjectStructObj", "kind", rvt.Kind(), "collectionOf", obj.CollectionOf)
}
if obj.CollectionOf != nil && rvt.Kind() == reflect.Slice {
coll := obj.Collection()
if logger != nil {
length, _ := coll.Len()
logger.Log("msg", "dataGetObjectStructObj", "length", length, "cap", rv.Cap())
}
orig := rv
rv.SetLen(0)
first := true
re := reflect.New(rvt.Elem()).Elem()
ret := re.Type()
for i, err := coll.First(); err == nil; i, err = coll.Next(i) {
if err != nil {
if errors.Is(err, io.EOF) {
break
}
return err
}
if first {
first = false
length, err := coll.Len()
if err != nil {
return err
}
if rv.Cap() < length {
rv = reflect.MakeSlice(rvt, 0, length)
}
}
var d Data
if err := coll.GetItem(&d, i); err != nil {
return err
}
elt := d.Get()
switch x := elt.(type) {
case *Object:
err := c.dataGetObjectStructObj(re, x)
x.Close()
if err != nil {
return err
}
default:
ev := reflect.ValueOf(elt)
if ev.Type() != ret {
ev = ev.Convert(ret)
}
re.Set(ev)
}
rv = reflect.Append(rv, re)
}
orig.Set(rv)
if logger != nil {
length, _ := coll.Len()
logger.Log("msg", "dataGetObjectStructObj", "coll", length, "rv", orig.Len())
}
return nil
}
Loop:
for i, n := 0, rvt.NumField(); i < n; i++ {
f := rvt.Field(i)
if !f.IsExported() || f.Name == "ObjectTypeName" {
continue
}
rf := rv.FieldByIndex(f.Index)
if obj.CollectionOf != nil {
// we must find the slice in the struct
if f.Type.Kind() != reflect.Slice {
continue
}
return c.dataGetObjectStructObj(rf, obj)
}
nm, typ, _ := parseStructTag(f.Tag)
if nm == "-" {
continue
}
fieldTag := typ
if fieldTag == "" {
fieldTag = nm
}
if logger != nil {
logger.Log("msg", "dataGetObjectStruct", "fieldTag", fieldTag, "nm", nm, "tag", f.Tag, "name", f.Name)
}
if nm == "" {
nm = strings.ToUpper(f.Name)
}
var ad Data
if err := obj.GetAttribute(&ad, nm); err != nil {
return fmt.Errorf("GetAttribute(%q): %w", nm, err)
}
v := ad.Get()
switch x := v.(type) {
case *Object:
err := c.dataGetObjectStructObj(rf, x)
x.Close()
if err != nil {
return err
}
x.Close()
continue Loop
case string:
if rf.Kind() == reflect.String {
rf.SetString(x)
} else {
rf.SetBytes([]byte(x))
}
case []byte:
if rf.Kind() == reflect.String {
rf.SetString(string(x))
} else {
rf.SetBytes(x)
}
default:
switch vv := reflect.ValueOf(v); vv.Kind() {
case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
rf.SetUint(ad.GetUint64())
case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64:
rf.SetInt(ad.GetInt64())
case reflect.Float32:
rf.SetFloat(float64(ad.GetFloat32()))
case reflect.Float64:
rf.SetFloat(ad.GetFloat64())
default:
// TODO: slice/Collection of sth
if kind := vv.Kind(); kind == reflect.Struct || (kind == reflect.Ptr && vv.Elem().Kind() == reflect.Struct) {
if err := c.dataGetObjectStruct(obj.ObjectType.Attributes[nm].ObjectType, v, []C.dpiData{ad.dpiData}); err != nil {
return err
}
} else if kind == reflect.Slice &&
(vv.Elem().Kind() == reflect.Struct || (vv.Elem().Kind() == reflect.Ptr && vv.Elem().Elem().Kind() == reflect.Struct)) {
ot, err := c.getStructObjectType(v, fieldTag)
if err != nil {
return err
}
if err := c.dataGetObjectStruct(ot, v, []C.dpiData{ad.dpiData}); err != nil {
return err
}
} else {
if f.Type != vv.Type() {
vv = vv.Convert(f.Type)
}
rf.Set(vv)
}
}
}
}
return nil
}
// dataGetObjectStruct reads the object from data and writes it to v.
func (c *conn) dataGetObjectStruct(ot *ObjectType, v interface{}, data []C.dpiData) error {
logger := getLogger()
// Pointer to a struct with ObjectTypeName field and optional "godror" struct tags for struct field-object attribute mapping.
rv := reflect.ValueOf(v)
if rv.Type().Kind() == reflect.Ptr {
rv = rv.Elem()
}
if kind := rv.Type().Kind(); kind != reflect.Struct && kind != reflect.Slice {
return fmt.Errorf("dataGetObjectStruct: not a struct: %T: %w", v, errUnknownType)
}
d := Data{
ObjectType: ot,
dpiData: data[0],
}
if logger != nil {
logger.Log("msg", "dataGetObjectStruct", "v", fmt.Sprintf("%T", v), "d", d)
}
obj := d.GetObject()
err := c.dataGetObjectStructObj(rv, obj)
obj.Close()
return err
}
// ObjectTypeName is for allowing reflection-based Object - struct mapping.
//
// Include an ObjectTypeName in your struct, and set the "godror" struct tag to the type name.
type ObjectTypeName struct{}
func parseStructTag(s reflect.StructTag) (tag, typ string, opts map[string]string) {
tag = s.Get(StructTag)
if strings.IndexByte(tag, ',') < 0 {
return tag, typ, opts
}
vv := strings.Split(tag, ",")
tag, vv = vv[0], vv[1:]
for _, s := range vv {
if strings.HasPrefix(s, "type=") {
typ = strings.TrimPrefix(s, "type=")
continue
}
if i := strings.IndexByte(s, '='); i >= 0 {
if opts == nil {
opts = make(map[string]string, len(vv))
}
opts[s[:i]] = s[i+1:]
}
}
return tag, typ, opts
}
// StructTag is the prefix that tags godror-specific struct fields
const StructTag = "godror"
func (c *conn) getStructObjectType(v interface{}, fieldTag string) (*ObjectType, error) {
logger := getLogger()
rv := reflect.ValueOf(v)
if rv.Type().Kind() == reflect.Ptr {
rv = rv.Elem()
}
rvt := rv.Type()
switch rvt.Kind() {
case reflect.Slice:
if logger != nil {
logger.Log("msg", "getStructObjectType", "fieldTag", fieldTag)
}
return c.GetObjectType(fieldTag)
case reflect.Struct:
const otnName = "ObjectTypeName"
otnType := reflect.TypeOf(ObjectTypeName{})
otFt, ok := rvt.FieldByName(otnName)
if !ok {
for i, n := 0, rvt.NumField(); i < n; i++ {
f := rvt.Field(i)
if f.Name == otnName || f.Type == otnType {
otFt, ok = f, true
break
}
}
if !ok {
return nil, fmt.Errorf("no ObjectTypeName field found: %w", errUnknownType)
}
}
var otName string
if s := otFt.Tag; s.Get(StructTag) != "" {
otName, _, _ = parseStructTag(s)
} else {
for i, n := 0, rvt.NumField(); i < n; i++ {
f := rvt.Field(i)
if f.Name == otnName || f.Type == otnType {
continue
}
if f.Type.Kind() == reflect.Slice {
_, otName, _ = parseStructTag(f.Tag)
break
}
}
}
if otName == "" {
return nil, fmt.Errorf("%T: no ObjectTypeName specified: %w", v, errUnknownType)
}
if logger != nil {
logger.Log("msg", "parseStructTag", "name", otName)
}
return c.GetObjectType(otName)
default:
return nil, fmt.Errorf("getStructObjectType: %T: not a struct: %w", v, errUnknownType)
}
}
func (c *conn) dataGetJSON(v interface{}, data []C.dpiData) error {
switch out := v.(type) {
@ -2850,8 +3288,10 @@ func (c *conn) dataGetJSONString(v interface{}, data []C.dpiData) error {
}
var (
// ErrNotImplemented is returned when the functionality is not implemented
ErrNotImplemented = errors.New("not implemented")
ErrBadDate = errors.New("date out of range (year must be between -4713 and 9999, and must not be 0)")
// ErrBadDate is returned when the date is not assignable to Oracle DATE type
ErrBadDate = errors.New("date out of range (year must be between -4713 and 9999, and must not be 0)")
)
// CheckNamedValue is called before passing arguments to the driver
@ -3083,16 +3523,6 @@ func stmtSetFinalizer(st *statement, tag string) {
})
}
func dpiDataSlice(data *C.dpiData, n C.uint) []C.dpiData {
// https://github.com/golang/go/wiki/cgo#Turning_C_arrays_into_Go_slices
/*
var theCArray *C.YourType = C.getTheArray()
length := C.getTheArrayLength()
slice := (*[maxArraySize]C.YourType)(unsafe.Pointer(theCArray))[:length:length]
*/
return (*(*[maxArraySize]C.dpiData)(unsafe.Pointer(data)))[:int(n):int(n)]
}
func dpiData_getBytes(data *C.dpiData) []byte {
db := ((*C.dpiBytes)(unsafe.Pointer(&data.value)))
return ((*[32767]byte)(unsafe.Pointer(db.ptr)))[:db.length:db.length]

@ -9,4 +9,4 @@ package godror
// go:generate bash -c "echo main>odpi-version; set -x; curl -L https://github.com/oracle/odpi/archive/refs/heads/main.tar.gz | tar xzvf - odpi-$(cat odpi-version)/{embed,include,src,CONTRIBUTING.md,README.md,LICENSE.txt} && cp -a odpi/embed/require.go odpi-$(cat odpi-version)/embed/ && cp -a odpi/include/require.go odpi-$(cat odpi-version)/include/ && cp -a odpi/src/require.go odpi-$(cat odpi-version)/src/ && rm -rf odpi && mv odpi-$(cat odpi-version) odpi; rm -f odpi-{,v}version; git status --porcelain -- odpi/*/*.go | sed -n -e '/^ D / { s/^ D //;p;}' | xargs -r git checkout -- "
// Version of this driver
var Version = "v0.33.3"
var Version = "v0.34.0"

@ -17,6 +17,16 @@ This package provides various compression algorithms.
# changelog
* July 13, 2022 (v1.15.8)
* gzip: fix stack exhaustion bug in Reader.Read https://github.com/klauspost/compress/pull/641
* s2: Add Index header trim/restore https://github.com/klauspost/compress/pull/638
* zstd: Optimize seqdeq amd64 asm by @greatroar in https://github.com/klauspost/compress/pull/636
* zstd: Improve decoder memcopy https://github.com/klauspost/compress/pull/637
* huff0: Pass a single bitReader pointer to asm by @greatroar in https://github.com/klauspost/compress/pull/634
* zstd: Branchless getBits for amd64 w/o BMI2 by @greatroar in https://github.com/klauspost/compress/pull/640
* gzhttp: Remove header before writing https://github.com/klauspost/compress/pull/639
* June 29, 2022 (v1.15.7)
* s2: Fix absolute forward seeks https://github.com/klauspost/compress/pull/633

@ -23,7 +23,7 @@ type byteBuffer interface {
readByte() (byte, error)
// Skip n bytes.
skipN(n int) error
skipN(n int64) error
}
// in-memory buffer
@ -62,9 +62,12 @@ func (b *byteBuf) readByte() (byte, error) {
return r, nil
}
func (b *byteBuf) skipN(n int) error {
func (b *byteBuf) skipN(n int64) error {
bb := *b
if len(bb) < n {
if n < 0 {
return fmt.Errorf("negative skip (%d) requested", n)
}
if int64(len(bb)) < n {
return io.ErrUnexpectedEOF
}
*b = bb[n:]
@ -120,9 +123,9 @@ func (r *readerWrapper) readByte() (byte, error) {
return r.tmp[0], nil
}
func (r *readerWrapper) skipN(n int) error {
n2, err := io.CopyN(ioutil.Discard, r.r, int64(n))
if n2 != int64(n) {
func (r *readerWrapper) skipN(n int64) error {
n2, err := io.CopyN(ioutil.Discard, r.r, n)
if n2 != n {
err = io.ErrUnexpectedEOF
}
return err

@ -348,6 +348,9 @@ func (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) {
frame.history.setDict(&dict)
}
if frame.WindowSize > d.o.maxWindowSize {
if debugDecoder {
println("window size exceeded:", frame.WindowSize, ">", d.o.maxWindowSize)
}
return dst, ErrWindowSizeExceeded
}
if frame.FrameContentSize != fcsUnknown {

@ -528,8 +528,8 @@ func (e *Encoder) EncodeAll(src, dst []byte) []byte {
// If a non-single block is needed the encoder will reset again.
e.encoders <- enc
}()
// Use single segments when above minimum window and below 1MB.
single := len(src) < 1<<20 && len(src) > MinWindowSize
// Use single segments when above minimum window and below window size.
single := len(src) <= e.o.windowSize && len(src) > MinWindowSize
if e.o.single != nil {
single = *e.o.single
}

@ -283,7 +283,7 @@ func WithNoEntropyCompression(b bool) EOption {
// a decoder is allowed to reject a compressed frame which requests a memory size beyond decoder's authorized range.
// For broader compatibility, decoders are recommended to support memory sizes of at least 8 MB.
// This is only a recommendation, each decoder is free to support higher or lower limits, depending on local limitations.
// If this is not specified, block encodes will automatically choose this based on the input size.
// If this is not specified, block encodes will automatically choose this based on the input size and the window size.
// This setting has no effect on streamed encodes.
func WithSingleSegment(b bool) EOption {
return func(o *encoderOptions) error {

@ -106,7 +106,7 @@ func (d *frameDec) reset(br byteBuffer) error {
}
n := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)
println("Skipping frame with", n, "bytes.")
err = br.skipN(int(n))
err = br.skipN(int64(n))
if err != nil {
if debugDecoder {
println("Reading discarded frame", err)
@ -231,20 +231,27 @@ func (d *frameDec) reset(br byteBuffer) error {
d.crc.Reset()
}
if d.WindowSize > d.o.maxWindowSize {
if debugDecoder {
printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
}
return ErrWindowSizeExceeded
}
if d.WindowSize == 0 && d.SingleSegment {
// We may not need window in this case.
d.WindowSize = d.FrameContentSize
if d.WindowSize < MinWindowSize {
d.WindowSize = MinWindowSize
}
}
if d.WindowSize > uint64(d.o.maxWindowSize) {
if debugDecoder {
printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
if d.WindowSize > d.o.maxDecodedSize {
if debugDecoder {
printf("window size %d > max %d\n", d.WindowSize, d.o.maxWindowSize)
}
return ErrDecoderSizeExceeded
}
return ErrWindowSizeExceeded
}
// The minimum Window_Size is 1 KB.
if d.WindowSize < MinWindowSize {
if debugDecoder {

@ -34,8 +34,8 @@ const (
// buildDtable will build the decoding table.
func (s *fseDecoder) buildDtable() error {
ctx := buildDtableAsmContext{
stateTable: (*uint16)(&s.stateTable[0]),
norm: (*int16)(&s.norm[0]),
stateTable: &s.stateTable[0],
norm: &s.norm[0],
dt: (*uint64)(&s.dt[0]),
}
code := buildDtable_asm(s, &ctx)

@ -55,16 +55,22 @@ func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) {
if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize {
return false, nil
}
useSafe := false
if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc {
useSafe = true
}
if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) {
useSafe = true
}
if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {
useSafe = true
}
// FIXME: Using unsafe memory copies leads to rare, random crashes
// with fuzz testing. It is therefore disabled for now.
const useSafe = true
/*
useSafe := false
if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc {
useSafe = true
}
if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) {
useSafe = true
}
if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {
useSafe = true
}
*/
br := s.br

@ -52,34 +52,46 @@ sequenceDecs_decode_amd64_fill_byte_by_byte:
sequenceDecs_decode_amd64_fill_end:
// Update offset
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R15
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R15
ADDQ R15, AX
MOVQ AX, 16(R10)
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decode_amd64_of_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decode_amd64_of_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decode_amd64_of_update_zero
NEGQ CX
SHRQ CL, R15
ADDQ R15, AX
sequenceDecs_decode_amd64_of_update_zero:
MOVQ AX, 16(R10)
// Update match length
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R15
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R15
ADDQ R15, AX
MOVQ AX, 8(R10)
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decode_amd64_ml_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decode_amd64_ml_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decode_amd64_ml_update_zero
NEGQ CX
SHRQ CL, R15
ADDQ R15, AX
sequenceDecs_decode_amd64_ml_update_zero:
MOVQ AX, 8(R10)
// Fill bitreader to have enough for the remaining
CMPQ SI, $0x08
@ -107,19 +119,25 @@ sequenceDecs_decode_amd64_fill_2_byte_by_byte:
sequenceDecs_decode_amd64_fill_2_end:
// Update literal length
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R15
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R15
ADDQ R15, AX
MOVQ AX, (R10)
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decode_amd64_ll_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decode_amd64_ll_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decode_amd64_ll_update_zero
NEGQ CX
SHRQ CL, R15
ADDQ R15, AX
sequenceDecs_decode_amd64_ll_update_zero:
MOVQ AX, (R10)
// Fill bitreader for state updates
MOVQ R14, (SP)
@ -198,7 +216,7 @@ sequenceDecs_decode_amd64_skip_update:
MOVQ R12, R13
MOVQ R11, R12
MOVQ CX, R11
JMP sequenceDecs_decode_amd64_adjust_end
JMP sequenceDecs_decode_amd64_after_adjust
sequenceDecs_decode_amd64_adjust_offsetB_1_or_0:
CMPQ (R10), $0x00000000
@ -210,7 +228,7 @@ sequenceDecs_decode_amd64_adjust_offset_maybezero:
TESTQ CX, CX
JNZ sequenceDecs_decode_amd64_adjust_offset_nonzero
MOVQ R11, CX
JMP sequenceDecs_decode_amd64_adjust_end
JMP sequenceDecs_decode_amd64_after_adjust
sequenceDecs_decode_amd64_adjust_offset_nonzero:
CMPQ CX, $0x01
@ -247,7 +265,7 @@ sequenceDecs_decode_amd64_adjust_temp_valid:
MOVQ AX, R11
MOVQ AX, CX
sequenceDecs_decode_amd64_adjust_end:
sequenceDecs_decode_amd64_after_adjust:
MOVQ CX, 16(R10)
// Check values
@ -356,49 +374,67 @@ sequenceDecs_decode_56_amd64_fill_byte_by_byte:
sequenceDecs_decode_56_amd64_fill_end:
// Update offset
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R15
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R15
ADDQ R15, AX
MOVQ AX, 16(R10)
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decode_56_amd64_of_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decode_56_amd64_of_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decode_56_amd64_of_update_zero
NEGQ CX
SHRQ CL, R15
ADDQ R15, AX
sequenceDecs_decode_56_amd64_of_update_zero:
MOVQ AX, 16(R10)
// Update match length
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R15
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R15
ADDQ R15, AX
MOVQ AX, 8(R10)
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decode_56_amd64_ml_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decode_56_amd64_ml_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decode_56_amd64_ml_update_zero
NEGQ CX
SHRQ CL, R15
ADDQ R15, AX
sequenceDecs_decode_56_amd64_ml_update_zero:
MOVQ AX, 8(R10)
// Update literal length
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R15
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R15
ADDQ R15, AX
MOVQ AX, (R10)
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R15
SHLQ CL, R15
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decode_56_amd64_ll_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decode_56_amd64_ll_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decode_56_amd64_ll_update_zero
NEGQ CX
SHRQ CL, R15
ADDQ R15, AX
sequenceDecs_decode_56_amd64_ll_update_zero:
MOVQ AX, (R10)
// Fill bitreader for state updates
MOVQ R14, (SP)
@ -477,7 +513,7 @@ sequenceDecs_decode_56_amd64_skip_update:
MOVQ R12, R13
MOVQ R11, R12
MOVQ CX, R11
JMP sequenceDecs_decode_56_amd64_adjust_end
JMP sequenceDecs_decode_56_amd64_after_adjust
sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0:
CMPQ (R10), $0x00000000
@ -489,7 +525,7 @@ sequenceDecs_decode_56_amd64_adjust_offset_maybezero:
TESTQ CX, CX
JNZ sequenceDecs_decode_56_amd64_adjust_offset_nonzero
MOVQ R11, CX
JMP sequenceDecs_decode_56_amd64_adjust_end
JMP sequenceDecs_decode_56_amd64_after_adjust
sequenceDecs_decode_56_amd64_adjust_offset_nonzero:
CMPQ CX, $0x01
@ -526,7 +562,7 @@ sequenceDecs_decode_56_amd64_adjust_temp_valid:
MOVQ AX, R11
MOVQ AX, CX
sequenceDecs_decode_56_amd64_adjust_end:
sequenceDecs_decode_56_amd64_after_adjust:
MOVQ CX, 16(R10)
// Check values
@ -757,7 +793,7 @@ sequenceDecs_decode_bmi2_skip_update:
MOVQ R11, R12
MOVQ R10, R11
MOVQ CX, R10
JMP sequenceDecs_decode_bmi2_adjust_end
JMP sequenceDecs_decode_bmi2_after_adjust
sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0:
CMPQ (R9), $0x00000000
@ -769,7 +805,7 @@ sequenceDecs_decode_bmi2_adjust_offset_maybezero:
TESTQ CX, CX
JNZ sequenceDecs_decode_bmi2_adjust_offset_nonzero
MOVQ R10, CX
JMP sequenceDecs_decode_bmi2_adjust_end
JMP sequenceDecs_decode_bmi2_after_adjust
sequenceDecs_decode_bmi2_adjust_offset_nonzero:
CMPQ CX, $0x01
@ -806,7 +842,7 @@ sequenceDecs_decode_bmi2_adjust_temp_valid:
MOVQ R13, R10
MOVQ R13, CX
sequenceDecs_decode_bmi2_adjust_end:
sequenceDecs_decode_bmi2_after_adjust:
MOVQ CX, 16(R9)
// Check values
@ -1012,7 +1048,7 @@ sequenceDecs_decode_56_bmi2_skip_update:
MOVQ R11, R12
MOVQ R10, R11
MOVQ CX, R10
JMP sequenceDecs_decode_56_bmi2_adjust_end
JMP sequenceDecs_decode_56_bmi2_after_adjust
sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0:
CMPQ (R9), $0x00000000
@ -1024,7 +1060,7 @@ sequenceDecs_decode_56_bmi2_adjust_offset_maybezero:
TESTQ CX, CX
JNZ sequenceDecs_decode_56_bmi2_adjust_offset_nonzero
MOVQ R10, CX
JMP sequenceDecs_decode_56_bmi2_adjust_end
JMP sequenceDecs_decode_56_bmi2_after_adjust
sequenceDecs_decode_56_bmi2_adjust_offset_nonzero:
CMPQ CX, $0x01
@ -1061,7 +1097,7 @@ sequenceDecs_decode_56_bmi2_adjust_temp_valid:
MOVQ R13, R10
MOVQ R13, CX
sequenceDecs_decode_56_bmi2_adjust_end:
sequenceDecs_decode_56_bmi2_after_adjust:
MOVQ CX, 16(R9)
// Check values
@ -1749,6 +1785,10 @@ TEXT ·sequenceDecs_decodeSync_amd64(SB), $64-32
MOVQ 72(AX), DI
MOVQ 80(AX), R8
MOVQ 88(AX), R9
XORQ CX, CX
MOVQ CX, 8(SP)
MOVQ CX, 16(SP)
MOVQ CX, 24(SP)
MOVQ 112(AX), R10
MOVQ 128(AX), CX
MOVQ CX, 32(SP)
@ -1798,34 +1838,46 @@ sequenceDecs_decodeSync_amd64_fill_byte_by_byte:
sequenceDecs_decodeSync_amd64_fill_end:
// Update offset
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R14
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R14
ADDQ R14, AX
MOVQ AX, 8(SP)
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decodeSync_amd64_of_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decodeSync_amd64_of_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decodeSync_amd64_of_update_zero
NEGQ CX
SHRQ CL, R14
ADDQ R14, AX
sequenceDecs_decodeSync_amd64_of_update_zero:
MOVQ AX, 8(SP)
// Update match length
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R14
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R14
ADDQ R14, AX
MOVQ AX, 16(SP)
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decodeSync_amd64_ml_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decodeSync_amd64_ml_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decodeSync_amd64_ml_update_zero
NEGQ CX
SHRQ CL, R14
ADDQ R14, AX
sequenceDecs_decodeSync_amd64_ml_update_zero:
MOVQ AX, 16(SP)
// Fill bitreader to have enough for the remaining
CMPQ SI, $0x08
@ -1853,19 +1905,25 @@ sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte:
sequenceDecs_decodeSync_amd64_fill_2_end:
// Update literal length
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R14
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R14
ADDQ R14, AX
MOVQ AX, 24(SP)
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decodeSync_amd64_ll_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decodeSync_amd64_ll_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decodeSync_amd64_ll_update_zero
NEGQ CX
SHRQ CL, R14
ADDQ R14, AX
sequenceDecs_decodeSync_amd64_ll_update_zero:
MOVQ AX, 24(SP)
// Fill bitreader for state updates
MOVQ R13, (SP)
@ -1945,7 +2003,7 @@ sequenceDecs_decodeSync_amd64_skip_update:
MOVUPS 144(CX), X0
MOVQ R13, 144(CX)
MOVUPS X0, 152(CX)
JMP sequenceDecs_decodeSync_amd64_adjust_end
JMP sequenceDecs_decodeSync_amd64_after_adjust
sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0:
CMPQ 24(SP), $0x00000000
@ -1957,7 +2015,7 @@ sequenceDecs_decodeSync_amd64_adjust_offset_maybezero:
TESTQ R13, R13
JNZ sequenceDecs_decodeSync_amd64_adjust_offset_nonzero
MOVQ 144(CX), R13
JMP sequenceDecs_decodeSync_amd64_adjust_end
JMP sequenceDecs_decodeSync_amd64_after_adjust
sequenceDecs_decodeSync_amd64_adjust_offset_nonzero:
MOVQ R13, AX
@ -1966,8 +2024,7 @@ sequenceDecs_decodeSync_amd64_adjust_offset_nonzero:
CMPQ R13, $0x03
CMOVQEQ R14, AX
CMOVQEQ R15, R14
LEAQ 144(CX), R15
ADDQ (R15)(AX*8), R14
ADDQ 144(CX)(AX*8), R14
JNZ sequenceDecs_decodeSync_amd64_adjust_temp_valid
MOVQ $0x00000001, R14
@ -1983,7 +2040,7 @@ sequenceDecs_decodeSync_amd64_adjust_skip:
MOVQ R14, 144(CX)
MOVQ R14, R13
sequenceDecs_decodeSync_amd64_adjust_end:
sequenceDecs_decodeSync_amd64_after_adjust:
MOVQ R13, 8(SP)
// Check values
@ -2280,6 +2337,10 @@ TEXT ·sequenceDecs_decodeSync_bmi2(SB), $64-32
MOVQ 72(CX), SI
MOVQ 80(CX), DI
MOVQ 88(CX), R8
XORQ R9, R9
MOVQ R9, 8(SP)
MOVQ R9, 16(SP)
MOVQ R9, 24(SP)
MOVQ 112(CX), R9
MOVQ 128(CX), R10
MOVQ R10, 32(SP)
@ -2452,7 +2513,7 @@ sequenceDecs_decodeSync_bmi2_skip_update:
MOVUPS 144(CX), X0
MOVQ R13, 144(CX)
MOVUPS X0, 152(CX)
JMP sequenceDecs_decodeSync_bmi2_adjust_end
JMP sequenceDecs_decodeSync_bmi2_after_adjust
sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0:
CMPQ 24(SP), $0x00000000
@ -2464,7 +2525,7 @@ sequenceDecs_decodeSync_bmi2_adjust_offset_maybezero:
TESTQ R13, R13
JNZ sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero
MOVQ 144(CX), R13
JMP sequenceDecs_decodeSync_bmi2_adjust_end
JMP sequenceDecs_decodeSync_bmi2_after_adjust
sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero:
MOVQ R13, R12
@ -2473,8 +2534,7 @@ sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero:
CMPQ R13, $0x03
CMOVQEQ R14, R12
CMOVQEQ R15, R14
LEAQ 144(CX), R15
ADDQ (R15)(R12*8), R14
ADDQ 144(CX)(R12*8), R14
JNZ sequenceDecs_decodeSync_bmi2_adjust_temp_valid
MOVQ $0x00000001, R14
@ -2490,7 +2550,7 @@ sequenceDecs_decodeSync_bmi2_adjust_skip:
MOVQ R14, 144(CX)
MOVQ R14, R13
sequenceDecs_decodeSync_bmi2_adjust_end:
sequenceDecs_decodeSync_bmi2_after_adjust:
MOVQ R13, 8(SP)
// Check values
@ -2787,6 +2847,10 @@ TEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $64-32
MOVQ 72(AX), DI
MOVQ 80(AX), R8
MOVQ 88(AX), R9
XORQ CX, CX
MOVQ CX, 8(SP)
MOVQ CX, 16(SP)
MOVQ CX, 24(SP)
MOVQ 112(AX), R10
MOVQ 128(AX), CX
MOVQ CX, 32(SP)
@ -2836,34 +2900,46 @@ sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte:
sequenceDecs_decodeSync_safe_amd64_fill_end:
// Update offset
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R14
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R14
ADDQ R14, AX
MOVQ AX, 8(SP)
MOVQ R9, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decodeSync_safe_amd64_of_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decodeSync_safe_amd64_of_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decodeSync_safe_amd64_of_update_zero
NEGQ CX
SHRQ CL, R14
ADDQ R14, AX
sequenceDecs_decodeSync_safe_amd64_of_update_zero:
MOVQ AX, 8(SP)
// Update match length
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R14
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R14
ADDQ R14, AX
MOVQ AX, 16(SP)
MOVQ R8, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decodeSync_safe_amd64_ml_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decodeSync_safe_amd64_ml_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decodeSync_safe_amd64_ml_update_zero
NEGQ CX
SHRQ CL, R14
ADDQ R14, AX
sequenceDecs_decodeSync_safe_amd64_ml_update_zero:
MOVQ AX, 16(SP)
// Fill bitreader to have enough for the remaining
CMPQ SI, $0x08
@ -2891,19 +2967,25 @@ sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte:
sequenceDecs_decodeSync_safe_amd64_fill_2_end:
// Update literal length
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
ADDQ CX, BX
NEGL CX
SHRQ CL, R14
SHRQ $0x20, AX
TESTQ CX, CX
CMOVQEQ CX, R14
ADDQ R14, AX
MOVQ AX, 24(SP)
MOVQ DI, AX
MOVQ BX, CX
MOVQ DX, R14
SHLQ CL, R14
MOVB AH, CL
SHRQ $0x20, AX
TESTQ CX, CX
JZ sequenceDecs_decodeSync_safe_amd64_ll_update_zero
ADDQ CX, BX
CMPQ BX, $0x40
JA sequenceDecs_decodeSync_safe_amd64_ll_update_zero
CMPQ CX, $0x40
JAE sequenceDecs_decodeSync_safe_amd64_ll_update_zero
NEGQ CX
SHRQ CL, R14
ADDQ R14, AX
sequenceDecs_decodeSync_safe_amd64_ll_update_zero:
MOVQ AX, 24(SP)
// Fill bitreader for state updates
MOVQ R13, (SP)
@ -2983,7 +3065,7 @@ sequenceDecs_decodeSync_safe_amd64_skip_update:
MOVUPS 144(CX), X0
MOVQ R13, 144(CX)
MOVUPS X0, 152(CX)
JMP sequenceDecs_decodeSync_safe_amd64_adjust_end
JMP sequenceDecs_decodeSync_safe_amd64_after_adjust
sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0:
CMPQ 24(SP), $0x00000000
@ -2995,7 +3077,7 @@ sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero:
TESTQ R13, R13
JNZ sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero
MOVQ 144(CX), R13
JMP sequenceDecs_decodeSync_safe_amd64_adjust_end
JMP sequenceDecs_decodeSync_safe_amd64_after_adjust
sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero:
MOVQ R13, AX
@ -3004,8 +3086,7 @@ sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero:
CMPQ R13, $0x03
CMOVQEQ R14, AX
CMOVQEQ R15, R14
LEAQ 144(CX), R15
ADDQ (R15)(AX*8), R14
ADDQ 144(CX)(AX*8), R14
JNZ sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid
MOVQ $0x00000001, R14
@ -3021,7 +3102,7 @@ sequenceDecs_decodeSync_safe_amd64_adjust_skip:
MOVQ R14, 144(CX)
MOVQ R14, R13
sequenceDecs_decodeSync_safe_amd64_adjust_end:
sequenceDecs_decodeSync_safe_amd64_after_adjust:
MOVQ R13, 8(SP)
// Check values
@ -3420,6 +3501,10 @@ TEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $64-32
MOVQ 72(CX), SI
MOVQ 80(CX), DI
MOVQ 88(CX), R8
XORQ R9, R9
MOVQ R9, 8(SP)
MOVQ R9, 16(SP)
MOVQ R9, 24(SP)
MOVQ 112(CX), R9
MOVQ 128(CX), R10
MOVQ R10, 32(SP)
@ -3592,7 +3677,7 @@ sequenceDecs_decodeSync_safe_bmi2_skip_update:
MOVUPS 144(CX), X0
MOVQ R13, 144(CX)
MOVUPS X0, 152(CX)
JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end
JMP sequenceDecs_decodeSync_safe_bmi2_after_adjust
sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0:
CMPQ 24(SP), $0x00000000
@ -3604,7 +3689,7 @@ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero:
TESTQ R13, R13
JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero
MOVQ 144(CX), R13
JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end
JMP sequenceDecs_decodeSync_safe_bmi2_after_adjust
sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero:
MOVQ R13, R12
@ -3613,8 +3698,7 @@ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero:
CMPQ R13, $0x03
CMOVQEQ R14, R12
CMOVQEQ R15, R14
LEAQ 144(CX), R15
ADDQ (R15)(R12*8), R14
ADDQ 144(CX)(R12*8), R14
JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid
MOVQ $0x00000001, R14
@ -3630,7 +3714,7 @@ sequenceDecs_decodeSync_safe_bmi2_adjust_skip:
MOVQ R14, 144(CX)
MOVQ R14, R13
sequenceDecs_decodeSync_safe_bmi2_adjust_end:
sequenceDecs_decodeSync_safe_bmi2_after_adjust:
MOVQ R13, 8(SP)
// Check values

@ -1,3 +0,0 @@
# This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at https://tip.golang.org/AUTHORS.

@ -1,3 +0,0 @@
# This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at https://tip.golang.org/CONTRIBUTORS.

3
vendor/golang.org/x/net/AUTHORS generated vendored

@ -1,3 +0,0 @@
# This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at http://tip.golang.org/AUTHORS.

@ -1,3 +0,0 @@
# This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at http://tip.golang.org/CONTRIBUTORS.

@ -1,3 +0,0 @@
# This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at http://tip.golang.org/AUTHORS.

@ -1,3 +0,0 @@
# This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at http://tip.golang.org/CONTRIBUTORS.

3
vendor/golang.org/x/sync/AUTHORS generated vendored

@ -1,3 +0,0 @@
# This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at http://tip.golang.org/AUTHORS.

@ -1,3 +0,0 @@
# This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at http://tip.golang.org/CONTRIBUTORS.

3
vendor/golang.org/x/sys/AUTHORS generated vendored

@ -1,3 +0,0 @@
# This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at http://tip.golang.org/AUTHORS.

@ -1,3 +0,0 @@
# This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at http://tip.golang.org/CONTRIBUTORS.

@ -2940,6 +2940,7 @@ const (
SOL_RAW = 0xff
SOL_RDS = 0x114
SOL_RXRPC = 0x110
SOL_SMC = 0x11e
SOL_TCP = 0x6
SOL_TIPC = 0x10f
SOL_TLS = 0x11a

3
vendor/golang.org/x/term/AUTHORS generated vendored

@ -1,3 +0,0 @@
# This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at http://tip.golang.org/AUTHORS.

@ -1,3 +0,0 @@
# This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at http://tip.golang.org/CONTRIBUTORS.

3
vendor/golang.org/x/time/AUTHORS generated vendored

@ -1,3 +0,0 @@
# This source code refers to The Go Authors for copyright purposes.
# The master list of authors is in the main Go distribution,
# visible at http://tip.golang.org/AUTHORS.

@ -1,3 +0,0 @@
# This source code was written by the Go contributors.
# The master list of contributors is in the main Go distribution,
# visible at http://tip.golang.org/CONTRIBUTORS.

28
vendor/modules.txt vendored

@ -20,7 +20,7 @@ github.com/aliyun/aliyun-oss-go-sdk/oss
## explicit; go 1.16
github.com/allegro/bigcache/v3
github.com/allegro/bigcache/v3/queue
# github.com/aws/aws-sdk-go v1.44.58
# github.com/aws/aws-sdk-go v1.44.61
## explicit; go 1.11
github.com/aws/aws-sdk-go/aws
github.com/aws/aws-sdk-go/aws/arn
@ -175,7 +175,7 @@ github.com/dustin/go-humanize
# github.com/edsrzf/mmap-go v1.1.0
## explicit; go 1.17
github.com/edsrzf/mmap-go
# github.com/emicklei/go-restful/v3 v3.8.0
# github.com/emicklei/go-restful/v3 v3.9.0
## explicit; go 1.13
github.com/emicklei/go-restful/v3
github.com/emicklei/go-restful/v3/log
@ -261,8 +261,8 @@ github.com/goccy/go-json/internal/encoder/vm_color_indent
github.com/goccy/go-json/internal/encoder/vm_indent
github.com/goccy/go-json/internal/errors
github.com/goccy/go-json/internal/runtime
# github.com/godror/godror v0.33.3
## explicit; go 1.15
# github.com/godror/godror v0.34.0
## explicit; go 1.17
github.com/godror/godror
github.com/godror/godror/dsn
github.com/godror/godror/odpi/embed
@ -387,7 +387,7 @@ github.com/kamva/mgm/v3/operator
# github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
## explicit
github.com/kballard/go-shellquote
# github.com/klauspost/compress v1.15.8
# github.com/klauspost/compress v1.15.9
## explicit; go 1.16
github.com/klauspost/compress
github.com/klauspost/compress/fse
@ -713,7 +713,7 @@ go.uber.org/zap/internal/color
go.uber.org/zap/internal/exit
go.uber.org/zap/zapcore
go.uber.org/zap/zapgrpc
# golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d
# golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
## explicit; go 1.17
golang.org/x/crypto/blowfish
golang.org/x/crypto/chacha20
@ -732,7 +732,7 @@ golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
# golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4
## explicit; go 1.17
golang.org/x/mod/semver
# golang.org/x/net v0.0.0-20220708220712-1185a9018129
# golang.org/x/net v0.0.0-20220722155237-a158d28d115b
## explicit; go 1.17
golang.org/x/net/context
golang.org/x/net/context/ctxhttp
@ -748,15 +748,15 @@ golang.org/x/net/internal/socks
golang.org/x/net/internal/timeseries
golang.org/x/net/proxy
golang.org/x/net/trace
# golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92
# golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c
## explicit; go 1.17
golang.org/x/oauth2
golang.org/x/oauth2/internal
# golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
# golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
## explicit
golang.org/x/sync/errgroup
golang.org/x/sync/singleflight
# golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8
# golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f
## explicit; go 1.17
golang.org/x/sys/cpu
golang.org/x/sys/execabs
@ -764,7 +764,7 @@ golang.org/x/sys/internal/unsafeheader
golang.org/x/sys/plan9
golang.org/x/sys/unix
golang.org/x/sys/windows
# golang.org/x/term v0.0.0-20220526004731-065cf7ba2467
# golang.org/x/term v0.0.0-20220722155259-a9ba230a4035
## explicit; go 1.17
golang.org/x/term
# golang.org/x/text v0.3.7
@ -801,7 +801,7 @@ golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
golang.org/x/text/width
# golang.org/x/time v0.0.0-20220609170525-579cf78fd858
# golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9
## explicit
golang.org/x/time/rate
# golang.org/x/tools v0.1.11
@ -827,7 +827,7 @@ google.golang.org/appengine/internal/log
google.golang.org/appengine/internal/remote_api
google.golang.org/appengine/internal/urlfetch
google.golang.org/appengine/urlfetch
# google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f
# google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252
## explicit; go 1.17
google.golang.org/genproto/googleapis/api/annotations
google.golang.org/genproto/googleapis/rpc/status
@ -1206,7 +1206,7 @@ modernc.org/b
# modernc.org/cc/v3 v3.36.0
## explicit; go 1.15
modernc.org/cc/v3
# modernc.org/ccgo/v3 v3.16.7
# modernc.org/ccgo/v3 v3.16.8
## explicit; go 1.16
modernc.org/ccgo/v3/lib
# modernc.org/db v1.0.4

Loading…
Cancel
Save