mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-28 11:22:25 -05:00
[chore] update dependencies (#4422)
- github.com/jackc/pgx/v5 v5.7.5 -> v5.7.6 - github.com/ncruces/go-sqlite3 v0.28.0 -> v0.29.0 - github.com/tdewolff/minify/v2 v2.24.2 -> v2.24.3 - golang.org/x/oauth2 v0.30.0 -> v0.31.0 - golang.org/x/sys v0.35.0 -> v0.36.0 - golang.org/x/text v0.28.0 -> v0.29.0 Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4422 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
This commit is contained in:
parent
9b7db51436
commit
a6429b5410
78 changed files with 1439 additions and 1189 deletions
18
go.mod
18
go.mod
|
|
@ -48,13 +48,13 @@ require (
|
|||
github.com/google/uuid v1.6.0
|
||||
github.com/gorilla/feeds v1.2.0
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/jackc/pgx/v5 v5.7.5
|
||||
github.com/jackc/pgx/v5 v5.7.6
|
||||
github.com/k3a/html2text v1.2.1
|
||||
github.com/microcosm-cc/bluemonday v1.0.27
|
||||
github.com/miekg/dns v1.1.68
|
||||
github.com/minio/minio-go/v7 v7.0.95
|
||||
github.com/mitchellh/mapstructure v1.5.0
|
||||
github.com/ncruces/go-sqlite3 v0.28.0
|
||||
github.com/ncruces/go-sqlite3 v0.29.0
|
||||
github.com/oklog/ulid v1.3.1
|
||||
github.com/pquerna/otp v1.5.0
|
||||
github.com/rivo/uniseg v0.4.7
|
||||
|
|
@ -63,7 +63,7 @@ require (
|
|||
github.com/spf13/pflag v1.0.10
|
||||
github.com/spf13/viper v1.20.1
|
||||
github.com/stretchr/testify v1.11.1
|
||||
github.com/tdewolff/minify/v2 v2.24.2
|
||||
github.com/tdewolff/minify/v2 v2.24.3
|
||||
github.com/technologize/otel-go-contrib v1.1.1
|
||||
github.com/temoto/robotstxt v1.1.2
|
||||
github.com/tetratelabs/wazero v1.9.0
|
||||
|
|
@ -86,9 +86,9 @@ require (
|
|||
golang.org/x/crypto v0.41.0
|
||||
golang.org/x/image v0.30.0
|
||||
golang.org/x/net v0.43.0
|
||||
golang.org/x/oauth2 v0.30.0
|
||||
golang.org/x/sys v0.35.0
|
||||
golang.org/x/text v0.28.0
|
||||
golang.org/x/oauth2 v0.31.0
|
||||
golang.org/x/sys v0.36.0
|
||||
golang.org/x/text v0.29.0
|
||||
gopkg.in/mcuadros/go-syslog.v2 v2.3.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
modernc.org/sqlite v1.38.2
|
||||
|
|
@ -231,9 +231,9 @@ require (
|
|||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/arch v0.18.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
|
||||
golang.org/x/mod v0.26.0 // indirect
|
||||
golang.org/x/sync v0.16.0 // indirect
|
||||
golang.org/x/tools v0.35.0 // indirect
|
||||
golang.org/x/mod v0.27.0 // indirect
|
||||
golang.org/x/sync v0.17.0 // indirect
|
||||
golang.org/x/tools v0.36.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect
|
||||
google.golang.org/grpc v1.75.0 // indirect
|
||||
|
|
|
|||
36
go.sum
generated
36
go.sum
generated
|
|
@ -273,8 +273,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI
|
|||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
|
||||
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
|
||||
github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs=
|
||||
github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
|
||||
github.com/jackc/pgx/v5 v5.7.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk=
|
||||
github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
|
||||
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
|
||||
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
|
|
@ -340,8 +340,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
|
|||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/ncruces/go-sqlite3 v0.28.0 h1:AQVTUPgfamONl09LS+4rGFbHmLKM8/QrJJJi1UukjEQ=
|
||||
github.com/ncruces/go-sqlite3 v0.28.0/go.mod h1:WqvLhYwtEiZzg1H8BIeahUv/DxbmR+3xG5jDHDiBAGk=
|
||||
github.com/ncruces/go-sqlite3 v0.29.0 h1:1tsLiagCoqZEfcHDeKsNSv5jvrY/Iu393pAnw2wLNJU=
|
||||
github.com/ncruces/go-sqlite3 v0.29.0/go.mod h1:r1hSvYKPNJ+OlUA1O3r8o9LAawzPAlqeZiIdxTBBBJ0=
|
||||
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
|
||||
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||
github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
|
||||
|
|
@ -431,8 +431,8 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
|
|||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
|
||||
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
|
||||
github.com/tdewolff/minify/v2 v2.24.2 h1:vnY3nTulEAbCAAlxTxPPDkzG24rsq31SOzp63yT+7mo=
|
||||
github.com/tdewolff/minify/v2 v2.24.2/go.mod h1:1JrCtoZXaDbqioQZfk3Jdmr0GPJKiU7c1Apmb+7tCeE=
|
||||
github.com/tdewolff/minify/v2 v2.24.3 h1:BaKgWSFLKbKDiUskbeRgbe2n5d1Ci1x3cN/eXna8zOA=
|
||||
github.com/tdewolff/minify/v2 v2.24.3/go.mod h1:1JrCtoZXaDbqioQZfk3Jdmr0GPJKiU7c1Apmb+7tCeE=
|
||||
github.com/tdewolff/parse/v2 v2.8.3 h1:5VbvtJ83cfb289A1HzRA9sf02iT8YyUwN84ezjkdY1I=
|
||||
github.com/tdewolff/parse/v2 v2.8.3/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo=
|
||||
github.com/tdewolff/test v1.0.11 h1:FdLbwQVHxqG16SlkGveC0JVyrJN62COWTRyUFzfbtBE=
|
||||
|
|
@ -588,8 +588,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
|||
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
|
||||
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
|
||||
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
|
||||
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
|
|
@ -607,8 +607,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
|||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
|
||||
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
|
||||
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
|
||||
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
|
||||
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
|
||||
golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo=
|
||||
golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
|
@ -616,8 +616,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
|||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
|
||||
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
|
@ -633,8 +633,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
|
||||
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
|
||||
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=
|
||||
|
|
@ -657,8 +657,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
|||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
|
||||
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
|
|
@ -666,8 +666,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
|
|||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
||||
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
|
||||
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
|
||||
golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
|
||||
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
|
||||
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
|
||||
|
|
|
|||
21
vendor/github.com/jackc/pgx/v5/.golangci.yml
generated
vendored
Normal file
21
vendor/github.com/jackc/pgx/v5/.golangci.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# See for configurations: https://golangci-lint.run/usage/configuration/
|
||||
version: 2
|
||||
|
||||
# See: https://golangci-lint.run/usage/formatters/
|
||||
formatters:
|
||||
default: none
|
||||
enable:
|
||||
- gofmt # https://pkg.go.dev/cmd/gofmt
|
||||
- gofumpt # https://github.com/mvdan/gofumpt
|
||||
|
||||
settings:
|
||||
gofmt:
|
||||
simplify: true # Simplify code: gofmt with `-s` option.
|
||||
|
||||
gofumpt:
|
||||
# Module path which contains the source code being formatted.
|
||||
# Default: ""
|
||||
module-path: github.com/jackc/pgx/v5 # Should match with module in go.mod
|
||||
# Choose whether to use the extra rules.
|
||||
# Default: false
|
||||
extra-rules: true
|
||||
11
vendor/github.com/jackc/pgx/v5/CHANGELOG.md
generated
vendored
11
vendor/github.com/jackc/pgx/v5/CHANGELOG.md
generated
vendored
|
|
@ -1,3 +1,14 @@
|
|||
# 5.7.6 (September 8, 2025)
|
||||
|
||||
* Use ParseConfigError in pgx.ParseConfig and pgxpool.ParseConfig (Yurasov Ilia)
|
||||
* Add PrepareConn hook to pgxpool (Jonathan Hall)
|
||||
* Reduce allocations in QueryContext (Dominique Lefevre)
|
||||
* Add MarshalJSON and UnmarshalJSON for pgtype.Uint32 (Panos Koutsovasilis)
|
||||
* Configure ping behavior on pgxpool with ShouldPing (Christian Kiely)
|
||||
* zeronull int types implement Int64Valuer and Int64Scanner (Li Zeghong)
|
||||
* Fix panic when receiving terminate connection message during CopyFrom (Michal Drausowski)
|
||||
* Fix statement cache not being invalidated on error during batch (Muhammadali Nazarov)
|
||||
|
||||
# 5.7.5 (May 17, 2025)
|
||||
|
||||
* Support sslnegotiation connection option (divyam234)
|
||||
|
|
|
|||
5
vendor/github.com/jackc/pgx/v5/README.md
generated
vendored
5
vendor/github.com/jackc/pgx/v5/README.md
generated
vendored
|
|
@ -127,6 +127,7 @@ pgerrcode contains constants for the PostgreSQL error codes.
|
|||
## Adapters for 3rd Party Tracers
|
||||
|
||||
* [github.com/jackhopner/pgx-xray-tracer](https://github.com/jackhopner/pgx-xray-tracer)
|
||||
* [github.com/exaring/otelpgx](https://github.com/exaring/otelpgx)
|
||||
|
||||
## Adapters for 3rd Party Loggers
|
||||
|
||||
|
|
@ -184,3 +185,7 @@ Simple Golang implementation for transactional outbox pattern for PostgreSQL usi
|
|||
### [https://github.com/Arlandaren/pgxWrappy](https://github.com/Arlandaren/pgxWrappy)
|
||||
|
||||
Simplifies working with the pgx library, providing convenient scanning of nested structures.
|
||||
|
||||
## [https://github.com/KoNekoD/pgx-colon-query-rewriter](https://github.com/KoNekoD/pgx-colon-query-rewriter)
|
||||
|
||||
Implementation of the pgx query rewriter to use ':' instead of '@' in named query parameters.
|
||||
|
|
|
|||
32
vendor/github.com/jackc/pgx/v5/batch.go
generated
vendored
32
vendor/github.com/jackc/pgx/v5/batch.go
generated
vendored
|
|
@ -43,6 +43,10 @@ func (qq *QueuedQuery) QueryRow(fn func(row Row) error) {
|
|||
}
|
||||
|
||||
// Exec sets fn to be called when the response to qq is received.
|
||||
//
|
||||
// Note: for simple batch insert uses where it is not required to handle
|
||||
// each potential error individually, it's sufficient to not set any callbacks,
|
||||
// and just handle the return value of BatchResults.Close.
|
||||
func (qq *QueuedQuery) Exec(fn func(ct pgconn.CommandTag) error) {
|
||||
qq.Fn = func(br BatchResults) error {
|
||||
ct, err := br.Exec()
|
||||
|
|
@ -83,7 +87,7 @@ func (b *Batch) Len() int {
|
|||
|
||||
type BatchResults interface {
|
||||
// Exec reads the results from the next query in the batch as if the query has been sent with Conn.Exec. Prefer
|
||||
// calling Exec on the QueuedQuery.
|
||||
// calling Exec on the QueuedQuery, or just calling Close.
|
||||
Exec() (pgconn.CommandTag, error)
|
||||
|
||||
// Query reads the results from the next query in the batch as if the query has been sent with Conn.Query. Prefer
|
||||
|
|
@ -98,6 +102,9 @@ type BatchResults interface {
|
|||
// QueuedQuery.Query, QueuedQuery.QueryRow, or QueuedQuery.Exec will be called. If a callback function returns an
|
||||
// error or the batch encounters an error subsequent callback functions will not be called.
|
||||
//
|
||||
// For simple batch inserts inside a transaction or similar queries, it's sufficient to not set any callbacks,
|
||||
// and just handle the return value of Close.
|
||||
//
|
||||
// Close must be called before the underlying connection can be used again. Any error that occurred during a batch
|
||||
// operation may have made it impossible to resyncronize the connection with the server. In this case the underlying
|
||||
// connection will have been closed.
|
||||
|
|
@ -207,7 +214,6 @@ func (br *batchResults) Query() (Rows, error) {
|
|||
func (br *batchResults) QueryRow() Row {
|
||||
rows, _ := br.Query()
|
||||
return (*connRow)(rows.(*baseRows))
|
||||
|
||||
}
|
||||
|
||||
// Close closes the batch operation. Any error that occurred during a batch operation may have made it impossible to
|
||||
|
|
@ -220,6 +226,8 @@ func (br *batchResults) Close() error {
|
|||
}
|
||||
br.endTraced = true
|
||||
}
|
||||
|
||||
invalidateCachesOnBatchResultsError(br.conn, br.b, br.err)
|
||||
}()
|
||||
|
||||
if br.err != nil {
|
||||
|
|
@ -378,7 +386,6 @@ func (br *pipelineBatchResults) Query() (Rows, error) {
|
|||
func (br *pipelineBatchResults) QueryRow() Row {
|
||||
rows, _ := br.Query()
|
||||
return (*connRow)(rows.(*baseRows))
|
||||
|
||||
}
|
||||
|
||||
// Close closes the batch operation. Any error that occurred during a batch operation may have made it impossible to
|
||||
|
|
@ -391,6 +398,8 @@ func (br *pipelineBatchResults) Close() error {
|
|||
}
|
||||
br.endTraced = true
|
||||
}
|
||||
|
||||
invalidateCachesOnBatchResultsError(br.conn, br.b, br.err)
|
||||
}()
|
||||
|
||||
if br.err == nil && br.lastRows != nil && br.lastRows.err != nil {
|
||||
|
|
@ -441,3 +450,20 @@ func (br *pipelineBatchResults) nextQueryAndArgs() (query string, args []any, er
|
|||
br.qqIdx++
|
||||
return bi.SQL, bi.Arguments, nil
|
||||
}
|
||||
|
||||
// invalidates statement and description caches on batch results error
|
||||
func invalidateCachesOnBatchResultsError(conn *Conn, b *Batch, err error) {
|
||||
if err != nil && conn != nil && b != nil {
|
||||
if sc := conn.statementCache; sc != nil {
|
||||
for _, bi := range b.QueuedQueries {
|
||||
sc.Invalidate(bi.SQL)
|
||||
}
|
||||
}
|
||||
|
||||
if sc := conn.descriptionCache; sc != nil {
|
||||
for _, bi := range b.QueuedQueries {
|
||||
sc.Invalidate(bi.SQL)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
6
vendor/github.com/jackc/pgx/v5/conn.go
generated
vendored
6
vendor/github.com/jackc/pgx/v5/conn.go
generated
vendored
|
|
@ -172,7 +172,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
|
|||
delete(config.RuntimeParams, "statement_cache_capacity")
|
||||
n, err := strconv.ParseInt(s, 10, 32)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse statement_cache_capacity: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse statement_cache_capacity", err)
|
||||
}
|
||||
statementCacheCapacity = int(n)
|
||||
}
|
||||
|
|
@ -182,7 +182,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
|
|||
delete(config.RuntimeParams, "description_cache_capacity")
|
||||
n, err := strconv.ParseInt(s, 10, 32)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse description_cache_capacity: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse description_cache_capacity", err)
|
||||
}
|
||||
descriptionCacheCapacity = int(n)
|
||||
}
|
||||
|
|
@ -202,7 +202,7 @@ func ParseConfigWithOptions(connString string, options ParseConfigOptions) (*Con
|
|||
case "simple_protocol":
|
||||
defaultQueryExecMode = QueryExecModeSimpleProtocol
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid default_query_exec_mode: %s", s)
|
||||
return nil, pgconn.NewParseConfigError(connString, "invalid default_query_exec_mode", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
1
vendor/github.com/jackc/pgx/v5/internal/stmtcache/lru_cache.go
generated
vendored
1
vendor/github.com/jackc/pgx/v5/internal/stmtcache/lru_cache.go
generated
vendored
|
|
@ -31,7 +31,6 @@ func (c *LRUCache) Get(key string) *pgconn.StatementDescription {
|
|||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
// Put stores sd in the cache. Put panics if sd.SQL is "". Put does nothing if sd.SQL already exists in the cache or
|
||||
|
|
|
|||
2
vendor/github.com/jackc/pgx/v5/pgconn/auth_scram.go
generated
vendored
2
vendor/github.com/jackc/pgx/v5/pgconn/auth_scram.go
generated
vendored
|
|
@ -263,7 +263,7 @@ func computeClientProof(saltedPassword, authMessage []byte) []byte {
|
|||
return buf
|
||||
}
|
||||
|
||||
func computeServerSignature(saltedPassword []byte, authMessage []byte) []byte {
|
||||
func computeServerSignature(saltedPassword, authMessage []byte) []byte {
|
||||
serverKey := computeHMAC(saltedPassword, []byte("Server Key"))
|
||||
serverSignature := computeHMAC(serverKey, authMessage)
|
||||
buf := make([]byte, base64.StdEncoding.EncodedLen(len(serverSignature)))
|
||||
|
|
|
|||
22
vendor/github.com/jackc/pgx/v5/pgconn/config.go
generated
vendored
22
vendor/github.com/jackc/pgx/v5/pgconn/config.go
generated
vendored
|
|
@ -23,9 +23,11 @@ import (
|
|||
"github.com/jackc/pgx/v5/pgproto3"
|
||||
)
|
||||
|
||||
type AfterConnectFunc func(ctx context.Context, pgconn *PgConn) error
|
||||
type ValidateConnectFunc func(ctx context.Context, pgconn *PgConn) error
|
||||
type GetSSLPasswordFunc func(ctx context.Context) string
|
||||
type (
|
||||
AfterConnectFunc func(ctx context.Context, pgconn *PgConn) error
|
||||
ValidateConnectFunc func(ctx context.Context, pgconn *PgConn) error
|
||||
GetSSLPasswordFunc func(ctx context.Context) string
|
||||
)
|
||||
|
||||
// Config is the settings used to establish a connection to a PostgreSQL server. It must be created by [ParseConfig]. A
|
||||
// manually initialized Config will cause ConnectConfig to panic.
|
||||
|
|
@ -179,7 +181,7 @@ func NetworkAddress(host string, port uint16) (network, address string) {
|
|||
//
|
||||
// ParseConfig supports specifying multiple hosts in similar manner to libpq. Host and port may include comma separated
|
||||
// values that will be tried in order. This can be used as part of a high availability system. See
|
||||
// https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS for more information.
|
||||
// https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS for more information.
|
||||
//
|
||||
// # Example URL
|
||||
// postgres://jack:secret@foo.example.com:5432,bar.example.com:5432/mydb
|
||||
|
|
@ -206,9 +208,9 @@ func NetworkAddress(host string, port uint16) (network, address string) {
|
|||
// PGTARGETSESSIONATTRS
|
||||
// PGTZ
|
||||
//
|
||||
// See http://www.postgresql.org/docs/11/static/libpq-envars.html for details on the meaning of environment variables.
|
||||
// See http://www.postgresql.org/docs/current/static/libpq-envars.html for details on the meaning of environment variables.
|
||||
//
|
||||
// See https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-PARAMKEYWORDS for parameter key word names. They are
|
||||
// See https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS for parameter key word names. They are
|
||||
// usually but not always the environment variable name downcased and without the "PG" prefix.
|
||||
//
|
||||
// Important Security Notes:
|
||||
|
|
@ -216,7 +218,7 @@ func NetworkAddress(host string, port uint16) (network, address string) {
|
|||
// ParseConfig tries to match libpq behavior with regard to PGSSLMODE. This includes defaulting to "prefer" behavior if
|
||||
// not set.
|
||||
//
|
||||
// See http://www.postgresql.org/docs/11/static/libpq-ssl.html#LIBPQ-SSL-PROTECTION for details on what level of
|
||||
// See http://www.postgresql.org/docs/current/static/libpq-ssl.html#LIBPQ-SSL-PROTECTION for details on what level of
|
||||
// security each sslmode provides.
|
||||
//
|
||||
// The sslmode "prefer" (the default), sslmode "allow", and multiple hosts are implemented via the Fallbacks field of
|
||||
|
|
@ -713,7 +715,7 @@ func configTLS(settings map[string]string, thisHost string, parseConfigOptions P
|
|||
// According to PostgreSQL documentation, if a root CA file exists,
|
||||
// the behavior of sslmode=require should be the same as that of verify-ca
|
||||
//
|
||||
// See https://www.postgresql.org/docs/12/libpq-ssl.html
|
||||
// See https://www.postgresql.org/docs/current/libpq-ssl.html
|
||||
if sslrootcert != "" {
|
||||
goto nextCase
|
||||
}
|
||||
|
|
@ -784,8 +786,8 @@ func configTLS(settings map[string]string, thisHost string, parseConfigOptions P
|
|||
if sslpassword != "" {
|
||||
decryptedKey, decryptedError = x509.DecryptPEMBlock(block, []byte(sslpassword))
|
||||
}
|
||||
//if sslpassword not provided or has decryption error when use it
|
||||
//try to find sslpassword with callback function
|
||||
// if sslpassword not provided or has decryption error when use it
|
||||
// try to find sslpassword with callback function
|
||||
if sslpassword == "" || decryptedError != nil {
|
||||
if parseConfigOptions.GetSSLPassword != nil {
|
||||
sslpassword = parseConfigOptions.GetSSLPassword(context.Background())
|
||||
|
|
|
|||
10
vendor/github.com/jackc/pgx/v5/pgconn/errors.go
generated
vendored
10
vendor/github.com/jackc/pgx/v5/pgconn/errors.go
generated
vendored
|
|
@ -27,7 +27,7 @@ func Timeout(err error) bool {
|
|||
}
|
||||
|
||||
// PgError represents an error reported by the PostgreSQL server. See
|
||||
// http://www.postgresql.org/docs/11/static/protocol-error-fields.html for
|
||||
// http://www.postgresql.org/docs/current/static/protocol-error-fields.html for
|
||||
// detailed field description.
|
||||
type PgError struct {
|
||||
Severity string
|
||||
|
|
@ -112,6 +112,14 @@ type ParseConfigError struct {
|
|||
err error
|
||||
}
|
||||
|
||||
func NewParseConfigError(conn, msg string, err error) error {
|
||||
return &ParseConfigError{
|
||||
ConnString: conn,
|
||||
msg: msg,
|
||||
err: err,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *ParseConfigError) Error() string {
|
||||
// Now that ParseConfigError is public and ConnString is available to the developer, perhaps it would be better only
|
||||
// return a static string. That would ensure that the error message cannot leak a password. The ConnString field would
|
||||
|
|
|
|||
2
vendor/github.com/jackc/pgx/v5/pgconn/krb5.go
generated
vendored
2
vendor/github.com/jackc/pgx/v5/pgconn/krb5.go
generated
vendored
|
|
@ -28,7 +28,7 @@ func RegisterGSSProvider(newGSSArg NewGSSFunc) {
|
|||
|
||||
// GSS provides GSSAPI authentication (e.g., Kerberos).
|
||||
type GSS interface {
|
||||
GetInitToken(host string, service string) ([]byte, error)
|
||||
GetInitToken(host, service string) ([]byte, error)
|
||||
GetInitTokenFromSPN(spn string) ([]byte, error)
|
||||
Continue(inToken []byte) (done bool, outToken []byte, err error)
|
||||
}
|
||||
|
|
|
|||
26
vendor/github.com/jackc/pgx/v5/pgconn/pgconn.go
generated
vendored
26
vendor/github.com/jackc/pgx/v5/pgconn/pgconn.go
generated
vendored
|
|
@ -135,7 +135,7 @@ func ConnectWithOptions(ctx context.Context, connString string, parseConfigOptio
|
|||
//
|
||||
// If config.Fallbacks are present they will sequentially be tried in case of error establishing network connection. An
|
||||
// authentication error will terminate the chain of attempts (like libpq:
|
||||
// https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS) and be returned as the error.
|
||||
// https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-MULTIPLE-HOSTS) and be returned as the error.
|
||||
func ConnectConfig(ctx context.Context, config *Config) (*PgConn, error) {
|
||||
// Default values are set in ParseConfig. Enforce initial creation by ParseConfig rather than setting defaults from
|
||||
// zero values.
|
||||
|
|
@ -991,7 +991,8 @@ func noticeResponseToNotice(msg *pgproto3.NoticeResponse) *Notice {
|
|||
|
||||
// CancelRequest sends a cancel request to the PostgreSQL server. It returns an error if unable to deliver the cancel
|
||||
// request, but lack of an error does not ensure that the query was canceled. As specified in the documentation, there
|
||||
// is no way to be sure a query was canceled. See https://www.postgresql.org/docs/11/protocol-flow.html#id-1.10.5.7.9
|
||||
// is no way to be sure a query was canceled.
|
||||
// See https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-FLOW-CANCELING-REQUESTS
|
||||
func (pgConn *PgConn) CancelRequest(ctx context.Context) error {
|
||||
// Open a cancellation request to the same server. The address is taken from the net.Conn directly instead of reusing
|
||||
// the connection config. This is important in high availability configurations where fallback connections may be
|
||||
|
|
@ -1140,7 +1141,7 @@ func (pgConn *PgConn) Exec(ctx context.Context, sql string) *MultiResultReader {
|
|||
// binary format. If resultFormats is nil all results will be in text format.
|
||||
//
|
||||
// ResultReader must be closed before PgConn can be used again.
|
||||
func (pgConn *PgConn) ExecParams(ctx context.Context, sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats []int16, resultFormats []int16) *ResultReader {
|
||||
func (pgConn *PgConn) ExecParams(ctx context.Context, sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats, resultFormats []int16) *ResultReader {
|
||||
result := pgConn.execExtendedPrefix(ctx, paramValues)
|
||||
if result.closed {
|
||||
return result
|
||||
|
|
@ -1166,7 +1167,7 @@ func (pgConn *PgConn) ExecParams(ctx context.Context, sql string, paramValues []
|
|||
// binary format. If resultFormats is nil all results will be in text format.
|
||||
//
|
||||
// ResultReader must be closed before PgConn can be used again.
|
||||
func (pgConn *PgConn) ExecPrepared(ctx context.Context, stmtName string, paramValues [][]byte, paramFormats []int16, resultFormats []int16) *ResultReader {
|
||||
func (pgConn *PgConn) ExecPrepared(ctx context.Context, stmtName string, paramValues [][]byte, paramFormats, resultFormats []int16) *ResultReader {
|
||||
result := pgConn.execExtendedPrefix(ctx, paramValues)
|
||||
if result.closed {
|
||||
return result
|
||||
|
|
@ -1373,7 +1374,14 @@ func (pgConn *PgConn) CopyFrom(ctx context.Context, r io.Reader, sql string) (Co
|
|||
close(pgConn.cleanupDone)
|
||||
return CommandTag{}, normalizeTimeoutError(ctx, err)
|
||||
}
|
||||
msg, _ := pgConn.receiveMessage()
|
||||
// peekMessage never returns err in the bufferingReceive mode - it only forwards the bufferingReceive variables.
|
||||
// Therefore, the only case for receiveMessage to return err is during handling of the ErrorResponse message type
|
||||
// and using pgOnError handler to determine the connection is no longer valid (and thus closing the conn).
|
||||
msg, serverError := pgConn.receiveMessage()
|
||||
if serverError != nil {
|
||||
close(abortCopyChan)
|
||||
return CommandTag{}, serverError
|
||||
}
|
||||
|
||||
switch msg := msg.(type) {
|
||||
case *pgproto3.ErrorResponse:
|
||||
|
|
@ -1712,7 +1720,7 @@ type Batch struct {
|
|||
}
|
||||
|
||||
// ExecParams appends an ExecParams command to the batch. See PgConn.ExecParams for parameter descriptions.
|
||||
func (batch *Batch) ExecParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats []int16, resultFormats []int16) {
|
||||
func (batch *Batch) ExecParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats, resultFormats []int16) {
|
||||
if batch.err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -1725,7 +1733,7 @@ func (batch *Batch) ExecParams(sql string, paramValues [][]byte, paramOIDs []uin
|
|||
}
|
||||
|
||||
// ExecPrepared appends an ExecPrepared e command to the batch. See PgConn.ExecPrepared for parameter descriptions.
|
||||
func (batch *Batch) ExecPrepared(stmtName string, paramValues [][]byte, paramFormats []int16, resultFormats []int16) {
|
||||
func (batch *Batch) ExecPrepared(stmtName string, paramValues [][]byte, paramFormats, resultFormats []int16) {
|
||||
if batch.err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -2201,7 +2209,7 @@ func (p *Pipeline) SendDeallocate(name string) {
|
|||
}
|
||||
|
||||
// SendQueryParams is the pipeline version of *PgConn.QueryParams.
|
||||
func (p *Pipeline) SendQueryParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats []int16, resultFormats []int16) {
|
||||
func (p *Pipeline) SendQueryParams(sql string, paramValues [][]byte, paramOIDs []uint32, paramFormats, resultFormats []int16) {
|
||||
if p.closed {
|
||||
return
|
||||
}
|
||||
|
|
@ -2214,7 +2222,7 @@ func (p *Pipeline) SendQueryParams(sql string, paramValues [][]byte, paramOIDs [
|
|||
}
|
||||
|
||||
// SendQueryPrepared is the pipeline version of *PgConn.QueryPrepared.
|
||||
func (p *Pipeline) SendQueryPrepared(stmtName string, paramValues [][]byte, paramFormats []int16, resultFormats []int16) {
|
||||
func (p *Pipeline) SendQueryPrepared(stmtName string, paramValues [][]byte, paramFormats, resultFormats []int16) {
|
||||
if p.closed {
|
||||
return
|
||||
}
|
||||
|
|
|
|||
3
vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go
generated
vendored
3
vendor/github.com/jackc/pgx/v5/pgproto3/authentication_cleartext_password.go
generated
vendored
|
|
@ -9,8 +9,7 @@ import (
|
|||
)
|
||||
|
||||
// AuthenticationCleartextPassword is a message sent from the backend indicating that a clear-text password is required.
|
||||
type AuthenticationCleartextPassword struct {
|
||||
}
|
||||
type AuthenticationCleartextPassword struct{}
|
||||
|
||||
// Backend identifies this message as sendable by the PostgreSQL backend.
|
||||
func (*AuthenticationCleartextPassword) Backend() {}
|
||||
|
|
|
|||
3
vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go
generated
vendored
3
vendor/github.com/jackc/pgx/v5/pgproto3/authentication_ok.go
generated
vendored
|
|
@ -9,8 +9,7 @@ import (
|
|||
)
|
||||
|
||||
// AuthenticationOk is a message sent from the backend indicating that authentication was successful.
|
||||
type AuthenticationOk struct {
|
||||
}
|
||||
type AuthenticationOk struct{}
|
||||
|
||||
// Backend identifies this message as sendable by the PostgreSQL backend.
|
||||
func (*AuthenticationOk) Backend() {}
|
||||
|
|
|
|||
3
vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go
generated
vendored
3
vendor/github.com/jackc/pgx/v5/pgproto3/copy_done.go
generated
vendored
|
|
@ -4,8 +4,7 @@ import (
|
|||
"encoding/json"
|
||||
)
|
||||
|
||||
type CopyDone struct {
|
||||
}
|
||||
type CopyDone struct{}
|
||||
|
||||
// Backend identifies this message as sendable by the PostgreSQL backend.
|
||||
func (*CopyDone) Backend() {}
|
||||
|
|
|
|||
3
vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go
generated
vendored
3
vendor/github.com/jackc/pgx/v5/pgproto3/gss_enc_request.go
generated
vendored
|
|
@ -10,8 +10,7 @@ import (
|
|||
|
||||
const gssEncReqNumber = 80877104
|
||||
|
||||
type GSSEncRequest struct {
|
||||
}
|
||||
type GSSEncRequest struct{}
|
||||
|
||||
// Frontend identifies this message as sendable by a PostgreSQL frontend.
|
||||
func (*GSSEncRequest) Frontend() {}
|
||||
|
|
|
|||
1
vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go
generated
vendored
1
vendor/github.com/jackc/pgx/v5/pgproto3/row_description.go
generated
vendored
|
|
@ -56,7 +56,6 @@ func (*RowDescription) Backend() {}
|
|||
// Decode decodes src into dst. src must contain the complete message with the exception of the initial 1 byte message
|
||||
// type identifier and 4 byte message length.
|
||||
func (dst *RowDescription) Decode(src []byte) error {
|
||||
|
||||
if len(src) < 2 {
|
||||
return &invalidMessageFormatErr{messageType: "RowDescription"}
|
||||
}
|
||||
|
|
|
|||
3
vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go
generated
vendored
3
vendor/github.com/jackc/pgx/v5/pgproto3/ssl_request.go
generated
vendored
|
|
@ -10,8 +10,7 @@ import (
|
|||
|
||||
const sslRequestNumber = 80877103
|
||||
|
||||
type SSLRequest struct {
|
||||
}
|
||||
type SSLRequest struct{}
|
||||
|
||||
// Frontend identifies this message as sendable by a PostgreSQL frontend.
|
||||
func (*SSLRequest) Frontend() {}
|
||||
|
|
|
|||
8
vendor/github.com/jackc/pgx/v5/pgtype/array.go
generated
vendored
8
vendor/github.com/jackc/pgx/v5/pgtype/array.go
generated
vendored
|
|
@ -374,8 +374,8 @@ func quoteArrayElementIfNeeded(src string) string {
|
|||
return src
|
||||
}
|
||||
|
||||
// Array represents a PostgreSQL array for T. It implements the ArrayGetter and ArraySetter interfaces. It preserves
|
||||
// PostgreSQL dimensions and custom lower bounds. Use FlatArray if these are not needed.
|
||||
// Array represents a PostgreSQL array for T. It implements the [ArrayGetter] and [ArraySetter] interfaces. It preserves
|
||||
// PostgreSQL dimensions and custom lower bounds. Use [FlatArray] if these are not needed.
|
||||
type Array[T any] struct {
|
||||
Elements []T
|
||||
Dims []ArrayDimension
|
||||
|
|
@ -419,8 +419,8 @@ func (a Array[T]) ScanIndexType() any {
|
|||
return new(T)
|
||||
}
|
||||
|
||||
// FlatArray implements the ArrayGetter and ArraySetter interfaces for any slice of T. It ignores PostgreSQL dimensions
|
||||
// and custom lower bounds. Use Array to preserve these.
|
||||
// FlatArray implements the [ArrayGetter] and [ArraySetter] interfaces for any slice of T. It ignores PostgreSQL dimensions
|
||||
// and custom lower bounds. Use [Array] to preserve these.
|
||||
type FlatArray[T any] []T
|
||||
|
||||
func (a FlatArray[T]) Dimensions() []ArrayDimension {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/bits.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/bits.go
generated
vendored
|
|
@ -23,16 +23,18 @@ type Bits struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanBits implements the [BitsScanner] interface.
|
||||
func (b *Bits) ScanBits(v Bits) error {
|
||||
*b = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// BitsValue implements the [BitsValuer] interface.
|
||||
func (b Bits) BitsValue() (Bits, error) {
|
||||
return b, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Bits) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Bits{}
|
||||
|
|
@ -47,7 +49,7 @@ func (dst *Bits) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Bits) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -127,7 +129,6 @@ func (encodePlanBitsCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (BitsCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
11
vendor/github.com/jackc/pgx/v5/pgtype/bool.go
generated
vendored
11
vendor/github.com/jackc/pgx/v5/pgtype/bool.go
generated
vendored
|
|
@ -22,16 +22,18 @@ type Bool struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanBool implements the [BoolScanner] interface.
|
||||
func (b *Bool) ScanBool(v Bool) error {
|
||||
*b = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// BoolValue implements the [BoolValuer] interface.
|
||||
func (b Bool) BoolValue() (Bool, error) {
|
||||
return b, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Bool) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Bool{}
|
||||
|
|
@ -61,7 +63,7 @@ func (dst *Bool) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Bool) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -70,6 +72,7 @@ func (src Bool) Value() (driver.Value, error) {
|
|||
return src.Bool, nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Bool) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -82,6 +85,7 @@ func (src Bool) MarshalJSON() ([]byte, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Bool) UnmarshalJSON(b []byte) error {
|
||||
var v *bool
|
||||
err := json.Unmarshal(b, &v)
|
||||
|
|
@ -200,7 +204,6 @@ func (encodePlanBoolCodecTextBool) Encode(value any, buf []byte) (newBuf []byte,
|
|||
}
|
||||
|
||||
func (BoolCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
@ -328,7 +331,7 @@ func (scanPlanTextAnyToBoolScanner) Scan(src []byte, dst any) error {
|
|||
return s.ScanBool(Bool{Bool: v, Valid: true})
|
||||
}
|
||||
|
||||
// https://www.postgresql.org/docs/11/datatype-boolean.html
|
||||
// https://www.postgresql.org/docs/current/datatype-boolean.html
|
||||
func planTextToBool(src []byte) (bool, error) {
|
||||
s := string(bytes.ToLower(bytes.TrimSpace(src)))
|
||||
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/box.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/box.go
generated
vendored
|
|
@ -24,16 +24,18 @@ type Box struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanBox implements the [BoxScanner] interface.
|
||||
func (b *Box) ScanBox(v Box) error {
|
||||
*b = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// BoxValue implements the [BoxValuer] interface.
|
||||
func (b Box) BoxValue() (Box, error) {
|
||||
return b, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Box) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Box{}
|
||||
|
|
@ -48,7 +50,7 @@ func (dst *Box) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Box) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -127,7 +129,6 @@ func (encodePlanBoxCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (BoxCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
2
vendor/github.com/jackc/pgx/v5/pgtype/builtin_wrappers.go
generated
vendored
2
vendor/github.com/jackc/pgx/v5/pgtype/builtin_wrappers.go
generated
vendored
|
|
@ -527,6 +527,7 @@ func (w *netIPNetWrapper) ScanNetipPrefix(v netip.Prefix) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w netIPNetWrapper) NetipPrefixValue() (netip.Prefix, error) {
|
||||
ip, ok := netip.AddrFromSlice(w.IP)
|
||||
if !ok {
|
||||
|
|
@ -881,7 +882,6 @@ func (a *anyMultiDimSliceArray) SetDimensions(dimensions []ArrayDimension) error
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (a *anyMultiDimSliceArray) makeMultidimensionalSlice(sliceType reflect.Type, dimensions []ArrayDimension, flatSlice reflect.Value, flatSliceIdx int) reflect.Value {
|
||||
|
|
|
|||
1
vendor/github.com/jackc/pgx/v5/pgtype/bytea.go
generated
vendored
1
vendor/github.com/jackc/pgx/v5/pgtype/bytea.go
generated
vendored
|
|
@ -148,7 +148,6 @@ func (encodePlanBytesCodecTextBytesValuer) Encode(value any, buf []byte) (newBuf
|
|||
}
|
||||
|
||||
func (ByteaCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
6
vendor/github.com/jackc/pgx/v5/pgtype/circle.go
generated
vendored
6
vendor/github.com/jackc/pgx/v5/pgtype/circle.go
generated
vendored
|
|
@ -25,16 +25,18 @@ type Circle struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanCircle implements the [CircleScanner] interface.
|
||||
func (c *Circle) ScanCircle(v Circle) error {
|
||||
*c = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// CircleValue implements the [CircleValuer] interface.
|
||||
func (c Circle) CircleValue() (Circle, error) {
|
||||
return c, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Circle) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Circle{}
|
||||
|
|
@ -49,7 +51,7 @@ func (dst *Circle) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Circle) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
|
|||
1
vendor/github.com/jackc/pgx/v5/pgtype/composite.go
generated
vendored
1
vendor/github.com/jackc/pgx/v5/pgtype/composite.go
generated
vendored
|
|
@ -276,7 +276,6 @@ func (c *CompositeCodec) DecodeValue(m *Map, oid uint32, format int16, src []byt
|
|||
default:
|
||||
return nil, fmt.Errorf("unknown format code %d", format)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
type CompositeBinaryScanner struct {
|
||||
|
|
|
|||
9
vendor/github.com/jackc/pgx/v5/pgtype/date.go
generated
vendored
9
vendor/github.com/jackc/pgx/v5/pgtype/date.go
generated
vendored
|
|
@ -26,11 +26,13 @@ type Date struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanDate implements the [DateScanner] interface.
|
||||
func (d *Date) ScanDate(v Date) error {
|
||||
*d = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// DateValue implements the [DateValuer] interface.
|
||||
func (d Date) DateValue() (Date, error) {
|
||||
return d, nil
|
||||
}
|
||||
|
|
@ -40,7 +42,7 @@ const (
|
|||
infinityDayOffset = 2147483647
|
||||
)
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Date) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Date{}
|
||||
|
|
@ -58,7 +60,7 @@ func (dst *Date) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Date) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -70,6 +72,7 @@ func (src Date) Value() (driver.Value, error) {
|
|||
return src.Time, nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Date) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -89,6 +92,7 @@ func (src Date) MarshalJSON() ([]byte, error) {
|
|||
return json.Marshal(s)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Date) UnmarshalJSON(b []byte) error {
|
||||
var s *string
|
||||
err := json.Unmarshal(b, &s)
|
||||
|
|
@ -223,7 +227,6 @@ func (encodePlanDateCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (DateCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
12
vendor/github.com/jackc/pgx/v5/pgtype/float4.go
generated
vendored
12
vendor/github.com/jackc/pgx/v5/pgtype/float4.go
generated
vendored
|
|
@ -16,26 +16,29 @@ type Float4 struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanFloat64 implements the Float64Scanner interface.
|
||||
// ScanFloat64 implements the [Float64Scanner] interface.
|
||||
func (f *Float4) ScanFloat64(n Float8) error {
|
||||
*f = Float4{Float32: float32(n.Float64), Valid: n.Valid}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Float64Value implements the [Float64Valuer] interface.
|
||||
func (f Float4) Float64Value() (Float8, error) {
|
||||
return Float8{Float64: float64(f.Float32), Valid: f.Valid}, nil
|
||||
}
|
||||
|
||||
// ScanInt64 implements the [Int64Scanner] interface.
|
||||
func (f *Float4) ScanInt64(n Int8) error {
|
||||
*f = Float4{Float32: float32(n.Int64), Valid: n.Valid}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Int64Value implements the [Int64Valuer] interface.
|
||||
func (f Float4) Int64Value() (Int8, error) {
|
||||
return Int8{Int64: int64(f.Float32), Valid: f.Valid}, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (f *Float4) Scan(src any) error {
|
||||
if src == nil {
|
||||
*f = Float4{}
|
||||
|
|
@ -58,7 +61,7 @@ func (f *Float4) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (f Float4) Value() (driver.Value, error) {
|
||||
if !f.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -66,6 +69,7 @@ func (f Float4) Value() (driver.Value, error) {
|
|||
return float64(f.Float32), nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (f Float4) MarshalJSON() ([]byte, error) {
|
||||
if !f.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -73,6 +77,7 @@ func (f Float4) MarshalJSON() ([]byte, error) {
|
|||
return json.Marshal(f.Float32)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (f *Float4) UnmarshalJSON(b []byte) error {
|
||||
var n *float32
|
||||
err := json.Unmarshal(b, &n)
|
||||
|
|
@ -170,7 +175,6 @@ func (encodePlanFloat4CodecBinaryInt64Valuer) Encode(value any, buf []byte) (new
|
|||
}
|
||||
|
||||
func (Float4Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
12
vendor/github.com/jackc/pgx/v5/pgtype/float8.go
generated
vendored
12
vendor/github.com/jackc/pgx/v5/pgtype/float8.go
generated
vendored
|
|
@ -24,26 +24,29 @@ type Float8 struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanFloat64 implements the Float64Scanner interface.
|
||||
// ScanFloat64 implements the [Float64Scanner] interface.
|
||||
func (f *Float8) ScanFloat64(n Float8) error {
|
||||
*f = n
|
||||
return nil
|
||||
}
|
||||
|
||||
// Float64Value implements the [Float64Valuer] interface.
|
||||
func (f Float8) Float64Value() (Float8, error) {
|
||||
return f, nil
|
||||
}
|
||||
|
||||
// ScanInt64 implements the [Int64Scanner] interface.
|
||||
func (f *Float8) ScanInt64(n Int8) error {
|
||||
*f = Float8{Float64: float64(n.Int64), Valid: n.Valid}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Int64Value implements the [Int64Valuer] interface.
|
||||
func (f Float8) Int64Value() (Int8, error) {
|
||||
return Int8{Int64: int64(f.Float64), Valid: f.Valid}, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (f *Float8) Scan(src any) error {
|
||||
if src == nil {
|
||||
*f = Float8{}
|
||||
|
|
@ -66,7 +69,7 @@ func (f *Float8) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (f Float8) Value() (driver.Value, error) {
|
||||
if !f.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -74,6 +77,7 @@ func (f Float8) Value() (driver.Value, error) {
|
|||
return f.Float64, nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (f Float8) MarshalJSON() ([]byte, error) {
|
||||
if !f.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -81,6 +85,7 @@ func (f Float8) MarshalJSON() ([]byte, error) {
|
|||
return json.Marshal(f.Float64)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (f *Float8) UnmarshalJSON(b []byte) error {
|
||||
var n *float64
|
||||
err := json.Unmarshal(b, &n)
|
||||
|
|
@ -208,7 +213,6 @@ func (encodePlanTextInt64Valuer) Encode(value any, buf []byte) (newBuf []byte, e
|
|||
}
|
||||
|
||||
func (Float8Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
11
vendor/github.com/jackc/pgx/v5/pgtype/hstore.go
generated
vendored
11
vendor/github.com/jackc/pgx/v5/pgtype/hstore.go
generated
vendored
|
|
@ -22,16 +22,18 @@ type HstoreValuer interface {
|
|||
// associated with its keys.
|
||||
type Hstore map[string]*string
|
||||
|
||||
// ScanHstore implements the [HstoreScanner] interface.
|
||||
func (h *Hstore) ScanHstore(v Hstore) error {
|
||||
*h = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// HstoreValue implements the [HstoreValuer] interface.
|
||||
func (h Hstore) HstoreValue() (Hstore, error) {
|
||||
return h, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (h *Hstore) Scan(src any) error {
|
||||
if src == nil {
|
||||
*h = nil
|
||||
|
|
@ -46,7 +48,7 @@ func (h *Hstore) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (h Hstore) Value() (driver.Value, error) {
|
||||
if h == nil {
|
||||
return nil, nil
|
||||
|
|
@ -162,7 +164,6 @@ func (encodePlanHstoreCodecText) Encode(value any, buf []byte) (newBuf []byte, e
|
|||
}
|
||||
|
||||
func (HstoreCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
@ -298,7 +299,7 @@ func (p *hstoreParser) consume() (b byte, end bool) {
|
|||
return b, false
|
||||
}
|
||||
|
||||
func unexpectedByteErr(actualB byte, expectedB byte) error {
|
||||
func unexpectedByteErr(actualB, expectedB byte) error {
|
||||
return fmt.Errorf("expected '%c' ('%#v'); found '%c' ('%#v')", expectedB, expectedB, actualB, actualB)
|
||||
}
|
||||
|
||||
|
|
@ -316,7 +317,7 @@ func (p *hstoreParser) consumeExpectedByte(expectedB byte) error {
|
|||
|
||||
// consumeExpected2 consumes two expected bytes or returns an error.
|
||||
// This was a bit faster than using a string argument (better inlining? Not sure).
|
||||
func (p *hstoreParser) consumeExpected2(one byte, two byte) error {
|
||||
func (p *hstoreParser) consumeExpected2(one, two byte) error {
|
||||
if p.pos+2 > len(p.str) {
|
||||
return errors.New("unexpected end of string")
|
||||
}
|
||||
|
|
|
|||
3
vendor/github.com/jackc/pgx/v5/pgtype/inet.go
generated
vendored
3
vendor/github.com/jackc/pgx/v5/pgtype/inet.go
generated
vendored
|
|
@ -24,7 +24,7 @@ type NetipPrefixValuer interface {
|
|||
NetipPrefixValue() (netip.Prefix, error)
|
||||
}
|
||||
|
||||
// InetCodec handles both inet and cidr PostgreSQL types. The preferred Go types are netip.Prefix and netip.Addr. If
|
||||
// InetCodec handles both inet and cidr PostgreSQL types. The preferred Go types are [netip.Prefix] and [netip.Addr]. If
|
||||
// IsValid() is false then they are treated as SQL NULL.
|
||||
type InetCodec struct{}
|
||||
|
||||
|
|
@ -107,7 +107,6 @@ func (encodePlanInetCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (InetCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
27
vendor/github.com/jackc/pgx/v5/pgtype/int.go
generated
vendored
27
vendor/github.com/jackc/pgx/v5/pgtype/int.go
generated
vendored
|
|
@ -26,7 +26,7 @@ type Int2 struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanInt64 implements the Int64Scanner interface.
|
||||
// ScanInt64 implements the [Int64Scanner] interface.
|
||||
func (dst *Int2) ScanInt64(n Int8) error {
|
||||
if !n.Valid {
|
||||
*dst = Int2{}
|
||||
|
|
@ -44,11 +44,12 @@ func (dst *Int2) ScanInt64(n Int8) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Int64Value implements the [Int64Valuer] interface.
|
||||
func (n Int2) Int64Value() (Int8, error) {
|
||||
return Int8{Int64: int64(n.Int16), Valid: n.Valid}, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Int2) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Int2{}
|
||||
|
|
@ -87,7 +88,7 @@ func (dst *Int2) Scan(src any) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Int2) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -95,6 +96,7 @@ func (src Int2) Value() (driver.Value, error) {
|
|||
return int64(src.Int16), nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Int2) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -102,6 +104,7 @@ func (src Int2) MarshalJSON() ([]byte, error) {
|
|||
return []byte(strconv.FormatInt(int64(src.Int16), 10)), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Int2) UnmarshalJSON(b []byte) error {
|
||||
var n *int16
|
||||
err := json.Unmarshal(b, &n)
|
||||
|
|
@ -586,7 +589,7 @@ type Int4 struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanInt64 implements the Int64Scanner interface.
|
||||
// ScanInt64 implements the [Int64Scanner] interface.
|
||||
func (dst *Int4) ScanInt64(n Int8) error {
|
||||
if !n.Valid {
|
||||
*dst = Int4{}
|
||||
|
|
@ -604,11 +607,12 @@ func (dst *Int4) ScanInt64(n Int8) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Int64Value implements the [Int64Valuer] interface.
|
||||
func (n Int4) Int64Value() (Int8, error) {
|
||||
return Int8{Int64: int64(n.Int32), Valid: n.Valid}, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Int4) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Int4{}
|
||||
|
|
@ -647,7 +651,7 @@ func (dst *Int4) Scan(src any) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Int4) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -655,6 +659,7 @@ func (src Int4) Value() (driver.Value, error) {
|
|||
return int64(src.Int32), nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Int4) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -662,6 +667,7 @@ func (src Int4) MarshalJSON() ([]byte, error) {
|
|||
return []byte(strconv.FormatInt(int64(src.Int32), 10)), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Int4) UnmarshalJSON(b []byte) error {
|
||||
var n *int32
|
||||
err := json.Unmarshal(b, &n)
|
||||
|
|
@ -1157,7 +1163,7 @@ type Int8 struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanInt64 implements the Int64Scanner interface.
|
||||
// ScanInt64 implements the [Int64Scanner] interface.
|
||||
func (dst *Int8) ScanInt64(n Int8) error {
|
||||
if !n.Valid {
|
||||
*dst = Int8{}
|
||||
|
|
@ -1175,11 +1181,12 @@ func (dst *Int8) ScanInt64(n Int8) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Int64Value implements the [Int64Valuer] interface.
|
||||
func (n Int8) Int64Value() (Int8, error) {
|
||||
return Int8{Int64: int64(n.Int64), Valid: n.Valid}, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Int8) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Int8{}
|
||||
|
|
@ -1218,7 +1225,7 @@ func (dst *Int8) Scan(src any) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Int8) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -1226,6 +1233,7 @@ func (src Int8) Value() (driver.Value, error) {
|
|||
return int64(src.Int64), nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Int8) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -1233,6 +1241,7 @@ func (src Int8) MarshalJSON() ([]byte, error) {
|
|||
return []byte(strconv.FormatInt(int64(src.Int64), 10)), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Int8) UnmarshalJSON(b []byte) error {
|
||||
var n *int64
|
||||
err := json.Unmarshal(b, &n)
|
||||
|
|
|
|||
9
vendor/github.com/jackc/pgx/v5/pgtype/int.go.erb
generated
vendored
9
vendor/github.com/jackc/pgx/v5/pgtype/int.go.erb
generated
vendored
|
|
@ -27,7 +27,7 @@ type Int<%= pg_byte_size %> struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanInt64 implements the Int64Scanner interface.
|
||||
// ScanInt64 implements the [Int64Scanner] interface.
|
||||
func (dst *Int<%= pg_byte_size %>) ScanInt64(n Int8) error {
|
||||
if !n.Valid {
|
||||
*dst = Int<%= pg_byte_size %>{}
|
||||
|
|
@ -45,11 +45,12 @@ func (dst *Int<%= pg_byte_size %>) ScanInt64(n Int8) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Int64Value implements the [Int64Valuer] interface.
|
||||
func (n Int<%= pg_byte_size %>) Int64Value() (Int8, error) {
|
||||
return Int8{Int64: int64(n.Int<%= pg_bit_size %>), Valid: n.Valid}, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Int<%= pg_byte_size %>) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Int<%= pg_byte_size %>{}
|
||||
|
|
@ -88,7 +89,7 @@ func (dst *Int<%= pg_byte_size %>) Scan(src any) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Int<%= pg_byte_size %>) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -96,6 +97,7 @@ func (src Int<%= pg_byte_size %>) Value() (driver.Value, error) {
|
|||
return int64(src.Int<%= pg_bit_size %>), nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Int<%= pg_byte_size %>) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -103,6 +105,7 @@ func (src Int<%= pg_byte_size %>) MarshalJSON() ([]byte, error) {
|
|||
return []byte(strconv.FormatInt(int64(src.Int<%= pg_bit_size %>), 10)), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Int<%= pg_byte_size %>) UnmarshalJSON(b []byte) error {
|
||||
var n *int<%= pg_bit_size %>
|
||||
err := json.Unmarshal(b, &n)
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/interval.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/interval.go
generated
vendored
|
|
@ -33,16 +33,18 @@ type Interval struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanInterval implements the [IntervalScanner] interface.
|
||||
func (interval *Interval) ScanInterval(v Interval) error {
|
||||
*interval = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// IntervalValue implements the [IntervalValuer] interface.
|
||||
func (interval Interval) IntervalValue() (Interval, error) {
|
||||
return interval, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (interval *Interval) Scan(src any) error {
|
||||
if src == nil {
|
||||
*interval = Interval{}
|
||||
|
|
@ -57,7 +59,7 @@ func (interval *Interval) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (interval Interval) Value() (driver.Value, error) {
|
||||
if !interval.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -157,7 +159,6 @@ func (encodePlanIntervalCodecText) Encode(value any, buf []byte) (newBuf []byte,
|
|||
}
|
||||
|
||||
func (IntervalCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/line.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/line.go
generated
vendored
|
|
@ -24,11 +24,13 @@ type Line struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanLine implements the [LineScanner] interface.
|
||||
func (line *Line) ScanLine(v Line) error {
|
||||
*line = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// LineValue implements the [LineValuer] interface.
|
||||
func (line Line) LineValue() (Line, error) {
|
||||
return line, nil
|
||||
}
|
||||
|
|
@ -37,7 +39,7 @@ func (line *Line) Set(src any) error {
|
|||
return fmt.Errorf("cannot convert %v to Line", src)
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (line *Line) Scan(src any) error {
|
||||
if src == nil {
|
||||
*line = Line{}
|
||||
|
|
@ -52,7 +54,7 @@ func (line *Line) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (line Line) Value() (driver.Value, error) {
|
||||
if !line.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -129,7 +131,6 @@ func (encodePlanLineCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (LineCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/lseg.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/lseg.go
generated
vendored
|
|
@ -24,16 +24,18 @@ type Lseg struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanLseg implements the [LsegScanner] interface.
|
||||
func (lseg *Lseg) ScanLseg(v Lseg) error {
|
||||
*lseg = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// LsegValue implements the [LsegValuer] interface.
|
||||
func (lseg Lseg) LsegValue() (Lseg, error) {
|
||||
return lseg, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (lseg *Lseg) Scan(src any) error {
|
||||
if src == nil {
|
||||
*lseg = Lseg{}
|
||||
|
|
@ -48,7 +50,7 @@ func (lseg *Lseg) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (lseg Lseg) Value() (driver.Value, error) {
|
||||
if !lseg.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -127,7 +129,6 @@ func (encodePlanLsegCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (LsegCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
5
vendor/github.com/jackc/pgx/v5/pgtype/multirange.go
generated
vendored
5
vendor/github.com/jackc/pgx/v5/pgtype/multirange.go
generated
vendored
|
|
@ -374,7 +374,6 @@ parseValueLoop:
|
|||
}
|
||||
|
||||
return elements, nil
|
||||
|
||||
}
|
||||
|
||||
func parseRange(buf *bytes.Buffer) (string, error) {
|
||||
|
|
@ -403,8 +402,8 @@ func parseRange(buf *bytes.Buffer) (string, error) {
|
|||
|
||||
// Multirange is a generic multirange type.
|
||||
//
|
||||
// T should implement RangeValuer and *T should implement RangeScanner. However, there does not appear to be a way to
|
||||
// enforce the RangeScanner constraint.
|
||||
// T should implement [RangeValuer] and *T should implement [RangeScanner]. However, there does not appear to be a way to
|
||||
// enforce the [RangeScanner] constraint.
|
||||
type Multirange[T RangeValuer] []T
|
||||
|
||||
func (r Multirange[T]) IsNull() bool {
|
||||
|
|
|
|||
34
vendor/github.com/jackc/pgx/v5/pgtype/numeric.go
generated
vendored
34
vendor/github.com/jackc/pgx/v5/pgtype/numeric.go
generated
vendored
|
|
@ -27,16 +27,20 @@ const (
|
|||
pgNumericNegInfSign = 0xf000
|
||||
)
|
||||
|
||||
var big0 *big.Int = big.NewInt(0)
|
||||
var big1 *big.Int = big.NewInt(1)
|
||||
var big10 *big.Int = big.NewInt(10)
|
||||
var big100 *big.Int = big.NewInt(100)
|
||||
var big1000 *big.Int = big.NewInt(1000)
|
||||
var (
|
||||
big0 *big.Int = big.NewInt(0)
|
||||
big1 *big.Int = big.NewInt(1)
|
||||
big10 *big.Int = big.NewInt(10)
|
||||
big100 *big.Int = big.NewInt(100)
|
||||
big1000 *big.Int = big.NewInt(1000)
|
||||
)
|
||||
|
||||
var bigNBase *big.Int = big.NewInt(nbase)
|
||||
var bigNBaseX2 *big.Int = big.NewInt(nbase * nbase)
|
||||
var bigNBaseX3 *big.Int = big.NewInt(nbase * nbase * nbase)
|
||||
var bigNBaseX4 *big.Int = big.NewInt(nbase * nbase * nbase * nbase)
|
||||
var (
|
||||
bigNBase *big.Int = big.NewInt(nbase)
|
||||
bigNBaseX2 *big.Int = big.NewInt(nbase * nbase)
|
||||
bigNBaseX3 *big.Int = big.NewInt(nbase * nbase * nbase)
|
||||
bigNBaseX4 *big.Int = big.NewInt(nbase * nbase * nbase * nbase)
|
||||
)
|
||||
|
||||
type NumericScanner interface {
|
||||
ScanNumeric(v Numeric) error
|
||||
|
|
@ -54,15 +58,18 @@ type Numeric struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanNumeric implements the [NumericScanner] interface.
|
||||
func (n *Numeric) ScanNumeric(v Numeric) error {
|
||||
*n = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// NumericValue implements the [NumericValuer] interface.
|
||||
func (n Numeric) NumericValue() (Numeric, error) {
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// Float64Value implements the [Float64Valuer] interface.
|
||||
func (n Numeric) Float64Value() (Float8, error) {
|
||||
if !n.Valid {
|
||||
return Float8{}, nil
|
||||
|
|
@ -92,6 +99,7 @@ func (n Numeric) Float64Value() (Float8, error) {
|
|||
return Float8{Float64: f, Valid: true}, nil
|
||||
}
|
||||
|
||||
// ScanInt64 implements the [Int64Scanner] interface.
|
||||
func (n *Numeric) ScanInt64(v Int8) error {
|
||||
if !v.Valid {
|
||||
*n = Numeric{}
|
||||
|
|
@ -102,6 +110,7 @@ func (n *Numeric) ScanInt64(v Int8) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Int64Value implements the [Int64Valuer] interface.
|
||||
func (n Numeric) Int64Value() (Int8, error) {
|
||||
if !n.Valid {
|
||||
return Int8{}, nil
|
||||
|
|
@ -203,7 +212,7 @@ func nbaseDigitsToInt64(src []byte) (accum int64, bytesRead, digitsRead int) {
|
|||
return accum, rp, digits
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (n *Numeric) Scan(src any) error {
|
||||
if src == nil {
|
||||
*n = Numeric{}
|
||||
|
|
@ -218,7 +227,7 @@ func (n *Numeric) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (n Numeric) Value() (driver.Value, error) {
|
||||
if !n.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -231,6 +240,7 @@ func (n Numeric) Value() (driver.Value, error) {
|
|||
return string(buf), err
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (n Numeric) MarshalJSON() ([]byte, error) {
|
||||
if !n.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -243,6 +253,7 @@ func (n Numeric) MarshalJSON() ([]byte, error) {
|
|||
return n.numberTextBytes(), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (n *Numeric) UnmarshalJSON(src []byte) error {
|
||||
if bytes.Equal(src, []byte(`null`)) {
|
||||
*n = Numeric{}
|
||||
|
|
@ -553,7 +564,6 @@ func encodeNumericText(n Numeric, buf []byte) (newBuf []byte, err error) {
|
|||
}
|
||||
|
||||
func (NumericCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/path.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/path.go
generated
vendored
|
|
@ -25,16 +25,18 @@ type Path struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanPath implements the [PathScanner] interface.
|
||||
func (path *Path) ScanPath(v Path) error {
|
||||
*path = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// PathValue implements the [PathValuer] interface.
|
||||
func (path Path) PathValue() (Path, error) {
|
||||
return path, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (path *Path) Scan(src any) error {
|
||||
if src == nil {
|
||||
*path = Path{}
|
||||
|
|
@ -49,7 +51,7 @@ func (path *Path) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (path Path) Value() (driver.Value, error) {
|
||||
if !path.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -154,7 +156,6 @@ func (encodePlanPathCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (PathCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
2
vendor/github.com/jackc/pgx/v5/pgtype/pgtype.go
generated
vendored
2
vendor/github.com/jackc/pgx/v5/pgtype/pgtype.go
generated
vendored
|
|
@ -2010,7 +2010,7 @@ var valuerReflectType = reflect.TypeFor[driver.Valuer]()
|
|||
|
||||
// isNilDriverValuer returns true if value is any type of nil unless it implements driver.Valuer. *T is not considered to implement
|
||||
// driver.Valuer if it is only implemented by T.
|
||||
func isNilDriverValuer(value any) (isNil bool, callNilDriverValuer bool) {
|
||||
func isNilDriverValuer(value any) (isNil, callNilDriverValuer bool) {
|
||||
if value == nil {
|
||||
return true, false
|
||||
}
|
||||
|
|
|
|||
9
vendor/github.com/jackc/pgx/v5/pgtype/point.go
generated
vendored
9
vendor/github.com/jackc/pgx/v5/pgtype/point.go
generated
vendored
|
|
@ -30,11 +30,13 @@ type Point struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanPoint implements the [PointScanner] interface.
|
||||
func (p *Point) ScanPoint(v Point) error {
|
||||
*p = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// PointValue implements the [PointValuer] interface.
|
||||
func (p Point) PointValue() (Point, error) {
|
||||
return p, nil
|
||||
}
|
||||
|
|
@ -68,7 +70,7 @@ func parsePoint(src []byte) (*Point, error) {
|
|||
return &Point{P: Vec2{x, y}, Valid: true}, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Point) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Point{}
|
||||
|
|
@ -83,7 +85,7 @@ func (dst *Point) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Point) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -96,6 +98,7 @@ func (src Point) Value() (driver.Value, error) {
|
|||
return string(buf), err
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Point) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -108,6 +111,7 @@ func (src Point) MarshalJSON() ([]byte, error) {
|
|||
return buff.Bytes(), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Point) UnmarshalJSON(point []byte) error {
|
||||
p, err := parsePoint(point)
|
||||
if err != nil {
|
||||
|
|
@ -178,7 +182,6 @@ func (encodePlanPointCodecText) Encode(value any, buf []byte) (newBuf []byte, er
|
|||
}
|
||||
|
||||
func (PointCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/polygon.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/polygon.go
generated
vendored
|
|
@ -24,16 +24,18 @@ type Polygon struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanPolygon implements the [PolygonScanner] interface.
|
||||
func (p *Polygon) ScanPolygon(v Polygon) error {
|
||||
*p = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// PolygonValue implements the [PolygonValuer] interface.
|
||||
func (p Polygon) PolygonValue() (Polygon, error) {
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (p *Polygon) Scan(src any) error {
|
||||
if src == nil {
|
||||
*p = Polygon{}
|
||||
|
|
@ -48,7 +50,7 @@ func (p *Polygon) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (p Polygon) Value() (driver.Value, error) {
|
||||
if !p.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -139,7 +141,6 @@ func (encodePlanPolygonCodecText) Encode(value any, buf []byte) (newBuf []byte,
|
|||
}
|
||||
|
||||
func (PolygonCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
13
vendor/github.com/jackc/pgx/v5/pgtype/range.go
generated
vendored
13
vendor/github.com/jackc/pgx/v5/pgtype/range.go
generated
vendored
|
|
@ -191,11 +191,13 @@ type untypedBinaryRange struct {
|
|||
// 18 = [ = 10010
|
||||
// 24 = = 11000
|
||||
|
||||
const emptyMask = 1
|
||||
const lowerInclusiveMask = 2
|
||||
const upperInclusiveMask = 4
|
||||
const lowerUnboundedMask = 8
|
||||
const upperUnboundedMask = 16
|
||||
const (
|
||||
emptyMask = 1
|
||||
lowerInclusiveMask = 2
|
||||
upperInclusiveMask = 4
|
||||
lowerUnboundedMask = 8
|
||||
upperUnboundedMask = 16
|
||||
)
|
||||
|
||||
func parseUntypedBinaryRange(src []byte) (*untypedBinaryRange, error) {
|
||||
ubr := &untypedBinaryRange{}
|
||||
|
|
@ -273,7 +275,6 @@ func parseUntypedBinaryRange(src []byte) (*untypedBinaryRange, error) {
|
|||
}
|
||||
|
||||
return ubr, nil
|
||||
|
||||
}
|
||||
|
||||
// Range is a generic range type.
|
||||
|
|
|
|||
1
vendor/github.com/jackc/pgx/v5/pgtype/record_codec.go
generated
vendored
1
vendor/github.com/jackc/pgx/v5/pgtype/record_codec.go
generated
vendored
|
|
@ -121,5 +121,4 @@ func (RecordCodec) DecodeValue(m *Map, oid uint32, format int16, src []byte) (an
|
|||
default:
|
||||
return nil, fmt.Errorf("unknown format code %d", format)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
9
vendor/github.com/jackc/pgx/v5/pgtype/text.go
generated
vendored
9
vendor/github.com/jackc/pgx/v5/pgtype/text.go
generated
vendored
|
|
@ -19,16 +19,18 @@ type Text struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanText implements the [TextScanner] interface.
|
||||
func (t *Text) ScanText(v Text) error {
|
||||
*t = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// TextValue implements the [TextValuer] interface.
|
||||
func (t Text) TextValue() (Text, error) {
|
||||
return t, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Text) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Text{}
|
||||
|
|
@ -47,7 +49,7 @@ func (dst *Text) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Text) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -55,6 +57,7 @@ func (src Text) Value() (driver.Value, error) {
|
|||
return src.String, nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Text) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -63,6 +66,7 @@ func (src Text) MarshalJSON() ([]byte, error) {
|
|||
return json.Marshal(src.String)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Text) UnmarshalJSON(b []byte) error {
|
||||
var s *string
|
||||
err := json.Unmarshal(b, &s)
|
||||
|
|
@ -146,7 +150,6 @@ func (encodePlanTextCodecTextValuer) Encode(value any, buf []byte) (newBuf []byt
|
|||
}
|
||||
|
||||
func (TextCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case TextFormatCode, BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/tid.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/tid.go
generated
vendored
|
|
@ -35,16 +35,18 @@ type TID struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanTID implements the [TIDScanner] interface.
|
||||
func (b *TID) ScanTID(v TID) error {
|
||||
*b = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// TIDValue implements the [TIDValuer] interface.
|
||||
func (b TID) TIDValue() (TID, error) {
|
||||
return b, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *TID) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = TID{}
|
||||
|
|
@ -59,7 +61,7 @@ func (dst *TID) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src TID) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -131,7 +133,6 @@ func (encodePlanTIDCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (TIDCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/time.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/time.go
generated
vendored
|
|
@ -29,16 +29,18 @@ type Time struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanTime implements the [TimeScanner] interface.
|
||||
func (t *Time) ScanTime(v Time) error {
|
||||
*t = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// TimeValue implements the [TimeValuer] interface.
|
||||
func (t Time) TimeValue() (Time, error) {
|
||||
return t, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (t *Time) Scan(src any) error {
|
||||
if src == nil {
|
||||
*t = Time{}
|
||||
|
|
@ -58,7 +60,7 @@ func (t *Time) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (t Time) Value() (driver.Value, error) {
|
||||
if !t.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -137,7 +139,6 @@ func (encodePlanTimeCodecText) Encode(value any, buf []byte) (newBuf []byte, err
|
|||
}
|
||||
|
||||
func (TimeCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
14
vendor/github.com/jackc/pgx/v5/pgtype/timestamp.go
generated
vendored
14
vendor/github.com/jackc/pgx/v5/pgtype/timestamp.go
generated
vendored
|
|
@ -11,8 +11,10 @@ import (
|
|||
"github.com/jackc/pgx/v5/internal/pgio"
|
||||
)
|
||||
|
||||
const pgTimestampFormat = "2006-01-02 15:04:05.999999999"
|
||||
const jsonISO8601 = "2006-01-02T15:04:05.999999999"
|
||||
const (
|
||||
pgTimestampFormat = "2006-01-02 15:04:05.999999999"
|
||||
jsonISO8601 = "2006-01-02T15:04:05.999999999"
|
||||
)
|
||||
|
||||
type TimestampScanner interface {
|
||||
ScanTimestamp(v Timestamp) error
|
||||
|
|
@ -29,16 +31,18 @@ type Timestamp struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanTimestamp implements the [TimestampScanner] interface.
|
||||
func (ts *Timestamp) ScanTimestamp(v Timestamp) error {
|
||||
*ts = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// TimestampValue implements the [TimestampValuer] interface.
|
||||
func (ts Timestamp) TimestampValue() (Timestamp, error) {
|
||||
return ts, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (ts *Timestamp) Scan(src any) error {
|
||||
if src == nil {
|
||||
*ts = Timestamp{}
|
||||
|
|
@ -56,7 +60,7 @@ func (ts *Timestamp) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (ts Timestamp) Value() (driver.Value, error) {
|
||||
if !ts.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -68,6 +72,7 @@ func (ts Timestamp) Value() (driver.Value, error) {
|
|||
return ts.Time, nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (ts Timestamp) MarshalJSON() ([]byte, error) {
|
||||
if !ts.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -87,6 +92,7 @@ func (ts Timestamp) MarshalJSON() ([]byte, error) {
|
|||
return json.Marshal(s)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (ts *Timestamp) UnmarshalJSON(b []byte) error {
|
||||
var s *string
|
||||
err := json.Unmarshal(b, &s)
|
||||
|
|
|
|||
19
vendor/github.com/jackc/pgx/v5/pgtype/timestamptz.go
generated
vendored
19
vendor/github.com/jackc/pgx/v5/pgtype/timestamptz.go
generated
vendored
|
|
@ -11,10 +11,12 @@ import (
|
|||
"github.com/jackc/pgx/v5/internal/pgio"
|
||||
)
|
||||
|
||||
const pgTimestamptzHourFormat = "2006-01-02 15:04:05.999999999Z07"
|
||||
const pgTimestamptzMinuteFormat = "2006-01-02 15:04:05.999999999Z07:00"
|
||||
const pgTimestamptzSecondFormat = "2006-01-02 15:04:05.999999999Z07:00:00"
|
||||
const microsecFromUnixEpochToY2K = 946684800 * 1000000
|
||||
const (
|
||||
pgTimestamptzHourFormat = "2006-01-02 15:04:05.999999999Z07"
|
||||
pgTimestamptzMinuteFormat = "2006-01-02 15:04:05.999999999Z07:00"
|
||||
pgTimestamptzSecondFormat = "2006-01-02 15:04:05.999999999Z07:00:00"
|
||||
microsecFromUnixEpochToY2K = 946684800 * 1000000
|
||||
)
|
||||
|
||||
const (
|
||||
negativeInfinityMicrosecondOffset = -9223372036854775808
|
||||
|
|
@ -36,16 +38,18 @@ type Timestamptz struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanTimestamptz implements the [TimestamptzScanner] interface.
|
||||
func (tstz *Timestamptz) ScanTimestamptz(v Timestamptz) error {
|
||||
*tstz = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// TimestamptzValue implements the [TimestamptzValuer] interface.
|
||||
func (tstz Timestamptz) TimestamptzValue() (Timestamptz, error) {
|
||||
return tstz, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (tstz *Timestamptz) Scan(src any) error {
|
||||
if src == nil {
|
||||
*tstz = Timestamptz{}
|
||||
|
|
@ -63,7 +67,7 @@ func (tstz *Timestamptz) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (tstz Timestamptz) Value() (driver.Value, error) {
|
||||
if !tstz.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -75,6 +79,7 @@ func (tstz Timestamptz) Value() (driver.Value, error) {
|
|||
return tstz.Time, nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (tstz Timestamptz) MarshalJSON() ([]byte, error) {
|
||||
if !tstz.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -94,6 +99,7 @@ func (tstz Timestamptz) MarshalJSON() ([]byte, error) {
|
|||
return json.Marshal(s)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (tstz *Timestamptz) UnmarshalJSON(b []byte) error {
|
||||
var s *string
|
||||
err := json.Unmarshal(b, &s)
|
||||
|
|
@ -225,7 +231,6 @@ func (encodePlanTimestamptzCodecText) Encode(value any, buf []byte) (newBuf []by
|
|||
}
|
||||
|
||||
func (c *TimestamptzCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
33
vendor/github.com/jackc/pgx/v5/pgtype/uint32.go
generated
vendored
33
vendor/github.com/jackc/pgx/v5/pgtype/uint32.go
generated
vendored
|
|
@ -3,6 +3,7 @@ package pgtype
|
|||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
|
|
@ -24,16 +25,18 @@ type Uint32 struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanUint32 implements the [Uint32Scanner] interface.
|
||||
func (n *Uint32) ScanUint32(v Uint32) error {
|
||||
*n = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// Uint32Value implements the [Uint32Valuer] interface.
|
||||
func (n Uint32) Uint32Value() (Uint32, error) {
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Uint32) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Uint32{}
|
||||
|
|
@ -67,7 +70,7 @@ func (dst *Uint32) Scan(src any) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Uint32) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -75,6 +78,31 @@ func (src Uint32) Value() (driver.Value, error) {
|
|||
return int64(src.Uint32), nil
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src Uint32) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
}
|
||||
return json.Marshal(src.Uint32)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *Uint32) UnmarshalJSON(b []byte) error {
|
||||
var n *uint32
|
||||
err := json.Unmarshal(b, &n)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if n == nil {
|
||||
*dst = Uint32{}
|
||||
} else {
|
||||
*dst = Uint32{Uint32: *n, Valid: true}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type Uint32Codec struct{}
|
||||
|
||||
func (Uint32Codec) FormatSupported(format int16) bool {
|
||||
|
|
@ -197,7 +225,6 @@ func (encodePlanUint32CodecTextInt64Valuer) Encode(value any, buf []byte) (newBu
|
|||
}
|
||||
|
||||
func (Uint32Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
7
vendor/github.com/jackc/pgx/v5/pgtype/uint64.go
generated
vendored
7
vendor/github.com/jackc/pgx/v5/pgtype/uint64.go
generated
vendored
|
|
@ -24,16 +24,18 @@ type Uint64 struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanUint64 implements the [Uint64Scanner] interface.
|
||||
func (n *Uint64) ScanUint64(v Uint64) error {
|
||||
*n = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// Uint64Value implements the [Uint64Valuer] interface.
|
||||
func (n Uint64) Uint64Value() (Uint64, error) {
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *Uint64) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = Uint64{}
|
||||
|
|
@ -63,7 +65,7 @@ func (dst *Uint64) Scan(src any) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src Uint64) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -194,7 +196,6 @@ func (encodePlanUint64CodecTextInt64Valuer) Encode(value any, buf []byte) (newBu
|
|||
}
|
||||
|
||||
func (Uint64Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan {
|
||||
|
||||
switch format {
|
||||
case BinaryFormatCode:
|
||||
switch target.(type) {
|
||||
|
|
|
|||
8
vendor/github.com/jackc/pgx/v5/pgtype/uuid.go
generated
vendored
8
vendor/github.com/jackc/pgx/v5/pgtype/uuid.go
generated
vendored
|
|
@ -20,11 +20,13 @@ type UUID struct {
|
|||
Valid bool
|
||||
}
|
||||
|
||||
// ScanUUID implements the [UUIDScanner] interface.
|
||||
func (b *UUID) ScanUUID(v UUID) error {
|
||||
*b = v
|
||||
return nil
|
||||
}
|
||||
|
||||
// UUIDValue implements the [UUIDValuer] interface.
|
||||
func (b UUID) UUIDValue() (UUID, error) {
|
||||
return b, nil
|
||||
}
|
||||
|
|
@ -67,7 +69,7 @@ func encodeUUID(src [16]byte) string {
|
|||
return string(buf[:])
|
||||
}
|
||||
|
||||
// Scan implements the database/sql Scanner interface.
|
||||
// Scan implements the [database/sql.Scanner] interface.
|
||||
func (dst *UUID) Scan(src any) error {
|
||||
if src == nil {
|
||||
*dst = UUID{}
|
||||
|
|
@ -87,7 +89,7 @@ func (dst *UUID) Scan(src any) error {
|
|||
return fmt.Errorf("cannot scan %T", src)
|
||||
}
|
||||
|
||||
// Value implements the database/sql/driver Valuer interface.
|
||||
// Value implements the [database/sql/driver.Valuer] interface.
|
||||
func (src UUID) Value() (driver.Value, error) {
|
||||
if !src.Valid {
|
||||
return nil, nil
|
||||
|
|
@ -104,6 +106,7 @@ func (src UUID) String() string {
|
|||
return encodeUUID(src.Bytes)
|
||||
}
|
||||
|
||||
// MarshalJSON implements the [encoding/json.Marshaler] interface.
|
||||
func (src UUID) MarshalJSON() ([]byte, error) {
|
||||
if !src.Valid {
|
||||
return []byte("null"), nil
|
||||
|
|
@ -116,6 +119,7 @@ func (src UUID) MarshalJSON() ([]byte, error) {
|
|||
return buff.Bytes(), nil
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements the [encoding/json.Unmarshaler] interface.
|
||||
func (dst *UUID) UnmarshalJSON(src []byte) error {
|
||||
if bytes.Equal(src, []byte("null")) {
|
||||
*dst = UUID{}
|
||||
|
|
|
|||
115
vendor/github.com/jackc/pgx/v5/pgxpool/pool.go
generated
vendored
115
vendor/github.com/jackc/pgx/v5/pgxpool/pool.go
generated
vendored
|
|
@ -2,7 +2,7 @@ package pgxpool
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"errors"
|
||||
"math/rand"
|
||||
"runtime"
|
||||
"strconv"
|
||||
|
|
@ -15,12 +15,14 @@ import (
|
|||
"github.com/jackc/puddle/v2"
|
||||
)
|
||||
|
||||
var defaultMaxConns = int32(4)
|
||||
var defaultMinConns = int32(0)
|
||||
var defaultMinIdleConns = int32(0)
|
||||
var defaultMaxConnLifetime = time.Hour
|
||||
var defaultMaxConnIdleTime = time.Minute * 30
|
||||
var defaultHealthCheckPeriod = time.Minute
|
||||
var (
|
||||
defaultMaxConns = int32(4)
|
||||
defaultMinConns = int32(0)
|
||||
defaultMinIdleConns = int32(0)
|
||||
defaultMaxConnLifetime = time.Hour
|
||||
defaultMaxConnIdleTime = time.Minute * 30
|
||||
defaultHealthCheckPeriod = time.Minute
|
||||
)
|
||||
|
||||
type connResource struct {
|
||||
conn *pgx.Conn
|
||||
|
|
@ -84,9 +86,10 @@ type Pool struct {
|
|||
config *Config
|
||||
beforeConnect func(context.Context, *pgx.ConnConfig) error
|
||||
afterConnect func(context.Context, *pgx.Conn) error
|
||||
beforeAcquire func(context.Context, *pgx.Conn) bool
|
||||
prepareConn func(context.Context, *pgx.Conn) (bool, error)
|
||||
afterRelease func(*pgx.Conn) bool
|
||||
beforeClose func(*pgx.Conn)
|
||||
shouldPing func(context.Context, ShouldPingParams) bool
|
||||
minConns int32
|
||||
minIdleConns int32
|
||||
maxConns int32
|
||||
|
|
@ -104,6 +107,12 @@ type Pool struct {
|
|||
closeChan chan struct{}
|
||||
}
|
||||
|
||||
// ShouldPingParams are the parameters passed to ShouldPing.
|
||||
type ShouldPingParams struct {
|
||||
Conn *pgx.Conn
|
||||
IdleDuration time.Duration
|
||||
}
|
||||
|
||||
// Config is the configuration struct for creating a pool. It must be created by [ParseConfig] and then it can be
|
||||
// modified.
|
||||
type Config struct {
|
||||
|
|
@ -119,8 +128,23 @@ type Config struct {
|
|||
// BeforeAcquire is called before a connection is acquired from the pool. It must return true to allow the
|
||||
// acquisition or false to indicate that the connection should be destroyed and a different connection should be
|
||||
// acquired.
|
||||
//
|
||||
// Deprecated: Use PrepareConn instead. If both PrepareConn and BeforeAcquire are set, PrepareConn will take
|
||||
// precedence, ignoring BeforeAcquire.
|
||||
BeforeAcquire func(context.Context, *pgx.Conn) bool
|
||||
|
||||
// PrepareConn is called before a connection is acquired from the pool. If this function returns true, the connection
|
||||
// is considered valid, otherwise the connection is destroyed. If the function returns a non-nil error, the instigating
|
||||
// query will fail with the returned error.
|
||||
//
|
||||
// Specifically, this means that:
|
||||
//
|
||||
// - If it returns true and a nil error, the query proceeds as normal.
|
||||
// - If it returns true and an error, the connection will be returned to the pool, and the instigating query will fail with the returned error.
|
||||
// - If it returns false, and an error, the connection will be destroyed, and the query will fail with the returned error.
|
||||
// - If it returns false and a nil error, the connection will be destroyed, and the instigating query will be retried on a new connection.
|
||||
PrepareConn func(context.Context, *pgx.Conn) (bool, error)
|
||||
|
||||
// AfterRelease is called after a connection is released, but before it is returned to the pool. It must return true to
|
||||
// return the connection to the pool or false to destroy the connection.
|
||||
AfterRelease func(*pgx.Conn) bool
|
||||
|
|
@ -128,6 +152,10 @@ type Config struct {
|
|||
// BeforeClose is called right before a connection is closed and removed from the pool.
|
||||
BeforeClose func(*pgx.Conn)
|
||||
|
||||
// ShouldPing is called after a connection is acquired from the pool. If it returns true, the connection is pinged to check for liveness.
|
||||
// If this func is not set, the default behavior is to ping connections that have been idle for at least 1 second.
|
||||
ShouldPing func(context.Context, ShouldPingParams) bool
|
||||
|
||||
// MaxConnLifetime is the duration since creation after which a connection will be automatically closed.
|
||||
MaxConnLifetime time.Duration
|
||||
|
||||
|
|
@ -190,11 +218,18 @@ func NewWithConfig(ctx context.Context, config *Config) (*Pool, error) {
|
|||
panic("config must be created by ParseConfig")
|
||||
}
|
||||
|
||||
prepareConn := config.PrepareConn
|
||||
if prepareConn == nil && config.BeforeAcquire != nil {
|
||||
prepareConn = func(ctx context.Context, conn *pgx.Conn) (bool, error) {
|
||||
return config.BeforeAcquire(ctx, conn), nil
|
||||
}
|
||||
}
|
||||
|
||||
p := &Pool{
|
||||
config: config,
|
||||
beforeConnect: config.BeforeConnect,
|
||||
afterConnect: config.AfterConnect,
|
||||
beforeAcquire: config.BeforeAcquire,
|
||||
prepareConn: prepareConn,
|
||||
afterRelease: config.AfterRelease,
|
||||
beforeClose: config.BeforeClose,
|
||||
minConns: config.MinConns,
|
||||
|
|
@ -216,6 +251,14 @@ func NewWithConfig(ctx context.Context, config *Config) (*Pool, error) {
|
|||
p.releaseTracer = t
|
||||
}
|
||||
|
||||
if config.ShouldPing != nil {
|
||||
p.shouldPing = config.ShouldPing
|
||||
} else {
|
||||
p.shouldPing = func(ctx context.Context, params ShouldPingParams) bool {
|
||||
return params.IdleDuration > time.Second
|
||||
}
|
||||
}
|
||||
|
||||
var err error
|
||||
p.p, err = puddle.NewPool(
|
||||
&puddle.Config[*connResource]{
|
||||
|
|
@ -321,10 +364,10 @@ func ParseConfig(connString string) (*Config, error) {
|
|||
delete(connConfig.Config.RuntimeParams, "pool_max_conns")
|
||||
n, err := strconv.ParseInt(s, 10, 32)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse pool_max_conns: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conns", err)
|
||||
}
|
||||
if n < 1 {
|
||||
return nil, fmt.Errorf("pool_max_conns too small: %d", n)
|
||||
return nil, pgconn.NewParseConfigError(connString, "pool_max_conns too small", err)
|
||||
}
|
||||
config.MaxConns = int32(n)
|
||||
} else {
|
||||
|
|
@ -338,7 +381,7 @@ func ParseConfig(connString string) (*Config, error) {
|
|||
delete(connConfig.Config.RuntimeParams, "pool_min_conns")
|
||||
n, err := strconv.ParseInt(s, 10, 32)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse pool_min_conns: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_min_conns", err)
|
||||
}
|
||||
config.MinConns = int32(n)
|
||||
} else {
|
||||
|
|
@ -349,7 +392,7 @@ func ParseConfig(connString string) (*Config, error) {
|
|||
delete(connConfig.Config.RuntimeParams, "pool_min_idle_conns")
|
||||
n, err := strconv.ParseInt(s, 10, 32)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot parse pool_min_idle_conns: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_min_idle_conns", err)
|
||||
}
|
||||
config.MinIdleConns = int32(n)
|
||||
} else {
|
||||
|
|
@ -360,7 +403,7 @@ func ParseConfig(connString string) (*Config, error) {
|
|||
delete(connConfig.Config.RuntimeParams, "pool_max_conn_lifetime")
|
||||
d, err := time.ParseDuration(s)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid pool_max_conn_lifetime: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_lifetime", err)
|
||||
}
|
||||
config.MaxConnLifetime = d
|
||||
} else {
|
||||
|
|
@ -371,7 +414,7 @@ func ParseConfig(connString string) (*Config, error) {
|
|||
delete(connConfig.Config.RuntimeParams, "pool_max_conn_idle_time")
|
||||
d, err := time.ParseDuration(s)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid pool_max_conn_idle_time: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_idle_time", err)
|
||||
}
|
||||
config.MaxConnIdleTime = d
|
||||
} else {
|
||||
|
|
@ -382,7 +425,7 @@ func ParseConfig(connString string) (*Config, error) {
|
|||
delete(connConfig.Config.RuntimeParams, "pool_health_check_period")
|
||||
d, err := time.ParseDuration(s)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid pool_health_check_period: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_health_check_period", err)
|
||||
}
|
||||
config.HealthCheckPeriod = d
|
||||
} else {
|
||||
|
|
@ -393,7 +436,7 @@ func ParseConfig(connString string) (*Config, error) {
|
|||
delete(connConfig.Config.RuntimeParams, "pool_max_conn_lifetime_jitter")
|
||||
d, err := time.ParseDuration(s)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid pool_max_conn_lifetime_jitter: %w", err)
|
||||
return nil, pgconn.NewParseConfigError(connString, "cannot parse pool_max_conn_lifetime_jitter", err)
|
||||
}
|
||||
config.MaxConnLifetimeJitter = d
|
||||
}
|
||||
|
|
@ -545,7 +588,10 @@ func (p *Pool) Acquire(ctx context.Context) (c *Conn, err error) {
|
|||
}()
|
||||
}
|
||||
|
||||
for {
|
||||
// Try to acquire from the connection pool up to maxConns + 1 times, so that
|
||||
// any that fatal errors would empty the pool and still at least try 1 fresh
|
||||
// connection.
|
||||
for range p.maxConns + 1 {
|
||||
res, err := p.p.Acquire(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -553,7 +599,8 @@ func (p *Pool) Acquire(ctx context.Context) (c *Conn, err error) {
|
|||
|
||||
cr := res.Value()
|
||||
|
||||
if res.IdleDuration() > time.Second {
|
||||
shouldPingParams := ShouldPingParams{Conn: cr.conn, IdleDuration: res.IdleDuration()}
|
||||
if p.shouldPing(ctx, shouldPingParams) {
|
||||
err := cr.conn.Ping(ctx)
|
||||
if err != nil {
|
||||
res.Destroy()
|
||||
|
|
@ -561,12 +608,25 @@ func (p *Pool) Acquire(ctx context.Context) (c *Conn, err error) {
|
|||
}
|
||||
}
|
||||
|
||||
if p.beforeAcquire == nil || p.beforeAcquire(ctx, cr.conn) {
|
||||
return cr.getConn(p, res), nil
|
||||
if p.prepareConn != nil {
|
||||
ok, err := p.prepareConn(ctx, cr.conn)
|
||||
if !ok {
|
||||
res.Destroy()
|
||||
}
|
||||
if err != nil {
|
||||
if ok {
|
||||
res.Release()
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
res.Destroy()
|
||||
return cr.getConn(p, res), nil
|
||||
}
|
||||
return nil, errors.New("pgxpool: detected infinite loop acquiring connection; likely bug in PrepareConn or BeforeAcquire hook")
|
||||
}
|
||||
|
||||
// AcquireFunc acquires a *Conn and calls f with that *Conn. ctx will only affect the Acquire. It has no effect on the
|
||||
|
|
@ -589,11 +649,14 @@ func (p *Pool) AcquireAllIdle(ctx context.Context) []*Conn {
|
|||
conns := make([]*Conn, 0, len(resources))
|
||||
for _, res := range resources {
|
||||
cr := res.Value()
|
||||
if p.beforeAcquire == nil || p.beforeAcquire(ctx, cr.conn) {
|
||||
conns = append(conns, cr.getConn(p, res))
|
||||
} else {
|
||||
res.Destroy()
|
||||
if p.prepareConn != nil {
|
||||
ok, err := p.prepareConn(ctx, cr.conn)
|
||||
if !ok || err != nil {
|
||||
res.Destroy()
|
||||
continue
|
||||
}
|
||||
}
|
||||
conns = append(conns, cr.getConn(p, res))
|
||||
}
|
||||
|
||||
return conns
|
||||
|
|
|
|||
23
vendor/github.com/jackc/pgx/v5/rows.go
generated
vendored
23
vendor/github.com/jackc/pgx/v5/rows.go
generated
vendored
|
|
@ -41,22 +41,19 @@ type Rows interface {
|
|||
// when there was an error executing the query.
|
||||
FieldDescriptions() []pgconn.FieldDescription
|
||||
|
||||
// Next prepares the next row for reading. It returns true if there is another
|
||||
// row and false if no more rows are available or a fatal error has occurred.
|
||||
// It automatically closes rows when all rows are read.
|
||||
// Next prepares the next row for reading. It returns true if there is another row and false if no more rows are
|
||||
// available or a fatal error has occurred. It automatically closes rows upon returning false (whether due to all rows
|
||||
// having been read or due to an error).
|
||||
//
|
||||
// Callers should check rows.Err() after rows.Next() returns false to detect
|
||||
// whether result-set reading ended prematurely due to an error. See
|
||||
// Conn.Query for details.
|
||||
// Callers should check rows.Err() after rows.Next() returns false to detect whether result-set reading ended
|
||||
// prematurely due to an error. See Conn.Query for details.
|
||||
//
|
||||
// For simpler error handling, consider using the higher-level pgx v5
|
||||
// CollectRows() and ForEachRow() helpers instead.
|
||||
// For simpler error handling, consider using the higher-level pgx v5 CollectRows() and ForEachRow() helpers instead.
|
||||
Next() bool
|
||||
|
||||
// Scan reads the values from the current row into dest values positionally.
|
||||
// dest can include pointers to core types, values implementing the Scanner
|
||||
// interface, and nil. nil will skip the value entirely. It is an error to
|
||||
// call Scan without first calling Next() and checking that it returned true.
|
||||
// Scan reads the values from the current row into dest values positionally. dest can include pointers to core types,
|
||||
// values implementing the Scanner interface, and nil. nil will skip the value entirely. It is an error to call Scan
|
||||
// without first calling Next() and checking that it returned true. Rows is automatically closed upon error.
|
||||
Scan(dest ...any) error
|
||||
|
||||
// Values returns the decoded row values. As with Scan(), it is an error to
|
||||
|
|
@ -563,7 +560,7 @@ func (rs *mapRowScanner) ScanRow(rows Rows) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// RowToStructByPos returns a T scanned from row. T must be a struct. T must have the same number a public fields as row
|
||||
// RowToStructByPos returns a T scanned from row. T must be a struct. T must have the same number of public fields as row
|
||||
// has fields. The row and T fields will be matched by position. If the "db" struct tag is "-" then the field will be
|
||||
// ignored.
|
||||
func RowToStructByPos[T any](row CollectableRow) (T, error) {
|
||||
|
|
|
|||
30
vendor/github.com/jackc/pgx/v5/stdlib/sql.go
generated
vendored
30
vendor/github.com/jackc/pgx/v5/stdlib/sql.go
generated
vendored
|
|
@ -471,7 +471,8 @@ func (c *Conn) ExecContext(ctx context.Context, query string, argsV []driver.Nam
|
|||
return nil, driver.ErrBadConn
|
||||
}
|
||||
|
||||
args := namedValueToInterface(argsV)
|
||||
args := make([]any, len(argsV))
|
||||
convertNamedArguments(args, argsV)
|
||||
|
||||
commandTag, err := c.conn.Exec(ctx, query, args...)
|
||||
// if we got a network error before we had a chance to send the query, retry
|
||||
|
|
@ -488,8 +489,9 @@ func (c *Conn) QueryContext(ctx context.Context, query string, argsV []driver.Na
|
|||
return nil, driver.ErrBadConn
|
||||
}
|
||||
|
||||
args := []any{databaseSQLResultFormats}
|
||||
args = append(args, namedValueToInterface(argsV)...)
|
||||
args := make([]any, 1+len(argsV))
|
||||
args[0] = databaseSQLResultFormats
|
||||
convertNamedArguments(args[1:], argsV)
|
||||
|
||||
rows, err := c.conn.Query(ctx, query, args...)
|
||||
if err != nil {
|
||||
|
|
@ -848,28 +850,14 @@ func (r *Rows) Next(dest []driver.Value) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func valueToInterface(argsV []driver.Value) []any {
|
||||
args := make([]any, 0, len(argsV))
|
||||
for _, v := range argsV {
|
||||
if v != nil {
|
||||
args = append(args, v.(any))
|
||||
} else {
|
||||
args = append(args, nil)
|
||||
}
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
func namedValueToInterface(argsV []driver.NamedValue) []any {
|
||||
args := make([]any, 0, len(argsV))
|
||||
for _, v := range argsV {
|
||||
func convertNamedArguments(args []any, argsV []driver.NamedValue) {
|
||||
for i, v := range argsV {
|
||||
if v.Value != nil {
|
||||
args = append(args, v.Value.(any))
|
||||
args[i] = v.Value.(any)
|
||||
} else {
|
||||
args = append(args, nil)
|
||||
args[i] = nil
|
||||
}
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
type wrapTx struct {
|
||||
|
|
|
|||
7
vendor/github.com/ncruces/go-sqlite3/embed/build.sh
generated
vendored
7
vendor/github.com/ncruces/go-sqlite3/embed/build.sh
generated
vendored
|
|
@ -27,8 +27,9 @@ trap 'rm -f sqlite3.tmp' EXIT
|
|||
$(awk '{print "-Wl,--export="$0}' exports.txt)
|
||||
|
||||
"$BINARYEN/wasm-ctor-eval" -g -c _initialize sqlite3.wasm -o sqlite3.tmp
|
||||
"$BINARYEN/wasm-opt" -g --strip --strip-producers -c -O3 \
|
||||
sqlite3.tmp -o sqlite3.wasm --low-memory-unused \
|
||||
"$BINARYEN/wasm-opt" -g sqlite3.tmp -o sqlite3.wasm \
|
||||
--low-memory-unused --gufa --generate-global-effects --converge -O3 \
|
||||
--enable-mutable-globals --enable-nontrapping-float-to-int \
|
||||
--enable-simd --enable-bulk-memory --enable-sign-ext \
|
||||
--enable-reference-types --enable-multivalue
|
||||
--enable-reference-types --enable-multivalue \
|
||||
--strip --strip-producers
|
||||
BIN
vendor/github.com/ncruces/go-sqlite3/embed/sqlite3.wasm
generated
vendored
BIN
vendor/github.com/ncruces/go-sqlite3/embed/sqlite3.wasm
generated
vendored
Binary file not shown.
32
vendor/github.com/ncruces/go-sqlite3/internal/alloc/alloc_unix.go
generated
vendored
32
vendor/github.com/ncruces/go-sqlite3/internal/alloc/alloc_unix.go
generated
vendored
|
|
@ -9,24 +9,31 @@ import (
|
|||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func NewMemory(_, max uint64) experimental.LinearMemory {
|
||||
func NewMemory(cap, max uint64) experimental.LinearMemory {
|
||||
// Round up to the page size.
|
||||
rnd := uint64(unix.Getpagesize() - 1)
|
||||
max = (max + rnd) &^ rnd
|
||||
res := (max + rnd) &^ rnd
|
||||
|
||||
if max > math.MaxInt {
|
||||
// This ensures int(max) overflows to a negative value,
|
||||
if res > math.MaxInt {
|
||||
// This ensures int(res) overflows to a negative value,
|
||||
// and unix.Mmap returns EINVAL.
|
||||
max = math.MaxUint64
|
||||
res = math.MaxUint64
|
||||
}
|
||||
|
||||
// Reserve max bytes of address space, to ensure we won't need to move it.
|
||||
com := res
|
||||
prot := unix.PROT_READ | unix.PROT_WRITE
|
||||
if cap < max { // Commit memory only if cap=max.
|
||||
com = 0
|
||||
prot = unix.PROT_NONE
|
||||
}
|
||||
|
||||
// Reserve res bytes of address space, to ensure we won't need to move it.
|
||||
// A protected, private, anonymous mapping should not commit memory.
|
||||
b, err := unix.Mmap(-1, 0, int(max), unix.PROT_NONE, unix.MAP_PRIVATE|unix.MAP_ANON)
|
||||
b, err := unix.Mmap(-1, 0, int(res), prot, unix.MAP_PRIVATE|unix.MAP_ANON)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &mmappedMemory{buf: b[:0]}
|
||||
return &mmappedMemory{buf: b[:com]}
|
||||
}
|
||||
|
||||
// The slice covers the entire mmapped memory:
|
||||
|
|
@ -40,9 +47,11 @@ func (m *mmappedMemory) Reallocate(size uint64) []byte {
|
|||
com := uint64(len(m.buf))
|
||||
res := uint64(cap(m.buf))
|
||||
if com < size && size <= res {
|
||||
// Round up to the page size.
|
||||
// Grow geometrically, round up to the page size.
|
||||
rnd := uint64(unix.Getpagesize() - 1)
|
||||
new := (size + rnd) &^ rnd
|
||||
new := com + com>>3
|
||||
new = min(max(size, new), res)
|
||||
new = (new + rnd) &^ rnd
|
||||
|
||||
// Commit additional memory up to new bytes.
|
||||
err := unix.Mprotect(m.buf[com:new], unix.PROT_READ|unix.PROT_WRITE)
|
||||
|
|
@ -50,8 +59,7 @@ func (m *mmappedMemory) Reallocate(size uint64) []byte {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Update committed memory.
|
||||
m.buf = m.buf[:new]
|
||||
m.buf = m.buf[:new] // Update committed memory.
|
||||
}
|
||||
// Limit returned capacity because bytes beyond
|
||||
// len(m.buf) have not yet been committed.
|
||||
|
|
|
|||
34
vendor/github.com/ncruces/go-sqlite3/internal/alloc/alloc_windows.go
generated
vendored
34
vendor/github.com/ncruces/go-sqlite3/internal/alloc/alloc_windows.go
generated
vendored
|
|
@ -9,20 +9,26 @@ import (
|
|||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
func NewMemory(_, max uint64) experimental.LinearMemory {
|
||||
func NewMemory(cap, max uint64) experimental.LinearMemory {
|
||||
// Round up to the page size.
|
||||
rnd := uint64(windows.Getpagesize() - 1)
|
||||
max = (max + rnd) &^ rnd
|
||||
res := (max + rnd) &^ rnd
|
||||
|
||||
if max > math.MaxInt {
|
||||
// This ensures uintptr(max) overflows to a large value,
|
||||
if res > math.MaxInt {
|
||||
// This ensures uintptr(res) overflows to a large value,
|
||||
// and windows.VirtualAlloc returns an error.
|
||||
max = math.MaxUint64
|
||||
res = math.MaxUint64
|
||||
}
|
||||
|
||||
// Reserve max bytes of address space, to ensure we won't need to move it.
|
||||
// This does not commit memory.
|
||||
r, err := windows.VirtualAlloc(0, uintptr(max), windows.MEM_RESERVE, windows.PAGE_READWRITE)
|
||||
com := res
|
||||
kind := windows.MEM_COMMIT
|
||||
if cap < max { // Commit memory only if cap=max.
|
||||
com = 0
|
||||
kind = windows.MEM_RESERVE
|
||||
}
|
||||
|
||||
// Reserve res bytes of address space, to ensure we won't need to move it.
|
||||
r, err := windows.VirtualAlloc(0, uintptr(res), uint32(kind), windows.PAGE_READWRITE)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
@ -30,8 +36,9 @@ func NewMemory(_, max uint64) experimental.LinearMemory {
|
|||
mem := virtualMemory{addr: r}
|
||||
// SliceHeader, although deprecated, avoids a go vet warning.
|
||||
sh := (*reflect.SliceHeader)(unsafe.Pointer(&mem.buf))
|
||||
sh.Cap = int(max)
|
||||
sh.Data = r
|
||||
sh.Len = int(com)
|
||||
sh.Cap = int(res)
|
||||
return &mem
|
||||
}
|
||||
|
||||
|
|
@ -47,9 +54,11 @@ func (m *virtualMemory) Reallocate(size uint64) []byte {
|
|||
com := uint64(len(m.buf))
|
||||
res := uint64(cap(m.buf))
|
||||
if com < size && size <= res {
|
||||
// Round up to the page size.
|
||||
// Grow geometrically, round up to the page size.
|
||||
rnd := uint64(windows.Getpagesize() - 1)
|
||||
new := (size + rnd) &^ rnd
|
||||
new := com + com>>3
|
||||
new = min(max(size, new), res)
|
||||
new = (new + rnd) &^ rnd
|
||||
|
||||
// Commit additional memory up to new bytes.
|
||||
_, err := windows.VirtualAlloc(m.addr, uintptr(new), windows.MEM_COMMIT, windows.PAGE_READWRITE)
|
||||
|
|
@ -57,8 +66,7 @@ func (m *virtualMemory) Reallocate(size uint64) []byte {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Update committed memory.
|
||||
m.buf = m.buf[:new]
|
||||
m.buf = m.buf[:new] // Update committed memory.
|
||||
}
|
||||
// Limit returned capacity because bytes beyond
|
||||
// len(m.buf) have not yet been committed.
|
||||
|
|
|
|||
BIN
vendor/github.com/ncruces/go-sqlite3/util/sql3util/wasm/sql3parse_table.wasm
generated
vendored
BIN
vendor/github.com/ncruces/go-sqlite3/util/sql3util/wasm/sql3parse_table.wasm
generated
vendored
Binary file not shown.
2
vendor/github.com/tdewolff/minify/v2/README.md
generated
vendored
2
vendor/github.com/tdewolff/minify/v2/README.md
generated
vendored
|
|
@ -255,8 +255,8 @@ There are a couple of comparison tables online, such as [CSS Minifier Comparison
|
|||
|
||||
Options:
|
||||
|
||||
- `KeepCSS2` prohibits using CSS3 syntax (such as exponents in numbers, or `rgba(` → `rgb(`), might be incomplete
|
||||
- `Precision` number of significant digits to preserve for numbers, `0` means no trimming
|
||||
- `Version` CSS version to use for output, `0` is the latest
|
||||
|
||||
## JS
|
||||
|
||||
|
|
|
|||
4
vendor/golang.org/x/sys/unix/affinity_linux.go
generated
vendored
4
vendor/golang.org/x/sys/unix/affinity_linux.go
generated
vendored
|
|
@ -38,9 +38,7 @@ func SchedSetaffinity(pid int, set *CPUSet) error {
|
|||
|
||||
// Zero clears the set s, so that it contains no CPUs.
|
||||
func (s *CPUSet) Zero() {
|
||||
for i := range s {
|
||||
s[i] = 0
|
||||
}
|
||||
clear(s[:])
|
||||
}
|
||||
|
||||
func cpuBitsIndex(cpu int) int {
|
||||
|
|
|
|||
2
vendor/golang.org/x/sys/unix/syscall_solaris.go
generated
vendored
2
vendor/golang.org/x/sys/unix/syscall_solaris.go
generated
vendored
|
|
@ -629,7 +629,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
|
|||
//sys Kill(pid int, signum syscall.Signal) (err error)
|
||||
//sys Lchown(path string, uid int, gid int) (err error)
|
||||
//sys Link(path string, link string) (err error)
|
||||
//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten
|
||||
//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_listen
|
||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
||||
//sys Madvise(b []byte, advice int) (err error)
|
||||
//sys Mkdir(path string, mode uint32) (err error)
|
||||
|
|
|
|||
8
vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
generated
vendored
8
vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
generated
vendored
|
|
@ -72,7 +72,7 @@ import (
|
|||
//go:cgo_import_dynamic libc_kill kill "libc.so"
|
||||
//go:cgo_import_dynamic libc_lchown lchown "libc.so"
|
||||
//go:cgo_import_dynamic libc_link link "libc.so"
|
||||
//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so"
|
||||
//go:cgo_import_dynamic libc___xnet_listen __xnet_listen "libsocket.so"
|
||||
//go:cgo_import_dynamic libc_lstat lstat "libc.so"
|
||||
//go:cgo_import_dynamic libc_madvise madvise "libc.so"
|
||||
//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
|
||||
|
|
@ -221,7 +221,7 @@ import (
|
|||
//go:linkname procKill libc_kill
|
||||
//go:linkname procLchown libc_lchown
|
||||
//go:linkname procLink libc_link
|
||||
//go:linkname proc__xnet_llisten libc___xnet_llisten
|
||||
//go:linkname proc__xnet_listen libc___xnet_listen
|
||||
//go:linkname procLstat libc_lstat
|
||||
//go:linkname procMadvise libc_madvise
|
||||
//go:linkname procMkdir libc_mkdir
|
||||
|
|
@ -371,7 +371,7 @@ var (
|
|||
procKill,
|
||||
procLchown,
|
||||
procLink,
|
||||
proc__xnet_llisten,
|
||||
proc__xnet_listen,
|
||||
procLstat,
|
||||
procMadvise,
|
||||
procMkdir,
|
||||
|
|
@ -1178,7 +1178,7 @@ func Link(path string, link string) (err error) {
|
|||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Listen(s int, backlog int) (err error) {
|
||||
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
|
||||
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_listen)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
|
|
|
|||
41
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
41
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
|
|
@ -632,6 +632,8 @@ const (
|
|||
IFA_FLAGS = 0x8
|
||||
IFA_RT_PRIORITY = 0x9
|
||||
IFA_TARGET_NETNSID = 0xa
|
||||
IFAL_LABEL = 0x2
|
||||
IFAL_ADDRESS = 0x1
|
||||
RT_SCOPE_UNIVERSE = 0x0
|
||||
RT_SCOPE_SITE = 0xc8
|
||||
RT_SCOPE_LINK = 0xfd
|
||||
|
|
@ -689,6 +691,7 @@ const (
|
|||
SizeofRtAttr = 0x4
|
||||
SizeofIfInfomsg = 0x10
|
||||
SizeofIfAddrmsg = 0x8
|
||||
SizeofIfAddrlblmsg = 0xc
|
||||
SizeofIfaCacheinfo = 0x10
|
||||
SizeofRtMsg = 0xc
|
||||
SizeofRtNexthop = 0x8
|
||||
|
|
@ -740,6 +743,15 @@ type IfAddrmsg struct {
|
|||
Index uint32
|
||||
}
|
||||
|
||||
type IfAddrlblmsg struct {
|
||||
Family uint8
|
||||
_ uint8
|
||||
Prefixlen uint8
|
||||
Flags uint8
|
||||
Index uint32
|
||||
Seq uint32
|
||||
}
|
||||
|
||||
type IfaCacheinfo struct {
|
||||
Prefered uint32
|
||||
Valid uint32
|
||||
|
|
@ -3052,6 +3064,23 @@ const (
|
|||
)
|
||||
|
||||
const (
|
||||
TCA_UNSPEC = 0x0
|
||||
TCA_KIND = 0x1
|
||||
TCA_OPTIONS = 0x2
|
||||
TCA_STATS = 0x3
|
||||
TCA_XSTATS = 0x4
|
||||
TCA_RATE = 0x5
|
||||
TCA_FCNT = 0x6
|
||||
TCA_STATS2 = 0x7
|
||||
TCA_STAB = 0x8
|
||||
TCA_PAD = 0x9
|
||||
TCA_DUMP_INVISIBLE = 0xa
|
||||
TCA_CHAIN = 0xb
|
||||
TCA_HW_OFFLOAD = 0xc
|
||||
TCA_INGRESS_BLOCK = 0xd
|
||||
TCA_EGRESS_BLOCK = 0xe
|
||||
TCA_DUMP_FLAGS = 0xf
|
||||
TCA_EXT_WARN_MSG = 0x10
|
||||
RTNLGRP_NONE = 0x0
|
||||
RTNLGRP_LINK = 0x1
|
||||
RTNLGRP_NOTIFY = 0x2
|
||||
|
|
@ -3086,6 +3115,18 @@ const (
|
|||
RTNLGRP_IPV6_MROUTE_R = 0x1f
|
||||
RTNLGRP_NEXTHOP = 0x20
|
||||
RTNLGRP_BRVLAN = 0x21
|
||||
RTNLGRP_MCTP_IFADDR = 0x22
|
||||
RTNLGRP_TUNNEL = 0x23
|
||||
RTNLGRP_STATS = 0x24
|
||||
RTNLGRP_IPV4_MCADDR = 0x25
|
||||
RTNLGRP_IPV6_MCADDR = 0x26
|
||||
RTNLGRP_IPV6_ACADDR = 0x27
|
||||
TCA_ROOT_UNSPEC = 0x0
|
||||
TCA_ROOT_TAB = 0x1
|
||||
TCA_ROOT_FLAGS = 0x2
|
||||
TCA_ROOT_COUNT = 0x3
|
||||
TCA_ROOT_TIME_DELTA = 0x4
|
||||
TCA_ROOT_EXT_WARN_MSG = 0x5
|
||||
)
|
||||
|
||||
type CapUserHeader struct {
|
||||
|
|
|
|||
16
vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go
generated
vendored
16
vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go
generated
vendored
|
|
@ -52,7 +52,7 @@ var (
|
|||
)
|
||||
|
||||
func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) {
|
||||
r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result)))
|
||||
r0, _, _ := syscall.SyscallN(procRegConnectRegistryW.Addr(), uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result)))
|
||||
if r0 != 0 {
|
||||
regerrno = syscall.Errno(r0)
|
||||
}
|
||||
|
|
@ -60,7 +60,7 @@ func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall
|
|||
}
|
||||
|
||||
func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) {
|
||||
r0, _, _ := syscall.Syscall9(procRegCreateKeyExW.Addr(), 9, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition)))
|
||||
r0, _, _ := syscall.SyscallN(procRegCreateKeyExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition)))
|
||||
if r0 != 0 {
|
||||
regerrno = syscall.Errno(r0)
|
||||
}
|
||||
|
|
@ -68,7 +68,7 @@ func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *
|
|||
}
|
||||
|
||||
func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) {
|
||||
r0, _, _ := syscall.Syscall(procRegDeleteKeyW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(subkey)), 0)
|
||||
r0, _, _ := syscall.SyscallN(procRegDeleteKeyW.Addr(), uintptr(key), uintptr(unsafe.Pointer(subkey)))
|
||||
if r0 != 0 {
|
||||
regerrno = syscall.Errno(r0)
|
||||
}
|
||||
|
|
@ -76,7 +76,7 @@ func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) {
|
|||
}
|
||||
|
||||
func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) {
|
||||
r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0)
|
||||
r0, _, _ := syscall.SyscallN(procRegDeleteValueW.Addr(), uintptr(key), uintptr(unsafe.Pointer(name)))
|
||||
if r0 != 0 {
|
||||
regerrno = syscall.Errno(r0)
|
||||
}
|
||||
|
|
@ -84,7 +84,7 @@ func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) {
|
|||
}
|
||||
|
||||
func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) {
|
||||
r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)), 0)
|
||||
r0, _, _ := syscall.SyscallN(procRegEnumValueW.Addr(), uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)))
|
||||
if r0 != 0 {
|
||||
regerrno = syscall.Errno(r0)
|
||||
}
|
||||
|
|
@ -92,7 +92,7 @@ func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint3
|
|||
}
|
||||
|
||||
func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) {
|
||||
r0, _, _ := syscall.Syscall9(procRegLoadMUIStringW.Addr(), 7, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)), 0, 0)
|
||||
r0, _, _ := syscall.SyscallN(procRegLoadMUIStringW.Addr(), uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)))
|
||||
if r0 != 0 {
|
||||
regerrno = syscall.Errno(r0)
|
||||
}
|
||||
|
|
@ -100,7 +100,7 @@ func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint
|
|||
}
|
||||
|
||||
func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) {
|
||||
r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize))
|
||||
r0, _, _ := syscall.SyscallN(procRegSetValueExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize))
|
||||
if r0 != 0 {
|
||||
regerrno = syscall.Errno(r0)
|
||||
}
|
||||
|
|
@ -108,7 +108,7 @@ func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype
|
|||
}
|
||||
|
||||
func expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size))
|
||||
r0, _, e1 := syscall.SyscallN(procExpandEnvironmentStringsW.Addr(), uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size))
|
||||
n = uint32(r0)
|
||||
if n == 0 {
|
||||
err = errnoErr(e1)
|
||||
|
|
|
|||
6
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
6
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
|
|
@ -1976,6 +1976,12 @@ const (
|
|||
SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
|
||||
)
|
||||
|
||||
// FILE_ZERO_DATA_INFORMATION from winioctl.h
|
||||
type FileZeroDataInformation struct {
|
||||
FileOffset int64
|
||||
BeyondFinalZero int64
|
||||
}
|
||||
|
||||
const (
|
||||
ComputerNameNetBIOS = 0
|
||||
ComputerNameDnsHostname = 1
|
||||
|
|
|
|||
966
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
966
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
File diff suppressed because it is too large
Load diff
2
vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
generated
vendored
2
vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
generated
vendored
|
|
@ -113,7 +113,7 @@ func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Nod
|
|||
// childrenOf elides the FuncType node beneath FuncDecl.
|
||||
// Add it back here for TypeParams, Params, Results,
|
||||
// all FieldLists). But we don't add it back for the "func" token
|
||||
// even though it is is the tree at FuncDecl.Type.Func.
|
||||
// even though it is the tree at FuncDecl.Type.Func.
|
||||
if decl, ok := node.(*ast.FuncDecl); ok {
|
||||
if fields, ok := child.(*ast.FieldList); ok && fields != decl.Recv {
|
||||
path = append(path, decl.Type)
|
||||
|
|
|
|||
2
vendor/golang.org/x/tools/go/packages/doc.go
generated
vendored
2
vendor/golang.org/x/tools/go/packages/doc.go
generated
vendored
|
|
@ -76,6 +76,8 @@ uninterpreted to Load, so that it can interpret them
|
|||
according to the conventions of the underlying build system.
|
||||
|
||||
See the Example function for typical usage.
|
||||
See also [golang.org/x/tools/go/packages/internal/linecount]
|
||||
for an example application.
|
||||
|
||||
# The driver protocol
|
||||
|
||||
|
|
|
|||
47
vendor/golang.org/x/tools/internal/imports/source_modindex.go
generated
vendored
47
vendor/golang.org/x/tools/internal/imports/source_modindex.go
generated
vendored
|
|
@ -15,6 +15,10 @@ import (
|
|||
// This code is here rather than in the modindex package
|
||||
// to avoid import loops
|
||||
|
||||
// TODO(adonovan): this code is only used by a test in this package.
|
||||
// Can we delete it? Or is there a plan to call NewIndexSource from
|
||||
// cmd/goimports?
|
||||
|
||||
// implements Source using modindex, so only for module cache.
|
||||
//
|
||||
// this is perhaps over-engineered. A new Index is read at first use.
|
||||
|
|
@ -22,8 +26,8 @@ import (
|
|||
// is read if the index changed. It is not clear the Mutex is needed.
|
||||
type IndexSource struct {
|
||||
modcachedir string
|
||||
mutex sync.Mutex
|
||||
ix *modindex.Index
|
||||
mu sync.Mutex
|
||||
index *modindex.Index // (access via getIndex)
|
||||
expires time.Time
|
||||
}
|
||||
|
||||
|
|
@ -39,13 +43,14 @@ func (s *IndexSource) LoadPackageNames(ctx context.Context, srcDir string, paths
|
|||
}
|
||||
|
||||
func (s *IndexSource) ResolveReferences(ctx context.Context, filename string, missing References) ([]*Result, error) {
|
||||
if err := s.maybeReadIndex(); err != nil {
|
||||
index, err := s.getIndex()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var cs []modindex.Candidate
|
||||
for pkg, nms := range missing {
|
||||
for nm := range nms {
|
||||
x := s.ix.Lookup(pkg, nm, false)
|
||||
x := index.Lookup(pkg, nm, false)
|
||||
cs = append(cs, x...)
|
||||
}
|
||||
}
|
||||
|
|
@ -74,30 +79,22 @@ func (s *IndexSource) ResolveReferences(ctx context.Context, filename string, mi
|
|||
return ans, nil
|
||||
}
|
||||
|
||||
func (s *IndexSource) maybeReadIndex() error {
|
||||
s.mutex.Lock()
|
||||
defer s.mutex.Unlock()
|
||||
func (s *IndexSource) getIndex() (*modindex.Index, error) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
var readIndex bool
|
||||
if time.Now().After(s.expires) {
|
||||
ok, err := modindex.Update(s.modcachedir)
|
||||
// (s.index = nil => s.expires is zero,
|
||||
// so the first condition is strictly redundant.
|
||||
// But it makes the postcondition very clear.)
|
||||
if s.index == nil || time.Now().After(s.expires) {
|
||||
index, err := modindex.Update(s.modcachedir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if ok {
|
||||
readIndex = true
|
||||
return nil, err
|
||||
}
|
||||
s.index = index
|
||||
s.expires = index.ValidAt.Add(15 * time.Minute) // (refresh period)
|
||||
}
|
||||
// Inv: s.index != nil
|
||||
|
||||
if readIndex || s.ix == nil {
|
||||
ix, err := modindex.ReadIndex(s.modcachedir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.ix = ix
|
||||
// for now refresh every 15 minutes
|
||||
s.expires = time.Now().Add(time.Minute * 15)
|
||||
}
|
||||
|
||||
return nil
|
||||
return s.index, nil
|
||||
}
|
||||
|
|
|
|||
160
vendor/golang.org/x/tools/internal/modindex/directories.go
generated
vendored
160
vendor/golang.org/x/tools/internal/modindex/directories.go
generated
vendored
|
|
@ -10,7 +10,6 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"slices"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
|
@ -20,50 +19,48 @@ import (
|
|||
)
|
||||
|
||||
type directory struct {
|
||||
path Relpath
|
||||
path string // relative to GOMODCACHE
|
||||
importPath string
|
||||
version string // semantic version
|
||||
syms []symbol
|
||||
}
|
||||
|
||||
// byImportPath groups the directories by import path,
|
||||
// sorting the ones with the same import path by semantic version,
|
||||
// most recent first.
|
||||
func byImportPath(dirs []Relpath) (map[string][]*directory, error) {
|
||||
ans := make(map[string][]*directory) // key is import path
|
||||
for _, d := range dirs {
|
||||
ip, sv, err := DirToImportPathVersion(d)
|
||||
// bestDirByImportPath returns the best directory for each import
|
||||
// path, where "best" means most recent semantic version. These import
|
||||
// paths are inferred from the GOMODCACHE-relative dir names in dirs.
|
||||
func bestDirByImportPath(dirs []string) (map[string]directory, error) {
|
||||
dirsByPath := make(map[string]directory)
|
||||
for _, dir := range dirs {
|
||||
importPath, version, err := dirToImportPathVersion(dir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ans[ip] = append(ans[ip], &directory{
|
||||
path: d,
|
||||
importPath: ip,
|
||||
version: sv,
|
||||
})
|
||||
new := directory{
|
||||
path: dir,
|
||||
importPath: importPath,
|
||||
version: version,
|
||||
}
|
||||
if old, ok := dirsByPath[importPath]; !ok || compareDirectory(new, old) < 0 {
|
||||
dirsByPath[importPath] = new
|
||||
}
|
||||
}
|
||||
for k, v := range ans {
|
||||
semanticSort(v)
|
||||
ans[k] = v
|
||||
}
|
||||
return ans, nil
|
||||
return dirsByPath, nil
|
||||
}
|
||||
|
||||
// sort the directories by semantic version, latest first
|
||||
func semanticSort(v []*directory) {
|
||||
slices.SortFunc(v, func(l, r *directory) int {
|
||||
if n := semver.Compare(l.version, r.version); n != 0 {
|
||||
return -n // latest first
|
||||
}
|
||||
return strings.Compare(string(l.path), string(r.path))
|
||||
})
|
||||
// compareDirectory defines an ordering of path@version directories,
|
||||
// by descending version, then by ascending path.
|
||||
func compareDirectory(x, y directory) int {
|
||||
if sign := -semver.Compare(x.version, y.version); sign != 0 {
|
||||
return sign // latest first
|
||||
}
|
||||
return strings.Compare(string(x.path), string(y.path))
|
||||
}
|
||||
|
||||
// modCacheRegexp splits a relpathpath into module, module version, and package.
|
||||
var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`)
|
||||
|
||||
// DirToImportPathVersion computes import path and semantic version
|
||||
func DirToImportPathVersion(dir Relpath) (string, string, error) {
|
||||
// dirToImportPathVersion computes import path and semantic version
|
||||
// from a GOMODCACHE-relative directory name.
|
||||
func dirToImportPathVersion(dir string) (string, string, error) {
|
||||
m := modCacheRegexp.FindStringSubmatch(string(dir))
|
||||
// m[1] is the module path
|
||||
// m[2] is the version major.minor.patch(-<pre release identifier)
|
||||
|
|
@ -74,62 +71,61 @@ func DirToImportPathVersion(dir Relpath) (string, string, error) {
|
|||
if !semver.IsValid(m[2]) {
|
||||
return "", "", fmt.Errorf("bad semantic version %s", m[2])
|
||||
}
|
||||
// ToSlash is required for Windows.
|
||||
// ToSlash is required to convert Windows file paths
|
||||
// into Go package import paths.
|
||||
return filepath.ToSlash(m[1] + m[3]), m[2], nil
|
||||
}
|
||||
|
||||
// a region controls what directories to look at, for
|
||||
// updating the index incrementally, and for testing that.
|
||||
// (for testing one builds an index as of A, incrementally
|
||||
// updates it to B, and compares the result to an index build
|
||||
// as of B.)
|
||||
type region struct {
|
||||
onlyAfter, onlyBefore time.Time
|
||||
sync.Mutex
|
||||
ans []Relpath
|
||||
}
|
||||
// findDirs returns an unordered list of relevant package directories,
|
||||
// relative to the specified module cache root. The result includes only
|
||||
// module dirs whose mtime is within (start, end).
|
||||
func findDirs(root string, start, end time.Time) []string {
|
||||
var (
|
||||
resMu sync.Mutex
|
||||
res []string
|
||||
)
|
||||
|
||||
func findDirs(root string, onlyAfter, onlyBefore time.Time) []Relpath {
|
||||
addDir := func(root gopathwalk.Root, dir string) {
|
||||
// TODO(pjw): do we need to check times?
|
||||
resMu.Lock()
|
||||
defer resMu.Unlock()
|
||||
res = append(res, relative(root.Path, dir))
|
||||
}
|
||||
|
||||
skipDir := func(_ gopathwalk.Root, dir string) bool {
|
||||
// The cache directory is already ignored in gopathwalk.
|
||||
if filepath.Base(dir) == "internal" {
|
||||
return true
|
||||
}
|
||||
|
||||
// Skip toolchains.
|
||||
if strings.Contains(dir, "toolchain@") {
|
||||
return true
|
||||
}
|
||||
|
||||
// Don't look inside @ directories that are too old/new.
|
||||
if strings.Contains(filepath.Base(dir), "@") {
|
||||
st, err := os.Stat(dir)
|
||||
if err != nil {
|
||||
log.Printf("can't stat dir %s %v", dir, err)
|
||||
return true
|
||||
}
|
||||
mtime := st.ModTime()
|
||||
return mtime.Before(start) || mtime.After(end)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// TODO(adonovan): parallelize this. Even with a hot buffer cache,
|
||||
// find $(go env GOMODCACHE) -type d
|
||||
// can easily take up a minute.
|
||||
roots := []gopathwalk.Root{{Path: root, Type: gopathwalk.RootModuleCache}}
|
||||
// TODO(PJW): adjust concurrency
|
||||
opts := gopathwalk.Options{ModulesEnabled: true, Concurrency: 1 /* ,Logf: log.Printf*/}
|
||||
betw := ®ion{
|
||||
onlyAfter: onlyAfter,
|
||||
onlyBefore: onlyBefore,
|
||||
}
|
||||
gopathwalk.WalkSkip(roots, betw.addDir, betw.skipDir, opts)
|
||||
return betw.ans
|
||||
}
|
||||
gopathwalk.WalkSkip(roots, addDir, skipDir, gopathwalk.Options{
|
||||
ModulesEnabled: true,
|
||||
Concurrency: 1, // TODO(pjw): adjust concurrency
|
||||
// Logf: log.Printf,
|
||||
})
|
||||
|
||||
func (r *region) addDir(rt gopathwalk.Root, dir string) {
|
||||
// do we need to check times?
|
||||
r.Lock()
|
||||
defer r.Unlock()
|
||||
x := filepath.ToSlash(string(toRelpath(Abspath(rt.Path), dir)))
|
||||
r.ans = append(r.ans, toRelpath(Abspath(rt.Path), x))
|
||||
}
|
||||
|
||||
func (r *region) skipDir(_ gopathwalk.Root, dir string) bool {
|
||||
// The cache directory is already ignored in gopathwalk\
|
||||
if filepath.Base(dir) == "internal" {
|
||||
return true
|
||||
}
|
||||
if strings.Contains(dir, "toolchain@") {
|
||||
return true
|
||||
}
|
||||
// don't look inside @ directories that are too old
|
||||
if strings.Contains(filepath.Base(dir), "@") {
|
||||
st, err := os.Stat(dir)
|
||||
if err != nil {
|
||||
log.Printf("can't stat dir %s %v", dir, err)
|
||||
return true
|
||||
}
|
||||
if st.ModTime().Before(r.onlyAfter) {
|
||||
return true
|
||||
}
|
||||
if st.ModTime().After(r.onlyBefore) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
return res
|
||||
}
|
||||
|
|
|
|||
251
vendor/golang.org/x/tools/internal/modindex/index.go
generated
vendored
251
vendor/golang.org/x/tools/internal/modindex/index.go
generated
vendored
|
|
@ -6,12 +6,10 @@ package modindex
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"crypto/sha256"
|
||||
"encoding/csv"
|
||||
"errors"
|
||||
"fmt"
|
||||
"hash/crc64"
|
||||
"io"
|
||||
"io/fs"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
|
@ -22,7 +20,7 @@ import (
|
|||
)
|
||||
|
||||
/*
|
||||
The on-disk index is a text file.
|
||||
The on-disk index ("payload") is a text file.
|
||||
The first 3 lines are header information containing CurrentVersion,
|
||||
the value of GOMODCACHE, and the validity date of the index.
|
||||
(This is when the code started building the index.)
|
||||
|
|
@ -68,34 +66,45 @@ whose types are []byte and interface{}.
|
|||
// CurrentVersion tells readers about the format of the index.
|
||||
const CurrentVersion int = 0
|
||||
|
||||
// Index is returned by ReadIndex().
|
||||
// Index is returned by [Read].
|
||||
type Index struct {
|
||||
Version int
|
||||
Cachedir Abspath // The directory containing the module cache
|
||||
Changed time.Time // The index is up to date as of Changed
|
||||
Entries []Entry
|
||||
Version int
|
||||
GOMODCACHE string // absolute path of Go module cache dir
|
||||
ValidAt time.Time // moment at which the index was up to date
|
||||
Entries []Entry
|
||||
}
|
||||
|
||||
func (ix *Index) String() string {
|
||||
return fmt.Sprintf("Index(%s v%d has %d entries at %v)",
|
||||
ix.GOMODCACHE, ix.Version, len(ix.Entries), ix.ValidAt)
|
||||
}
|
||||
|
||||
// An Entry contains information for an import path.
|
||||
type Entry struct {
|
||||
Dir Relpath // directory in modcache
|
||||
Dir string // package directory relative to GOMODCACHE; uses OS path separator
|
||||
ImportPath string
|
||||
PkgName string
|
||||
Version string
|
||||
//ModTime STime // is this useful?
|
||||
Names []string // exported names and information
|
||||
Names []string // exported names and information
|
||||
}
|
||||
|
||||
// IndexDir is where the module index is stored.
|
||||
var IndexDir string
|
||||
|
||||
// Set IndexDir
|
||||
func init() {
|
||||
// Each logical index entry consists of a pair of files:
|
||||
//
|
||||
// - the "payload" (index-VERSION-XXX), whose name is
|
||||
// randomized, holds the actual index; and
|
||||
// - the "link" (index-name-VERSION-HASH),
|
||||
// whose name is predictable, contains the
|
||||
// name of the payload file.
|
||||
//
|
||||
// Since the link file is small (<512B),
|
||||
// reads and writes to it may be assumed atomic.
|
||||
var IndexDir string = func() string {
|
||||
var dir string
|
||||
var err error
|
||||
if testing.Testing() {
|
||||
dir = os.TempDir()
|
||||
} else {
|
||||
var err error
|
||||
dir, err = os.UserCacheDir()
|
||||
// shouldn't happen, but TempDir is better than
|
||||
// creating ./go/imports
|
||||
|
|
@ -103,81 +112,83 @@ func init() {
|
|||
dir = os.TempDir()
|
||||
}
|
||||
}
|
||||
dir = filepath.Join(dir, "go", "imports")
|
||||
os.MkdirAll(dir, 0777)
|
||||
IndexDir = dir
|
||||
dir = filepath.Join(dir, "goimports")
|
||||
if err := os.MkdirAll(dir, 0777); err != nil {
|
||||
log.Printf("failed to create modcache index dir: %v", err)
|
||||
}
|
||||
return dir
|
||||
}()
|
||||
|
||||
// Read reads the latest version of the on-disk index
|
||||
// for the specified Go module cache directory.
|
||||
// If there is no index, it returns a nil Index and an fs.ErrNotExist error.
|
||||
func Read(gomodcache string) (*Index, error) {
|
||||
gomodcache, err := filepath.Abs(gomodcache)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Read the "link" file for the specified gomodcache directory.
|
||||
// It names the payload file.
|
||||
content, err := os.ReadFile(filepath.Join(IndexDir, linkFileBasename(gomodcache)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
payloadFile := filepath.Join(IndexDir, string(content))
|
||||
|
||||
// Read the index out of the payload file.
|
||||
f, err := os.Open(payloadFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
return readIndexFrom(gomodcache, bufio.NewReader(f))
|
||||
}
|
||||
|
||||
// ReadIndex reads the latest version of the on-disk index
|
||||
// for the cache directory cd.
|
||||
// It returns (nil, nil) if there is no index, but returns
|
||||
// a non-nil error if the index exists but could not be read.
|
||||
func ReadIndex(cachedir string) (*Index, error) {
|
||||
cachedir, err := filepath.Abs(cachedir)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cd := Abspath(cachedir)
|
||||
dir := IndexDir
|
||||
base := indexNameBase(cd)
|
||||
iname := filepath.Join(dir, base)
|
||||
buf, err := os.ReadFile(iname)
|
||||
if err != nil {
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, fmt.Errorf("cannot read %s: %w", iname, err)
|
||||
}
|
||||
fname := filepath.Join(dir, string(buf))
|
||||
fd, err := os.Open(fname)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer fd.Close()
|
||||
r := bufio.NewReader(fd)
|
||||
ix, err := readIndexFrom(cd, r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ix, nil
|
||||
}
|
||||
func readIndexFrom(gomodcache string, r io.Reader) (*Index, error) {
|
||||
scan := bufio.NewScanner(r)
|
||||
|
||||
func readIndexFrom(cd Abspath, bx io.Reader) (*Index, error) {
|
||||
b := bufio.NewScanner(bx)
|
||||
var ans Index
|
||||
// header
|
||||
ok := b.Scan()
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("unexpected scan error")
|
||||
// version
|
||||
if !scan.Scan() {
|
||||
return nil, fmt.Errorf("unexpected scan error: %v", scan.Err())
|
||||
}
|
||||
l := b.Text()
|
||||
var err error
|
||||
ans.Version, err = strconv.Atoi(l)
|
||||
version, err := strconv.Atoi(scan.Text())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if ans.Version != CurrentVersion {
|
||||
return nil, fmt.Errorf("got version %d, expected %d", ans.Version, CurrentVersion)
|
||||
if version != CurrentVersion {
|
||||
return nil, fmt.Errorf("got version %d, expected %d", version, CurrentVersion)
|
||||
}
|
||||
if ok := b.Scan(); !ok {
|
||||
return nil, fmt.Errorf("scanner error reading cachedir")
|
||||
|
||||
// gomodcache
|
||||
if !scan.Scan() {
|
||||
return nil, fmt.Errorf("scanner error reading module cache dir: %v", scan.Err())
|
||||
}
|
||||
ans.Cachedir = Abspath(b.Text())
|
||||
if ok := b.Scan(); !ok {
|
||||
return nil, fmt.Errorf("scanner error reading index creation time")
|
||||
}
|
||||
// TODO(pjw): need to check that this is the expected cachedir
|
||||
// TODO(pjw): need to check that this is the expected cache dir
|
||||
// so the tag should be passed in to this function
|
||||
ans.Changed, err = time.ParseInLocation(time.DateTime, b.Text(), time.Local)
|
||||
if dir := string(scan.Text()); dir != gomodcache {
|
||||
return nil, fmt.Errorf("index file GOMODCACHE mismatch: got %q, want %q", dir, gomodcache)
|
||||
}
|
||||
|
||||
// changed
|
||||
if !scan.Scan() {
|
||||
return nil, fmt.Errorf("scanner error reading index creation time: %v", scan.Err())
|
||||
}
|
||||
changed, err := time.ParseInLocation(time.DateTime, scan.Text(), time.Local)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var curEntry *Entry
|
||||
for b.Scan() {
|
||||
v := b.Text()
|
||||
|
||||
// entries
|
||||
var (
|
||||
curEntry *Entry
|
||||
entries []Entry
|
||||
)
|
||||
for scan.Scan() {
|
||||
v := scan.Text()
|
||||
if v[0] == ':' {
|
||||
if curEntry != nil {
|
||||
ans.Entries = append(ans.Entries, *curEntry)
|
||||
entries = append(entries, *curEntry)
|
||||
}
|
||||
// as directories may contain commas and quotes, they need to be read as csv.
|
||||
rdr := strings.NewReader(v[1:])
|
||||
|
|
@ -189,49 +200,56 @@ func readIndexFrom(cd Abspath, bx io.Reader) (*Index, error) {
|
|||
if len(flds) != 4 {
|
||||
return nil, fmt.Errorf("header contains %d fields, not 4: %q", len(v), v)
|
||||
}
|
||||
curEntry = &Entry{PkgName: flds[0], ImportPath: flds[1], Dir: toRelpath(cd, flds[2]), Version: flds[3]}
|
||||
curEntry = &Entry{
|
||||
PkgName: flds[0],
|
||||
ImportPath: flds[1],
|
||||
Dir: relative(gomodcache, flds[2]),
|
||||
Version: flds[3],
|
||||
}
|
||||
continue
|
||||
}
|
||||
curEntry.Names = append(curEntry.Names, v)
|
||||
}
|
||||
if err := scan.Err(); err != nil {
|
||||
return nil, fmt.Errorf("scanner failed while reading modindex entry: %v", err)
|
||||
}
|
||||
if curEntry != nil {
|
||||
ans.Entries = append(ans.Entries, *curEntry)
|
||||
entries = append(entries, *curEntry)
|
||||
}
|
||||
if err := b.Err(); err != nil {
|
||||
return nil, fmt.Errorf("scanner failed %v", err)
|
||||
}
|
||||
return &ans, nil
|
||||
|
||||
return &Index{
|
||||
Version: version,
|
||||
GOMODCACHE: gomodcache,
|
||||
ValidAt: changed,
|
||||
Entries: entries,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// write the index as a text file
|
||||
func writeIndex(cachedir Abspath, ix *Index) error {
|
||||
ipat := fmt.Sprintf("index-%d-*", CurrentVersion)
|
||||
fd, err := os.CreateTemp(IndexDir, ipat)
|
||||
// write writes the index file and updates the index directory to refer to it.
|
||||
func write(gomodcache string, ix *Index) error {
|
||||
// Write the index into a payload file with a fresh name.
|
||||
f, err := os.CreateTemp(IndexDir, fmt.Sprintf("index-%d-*", CurrentVersion))
|
||||
if err != nil {
|
||||
return err // can this happen?
|
||||
return err // e.g. disk full, or index dir deleted
|
||||
}
|
||||
defer fd.Close()
|
||||
if err := writeIndexToFile(ix, fd); err != nil {
|
||||
if err := writeIndexToFile(ix, bufio.NewWriter(f)); err != nil {
|
||||
_ = f.Close() // ignore error
|
||||
return err
|
||||
}
|
||||
content := fd.Name()
|
||||
content = filepath.Base(content)
|
||||
base := indexNameBase(cachedir)
|
||||
nm := filepath.Join(IndexDir, base)
|
||||
err = os.WriteFile(nm, []byte(content), 0666)
|
||||
if err != nil {
|
||||
if err := f.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
// Write the name of the payload file into a link file.
|
||||
indexDirFile := filepath.Join(IndexDir, linkFileBasename(gomodcache))
|
||||
content := []byte(filepath.Base(f.Name()))
|
||||
return os.WriteFile(indexDirFile, content, 0666)
|
||||
}
|
||||
|
||||
func writeIndexToFile(x *Index, fd *os.File) error {
|
||||
cnt := 0
|
||||
w := bufio.NewWriter(fd)
|
||||
func writeIndexToFile(x *Index, w *bufio.Writer) error {
|
||||
fmt.Fprintf(w, "%d\n", x.Version)
|
||||
fmt.Fprintf(w, "%s\n", x.Cachedir)
|
||||
// round the time down
|
||||
tm := x.Changed.Add(-time.Second / 2)
|
||||
fmt.Fprintf(w, "%s\n", x.GOMODCACHE)
|
||||
tm := x.ValidAt.Truncate(time.Second) // round the time down
|
||||
fmt.Fprintf(w, "%s\n", tm.Format(time.DateTime))
|
||||
for _, e := range x.Entries {
|
||||
if e.ImportPath == "" {
|
||||
|
|
@ -239,7 +257,6 @@ func writeIndexToFile(x *Index, fd *os.File) error {
|
|||
}
|
||||
// PJW: maybe always write these headers as csv?
|
||||
if strings.ContainsAny(string(e.Dir), ",\"") {
|
||||
log.Printf("DIR: %s", e.Dir)
|
||||
cw := csv.NewWriter(w)
|
||||
cw.Write([]string{":" + e.PkgName, e.ImportPath, string(e.Dir), e.Version})
|
||||
cw.Flush()
|
||||
|
|
@ -248,19 +265,23 @@ func writeIndexToFile(x *Index, fd *os.File) error {
|
|||
}
|
||||
for _, x := range e.Names {
|
||||
fmt.Fprintf(w, "%s\n", x)
|
||||
cnt++
|
||||
}
|
||||
}
|
||||
if err := w.Flush(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return w.Flush()
|
||||
}
|
||||
|
||||
// return the base name of the file containing the name of the current index
|
||||
func indexNameBase(cachedir Abspath) string {
|
||||
// crc64 is a way to convert path names into 16 hex digits.
|
||||
h := crc64.Checksum([]byte(cachedir), crc64.MakeTable(crc64.ECMA))
|
||||
fname := fmt.Sprintf("index-name-%d-%016x", CurrentVersion, h)
|
||||
return fname
|
||||
// linkFileBasename returns the base name of the link file in the
|
||||
// index directory that holds the name of the payload file for the
|
||||
// specified (absolute) Go module cache dir.
|
||||
func linkFileBasename(gomodcache string) string {
|
||||
// Note: coupled to logic in ./gomodindex/cmd.go. TODO: factor.
|
||||
h := sha256.Sum256([]byte(gomodcache)) // collision-resistant hash
|
||||
return fmt.Sprintf("index-name-%d-%032x", CurrentVersion, h)
|
||||
}
|
||||
|
||||
func relative(base, file string) string {
|
||||
if rel, err := filepath.Rel(base, file); err == nil {
|
||||
return rel
|
||||
}
|
||||
return file
|
||||
}
|
||||
|
|
|
|||
217
vendor/golang.org/x/tools/internal/modindex/modindex.go
generated
vendored
217
vendor/golang.org/x/tools/internal/modindex/modindex.go
generated
vendored
|
|
@ -2,17 +2,21 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Package modindex contains code for building and searching an index to
|
||||
// the Go module cache. The directory containing the index, returned by
|
||||
// IndexDir(), contains a file index-name-<ver> that contains the name
|
||||
// Package modindex contains code for building and searching an
|
||||
// [Index] of the Go module cache.
|
||||
package modindex
|
||||
|
||||
// The directory containing the index, returned by
|
||||
// [IndexDir], contains a file index-name-<ver> that contains the name
|
||||
// of the current index. We believe writing that short file is atomic.
|
||||
// ReadIndex reads that file to get the file name of the index.
|
||||
// [Read] reads that file to get the file name of the index.
|
||||
// WriteIndex writes an index with a unique name and then
|
||||
// writes that name into a new version of index-name-<ver>.
|
||||
// (<ver> stands for the CurrentVersion of the index format.)
|
||||
package modindex
|
||||
|
||||
import (
|
||||
"maps"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"strings"
|
||||
|
|
@ -21,144 +25,95 @@ import (
|
|||
"golang.org/x/mod/semver"
|
||||
)
|
||||
|
||||
// Create always creates a new index for the go module cache that is in cachedir.
|
||||
func Create(cachedir string) error {
|
||||
_, err := indexModCache(cachedir, true)
|
||||
return err
|
||||
}
|
||||
|
||||
// Update the index for the go module cache that is in cachedir,
|
||||
// If there is no existing index it will build one.
|
||||
// If there are changed directories since the last index, it will
|
||||
// write a new one and return true. Otherwise it returns false.
|
||||
func Update(cachedir string) (bool, error) {
|
||||
return indexModCache(cachedir, false)
|
||||
}
|
||||
|
||||
// indexModCache writes an index current as of when it is called.
|
||||
// If clear is true the index is constructed from all of GOMODCACHE
|
||||
// otherwise the index is constructed from the last previous index
|
||||
// and the updates to the cache. It returns true if it wrote an index,
|
||||
// false otherwise.
|
||||
func indexModCache(cachedir string, clear bool) (bool, error) {
|
||||
cachedir, err := filepath.Abs(cachedir)
|
||||
// Update updates the index for the specified Go
|
||||
// module cache directory, creating it as needed.
|
||||
// On success it returns the current index.
|
||||
func Update(gomodcache string) (*Index, error) {
|
||||
prev, err := Read(gomodcache)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
cd := Abspath(cachedir)
|
||||
future := time.Now().Add(24 * time.Hour) // safely in the future
|
||||
ok, err := modindexTimed(future, cd, clear)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return ok, nil
|
||||
}
|
||||
|
||||
// modindexTimed writes an index current as of onlyBefore.
|
||||
// If clear is true the index is constructed from all of GOMODCACHE
|
||||
// otherwise the index is constructed from the last previous index
|
||||
// and all the updates to the cache before onlyBefore.
|
||||
// It returns true if it wrote a new index, false if it wrote nothing.
|
||||
func modindexTimed(onlyBefore time.Time, cachedir Abspath, clear bool) (bool, error) {
|
||||
var curIndex *Index
|
||||
if !clear {
|
||||
var err error
|
||||
curIndex, err = ReadIndex(string(cachedir))
|
||||
if clear && err != nil {
|
||||
return false, err
|
||||
if !os.IsNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
// TODO(pjw): check that most of those directories still exist
|
||||
prev = nil
|
||||
}
|
||||
cfg := &work{
|
||||
onlyBefore: onlyBefore,
|
||||
oldIndex: curIndex,
|
||||
cacheDir: cachedir,
|
||||
}
|
||||
if curIndex != nil {
|
||||
cfg.onlyAfter = curIndex.Changed
|
||||
}
|
||||
if err := cfg.buildIndex(); err != nil {
|
||||
return false, err
|
||||
}
|
||||
if len(cfg.newIndex.Entries) == 0 && curIndex != nil {
|
||||
// no changes from existing curIndex, don't write a new index
|
||||
return false, nil
|
||||
}
|
||||
if err := cfg.writeIndex(); err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
return update(gomodcache, prev)
|
||||
}
|
||||
|
||||
type work struct {
|
||||
onlyBefore time.Time // do not use directories later than this
|
||||
onlyAfter time.Time // only interested in directories after this
|
||||
// directories from before onlyAfter come from oldIndex
|
||||
oldIndex *Index
|
||||
newIndex *Index
|
||||
cacheDir Abspath
|
||||
}
|
||||
|
||||
func (w *work) buildIndex() error {
|
||||
// The effective date of the new index should be at least
|
||||
// slightly earlier than when the directories are scanned
|
||||
// so set it now.
|
||||
w.newIndex = &Index{Changed: time.Now(), Cachedir: w.cacheDir}
|
||||
dirs := findDirs(string(w.cacheDir), w.onlyAfter, w.onlyBefore)
|
||||
if len(dirs) == 0 {
|
||||
return nil
|
||||
}
|
||||
newdirs, err := byImportPath(dirs)
|
||||
// update builds, writes, and returns the current index.
|
||||
//
|
||||
// If old is nil, the new index is built from all of GOMODCACHE;
|
||||
// otherwise it is built from the old index plus cache updates
|
||||
// since the previous index's time.
|
||||
func update(gomodcache string, old *Index) (*Index, error) {
|
||||
gomodcache, err := filepath.Abs(gomodcache)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
// for each import path it might occur only in newdirs,
|
||||
// only in w.oldIndex, or in both.
|
||||
// If it occurs in both, use the semantically later one
|
||||
if w.oldIndex != nil {
|
||||
for _, e := range w.oldIndex.Entries {
|
||||
found, ok := newdirs[e.ImportPath]
|
||||
if !ok {
|
||||
w.newIndex.Entries = append(w.newIndex.Entries, e)
|
||||
continue // use this one, there is no new one
|
||||
}
|
||||
if semver.Compare(found[0].version, e.Version) > 0 {
|
||||
// use the new one
|
||||
} else {
|
||||
// use the old one, forget the new one
|
||||
w.newIndex.Entries = append(w.newIndex.Entries, e)
|
||||
delete(newdirs, e.ImportPath)
|
||||
new, changed, err := build(gomodcache, old)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if old == nil || changed {
|
||||
if err := write(gomodcache, new); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return new, nil
|
||||
}
|
||||
|
||||
// build returns a new index for the specified Go module cache (an
|
||||
// absolute path).
|
||||
//
|
||||
// If an old index is provided, only directories more recent than it
|
||||
// that it are scanned; older directories are provided by the old
|
||||
// Index.
|
||||
//
|
||||
// The boolean result indicates whether new entries were found.
|
||||
func build(gomodcache string, old *Index) (*Index, bool, error) {
|
||||
// Set the time window.
|
||||
var start time.Time // = dawn of time
|
||||
if old != nil {
|
||||
start = old.ValidAt
|
||||
}
|
||||
now := time.Now()
|
||||
end := now.Add(24 * time.Hour) // safely in the future
|
||||
|
||||
// Enumerate GOMODCACHE package directories.
|
||||
// Choose the best (latest) package for each import path.
|
||||
pkgDirs := findDirs(gomodcache, start, end)
|
||||
dirByPath, err := bestDirByImportPath(pkgDirs)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
|
||||
// For each import path it might occur only in
|
||||
// dirByPath, only in old, or in both.
|
||||
// If both, use the semantically later one.
|
||||
var entries []Entry
|
||||
if old != nil {
|
||||
for _, entry := range old.Entries {
|
||||
dir, ok := dirByPath[entry.ImportPath]
|
||||
if !ok || semver.Compare(dir.version, entry.Version) <= 0 {
|
||||
// New dir is missing or not more recent; use old entry.
|
||||
entries = append(entries, entry)
|
||||
delete(dirByPath, entry.ImportPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
// get symbol information for all the new diredtories
|
||||
getSymbols(w.cacheDir, newdirs)
|
||||
// assemble the new index entries
|
||||
for k, v := range newdirs {
|
||||
d := v[0]
|
||||
pkg, names := processSyms(d.syms)
|
||||
if pkg == "" {
|
||||
continue // PJW: does this ever happen?
|
||||
}
|
||||
entry := Entry{
|
||||
PkgName: pkg,
|
||||
Dir: d.path,
|
||||
ImportPath: k,
|
||||
Version: d.version,
|
||||
Names: names,
|
||||
}
|
||||
w.newIndex.Entries = append(w.newIndex.Entries, entry)
|
||||
}
|
||||
// sort the entries in the new index
|
||||
slices.SortFunc(w.newIndex.Entries, func(l, r Entry) int {
|
||||
if n := strings.Compare(l.PkgName, r.PkgName); n != 0 {
|
||||
|
||||
// Extract symbol information for all the new directories.
|
||||
newEntries := extractSymbols(gomodcache, maps.Values(dirByPath))
|
||||
entries = append(entries, newEntries...)
|
||||
slices.SortFunc(entries, func(x, y Entry) int {
|
||||
if n := strings.Compare(x.PkgName, y.PkgName); n != 0 {
|
||||
return n
|
||||
}
|
||||
return strings.Compare(l.ImportPath, r.ImportPath)
|
||||
return strings.Compare(x.ImportPath, y.ImportPath)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *work) writeIndex() error {
|
||||
return writeIndex(w.cacheDir, w.newIndex)
|
||||
return &Index{
|
||||
GOMODCACHE: gomodcache,
|
||||
ValidAt: now, // time before the directories were scanned
|
||||
Entries: entries,
|
||||
}, len(newEntries) > 0, nil
|
||||
}
|
||||
|
|
|
|||
73
vendor/golang.org/x/tools/internal/modindex/symbols.go
generated
vendored
73
vendor/golang.org/x/tools/internal/modindex/symbols.go
generated
vendored
|
|
@ -10,11 +10,13 @@ import (
|
|||
"go/parser"
|
||||
"go/token"
|
||||
"go/types"
|
||||
"iter"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"slices"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
|
@ -34,41 +36,65 @@ type symbol struct {
|
|||
sig string // signature information, for F
|
||||
}
|
||||
|
||||
// find the symbols for the best directories
|
||||
func getSymbols(cd Abspath, dirs map[string][]*directory) {
|
||||
// extractSymbols returns a (new, unordered) array of Entries, one for
|
||||
// each provided package directory, describing its exported symbols.
|
||||
func extractSymbols(cwd string, dirs iter.Seq[directory]) []Entry {
|
||||
var (
|
||||
mu sync.Mutex
|
||||
entries []Entry
|
||||
)
|
||||
|
||||
var g errgroup.Group
|
||||
g.SetLimit(max(2, runtime.GOMAXPROCS(0)/2))
|
||||
for _, vv := range dirs {
|
||||
// throttling some day?
|
||||
d := vv[0]
|
||||
for dir := range dirs {
|
||||
g.Go(func() error {
|
||||
thedir := filepath.Join(string(cd), string(d.path))
|
||||
thedir := filepath.Join(cwd, string(dir.path))
|
||||
mode := parser.SkipObjectResolution | parser.ParseComments
|
||||
|
||||
fi, err := os.ReadDir(thedir)
|
||||
// Parse all Go files in dir and extract symbols.
|
||||
dirents, err := os.ReadDir(thedir)
|
||||
if err != nil {
|
||||
return nil // log this someday?
|
||||
}
|
||||
for _, fx := range fi {
|
||||
if !strings.HasSuffix(fx.Name(), ".go") || strings.HasSuffix(fx.Name(), "_test.go") {
|
||||
var syms []symbol
|
||||
for _, dirent := range dirents {
|
||||
if !strings.HasSuffix(dirent.Name(), ".go") ||
|
||||
strings.HasSuffix(dirent.Name(), "_test.go") {
|
||||
continue
|
||||
}
|
||||
fname := filepath.Join(thedir, fx.Name())
|
||||
fname := filepath.Join(thedir, dirent.Name())
|
||||
tr, err := parser.ParseFile(token.NewFileSet(), fname, nil, mode)
|
||||
if err != nil {
|
||||
continue // ignore errors, someday log them?
|
||||
}
|
||||
d.syms = append(d.syms, getFileExports(tr)...)
|
||||
syms = append(syms, getFileExports(tr)...)
|
||||
}
|
||||
|
||||
// Create an entry for the package.
|
||||
pkg, names := processSyms(syms)
|
||||
if pkg != "" {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
entries = append(entries, Entry{
|
||||
PkgName: pkg,
|
||||
Dir: dir.path,
|
||||
ImportPath: dir.importPath,
|
||||
Version: dir.version,
|
||||
Names: names,
|
||||
})
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
g.Wait()
|
||||
g.Wait() // ignore error
|
||||
|
||||
return entries
|
||||
}
|
||||
|
||||
func getFileExports(f *ast.File) []symbol {
|
||||
pkg := f.Name.Name
|
||||
if pkg == "main" {
|
||||
if pkg == "main" || pkg == "" {
|
||||
return nil
|
||||
}
|
||||
var ans []symbol
|
||||
|
|
@ -202,17 +228,18 @@ func processSyms(syms []symbol) (string, []string) {
|
|||
pkg := syms[0].pkg
|
||||
var names []string
|
||||
for _, s := range syms {
|
||||
var nx string
|
||||
if s.pkg == pkg {
|
||||
if s.sig != "" {
|
||||
nx = fmt.Sprintf("%s %s %s", s.name, s.kind, s.sig)
|
||||
} else {
|
||||
nx = fmt.Sprintf("%s %s", s.name, s.kind)
|
||||
}
|
||||
names = append(names, nx)
|
||||
} else {
|
||||
continue // PJW: do we want to keep track of these?
|
||||
if s.pkg != pkg {
|
||||
// Symbols came from two files in same dir
|
||||
// with different package declarations.
|
||||
continue
|
||||
}
|
||||
var nx string
|
||||
if s.sig != "" {
|
||||
nx = fmt.Sprintf("%s %s %s", s.name, s.kind, s.sig)
|
||||
} else {
|
||||
nx = fmt.Sprintf("%s %s", s.name, s.kind)
|
||||
}
|
||||
names = append(names, nx)
|
||||
}
|
||||
return pkg, names
|
||||
}
|
||||
|
|
|
|||
25
vendor/golang.org/x/tools/internal/modindex/types.go
generated
vendored
25
vendor/golang.org/x/tools/internal/modindex/types.go
generated
vendored
|
|
@ -1,25 +0,0 @@
|
|||
// Copyright 2024 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package modindex
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// some special types to avoid confusions
|
||||
|
||||
// distinguish various types of directory names. It's easy to get confused.
|
||||
type Abspath string // absolute paths
|
||||
type Relpath string // paths with GOMODCACHE prefix removed
|
||||
|
||||
func toRelpath(cachedir Abspath, s string) Relpath {
|
||||
if strings.HasPrefix(s, string(cachedir)) {
|
||||
if s == string(cachedir) {
|
||||
return Relpath("")
|
||||
}
|
||||
return Relpath(s[len(cachedir)+1:])
|
||||
}
|
||||
return Relpath(s)
|
||||
}
|
||||
28
vendor/modules.txt
vendored
28
vendor/modules.txt
vendored
|
|
@ -619,7 +619,7 @@ github.com/jackc/pgpassfile
|
|||
# github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761
|
||||
## explicit; go 1.14
|
||||
github.com/jackc/pgservicefile
|
||||
# github.com/jackc/pgx/v5 v5.7.5
|
||||
# github.com/jackc/pgx/v5 v5.7.6
|
||||
## explicit; go 1.23.0
|
||||
github.com/jackc/pgx/v5
|
||||
github.com/jackc/pgx/v5/internal/iobufpool
|
||||
|
|
@ -727,8 +727,8 @@ github.com/modern-go/reflect2
|
|||
# github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
|
||||
## explicit
|
||||
github.com/munnerz/goautoneg
|
||||
# github.com/ncruces/go-sqlite3 v0.28.0
|
||||
## explicit; go 1.23.0
|
||||
# github.com/ncruces/go-sqlite3 v0.29.0
|
||||
## explicit; go 1.24.0
|
||||
github.com/ncruces/go-sqlite3
|
||||
github.com/ncruces/go-sqlite3/driver
|
||||
github.com/ncruces/go-sqlite3/embed
|
||||
|
|
@ -858,7 +858,7 @@ github.com/stretchr/testify/suite
|
|||
# github.com/subosito/gotenv v1.6.0
|
||||
## explicit; go 1.18
|
||||
github.com/subosito/gotenv
|
||||
# github.com/tdewolff/minify/v2 v2.24.2
|
||||
# github.com/tdewolff/minify/v2 v2.24.3
|
||||
## explicit; go 1.17
|
||||
github.com/tdewolff/minify/v2
|
||||
github.com/tdewolff/minify/v2/html
|
||||
|
|
@ -1190,7 +1190,7 @@ golang.org/x/image/riff
|
|||
golang.org/x/image/vp8
|
||||
golang.org/x/image/vp8l
|
||||
golang.org/x/image/webp
|
||||
# golang.org/x/mod v0.26.0
|
||||
# golang.org/x/mod v0.27.0
|
||||
## explicit; go 1.23.0
|
||||
golang.org/x/mod/internal/lazyregexp
|
||||
golang.org/x/mod/module
|
||||
|
|
@ -1214,22 +1214,22 @@ golang.org/x/net/ipv4
|
|||
golang.org/x/net/ipv6
|
||||
golang.org/x/net/publicsuffix
|
||||
golang.org/x/net/trace
|
||||
# golang.org/x/oauth2 v0.30.0
|
||||
## explicit; go 1.23.0
|
||||
# golang.org/x/oauth2 v0.31.0
|
||||
## explicit; go 1.24.0
|
||||
golang.org/x/oauth2
|
||||
golang.org/x/oauth2/internal
|
||||
# golang.org/x/sync v0.16.0
|
||||
## explicit; go 1.23.0
|
||||
# golang.org/x/sync v0.17.0
|
||||
## explicit; go 1.24.0
|
||||
golang.org/x/sync/errgroup
|
||||
golang.org/x/sync/semaphore
|
||||
# golang.org/x/sys v0.35.0
|
||||
## explicit; go 1.23.0
|
||||
# golang.org/x/sys v0.36.0
|
||||
## explicit; go 1.24.0
|
||||
golang.org/x/sys/cpu
|
||||
golang.org/x/sys/unix
|
||||
golang.org/x/sys/windows
|
||||
golang.org/x/sys/windows/registry
|
||||
# golang.org/x/text v0.28.0
|
||||
## explicit; go 1.23.0
|
||||
# golang.org/x/text v0.29.0
|
||||
## explicit; go 1.24.0
|
||||
golang.org/x/text/cases
|
||||
golang.org/x/text/encoding
|
||||
golang.org/x/text/encoding/internal
|
||||
|
|
@ -1250,7 +1250,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/tools v0.35.0
|
||||
# golang.org/x/tools v0.36.0
|
||||
## explicit; go 1.23.0
|
||||
golang.org/x/tools/go/ast/astutil
|
||||
golang.org/x/tools/go/gcexportdata
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue