From 69f8fa1eadc2f46c47bd6bca48fd6d767626f501 Mon Sep 17 00:00:00 2001 From: scott lewis Date: Fri, 23 Dec 2022 11:16:23 +0800 Subject: [PATCH 1/4] doc: update changelog.md --- CHANGELOG.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45d9e423..e77307db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -144,3 +144,44 @@ * refactor: refactor config to support deploy as gateway ([231](https://github.com/CECTC/dbpack/pull/231)) ([f5f49bd](https://github.com/CECTC/dbpack/commit/f5f49bd810403aec6102337174e5f5bbb615ae20)) * refactor: isolate filter with appid ([233](https://github.com/CECTC/dbpack/pull/233)) ([12c94c4](https://github.com/CECTC/dbpack/commit/12c94c41919cabd4ad7168ee6917bf6d03fdf8f4)) * refactor: refactor db group ([242](https://github.com/CECTC/dbpack/pull/239)) ([a7ddbfc](https://github.com/CECTC/dbpack/commit/a7ddbfce74cb4071b98b6b63894468492454ccf3)) + +## v0.5.0 + +### Features + +* feat: support delete on sharded table ([44](https://github.com/CECTC/dbpack/issues/44)) ([a0a5bda](https://github.com/CECTC/dbpack/commit/a0a5bda8b677efe571b861b2045f0f78c2d44a6d)) +* feat: support update on sharded table ([45](https://github.com/CECTC/dbpack/issues/45)) ([8dd789e](https://github.com/CECTC/dbpack/commit/8dd789e89598f69c6999abcd8cc3baa5b254c3f9)) +* feat: support multiple columns order by ([133](https://github.com/CECTC/dbpack/issues/133)) ([7a213c2](https://github.com/CECTC/dbpack/commit/7a213c2008c8df428dc7d6858a9c0163a578bcf4)) +* feat: support limit without orderby ([168](https://github.com/CECTC/dbpack/issues/168)) ([dbff926](https://github.com/CECTC/dbpack/commit/dbff926ece6fd8ef6cd6a71b475f6b5be3b4253b)) +* feat: support cross-database delete transactions ([180](https://github.com/CECTC/dbpack/issues/180)) ([90f9d42](https://github.com/CECTC/dbpack/commit/90f9d429a4ad7bb38ade4dba68ab2c6731bf253a)) +* feat: support count aggregate func on sharded table ([78](https://github.com/CECTC/dbpack/issues/78)) ([8290190](https://github.com/CECTC/dbpack/commit/82901907ae1d4a7664aa6681385827b47c56b506)) +* feature: support cross-database update transactions ([193](https://github.com/CECTC/dbpack/pull/193)) ([b184688](https://github.com/CECTC/dbpack/commit/b184688d24c7b28434f3c05e6933365dccb1ab41)) +* feat: support show stmt ([209](https://github.com/CECTC/dbpack/pull/209)) ([1b4e902](https://github.com/CECTC/dbpack/commit/1b4e902e14f65fe784680562e6c9a6c44ad95fe0)) +* feat: support query on global table ([134](https://github.com/CECTC/dbpack/issues/134)) ([1d2d32d](https://github.com/CECTC/dbpack/commit/1d2d32da06777760ea2914087df0c99f4562f81c)) +* feat: support check conn liveness ([260](https://github.com/CECTC/dbpack/pull/260)) ([59b9ff1](https://github.com/CECTC/dbpack/commit/59b9ff1b5eaa8c5733a798a4f2e0842f4885d20e)) +* in sharding mode, support local transaction ([236](https://github.com/CECTC/dbpack/issues/236)) ([97c5e18](https://github.com/CECTC/dbpack/commit/97c5e18f73d76a05c66afa0f7180dca46c5f3b84)) +* feat: support xa protocol ([261](https://github.com/CECTC/dbpack/pull/261)) ([6611c17](https://github.com/CECTC/dbpack/commit/6611c17af707f8a95f67e0cad74bd197e77c084a)) +* feature: support show table status ([189](https://github.com/CECTC/dbpack/issues/189)) ([f896fc3](https://github.com/CECTC/dbpack/commit/f896fc37609f41a4bcf44a864b1b73a81169f8c9)) +* feat: support show columns and show index in sharding mode ([269](https://github.com/CECTC/dbpack/pull/269)) ([2c20554](https://github.com/CECTC/dbpack/commit/2c205547ed6f3824dcdc4eed28729d1e9040c9c9)) +* feat: export dead branch session api ([264](https://github.com/CECTC/dbpack/issues/264)) ([fd87df8](https://github.com/CECTC/dbpack/commit/fd87df805d74b10dc4c64e391ca5cf54c9a6e496)) +* feat: support number range sharding algorithm ([235](https://github.com/CECTC/dbpack/issues/235)) ([5177880](https://github.com/CECTC/dbpack/commit/51778805b12e0b5d97c811a5a8bdbdd14171b128)) +* feat: support create index and drop index in sharding mode ([175](https://github.com/CECTC/dbpack/issues/175)) ([dc372d9](https://github.com/CECTC/dbpack/commit/dc372d94344a71f553d20768ed5ddfbd3c0203f1)) +* feat: support show tables in sharding mode ([190](https://github.com/CECTC/dbpack/issues/190)) ([1c353ea](https://github.com/CECTC/dbpack/commit/1c353eabdb93af9019d1f1aac355eb4d1d44111e)) +* fix: finished distributed pk feature ([42](https://github.com/CECTC/dbpack/issues/42)) ([8bb0903](https://github.com/CECTC/dbpack/commit/8bb0903267e464128a4161b8fe78abcf40c95000)) +* feature: support route insert sql to shadow table ([258](https://github.com/CECTC/dbpack/issues/258)) ([5a461ec](https://github.com/CECTC/dbpack/commit/5a461ec74d55c445eab8e6f90e6cb72d484a2826)) +* feat: segment sequence support define initial value ([281](https://github.com/CECTC/dbpack/pull/281)) ([6655483](https://github.com/CECTC/dbpack/commit/6655483c4c9b2cf6385d8d4ce94ebf8e90e9d2a1)) + +### Bug Fixes + +* fix: in sharding mode, merge result miss some rows ([214](https://github.com/CECTC/dbpack/pull/214)) ([1aebf5c](https://github.com/CECTC/dbpack/commit/1aebf5c765308b36e40a18910ea654e4a30eaebb)) +* fix: support release savepoint ([251](https://github.com/CECTC/dbpack/pull/251)) ([63b19cb](https://github.com/CECTC/dbpack/commit/63b19cbd241822c1b944d5d2928b9b9ec9fcaa2a)) +* fix: release savepoint should not return connection ([252](https://github.com/CECTC/dbpack/pull/252)) ([47f1059](https://github.com/CECTC/dbpack/commit/47f10594935a5b30b12ba0867d0805766560fb98)) +* fix: match url should support prefix and regex match type ([254](https://github.com/CECTC/dbpack/pull/254)) ([5caeb6c](https://github.com/CECTC/dbpack/commit/5caeb6c0d388c441b4111bb55d529a3f3bed57fe)) +* fix: xa commit/rollback should executed by master conn in rws mode ([280](https://github.com/CECTC/dbpack/pull/280)) ([9962372](https://github.com/CECTC/dbpack/commit/9962372a7be1be62699027c1444f009a155aa5f6)) + +### Changes + +* refactor: refact topology to support sharding db ([234](https://github.com/CECTC/dbpack/pull/234)) ([a8fe90d](https://github.com/CECTC/dbpack/commit/a8fe90d9671b8b6ec32a81784fe75cfeb153b7dc)) +* refactor: default restore string without default charset ([253](https://github.com/CECTC/dbpack/pull/253)) ([4d6da29](https://github.com/CECTC/dbpack/commit/4d6da291c0160d94a36773a53606150570b21351)) +* refactor status api ([265](https://github.com/CECTC/dbpack/issues/265)) ([dca3b50](https://github.com/CECTC/dbpack/commit/dca3b507cede4d8f339a047e39478417ed7ec95f)) +* refactor: optimize sequence generator ([42](https://github.com/CECTC/dbpack/issues/42)) ([67d9506](https://github.com/CECTC/dbpack/commit/67d9506c59a4fddd3a4342ff75235d1963cd09df)) From 268c3664ae5327ddc09374a2776f9ef94633a183 Mon Sep 17 00:00:00 2001 From: scott lewis <33612882+dk-lockdown@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:53:25 +0800 Subject: [PATCH 2/4] install docker when intergration test --- .github/workflows/main.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 199ae9fa..a3b40578 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,7 +33,7 @@ jobs: test: strategy: matrix: - go-version: [ 1.18.x ] + go-version: [ 1.23.x ] # The type of runner that the job will run on runs-on: ubuntu-latest @@ -63,6 +63,9 @@ jobs: - name: Shutdown Ubuntu MySQL (SUDOx) run: sudo service mysql stop + - name: Setup Docker compose + uses: ndeloof/install-compose-action@v0.0.1 + - name: Integration Tests shell: bash run: make integration-test From 4add78d0b28ed4d3a1d080ae5e71084d5ff1970a Mon Sep 17 00:00:00 2001 From: scott lewis Date: Mon, 19 May 2025 11:06:21 +0800 Subject: [PATCH 3/4] fix: support tablename with schema --- pkg/filter/crypto/filter.go | 28 ++++++++++------------------ pkg/visitor/param.go | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/pkg/filter/crypto/filter.go b/pkg/filter/crypto/filter.go index a9e91159..d29f5e7f 100644 --- a/pkg/filter/crypto/filter.go +++ b/pkg/filter/crypto/filter.go @@ -31,6 +31,7 @@ import ( "github.com/cectc/dbpack/pkg/misc" "github.com/cectc/dbpack/pkg/mysql" "github.com/cectc/dbpack/pkg/proto" + "github.com/cectc/dbpack/pkg/visitor" "github.com/cectc/dbpack/third_party/parser/ast" "github.com/cectc/dbpack/third_party/parser/format" driver "github.com/cectc/dbpack/third_party/types/parser_driver" @@ -210,12 +211,9 @@ func (f *_filter) PostHandle(ctx context.Context, result proto.Result, err error } func (f _filter) checkInsertTable(insertStmt *ast.InsertStmt) (*ColumnCrypto, error) { - var sb strings.Builder - if err := insertStmt.Table.TableRefs.Left.Restore( - format.NewRestoreCtx(format.RestoreStringSingleQuotes|format.RestoreKeyWordUppercase, &sb)); err != nil { - return nil, err - } - tableName := sb.String() + tn := &visitor.TableNameVisitor{} + insertStmt.Accept(tn) + tableName := tn.TableName for _, config := range f.ColumnConfigs { if strings.EqualFold(config.Table, tableName) { return config, nil @@ -225,12 +223,9 @@ func (f _filter) checkInsertTable(insertStmt *ast.InsertStmt) (*ColumnCrypto, er } func (f _filter) checkUpdateTable(updateStmt *ast.UpdateStmt) (*ColumnCrypto, error) { - var sb strings.Builder - if err := updateStmt.TableRefs.TableRefs.Left.Restore( - format.NewRestoreCtx(format.RestoreStringSingleQuotes|format.RestoreKeyWordUppercase, &sb)); err != nil { - return nil, err - } - tableName := sb.String() + tn := &visitor.TableNameVisitor{} + updateStmt.Accept(tn) + tableName := tn.TableName for _, config := range f.ColumnConfigs { if strings.EqualFold(config.Table, tableName) { return config, nil @@ -240,12 +235,9 @@ func (f _filter) checkUpdateTable(updateStmt *ast.UpdateStmt) (*ColumnCrypto, er } func (f _filter) checkSelectTable(selectStmt *ast.SelectStmt) (*ColumnCrypto, error) { - var sb strings.Builder - if err := selectStmt.From.TableRefs.Left.Restore( - format.NewRestoreCtx(format.RestoreStringSingleQuotes|format.RestoreKeyWordUppercase, &sb)); err != nil { - return nil, err - } - tableName := sb.String() + tn := &visitor.TableNameVisitor{} + selectStmt.Accept(tn) + tableName := tn.TableName for _, config := range f.ColumnConfigs { if strings.EqualFold(config.Table, tableName) { return config, nil diff --git a/pkg/visitor/param.go b/pkg/visitor/param.go index 1bf53d67..551531f9 100644 --- a/pkg/visitor/param.go +++ b/pkg/visitor/param.go @@ -63,3 +63,18 @@ func (v *FuncVisitor) Enter(in ast.Node) (out ast.Node, skipChildren bool) { func (v *FuncVisitor) Leave(in ast.Node) (out ast.Node, ok bool) { return in, true } + +type TableNameVisitor struct { + TableName string +} + +func (v *TableNameVisitor) Enter(in ast.Node) (out ast.Node, skipChildren bool) { + if tn, ok := in.(*ast.TableName); ok { + v.TableName = tn.Name.O + } + return in, false +} + +func (v *TableNameVisitor) Leave(in ast.Node) (out ast.Node, ok bool) { + return in, true +} From 139233546e594526fdd4b382dcb6fb329d9befe5 Mon Sep 17 00:00:00 2001 From: scott lewis Date: Mon, 19 May 2025 20:05:30 +0800 Subject: [PATCH 4/4] feat: support ComInitDB --- .github/workflows/main.yml | 2 +- docker/conf/config_rws.yaml | 4 +- docker/conf/config_sdb.yaml | 2 +- docker/conf/config_shd_mod.yaml | 5 +- docker/conf/config_shd_range.yaml | 5 +- docker/docker-compose-rws.yaml | 2 +- docker/docker-compose-sdb.yaml | 2 +- docker/docker-compose-shd-mod.yaml | 2 +- docker/docker-compose-shd-range.yaml | 2 +- docker/scripts/init.sql | 29 +++-- go.mod | 7 +- go.sum | 164 +++++++++++++++++++++++++++ makefile | 2 +- pkg/constant/type.go | 84 ++++++++++++++ pkg/driver/client.go | 27 ++--- pkg/dt/mysql_undo_executor.go | 2 +- pkg/dt/mysql_undo_log_manager.go | 10 +- pkg/executor/read_write_splitting.go | 3 +- pkg/filter/crypto/filter.go | 1 - pkg/group/group.go | 5 + pkg/listener/mysql.go | 97 ++++++++++------ pkg/mysql/conn.go | 10 ++ pkg/proto/interface.go | 1 + pkg/sql/db.go | 19 +++- pkg/visitor/param.go | 19 ++++ 25 files changed, 418 insertions(+), 88 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 29bfe487..37a3a904 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -55,7 +55,7 @@ jobs: - name: Unit Tests run: | mkdir -p build - go test -gcflags=all=-l ./pkg/... -coverprofile=coverage.txt -covermode=atomic + go test -gcflags=all=-l $(go list ./... | grep -v /test/ | grep -v /parser | grep -v /types | grep -v /bucketpool) -coverprofile=coverage.txt -covermode=atomic - name: Post Coverage run: bash <(curl -s https://codecov.io/bash) diff --git a/docker/conf/config_rws.yaml b/docker/conf/config_rws.yaml index 18e229ed..485dc547 100644 --- a/docker/conf/config_rws.yaml +++ b/docker/conf/config_rws.yaml @@ -39,7 +39,7 @@ app_config: capacity: 10 max_capacity: 20 idle_timeout: 60s - dsn: root:123456@tcp(dbpack-mysql1:3306)/employees?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8 + dsn: root:123456@tcp(dbpack-mysql1:3306)/?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true&loc=Local&charset=utf8mb4,utf8 ping_interval: 20s ping_times_for_change_status: 3 filters: @@ -50,7 +50,7 @@ app_config: capacity: 10 max_capacity: 20 idle_timeout: 60s - dsn: root:123456@tcp(dbpack-mysql2:3306)/employees?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 + dsn: root:123456@tcp(dbpack-mysql2:3306)/?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 ping_interval: 20s ping_times_for_change_status: 3 diff --git a/docker/conf/config_sdb.yaml b/docker/conf/config_sdb.yaml index 7e124ed7..ef619c3b 100644 --- a/docker/conf/config_sdb.yaml +++ b/docker/conf/config_sdb.yaml @@ -34,7 +34,7 @@ app_config: capacity: 10 max_capacity: 20 idle_timeout: 60s - dsn: root:123456@tcp(dbpack-mysql:3306)/employees?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 + dsn: root:123456@tcp(dbpack-mysql:3306)/?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 ping_interval: 20s ping_times_for_change_status: 3 filters: diff --git a/docker/conf/config_shd_mod.yaml b/docker/conf/config_shd_mod.yaml index e256b129..b9f0cbcd 100644 --- a/docker/conf/config_shd_mod.yaml +++ b/docker/conf/config_shd_mod.yaml @@ -53,7 +53,6 @@ app_config: type: snowflake config: worker_id: 123 - # dsn: root:123456@tcp(dbpack-mysql1:3306)/world?timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8 topology: "0": 0-4 "1": 5-9 @@ -68,7 +67,7 @@ app_config: capacity: 10 max_capacity: 20 idle_timeout: 60s - dsn: root:123456@tcp(dbpack-mysql1:3306)/world?timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8 + dsn: root:123456@tcp(dbpack-mysql1:3306)/?timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8 ping_interval: 20s ping_times_for_change_status: 3 filters: @@ -78,7 +77,7 @@ app_config: capacity: 10 max_capacity: 20 idle_timeout: 60s - dsn: root:123456@tcp(dbpack-mysql2:3306)/world?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 + dsn: root:123456@tcp(dbpack-mysql2:3306)/?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 ping_interval: 20s ping_times_for_change_status: 3 filters: diff --git a/docker/conf/config_shd_range.yaml b/docker/conf/config_shd_range.yaml index 9ac36d38..443a0b02 100644 --- a/docker/conf/config_shd_range.yaml +++ b/docker/conf/config_shd_range.yaml @@ -64,7 +64,6 @@ app_config: type: snowflake config: worker_id: 123 - # dsn: root:123456@tcp(dbpack-mysql1:3306)/world?timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8 topology: "0": 0-4 "1": 5-9 @@ -79,7 +78,7 @@ app_config: capacity: 10 max_capacity: 20 idle_timeout: 60s - dsn: root:123456@tcp(dbpack-mysql1:3306)/world?timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8 + dsn: root:123456@tcp(dbpack-mysql1:3306)/?timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8 ping_interval: 20s ping_times_for_change_status: 3 filters: @@ -89,7 +88,7 @@ app_config: capacity: 10 max_capacity: 20 idle_timeout: 60s - dsn: root:123456@tcp(dbpack-mysql2:3306)/world?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 + dsn: root:123456@tcp(dbpack-mysql2:3306)/?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8 ping_interval: 20s ping_times_for_change_status: 3 filters: diff --git a/docker/docker-compose-rws.yaml b/docker/docker-compose-rws.yaml index 05504291..0146a570 100644 --- a/docker/docker-compose-rws.yaml +++ b/docker/docker-compose-rws.yaml @@ -64,4 +64,4 @@ services: networks: local: - name: dbpack + name: dbpack-network diff --git a/docker/docker-compose-sdb.yaml b/docker/docker-compose-sdb.yaml index 481070e7..a03d5370 100644 --- a/docker/docker-compose-sdb.yaml +++ b/docker/docker-compose-sdb.yaml @@ -48,4 +48,4 @@ services: command: ["./wait-for-mysql.sh","--","/dbpack", "start", "-c", "config.yaml"] networks: local: - name: dbpack \ No newline at end of file + name: dbpack-network \ No newline at end of file diff --git a/docker/docker-compose-shd-mod.yaml b/docker/docker-compose-shd-mod.yaml index f630ca2a..ce11a282 100644 --- a/docker/docker-compose-shd-mod.yaml +++ b/docker/docker-compose-shd-mod.yaml @@ -60,4 +60,4 @@ services: command: ["./wait-for-mysql.sh","--","/dbpack", "start", "-c", "mod_config.yaml"] networks: local: - name: dbpack \ No newline at end of file + name: dbpack-network \ No newline at end of file diff --git a/docker/docker-compose-shd-range.yaml b/docker/docker-compose-shd-range.yaml index 1e7b0c84..a2481440 100644 --- a/docker/docker-compose-shd-range.yaml +++ b/docker/docker-compose-shd-range.yaml @@ -60,4 +60,4 @@ services: command: ["./wait-for-mysql.sh","--","/dbpack", "start", "-c", "range_config.yaml"] networks: local: - name: dbpack \ No newline at end of file + name: dbpack-network \ No newline at end of file diff --git a/docker/scripts/init.sql b/docker/scripts/init.sql index 4a820c8e..e101af77 100644 --- a/docker/scripts/init.sql +++ b/docker/scripts/init.sql @@ -93,18 +93,6 @@ CREATE TABLE salaries ( PRIMARY KEY (`id`) ); -CREATE TABLE `undo_log` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `branch_id` bigint NOT NULL, - `xid` varchar(100) NOT NULL, - `context` varchar(128) NOT NULL, - `rollback_info` longblob NOT NULL, - `log_status` int NOT NULL, - `log_created` datetime NOT NULL, - `log_modified` datetime NOT NULL, - `ext` varchar(100) DEFAULT NULL, - PRIMARY KEY (`id`) -); CREATE OR REPLACE VIEW dept_emp_latest_date AS SELECT emp_no, MAX(from_date) AS from_date, MAX(to_date) AS to_date @@ -117,3 +105,20 @@ CREATE OR REPLACE VIEW current_dept_emp AS FROM dept_emp d INNER JOIN dept_emp_latest_date l ON d.emp_no=l.emp_no AND d.from_date=l.from_date AND l.to_date = d.to_date; + +DROP DATABASE IF EXISTS meta; +CREATE DATABASE IF NOT EXISTS meta; +USE meta; + +CREATE TABLE `undo_log` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `branch_id` bigint NOT NULL, + `xid` varchar(100) NOT NULL, + `context` varchar(128) NOT NULL, + `rollback_info` longblob NOT NULL, + `log_status` int NOT NULL, + `log_created` datetime NOT NULL, + `log_modified` datetime NOT NULL, + `ext` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +); diff --git a/go.mod b/go.mod index fef3dc4e..b5ed6d55 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/cectc/dbpack -go 1.23 +go 1.23.0 + +toolchain go1.23.2 require ( github.com/agiledragon/gomonkey/v2 v2.7.0 @@ -42,6 +44,7 @@ require ( go.uber.org/goleak v1.1.12 go.uber.org/ratelimit v0.2.1-0.20220713224938-b62b799bc9a5 go.uber.org/zap v1.21.0 + golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 golang.org/x/net v0.25.0 golang.org/x/text v0.21.0 google.golang.org/grpc v1.56.3 @@ -144,7 +147,7 @@ require ( go.opentelemetry.io/otel/sdk v1.9.0 go.opentelemetry.io/otel/trace v1.9.0 go.uber.org/multierr v1.7.0 // indirect - golang.org/x/sync v0.10.0 + golang.org/x/sync v0.14.0 golang.org/x/sys v0.28.0 // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect diff --git a/go.sum b/go.sum index 67aa2d26..faf0c7fc 100644 --- a/go.sum +++ b/go.sum @@ -19,25 +19,148 @@ cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmW cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -171,6 +294,7 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= @@ -196,8 +320,10 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= @@ -266,6 +392,7 @@ github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1S github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= @@ -275,6 +402,7 @@ github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= @@ -297,11 +425,14 @@ github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNR github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= github.com/coocood/bbloom v0.0.0-20190830030839-58deb6228d64/go.mod h1:F86k/6c7aDUdwSUevnLpHS/3Q9hzYCE99jGk2xsHnt0= github.com/coocood/freecache v1.1.1 h1:uukNF7QKCZEdZ9gAV7WQzvh0SbjwdMF6m3x3rxEkaPc= github.com/coocood/freecache v1.1.1/go.mod h1:OKrEjkGVoxZhyWAJoeFi5BMLUJm2Tit0kpGkIr7NGYY= @@ -420,7 +551,9 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -567,6 +700,7 @@ github.com/golang-module/carbon v1.6.6/go.mod h1:M/TDTYPp3qWtW68u49dLDJOyGmls6L6 github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -635,6 +769,7 @@ github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYV github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -699,11 +834,13 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -738,6 +875,7 @@ github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= @@ -880,6 +1018,7 @@ github.com/mgechev/revive v1.0.2/go.mod h1:rb0dQy1LVAxW9SWy5R3LPUjevzUbUS316U5MF github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/minio/sio v0.3.0/go.mod h1:8b0yPp2avGThviy/+OCJBI6OMpvxoUuiLvE6F1lebhw= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -899,7 +1038,9 @@ github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2J github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= @@ -996,6 +1137,7 @@ github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqi github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1009,6 +1151,7 @@ github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwp github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= @@ -1281,9 +1424,11 @@ github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7Fw github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/msgpack/v4 v4.3.11/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1/go.mod h1:xlngVLeyQ/Qi05oQxhQ+oTuqa03RjMwMfk/7/TCs+QI= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= @@ -1342,11 +1487,16 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw= go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= go.opentelemetry.io/otel/exporters/jaeger v1.7.0 h1:wXgjiRldljksZkZrldGVe6XrG9u3kYDyQmkZwmm5dI0= go.opentelemetry.io/otel/exporters/jaeger v1.7.0/go.mod h1:PwQAOqBgqbLQRKlj466DuD2qyMjbtcPpfPfj+AqbSBs= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.9.0 h1:0uV0qzHk48i1SF8qRI8odMYiwPOLh9gBhiJFpj8H6JY= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.9.0/go.mod h1:Fl1iS5ZhWgXXXTdJMuBSVsS5nkL5XluHbg97kjOuYU4= go.opentelemetry.io/otel/exporters/zipkin v1.9.0 h1:06b/nt6xao6th00aue9WU3ZDTTe+InaMXA/vym6pLuA= @@ -1358,6 +1508,7 @@ go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48 go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc= go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1435,7 +1586,10 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc= golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1464,6 +1618,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1544,6 +1700,7 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1557,6 +1714,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1671,6 +1830,7 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1773,6 +1933,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1986,6 +2147,7 @@ k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hr k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= @@ -1995,10 +2157,12 @@ k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NI k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= diff --git a/makefile b/makefile index 1a4032ee..d12584f9 100644 --- a/makefile +++ b/makefile @@ -66,7 +66,7 @@ unit-test: ## run unit test ######################################################## build-local: ## build dbpack cli, and put in dist dir - export GOPROXY=https://goproxy.cn + export GOPROXY=https://goproxy.cn,https://goproxy.io,direct ${GO_BUILD_ENVVARS} go build -o dbpack ./cmd ######################################################## diff --git a/pkg/constant/type.go b/pkg/constant/type.go index 07953d23..a2d06f64 100644 --- a/pkg/constant/type.go +++ b/pkg/constant/type.go @@ -22,6 +22,90 @@ import ( "github.com/cectc/dbpack/third_party/parser/mysql" ) +// Flags sent from the MySQL C API +type MySqlFlag int32 + +const ( + MySqlFlag_EMPTY MySqlFlag = 0 + MySqlFlag_NOT_NULL_FLAG MySqlFlag = 1 + MySqlFlag_PRI_KEY_FLAG MySqlFlag = 2 + MySqlFlag_UNIQUE_KEY_FLAG MySqlFlag = 4 + MySqlFlag_MULTIPLE_KEY_FLAG MySqlFlag = 8 + MySqlFlag_BLOB_FLAG MySqlFlag = 16 + MySqlFlag_UNSIGNED_FLAG MySqlFlag = 32 + MySqlFlag_ZEROFILL_FLAG MySqlFlag = 64 + MySqlFlag_BINARY_FLAG MySqlFlag = 128 + MySqlFlag_ENUM_FLAG MySqlFlag = 256 + MySqlFlag_AUTO_INCREMENT_FLAG MySqlFlag = 512 + MySqlFlag_TIMESTAMP_FLAG MySqlFlag = 1024 + MySqlFlag_SET_FLAG MySqlFlag = 2048 + MySqlFlag_NO_DEFAULT_VALUE_FLAG MySqlFlag = 4096 + MySqlFlag_ON_UPDATE_NOW_FLAG MySqlFlag = 8192 + MySqlFlag_NUM_FLAG MySqlFlag = 32768 + MySqlFlag_PART_KEY_FLAG MySqlFlag = 16384 + MySqlFlag_GROUP_FLAG MySqlFlag = 32768 + MySqlFlag_UNIQUE_FLAG MySqlFlag = 65536 + MySqlFlag_BINCMP_FLAG MySqlFlag = 131072 +) + +// Enum value maps for MySqlFlag. +var ( + MySqlFlag_name = map[int32]string{ + 0: "EMPTY", + 1: "NOT_NULL_FLAG", + 2: "PRI_KEY_FLAG", + 4: "UNIQUE_KEY_FLAG", + 8: "MULTIPLE_KEY_FLAG", + 16: "BLOB_FLAG", + 32: "UNSIGNED_FLAG", + 64: "ZEROFILL_FLAG", + 128: "BINARY_FLAG", + 256: "ENUM_FLAG", + 512: "AUTO_INCREMENT_FLAG", + 1024: "TIMESTAMP_FLAG", + 2048: "SET_FLAG", + 4096: "NO_DEFAULT_VALUE_FLAG", + 8192: "ON_UPDATE_NOW_FLAG", + 32768: "NUM_FLAG", + 16384: "PART_KEY_FLAG", + // Duplicate value: 32768: "GROUP_FLAG", + 65536: "UNIQUE_FLAG", + 131072: "BINCMP_FLAG", + } + MySqlFlag_value = map[string]int32{ + "EMPTY": 0, + "NOT_NULL_FLAG": 1, + "PRI_KEY_FLAG": 2, + "UNIQUE_KEY_FLAG": 4, + "MULTIPLE_KEY_FLAG": 8, + "BLOB_FLAG": 16, + "UNSIGNED_FLAG": 32, + "ZEROFILL_FLAG": 64, + "BINARY_FLAG": 128, + "ENUM_FLAG": 256, + "AUTO_INCREMENT_FLAG": 512, + "TIMESTAMP_FLAG": 1024, + "SET_FLAG": 2048, + "NO_DEFAULT_VALUE_FLAG": 4096, + "ON_UPDATE_NOW_FLAG": 8192, + "NUM_FLAG": 32768, + "PART_KEY_FLAG": 16384, + "GROUP_FLAG": 32768, + "UNIQUE_FLAG": 65536, + "BINCMP_FLAG": 131072, + } +) + +func (x MySqlFlag) Enum() *MySqlFlag { + p := new(MySqlFlag) + *p = x + return p +} + +func (x MySqlFlag) String() string { + return MySqlFlag_name[int32(x)] +} + // https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnType type FieldType byte diff --git a/pkg/driver/client.go b/pkg/driver/client.go index 78fe834b..66d1e90c 100644 --- a/pkg/driver/client.go +++ b/pkg/driver/client.go @@ -740,20 +740,21 @@ func (conn *BackendConnection) ReadColumnDefinition(field *mysql.Field, index in } field.Decimals = decimals - //if more Content, command was field list - if len(colDef) > pos+8 { - //length of default value lenenc-int - field.DefaultValueLength, pos, ok = misc.ReadUint64(colDef, pos) - if !ok { - return err2.NewSQLError(constant.CRMalformedPacket, constant.SSUnknownSQLState, "extracting col %v default value failed", index) - } - - if pos+int(field.DefaultValueLength) > len(colDef) { - return err2.NewSQLError(constant.CRMalformedPacket, constant.SSUnknownSQLState, "extracting col %v default value failed", index) + // If we didn't get column length or character set, + // we assume the original row on the other side was encoded from + // a Field without that data, so we don't return the flags. + if field.ColumnLength != 0 || field.CharSet != 0 { + field.Flags = uint(flags) + + // FIXME(alainjobart): This is something the MySQL + // client library does: If the type is numerical, it + // adds a NUM_FLAG to the flags. We're doing it here + // only to be compatible with the C library. Once + // we're not using that library any more, we'll remove this. + // See doc.go. + if constant.IsNum(t) { + field.Flags |= uint(constant.MySqlFlag_NUM_FLAG) } - - //default value string[$len] - field.DefaultValue = colDef[pos:(pos + int(field.DefaultValueLength))] } return nil } diff --git a/pkg/dt/mysql_undo_executor.go b/pkg/dt/mysql_undo_executor.go index 9a1a80ec..73d601ff 100644 --- a/pkg/dt/mysql_undo_executor.go +++ b/pkg/dt/mysql_undo_executor.go @@ -225,7 +225,7 @@ func (executor MysqlUndoExecutor) queryCurrentRecords(tx proto.Tx) (*schema.Tabl pkName := tableMeta.GetPKName() pkFields := undoRecords.PKFields() - if pkFields == nil || len(pkFields) == 0 { + if len(pkFields) == 0 { return nil, nil } diff --git a/pkg/dt/mysql_undo_log_manager.go b/pkg/dt/mysql_undo_log_manager.go index adbc90d1..a7b84062 100644 --- a/pkg/dt/mysql_undo_log_manager.go +++ b/pkg/dt/mysql_undo_log_manager.go @@ -31,12 +31,12 @@ import ( ) const ( - DeleteUndoLogByIDSql = "DELETE FROM undo_log WHERE id = ?" - DeleteUndoLogByXIDSql = "DELETE FROM undo_log WHERE xid = ?" - DeleteUndoLogByCreateSql = "DELETE FROM undo_log WHERE log_created <= ? LIMIT ?" - InsertUndoLogSql = `INSERT INTO undo_log (xid, branch_id, context, rollback_info, log_status, log_created, + DeleteUndoLogByIDSql = "DELETE FROM meta.undo_log WHERE id = ?" + DeleteUndoLogByXIDSql = "DELETE FROM meta.undo_log WHERE xid = ?" + DeleteUndoLogByCreateSql = "DELETE FROM meta.undo_log WHERE log_created <= ? LIMIT ?" + InsertUndoLogSql = `INSERT INTO meta.undo_log (xid, branch_id, context, rollback_info, log_status, log_created, log_modified) VALUES (?, ?, ?, ?, ?, now(), now())` - SelectUndoLogSql = `SELECT branch_id, context, rollback_info, log_status FROM undo_log + SelectUndoLogSql = `SELECT branch_id, context, rollback_info, log_status FROM meta.undo_log WHERE xid = ? ORDER BY id DESC FOR UPDATE` ) diff --git a/pkg/executor/read_write_splitting.go b/pkg/executor/read_write_splitting.go index fc710426..cd382c75 100644 --- a/pkg/executor/read_write_splitting.go +++ b/pkg/executor/read_write_splitting.go @@ -132,7 +132,8 @@ func (executor *ReadWriteSplittingExecutor) ExecuteUseDB(ctx context.Context, db // As of MySQL 5.7.11, COM_FIELD_LIST is deprecated and will be removed in a future version of MySQL. // Instead, use mysql_query() to execute a SHOW COLUMNS statement. func (executor *ReadWriteSplittingExecutor) ExecuteFieldList(ctx context.Context, table, wildcard string) ([]proto.Field, error) { - return nil, errors.New("unimplemented COM_FIELD_LIST in read write splitting mode") + withSlaveCtx := proto.WithSlave(ctx) + return executor.dbGroup.ExecuteFieldList(withSlaveCtx, table, wildcard) } func (executor *ReadWriteSplittingExecutor) ExecutorComQuery( diff --git a/pkg/filter/crypto/filter.go b/pkg/filter/crypto/filter.go index d29f5e7f..0d4b14ec 100644 --- a/pkg/filter/crypto/filter.go +++ b/pkg/filter/crypto/filter.go @@ -33,7 +33,6 @@ import ( "github.com/cectc/dbpack/pkg/proto" "github.com/cectc/dbpack/pkg/visitor" "github.com/cectc/dbpack/third_party/parser/ast" - "github.com/cectc/dbpack/third_party/parser/format" driver "github.com/cectc/dbpack/third_party/types/parser_driver" ) diff --git a/pkg/group/group.go b/pkg/group/group.go index 2867c397..5a029799 100644 --- a/pkg/group/group.go +++ b/pkg/group/group.go @@ -76,6 +76,11 @@ func (group *DBGroup) GroupName() string { return group.groupName } +func (group *DBGroup) ExecuteFieldList(ctx context.Context, table, wildcard string) ([]proto.Field, error) { + db := group.pick(ctx) + return db.ExecuteFieldList(ctx, table, wildcard) +} + func (group *DBGroup) Begin(ctx context.Context) (proto.Tx, proto.Result, error) { dbs := group.getAvailableMasters() return dbs[0].Begin(ctx) diff --git a/pkg/listener/mysql.go b/pkg/listener/mysql.go index d9b3c4b5..02c3a4d9 100644 --- a/pkg/listener/mysql.go +++ b/pkg/listener/mysql.go @@ -43,6 +43,7 @@ import ( "github.com/cectc/dbpack/pkg/tracing" "github.com/cectc/dbpack/pkg/visitor" "github.com/cectc/dbpack/third_party/parser" + "github.com/cectc/dbpack/third_party/parser/ast" ) const initClientConnStatus = constant.ServerStatusAutocommit @@ -82,13 +83,6 @@ type MysqlListener struct { // See the values in constants.go. characterSet uint8 - // schemaName is the default database name to use. It is set - // during handshake, and by ComInitDb packets. Both client and - // servers maintain it. This member is private because it's - // non-authoritative: the client can change the schema name - // through the 'USE' statement, which will bypass this variable. - schemaName string - // statementID is the prepared statement ID. statementID *atomic.Uint32 @@ -198,9 +192,10 @@ func (l *MysqlListener) handle(conn net.Conn, connectionID uint32) { ctx = proto.WithConnectionID(ctx, connectionID) ctx = proto.WithUserName(ctx, c.UserName()) ctx = proto.WithRemoteAddr(ctx, c.RemoteAddr().String()) - ctx = proto.WithSchema(ctx, l.schemaName) + ctx = proto.WithSchema(ctx, c.Database()) err = l.ExecuteCommand(ctx, c, content) if err != nil { + log.Errorf("execute command error: %v", err) return } } @@ -233,7 +228,7 @@ func (l *MysqlListener) handshake(c *mysql.Conn) error { c.RecycleReadPacket() - user, _, authResponse, err := l.parseClientHandshakePacket(true, response) + user, _, authResponse, err := l.parseClientHandshakePacket(c, true, response) if err != nil { log.Errorf("Cannot parse client handshake response from %s: %v", c, err) return err @@ -348,7 +343,7 @@ func (l *MysqlListener) writeHandshakeV10(c *mysql.Conn, enableTLS bool, salt [] // parseClientHandshakePacket parses the handshake sent by the client. // Returns the username, auth method, auth Content, error. // The original Content is not pointed at, and can be freed. -func (l *MysqlListener) parseClientHandshakePacket(firstTime bool, data []byte) (string, string, []byte, error) { +func (l *MysqlListener) parseClientHandshakePacket(c *mysql.Conn, firstTime bool, data []byte) (string, string, []byte, error) { pos := 0 // Client flags, 4 bytes. @@ -445,7 +440,7 @@ func (l *MysqlListener) parseClientHandshakePacket(firstTime bool, data []byte) if !ok { return "", "", nil, errors.Errorf("parseClientHandshakePacket: can't read dbname") } - l.schemaName = dbname + c.SetDatabase(dbname) } // authMethod (with default) @@ -527,11 +522,9 @@ func (l *MysqlListener) ExecuteCommand(ctx context.Context, c *mysql.Conn, data case constant.ComInitDB: db := string(data[1:]) c.RecycleReadPacket() - l.schemaName = db - err := l.executor.ExecuteUseDB(ctx, db) - if err != nil { - return err - } + c.SetDatabase(db) + connectionID := proto.ConnectionID(ctx) + log.Debugf("connectionID: %d, query: use %s", connectionID, db) if err := c.WriteOKPacket(0, 0, c.StatusFlags(), 0); err != nil { log.Errorf("Error writing ComInitDB result to %s: %v", c, err) return err @@ -556,6 +549,17 @@ func (l *MysqlListener) ExecuteCommand(ctx context.Context, c *mysql.Conn, data return nil } + if showStmt, ok := stmt.(*ast.ShowStmt); ok && showStmt.Tp == ast.ShowTables { + showStmt.DBName = c.Database() + } + + if !misc.IsBlank(c.Database()) { + srw := &visitor.SchemaRewriter{ + Schema: c.Database(), + } + stmt.Accept(srw) + } + traceCtx := tracing.BuildContextFromSQLHint(ctx, stmt) spanCtx, span := tracing.GetTraceSpan(traceCtx, tracing.MySQLListenerComQuery) defer span.End() @@ -591,6 +595,17 @@ func (l *MysqlListener) ExecuteCommand(ctx context.Context, c *mysql.Conn, data tracing.RecordErrorSpan(span, err) return err } + + if selectStmt, ok := stmt.(*ast.SelectStmt); ok && len(selectStmt.Fields.Fields) == 1 { + if funcCall, yes := selectStmt.Fields.Fields[0].Expr.(*ast.FuncCallExpr); yes && strings.EqualFold(funcCall.FnName.O, "database") { + if !misc.IsBlank(c.Database()) { + if tr, ok := rlt.Rows[0].(*mysql.TextRow); ok { + tr.Values[0].Len = len(c.Database()) + tr.Values[0].Val = []byte(c.Database()) + } + } + } + } err = c.WriteRows(rlt) if err != nil { tracing.RecordErrorSpan(span, err) @@ -616,27 +631,30 @@ func (l *MysqlListener) ExecuteCommand(ctx context.Context, c *mysql.Conn, data return err } case constant.ComFieldList: - index := bytes.IndexByte(data, 0x00) - table := string(data[0:index]) - wildcard := string(data[index+1:]) + // index := bytes.IndexByte(data, 0x00) + // table := string(data[1:index]) + // wildcard := string(data[index+1:]) c.RecycleReadPacket() - fields, err := l.executor.ExecuteFieldList(ctx, table, wildcard) - if err != nil { - log.Errorf("Conn %v: Error write field list: %v", c, err) - if writeErr := c.WriteErrorPacketFromError(err); writeErr != nil { - // If we can't even write the error, we're done. - log.Errorf("Conn %v: Error write field list error: %v", c, writeErr) - return writeErr - } - } - result := &mysql.Result{Fields: make([]*mysql.Field, 0, len(fields))} - for i, field := range fields { - fld := field.(*mysql.Field) - result.Fields[i] = fld - } - err = c.WriteFields(l.capabilities, result.Fields) - if err != nil { - return err + // fields, err := l.executor.ExecuteFieldList(ctx, table, wildcard) + // if err != nil { + // log.Errorf("Conn %v: Error write field list: %v", c, err) + // if writeErr := c.WriteErrorPacketFromError(err); writeErr != nil { + // // If we can't even write the error, we're done. + // log.Errorf("Conn %v: Error write field list error: %v", c, writeErr) + // return writeErr + // } + // } + // result := &mysql.Result{Fields: make([]*mysql.Field, len(fields))} + // for i, field := range fields { + // fld := field.(*mysql.Field) + // result.Fields[i] = fld + // } + // err = c.WriteFields(l.capabilities, result.Fields) + // if err != nil { + // return err + // } + if err := c.WriteErrorPacket(constant.ERUnknownComError, constant.SSUnknownComError, "command handling not implemented yet: %v", data[0]); err != nil { + log.Errorf("Error writing error to %s: %v", c, err) } case constant.ComPrepare: query := string(data[1:]) @@ -659,6 +677,13 @@ func (l *MysqlListener) ExecuteCommand(ctx context.Context, c *mysql.Conn, data return writeErr } } + + if !misc.IsBlank(c.Database()) { + srw := &visitor.SchemaRewriter{ + Schema: c.Database(), + } + act.Accept(srw) + } act.Accept(&visitor.ParamVisitor{}) stmt.StmtNode = act diff --git a/pkg/mysql/conn.go b/pkg/mysql/conn.go index f0da2475..eb287f26 100644 --- a/pkg/mysql/conn.go +++ b/pkg/mysql/conn.go @@ -90,6 +90,8 @@ type Conn struct { userName string + database string + // closed is set to true when Close() is called on the connection. closed sync2.AtomicBool @@ -1017,6 +1019,10 @@ func (c *Conn) SetUserName(userName string) { c.userName = userName } +func (c *Conn) SetDatabase(database string) { + c.database = database +} + func (c *Conn) SetReadTimeout(readTimeout time.Duration) { c.ReadTimeout = readTimeout } @@ -1039,6 +1045,10 @@ func (c *Conn) UserName() string { return c.userName } +func (c *Conn) Database() string { + return c.database +} + func (c *Conn) StatusFlags() uint16 { return c.statusFlags } diff --git a/pkg/proto/interface.go b/pkg/proto/interface.go index 890dae05..b90cb93a 100644 --- a/pkg/proto/interface.go +++ b/pkg/proto/interface.go @@ -187,6 +187,7 @@ type ( // DBGroupExecutor prepare a query, execute the statement, and then close the statement. DBGroupExecutor interface { GroupName() string + ExecuteFieldList(ctx context.Context, table, wildcard string) ([]Field, error) Begin(ctx context.Context) (Tx, Result, error) Query(ctx context.Context, query string) (Result, uint16, error) QueryAll(ctx context.Context, query string) (Result, uint16, error) diff --git a/pkg/sql/db.go b/pkg/sql/db.go index f4adddff..20bd9a19 100644 --- a/pkg/sql/db.go +++ b/pkg/sql/db.go @@ -28,6 +28,7 @@ import ( "github.com/cectc/dbpack/pkg/constant" "github.com/cectc/dbpack/pkg/driver" "github.com/cectc/dbpack/pkg/log" + "github.com/cectc/dbpack/pkg/misc" "github.com/cectc/dbpack/pkg/proto" "github.com/cectc/dbpack/pkg/tracing" "github.com/cectc/dbpack/third_party/pools" @@ -264,7 +265,11 @@ func (db *DB) UseDB(ctx context.Context, schema string) error { defer db.pool.Put(r) conn := r.(*driver.BackendConnection) - return conn.WriteComInitDB(schema) + if err := conn.WriteComInitDB(schema); err != nil { + return err + } + _, _, _, _, _, err = conn.ReadComQueryResponse() + return err } func (db *DB) ExecuteFieldList(ctx context.Context, table, wildcard string) ([]proto.Field, error) { @@ -283,6 +288,16 @@ func (db *DB) ExecuteFieldList(ctx context.Context, table, wildcard string) ([]p defer db.pool.Put(r) conn := r.(*driver.BackendConnection) + + schema := proto.Schema(ctx) + if !misc.IsBlank(schema) { + if err := conn.WriteComInitDB(schema); err != nil { + return nil, err + } + if _, _, _, _, _, err := conn.ReadComQueryResponse(); err != nil { + return nil, err + } + } if err := conn.WriteComFieldList(table, wildcard); err != nil { return nil, err } @@ -292,7 +307,7 @@ func (db *DB) ExecuteFieldList(ctx context.Context, table, wildcard string) ([]p return nil, err } - result := make([]proto.Field, 0, len(fields)) + result := make([]proto.Field, len(fields)) for i, field := range fields { result[i] = field } diff --git a/pkg/visitor/param.go b/pkg/visitor/param.go index 551531f9..7a2af37f 100644 --- a/pkg/visitor/param.go +++ b/pkg/visitor/param.go @@ -17,7 +17,9 @@ package visitor import ( + "github.com/cectc/dbpack/pkg/misc" "github.com/cectc/dbpack/third_party/parser/ast" + "github.com/cectc/dbpack/third_party/parser/model" driver "github.com/cectc/dbpack/third_party/types/parser_driver" ) @@ -78,3 +80,20 @@ func (v *TableNameVisitor) Enter(in ast.Node) (out ast.Node, skipChildren bool) func (v *TableNameVisitor) Leave(in ast.Node) (out ast.Node, ok bool) { return in, true } + +type SchemaRewriter struct { + Schema string +} + +func (v *SchemaRewriter) Enter(in ast.Node) (out ast.Node, skipChildren bool) { + if tn, ok := in.(*ast.TableName); ok { + if misc.IsBlank(tn.Schema.O) { + tn.Schema = model.NewCIStr(v.Schema) + } + } + return in, false +} + +func (v *SchemaRewriter) Leave(in ast.Node) (out ast.Node, ok bool) { + return in, true +}