From a582287c246c4df80d9a745fcc8824d483b822af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 19:15:10 +0000 Subject: [PATCH 01/56] chore(deps): bump actions/checkout from 4 to 5 Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 95463b05..f07c0c37 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/v') steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d132f1f1..9a75d414 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: continue-on-error: false steps: - name: Check out code into the Go module directory - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up Go ${{ matrix.go }} uses: actions/setup-go@v5 From a06b289879a91ee0c758eb3b36c6ef966453421b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 00:30:31 +0000 Subject: [PATCH 02/56] chore(deps): bump github.com/stretchr/testify from 1.10.0 to 1.11.0 Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.10.0 to 1.11.0. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.10.0...v1.11.0) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-version: 1.11.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e380ea81..29ee9049 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/jackc/pgx/v5 v5.7.5 github.com/samber/lo v1.51.0 github.com/spf13/cobra v1.9.1 - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.0 golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 golang.org/x/tools v0.36.0 ) diff --git a/go.sum b/go.sum index 27713c2e..40a6da94 100644 --- a/go.sum +++ b/go.sum @@ -76,8 +76,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8= +github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= From a1860a186c5661e06d4ccb880d3ba6ad793a6cbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Aug 2025 15:55:28 +0000 Subject: [PATCH 03/56] chore(deps): bump github.com/stretchr/testify from 1.11.0 to 1.11.1 Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.11.0 to 1.11.1. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.11.0...v1.11.1) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-version: 1.11.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 29ee9049..2462d228 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/jackc/pgx/v5 v5.7.5 github.com/samber/lo v1.51.0 github.com/spf13/cobra v1.9.1 - github.com/stretchr/testify v1.11.0 + github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 golang.org/x/tools v0.36.0 ) diff --git a/go.sum b/go.sum index 40a6da94..1147c304 100644 --- a/go.sum +++ b/go.sum @@ -76,8 +76,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8= -github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= From 371ac9997cd75f4610703c0a52f3421e861994e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 00:19:49 +0000 Subject: [PATCH 04/56] chore(deps): bump github.com/spf13/cobra from 1.9.1 to 1.10.0 Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.9.1 to 1.10.0. - [Release notes](https://github.com/spf13/cobra/releases) - [Commits](https://github.com/spf13/cobra/compare/v1.9.1...v1.10.0) --- updated-dependencies: - dependency-name: github.com/spf13/cobra dependency-version: 1.10.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 2462d228..58367db9 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/goccy/go-yaml v1.18.0 github.com/jackc/pgx/v5 v5.7.5 github.com/samber/lo v1.51.0 - github.com/spf13/cobra v1.9.1 + github.com/spf13/cobra v1.10.0 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 golang.org/x/tools v0.36.0 @@ -37,7 +37,7 @@ require ( github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.6.1 // indirect - github.com/spf13/pflag v1.0.6 // indirect + github.com/spf13/pflag v1.0.8 // indirect golang.org/x/crypto v0.41.0 // indirect golang.org/x/mod v0.27.0 // indirect golang.org/x/net v0.43.0 // indirect diff --git a/go.sum b/go.sum index 1147c304..6c4e84f9 100644 --- a/go.sum +++ b/go.sum @@ -68,10 +68,10 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI= github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= -github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= -github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= -github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cobra v1.10.0 h1:a5/WeUlSDCvV5a45ljW2ZFtV0bTDpkfSAj3uqB6Sc+0= +github.com/spf13/cobra v1.10.0/go.mod h1:9dhySC7dnTtEiqzmqfkLj47BslqLCUPMXjG2lj/NgoE= +github.com/spf13/pflag v1.0.8 h1:/v546uKZ4gFGHpyXvV6CNKDeJBu4l5PRvxwQvdWrc0I= +github.com/spf13/pflag v1.0.8/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= From e2528cc190013c8b4a49e2b354eaed37a1608dba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:45:53 +0000 Subject: [PATCH 05/56] chore(deps): bump github.com/spf13/cobra from 1.10.0 to 1.10.1 Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.10.0 to 1.10.1. - [Release notes](https://github.com/spf13/cobra/releases) - [Commits](https://github.com/spf13/cobra/compare/v1.10.0...v1.10.1) --- updated-dependencies: - dependency-name: github.com/spf13/cobra dependency-version: 1.10.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 58367db9..c9ea6e2c 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/goccy/go-yaml v1.18.0 github.com/jackc/pgx/v5 v5.7.5 github.com/samber/lo v1.51.0 - github.com/spf13/cobra v1.10.0 + github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 golang.org/x/tools v0.36.0 @@ -37,7 +37,7 @@ require ( github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.6.1 // indirect - github.com/spf13/pflag v1.0.8 // indirect + github.com/spf13/pflag v1.0.9 // indirect golang.org/x/crypto v0.41.0 // indirect golang.org/x/mod v0.27.0 // indirect golang.org/x/net v0.43.0 // indirect diff --git a/go.sum b/go.sum index 6c4e84f9..c9c66b87 100644 --- a/go.sum +++ b/go.sum @@ -68,10 +68,10 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI= github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/spf13/cobra v1.10.0 h1:a5/WeUlSDCvV5a45ljW2ZFtV0bTDpkfSAj3uqB6Sc+0= -github.com/spf13/cobra v1.10.0/go.mod h1:9dhySC7dnTtEiqzmqfkLj47BslqLCUPMXjG2lj/NgoE= -github.com/spf13/pflag v1.0.8 h1:/v546uKZ4gFGHpyXvV6CNKDeJBu4l5PRvxwQvdWrc0I= -github.com/spf13/pflag v1.0.8/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= +github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= From 88441799cf9fbf952371b37f6398288c5dc42847 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 12:50:47 +0000 Subject: [PATCH 06/56] chore(deps): bump actions/setup-go from 5 to 6 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5 to 6. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/setup-go dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9a75d414..0e5c9576 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v5 - name: Set up Go ${{ matrix.go }} - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: go-version: ${{ matrix.go }} From 0bc7940e4bd8f951598b6e751be27477ec918954 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 12:19:26 +0000 Subject: [PATCH 07/56] chore(deps): bump github.com/jackc/pgx/v5 from 5.7.5 to 5.7.6 Bumps [github.com/jackc/pgx/v5](https://github.com/jackc/pgx) from 5.7.5 to 5.7.6. - [Changelog](https://github.com/jackc/pgx/blob/master/CHANGELOG.md) - [Commits](https://github.com/jackc/pgx/compare/v5.7.5...v5.7.6) --- updated-dependencies: - dependency-name: github.com/jackc/pgx/v5 dependency-version: 5.7.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c9ea6e2c..b49d5a8e 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/go-playground/validator/v10 v10.27.0 github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.18.0 - github.com/jackc/pgx/v5 v5.7.5 + github.com/jackc/pgx/v5 v5.7.6 github.com/samber/lo v1.51.0 github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 diff --git a/go.sum b/go.sum index c9c66b87..fed085fb 100644 --- a/go.sum +++ b/go.sum @@ -38,8 +38,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/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= From f937f8bbd3244c1aed868ac52f6757462ed96859 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:05:58 +0000 Subject: [PATCH 08/56] chore(deps): bump golang.org/x/tools from 0.36.0 to 0.37.0 Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.36.0 to 0.37.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.36.0...v0.37.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-version: 0.37.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 18 +++++++++--------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index b49d5a8e..285ec11d 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/si3nloong/sqlgen -go 1.23.0 +go 1.24.0 toolchain go1.24.1 @@ -16,7 +16,7 @@ require ( github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 - golang.org/x/tools v0.36.0 + golang.org/x/tools v0.37.0 ) require ( @@ -38,12 +38,12 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.6.1 // indirect github.com/spf13/pflag v1.0.9 // indirect - golang.org/x/crypto v0.41.0 // indirect - golang.org/x/mod v0.27.0 // indirect - golang.org/x/net v0.43.0 // indirect - golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/term v0.34.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/crypto v0.42.0 // indirect + golang.org/x/mod v0.28.0 // indirect + golang.org/x/net v0.44.0 // indirect + golang.org/x/sync v0.17.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/term v0.35.0 // indirect + golang.org/x/text v0.29.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index fed085fb..73cf6ae1 100644 --- a/go.sum +++ b/go.sum @@ -81,22 +81,22 @@ github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= -golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -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/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= +golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= 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.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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -105,23 +105,23 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= -golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -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-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -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/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= +golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 747e542e72b50a9124ab154aaaf0aeea2ff16dd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Nov 2025 12:07:11 +0000 Subject: [PATCH 09/56] chore(deps): bump actions/setup-go from 5 to 6 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5 to 6. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/setup-go dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f46cf222..7581abea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v6 - name: Set up Go ${{ matrix.go }} - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: go-version: ${{ matrix.go }} From f4ddd333b228c48fb67236e5d015191b62758992 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Tue, 9 Dec 2025 23:49:37 +0800 Subject: [PATCH 10/56] chore: drop 1.23 --- .github/workflows/test.yml | 2 +- cmd/sqlgen/codegen/sequel.go.tpl | 2 +- sequel/sequel.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7581abea..badbaad5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ jobs: matrix: # os: [ubuntu-latest, windows-latest] os: [ubuntu-latest] - go: ["1.23", "1.24", "1.25"] + go: ["1.24", "1.25"] runs-on: ${{ matrix.os }} continue-on-error: false steps: diff --git a/cmd/sqlgen/codegen/sequel.go.tpl b/cmd/sqlgen/codegen/sequel.go.tpl index 2d52ca6f..0e6beb80 100644 --- a/cmd/sqlgen/codegen/sequel.go.tpl +++ b/cmd/sqlgen/codegen/sequel.go.tpl @@ -138,7 +138,7 @@ type StmtWriter interface { io.StringWriter Quote(v string) string Var(v any) string - // Vars will group the valus in parenthesis + // Vars will group the values in parenthesis Vars(vals []any) string } diff --git a/sequel/sequel.go b/sequel/sequel.go index 2d52ca6f..0e6beb80 100644 --- a/sequel/sequel.go +++ b/sequel/sequel.go @@ -138,7 +138,7 @@ type StmtWriter interface { io.StringWriter Quote(v string) string Var(v any) string - // Vars will group the valus in parenthesis + // Vars will group the values in parenthesis Vars(vals []any) string } From 54d16a1f19a1f98a2f0291253e19580740e10af9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 13:30:24 +0000 Subject: [PATCH 11/56] chore(deps): bump goreleaser/goreleaser-action from 6 to 7 Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 6 to 7. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/v6...v7) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c1551414..f60ccbcf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: # More assembly might be required: Docker logins, GPG, etc. # It all depends on your needs. - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v6 + uses: goreleaser/goreleaser-action@v7 with: # either 'goreleaser' (default) or 'goreleaser-pro' distribution: goreleaser From 0893cebba282c3835c21e44044aee9ee91318975 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 12:42:50 +0000 Subject: [PATCH 12/56] chore(deps): bump codecov/codecov-action from 5 to 6 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v5...v6) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index badbaad5..80ed1300 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,7 @@ jobs: go test -race -coverprofile=coverage.txt -covermode=atomic ./... - name: Codecov - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@v6 with: token: ${{secrets.CODECOV_TOKEN}} From fae7bce25417f93d27455ff13a969ec54e9d9e44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:43:13 +0000 Subject: [PATCH 13/56] chore(deps): bump dependabot/fetch-metadata from 2 to 3 Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2 to 3. - [Release notes](https://github.com/dependabot/fetch-metadata/releases) - [Commits](https://github.com/dependabot/fetch-metadata/compare/v2...v3) --- updated-dependencies: - dependency-name: dependabot/fetch-metadata dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/auto-merge.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index bde1944d..6b6ca316 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Dependabot metadata id: dependabot_metadata - uses: dependabot/fetch-metadata@v2 + uses: dependabot/fetch-metadata@v3 with: github-token: ${{ secrets.GITHUB_TOKEN }} From 60822d2e2a35ecc272c14465e5e017bf747106fd Mon Sep 17 00:00:00 2001 From: si3nloong Date: Mon, 13 Apr 2026 21:25:38 +0800 Subject: [PATCH 14/56] chore: change sequence --- cmd/sqlgen/codegen/generate.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index cf4083df..611ad99e 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -235,6 +235,13 @@ loop: } } + // Build the "SQLColumns" function which return the column SQL query + if method, isWrongType := t.Implements(sqlQueryColumner); isWrongType { + g.LogError(fmt.Errorf(`sqlgen: struct %q has function "SQLColumns" but wrong footprint`, t.Name)) + } else if method != nil && !isWrongType { + g.buildSqlColumns(w, t) + } + // Build the "Columns" function which return the column names if method, isWrongType := t.Implements(sqlColumner); isWrongType { g.LogError(fmt.Errorf(`sqlgen: struct %q has function "Columns" but wrong footprint`, t.Name)) @@ -309,13 +316,6 @@ loop: } } - // Build the "SQLColumns" function which return the column SQL query - if method, isWrongType := t.Implements(sqlQueryColumner); isWrongType { - g.LogError(fmt.Errorf(`sqlgen: struct %q has function "SQLColumns" but wrong footprint`, t.Name)) - } else if method != nil && !isWrongType { - g.buildSqlColumns(w, t) - } - // Build getter function for each column if !t.Readonly { for _, f := range t.Columns { From 32826add34f54d02735201eba18664b192e9bfd7 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Mon, 13 Apr 2026 21:30:59 +0800 Subject: [PATCH 15/56] feat: generate anonymous functions --- cmd/sqlgen/codegen/generate.go | 81 ++++-- cmd/sqlgen/codegen/templates/operator.go.tpl | 40 ++- cmd/sqlgen/codegen/tool.go | 9 + examples/testcase/core/generated.go | 90 ++++--- examples/testcase/core/generated.go.tpl | 90 ++++--- examples/testcase/schema/generated.go | 15 +- examples/testcase/schema/generated.go.tpl | 15 +- examples/testcase/schema/nopk/generated.go | 8 +- .../testcase/schema/nopk/generated.go.tpl | 8 +- .../testcase/struct-field/alias/generated.go | 40 +-- .../struct-field/alias/generated.go.tpl | 40 +-- .../testcase/struct-field/array/generated.go | 33 +-- .../struct-field/array/generated.go.tpl | 33 +-- .../testcase/struct-field/custom/generated.go | 64 +++-- .../struct-field/custom/generated.go.tpl | 64 +++-- .../testcase/struct-field/date/generated.go | 15 +- .../struct-field/date/generated.go.tpl | 15 +- .../testcase/struct-field/enum/generated.go | 22 +- .../struct-field/enum/generated.go.tpl | 22 +- .../struct-field/enum/imported/generated.go | 8 +- .../enum/imported/generated.go.tpl | 8 +- .../struct-field/imported/generated.go | 64 +++-- .../struct-field/imported/generated.go.tpl | 64 +++-- .../testcase/struct-field/json/generated.go | 15 +- .../struct-field/json/generated.go.tpl | 15 +- .../struct-field/pk/auto-incr/generated.go | 22 +- .../pk/auto-incr/generated.go.tpl | 22 +- .../pk/auto-incr/int/generated.go | 8 +- .../pk/auto-incr/int/generated.go.tpl | 8 +- .../pk/auto-incr/int16/generate.go.tpl | 8 +- .../pk/auto-incr/int16/generated.go | 8 +- .../pk/auto-incr/int32/generated.go | 8 +- .../pk/auto-incr/int32/generated.go.tpl | 8 +- .../pk/auto-incr/int8/generated.go | 8 +- .../pk/auto-incr/int8/generated.go.tpl | 8 +- .../pk/auto-incr/uint/generated.go | 8 +- .../pk/auto-incr/uint/generated.go.tpl | 8 +- .../pk/auto-incr/uint16/generated.go | 8 +- .../pk/auto-incr/uint16/generated.go.tpl | 8 +- .../pk/auto-incr/uint32/generated.go | 8 +- .../pk/auto-incr/uint32/generated.go.tpl | 8 +- .../pk/auto-incr/uint64/generated.go | 8 +- .../pk/auto-incr/uint64/generated.go.tpl | 8 +- .../pk/auto-incr/uint8/generated.go | 8 +- .../pk/auto-incr/uint8/generated.go.tpl | 8 +- .../struct-field/pk/composite/generated.go | 8 +- .../pk/composite/generated.go.tpl | 8 +- .../testcase/struct-field/pk/generated.go | 36 +-- .../testcase/struct-field/pk/generated.go.tpl | 36 +-- .../struct-field/pk/uuid/generated.go | 8 +- .../struct-field/pk/uuid/generated.go.tpl | 8 +- .../struct-field/pointer/generated.go | 236 +++++++++--------- .../struct-field/pointer/generated.go.tpl | 236 +++++++++--------- .../struct-field/primitive/generated.go | 78 +++--- .../struct-field/primitive/generated.go.tpl | 78 +++--- .../testcase/struct-field/slice/generated.go | 113 +++++---- .../struct-field/slice/generated.go.tpl | 113 +++++---- .../testcase/struct-field/sql/generated.go | 69 ++--- .../struct-field/sql/generated.go.tpl | 69 ++--- .../testcase/struct-field/unique/generated.go | 8 +- .../struct-field/unique/generated.go.tpl | 8 +- .../testcase/struct-field/valuer/generated.go | 21 +- .../struct-field/valuer/generated.go.tpl | 21 +- .../struct-field/version/generated.go | 8 +- .../struct-field/version/generated.go.tpl | 8 +- examples/testcase/struct/alias/generated.go | 15 +- .../testcase/struct/alias/generated.go.tpl | 15 +- .../struct/embedded/imported/generated.go | 15 +- .../struct/embedded/imported/generated.go.tpl | 15 +- .../struct/inline-nested/generated.go | 22 +- .../struct/inline-nested/generated.go.tpl | 22 +- examples/testcase/struct/tag/generated.go | 8 +- examples/testcase/struct/tag/generated.go.tpl | 8 +- 73 files changed, 1361 insertions(+), 995 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index 611ad99e..d9783178 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -10,6 +10,7 @@ import ( "iter" "os" "path/filepath" + "sort" "strconv" "strings" "text/template" @@ -180,6 +181,8 @@ func (g *Generator) generateModels( next, stop := iter.Pull2(tables) defer stop() + anonymousFuncs := make(map[string][2]string) + loop: for { t, err, ok := next() @@ -235,13 +238,6 @@ loop: } } - // Build the "SQLColumns" function which return the column SQL query - if method, isWrongType := t.Implements(sqlQueryColumner); isWrongType { - g.LogError(fmt.Errorf(`sqlgen: struct %q has function "SQLColumns" but wrong footprint`, t.Name)) - } else if method != nil && !isWrongType { - g.buildSqlColumns(w, t) - } - // Build the "Columns" function which return the column names if method, isWrongType := t.Implements(sqlColumner); isWrongType { g.LogError(fmt.Errorf(`sqlgen: struct %q has function "Columns" but wrong footprint`, t.Name)) @@ -316,6 +312,13 @@ loop: } } + // Build the "SQLColumns" function which return the column SQL query + if method, isWrongType := t.Implements(sqlQueryColumner); isWrongType { + g.LogError(fmt.Errorf(`sqlgen: struct %q has function "SQLColumns" but wrong footprint`, t.Name)) + } else if method != nil && !isWrongType { + g.buildSqlColumns(w, t) + } + // Build getter function for each column if !t.Readonly { for _, f := range t.Columns { @@ -379,19 +382,40 @@ loop: if isBasic { fprintfln(w, "return sequel.BasicColumn(%s, v.%s)", g.Quote(g.QuoteIdentifier(f.Name())), f.GoPath()) } else { - fprintfln(w, "return sequel.Column(%s, v.%s, func(val %s) any {", g.Quote(g.QuoteIdentifier(f.Name())), f.GoPath(), typeStr) - // fprintfln(w, "if val != nil {") - // fprintfln(w, "return %s", g.valuer(importPkgs, "*val", assertAsPtr[types.Pointer](f.Type).Elem())) - if f.IsGoPtr() { - fprintfln(w, "if val != nil {") - // Deference the pointer value and return it - fprintfln(w, "return %s", g.valuer(importPkgs, "*val", assertAsPtr[types.Pointer](f.GoType()).Elem())) - fprintfln(w, "}") - fprintfln(w, "return nil") - } else { - fmt.Fprintf(w, "return %s", g.valuer(importPkgs, "val", f.GoType())) + typeName := f.GoType().String() + // Generate anonymous function + funcName := fmt.Sprintf("convert%sToValue", normalize(typeStr)) + fprintfln(w, "return sequel.Column(%s, v.%s, %s)", g.Quote(g.QuoteIdentifier(f.Name())), f.GoPath(), funcName) + if _, exists := anonymousFuncs[typeName]; !exists { + w2 := strpool.AcquireString() + fprintfln(w2, `func %s(val %s) any {`, funcName, typeStr) + if f.IsGoPtr() { + fprintfln(w2, "if val != nil {") + // Deference the pointer value and return it + fprintfln(w2, "return %s", g.valuer(importPkgs, "*val", assertAsPtr[types.Pointer](f.GoType()).Elem())) + fprintfln(w2, "}") + fprintfln(w2, "return nil") + } else { + fprintfln(w2, "return %s", g.valuer(importPkgs, "val", f.GoType())) + } + fprintfln(w2, "}") + anonymousFuncs[typeName] = [2]string{funcName, w2.String()} + strpool.ReleaseString(w2) } - fprintfln(w, "})") + + // fprintfln(w2, "return sequel.Column(%s, v.%s, func(val %s) any {", g.Quote(g.QuoteIdentifier(f.Name())), f.GoPath(), typeStr) + // // fprintfln(w, "if val != nil {") + // // fprintfln(w, "return %s", g.valuer(importPkgs, "*val", assertAsPtr[types.Pointer](f.Type).Elem())) + // if f.IsGoPtr() { + // fprintfln(w2, "if val != nil {") + // // Deference the pointer value and return it + // fprintfln(w2, "return %s", g.valuer(importPkgs, "*val", assertAsPtr[types.Pointer](f.GoType()).Elem())) + // fprintfln(w2, "}") + // fprintfln(w2, "return nil") + // } else { + // fmt.Fprintf(w2, "return %s", g.valuer(importPkgs, "val", f.GoType())) + // } + // fprintfln(w2, "})") } fprintfln(w, "}") } @@ -401,6 +425,25 @@ loop: } } + if n := len(anonymousFuncs); n > 0 { + funcNames := make([][2]string, n) + for _, v := range anonymousFuncs { + funcNames = append(funcNames, [2]string{v[0], v[1]}) + } + sort.Slice(funcNames, func(i, j int) bool { + return funcNames[i][0] > funcNames[j][0] + }) + fmt.Fprintf(w, "\n") + for i := range funcNames { + fmt.Fprint(w, funcNames[i][1]) + } + clear(anonymousFuncs) + } + + if err := w.Flush(); err != nil { + return err + } + if err := os.MkdirAll(dstDir, os.ModePerm); err != nil { return err } diff --git a/cmd/sqlgen/codegen/templates/operator.go.tpl b/cmd/sqlgen/codegen/templates/operator.go.tpl index d0475c8e..141f4b6b 100644 --- a/cmd/sqlgen/codegen/templates/operator.go.tpl +++ b/cmd/sqlgen/codegen/templates/operator.go.tpl @@ -32,11 +32,17 @@ func Equal[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereCla return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } @@ -47,9 +53,13 @@ func NotEqual[T comparable](column sequel.ColumnClause[T], value T) sequel.Where case sequel.SQLColumnClause[T]: w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <> " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(value)) } } } @@ -207,7 +217,11 @@ func NotBetween[T comparable](column sequel.ColumnClause[T], from, to T) sequel. case sequel.ColumnConvertClause[T]: w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -216,11 +230,17 @@ func Set[T any](column sequel.ColumnClause[T], value T) sequel.SetClause { return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } @@ -231,4 +251,4 @@ func Asc[T any](column sequel.ColumnClause[T]) sequel.OrderByClause { func Desc[T any](column sequel.ColumnClause[T]) sequel.OrderByClause { return sequel.OrderByColumn(column.ColumnName(), false) -} +} \ No newline at end of file diff --git a/cmd/sqlgen/codegen/tool.go b/cmd/sqlgen/codegen/tool.go index 3ac4fdce..e6ae297a 100644 --- a/cmd/sqlgen/codegen/tool.go +++ b/cmd/sqlgen/codegen/tool.go @@ -4,8 +4,10 @@ import ( "fmt" "go/types" "regexp" + "strings" "github.com/si3nloong/sqlgen/cmd/sqlgen/codegen/dialect" + "github.com/si3nloong/sqlgen/cmd/sqlgen/internal/strfmt" ) var ( @@ -123,3 +125,10 @@ func mustNoError[T any](_ T, err error) { panic(err) } } + +func normalize(v string) string { + v = strings.Replace(v, "*", "Ptr", -1) + v = strings.Replace(v, "[]", "Array", -1) + reg := regexp.MustCompile(`[^a-zA-Z0-9]+`) + return reg.ReplaceAllString(strfmt.ToPascalCase(v), "") +} diff --git a/examples/testcase/core/generated.go b/examples/testcase/core/generated.go index 08f883d9..8590b7ce 100755 --- a/examples/testcase/core/generated.go +++ b/examples/testcase/core/generated.go @@ -140,40 +140,25 @@ func (v User) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v User) ColumnNo() sequel.ColumnConvertClause[uint] { - return sequel.Column("no", v.No, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("no", v.No, convertUintToValue) } func (v User) ColumnJoinedTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("joined_time", v.JoinedTime) } func (v User) ColumnAddress() sequel.ColumnConvertClause[Address] { - return sequel.Column("address", v.Address, func(val Address) any { - return encoding.JSONValue(val) - }) + return sequel.Column("address", v.Address, convertAddressToValue) } func (v User) ColumnKind() sequel.ColumnConvertClause[reflect.Kind] { - return sequel.Column("kind", v.Kind, func(val reflect.Kind) any { - return (int64)(val) - }) + return sequel.Column("kind", v.Kind, convertReflectKindToValue) } func (v User) ColumnType() sequel.ColumnConvertClause[HouseUnitType] { - return sequel.Column("type", v.Type, func(val HouseUnitType) any { - return (int64)(val) - }) + return sequel.Column("type", v.Type, convertHouseUnitTypeToValue) } func (v User) ColumnChan() sequel.ColumnConvertClause[reflect.ChanDir] { - return sequel.Column("chan", v.Chan, func(val reflect.ChanDir) any { - return (int64)(val) - }) + return sequel.Column("chan", v.Chan, convertReflectChanDirToValue) } func (v User) ColumnPostalCode() sequel.ColumnConvertClause[*string] { - return sequel.Column("postal_code", v.PostalCode, func(val *string) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("postal_code", v.PostalCode, convertPtrstringToValue) } type UserExtraInfoInlineStruct = struct { @@ -181,32 +166,19 @@ type UserExtraInfoInlineStruct = struct { } func (v User) ColumnExtraInfo() sequel.ColumnConvertClause[UserExtraInfoInlineStruct] { - return sequel.Column("extra_info", v.ExtraInfo, func(val UserExtraInfoInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("extra_info", v.ExtraInfo, convertUserExtraInfoInlineStructToValue) } func (v User) ColumnNicknames() sequel.ColumnConvertClause[[2]string] { - return sequel.Column("nicknames", v.Nicknames, func(val [2]string) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nicknames", v.Nicknames, convert2stringToValue) } func (v User) ColumnSlice() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("slice", v.Slice, func(val []float64) any { - return (sqltype.Float64Slice[float64])(val) - }) + return sequel.Column("slice", v.Slice, convertArrayfloat64ToValue) } func (v User) ColumnMap() sequel.ColumnConvertClause[map[string]float64] { - return sequel.Column("map", v.Map, func(val map[string]float64) any { - return encoding.JSONValue(val) - }) + return sequel.Column("map", v.Map, convertMapstringfloat64ToValue) } func (v User) ColumnNested() sequel.ColumnConvertClause[*struct{ Deep struct{ Bool bool } }] { - return sequel.Column("nested", v.embed.Nested, func(val *struct{ Deep struct{ Bool bool } }) any { - if val != nil { - return encoding.JSONValue(*val) - } - return nil - }) + return sequel.Column("nested", v.embed.Nested, convertPtrstructDeepStructBoolBoolToValue) } func (v User) ColumnT() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("t", v.embed.T) @@ -214,3 +186,43 @@ func (v User) ColumnT() sequel.ColumnClause[time.Time] { func (v User) ColumnName() sequel.ColumnClause[string] { return sequel.BasicColumn("name", v.embed.deepNested.Name) } + +func convertUserExtraInfoInlineStructToValue(val UserExtraInfoInlineStruct) any { + return encoding.JSONValue(val) +} +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertReflectKindToValue(val reflect.Kind) any { + return (int64)(val) +} +func convertReflectChanDirToValue(val reflect.ChanDir) any { + return (int64)(val) +} +func convertPtrstructDeepStructBoolBoolToValue(val *struct{ Deep struct{ Bool bool } }) any { + if val != nil { + return encoding.JSONValue(*val) + } + return nil +} +func convertPtrstringToValue(val *string) any { + if val != nil { + return *val + } + return nil +} +func convertMapstringfloat64ToValue(val map[string]float64) any { + return encoding.JSONValue(val) +} +func convertHouseUnitTypeToValue(val HouseUnitType) any { + return (int64)(val) +} +func convertArrayfloat64ToValue(val []float64) any { + return (sqltype.Float64Slice[float64])(val) +} +func convertAddressToValue(val Address) any { + return encoding.JSONValue(val) +} +func convert2stringToValue(val [2]string) any { + return encoding.JSONValue(val) +} diff --git a/examples/testcase/core/generated.go.tpl b/examples/testcase/core/generated.go.tpl index 08f883d9..8590b7ce 100644 --- a/examples/testcase/core/generated.go.tpl +++ b/examples/testcase/core/generated.go.tpl @@ -140,40 +140,25 @@ func (v User) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v User) ColumnNo() sequel.ColumnConvertClause[uint] { - return sequel.Column("no", v.No, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("no", v.No, convertUintToValue) } func (v User) ColumnJoinedTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("joined_time", v.JoinedTime) } func (v User) ColumnAddress() sequel.ColumnConvertClause[Address] { - return sequel.Column("address", v.Address, func(val Address) any { - return encoding.JSONValue(val) - }) + return sequel.Column("address", v.Address, convertAddressToValue) } func (v User) ColumnKind() sequel.ColumnConvertClause[reflect.Kind] { - return sequel.Column("kind", v.Kind, func(val reflect.Kind) any { - return (int64)(val) - }) + return sequel.Column("kind", v.Kind, convertReflectKindToValue) } func (v User) ColumnType() sequel.ColumnConvertClause[HouseUnitType] { - return sequel.Column("type", v.Type, func(val HouseUnitType) any { - return (int64)(val) - }) + return sequel.Column("type", v.Type, convertHouseUnitTypeToValue) } func (v User) ColumnChan() sequel.ColumnConvertClause[reflect.ChanDir] { - return sequel.Column("chan", v.Chan, func(val reflect.ChanDir) any { - return (int64)(val) - }) + return sequel.Column("chan", v.Chan, convertReflectChanDirToValue) } func (v User) ColumnPostalCode() sequel.ColumnConvertClause[*string] { - return sequel.Column("postal_code", v.PostalCode, func(val *string) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("postal_code", v.PostalCode, convertPtrstringToValue) } type UserExtraInfoInlineStruct = struct { @@ -181,32 +166,19 @@ type UserExtraInfoInlineStruct = struct { } func (v User) ColumnExtraInfo() sequel.ColumnConvertClause[UserExtraInfoInlineStruct] { - return sequel.Column("extra_info", v.ExtraInfo, func(val UserExtraInfoInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("extra_info", v.ExtraInfo, convertUserExtraInfoInlineStructToValue) } func (v User) ColumnNicknames() sequel.ColumnConvertClause[[2]string] { - return sequel.Column("nicknames", v.Nicknames, func(val [2]string) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nicknames", v.Nicknames, convert2stringToValue) } func (v User) ColumnSlice() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("slice", v.Slice, func(val []float64) any { - return (sqltype.Float64Slice[float64])(val) - }) + return sequel.Column("slice", v.Slice, convertArrayfloat64ToValue) } func (v User) ColumnMap() sequel.ColumnConvertClause[map[string]float64] { - return sequel.Column("map", v.Map, func(val map[string]float64) any { - return encoding.JSONValue(val) - }) + return sequel.Column("map", v.Map, convertMapstringfloat64ToValue) } func (v User) ColumnNested() sequel.ColumnConvertClause[*struct{ Deep struct{ Bool bool } }] { - return sequel.Column("nested", v.embed.Nested, func(val *struct{ Deep struct{ Bool bool } }) any { - if val != nil { - return encoding.JSONValue(*val) - } - return nil - }) + return sequel.Column("nested", v.embed.Nested, convertPtrstructDeepStructBoolBoolToValue) } func (v User) ColumnT() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("t", v.embed.T) @@ -214,3 +186,43 @@ func (v User) ColumnT() sequel.ColumnClause[time.Time] { func (v User) ColumnName() sequel.ColumnClause[string] { return sequel.BasicColumn("name", v.embed.deepNested.Name) } + +func convertUserExtraInfoInlineStructToValue(val UserExtraInfoInlineStruct) any { + return encoding.JSONValue(val) +} +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertReflectKindToValue(val reflect.Kind) any { + return (int64)(val) +} +func convertReflectChanDirToValue(val reflect.ChanDir) any { + return (int64)(val) +} +func convertPtrstructDeepStructBoolBoolToValue(val *struct{ Deep struct{ Bool bool } }) any { + if val != nil { + return encoding.JSONValue(*val) + } + return nil +} +func convertPtrstringToValue(val *string) any { + if val != nil { + return *val + } + return nil +} +func convertMapstringfloat64ToValue(val map[string]float64) any { + return encoding.JSONValue(val) +} +func convertHouseUnitTypeToValue(val HouseUnitType) any { + return (int64)(val) +} +func convertArrayfloat64ToValue(val []float64) any { + return (sqltype.Float64Slice[float64])(val) +} +func convertAddressToValue(val Address) any { + return encoding.JSONValue(val) +} +func convert2stringToValue(val [2]string) any { + return encoding.JSONValue(val) +} diff --git a/examples/testcase/schema/generated.go b/examples/testcase/schema/generated.go index d80336f8..86d4ec0f 100755 --- a/examples/testcase/schema/generated.go +++ b/examples/testcase/schema/generated.go @@ -49,9 +49,7 @@ func (v A) ColumnID() sequel.ColumnClause[string] { return sequel.BasicColumn("id", v.ID) } func (v A) ColumnText() sequel.ColumnConvertClause[LongText] { - return sequel.Column("text", v.Text, func(val LongText) any { - return (string)(val) - }) + return sequel.Column("text", v.Text, convertLongTextToValue) } func (v A) ColumnCreatedAt() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("created_at", v.CreatedAt) @@ -163,7 +161,12 @@ func (v D) IDValue() any { return v.ID } func (v D) ColumnID() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("id", v.ID, func(val sql.NullString) any { - return val - }) + return sequel.Column("id", v.ID, convertSqlNullStringToValue) +} + +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertLongTextToValue(val LongText) any { + return (string)(val) } diff --git a/examples/testcase/schema/generated.go.tpl b/examples/testcase/schema/generated.go.tpl index d80336f8..86d4ec0f 100644 --- a/examples/testcase/schema/generated.go.tpl +++ b/examples/testcase/schema/generated.go.tpl @@ -49,9 +49,7 @@ func (v A) ColumnID() sequel.ColumnClause[string] { return sequel.BasicColumn("id", v.ID) } func (v A) ColumnText() sequel.ColumnConvertClause[LongText] { - return sequel.Column("text", v.Text, func(val LongText) any { - return (string)(val) - }) + return sequel.Column("text", v.Text, convertLongTextToValue) } func (v A) ColumnCreatedAt() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("created_at", v.CreatedAt) @@ -163,7 +161,12 @@ func (v D) IDValue() any { return v.ID } func (v D) ColumnID() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("id", v.ID, func(val sql.NullString) any { - return val - }) + return sequel.Column("id", v.ID, convertSqlNullStringToValue) +} + +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertLongTextToValue(val LongText) any { + return (string)(val) } diff --git a/examples/testcase/schema/nopk/generated.go b/examples/testcase/schema/nopk/generated.go index 3a4758e9..c4371314 100755 --- a/examples/testcase/schema/nopk/generated.go +++ b/examples/testcase/schema/nopk/generated.go @@ -46,10 +46,12 @@ func (v Customer) ColumnName() sequel.ColumnClause[string] { return sequel.BasicColumn("name", v.Name) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("age", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("age", v.Age, convertUint8ToValue) } func (v Customer) ColumnMarried() sequel.ColumnClause[bool] { return sequel.BasicColumn("married", v.Married) } + +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} diff --git a/examples/testcase/schema/nopk/generated.go.tpl b/examples/testcase/schema/nopk/generated.go.tpl index 3a4758e9..c4371314 100644 --- a/examples/testcase/schema/nopk/generated.go.tpl +++ b/examples/testcase/schema/nopk/generated.go.tpl @@ -46,10 +46,12 @@ func (v Customer) ColumnName() sequel.ColumnClause[string] { return sequel.BasicColumn("name", v.Name) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("age", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("age", v.Age, convertUint8ToValue) } func (v Customer) ColumnMarried() sequel.ColumnClause[bool] { return sequel.BasicColumn("married", v.Married) } + +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} diff --git a/examples/testcase/struct-field/alias/generated.go b/examples/testcase/struct-field/alias/generated.go index 6c7c09bc..4e9a031f 100755 --- a/examples/testcase/struct-field/alias/generated.go +++ b/examples/testcase/struct-field/alias/generated.go @@ -87,34 +87,22 @@ func (v AliasStruct) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("Id", v.pk.ID) } func (v AliasStruct) ColumnHeader() sequel.ColumnConvertClause[aliasStr] { - return sequel.Column("header", v.Header, func(val aliasStr) any { - return (string)(val) - }) + return sequel.Column("header", v.Header, convertAliasStrToValue) } func (v AliasStruct) ColumnRaw() sequel.ColumnConvertClause[sql.RawBytes] { - return sequel.Column("raw", v.Raw, func(val sql.RawBytes) any { - return val - }) + return sequel.Column("raw", v.Raw, convertSqlRawBytesToValue) } func (v AliasStruct) ColumnText() sequel.ColumnConvertClause[customStr] { - return sequel.Column("text", v.Text, func(val customStr) any { - return (string)(val) - }) + return sequel.Column("text", v.Text, convertCustomStrToValue) } func (v AliasStruct) ColumnNullStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("null_str", v.NullStr, func(val sql.NullString) any { - return val - }) + return sequel.Column("null_str", v.NullStr, convertSqlNullStringToValue) } func (v AliasStruct) ColumnCreated() sequel.ColumnConvertClause[DT] { - return sequel.Column("created", v.model.Created, func(val DT) any { - return (time.Time)(val) - }) + return sequel.Column("created", v.model.Created, convertDtToValue) } func (v AliasStruct) ColumnUpdated() sequel.ColumnConvertClause[DT] { - return sequel.Column("updated", v.model.Updated, func(val DT) any { - return (time.Time)(val) - }) + return sequel.Column("updated", v.model.Updated, convertDtToValue) } func (B) TableName() string { @@ -174,3 +162,19 @@ func (v C) IDValue() any { func (v C) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } + +func convertSqlRawBytesToValue(val sql.RawBytes) any { + return val +} +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertDtToValue(val DT) any { + return (time.Time)(val) +} +func convertCustomStrToValue(val customStr) any { + return (string)(val) +} +func convertAliasStrToValue(val aliasStr) any { + return (string)(val) +} diff --git a/examples/testcase/struct-field/alias/generated.go.tpl b/examples/testcase/struct-field/alias/generated.go.tpl index 6c7c09bc..4e9a031f 100644 --- a/examples/testcase/struct-field/alias/generated.go.tpl +++ b/examples/testcase/struct-field/alias/generated.go.tpl @@ -87,34 +87,22 @@ func (v AliasStruct) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("Id", v.pk.ID) } func (v AliasStruct) ColumnHeader() sequel.ColumnConvertClause[aliasStr] { - return sequel.Column("header", v.Header, func(val aliasStr) any { - return (string)(val) - }) + return sequel.Column("header", v.Header, convertAliasStrToValue) } func (v AliasStruct) ColumnRaw() sequel.ColumnConvertClause[sql.RawBytes] { - return sequel.Column("raw", v.Raw, func(val sql.RawBytes) any { - return val - }) + return sequel.Column("raw", v.Raw, convertSqlRawBytesToValue) } func (v AliasStruct) ColumnText() sequel.ColumnConvertClause[customStr] { - return sequel.Column("text", v.Text, func(val customStr) any { - return (string)(val) - }) + return sequel.Column("text", v.Text, convertCustomStrToValue) } func (v AliasStruct) ColumnNullStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("null_str", v.NullStr, func(val sql.NullString) any { - return val - }) + return sequel.Column("null_str", v.NullStr, convertSqlNullStringToValue) } func (v AliasStruct) ColumnCreated() sequel.ColumnConvertClause[DT] { - return sequel.Column("created", v.model.Created, func(val DT) any { - return (time.Time)(val) - }) + return sequel.Column("created", v.model.Created, convertDtToValue) } func (v AliasStruct) ColumnUpdated() sequel.ColumnConvertClause[DT] { - return sequel.Column("updated", v.model.Updated, func(val DT) any { - return (time.Time)(val) - }) + return sequel.Column("updated", v.model.Updated, convertDtToValue) } func (B) TableName() string { @@ -174,3 +162,19 @@ func (v C) IDValue() any { func (v C) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } + +func convertSqlRawBytesToValue(val sql.RawBytes) any { + return val +} +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertDtToValue(val DT) any { + return (time.Time)(val) +} +func convertCustomStrToValue(val customStr) any { + return (string)(val) +} +func convertAliasStrToValue(val aliasStr) any { + return (string)(val) +} diff --git a/examples/testcase/struct-field/array/generated.go b/examples/testcase/struct-field/array/generated.go index b53f7210..f2c9d7f3 100755 --- a/examples/testcase/struct-field/array/generated.go +++ b/examples/testcase/struct-field/array/generated.go @@ -53,27 +53,30 @@ func (v Array) StrValue() any { return encoding.JSONValue(v.Str) } func (v Array) ColumnTuple() sequel.ColumnConvertClause[[2]byte] { - return sequel.Column("tuple", v.Tuple, func(val [2]byte) any { - return val[:] - }) + return sequel.Column("tuple", v.Tuple, convert2byteToValue) } func (v Array) ColumnRunes() sequel.ColumnConvertClause[[4]rune] { - return sequel.Column("runes", v.Runes, func(val [4]rune) any { - return string(val[:]) - }) + return sequel.Column("runes", v.Runes, convert4runeToValue) } func (v Array) ColumnBytes() sequel.ColumnConvertClause[[10]byte] { - return sequel.Column("bytes", v.Bytes, func(val [10]byte) any { - return val[:] - }) + return sequel.Column("bytes", v.Bytes, convert10byteToValue) } func (v Array) ColumnFixedSize() sequel.ColumnConvertClause[[10]byte] { - return sequel.Column("fixed_size", v.FixedSize, func(val [10]byte) any { - return val[:] - }) + return sequel.Column("fixed_size", v.FixedSize, convert10byteToValue) } func (v Array) ColumnStr() sequel.ColumnConvertClause[[100]Str] { - return sequel.Column("str", v.Str, func(val [100]Str) any { - return encoding.JSONValue(val) - }) + return sequel.Column("str", v.Str, convert100StrToValue) +} + +func convert4runeToValue(val [4]rune) any { + return string(val[:]) +} +func convert2byteToValue(val [2]byte) any { + return val[:] +} +func convert10byteToValue(val [10]byte) any { + return val[:] +} +func convert100StrToValue(val [100]Str) any { + return encoding.JSONValue(val) } diff --git a/examples/testcase/struct-field/array/generated.go.tpl b/examples/testcase/struct-field/array/generated.go.tpl index b53f7210..f2c9d7f3 100644 --- a/examples/testcase/struct-field/array/generated.go.tpl +++ b/examples/testcase/struct-field/array/generated.go.tpl @@ -53,27 +53,30 @@ func (v Array) StrValue() any { return encoding.JSONValue(v.Str) } func (v Array) ColumnTuple() sequel.ColumnConvertClause[[2]byte] { - return sequel.Column("tuple", v.Tuple, func(val [2]byte) any { - return val[:] - }) + return sequel.Column("tuple", v.Tuple, convert2byteToValue) } func (v Array) ColumnRunes() sequel.ColumnConvertClause[[4]rune] { - return sequel.Column("runes", v.Runes, func(val [4]rune) any { - return string(val[:]) - }) + return sequel.Column("runes", v.Runes, convert4runeToValue) } func (v Array) ColumnBytes() sequel.ColumnConvertClause[[10]byte] { - return sequel.Column("bytes", v.Bytes, func(val [10]byte) any { - return val[:] - }) + return sequel.Column("bytes", v.Bytes, convert10byteToValue) } func (v Array) ColumnFixedSize() sequel.ColumnConvertClause[[10]byte] { - return sequel.Column("fixed_size", v.FixedSize, func(val [10]byte) any { - return val[:] - }) + return sequel.Column("fixed_size", v.FixedSize, convert10byteToValue) } func (v Array) ColumnStr() sequel.ColumnConvertClause[[100]Str] { - return sequel.Column("str", v.Str, func(val [100]Str) any { - return encoding.JSONValue(val) - }) + return sequel.Column("str", v.Str, convert100StrToValue) +} + +func convert4runeToValue(val [4]rune) any { + return string(val[:]) +} +func convert2byteToValue(val [2]byte) any { + return val[:] +} +func convert10byteToValue(val [10]byte) any { + return val[:] +} +func convert100StrToValue(val [100]Str) any { + return encoding.JSONValue(val) } diff --git a/examples/testcase/struct-field/custom/generated.go b/examples/testcase/struct-field/custom/generated.go index 6c90be8e..7998b5a5 100755 --- a/examples/testcase/struct-field/custom/generated.go +++ b/examples/testcase/struct-field/custom/generated.go @@ -75,32 +75,22 @@ func (v Address) ColumnLine1() sequel.ColumnClause[string] { return sequel.BasicColumn("line_1", v.Line1) } func (v Address) ColumnLine2() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("line_2", v.Line2, func(val sql.NullString) any { - return val - }) + return sequel.Column("line_2", v.Line2, convertSqlNullStringToValue) } func (v Address) ColumnCity() sequel.ColumnClause[string] { return sequel.BasicColumn("city", v.City) } func (v Address) ColumnPostCode() sequel.ColumnConvertClause[uint] { - return sequel.Column("post_code", v.PostCode, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("post_code", v.PostCode, convertUintToValue) } func (v Address) ColumnStateCode() sequel.ColumnConvertClause[StateCode] { - return sequel.Column("state_code", v.StateCode, func(val StateCode) any { - return (string)(val) - }) + return sequel.Column("state_code", v.StateCode, convertStateCodeToValue) } func (v Address) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { - return sequel.Column("geo_point", v.GeoPoint, func(val orb.Point) any { - return ewkb.Value(val, 4326) - }) + return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } func (v Address) ColumnCountryCode() sequel.ColumnConvertClause[CountryCode] { - return sequel.Column("country_code", v.CountryCode, func(val CountryCode) any { - return (string)(val) - }) + return sequel.Column("country_code", v.CountryCode, convertCountryCodeToValue) } func (Customer) TableName() string { @@ -162,24 +152,16 @@ func (v Customer) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("howOld", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("howOld", v.Age, convertUint8ToValue) } func (v Customer) ColumnName() sequel.ColumnConvertClause[longText] { - return sequel.Column("name", v.Name, func(val longText) any { - return val - }) + return sequel.Column("name", v.Name, convertLongTextToValue) } func (v Customer) ColumnAddress() sequel.ColumnConvertClause[Addresses] { - return sequel.Column("address", v.Address, func(val Addresses) any { - return val - }) + return sequel.Column("address", v.Address, convertAddressesToValue) } func (v Customer) ColumnNicknames() sequel.ColumnConvertClause[[]longText] { - return sequel.Column("nicknames", v.Nicknames, func(val []longText) any { - return (sqltype.StringSlice[longText])(val) - }) + return sequel.Column("nicknames", v.Nicknames, convertArraylongTextToValue) } func (v Customer) ColumnStatus() sequel.ColumnClause[string] { return sequel.BasicColumn("status", v.Status) @@ -187,3 +169,31 @@ func (v Customer) ColumnStatus() sequel.ColumnClause[string] { func (v Customer) ColumnJoinAt() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("join_at", v.JoinAt) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} +func convertStateCodeToValue(val StateCode) any { + return (string)(val) +} +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertOrbPointToValue(val orb.Point) any { + return ewkb.Value(val, 4326) +} +func convertLongTextToValue(val longText) any { + return val +} +func convertCountryCodeToValue(val CountryCode) any { + return (string)(val) +} +func convertArraylongTextToValue(val []longText) any { + return (sqltype.StringSlice[longText])(val) +} +func convertAddressesToValue(val Addresses) any { + return val +} diff --git a/examples/testcase/struct-field/custom/generated.go.tpl b/examples/testcase/struct-field/custom/generated.go.tpl index 6c90be8e..7998b5a5 100644 --- a/examples/testcase/struct-field/custom/generated.go.tpl +++ b/examples/testcase/struct-field/custom/generated.go.tpl @@ -75,32 +75,22 @@ func (v Address) ColumnLine1() sequel.ColumnClause[string] { return sequel.BasicColumn("line_1", v.Line1) } func (v Address) ColumnLine2() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("line_2", v.Line2, func(val sql.NullString) any { - return val - }) + return sequel.Column("line_2", v.Line2, convertSqlNullStringToValue) } func (v Address) ColumnCity() sequel.ColumnClause[string] { return sequel.BasicColumn("city", v.City) } func (v Address) ColumnPostCode() sequel.ColumnConvertClause[uint] { - return sequel.Column("post_code", v.PostCode, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("post_code", v.PostCode, convertUintToValue) } func (v Address) ColumnStateCode() sequel.ColumnConvertClause[StateCode] { - return sequel.Column("state_code", v.StateCode, func(val StateCode) any { - return (string)(val) - }) + return sequel.Column("state_code", v.StateCode, convertStateCodeToValue) } func (v Address) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { - return sequel.Column("geo_point", v.GeoPoint, func(val orb.Point) any { - return ewkb.Value(val, 4326) - }) + return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } func (v Address) ColumnCountryCode() sequel.ColumnConvertClause[CountryCode] { - return sequel.Column("country_code", v.CountryCode, func(val CountryCode) any { - return (string)(val) - }) + return sequel.Column("country_code", v.CountryCode, convertCountryCodeToValue) } func (Customer) TableName() string { @@ -162,24 +152,16 @@ func (v Customer) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("howOld", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("howOld", v.Age, convertUint8ToValue) } func (v Customer) ColumnName() sequel.ColumnConvertClause[longText] { - return sequel.Column("name", v.Name, func(val longText) any { - return val - }) + return sequel.Column("name", v.Name, convertLongTextToValue) } func (v Customer) ColumnAddress() sequel.ColumnConvertClause[Addresses] { - return sequel.Column("address", v.Address, func(val Addresses) any { - return val - }) + return sequel.Column("address", v.Address, convertAddressesToValue) } func (v Customer) ColumnNicknames() sequel.ColumnConvertClause[[]longText] { - return sequel.Column("nicknames", v.Nicknames, func(val []longText) any { - return (sqltype.StringSlice[longText])(val) - }) + return sequel.Column("nicknames", v.Nicknames, convertArraylongTextToValue) } func (v Customer) ColumnStatus() sequel.ColumnClause[string] { return sequel.BasicColumn("status", v.Status) @@ -187,3 +169,31 @@ func (v Customer) ColumnStatus() sequel.ColumnClause[string] { func (v Customer) ColumnJoinAt() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("join_at", v.JoinAt) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} +func convertStateCodeToValue(val StateCode) any { + return (string)(val) +} +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertOrbPointToValue(val orb.Point) any { + return ewkb.Value(val, 4326) +} +func convertLongTextToValue(val longText) any { + return val +} +func convertCountryCodeToValue(val CountryCode) any { + return (string)(val) +} +func convertArraylongTextToValue(val []longText) any { + return (sqltype.StringSlice[longText])(val) +} +func convertAddressesToValue(val Addresses) any { + return val +} diff --git a/examples/testcase/struct-field/date/generated.go b/examples/testcase/struct-field/date/generated.go index 40b6b95f..f03d2346 100755 --- a/examples/testcase/struct-field/date/generated.go +++ b/examples/testcase/struct-field/date/generated.go @@ -50,12 +50,15 @@ func (v User) BirthDateValue() any { return encoding.TextValue(v.BirthDate) } func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) } func (v User) ColumnBirthDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("birth_date", v.BirthDate, func(val civil.Date) any { - return encoding.TextValue(val) - }) + return sequel.Column("birth_date", v.BirthDate, convertCivilDateToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} +func convertCivilDateToValue(val civil.Date) any { + return encoding.TextValue(val) } diff --git a/examples/testcase/struct-field/date/generated.go.tpl b/examples/testcase/struct-field/date/generated.go.tpl index 40b6b95f..f03d2346 100644 --- a/examples/testcase/struct-field/date/generated.go.tpl +++ b/examples/testcase/struct-field/date/generated.go.tpl @@ -50,12 +50,15 @@ func (v User) BirthDateValue() any { return encoding.TextValue(v.BirthDate) } func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) } func (v User) ColumnBirthDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("birth_date", v.BirthDate, func(val civil.Date) any { - return encoding.TextValue(val) - }) + return sequel.Column("birth_date", v.BirthDate, convertCivilDateToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} +func convertCivilDateToValue(val civil.Date) any { + return encoding.TextValue(val) } diff --git a/examples/testcase/struct-field/enum/generated.go b/examples/testcase/struct-field/enum/generated.go index 38ceb5b0..9823d203 100755 --- a/examples/testcase/struct-field/enum/generated.go +++ b/examples/testcase/struct-field/enum/generated.go @@ -43,17 +43,21 @@ func (v Custom) NumValue() any { return (int64)(v.Num) } func (v Custom) ColumnStr() sequel.ColumnConvertClause[longText] { - return sequel.Column("text", v.Str, func(val longText) any { - return (string)(val) - }) + return sequel.Column("text", v.Str, convertLongTextToValue) } func (v Custom) ColumnEnum() sequel.ColumnConvertClause[Enum] { - return sequel.Column("e", v.Enum, func(val Enum) any { - return (int64)(val) - }) + return sequel.Column("e", v.Enum, convertEnumToValue) } func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { - return sequel.Column("num", v.Num, func(val uint16) any { - return (int64)(val) - }) + return sequel.Column("num", v.Num, convertUint16ToValue) +} + +func convertUint16ToValue(val uint16) any { + return (int64)(val) +} +func convertLongTextToValue(val longText) any { + return (string)(val) +} +func convertEnumToValue(val Enum) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/enum/generated.go.tpl b/examples/testcase/struct-field/enum/generated.go.tpl index 38ceb5b0..9823d203 100644 --- a/examples/testcase/struct-field/enum/generated.go.tpl +++ b/examples/testcase/struct-field/enum/generated.go.tpl @@ -43,17 +43,21 @@ func (v Custom) NumValue() any { return (int64)(v.Num) } func (v Custom) ColumnStr() sequel.ColumnConvertClause[longText] { - return sequel.Column("text", v.Str, func(val longText) any { - return (string)(val) - }) + return sequel.Column("text", v.Str, convertLongTextToValue) } func (v Custom) ColumnEnum() sequel.ColumnConvertClause[Enum] { - return sequel.Column("e", v.Enum, func(val Enum) any { - return (int64)(val) - }) + return sequel.Column("e", v.Enum, convertEnumToValue) } func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { - return sequel.Column("num", v.Num, func(val uint16) any { - return (int64)(val) - }) + return sequel.Column("num", v.Num, convertUint16ToValue) +} + +func convertUint16ToValue(val uint16) any { + return (int64)(val) +} +func convertLongTextToValue(val longText) any { + return (string)(val) +} +func convertEnumToValue(val Enum) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/enum/imported/generated.go b/examples/testcase/struct-field/enum/imported/generated.go index c02e6905..d9ba2aac 100755 --- a/examples/testcase/struct-field/enum/imported/generated.go +++ b/examples/testcase/struct-field/enum/imported/generated.go @@ -35,7 +35,9 @@ func (v ImportedEnum) WeekdayValue() any { return (int64)(v.Weekday) } func (v ImportedEnum) ColumnWeekday() sequel.ColumnConvertClause[time.Weekday] { - return sequel.Column("weekday", v.Weekday, func(val time.Weekday) any { - return (int64)(val) - }) + return sequel.Column("weekday", v.Weekday, convertTimeWeekdayToValue) +} + +func convertTimeWeekdayToValue(val time.Weekday) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/enum/imported/generated.go.tpl b/examples/testcase/struct-field/enum/imported/generated.go.tpl index c02e6905..d9ba2aac 100644 --- a/examples/testcase/struct-field/enum/imported/generated.go.tpl +++ b/examples/testcase/struct-field/enum/imported/generated.go.tpl @@ -35,7 +35,9 @@ func (v ImportedEnum) WeekdayValue() any { return (int64)(v.Weekday) } func (v ImportedEnum) ColumnWeekday() sequel.ColumnConvertClause[time.Weekday] { - return sequel.Column("weekday", v.Weekday, func(val time.Weekday) any { - return (int64)(val) - }) + return sequel.Column("weekday", v.Weekday, convertTimeWeekdayToValue) +} + +func convertTimeWeekdayToValue(val time.Weekday) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/imported/generated.go b/examples/testcase/struct-field/imported/generated.go index 3a2d3431..5c9a787e 100755 --- a/examples/testcase/struct-field/imported/generated.go +++ b/examples/testcase/struct-field/imported/generated.go @@ -71,44 +71,28 @@ func (v Model) TimeValue() any { return v.Time } func (v Model) ColumnStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("str", v.Str, func(val sql.NullString) any { - return val - }) + return sequel.Column("str", v.Str, convertSqlNullStringToValue) } func (v Model) ColumnBool() sequel.ColumnConvertClause[sql.NullBool] { - return sequel.Column("bool", v.Bool, func(val sql.NullBool) any { - return val - }) + return sequel.Column("bool", v.Bool, convertSqlNullBoolToValue) } func (v Model) ColumnRawBytes() sequel.ColumnConvertClause[sql.RawBytes] { - return sequel.Column("raw_bytes", v.RawBytes, func(val sql.RawBytes) any { - return val - }) + return sequel.Column("raw_bytes", v.RawBytes, convertSqlRawBytesToValue) } func (v Model) ColumnInt16() sequel.ColumnConvertClause[sql.NullInt16] { - return sequel.Column("int_16", v.Int16, func(val sql.NullInt16) any { - return val - }) + return sequel.Column("int_16", v.Int16, convertSqlNullInt16ToValue) } func (v Model) ColumnInt32() sequel.ColumnConvertClause[sql.NullInt32] { - return sequel.Column("int_32", v.Int32, func(val sql.NullInt32) any { - return val - }) + return sequel.Column("int_32", v.Int32, convertSqlNullInt32ToValue) } func (v Model) ColumnInt64() sequel.ColumnConvertClause[sql.NullInt64] { - return sequel.Column("int_64", v.Int64, func(val sql.NullInt64) any { - return val - }) + return sequel.Column("int_64", v.Int64, convertSqlNullInt64ToValue) } func (v Model) ColumnFloat64() sequel.ColumnConvertClause[sql.NullFloat64] { - return sequel.Column("float_64", v.Float64, func(val sql.NullFloat64) any { - return val - }) + return sequel.Column("float_64", v.Float64, convertSqlNullFloat64ToValue) } func (v Model) ColumnTime() sequel.ColumnConvertClause[sql.NullTime] { - return sequel.Column("time", v.Time, func(val sql.NullTime) any { - return val - }) + return sequel.Column("time", v.Time, convertSqlNullTimeToValue) } func (Some) TableName() string { @@ -137,7 +121,33 @@ func (v Some) IDValue() any { return v.ID } func (v Some) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} +func convertSqlRawBytesToValue(val sql.RawBytes) any { + return val +} +func convertSqlNullTimeToValue(val sql.NullTime) any { + return val +} +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertSqlNullInt64ToValue(val sql.NullInt64) any { + return val +} +func convertSqlNullInt32ToValue(val sql.NullInt32) any { + return val +} +func convertSqlNullInt16ToValue(val sql.NullInt16) any { + return val +} +func convertSqlNullFloat64ToValue(val sql.NullFloat64) any { + return val +} +func convertSqlNullBoolToValue(val sql.NullBool) any { + return val } diff --git a/examples/testcase/struct-field/imported/generated.go.tpl b/examples/testcase/struct-field/imported/generated.go.tpl index 3a2d3431..5c9a787e 100644 --- a/examples/testcase/struct-field/imported/generated.go.tpl +++ b/examples/testcase/struct-field/imported/generated.go.tpl @@ -71,44 +71,28 @@ func (v Model) TimeValue() any { return v.Time } func (v Model) ColumnStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("str", v.Str, func(val sql.NullString) any { - return val - }) + return sequel.Column("str", v.Str, convertSqlNullStringToValue) } func (v Model) ColumnBool() sequel.ColumnConvertClause[sql.NullBool] { - return sequel.Column("bool", v.Bool, func(val sql.NullBool) any { - return val - }) + return sequel.Column("bool", v.Bool, convertSqlNullBoolToValue) } func (v Model) ColumnRawBytes() sequel.ColumnConvertClause[sql.RawBytes] { - return sequel.Column("raw_bytes", v.RawBytes, func(val sql.RawBytes) any { - return val - }) + return sequel.Column("raw_bytes", v.RawBytes, convertSqlRawBytesToValue) } func (v Model) ColumnInt16() sequel.ColumnConvertClause[sql.NullInt16] { - return sequel.Column("int_16", v.Int16, func(val sql.NullInt16) any { - return val - }) + return sequel.Column("int_16", v.Int16, convertSqlNullInt16ToValue) } func (v Model) ColumnInt32() sequel.ColumnConvertClause[sql.NullInt32] { - return sequel.Column("int_32", v.Int32, func(val sql.NullInt32) any { - return val - }) + return sequel.Column("int_32", v.Int32, convertSqlNullInt32ToValue) } func (v Model) ColumnInt64() sequel.ColumnConvertClause[sql.NullInt64] { - return sequel.Column("int_64", v.Int64, func(val sql.NullInt64) any { - return val - }) + return sequel.Column("int_64", v.Int64, convertSqlNullInt64ToValue) } func (v Model) ColumnFloat64() sequel.ColumnConvertClause[sql.NullFloat64] { - return sequel.Column("float_64", v.Float64, func(val sql.NullFloat64) any { - return val - }) + return sequel.Column("float_64", v.Float64, convertSqlNullFloat64ToValue) } func (v Model) ColumnTime() sequel.ColumnConvertClause[sql.NullTime] { - return sequel.Column("time", v.Time, func(val sql.NullTime) any { - return val - }) + return sequel.Column("time", v.Time, convertSqlNullTimeToValue) } func (Some) TableName() string { @@ -137,7 +121,33 @@ func (v Some) IDValue() any { return v.ID } func (v Some) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} +func convertSqlRawBytesToValue(val sql.RawBytes) any { + return val +} +func convertSqlNullTimeToValue(val sql.NullTime) any { + return val +} +func convertSqlNullStringToValue(val sql.NullString) any { + return val +} +func convertSqlNullInt64ToValue(val sql.NullInt64) any { + return val +} +func convertSqlNullInt32ToValue(val sql.NullInt32) any { + return val +} +func convertSqlNullInt16ToValue(val sql.NullInt16) any { + return val +} +func convertSqlNullFloat64ToValue(val sql.NullFloat64) any { + return val +} +func convertSqlNullBoolToValue(val sql.NullBool) any { + return val } diff --git a/examples/testcase/struct-field/json/generated.go b/examples/testcase/struct-field/json/generated.go index b3625aab..e603911c 100755 --- a/examples/testcase/struct-field/json/generated.go +++ b/examples/testcase/struct-field/json/generated.go @@ -40,12 +40,15 @@ func (v JSON) RawBytesValue() any { return v.RawBytes } func (v JSON) ColumnNum() sequel.ColumnConvertClause[json.Number] { - return sequel.Column("num", v.Num, func(val json.Number) any { - return val.String() - }) + return sequel.Column("num", v.Num, convertJsonNumberToValue) } func (v JSON) ColumnRawBytes() sequel.ColumnConvertClause[json.RawMessage] { - return sequel.Column("raw_bytes", v.RawBytes, func(val json.RawMessage) any { - return val - }) + return sequel.Column("raw_bytes", v.RawBytes, convertJsonRawMessageToValue) +} + +func convertJsonRawMessageToValue(val json.RawMessage) any { + return val +} +func convertJsonNumberToValue(val json.Number) any { + return val.String() } diff --git a/examples/testcase/struct-field/json/generated.go.tpl b/examples/testcase/struct-field/json/generated.go.tpl index b3625aab..e603911c 100644 --- a/examples/testcase/struct-field/json/generated.go.tpl +++ b/examples/testcase/struct-field/json/generated.go.tpl @@ -40,12 +40,15 @@ func (v JSON) RawBytesValue() any { return v.RawBytes } func (v JSON) ColumnNum() sequel.ColumnConvertClause[json.Number] { - return sequel.Column("num", v.Num, func(val json.Number) any { - return val.String() - }) + return sequel.Column("num", v.Num, convertJsonNumberToValue) } func (v JSON) ColumnRawBytes() sequel.ColumnConvertClause[json.RawMessage] { - return sequel.Column("raw_bytes", v.RawBytes, func(val json.RawMessage) any { - return val - }) + return sequel.Column("raw_bytes", v.RawBytes, convertJsonRawMessageToValue) +} + +func convertJsonRawMessageToValue(val json.RawMessage) any { + return val +} +func convertJsonNumberToValue(val json.Number) any { + return val.String() } diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go b/examples/testcase/struct-field/pk/auto-incr/generated.go index c8e2bce8..ed776ffd 100755 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go @@ -66,20 +66,24 @@ func (v Model) NValue() any { return v.N } func (v Model) ColumnName() sequel.ColumnConvertClause[LongText] { - return sequel.Column("name", v.Name, func(val LongText) any { - return (string)(val) - }) + return sequel.Column("name", v.Name, convertLongTextToValue) } func (v Model) ColumnF() sequel.ColumnConvertClause[Flag] { - return sequel.Column("f", v.F, func(val Flag) any { - return (bool)(val) - }) + return sequel.Column("f", v.F, convertFlagToValue) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint] { - return sequel.Column("id", v.ID, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUintToValue) } func (v Model) ColumnN() sequel.ColumnClause[int64] { return sequel.BasicColumn("n", v.N) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertLongTextToValue(val LongText) any { + return (string)(val) +} +func convertFlagToValue(val Flag) any { + return (bool)(val) +} diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl index c8e2bce8..ed776ffd 100644 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl @@ -66,20 +66,24 @@ func (v Model) NValue() any { return v.N } func (v Model) ColumnName() sequel.ColumnConvertClause[LongText] { - return sequel.Column("name", v.Name, func(val LongText) any { - return (string)(val) - }) + return sequel.Column("name", v.Name, convertLongTextToValue) } func (v Model) ColumnF() sequel.ColumnConvertClause[Flag] { - return sequel.Column("f", v.F, func(val Flag) any { - return (bool)(val) - }) + return sequel.Column("f", v.F, convertFlagToValue) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint] { - return sequel.Column("id", v.ID, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUintToValue) } func (v Model) ColumnN() sequel.ColumnClause[int64] { return sequel.BasicColumn("n", v.N) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertLongTextToValue(val LongText) any { + return (string)(val) +} +func convertFlagToValue(val Flag) any { + return (bool)(val) +} diff --git a/examples/testcase/struct-field/pk/auto-incr/int/generated.go b/examples/testcase/struct-field/pk/auto-incr/int/generated.go index 3aee8481..5d94743d 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int] { - return sequel.Column("id", v.ID, func(val int) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertIntToValue) +} + +func convertIntToValue(val int) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl index 3aee8481..5d94743d 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int] { - return sequel.Column("id", v.ID, func(val int) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertIntToValue) +} + +func convertIntToValue(val int) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl index ace04863..0a35afa5 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int16] { - return sequel.Column("id", v.ID, func(val int16) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertInt16ToValue) +} + +func convertInt16ToValue(val int16) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int16/generated.go b/examples/testcase/struct-field/pk/auto-incr/int16/generated.go index ace04863..0a35afa5 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int16/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int16/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int16] { - return sequel.Column("id", v.ID, func(val int16) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertInt16ToValue) +} + +func convertInt16ToValue(val int16) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go index 290dce4e..c7c5e3b3 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int32] { - return sequel.Column("id", v.ID, func(val int32) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertInt32ToValue) +} + +func convertInt32ToValue(val int32) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl index 290dce4e..c7c5e3b3 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int32] { - return sequel.Column("id", v.ID, func(val int32) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertInt32ToValue) +} + +func convertInt32ToValue(val int32) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go index 6a2c5cf0..737b6cba 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int8] { - return sequel.Column("id", v.ID, func(val int8) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertInt8ToValue) +} + +func convertInt8ToValue(val int8) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl index 6a2c5cf0..737b6cba 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[int8] { - return sequel.Column("id", v.ID, func(val int8) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertInt8ToValue) +} + +func convertInt8ToValue(val int8) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go index 5793c550..537be1da 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint] { - return sequel.Column("id", v.ID, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUintToValue) +} + +func convertUintToValue(val uint) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl index 5793c550..537be1da 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint] { - return sequel.Column("id", v.ID, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUintToValue) +} + +func convertUintToValue(val uint) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go index 1acd6003..3aad00d5 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint16] { - return sequel.Column("id", v.ID, func(val uint16) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUint16ToValue) +} + +func convertUint16ToValue(val uint16) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl index 1acd6003..3aad00d5 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint16] { - return sequel.Column("id", v.ID, func(val uint16) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUint16ToValue) +} + +func convertUint16ToValue(val uint16) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go index c8640fc5..809fb121 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint32] { - return sequel.Column("id", v.ID, func(val uint32) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUint32ToValue) +} + +func convertUint32ToValue(val uint32) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl index c8640fc5..809fb121 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint32] { - return sequel.Column("id", v.ID, func(val uint32) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUint32ToValue) +} + +func convertUint32ToValue(val uint32) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go index 159b08fb..6ef5abb2 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return v.ID } func (v Model) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) +} + +func convertUint64ToValue(val uint64) any { + return val } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl index 159b08fb..6ef5abb2 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return v.ID } func (v Model) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) +} + +func convertUint64ToValue(val uint64) any { + return val } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go index 6a9dcd34..b97b2614 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint8] { - return sequel.Column("id", v.ID, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUint8ToValue) +} + +func convertUint8ToValue(val uint8) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl index 6a9dcd34..b97b2614 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl @@ -39,7 +39,9 @@ func (v Model) IDValue() any { return (int64)(v.ID) } func (v Model) ColumnID() sequel.ColumnConvertClause[uint8] { - return sequel.Column("id", v.ID, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUint8ToValue) +} + +func convertUint8ToValue(val uint8) any { + return (int64)(val) } diff --git a/examples/testcase/struct-field/pk/composite/generated.go b/examples/testcase/struct-field/pk/composite/generated.go index e0767fd5..87006a46 100755 --- a/examples/testcase/struct-field/pk/composite/generated.go +++ b/examples/testcase/struct-field/pk/composite/generated.go @@ -67,7 +67,9 @@ func (v Composite) ColumnCol2() sequel.ColumnClause[bool] { return sequel.BasicColumn("col_2", v.Col2) } func (v Composite) ColumnCol3() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("col_3", v.Col3, func(val uuid.UUID) any { - return val - }) + return sequel.Column("col_3", v.Col3, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val } diff --git a/examples/testcase/struct-field/pk/composite/generated.go.tpl b/examples/testcase/struct-field/pk/composite/generated.go.tpl index e0767fd5..87006a46 100644 --- a/examples/testcase/struct-field/pk/composite/generated.go.tpl +++ b/examples/testcase/struct-field/pk/composite/generated.go.tpl @@ -67,7 +67,9 @@ func (v Composite) ColumnCol2() sequel.ColumnClause[bool] { return sequel.BasicColumn("col_2", v.Col2) } func (v Composite) ColumnCol3() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("col_3", v.Col3, func(val uuid.UUID) any { - return val - }) + return sequel.Column("col_3", v.Col3, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val } diff --git a/examples/testcase/struct-field/pk/generated.go b/examples/testcase/struct-field/pk/generated.go index 6f00a021..fbcb4b03 100755 --- a/examples/testcase/struct-field/pk/generated.go +++ b/examples/testcase/struct-field/pk/generated.go @@ -60,17 +60,13 @@ func (v Car) ManucDateValue() any { return v.ManucDate } func (v Car) ColumnID() sequel.ColumnConvertClause[PK] { - return sequel.Column("id", v.ID, func(val PK) any { - return val - }) + return sequel.Column("id", v.ID, convertPkToValue) } func (v Car) ColumnNo() sequel.ColumnClause[string] { return sequel.BasicColumn("no", v.No) } func (v Car) ColumnColor() sequel.ColumnConvertClause[Color] { - return sequel.Column("color", v.Color, func(val Color) any { - return (int64)(val) - }) + return sequel.Column("color", v.Color, convertColorToValue) } func (v Car) ColumnManucDate() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("manuc_date", v.ManucDate) @@ -117,9 +113,7 @@ func (v House) NoValue() any { return v.No } func (v House) ColumnID() sequel.ColumnConvertClause[uint] { - return sequel.Column("id", v.ID, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUintToValue) } func (v House) ColumnNo() sequel.ColumnClause[string] { return sequel.BasicColumn("no", v.No) @@ -179,15 +173,27 @@ func (v User) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v User) ColumnName() sequel.ColumnConvertClause[LongText] { - return sequel.Column("name", v.Name, func(val LongText) any { - return (string)(val) - }) + return sequel.Column("name", v.Name, convertLongTextToValue) } func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("age", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnEmail() sequel.ColumnClause[string] { return sequel.BasicColumn("email", v.Email) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} +func convertPkToValue(val PK) any { + return val +} +func convertLongTextToValue(val LongText) any { + return (string)(val) +} +func convertColorToValue(val Color) any { + return (int64)(val) +} diff --git a/examples/testcase/struct-field/pk/generated.go.tpl b/examples/testcase/struct-field/pk/generated.go.tpl index 6f00a021..fbcb4b03 100644 --- a/examples/testcase/struct-field/pk/generated.go.tpl +++ b/examples/testcase/struct-field/pk/generated.go.tpl @@ -60,17 +60,13 @@ func (v Car) ManucDateValue() any { return v.ManucDate } func (v Car) ColumnID() sequel.ColumnConvertClause[PK] { - return sequel.Column("id", v.ID, func(val PK) any { - return val - }) + return sequel.Column("id", v.ID, convertPkToValue) } func (v Car) ColumnNo() sequel.ColumnClause[string] { return sequel.BasicColumn("no", v.No) } func (v Car) ColumnColor() sequel.ColumnConvertClause[Color] { - return sequel.Column("color", v.Color, func(val Color) any { - return (int64)(val) - }) + return sequel.Column("color", v.Color, convertColorToValue) } func (v Car) ColumnManucDate() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("manuc_date", v.ManucDate) @@ -117,9 +113,7 @@ func (v House) NoValue() any { return v.No } func (v House) ColumnID() sequel.ColumnConvertClause[uint] { - return sequel.Column("id", v.ID, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("id", v.ID, convertUintToValue) } func (v House) ColumnNo() sequel.ColumnClause[string] { return sequel.BasicColumn("no", v.No) @@ -179,15 +173,27 @@ func (v User) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v User) ColumnName() sequel.ColumnConvertClause[LongText] { - return sequel.Column("name", v.Name, func(val LongText) any { - return (string)(val) - }) + return sequel.Column("name", v.Name, convertLongTextToValue) } func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("age", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnEmail() sequel.ColumnClause[string] { return sequel.BasicColumn("email", v.Email) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} +func convertPkToValue(val PK) any { + return val +} +func convertLongTextToValue(val LongText) any { + return (string)(val) +} +func convertColorToValue(val Color) any { + return (int64)(val) +} diff --git a/examples/testcase/struct-field/pk/uuid/generated.go b/examples/testcase/struct-field/pk/uuid/generated.go index 6fa5e887..0b8f3393 100755 --- a/examples/testcase/struct-field/pk/uuid/generated.go +++ b/examples/testcase/struct-field/pk/uuid/generated.go @@ -38,10 +38,12 @@ func (v User) NameValue() any { return v.Name } func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) } func (v User) ColumnName() sequel.ColumnClause[string] { return sequel.BasicColumn("name", v.Name) } + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} diff --git a/examples/testcase/struct-field/pk/uuid/generated.go.tpl b/examples/testcase/struct-field/pk/uuid/generated.go.tpl index 6fa5e887..0b8f3393 100644 --- a/examples/testcase/struct-field/pk/uuid/generated.go.tpl +++ b/examples/testcase/struct-field/pk/uuid/generated.go.tpl @@ -38,10 +38,12 @@ func (v User) NameValue() any { return v.Name } func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) } func (v User) ColumnName() sequel.ColumnClause[string] { return sequel.BasicColumn("name", v.Name) } + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} diff --git a/examples/testcase/struct-field/pointer/generated.go b/examples/testcase/struct-field/pointer/generated.go index ace46693..53da37fb 100755 --- a/examples/testcase/struct-field/pointer/generated.go +++ b/examples/testcase/struct-field/pointer/generated.go @@ -289,157 +289,165 @@ func (v Ptr) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v Ptr) ColumnStr() sequel.ColumnConvertClause[*string] { - return sequel.Column("str", v.Str, func(val *string) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("str", v.Str, convertPtrstringToValue) } func (v Ptr) ColumnBytes() sequel.ColumnConvertClause[*[]byte] { - return sequel.Column("bytes", v.Bytes, func(val *[]byte) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("bytes", v.Bytes, convertPtrArraybyteToValue) } func (v Ptr) ColumnBool() sequel.ColumnConvertClause[*bool] { - return sequel.Column("bool", v.Bool, func(val *bool) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("bool", v.Bool, convertPtrboolToValue) } func (v Ptr) ColumnInt() sequel.ColumnConvertClause[*int] { - return sequel.Column("int", v.Int, func(val *int) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int", v.Int, convertPtrintToValue) } func (v Ptr) ColumnInt8() sequel.ColumnConvertClause[*int8] { - return sequel.Column("int_8", v.Int8, func(val *int8) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int_8", v.Int8, convertPtrint8ToValue) } func (v Ptr) ColumnInt16() sequel.ColumnConvertClause[*int16] { - return sequel.Column("int_16", v.Int16, func(val *int16) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int_16", v.Int16, convertPtrint16ToValue) } func (v Ptr) ColumnInt32() sequel.ColumnConvertClause[*int32] { - return sequel.Column("int_32", v.Int32, func(val *int32) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int_32", v.Int32, convertPtrint32ToValue) } func (v Ptr) ColumnInt64() sequel.ColumnConvertClause[*int64] { - return sequel.Column("int_64", v.Int64, func(val *int64) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("int_64", v.Int64, convertPtrint64ToValue) } func (v Ptr) ColumnUint() sequel.ColumnConvertClause[*uint] { - return sequel.Column("uint", v.Uint, func(val *uint) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint", v.Uint, convertPtruintToValue) } func (v Ptr) ColumnUint8() sequel.ColumnConvertClause[*uint8] { - return sequel.Column("uint_8", v.Uint8, func(val *uint8) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint_8", v.Uint8, convertPtruint8ToValue) } func (v Ptr) ColumnUint16() sequel.ColumnConvertClause[*uint16] { - return sequel.Column("uint_16", v.Uint16, func(val *uint16) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint_16", v.Uint16, convertPtruint16ToValue) } func (v Ptr) ColumnUint32() sequel.ColumnConvertClause[*uint32] { - return sequel.Column("uint_32", v.Uint32, func(val *uint32) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint_32", v.Uint32, convertPtruint32ToValue) } func (v Ptr) ColumnUint64() sequel.ColumnConvertClause[*uint64] { - return sequel.Column("uint_64", v.Uint64, func(val *uint64) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("uint_64", v.Uint64, convertPtruint64ToValue) } func (v Ptr) ColumnF32() sequel.ColumnConvertClause[*float32] { - return sequel.Column("f_32", v.F32, func(val *float32) any { - if val != nil { - return (float64)(*val) - } - return nil - }) + return sequel.Column("f_32", v.F32, convertPtrfloat32ToValue) } func (v Ptr) ColumnF64() sequel.ColumnConvertClause[*float64] { - return sequel.Column("f_64", v.F64, func(val *float64) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("f_64", v.F64, convertPtrfloat64ToValue) } func (v Ptr) ColumnTime() sequel.ColumnConvertClause[*time.Time] { - return sequel.Column("time", v.Time, func(val *time.Time) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("time", v.Time, convertPtrtimeTimeToValue) } func (v Ptr) ColumnNested() sequel.ColumnConvertClause[*nested] { - return sequel.Column("nested", v.Nested, func(val *nested) any { - if val != nil { - return encoding.JSONValue(*val) - } - return nil - }) + return sequel.Column("nested", v.Nested, convertPtrnestedToValue) } func (v Ptr) ColumnEmbeddedTime() sequel.ColumnConvertClause[*time.Time] { - return sequel.Column("embedded_time", v.deepNested.embedded.EmbeddedTime, func(val *time.Time) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("embedded_time", v.deepNested.embedded.EmbeddedTime, convertPtrtimeTimeToValue) } func (v Ptr) ColumnAnyTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("any_time", v.deepNested.embedded.AnyTime) } func (v Ptr) ColumnPtrStr() sequel.ColumnConvertClause[*string] { - return sequel.Column("ptr_str", v.deepNested.embedded.PtrStr, func(val *string) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("ptr_str", v.deepNested.embedded.PtrStr, convertPtrstringToValue) +} + +func convertPtruintToValue(val *uint) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtruint8ToValue(val *uint8) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtruint64ToValue(val *uint64) any { + if val != nil { + return *val + } + return nil +} +func convertPtruint32ToValue(val *uint32) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtruint16ToValue(val *uint16) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrtimeTimeToValue(val *time.Time) any { + if val != nil { + return *val + } + return nil +} +func convertPtrstringToValue(val *string) any { + if val != nil { + return *val + } + return nil +} +func convertPtrnestedToValue(val *nested) any { + if val != nil { + return encoding.JSONValue(*val) + } + return nil +} +func convertPtrintToValue(val *int) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrint8ToValue(val *int8) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrint64ToValue(val *int64) any { + if val != nil { + return *val + } + return nil +} +func convertPtrint32ToValue(val *int32) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrint16ToValue(val *int16) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrfloat64ToValue(val *float64) any { + if val != nil { + return *val + } + return nil +} +func convertPtrfloat32ToValue(val *float32) any { + if val != nil { + return (float64)(*val) + } + return nil +} +func convertPtrboolToValue(val *bool) any { + if val != nil { + return *val + } + return nil +} +func convertPtrArraybyteToValue(val *[]byte) any { + if val != nil { + return *val + } + return nil } diff --git a/examples/testcase/struct-field/pointer/generated.go.tpl b/examples/testcase/struct-field/pointer/generated.go.tpl index ace46693..53da37fb 100644 --- a/examples/testcase/struct-field/pointer/generated.go.tpl +++ b/examples/testcase/struct-field/pointer/generated.go.tpl @@ -289,157 +289,165 @@ func (v Ptr) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v Ptr) ColumnStr() sequel.ColumnConvertClause[*string] { - return sequel.Column("str", v.Str, func(val *string) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("str", v.Str, convertPtrstringToValue) } func (v Ptr) ColumnBytes() sequel.ColumnConvertClause[*[]byte] { - return sequel.Column("bytes", v.Bytes, func(val *[]byte) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("bytes", v.Bytes, convertPtrArraybyteToValue) } func (v Ptr) ColumnBool() sequel.ColumnConvertClause[*bool] { - return sequel.Column("bool", v.Bool, func(val *bool) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("bool", v.Bool, convertPtrboolToValue) } func (v Ptr) ColumnInt() sequel.ColumnConvertClause[*int] { - return sequel.Column("int", v.Int, func(val *int) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int", v.Int, convertPtrintToValue) } func (v Ptr) ColumnInt8() sequel.ColumnConvertClause[*int8] { - return sequel.Column("int_8", v.Int8, func(val *int8) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int_8", v.Int8, convertPtrint8ToValue) } func (v Ptr) ColumnInt16() sequel.ColumnConvertClause[*int16] { - return sequel.Column("int_16", v.Int16, func(val *int16) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int_16", v.Int16, convertPtrint16ToValue) } func (v Ptr) ColumnInt32() sequel.ColumnConvertClause[*int32] { - return sequel.Column("int_32", v.Int32, func(val *int32) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("int_32", v.Int32, convertPtrint32ToValue) } func (v Ptr) ColumnInt64() sequel.ColumnConvertClause[*int64] { - return sequel.Column("int_64", v.Int64, func(val *int64) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("int_64", v.Int64, convertPtrint64ToValue) } func (v Ptr) ColumnUint() sequel.ColumnConvertClause[*uint] { - return sequel.Column("uint", v.Uint, func(val *uint) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint", v.Uint, convertPtruintToValue) } func (v Ptr) ColumnUint8() sequel.ColumnConvertClause[*uint8] { - return sequel.Column("uint_8", v.Uint8, func(val *uint8) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint_8", v.Uint8, convertPtruint8ToValue) } func (v Ptr) ColumnUint16() sequel.ColumnConvertClause[*uint16] { - return sequel.Column("uint_16", v.Uint16, func(val *uint16) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint_16", v.Uint16, convertPtruint16ToValue) } func (v Ptr) ColumnUint32() sequel.ColumnConvertClause[*uint32] { - return sequel.Column("uint_32", v.Uint32, func(val *uint32) any { - if val != nil { - return (int64)(*val) - } - return nil - }) + return sequel.Column("uint_32", v.Uint32, convertPtruint32ToValue) } func (v Ptr) ColumnUint64() sequel.ColumnConvertClause[*uint64] { - return sequel.Column("uint_64", v.Uint64, func(val *uint64) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("uint_64", v.Uint64, convertPtruint64ToValue) } func (v Ptr) ColumnF32() sequel.ColumnConvertClause[*float32] { - return sequel.Column("f_32", v.F32, func(val *float32) any { - if val != nil { - return (float64)(*val) - } - return nil - }) + return sequel.Column("f_32", v.F32, convertPtrfloat32ToValue) } func (v Ptr) ColumnF64() sequel.ColumnConvertClause[*float64] { - return sequel.Column("f_64", v.F64, func(val *float64) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("f_64", v.F64, convertPtrfloat64ToValue) } func (v Ptr) ColumnTime() sequel.ColumnConvertClause[*time.Time] { - return sequel.Column("time", v.Time, func(val *time.Time) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("time", v.Time, convertPtrtimeTimeToValue) } func (v Ptr) ColumnNested() sequel.ColumnConvertClause[*nested] { - return sequel.Column("nested", v.Nested, func(val *nested) any { - if val != nil { - return encoding.JSONValue(*val) - } - return nil - }) + return sequel.Column("nested", v.Nested, convertPtrnestedToValue) } func (v Ptr) ColumnEmbeddedTime() sequel.ColumnConvertClause[*time.Time] { - return sequel.Column("embedded_time", v.deepNested.embedded.EmbeddedTime, func(val *time.Time) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("embedded_time", v.deepNested.embedded.EmbeddedTime, convertPtrtimeTimeToValue) } func (v Ptr) ColumnAnyTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("any_time", v.deepNested.embedded.AnyTime) } func (v Ptr) ColumnPtrStr() sequel.ColumnConvertClause[*string] { - return sequel.Column("ptr_str", v.deepNested.embedded.PtrStr, func(val *string) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("ptr_str", v.deepNested.embedded.PtrStr, convertPtrstringToValue) +} + +func convertPtruintToValue(val *uint) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtruint8ToValue(val *uint8) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtruint64ToValue(val *uint64) any { + if val != nil { + return *val + } + return nil +} +func convertPtruint32ToValue(val *uint32) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtruint16ToValue(val *uint16) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrtimeTimeToValue(val *time.Time) any { + if val != nil { + return *val + } + return nil +} +func convertPtrstringToValue(val *string) any { + if val != nil { + return *val + } + return nil +} +func convertPtrnestedToValue(val *nested) any { + if val != nil { + return encoding.JSONValue(*val) + } + return nil +} +func convertPtrintToValue(val *int) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrint8ToValue(val *int8) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrint64ToValue(val *int64) any { + if val != nil { + return *val + } + return nil +} +func convertPtrint32ToValue(val *int32) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrint16ToValue(val *int16) any { + if val != nil { + return (int64)(*val) + } + return nil +} +func convertPtrfloat64ToValue(val *float64) any { + if val != nil { + return *val + } + return nil +} +func convertPtrfloat32ToValue(val *float32) any { + if val != nil { + return (float64)(*val) + } + return nil +} +func convertPtrboolToValue(val *bool) any { + if val != nil { + return *val + } + return nil +} +func convertPtrArraybyteToValue(val *[]byte) any { + if val != nil { + return *val + } + return nil } diff --git a/examples/testcase/struct-field/primitive/generated.go b/examples/testcase/struct-field/primitive/generated.go index 8c156896..aea2b303 100755 --- a/examples/testcase/struct-field/primitive/generated.go +++ b/examples/testcase/struct-field/primitive/generated.go @@ -113,65 +113,43 @@ func (v Primitive) ColumnStr() sequel.ColumnClause[string] { return sequel.BasicColumn("str", v.Str) } func (v Primitive) ColumnBytes() sequel.ColumnConvertClause[[]byte] { - return sequel.Column("bytes", v.Bytes, func(val []byte) any { - return val - }) + return sequel.Column("bytes", v.Bytes, convertArraybyteToValue) } func (v Primitive) ColumnBool() sequel.ColumnClause[bool] { return sequel.BasicColumn("bool", v.Bool) } func (v Primitive) ColumnInt() sequel.ColumnConvertClause[int] { - return sequel.Column("int", v.Int, func(val int) any { - return (int64)(val) - }) + return sequel.Column("int", v.Int, convertIntToValue) } func (v Primitive) ColumnInt8() sequel.ColumnConvertClause[int8] { - return sequel.Column("int_8", v.Int8, func(val int8) any { - return (int64)(val) - }) + return sequel.Column("int_8", v.Int8, convertInt8ToValue) } func (v Primitive) ColumnInt16() sequel.ColumnConvertClause[int16] { - return sequel.Column("int_16", v.Int16, func(val int16) any { - return (int64)(val) - }) + return sequel.Column("int_16", v.Int16, convertInt16ToValue) } func (v Primitive) ColumnInt32() sequel.ColumnConvertClause[int32] { - return sequel.Column("int_32", v.Int32, func(val int32) any { - return (int64)(val) - }) + return sequel.Column("int_32", v.Int32, convertInt32ToValue) } func (v Primitive) ColumnInt64() sequel.ColumnClause[int64] { return sequel.BasicColumn("int_64", v.Int64) } func (v Primitive) ColumnUint() sequel.ColumnConvertClause[uint] { - return sequel.Column("uint", v.Uint, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("uint", v.Uint, convertUintToValue) } func (v Primitive) ColumnUint8() sequel.ColumnConvertClause[uint8] { - return sequel.Column("uint_8", v.Uint8, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("uint_8", v.Uint8, convertUint8ToValue) } func (v Primitive) ColumnUint16() sequel.ColumnConvertClause[uint16] { - return sequel.Column("uint_16", v.Uint16, func(val uint16) any { - return (int64)(val) - }) + return sequel.Column("uint_16", v.Uint16, convertUint16ToValue) } func (v Primitive) ColumnUint32() sequel.ColumnConvertClause[uint32] { - return sequel.Column("uint_32", v.Uint32, func(val uint32) any { - return (int64)(val) - }) + return sequel.Column("uint_32", v.Uint32, convertUint32ToValue) } func (v Primitive) ColumnUint64() sequel.ColumnConvertClause[uint64] { - return sequel.Column("uint_64", v.Uint64, func(val uint64) any { - return val - }) + return sequel.Column("uint_64", v.Uint64, convertUint64ToValue) } func (v Primitive) ColumnF32() sequel.ColumnConvertClause[float32] { - return sequel.Column("f_32", v.F32, func(val float32) any { - return (float64)(val) - }) + return sequel.Column("f_32", v.F32, convertFloat32ToValue) } func (v Primitive) ColumnF64() sequel.ColumnClause[float64] { return sequel.BasicColumn("f_64", v.F64) @@ -179,3 +157,37 @@ func (v Primitive) ColumnF64() sequel.ColumnClause[float64] { func (v Primitive) ColumnTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("time", v.Time) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} +func convertUint64ToValue(val uint64) any { + return val +} +func convertUint32ToValue(val uint32) any { + return (int64)(val) +} +func convertUint16ToValue(val uint16) any { + return (int64)(val) +} +func convertIntToValue(val int) any { + return (int64)(val) +} +func convertInt8ToValue(val int8) any { + return (int64)(val) +} +func convertInt32ToValue(val int32) any { + return (int64)(val) +} +func convertInt16ToValue(val int16) any { + return (int64)(val) +} +func convertFloat32ToValue(val float32) any { + return (float64)(val) +} +func convertArraybyteToValue(val []byte) any { + return val +} diff --git a/examples/testcase/struct-field/primitive/generated.go.tpl b/examples/testcase/struct-field/primitive/generated.go.tpl index 8c156896..aea2b303 100644 --- a/examples/testcase/struct-field/primitive/generated.go.tpl +++ b/examples/testcase/struct-field/primitive/generated.go.tpl @@ -113,65 +113,43 @@ func (v Primitive) ColumnStr() sequel.ColumnClause[string] { return sequel.BasicColumn("str", v.Str) } func (v Primitive) ColumnBytes() sequel.ColumnConvertClause[[]byte] { - return sequel.Column("bytes", v.Bytes, func(val []byte) any { - return val - }) + return sequel.Column("bytes", v.Bytes, convertArraybyteToValue) } func (v Primitive) ColumnBool() sequel.ColumnClause[bool] { return sequel.BasicColumn("bool", v.Bool) } func (v Primitive) ColumnInt() sequel.ColumnConvertClause[int] { - return sequel.Column("int", v.Int, func(val int) any { - return (int64)(val) - }) + return sequel.Column("int", v.Int, convertIntToValue) } func (v Primitive) ColumnInt8() sequel.ColumnConvertClause[int8] { - return sequel.Column("int_8", v.Int8, func(val int8) any { - return (int64)(val) - }) + return sequel.Column("int_8", v.Int8, convertInt8ToValue) } func (v Primitive) ColumnInt16() sequel.ColumnConvertClause[int16] { - return sequel.Column("int_16", v.Int16, func(val int16) any { - return (int64)(val) - }) + return sequel.Column("int_16", v.Int16, convertInt16ToValue) } func (v Primitive) ColumnInt32() sequel.ColumnConvertClause[int32] { - return sequel.Column("int_32", v.Int32, func(val int32) any { - return (int64)(val) - }) + return sequel.Column("int_32", v.Int32, convertInt32ToValue) } func (v Primitive) ColumnInt64() sequel.ColumnClause[int64] { return sequel.BasicColumn("int_64", v.Int64) } func (v Primitive) ColumnUint() sequel.ColumnConvertClause[uint] { - return sequel.Column("uint", v.Uint, func(val uint) any { - return (int64)(val) - }) + return sequel.Column("uint", v.Uint, convertUintToValue) } func (v Primitive) ColumnUint8() sequel.ColumnConvertClause[uint8] { - return sequel.Column("uint_8", v.Uint8, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("uint_8", v.Uint8, convertUint8ToValue) } func (v Primitive) ColumnUint16() sequel.ColumnConvertClause[uint16] { - return sequel.Column("uint_16", v.Uint16, func(val uint16) any { - return (int64)(val) - }) + return sequel.Column("uint_16", v.Uint16, convertUint16ToValue) } func (v Primitive) ColumnUint32() sequel.ColumnConvertClause[uint32] { - return sequel.Column("uint_32", v.Uint32, func(val uint32) any { - return (int64)(val) - }) + return sequel.Column("uint_32", v.Uint32, convertUint32ToValue) } func (v Primitive) ColumnUint64() sequel.ColumnConvertClause[uint64] { - return sequel.Column("uint_64", v.Uint64, func(val uint64) any { - return val - }) + return sequel.Column("uint_64", v.Uint64, convertUint64ToValue) } func (v Primitive) ColumnF32() sequel.ColumnConvertClause[float32] { - return sequel.Column("f_32", v.F32, func(val float32) any { - return (float64)(val) - }) + return sequel.Column("f_32", v.F32, convertFloat32ToValue) } func (v Primitive) ColumnF64() sequel.ColumnClause[float64] { return sequel.BasicColumn("f_64", v.F64) @@ -179,3 +157,37 @@ func (v Primitive) ColumnF64() sequel.ColumnClause[float64] { func (v Primitive) ColumnTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("time", v.Time) } + +func convertUintToValue(val uint) any { + return (int64)(val) +} +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} +func convertUint64ToValue(val uint64) any { + return val +} +func convertUint32ToValue(val uint32) any { + return (int64)(val) +} +func convertUint16ToValue(val uint16) any { + return (int64)(val) +} +func convertIntToValue(val int) any { + return (int64)(val) +} +func convertInt8ToValue(val int8) any { + return (int64)(val) +} +func convertInt32ToValue(val int32) any { + return (int64)(val) +} +func convertInt16ToValue(val int16) any { + return (int64)(val) +} +func convertFloat32ToValue(val float32) any { + return (float64)(val) +} +func convertArraybyteToValue(val []byte) any { + return val +} diff --git a/examples/testcase/struct-field/slice/generated.go b/examples/testcase/struct-field/slice/generated.go index 95dd2aec..70e8a3af 100755 --- a/examples/testcase/struct-field/slice/generated.go +++ b/examples/testcase/struct-field/slice/generated.go @@ -127,82 +127,99 @@ func (v Slice) F64ListValue() any { return (sqltype.Float64Slice[float64])(v.F64List) } func (v Slice) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) } func (v Slice) ColumnBoolList() sequel.ColumnConvertClause[[]bool] { - return sequel.Column("bool_list", v.BoolList, func(val []bool) any { - return (sqltype.BoolSlice[bool])(val) - }) + return sequel.Column("bool_list", v.BoolList, convertArrayboolToValue) } func (v Slice) ColumnStrList() sequel.ColumnConvertClause[[]string] { - return sequel.Column("str_list", v.StrList, func(val []string) any { - return (sqltype.StringSlice[string])(val) - }) + return sequel.Column("str_list", v.StrList, convertArraystringToValue) } func (v Slice) ColumnCustomStrList() sequel.ColumnConvertClause[[]customStr] { - return sequel.Column("custom_str_list", v.CustomStrList, func(val []customStr) any { - return (sqltype.StringSlice[customStr])(val) - }) + return sequel.Column("custom_str_list", v.CustomStrList, convertArraycustomStrToValue) } func (v Slice) ColumnIntList() sequel.ColumnConvertClause[[]int] { - return sequel.Column("int_list", v.IntList, func(val []int) any { - return (sqltype.IntSlice[int])(val) - }) + return sequel.Column("int_list", v.IntList, convertArrayintToValue) } func (v Slice) ColumnInt8List() sequel.ColumnConvertClause[[]int8] { - return sequel.Column("int_8_list", v.Int8List, func(val []int8) any { - return (sqltype.Int8Slice[int8])(val) - }) + return sequel.Column("int_8_list", v.Int8List, convertArrayint8ToValue) } func (v Slice) ColumnInt16List() sequel.ColumnConvertClause[[]int16] { - return sequel.Column("int_16_list", v.Int16List, func(val []int16) any { - return (sqltype.Int16Slice[int16])(val) - }) + return sequel.Column("int_16_list", v.Int16List, convertArrayint16ToValue) } func (v Slice) ColumnInt32List() sequel.ColumnConvertClause[[]int32] { - return sequel.Column("int_32_list", v.Int32List, func(val []int32) any { - return (sqltype.Int32Slice[int32])(val) - }) + return sequel.Column("int_32_list", v.Int32List, convertArrayint32ToValue) } func (v Slice) ColumnInt64List() sequel.ColumnConvertClause[[]int64] { - return sequel.Column("int_64_list", v.Int64List, func(val []int64) any { - return (sqltype.Int64Slice[int64])(val) - }) + return sequel.Column("int_64_list", v.Int64List, convertArrayint64ToValue) } func (v Slice) ColumnUintList() sequel.ColumnConvertClause[[]uint] { - return sequel.Column("uint_list", v.UintList, func(val []uint) any { - return (sqltype.UintSlice[uint])(val) - }) + return sequel.Column("uint_list", v.UintList, convertArrayuintToValue) } func (v Slice) ColumnUint8List() sequel.ColumnConvertClause[[]uint8] { - return sequel.Column("uint_8_list", v.Uint8List, func(val []uint8) any { - return (sqltype.Uint8Slice[uint8])(val) - }) + return sequel.Column("uint_8_list", v.Uint8List, convertArrayuint8ToValue) } func (v Slice) ColumnUint16List() sequel.ColumnConvertClause[[]uint16] { - return sequel.Column("uint_16_list", v.Uint16List, func(val []uint16) any { - return (sqltype.Uint16Slice[uint16])(val) - }) + return sequel.Column("uint_16_list", v.Uint16List, convertArrayuint16ToValue) } func (v Slice) ColumnUint32List() sequel.ColumnConvertClause[[]uint32] { - return sequel.Column("uint_32_list", v.Uint32List, func(val []uint32) any { - return (sqltype.Uint32Slice[uint32])(val) - }) + return sequel.Column("uint_32_list", v.Uint32List, convertArrayuint32ToValue) } func (v Slice) ColumnUint64List() sequel.ColumnConvertClause[[]uint64] { - return sequel.Column("uint_64_list", v.Uint64List, func(val []uint64) any { - return (sqltype.Uint64Slice[uint64])(val) - }) + return sequel.Column("uint_64_list", v.Uint64List, convertArrayuint64ToValue) } func (v Slice) ColumnF32List() sequel.ColumnConvertClause[[]float32] { - return sequel.Column("f_32_list", v.F32List, func(val []float32) any { - return (sqltype.Float32Slice[float32])(val) - }) + return sequel.Column("f_32_list", v.F32List, convertArrayfloat32ToValue) } func (v Slice) ColumnF64List() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("f_64_list", v.F64List, func(val []float64) any { - return (sqltype.Float64Slice[float64])(val) - }) + return sequel.Column("f_64_list", v.F64List, convertArrayfloat64ToValue) +} + +func convertUint64ToValue(val uint64) any { + return val +} +func convertArrayuintToValue(val []uint) any { + return (sqltype.UintSlice[uint])(val) +} +func convertArrayuint8ToValue(val []uint8) any { + return (sqltype.Uint8Slice[uint8])(val) +} +func convertArrayuint64ToValue(val []uint64) any { + return (sqltype.Uint64Slice[uint64])(val) +} +func convertArrayuint32ToValue(val []uint32) any { + return (sqltype.Uint32Slice[uint32])(val) +} +func convertArrayuint16ToValue(val []uint16) any { + return (sqltype.Uint16Slice[uint16])(val) +} +func convertArraystringToValue(val []string) any { + return (sqltype.StringSlice[string])(val) +} +func convertArrayintToValue(val []int) any { + return (sqltype.IntSlice[int])(val) +} +func convertArrayint8ToValue(val []int8) any { + return (sqltype.Int8Slice[int8])(val) +} +func convertArrayint64ToValue(val []int64) any { + return (sqltype.Int64Slice[int64])(val) +} +func convertArrayint32ToValue(val []int32) any { + return (sqltype.Int32Slice[int32])(val) +} +func convertArrayint16ToValue(val []int16) any { + return (sqltype.Int16Slice[int16])(val) +} +func convertArrayfloat64ToValue(val []float64) any { + return (sqltype.Float64Slice[float64])(val) +} +func convertArrayfloat32ToValue(val []float32) any { + return (sqltype.Float32Slice[float32])(val) +} +func convertArraycustomStrToValue(val []customStr) any { + return (sqltype.StringSlice[customStr])(val) +} +func convertArrayboolToValue(val []bool) any { + return (sqltype.BoolSlice[bool])(val) } diff --git a/examples/testcase/struct-field/slice/generated.go.tpl b/examples/testcase/struct-field/slice/generated.go.tpl index 95dd2aec..70e8a3af 100644 --- a/examples/testcase/struct-field/slice/generated.go.tpl +++ b/examples/testcase/struct-field/slice/generated.go.tpl @@ -127,82 +127,99 @@ func (v Slice) F64ListValue() any { return (sqltype.Float64Slice[float64])(v.F64List) } func (v Slice) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) } func (v Slice) ColumnBoolList() sequel.ColumnConvertClause[[]bool] { - return sequel.Column("bool_list", v.BoolList, func(val []bool) any { - return (sqltype.BoolSlice[bool])(val) - }) + return sequel.Column("bool_list", v.BoolList, convertArrayboolToValue) } func (v Slice) ColumnStrList() sequel.ColumnConvertClause[[]string] { - return sequel.Column("str_list", v.StrList, func(val []string) any { - return (sqltype.StringSlice[string])(val) - }) + return sequel.Column("str_list", v.StrList, convertArraystringToValue) } func (v Slice) ColumnCustomStrList() sequel.ColumnConvertClause[[]customStr] { - return sequel.Column("custom_str_list", v.CustomStrList, func(val []customStr) any { - return (sqltype.StringSlice[customStr])(val) - }) + return sequel.Column("custom_str_list", v.CustomStrList, convertArraycustomStrToValue) } func (v Slice) ColumnIntList() sequel.ColumnConvertClause[[]int] { - return sequel.Column("int_list", v.IntList, func(val []int) any { - return (sqltype.IntSlice[int])(val) - }) + return sequel.Column("int_list", v.IntList, convertArrayintToValue) } func (v Slice) ColumnInt8List() sequel.ColumnConvertClause[[]int8] { - return sequel.Column("int_8_list", v.Int8List, func(val []int8) any { - return (sqltype.Int8Slice[int8])(val) - }) + return sequel.Column("int_8_list", v.Int8List, convertArrayint8ToValue) } func (v Slice) ColumnInt16List() sequel.ColumnConvertClause[[]int16] { - return sequel.Column("int_16_list", v.Int16List, func(val []int16) any { - return (sqltype.Int16Slice[int16])(val) - }) + return sequel.Column("int_16_list", v.Int16List, convertArrayint16ToValue) } func (v Slice) ColumnInt32List() sequel.ColumnConvertClause[[]int32] { - return sequel.Column("int_32_list", v.Int32List, func(val []int32) any { - return (sqltype.Int32Slice[int32])(val) - }) + return sequel.Column("int_32_list", v.Int32List, convertArrayint32ToValue) } func (v Slice) ColumnInt64List() sequel.ColumnConvertClause[[]int64] { - return sequel.Column("int_64_list", v.Int64List, func(val []int64) any { - return (sqltype.Int64Slice[int64])(val) - }) + return sequel.Column("int_64_list", v.Int64List, convertArrayint64ToValue) } func (v Slice) ColumnUintList() sequel.ColumnConvertClause[[]uint] { - return sequel.Column("uint_list", v.UintList, func(val []uint) any { - return (sqltype.UintSlice[uint])(val) - }) + return sequel.Column("uint_list", v.UintList, convertArrayuintToValue) } func (v Slice) ColumnUint8List() sequel.ColumnConvertClause[[]uint8] { - return sequel.Column("uint_8_list", v.Uint8List, func(val []uint8) any { - return (sqltype.Uint8Slice[uint8])(val) - }) + return sequel.Column("uint_8_list", v.Uint8List, convertArrayuint8ToValue) } func (v Slice) ColumnUint16List() sequel.ColumnConvertClause[[]uint16] { - return sequel.Column("uint_16_list", v.Uint16List, func(val []uint16) any { - return (sqltype.Uint16Slice[uint16])(val) - }) + return sequel.Column("uint_16_list", v.Uint16List, convertArrayuint16ToValue) } func (v Slice) ColumnUint32List() sequel.ColumnConvertClause[[]uint32] { - return sequel.Column("uint_32_list", v.Uint32List, func(val []uint32) any { - return (sqltype.Uint32Slice[uint32])(val) - }) + return sequel.Column("uint_32_list", v.Uint32List, convertArrayuint32ToValue) } func (v Slice) ColumnUint64List() sequel.ColumnConvertClause[[]uint64] { - return sequel.Column("uint_64_list", v.Uint64List, func(val []uint64) any { - return (sqltype.Uint64Slice[uint64])(val) - }) + return sequel.Column("uint_64_list", v.Uint64List, convertArrayuint64ToValue) } func (v Slice) ColumnF32List() sequel.ColumnConvertClause[[]float32] { - return sequel.Column("f_32_list", v.F32List, func(val []float32) any { - return (sqltype.Float32Slice[float32])(val) - }) + return sequel.Column("f_32_list", v.F32List, convertArrayfloat32ToValue) } func (v Slice) ColumnF64List() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("f_64_list", v.F64List, func(val []float64) any { - return (sqltype.Float64Slice[float64])(val) - }) + return sequel.Column("f_64_list", v.F64List, convertArrayfloat64ToValue) +} + +func convertUint64ToValue(val uint64) any { + return val +} +func convertArrayuintToValue(val []uint) any { + return (sqltype.UintSlice[uint])(val) +} +func convertArrayuint8ToValue(val []uint8) any { + return (sqltype.Uint8Slice[uint8])(val) +} +func convertArrayuint64ToValue(val []uint64) any { + return (sqltype.Uint64Slice[uint64])(val) +} +func convertArrayuint32ToValue(val []uint32) any { + return (sqltype.Uint32Slice[uint32])(val) +} +func convertArrayuint16ToValue(val []uint16) any { + return (sqltype.Uint16Slice[uint16])(val) +} +func convertArraystringToValue(val []string) any { + return (sqltype.StringSlice[string])(val) +} +func convertArrayintToValue(val []int) any { + return (sqltype.IntSlice[int])(val) +} +func convertArrayint8ToValue(val []int8) any { + return (sqltype.Int8Slice[int8])(val) +} +func convertArrayint64ToValue(val []int64) any { + return (sqltype.Int64Slice[int64])(val) +} +func convertArrayint32ToValue(val []int32) any { + return (sqltype.Int32Slice[int32])(val) +} +func convertArrayint16ToValue(val []int16) any { + return (sqltype.Int16Slice[int16])(val) +} +func convertArrayfloat64ToValue(val []float64) any { + return (sqltype.Float64Slice[float64])(val) +} +func convertArrayfloat32ToValue(val []float32) any { + return (sqltype.Float32Slice[float32])(val) +} +func convertArraycustomStrToValue(val []customStr) any { + return (sqltype.StringSlice[customStr])(val) +} +func convertArrayboolToValue(val []bool) any { + return (sqltype.BoolSlice[bool])(val) } diff --git a/examples/testcase/struct-field/sql/generated.go b/examples/testcase/struct-field/sql/generated.go index 62d658dc..2c36f6e0 100755 --- a/examples/testcase/struct-field/sql/generated.go +++ b/examples/testcase/struct-field/sql/generated.go @@ -96,38 +96,19 @@ func (v AutoPkLocation) PtrDateValue() any { return nil } func (v AutoPkLocation) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) } func (v AutoPkLocation) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { - return sequel.Column("geo_point", v.GeoPoint, func(val orb.Point) any { - return ewkb.Value(val, 4326) - }) + return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } func (v AutoPkLocation) ColumnPtrGeoPoint() sequel.ColumnConvertClause[*orb.Point] { - return sequel.Column("ptr_geo_point", v.PtrGeoPoint, func(val *orb.Point) any { - if val != nil { - return ewkb.Value(*val, 4326) - } - return nil - }) + return sequel.Column("ptr_geo_point", v.PtrGeoPoint, convertPtrorbPointToValue) } func (v AutoPkLocation) ColumnPtrUUID() sequel.ColumnConvertClause[*uuid.UUID] { - return sequel.Column("ptr_uuid", v.PtrUUID, func(val *uuid.UUID) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("ptr_uuid", v.PtrUUID, convertPtruuidUuidToValue) } func (v AutoPkLocation) ColumnPtrDate() sequel.ColumnConvertClause[*civil.Date] { - return sequel.Column("ptr_date", v.PtrDate, func(val *civil.Date) any { - if val != nil { - return encoding.TextValue(*val) - } - return nil - }) + return sequel.Column("ptr_date", v.PtrDate, convertPtrcivilDateToValue) } func (Location) TableName() string { @@ -179,17 +160,39 @@ func (v Location) UUIDValue() any { return v.UUID } func (v Location) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) } func (v Location) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { - return sequel.Column("geo_point", v.GeoPoint, func(val orb.Point) any { - return ewkb.Value(val, 4326) - }) + return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } func (v Location) ColumnUUID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("uuid", v.UUID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("uuid", v.UUID, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} +func convertUint64ToValue(val uint64) any { + return val +} +func convertPtruuidUuidToValue(val *uuid.UUID) any { + if val != nil { + return *val + } + return nil +} +func convertPtrorbPointToValue(val *orb.Point) any { + if val != nil { + return ewkb.Value(*val, 4326) + } + return nil +} +func convertPtrcivilDateToValue(val *civil.Date) any { + if val != nil { + return encoding.TextValue(*val) + } + return nil +} +func convertOrbPointToValue(val orb.Point) any { + return ewkb.Value(val, 4326) } diff --git a/examples/testcase/struct-field/sql/generated.go.tpl b/examples/testcase/struct-field/sql/generated.go.tpl index 62d658dc..2c36f6e0 100644 --- a/examples/testcase/struct-field/sql/generated.go.tpl +++ b/examples/testcase/struct-field/sql/generated.go.tpl @@ -96,38 +96,19 @@ func (v AutoPkLocation) PtrDateValue() any { return nil } func (v AutoPkLocation) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) } func (v AutoPkLocation) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { - return sequel.Column("geo_point", v.GeoPoint, func(val orb.Point) any { - return ewkb.Value(val, 4326) - }) + return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } func (v AutoPkLocation) ColumnPtrGeoPoint() sequel.ColumnConvertClause[*orb.Point] { - return sequel.Column("ptr_geo_point", v.PtrGeoPoint, func(val *orb.Point) any { - if val != nil { - return ewkb.Value(*val, 4326) - } - return nil - }) + return sequel.Column("ptr_geo_point", v.PtrGeoPoint, convertPtrorbPointToValue) } func (v AutoPkLocation) ColumnPtrUUID() sequel.ColumnConvertClause[*uuid.UUID] { - return sequel.Column("ptr_uuid", v.PtrUUID, func(val *uuid.UUID) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("ptr_uuid", v.PtrUUID, convertPtruuidUuidToValue) } func (v AutoPkLocation) ColumnPtrDate() sequel.ColumnConvertClause[*civil.Date] { - return sequel.Column("ptr_date", v.PtrDate, func(val *civil.Date) any { - if val != nil { - return encoding.TextValue(*val) - } - return nil - }) + return sequel.Column("ptr_date", v.PtrDate, convertPtrcivilDateToValue) } func (Location) TableName() string { @@ -179,17 +160,39 @@ func (v Location) UUIDValue() any { return v.UUID } func (v Location) ColumnID() sequel.ColumnConvertClause[uint64] { - return sequel.Column("id", v.ID, func(val uint64) any { - return val - }) + return sequel.Column("id", v.ID, convertUint64ToValue) } func (v Location) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { - return sequel.Column("geo_point", v.GeoPoint, func(val orb.Point) any { - return ewkb.Value(val, 4326) - }) + return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } func (v Location) ColumnUUID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("uuid", v.UUID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("uuid", v.UUID, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val +} +func convertUint64ToValue(val uint64) any { + return val +} +func convertPtruuidUuidToValue(val *uuid.UUID) any { + if val != nil { + return *val + } + return nil +} +func convertPtrorbPointToValue(val *orb.Point) any { + if val != nil { + return ewkb.Value(*val, 4326) + } + return nil +} +func convertPtrcivilDateToValue(val *civil.Date) any { + if val != nil { + return encoding.TextValue(*val) + } + return nil +} +func convertOrbPointToValue(val orb.Point) any { + return ewkb.Value(val, 4326) } diff --git a/examples/testcase/struct-field/unique/generated.go b/examples/testcase/struct-field/unique/generated.go index adae5f84..c57fe4f9 100755 --- a/examples/testcase/struct-field/unique/generated.go +++ b/examples/testcase/struct-field/unique/generated.go @@ -51,9 +51,7 @@ func (v User) ColumnEmail() sequel.ColumnClause[string] { return sequel.BasicColumn("email", v.Email) } func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("age", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnFirstName() sequel.ColumnClause[string] { return sequel.BasicColumn("first_name", v.FirstName) @@ -61,3 +59,7 @@ func (v User) ColumnFirstName() sequel.ColumnClause[string] { func (v User) ColumnLastName() sequel.ColumnClause[string] { return sequel.BasicColumn("last_name", v.LastName) } + +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} diff --git a/examples/testcase/struct-field/unique/generated.go.tpl b/examples/testcase/struct-field/unique/generated.go.tpl index adae5f84..c57fe4f9 100644 --- a/examples/testcase/struct-field/unique/generated.go.tpl +++ b/examples/testcase/struct-field/unique/generated.go.tpl @@ -51,9 +51,7 @@ func (v User) ColumnEmail() sequel.ColumnClause[string] { return sequel.BasicColumn("email", v.Email) } func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { - return sequel.Column("age", v.Age, func(val uint8) any { - return (int64)(val) - }) + return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnFirstName() sequel.ColumnClause[string] { return sequel.BasicColumn("first_name", v.FirstName) @@ -61,3 +59,7 @@ func (v User) ColumnFirstName() sequel.ColumnClause[string] { func (v User) ColumnLastName() sequel.ColumnClause[string] { return sequel.BasicColumn("last_name", v.LastName) } + +func convertUint8ToValue(val uint8) any { + return (int64)(val) +} diff --git a/examples/testcase/struct-field/valuer/generated.go b/examples/testcase/struct-field/valuer/generated.go index 870c6dc4..69991591 100755 --- a/examples/testcase/struct-field/valuer/generated.go +++ b/examples/testcase/struct-field/valuer/generated.go @@ -57,18 +57,21 @@ func (v B) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v B) ColumnValue() sequel.ColumnConvertClause[anyType] { - return sequel.Column("value", v.Value, func(val anyType) any { - return val - }) + return sequel.Column("value", v.Value, convertAnyTypeToValue) } func (v B) ColumnPtrValue() sequel.ColumnConvertClause[*anyType] { - return sequel.Column("ptr_value", v.PtrValue, func(val *anyType) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("ptr_value", v.PtrValue, convertPtranyTypeToValue) } func (v B) ColumnN() sequel.ColumnClause[string] { return sequel.BasicColumn("n", v.N) } + +func convertPtranyTypeToValue(val *anyType) any { + if val != nil { + return *val + } + return nil +} +func convertAnyTypeToValue(val anyType) any { + return val +} diff --git a/examples/testcase/struct-field/valuer/generated.go.tpl b/examples/testcase/struct-field/valuer/generated.go.tpl index 870c6dc4..69991591 100644 --- a/examples/testcase/struct-field/valuer/generated.go.tpl +++ b/examples/testcase/struct-field/valuer/generated.go.tpl @@ -57,18 +57,21 @@ func (v B) ColumnID() sequel.ColumnClause[int64] { return sequel.BasicColumn("id", v.ID) } func (v B) ColumnValue() sequel.ColumnConvertClause[anyType] { - return sequel.Column("value", v.Value, func(val anyType) any { - return val - }) + return sequel.Column("value", v.Value, convertAnyTypeToValue) } func (v B) ColumnPtrValue() sequel.ColumnConvertClause[*anyType] { - return sequel.Column("ptr_value", v.PtrValue, func(val *anyType) any { - if val != nil { - return *val - } - return nil - }) + return sequel.Column("ptr_value", v.PtrValue, convertPtranyTypeToValue) } func (v B) ColumnN() sequel.ColumnClause[string] { return sequel.BasicColumn("n", v.N) } + +func convertPtranyTypeToValue(val *anyType) any { + if val != nil { + return *val + } + return nil +} +func convertAnyTypeToValue(val anyType) any { + return val +} diff --git a/examples/testcase/struct-field/version/generated.go b/examples/testcase/struct-field/version/generated.go index 8baf4f2a..1a0fddaf 100755 --- a/examples/testcase/struct-field/version/generated.go +++ b/examples/testcase/struct-field/version/generated.go @@ -40,7 +40,9 @@ func (v Version) IDValue() any { return v.ID } func (v Version) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val } diff --git a/examples/testcase/struct-field/version/generated.go.tpl b/examples/testcase/struct-field/version/generated.go.tpl index 8baf4f2a..1a0fddaf 100644 --- a/examples/testcase/struct-field/version/generated.go.tpl +++ b/examples/testcase/struct-field/version/generated.go.tpl @@ -40,7 +40,9 @@ func (v Version) IDValue() any { return v.ID } func (v Version) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, func(val uuid.UUID) any { - return val - }) + return sequel.Column("id", v.ID, convertUuidUuidToValue) +} + +func convertUuidUuidToValue(val uuid.UUID) any { + return val } diff --git a/examples/testcase/struct/alias/generated.go b/examples/testcase/struct/alias/generated.go index 5b3b227a..d80dc4d6 100755 --- a/examples/testcase/struct/alias/generated.go +++ b/examples/testcase/struct/alias/generated.go @@ -36,14 +36,10 @@ func (v A) TimeValue() any { return encoding.TextValue(v.Time) } func (v A) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.Date, func(val civil.Date) any { - return encoding.TextValue(val) - }) + return sequel.Column("date", v.Date, convertCivilDateToValue) } func (v A) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.Time, func(val civil.Time) any { - return encoding.TextValue(val) - }) + return sequel.Column("time", v.Time, convertCivilTimeToValue) } func (C) TableName() string { @@ -82,3 +78,10 @@ func (v C) ColumnString() sequel.ColumnClause[string] { func (v C) ColumnValid() sequel.ColumnClause[bool] { return sequel.BasicColumn("valid", v.Valid) } + +func convertCivilTimeToValue(val civil.Time) any { + return encoding.TextValue(val) +} +func convertCivilDateToValue(val civil.Date) any { + return encoding.TextValue(val) +} diff --git a/examples/testcase/struct/alias/generated.go.tpl b/examples/testcase/struct/alias/generated.go.tpl index 5b3b227a..d80dc4d6 100644 --- a/examples/testcase/struct/alias/generated.go.tpl +++ b/examples/testcase/struct/alias/generated.go.tpl @@ -36,14 +36,10 @@ func (v A) TimeValue() any { return encoding.TextValue(v.Time) } func (v A) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.Date, func(val civil.Date) any { - return encoding.TextValue(val) - }) + return sequel.Column("date", v.Date, convertCivilDateToValue) } func (v A) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.Time, func(val civil.Time) any { - return encoding.TextValue(val) - }) + return sequel.Column("time", v.Time, convertCivilTimeToValue) } func (C) TableName() string { @@ -82,3 +78,10 @@ func (v C) ColumnString() sequel.ColumnClause[string] { func (v C) ColumnValid() sequel.ColumnClause[bool] { return sequel.BasicColumn("valid", v.Valid) } + +func convertCivilTimeToValue(val civil.Time) any { + return encoding.TextValue(val) +} +func convertCivilDateToValue(val civil.Date) any { + return encoding.TextValue(val) +} diff --git a/examples/testcase/struct/embedded/imported/generated.go b/examples/testcase/struct/embedded/imported/generated.go index 18b518aa..a1a29a59 100755 --- a/examples/testcase/struct/embedded/imported/generated.go +++ b/examples/testcase/struct/embedded/imported/generated.go @@ -39,12 +39,15 @@ func (v B) TimeValue() any { return encoding.TextValue(v.DateTime.Time) } func (v B) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.DateTime.Date, func(val civil.Date) any { - return encoding.TextValue(val) - }) + return sequel.Column("date", v.DateTime.Date, convertCivilDateToValue) } func (v B) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.DateTime.Time, func(val civil.Time) any { - return encoding.TextValue(val) - }) + return sequel.Column("time", v.DateTime.Time, convertCivilTimeToValue) +} + +func convertCivilTimeToValue(val civil.Time) any { + return encoding.TextValue(val) +} +func convertCivilDateToValue(val civil.Date) any { + return encoding.TextValue(val) } diff --git a/examples/testcase/struct/embedded/imported/generated.go.tpl b/examples/testcase/struct/embedded/imported/generated.go.tpl index 18b518aa..a1a29a59 100644 --- a/examples/testcase/struct/embedded/imported/generated.go.tpl +++ b/examples/testcase/struct/embedded/imported/generated.go.tpl @@ -39,12 +39,15 @@ func (v B) TimeValue() any { return encoding.TextValue(v.DateTime.Time) } func (v B) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.DateTime.Date, func(val civil.Date) any { - return encoding.TextValue(val) - }) + return sequel.Column("date", v.DateTime.Date, convertCivilDateToValue) } func (v B) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.DateTime.Time, func(val civil.Time) any { - return encoding.TextValue(val) - }) + return sequel.Column("time", v.DateTime.Time, convertCivilTimeToValue) +} + +func convertCivilTimeToValue(val civil.Time) any { + return encoding.TextValue(val) +} +func convertCivilDateToValue(val civil.Date) any { + return encoding.TextValue(val) } diff --git a/examples/testcase/struct/inline-nested/generated.go b/examples/testcase/struct/inline-nested/generated.go index 2202b8c3..f2b69873 100755 --- a/examples/testcase/struct/inline-nested/generated.go +++ b/examples/testcase/struct/inline-nested/generated.go @@ -58,9 +58,7 @@ type DeepNestedModelNestedInlineStruct = struct { } func (v DeepNestedModel) ColumnNested() sequel.ColumnConvertClause[DeepNestedModelNestedInlineStruct] { - return sequel.Column("nested", v.Nested, func(val DeepNestedModelNestedInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nested", v.Nested, convertDeepNestedModelNestedInlineStructToValue) } func (NestedModel) TableName() string { @@ -96,9 +94,7 @@ type NestedModelNestedInlineStruct = struct { } func (v NestedModel) ColumnNested() sequel.ColumnConvertClause[NestedModelNestedInlineStruct] { - return sequel.Column("nested", v.Nested, func(val NestedModelNestedInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nested", v.Nested, convertNestedModelNestedInlineStructToValue) } func (NestedModelWithTag) TableName() string { @@ -135,7 +131,15 @@ type NestedModelWithTagNestedInlineStruct = struct { } func (v NestedModelWithTag) ColumnNested() sequel.ColumnConvertClause[NestedModelWithTagNestedInlineStruct] { - return sequel.Column("nested", v.Nested, func(val NestedModelWithTagNestedInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nested", v.Nested, convertNestedModelWithTagNestedInlineStructToValue) +} + +func convertNestedModelWithTagNestedInlineStructToValue(val NestedModelWithTagNestedInlineStruct) any { + return encoding.JSONValue(val) +} +func convertNestedModelNestedInlineStructToValue(val NestedModelNestedInlineStruct) any { + return encoding.JSONValue(val) +} +func convertDeepNestedModelNestedInlineStructToValue(val DeepNestedModelNestedInlineStruct) any { + return encoding.JSONValue(val) } diff --git a/examples/testcase/struct/inline-nested/generated.go.tpl b/examples/testcase/struct/inline-nested/generated.go.tpl index 2202b8c3..f2b69873 100644 --- a/examples/testcase/struct/inline-nested/generated.go.tpl +++ b/examples/testcase/struct/inline-nested/generated.go.tpl @@ -58,9 +58,7 @@ type DeepNestedModelNestedInlineStruct = struct { } func (v DeepNestedModel) ColumnNested() sequel.ColumnConvertClause[DeepNestedModelNestedInlineStruct] { - return sequel.Column("nested", v.Nested, func(val DeepNestedModelNestedInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nested", v.Nested, convertDeepNestedModelNestedInlineStructToValue) } func (NestedModel) TableName() string { @@ -96,9 +94,7 @@ type NestedModelNestedInlineStruct = struct { } func (v NestedModel) ColumnNested() sequel.ColumnConvertClause[NestedModelNestedInlineStruct] { - return sequel.Column("nested", v.Nested, func(val NestedModelNestedInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nested", v.Nested, convertNestedModelNestedInlineStructToValue) } func (NestedModelWithTag) TableName() string { @@ -135,7 +131,15 @@ type NestedModelWithTagNestedInlineStruct = struct { } func (v NestedModelWithTag) ColumnNested() sequel.ColumnConvertClause[NestedModelWithTagNestedInlineStruct] { - return sequel.Column("nested", v.Nested, func(val NestedModelWithTagNestedInlineStruct) any { - return encoding.JSONValue(val) - }) + return sequel.Column("nested", v.Nested, convertNestedModelWithTagNestedInlineStructToValue) +} + +func convertNestedModelWithTagNestedInlineStructToValue(val NestedModelWithTagNestedInlineStruct) any { + return encoding.JSONValue(val) +} +func convertNestedModelNestedInlineStructToValue(val NestedModelNestedInlineStruct) any { + return encoding.JSONValue(val) +} +func convertDeepNestedModelNestedInlineStructToValue(val DeepNestedModelNestedInlineStruct) any { + return encoding.JSONValue(val) } diff --git a/examples/testcase/struct/tag/generated.go b/examples/testcase/struct/tag/generated.go index 65745916..5f028169 100755 --- a/examples/testcase/struct/tag/generated.go +++ b/examples/testcase/struct/tag/generated.go @@ -36,7 +36,9 @@ func (v A) ColumnTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("time", v.Time) } func (v A) ColumnDec() sequel.ColumnConvertClause[decimal.Decimal] { - return sequel.Column("dec", v.Dec, func(val decimal.Decimal) any { - return val - }) + return sequel.Column("dec", v.Dec, convertDecimalDecimalToValue) +} + +func convertDecimalDecimalToValue(val decimal.Decimal) any { + return val } diff --git a/examples/testcase/struct/tag/generated.go.tpl b/examples/testcase/struct/tag/generated.go.tpl index 65745916..5f028169 100644 --- a/examples/testcase/struct/tag/generated.go.tpl +++ b/examples/testcase/struct/tag/generated.go.tpl @@ -36,7 +36,9 @@ func (v A) ColumnTime() sequel.ColumnClause[time.Time] { return sequel.BasicColumn("time", v.Time) } func (v A) ColumnDec() sequel.ColumnConvertClause[decimal.Decimal] { - return sequel.Column("dec", v.Dec, func(val decimal.Decimal) any { - return val - }) + return sequel.Column("dec", v.Dec, convertDecimalDecimalToValue) +} + +func convertDecimalDecimalToValue(val decimal.Decimal) any { + return val } From ccb34d79f572a27a836cf4a9f1082a6993cd5ece Mon Sep 17 00:00:00 2001 From: si3nloong Date: Fri, 17 Apr 2026 00:58:58 +0800 Subject: [PATCH 16/56] fix: generated codes --- cmd/sqlgen/codegen/sequel.go.tpl | 2 + cmd/sqlgen/codegen/templates/db.go.tpl | 179 ++++++++++++++----- cmd/sqlgen/codegen/templates/operator.go.tpl | 120 ++++++++++--- examples/db/mysql/db.go | 138 ++++++++++---- examples/db/mysql/operator.go | 158 ++++++++++++---- examples/db/postgres/db.go | 134 ++++++++++---- examples/db/postgres/operator.go | 158 ++++++++++++---- examples/db/sqlite/db.go | 138 ++++++++++---- examples/db/sqlite/operator.go | 158 ++++++++++++---- examples/examples_test.go | 2 +- sequel/sequel.go | 2 + 11 files changed, 901 insertions(+), 288 deletions(-) diff --git a/cmd/sqlgen/codegen/sequel.go.tpl b/cmd/sqlgen/codegen/sequel.go.tpl index 0e6beb80..d15b849f 100644 --- a/cmd/sqlgen/codegen/sequel.go.tpl +++ b/cmd/sqlgen/codegen/sequel.go.tpl @@ -3,6 +3,7 @@ package sequel import ( "context" "database/sql" + "fmt" "io" ) @@ -136,6 +137,7 @@ type RowLevelLocker interface { type StmtWriter interface { io.Writer io.StringWriter + fmt.Formatter Quote(v string) string Var(v any) string // Vars will group the values in parenthesis diff --git a/cmd/sqlgen/codegen/templates/db.go.tpl b/cmd/sqlgen/codegen/templates/db.go.tpl index f027ede3..d394f3f6 100644 --- a/cmd/sqlgen/codegen/templates/db.go.tpl +++ b/cmd/sqlgen/codegen/templates/db.go.tpl @@ -23,12 +23,19 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { default: columns, args := model.Columns(), model.Values() stmt := strpool.AcquireString() - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ({{ quoteVar 1 }}") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ({{ quoteVar 1 }}") noOfArgs := len(args) for i := 1; i < noOfArgs; i++ { - stmt.WriteString("," + wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(wrapVar(i+1)) } - stmt.WriteString(") RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(") RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") row := db.QueryRowContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) args = nil @@ -63,8 +70,20 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { return db.ExecContext(ctx, query, args...) default: columns, args := model.Columns(), model.Values() - query := "INSERT INTO "+DbTable(model)+" ("+strings.Join(columns, ",")+") VALUES ("+strings.Repeat("{{ quoteVar 1 }},", len(columns) - 1)+"{{ quoteVar 1 }});" - return db.ExecContext(ctx, query, args...) + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat("{{ quoteVar 1 }},", len(columns) - 1)) + stmt.WriteString("{{ quoteVar 1 }});") + result, err := db.ExecContext(ctx, stmt.String(), args...) + strpool.ReleaseString(stmt) + if err != nil { + return nil, err + } + return result, nil } } {{ end }} @@ -89,20 +108,25 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db noOfCols := len(columns) cols := strings.Join(columns, ",") args := make([]any, 0, noOfCols*noOfData) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + cols + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + cols + ") VALUES ") if n := len(data); n > 0 { stmt.WriteString(model.InsertPlaceholders(1)) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) for i := 1; i < n; i++ { - stmt.WriteString("," + model.InsertPlaceholders(i + 1)) + stmt.WriteString(",") + stmt.WriteString(model.InsertPlaceholders(i + 1)) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) } } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") rows, err := db.QueryContext(ctx, stmt.String(), args...) // Cleanup args = nil @@ -131,10 +155,13 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES "+ model.InsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + model.InsertPlaceholders(i)) + stmt.WriteString(",") + stmt.WriteString(model.InsertPlaceholders(i)) args = append(args, data[i].Values()...) } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") rows, err := db.QueryContext(ctx, stmt.String(), args...) // Cleanup args = nil @@ -179,12 +206,18 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) args := make([]any, 0, noOfColumns*noOfData) placeholder := strings.Repeat(",{{ quoteVar 1 }}", noOfColumns) placeholder = "(" + placeholder[:len(placeholder) - 1] + ")" - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES "+ placeholder) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") + stmt.WriteString(placeholder) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + placeholder) + stmt.WriteString(",") + stmt.WriteString(placeholder) values = data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -201,7 +234,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES "+ placeholder) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + placeholder) + stmt.WriteString(",") + stmt.WriteString(placeholder) args = append(args, data[i].Values()...) } stmt.WriteString(";") @@ -862,6 +896,7 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } + blr := AcquireStmt() defer ReleaseStmt(blr) @@ -873,7 +908,11 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") + blr.WriteString("SELECT ") + blr.WriteString(strings.Join(TableColumns(v), ",")) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(v)) + blr.WriteString(" WHERE ") if r.stmt.Where != nil { r.stmt.Where(blr) } @@ -893,16 +932,29 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite value := values[colDict[columnName]] if orderedColumn.Asc() { // If ascending - blr.WriteString(columnName + " <= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " < " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" <= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } else { // If descending - blr.WriteString(columnName + " >= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " > " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" >= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } } clear(colDict) - blr.WriteString("("+ buf.String()) + blr.WriteString("(") + blr.WriteString(buf.String()) strpool.ReleaseString(buf) } @@ -956,13 +1008,16 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite blr.WriteString("("+ strings.Join(pkNames, ",") +") DESC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + " DESC") + blr.WriteString(pkName) + blr.WriteString(" DESC") default: panic("unreachable") } } // Add one to limit to find next cursor - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(r.stmt.Limit+1))) + blr.WriteString(";") rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) blr.Reset() @@ -1237,10 +1292,12 @@ func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.D } } if stmt.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(stmt.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(stmt.Limit))) } if stmt.Offset > 0 { - blr.WriteString(" OFFSET " + strconv.FormatUint(stmt.Offset, 10)) + blr.WriteString(" OFFSET ") + blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) } blr.WriteString(";") rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) @@ -1291,11 +1348,14 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque } } if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + blr.WriteString(" FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(stmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } @@ -1305,22 +1365,30 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque stmt.Where(blr) } if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY "+ stmt.GroupBy[0]) + blr.WriteString(" GROUP BY ") + blr.WriteString(stmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString(","+stmt.GroupBy[i]) + blr.WriteString(",") + blr.WriteString(stmt.GroupBy[i]) } } if n := len(stmt.OrderBy); n > 0 { if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY "+stmt.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY "+stmt.OrderBy[0].ColumnName()+" DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if stmt.OrderBy[i].Asc() { - blr.WriteString(","+stmt.OrderBy[i].ColumnName() +" ASC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) } else { - blr.WriteString(","+stmt.OrderBy[i].ColumnName() +" DESC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } @@ -1365,9 +1433,12 @@ func ExecStmt[T any, Stmt interface { switch vi := any(stmt).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE " + DbTable(vt)) + blr.WriteString("UPDATE ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE " + dbName(v) + vi.Table) + blr.WriteString("UPDATE ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.Table) } if len(vi.Set) > 0 { blr.WriteString(" SET ") @@ -1383,30 +1454,41 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY "+vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY "+vi.OrderBy[0].ColumnName()+" DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(","+vi.OrderBy[i].ColumnName() +" ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" ASC") } else { - blr.WriteString(","+vi.OrderBy[i].ColumnName() +" DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } {{ if ne driver "postgres" -}} {{- /* postgres */ -}} if vi.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(vi.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(vi.Limit))) } {{ end -}} case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM " + DbTable(vt)) + blr.WriteString("DELETE FROM ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM " + dbName(v) + vi.FromTable) + blr.WriteString("DELETE FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.FromTable) } if vi.Where != nil { blr.WriteString(" WHERE ") @@ -1414,22 +1496,29 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY "+vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY "+vi.OrderBy[0].ColumnName()+" DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(","+vi.OrderBy[i].ColumnName() +" ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString(","+vi.OrderBy[i].ColumnName() +" DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } {{ if ne driver "postgres" -}} {{- /* postgres */ -}} if vi.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(vi.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(vi.Limit))) } {{ end -}} } diff --git a/cmd/sqlgen/codegen/templates/operator.go.tpl b/cmd/sqlgen/codegen/templates/operator.go.tpl index 141f4b6b..fcb2d288 100644 --- a/cmd/sqlgen/codegen/templates/operator.go.tpl +++ b/cmd/sqlgen/codegen/templates/operator.go.tpl @@ -51,7 +51,9 @@ func NotEqual[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: w.WriteString(vi.ColumnName()) w.WriteString(" <> ") @@ -81,7 +83,9 @@ func In[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause { args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" IN ") + w.WriteString(w.Vars(args)) } } @@ -102,7 +106,9 @@ func NotIn[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " NOT IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" NOT IN ") + w.WriteString(w.Vars(args)) } } @@ -110,11 +116,17 @@ func GreaterThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Wh return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " > " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(value)) } } } @@ -123,11 +135,17 @@ func GreaterThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) se return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " >= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(value)) } } } @@ -136,11 +154,17 @@ func LessThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " < " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(value)) } } } @@ -149,11 +173,17 @@ func LessThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) seque return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(value)) } } } @@ -162,11 +192,17 @@ func Like[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereClau return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(value)) } } } @@ -175,24 +211,32 @@ func NotLike[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereC return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(value)) } } } func IsNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NULL") } } func IsNotNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NOT NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NOT NULL") } } @@ -200,11 +244,23 @@ func Between[T comparable](column sequel.ColumnClause[T], from, to T) sequel.Whe return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -213,9 +269,17 @@ func NotBetween[T comparable](column sequel.ColumnClause[T], from, to T) sequel. return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: w.WriteString(vi.ColumnName()) w.WriteString(" NOT BETWEEN ") diff --git a/examples/db/mysql/db.go b/examples/db/mysql/db.go index f9c1a541..2dc8eb99 100755 --- a/examples/db/mysql/db.go +++ b/examples/db/mysql/db.go @@ -47,8 +47,20 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { return db.ExecContext(ctx, query, args...) default: columns, args := model.Columns(), model.Values() - query := "INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat("?,", len(columns)-1) + "?);" - return db.ExecContext(ctx, query, args...) + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat("?,", len(columns)-1)) + stmt.WriteString("?);") + result, err := db.ExecContext(ctx, stmt.String(), args...) + strpool.ReleaseString(stmt) + if err != nil { + return nil, err + } + return result, nil } } @@ -71,12 +83,18 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) args := make([]any, 0, noOfColumns*noOfData) placeholder := strings.Repeat(",?", noOfColumns) placeholder = "(" + placeholder[:len(placeholder)-1] + ")" - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + placeholder) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") + stmt.WriteString(placeholder) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + placeholder) + stmt.WriteString(",") + stmt.WriteString(placeholder) values = data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -93,7 +111,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + placeholder) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + placeholder) + stmt.WriteString(",") + stmt.WriteString(placeholder) args = append(args, data[i].Values()...) } stmt.WriteString(";") @@ -421,6 +440,7 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } + blr := AcquireStmt() defer ReleaseStmt(blr) @@ -432,7 +452,11 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") + blr.WriteString("SELECT ") + blr.WriteString(strings.Join(TableColumns(v), ",")) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(v)) + blr.WriteString(" WHERE ") if r.stmt.Where != nil { r.stmt.Where(blr) } @@ -452,12 +476,24 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite value := values[colDict[columnName]] if orderedColumn.Asc() { // If ascending - blr.WriteString(columnName + " <= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " < " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" <= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } else { // If descending - blr.WriteString(columnName + " >= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " > " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" >= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } } clear(colDict) @@ -795,10 +831,12 @@ func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.D } } if stmt.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(stmt.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(stmt.Limit))) } if stmt.Offset > 0 { - blr.WriteString(" OFFSET " + strconv.FormatUint(stmt.Offset, 10)) + blr.WriteString(" OFFSET ") + blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) } blr.WriteString(";") rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) @@ -849,11 +887,14 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque } } if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + blr.WriteString(" FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(stmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } @@ -863,22 +904,30 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque stmt.Where(blr) } if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY " + stmt.GroupBy[0]) + blr.WriteString(" GROUP BY ") + blr.WriteString(stmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString("," + stmt.GroupBy[i]) + blr.WriteString(",") + blr.WriteString(stmt.GroupBy[i]) } } if n := len(stmt.OrderBy); n > 0 { if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if stmt.OrderBy[i].Asc() { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } @@ -917,9 +966,12 @@ func ExecStmt[T any, Stmt interface { switch vi := any(stmt).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE " + DbTable(vt)) + blr.WriteString("UPDATE ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE " + dbName(v) + vi.Table) + blr.WriteString("UPDATE ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.Table) } if len(vi.Set) > 0 { blr.WriteString(" SET ") @@ -935,26 +987,37 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" ASC") } else { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(vi.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(vi.Limit))) } case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM " + DbTable(vt)) + blr.WriteString("DELETE FROM ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM " + dbName(v) + vi.FromTable) + blr.WriteString("DELETE FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.FromTable) } if vi.Where != nil { blr.WriteString(" WHERE ") @@ -962,20 +1025,27 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(vi.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(vi.Limit))) } } blr.WriteString(";") diff --git a/examples/db/mysql/operator.go b/examples/db/mysql/operator.go index e1b6f335..5179d86f 100755 --- a/examples/db/mysql/operator.go +++ b/examples/db/mysql/operator.go @@ -38,11 +38,17 @@ func Equal[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereCla return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } @@ -51,11 +57,17 @@ func NotEqual[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <> " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(value)) } } } @@ -77,7 +89,9 @@ func In[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause { args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" IN ") + w.WriteString(w.Vars(args)) } } @@ -98,7 +112,9 @@ func NotIn[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " NOT IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" NOT IN ") + w.WriteString(w.Vars(args)) } } @@ -106,11 +122,17 @@ func GreaterThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Wh return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " > " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(value)) } } } @@ -119,11 +141,17 @@ func GreaterThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) se return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " >= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(value)) } } } @@ -132,11 +160,17 @@ func LessThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " < " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(value)) } } } @@ -145,11 +179,17 @@ func LessThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) seque return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(value)) } } } @@ -158,11 +198,17 @@ func Like[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereClau return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(value)) } } } @@ -171,24 +217,32 @@ func NotLike[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereC return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(value)) } } } func IsNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NULL") } } func IsNotNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NOT NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NOT NULL") } } @@ -196,11 +250,23 @@ func Between[T comparable](column sequel.ColumnClause[T], from, to T) sequel.Whe return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -209,11 +275,23 @@ func NotBetween[T comparable](column sequel.ColumnClause[T], from, to T) sequel. return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -222,11 +300,17 @@ func Set[T any](column sequel.ColumnClause[T], value T) sequel.SetClause { return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } diff --git a/examples/db/postgres/db.go b/examples/db/postgres/db.go index ce4d0d74..675785c2 100755 --- a/examples/db/postgres/db.go +++ b/examples/db/postgres/db.go @@ -32,12 +32,19 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { default: columns, args := model.Columns(), model.Values() stmt := strpool.AcquireString() - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ($1") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ($1") noOfArgs := len(args) for i := 1; i < noOfArgs; i++ { - stmt.WriteString("," + wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(wrapVar(i + 1)) } - stmt.WriteString(") RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(") RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") row := db.QueryRowContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) args = nil @@ -63,20 +70,25 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db noOfCols := len(columns) cols := strings.Join(columns, ",") args := make([]any, 0, noOfCols*noOfData) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + cols + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + cols + ") VALUES ") if n := len(data); n > 0 { stmt.WriteString(model.InsertPlaceholders(1)) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) for i := 1; i < n; i++ { - stmt.WriteString("," + model.InsertPlaceholders(i+1)) + stmt.WriteString(",") + stmt.WriteString(model.InsertPlaceholders(i + 1)) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) } } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") rows, err := db.QueryContext(ctx, stmt.String(), args...) // Cleanup args = nil @@ -105,10 +117,13 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + model.InsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + model.InsertPlaceholders(i)) + stmt.WriteString(",") + stmt.WriteString(model.InsertPlaceholders(i)) args = append(args, data[i].Values()...) } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") rows, err := db.QueryContext(ctx, stmt.String(), args...) // Cleanup args = nil @@ -564,6 +579,7 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } + blr := AcquireStmt() defer ReleaseStmt(blr) @@ -575,7 +591,11 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") + blr.WriteString("SELECT ") + blr.WriteString(strings.Join(TableColumns(v), ",")) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(v)) + blr.WriteString(" WHERE ") if r.stmt.Where != nil { r.stmt.Where(blr) } @@ -595,12 +615,24 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite value := values[colDict[columnName]] if orderedColumn.Asc() { // If ascending - blr.WriteString(columnName + " <= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " < " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" <= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } else { // If descending - blr.WriteString(columnName + " >= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " > " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" >= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } } clear(colDict) @@ -938,10 +970,12 @@ func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.D } } if stmt.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(stmt.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(stmt.Limit))) } if stmt.Offset > 0 { - blr.WriteString(" OFFSET " + strconv.FormatUint(stmt.Offset, 10)) + blr.WriteString(" OFFSET ") + blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) } blr.WriteString(";") rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) @@ -992,11 +1026,14 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque } } if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + blr.WriteString(" FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(stmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } @@ -1006,22 +1043,30 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque stmt.Where(blr) } if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY " + stmt.GroupBy[0]) + blr.WriteString(" GROUP BY ") + blr.WriteString(stmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString("," + stmt.GroupBy[i]) + blr.WriteString(",") + blr.WriteString(stmt.GroupBy[i]) } } if n := len(stmt.OrderBy); n > 0 { if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if stmt.OrderBy[i].Asc() { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } @@ -1058,9 +1103,12 @@ func ExecStmt[T any, Stmt interface { switch vi := any(stmt).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE " + DbTable(vt)) + blr.WriteString("UPDATE ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE " + dbName(v) + vi.Table) + blr.WriteString("UPDATE ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.Table) } if len(vi.Set) > 0 { blr.WriteString(" SET ") @@ -1076,23 +1124,33 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" ASC") } else { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM " + DbTable(vt)) + blr.WriteString("DELETE FROM ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM " + dbName(v) + vi.FromTable) + blr.WriteString("DELETE FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.FromTable) } if vi.Where != nil { blr.WriteString(" WHERE ") @@ -1100,15 +1158,21 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } diff --git a/examples/db/postgres/operator.go b/examples/db/postgres/operator.go index 6f2fea42..202ec905 100755 --- a/examples/db/postgres/operator.go +++ b/examples/db/postgres/operator.go @@ -38,11 +38,17 @@ func Equal[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereCla return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } @@ -51,11 +57,17 @@ func NotEqual[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <> " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(value)) } } } @@ -77,7 +89,9 @@ func In[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause { args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" IN ") + w.WriteString(w.Vars(args)) } } @@ -98,7 +112,9 @@ func NotIn[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " NOT IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" NOT IN ") + w.WriteString(w.Vars(args)) } } @@ -106,11 +122,17 @@ func GreaterThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Wh return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " > " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(value)) } } } @@ -119,11 +141,17 @@ func GreaterThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) se return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " >= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(value)) } } } @@ -132,11 +160,17 @@ func LessThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " < " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(value)) } } } @@ -145,11 +179,17 @@ func LessThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) seque return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(value)) } } } @@ -158,11 +198,17 @@ func Like[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereClau return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(value)) } } } @@ -171,24 +217,32 @@ func NotLike[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereC return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(value)) } } } func IsNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NULL") } } func IsNotNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NOT NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NOT NULL") } } @@ -196,11 +250,23 @@ func Between[T comparable](column sequel.ColumnClause[T], from, to T) sequel.Whe return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -209,11 +275,23 @@ func NotBetween[T comparable](column sequel.ColumnClause[T], from, to T) sequel. return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -222,11 +300,17 @@ func Set[T any](column sequel.ColumnClause[T], value T) sequel.SetClause { return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } diff --git a/examples/db/sqlite/db.go b/examples/db/sqlite/db.go index 76ac519c..d98562c5 100755 --- a/examples/db/sqlite/db.go +++ b/examples/db/sqlite/db.go @@ -47,8 +47,20 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { return db.ExecContext(ctx, query, args...) default: columns, args := model.Columns(), model.Values() - query := "INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat("?,", len(columns)-1) + "?);" - return db.ExecContext(ctx, query, args...) + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat("?,", len(columns)-1)) + stmt.WriteString("?);") + result, err := db.ExecContext(ctx, stmt.String(), args...) + strpool.ReleaseString(stmt) + if err != nil { + return nil, err + } + return result, nil } } @@ -71,12 +83,18 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) args := make([]any, 0, noOfColumns*noOfData) placeholder := strings.Repeat(",?", noOfColumns) placeholder = "(" + placeholder[:len(placeholder)-1] + ")" - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + placeholder) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") + stmt.WriteString(placeholder) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + placeholder) + stmt.WriteString(",") + stmt.WriteString(placeholder) values = data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -93,7 +111,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + placeholder) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { - stmt.WriteString("," + placeholder) + stmt.WriteString(",") + stmt.WriteString(placeholder) args = append(args, data[i].Values()...) } stmt.WriteString(";") @@ -421,6 +440,7 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } + blr := AcquireStmt() defer ReleaseStmt(blr) @@ -432,7 +452,11 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") + blr.WriteString("SELECT ") + blr.WriteString(strings.Join(TableColumns(v), ",")) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(v)) + blr.WriteString(" WHERE ") if r.stmt.Where != nil { r.stmt.Where(blr) } @@ -452,12 +476,24 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite value := values[colDict[columnName]] if orderedColumn.Asc() { // If ascending - blr.WriteString(columnName + " <= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " < " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" <= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } else { // If descending - blr.WriteString(columnName + " >= " + blr.Var(value) + " AND ") - buf.WriteString(columnName + " > " + blr.Var(value) + " OR ") + blr.WriteString(columnName) + blr.WriteString(" >= ") + blr.WriteString(blr.Var(value)) + blr.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(blr.Var(value)) + buf.WriteString(" OR ") } } clear(colDict) @@ -795,10 +831,12 @@ func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.D } } if stmt.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(stmt.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(stmt.Limit))) } if stmt.Offset > 0 { - blr.WriteString(" OFFSET " + strconv.FormatUint(stmt.Offset, 10)) + blr.WriteString(" OFFSET ") + blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) } blr.WriteString(";") rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) @@ -849,11 +887,14 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque } } if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + blr.WriteString(" FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(stmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + blr.WriteString(" FROM ") + blr.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } @@ -863,22 +904,30 @@ func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db seque stmt.Where(blr) } if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY " + stmt.GroupBy[0]) + blr.WriteString(" GROUP BY ") + blr.WriteString(stmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString("," + stmt.GroupBy[i]) + blr.WriteString(",") + blr.WriteString(stmt.GroupBy[i]) } } if n := len(stmt.OrderBy); n > 0 { if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(stmt.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if stmt.OrderBy[i].Asc() { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(stmt.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } @@ -917,9 +966,12 @@ func ExecStmt[T any, Stmt interface { switch vi := any(stmt).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE " + DbTable(vt)) + blr.WriteString("UPDATE ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE " + dbName(v) + vi.Table) + blr.WriteString("UPDATE ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.Table) } if len(vi.Set) > 0 { blr.WriteString(" SET ") @@ -935,26 +987,37 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" ASC") } else { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(vi.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(vi.Limit))) } case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM " + DbTable(vt)) + blr.WriteString("DELETE FROM ") + blr.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM " + dbName(v) + vi.FromTable) + blr.WriteString("DELETE FROM ") + blr.WriteString(dbName(v)) + blr.WriteString(vi.FromTable) } if vi.Where != nil { blr.WriteString(" WHERE ") @@ -962,20 +1025,27 @@ func ExecStmt[T any, Stmt interface { } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName()) + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + vi.OrderBy[0].ColumnName() + " DESC") + blr.WriteString(" ORDER BY ") + blr.WriteString(vi.OrderBy[0].ColumnName()) + blr.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " ASC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + vi.OrderBy[i].ColumnName() + " DESC") + blr.WriteString(",") + blr.WriteString(vi.OrderBy[i].ColumnName()) + blr.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT " + strconv.Itoa((int)(vi.Limit))) + blr.WriteString(" LIMIT ") + blr.WriteString(strconv.Itoa((int)(vi.Limit))) } } blr.WriteString(";") diff --git a/examples/db/sqlite/operator.go b/examples/db/sqlite/operator.go index af44134a..79f91d28 100755 --- a/examples/db/sqlite/operator.go +++ b/examples/db/sqlite/operator.go @@ -38,11 +38,17 @@ func Equal[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereCla return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } @@ -51,11 +57,17 @@ func NotEqual[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <> " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <> " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <> ") + w.WriteString(w.Var(value)) } } } @@ -77,7 +89,9 @@ func In[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause { args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" IN ") + w.WriteString(w.Vars(args)) } } @@ -98,7 +112,9 @@ func NotIn[T any](column sequel.ColumnClause[T], values []T) sequel.WhereClause args[idx] = values[idx] } } - w.WriteString(column.ColumnName() + " NOT IN " + w.Vars(args)) + w.WriteString(column.ColumnName()) + w.WriteString(" NOT IN ") + w.WriteString(w.Vars(args)) } } @@ -106,11 +122,17 @@ func GreaterThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Wh return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " > " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " > " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" > ") + w.WriteString(w.Var(value)) } } } @@ -119,11 +141,17 @@ func GreaterThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) se return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " >= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " >= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" >= ") + w.WriteString(w.Var(value)) } } } @@ -132,11 +160,17 @@ func LessThan[T comparable](column sequel.ColumnClause[T], value T) sequel.Where return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " < " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " < " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" < ") + w.WriteString(w.Var(value)) } } } @@ -145,11 +179,17 @@ func LessThanOrEqual[T comparable](column sequel.ColumnClause[T], value T) seque return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " <= " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " <= " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" <= ") + w.WriteString(w.Var(value)) } } } @@ -158,11 +198,17 @@ func Like[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereClau return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" LIKE ") + w.WriteString(w.Var(value)) } } } @@ -171,24 +217,32 @@ func NotLike[T comparable](column sequel.ColumnClause[T], value T) sequel.WhereC return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " NOT LIKE " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT LIKE ") + w.WriteString(w.Var(value)) } } } func IsNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NULL") } } func IsNotNull[T any](column sequel.ColumnClause[T]) sequel.WhereClause { return func(w sequel.StmtWriter) { - w.WriteString(column.ColumnName() + " IS NOT NULL") + w.WriteString(column.ColumnName()) + w.WriteString(" IS NOT NULL") } } @@ -196,11 +250,23 @@ func Between[T comparable](column sequel.ColumnClause[T], from, to T) sequel.Whe return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -209,11 +275,23 @@ func NotBetween[T comparable](column sequel.ColumnClause[T], from, to T) sequel. return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(from)))) + w.WriteString(" AND ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(to)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(vi.Convert(from)) + " AND " + w.Var(vi.Convert(to))) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(vi.Convert(from))) + w.WriteString(" AND ") + w.WriteString(w.Var(vi.Convert(to))) default: - w.WriteString(vi.ColumnName() + " NOT BETWEEN " + w.Var(from) + " AND " + w.Var(to)) + w.WriteString(vi.ColumnName()) + w.WriteString(" NOT BETWEEN ") + w.WriteString(w.Var(from)) + w.WriteString(" AND ") + w.WriteString(w.Var(to)) } } } @@ -222,11 +300,17 @@ func Set[T any](column sequel.ColumnClause[T], value T) sequel.SetClause { return func(w sequel.StmtWriter) { switch vi := column.(type) { case sequel.SQLColumnClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(vi.SQLColumn(w.Var(vi.Convert(value)))) case sequel.ColumnConvertClause[T]: - w.WriteString(vi.ColumnName() + " = " + w.Var(vi.Convert(value))) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(vi.Convert(value))) default: - w.WriteString(vi.ColumnName() + " = " + w.Var(value)) + w.WriteString(vi.ColumnName()) + w.WriteString(" = ") + w.WriteString(w.Var(value)) } } } diff --git a/examples/examples_test.go b/examples/examples_test.go index f301c1e5..397b2f3f 100644 --- a/examples/examples_test.go +++ b/examples/examples_test.go @@ -33,7 +33,7 @@ import ( ) var ( - //go:embed migrate/*.sql + //go:embed migrations/*.sql migrationFiles embed.FS fake = faker.New() conn *sql.DB diff --git a/sequel/sequel.go b/sequel/sequel.go index 0e6beb80..d15b849f 100644 --- a/sequel/sequel.go +++ b/sequel/sequel.go @@ -3,6 +3,7 @@ package sequel import ( "context" "database/sql" + "fmt" "io" ) @@ -136,6 +137,7 @@ type RowLevelLocker interface { type StmtWriter interface { io.Writer io.StringWriter + fmt.Formatter Quote(v string) string Var(v any) string // Vars will group the values in parenthesis From 7beba7b07e62101e2112fb1a39484ea77c0fe65c Mon Sep 17 00:00:00 2001 From: si3nloong Date: Sun, 19 Apr 2026 22:13:44 +0800 Subject: [PATCH 17/56] chore: improve generated codes --- cmd/sqlgen/codegen/generate.go | 20 +- cmd/sqlgen/codegen/sequel.go.tpl | 3 +- cmd/sqlgen/codegen/templates/db.go.tpl | 1102 ++++++++++------- cmd/sqlgen/go.mod | 6 +- cmd/sqlgen/go.sum | 7 +- docs/MODELS.md | 2 +- docs/PRIMARY_KEY.md | 2 +- examples/db/mysql/db.go | 798 +++++++----- examples/db/postgres/db.go | 870 +++++++------ examples/db/sqlite/db.go | 798 +++++++----- examples/go.sum | 26 - examples/testcase/core/generated.go | 6 +- examples/testcase/core/generated.go.tpl | 6 +- .../schema/custom-declare/generated.go | 2 +- .../schema/custom-declare/generated.go.tpl | 2 +- .../schema/dynamic-table-name/generated.go | 4 +- .../dynamic-table-name/generated.go.tpl | 4 +- examples/testcase/schema/generated.go | 8 +- examples/testcase/schema/generated.go.tpl | 8 +- examples/testcase/schema/nopk/generated.go | 2 +- .../testcase/schema/nopk/generated.go.tpl | 2 +- .../testcase/schema/table-name/generated.go | 6 +- .../schema/table-name/generated.go.tpl | 6 +- .../testcase/struct-field/alias/generated.go | 6 +- .../struct-field/alias/generated.go.tpl | 6 +- .../testcase/struct-field/array/generated.go | 2 +- .../struct-field/array/generated.go.tpl | 2 +- .../testcase/struct-field/custom/generated.go | 4 +- .../struct-field/custom/generated.go.tpl | 4 +- .../testcase/struct-field/date/generated.go | 2 +- .../struct-field/date/generated.go.tpl | 2 +- .../testcase/struct-field/enum/generated.go | 2 +- .../struct-field/enum/generated.go.tpl | 2 +- .../struct-field/enum/imported/generated.go | 2 +- .../enum/imported/generated.go.tpl | 2 +- .../struct-field/imported/generated.go | 4 +- .../struct-field/imported/generated.go.tpl | 4 +- .../testcase/struct-field/json/generated.go | 2 +- .../struct-field/json/generated.go.tpl | 2 +- .../struct-field/pk/auto-incr/generated.go | 6 +- .../pk/auto-incr/generated.go.tpl | 6 +- .../struct-field/pk/composite/generated.go | 2 +- .../pk/composite/generated.go.tpl | 2 +- .../testcase/struct-field/pk/generated.go | 6 +- .../testcase/struct-field/pk/generated.go.tpl | 6 +- .../struct-field/pk/uuid/generated.go | 2 +- .../struct-field/pk/uuid/generated.go.tpl | 2 +- .../struct-field/pointer/generated.go | 6 +- .../struct-field/pointer/generated.go.tpl | 6 +- .../struct-field/primitive/generated.go | 2 +- .../struct-field/primitive/generated.go.tpl | 2 +- .../struct-field/readonly/generated.go | 6 +- .../struct-field/readonly/generated.go.tpl | 6 +- .../testcase/struct-field/size/generated.go | 2 +- .../struct-field/size/generated.go.tpl | 2 +- .../testcase/struct-field/slice/generated.go | 6 +- .../struct-field/slice/generated.go.tpl | 6 +- .../testcase/struct-field/sql/generated.go | 8 +- .../struct-field/sql/generated.go.tpl | 8 +- .../testcase/struct-field/unique/generated.go | 2 +- .../struct-field/unique/generated.go.tpl | 2 +- .../testcase/struct-field/valuer/generated.go | 2 +- .../struct-field/valuer/generated.go.tpl | 2 +- .../struct-field/version/generated.go | 2 +- .../struct-field/version/generated.go.tpl | 2 +- examples/testcase/struct/alias/generated.go | 4 +- .../testcase/struct/alias/generated.go.tpl | 4 +- .../struct/embedded/imported/generated.go | 2 +- .../struct/embedded/imported/generated.go.tpl | 2 +- .../struct/embedded/local/generated.go | 2 +- .../struct/embedded/local/generated.go.tpl | 2 +- .../struct/inline-nested/generated.go | 6 +- .../struct/inline-nested/generated.go.tpl | 6 +- go.mod | 3 +- go.sum | 7 +- go.work.sum | 26 + sequel/sequel.go | 3 +- 77 files changed, 2359 insertions(+), 1550 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index d9783178..16dcdaa0 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -273,20 +273,22 @@ loop: // If the struct has readonly columns if !t.Readonly { insertColumns := t.InsertColumns() - if n := len(insertColumns); n > 0 { + if noOfCols := len(insertColumns); noOfCols > 0 { // If the insertable columns is not tally with the table columns means the struct has readonly columns - if n != len(t.Columns) { - fprintfln(w, "func (%s) InsertColumns() []string {", t.GoName) - fmt.Fprint(w, "return []string{") - fmt.Fprint(w, g.Quote(g.QuoteIdentifier(insertColumns[0].Name()))) - for i := 1; i < n; i++ { - fmt.Fprint(w, ","+g.Quote(g.QuoteIdentifier(insertColumns[i].Name()))) + if noOfCols != len(t.Columns) { + fprintfln(w, "func (%s) SQLInsertColumns() string {", t.GoName) + stmt := strpool.AcquireString() + stmt.WriteString(g.MustQuoteIdentifier(insertColumns[0].Name())) + for i := 1; i < noOfCols; i++ { + stmt.WriteString(",") + stmt.WriteString(g.MustQuoteIdentifier(insertColumns[i].Name())) } - fprintfln(w, "} // %d", n) + fmt.Fprintf(w, "return %s", g.Quote(stmt.String())) + strpool.ReleaseString(stmt) fprintfln(w, "}") } - fprintfln(w, "func (%s) InsertPlaceholders(row int) string {", t.GoName) + fprintfln(w, "func (%s) SQLInsertPlaceholders(row int) string {", t.GoName) if g.staticVar { fprintfln(w, `return "(%s)" // %d`, strings.Repeat(","+g.dialect.QuoteVar(0), len(insertColumns))[1:], len(insertColumns)) } else { diff --git a/cmd/sqlgen/codegen/sequel.go.tpl b/cmd/sqlgen/codegen/sequel.go.tpl index d15b849f..e1a1a918 100644 --- a/cmd/sqlgen/codegen/sequel.go.tpl +++ b/cmd/sqlgen/codegen/sequel.go.tpl @@ -98,7 +98,8 @@ type Inserter interface { Tabler Columner Valuer - InsertPlaceholders(row int) string + SQLInsertColumns() string + SQLInsertPlaceholders(row int) string } type ColumnValuer interface { diff --git a/cmd/sqlgen/codegen/templates/db.go.tpl b/cmd/sqlgen/codegen/templates/db.go.tpl index d394f3f6..fa58a415 100644 --- a/cmd/sqlgen/codegen/templates/db.go.tpl +++ b/cmd/sqlgen/codegen/templates/db.go.tpl @@ -37,8 +37,8 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { stmt.WriteString(strings.Join(TableColumns(model), ",")) stmt.WriteString(";") row := db.QueryRowContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return row.Scan(model.Addrs()...) } } @@ -79,7 +79,8 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { stmt.WriteString(strings.Repeat("{{ quoteVar 1 }},", len(columns) - 1)) stmt.WriteString("{{ quoteVar 1 }});") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup if err != nil { return nil, err } @@ -101,90 +102,77 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db columns := model.Columns() stmt := strpool.AcquireString() + var ( + rows *sql.Rows + err error + ) switch v := any(model).(type) { case sequel.AutoIncrKeyer: _, idx, _ := v.PK() columns = append(columns[:idx], columns[idx+1:]...) noOfCols := len(columns) - cols := strings.Join(columns, ",") args := make([]any, 0, noOfCols*noOfData) stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + cols + ") VALUES ") - if n := len(data); n > 0 { - stmt.WriteString(model.InsertPlaceholders(1)) - values := data[0].Values() + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + values := data[0].Values() + values = append(values[:idx], values[idx+1:]...) + args = append(args, values...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i + 1)) + values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) - for i := 1; i < n; i++ { - stmt.WriteString(",") - stmt.WriteString(model.InsertPlaceholders(i + 1)) - values := data[i].Values() - values = append(values[:idx], values[idx+1:]...) - args = append(args, values...) - } } stmt.WriteString(" RETURNING ") stmt.WriteString(strings.Join(TableColumns(model), ",")) stmt.WriteString(";") - rows, err := db.QueryContext(ctx, stmt.String(), args...) - // Cleanup - args = nil - strpool.ReleaseString(stmt) - if err != nil { - return nil, err - } - defer rows.Close() - var i int64 - for rows.Next() { - if err := rows.Scan(Ptr(&data[i]).Addrs()...); err != nil { - return nil, err - } - i++ - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return sequel.NewRowsAffectedResult(i), nil + rows, err = db.QueryContext(ctx, stmt.String(), args...) + args = nil // Cleanup default: noOfCols := len(columns) args := make([]any, 0, noOfCols*noOfData) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES "+ model.InsertPlaceholders(0)) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") - stmt.WriteString(model.InsertPlaceholders(i)) + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } stmt.WriteString(" RETURNING ") stmt.WriteString(strings.Join(TableColumns(model), ",")) stmt.WriteString(";") - rows, err := db.QueryContext(ctx, stmt.String(), args...) - // Cleanup - args = nil - strpool.ReleaseString(stmt) - if err != nil { - return nil, err - } - defer rows.Close() - var i int64 - for rows.Next() { - if err := rows.Scan(Ptr(&data[i]).Addrs()...); err != nil { - return nil, err - } - i++ - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { + rows, err = db.QueryContext(ctx, stmt.String(), args...) + args = nil // Cleanup + } + strpool.ReleaseString(stmt) // Cleanup + if err != nil { + return nil, err + } + defer rows.Close() + var count int64 + for rows.Next() { + if err := rows.Scan(Ptr(&data[count]).Addrs()...); err != nil { return nil, err } - return sequel.NewRowsAffectedResult(i), nil + count++ } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return sequel.NewRowsAffectedResult(count), nil } {{ else }} // Insert is a helper function to insert multiple records. @@ -224,8 +212,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) } stmt.WriteString(";") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return result, err default: noOfColumns := len(columns) @@ -240,8 +228,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) } stmt.WriteString(";") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return result, err } } @@ -304,33 +292,53 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface{ columns = append(columns[:idx], columns[idx+1:]...) values = append(values[:idx], values[idx+1:]...) // Don't include auto increment primary key on INSERT - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") case sequel.PrimaryKeyer: pkName, _, _ := v.PK() opt.omitFields = append(opt.omitFields, pkName) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") case sequel.CompositeKeyer: keyNames, _, _ := v.CompositeKey() opt.omitFields = append(opt.omitFields, keyNames...) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") default: panic("unreachable") } - stmt.WriteString(model.InsertPlaceholders(0)) + stmt.WriteString(model.SQLInsertPlaceholders(1)) if len(opt.duplicateKeys) > 0 { - stmt.WriteString(" ON CONFLICT(" + strings.Join(opt.duplicateKeys, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(opt.duplicateKeys, ",")) + stmt.WriteString(")") } else { switch vi := any(model).(type) { case duplicateKeyer: keys := vi.DuplicateKeys() opt.omitFields = append(opt.omitFields, keys...) - stmt.WriteString(" ON CONFLICT(" + strings.Join(keys, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(keys, ",")) + stmt.WriteString(")") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - stmt.WriteString(" ON CONFLICT(" + pkName + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(pkName) + stmt.WriteString(")") case sequel.CompositeKeyer: names, _, _ := vi.CompositeKey() - stmt.WriteString(" ON CONFLICT(" + strings.Join(names, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(names, ",")) + stmt.WriteString(")") default: panic("unreachable") } @@ -355,13 +363,15 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface{ if first { stmt.WriteString(columns[i] + " = EXCLUDED." + columns[i]) } else { - stmt.WriteString(","+ columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString("," + columns[i] + " = EXCLUDED." + columns[i]) } first = false } clear(omitDict) } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") return db.QueryRowContext(ctx, stmt.String(), values...).Scan(model.Addrs()...) } @@ -394,14 +404,18 @@ func Upsert[T interface { opt.omitFields = append(opt.omitFields, pkName) columns = append(columns[:idx], columns[idx+1:]...) // Don't include auto increment primary key on INSERT - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") - - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + values := data[0].Values() + values = append(values[:idx], values[idx+1:]...) + args = append(args, values...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -409,25 +423,31 @@ func Upsert[T interface { case sequel.PrimaryKeyer: pkName, _, _ := v.PK() opt.omitFields = append(opt.omitFields, pkName) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } case sequel.CompositeKeyer: keyNames, _, _ := v.CompositeKey() opt.omitFields = append(opt.omitFields, keyNames...) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } default: @@ -440,17 +460,23 @@ func Upsert[T interface { case duplicateKeyer: keys := vi.DuplicateKeys() opt.omitFields = append(opt.omitFields, keys...) - stmt.WriteString(" ON CONFLICT(" + strings.Join(keys, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(keys, ",")) + stmt.WriteString(")") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - stmt.WriteString(" ON CONFLICT(" + pkName + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(pkName) + stmt.WriteString(")") case sequel.CompositeKeyer: names, _, _ := vi.CompositeKey() // // Exclude primary key, don't update it // for i := len(idxs) - 1; i >= 0; i-- { // columns = append(columns[:idxs[i]], columns[idxs[i]+1:]...) // } - stmt.WriteString(" ON CONFLICT(" + strings.Join(names, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(names, ",")) + stmt.WriteString(")") default: panic("unreachable") } @@ -473,27 +499,34 @@ func Upsert[T interface { continue } if first { - stmt.WriteString(columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } else { - stmt.WriteString(","+ columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } first = false } clear(omitDict) } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") rows, err := db.QueryContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) // Deallocate statement if err != nil { return nil, err } defer rows.Close() - var i int64 + var count int64 for rows.Next() { - if err := rows.Scan(Ptr(&data[i]).Addrs()...); err != nil { + if err := rows.Scan(Ptr(&data[count]).Addrs()...); err != nil { return nil, err } - i++ + count++ } if err := rows.Close(); err != nil { return nil, err @@ -501,59 +534,118 @@ func Upsert[T interface { if err := rows.Err(); err != nil { return nil, err } - return sequel.NewRowsAffectedResult(i), nil + return sequel.NewRowsAffectedResult(count), nil } {{ else }} func UpsertOne[T sequel.KeyValuer, Ptr sequel.KeyValueScanner[T]](ctx context.Context, db sequel.DB, model Ptr, override bool, omittedFields ...string) (sql.Result, error) { stmt := strpool.AcquireString() defer strpool.ReleaseString(stmt) switch v := any(model).(type) { - case sequel.PrimaryKeyer: + case sequel.AutoIncrKeyer: pkName, idx, _ := v.PK() columns := model.Columns() if !override { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat(",?", len(columns))[1:] + ");") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", len(columns))[1:] + ");") } else { omitDict := map[string]struct{}{pkName: {}} for i := range omittedFields { omitDict[omittedFields[i]] = struct{}{} } noOfCols := len(columns) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat(",?", noOfCols)[1:] + ") ON DUPLICATE KEY UPDATE ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", noOfCols)[1:]) + stmt.WriteString(") ON DUPLICATE KEY UPDATE ") first := true for i := range columns { if _, ok := omitDict[columns[i]]; ok { continue } if first { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString(" =VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } else { - stmt.WriteString(","+ columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" =VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } first = false } clear(omitDict) } - if _, ok := any(model).(sequel.AutoIncrKeyer); ok { - result, err := db.ExecContext(ctx, stmt.String(), model.Values()...) - if err != nil { + result, err := db.ExecContext(ctx, stmt.String(), model.Values()...) + if err != nil { + return nil, err + } + i64, err := result.LastInsertId() + if err != nil { + return nil, err + } + switch v := model.Addrs()[idx].(type) { + case *int64: + *v = i64 + case sql.Scanner: + if err := v.Scan(i64); err != nil { return nil, err } - i64, err := result.LastInsertId() - if err != nil { - return nil, err + default: + return nil, fmt.Errorf(`invalid auto increment data type %T`, v) + } + return result, nil + case sequel.PrimaryKeyer: + pkName, _, _ := v.PK() + columns := model.Columns() + if !override { + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", len(columns))[1:]) + stmt.WriteString(");") + } else { + omitDict := map[string]struct{}{pkName: {}} + for i := range omittedFields { + omitDict[omittedFields[i]] = struct{}{} } - switch v := model.Addrs()[idx].(type) { - case *int64: - *v = i64 - case sql.Scanner: - if err := v.Scan(i64); err != nil { - return nil, err + noOfCols := len(columns) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", noOfCols)[1:]) + stmt.WriteString(") ON DUPLICATE KEY UPDATE ") + first := true + for i := range columns { + if _, ok := omitDict[columns[i]]; ok { + continue } - default: - return nil, fmt.Errorf(`sqlgen: invalid auto increment data type %T`, v) + if first { + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") + } else { + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") + } + first = false } - return result, nil + clear(omitDict) } return db.ExecContext(ctx, stmt.String(), model.Values()...) case sequel.CompositeKeyer: @@ -577,9 +669,15 @@ func UpsertOne[T sequel.KeyValuer, Ptr sequel.KeyValueScanner[T]](ctx context.Co continue } if i < noOfCols-1 { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + "),") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString("),") } else { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } } clear(dict) @@ -616,17 +714,25 @@ func Upsert[T interface { // Don't include auto increment primary key on INSERT columns = append(columns[:idx], columns[idx+1:]...) if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } placeholder := ",(" + strings.Repeat(",?", noOfCols)[1:] + ")" - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString(placeholder) - } else { - stmt.WriteString(placeholder[1:]) - } + stmt.WriteString(placeholder[1:]) + values := data[0].Values() + values = append(values[:idx], values[idx+1:]...) + args = append(args, values...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(placeholder) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -635,30 +741,40 @@ func Upsert[T interface { pkName, _, _ := v.PK() omittedFields = append(omittedFields, pkName) if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } case sequel.CompositeKeyer: if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } _, idxs, _ := v.CompositeKey() @@ -702,11 +818,33 @@ func FindByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Cont return db.QueryRowContext(ctx, query, args...).Scan(model.Addrs()...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return db.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = {{ quoteVar 1 }} LIMIT 1;", pk).Scan(model.Addrs()...) + stmt := strpool.AcquireString() + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = {{ quoteVar 1 }} LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() {{ if isStaticVar -}} - return db.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE ("+strings.Join(keyNames, ",")+") = ({{ quoteVar 1 }}"+strings.Repeat(",{{ quoteVar 1 }}", len(keyNames) - 1)+") LIMIT 1;", keys...).Scan(model.Addrs()...) + stmt := strpool.AcquireString() + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ({{ quoteVar 1 }}") + stmt.WriteString(strings.Repeat(",{{ quoteVar 1 }}", len(keyNames) - 1)) + stmt.WriteString(") LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) {{ else -}} stmt := strpool.AcquireString() stmt.WriteString("SELECT " + strings.Join(TableColumns(model), ",") + " FROM " + DbTable(model) + " WHERE ("+ strings.Join(keyNames, ",") +") = ({{ quoteVar 1 }}") @@ -740,14 +878,27 @@ func UpdateByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) return db.ExecContext(ctx, "UPDATE "+DbTable(model)+" SET "+strings.Join(columns, " = {{ quoteVar 1 }},")+" = {{ quoteVar 1 }} WHERE "+pkName+" = {{ quoteVar 1 }};", append(values, pk)...) {{ else -}} stmt := strpool.AcquireString() - defer strpool.ReleaseString(stmt) - stmt.WriteString("UPDATE "+DbTable(model)+" SET "+ columns[0] +" = "+ wrapVar(1)) + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" SET ") + stmt.WriteString(columns[0]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(1)) noOfColumn := len(columns) for i := 1; i < noOfColumn; i++ { - stmt.WriteString(","+ columns[i] +" = "+ wrapVar(i + 1)) - } - stmt.WriteString(" WHERE "+ pkName +" = "+ wrapVar(noOfColumn + 2)+ ";") - return db.ExecContext(ctx, stmt.String(), append(values, pk)...) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(i + 1)) + } + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(noOfColumn + 2)) + stmt.WriteString(";") + result, err := db.ExecContext(ctx, stmt.String(), append(values, pk)...) + strpool.ReleaseString(stmt) + return result, err {{ end -}} case sequel.CompositeKeyer: columns := model.Columns() @@ -766,14 +917,28 @@ func UpdateByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) {{ else -}} stmt := strpool.AcquireString() defer strpool.ReleaseString(stmt) - stmt.WriteString("UPDATE " + DbTable(model) + " SET " + columns[0] + " = {{ quoteVar 1}}") + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" SET ") + stmt.WriteString(columns[0]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(1)) for i := 1; i < noOfColumn; i++ { - stmt.WriteString("," + columns[i] + " = " + wrapVar(i+1)) - } - stmt.WriteString(" WHERE (" + strings.Join(keyNames, ",") + ") = (" + wrapVar(noOfColumn+1)) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(i + 1)) + } + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = (") + stmt.WriteString(wrapVar(noOfColumn + 1)) noOfKey := len(keyNames) for i := 1; i < noOfKey; i++ { - stmt.WriteString("," + columns[i] + " = " + wrapVar(noOfColumn+i+1)) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(noOfColumn + i + 1)) } stmt.WriteString(");") args = append(args, values...) @@ -834,22 +999,53 @@ const ( ) func LockByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Context, tx *sql.Tx, model Ptr, locker sequel.RowLevelLocker) error { + stmt := strpool.AcquireString() switch v := any(model).(type) { case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return tx.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = {{ quoteVar 1 }} LIMIT 1 "+ locker.LockMode() +";", pk).Scan(model.Addrs()...) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = {{ quoteVar 1 }} LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") + row := tx.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() {{ if isStaticVar -}} - return tx.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE ("+strings.Join(keyNames, ",")+") = ({{ quoteVar 1 }}"+strings.Repeat(",{{ quoteVar 1 }}", len(keyNames) - 1)+") LIMIT 1 "+ locker.LockMode() +";", keys...).Scan(model.Addrs()...) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString("("+strings.Join(keyNames, ",")+") = ({{ quoteVar 1 }}"+strings.Repeat(",{{ quoteVar 1 }}", len(keyNames)-1)+") LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") + row := tx.QueryRowContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) {{ else -}} - stmt := strpool.AcquireString() - stmt.WriteString("SELECT " + strings.Join(TableColumns(model), ",") + " FROM " + DbTable(model) + " WHERE ("+ strings.Join(keyNames, ",") +") = ({{ quoteVar 1 }}") + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString("(") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ({{ quoteVar 1 }}") noOfKey := len(keyNames) for i := 1; i < noOfKey; i++ { - stmt.WriteString(","+ wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(wrapVar(i+1)) } - stmt.WriteString(") LIMIT 1 "+ locker.LockMode() +";") + stmt.WriteString(") LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") row := tx.QueryRowContext(ctx, stmt.String(), keys...) strpool.ReleaseString(stmt) return row.Scan(model.Addrs()...) @@ -897,8 +1093,8 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -908,78 +1104,89 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT ") - blr.WriteString(strings.Join(TableColumns(v), ",")) - blr.WriteString(" FROM ") - blr.WriteString(DbTable(v)) - blr.WriteString(" WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) - if n := len(r.stmt.OrderBy); n > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } + if n := len(r.stmt.OrderBy); n > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i + } - buf := strpool.AcquireString() - for i := 0; i < n; i++ { - orderedColumn := r.stmt.OrderBy[i] - columnName := orderedColumn.ColumnName() - value := values[colDict[columnName]] - if orderedColumn.Asc() { - // If ascending - blr.WriteString(columnName) - blr.WriteString(" <= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" < ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") - } else { - // If descending - blr.WriteString(columnName) - blr.WriteString(" >= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" > ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") + buf := strpool.AcquireString() + for i := 0; i < n; i++ { + orderedColumn := r.stmt.OrderBy[i] + columnName := orderedColumn.ColumnName() + value := values[colDict[columnName]] + if orderedColumn.Asc() { + // If ascending + stmt.WriteString(columnName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } else { + // If descending + stmt.WriteString(columnName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } } + clear(colDict) + stmt.WriteString("(") + stmt.WriteString(buf.String()) + strpool.ReleaseString(buf) } - clear(colDict) - blr.WriteString("(") - blr.WriteString(buf.String()) - strpool.ReleaseString(buf) - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") <= " + blr.Vars(vals)+")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("("+pkName + " <= " + blr.Var(val)+")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") <= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -992,10 +1199,14 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("("+ strings.Join(pkNames, ",") +")"+ suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -1005,22 +1216,24 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("("+ strings.Join(pkNames, ",") +") DESC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") DESC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName) - blr.WriteString(" DESC") + stmt.WriteString(pkName) + stmt.WriteString(" DESC") default: panic("unreachable") } } // Add one to limit to find next cursor - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(r.stmt.Limit+1))) - blr.WriteString(";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit+1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -1076,8 +1289,9 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -1087,73 +1301,97 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } - - if len(r.stmt.OrderBy) > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" AND ") - } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " >= " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " <= " + blr.Var(val)) + if len(r.stmt.OrderBy) > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i } - } - blr.WriteString(" AND (") - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" OR ") + + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" AND ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + } } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " > " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " < " + blr.Var(val)) + stmt.WriteString(" AND (") + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" OR ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" > ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" < ") + stmt.WriteString(stmt.Var(val)) + } } + clear(colDict) + stmt.WriteString(" OR ") } - clear(colDict) - blr.WriteString(" OR ") - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") >= " + blr.Vars(vals)+")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("("+pkName + " >= " + blr.Var(val)+")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") >= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -1166,10 +1404,14 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("("+ strings.Join(pkNames, ",") +")"+ suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -1179,18 +1421,23 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("("+ strings.Join(pkNames, ",") +") ASC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") ASC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName) + stmt.WriteString(pkName) + stmt.WriteString(" ASC") default: panic("unreachable") } } - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit+1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -1243,65 +1490,76 @@ type SelectStmt struct { func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectStmt) ([]T, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + if selectStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: - ReleaseStmt(blr) + ReleaseStmt(stmt) return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY "+ stmt.GroupBy[0]) + if n := len(selectStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString(","+stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY "+stmt.OrderBy[0].ColumnName()) + if n := len(selectStmt.OrderBy); n > 0 { + if selectStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY "+stmt.OrderBy[0].ColumnName()+" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString(","+stmt.OrderBy[i].ColumnName() +" ASC") + if selectStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString(","+stmt.OrderBy[i].ColumnName() +" DESC") + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - if stmt.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(stmt.Limit))) + if selectStmt.Limit > 0 { + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(selectStmt.Limit))) } - if stmt.Offset > 0 { - blr.WriteString(" OFFSET ") - blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) + if selectStmt.Offset > 0 { + stmt.WriteString(" OFFSET ") + stmt.WriteString(strconv.FormatUint(selectStmt.Offset, 10)) } - blr.WriteString(";") - rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(";") + rows, err := db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err != nil { return nil, err } @@ -1334,67 +1592,67 @@ type SelectOneStmt struct { func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectOneStmt) (Ptr, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectOneStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectOneStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectOneStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(stmt.FromTable) + if selectOneStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectOneStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM ") - blr.WriteString(DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectOneStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectOneStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY ") - blr.WriteString(stmt.GroupBy[0]) + if n := len(selectOneStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectOneStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString(",") - blr.WriteString(stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) + if n := len(selectOneStmt.OrderBy); n > 0 { + if selectOneStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) + if selectOneStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - blr.WriteString(" LIMIT 1;") - row := db.QueryRowContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(" LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err := row.Scan(Ptr(&v).Addrs()...); err != nil { return nil, err } @@ -1426,107 +1684,105 @@ func ExecStmt[T any, Stmt interface { UpdateStmt | DeleteStmt }](ctx context.Context, db sequel.DB, stmtFunc func(T) Stmt) (sql.Result, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) - switch vi := any(stmt).(type) { + switch vi := any(stmtFunc(v)).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.Table) + stmt.WriteString("UPDATE ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.Table) } if len(vi.Set) > 0 { - blr.WriteString(" SET ") - vi.Set[0](blr) + stmt.WriteString(" SET ") + vi.Set[0](stmt) for i := 1; i < len(vi.Set); i++ { - blr.WriteString(",") - vi.Set[i](blr) + stmt.WriteString(",") + vi.Set[i](stmt) } } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" ASC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC") } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } {{ if ne driver "postgres" -}} {{- /* postgres */ -}} if vi.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(vi.Limit))) + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(vi.Limit))) } {{ end -}} case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.FromTable) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.FromTable) } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } {{ if ne driver "postgres" -}} {{- /* postgres */ -}} if vi.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(vi.Limit))) + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(vi.Limit))) } {{ end -}} } - blr.WriteString(";") - return db.ExecContext(ctx, blr.Query(), blr.Args()...) + stmt.WriteString(";") + return db.ExecContext(ctx, stmt.Query(), stmt.Args()...) } - var ( pool = sync.Pool{ New: func() any { diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 12bed820..b75810f6 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -9,6 +9,7 @@ require ( github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.18.0 github.com/jackc/pgx/v5 v5.7.6 + github.com/mattn/go-sqlite3 v1.14.22 github.com/samber/lo v1.51.0 github.com/si3nloong/sqlgen v1.0.0-beta.0 github.com/spf13/cobra v1.10.1 @@ -19,6 +20,7 @@ require ( require ( filippo.io/edwards25519 v1.1.0 // indirect + github.com/creack/pty v1.1.18 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/go-playground/locales v0.14.1 // indirect @@ -30,8 +32,8 @@ require ( github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/mattn/go-colorable v0.1.2 // indirect - github.com/mattn/go-isatty v0.0.8 // indirect + github.com/mattn/go-colorable v0.1.6 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 977446dc..64da77d8 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -8,8 +8,8 @@ github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63n github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -49,10 +49,11 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= +github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/docs/MODELS.md b/docs/MODELS.md index 3e912852..6cf98244 100644 --- a/docs/MODELS.md +++ b/docs/MODELS.md @@ -124,7 +124,7 @@ func (v *User) Addrs() []any { func (User) InsertColumns() []string { return []string{"name", "age", "email", "address", "money_in_bank", "created_at"} // 6 } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?)" // 6 } func (v User) InsertOneStmt() (string, []any) { diff --git a/docs/PRIMARY_KEY.md b/docs/PRIMARY_KEY.md index 3c069083..3d70f685 100644 --- a/docs/PRIMARY_KEY.md +++ b/docs/PRIMARY_KEY.md @@ -38,7 +38,7 @@ func (v *Location) Addrs() []any { func (Location) InsertColumns() []string { return []string{"name"} // 1 } -func (Location) InsertPlaceholders(row int) string { +func (Location) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v Location) InsertOneStmt() (string, []any) { diff --git a/examples/db/mysql/db.go b/examples/db/mysql/db.go index 2dc8eb99..095997a5 100755 --- a/examples/db/mysql/db.go +++ b/examples/db/mysql/db.go @@ -56,7 +56,8 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { stmt.WriteString(strings.Repeat("?,", len(columns)-1)) stmt.WriteString("?);") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup if err != nil { return nil, err } @@ -101,8 +102,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) } stmt.WriteString(";") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return result, err default: noOfColumns := len(columns) @@ -117,8 +118,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) } stmt.WriteString(";") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return result, err } } @@ -127,52 +128,111 @@ func UpsertOne[T sequel.KeyValuer, Ptr sequel.KeyValueScanner[T]](ctx context.Co stmt := strpool.AcquireString() defer strpool.ReleaseString(stmt) switch v := any(model).(type) { - case sequel.PrimaryKeyer: + case sequel.AutoIncrKeyer: pkName, idx, _ := v.PK() columns := model.Columns() if !override { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat(",?", len(columns))[1:] + ");") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", len(columns))[1:] + ");") } else { omitDict := map[string]struct{}{pkName: {}} for i := range omittedFields { omitDict[omittedFields[i]] = struct{}{} } noOfCols := len(columns) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat(",?", noOfCols)[1:] + ") ON DUPLICATE KEY UPDATE ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", noOfCols)[1:]) + stmt.WriteString(") ON DUPLICATE KEY UPDATE ") first := true for i := range columns { if _, ok := omitDict[columns[i]]; ok { continue } if first { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString(" =VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } else { - stmt.WriteString("," + columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" =VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } first = false } clear(omitDict) } - if _, ok := any(model).(sequel.AutoIncrKeyer); ok { - result, err := db.ExecContext(ctx, stmt.String(), model.Values()...) - if err != nil { + result, err := db.ExecContext(ctx, stmt.String(), model.Values()...) + if err != nil { + return nil, err + } + i64, err := result.LastInsertId() + if err != nil { + return nil, err + } + switch v := model.Addrs()[idx].(type) { + case *int64: + *v = i64 + case sql.Scanner: + if err := v.Scan(i64); err != nil { return nil, err } - i64, err := result.LastInsertId() - if err != nil { - return nil, err + default: + return nil, fmt.Errorf(`invalid auto increment data type %T`, v) + } + return result, nil + case sequel.PrimaryKeyer: + pkName, _, _ := v.PK() + columns := model.Columns() + if !override { + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", len(columns))[1:]) + stmt.WriteString(");") + } else { + omitDict := map[string]struct{}{pkName: {}} + for i := range omittedFields { + omitDict[omittedFields[i]] = struct{}{} } - switch v := model.Addrs()[idx].(type) { - case *int64: - *v = i64 - case sql.Scanner: - if err := v.Scan(i64); err != nil { - return nil, err + noOfCols := len(columns) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", noOfCols)[1:]) + stmt.WriteString(") ON DUPLICATE KEY UPDATE ") + first := true + for i := range columns { + if _, ok := omitDict[columns[i]]; ok { + continue + } + if first { + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") + } else { + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } - default: - return nil, fmt.Errorf(`sqlgen: invalid auto increment data type %T`, v) + first = false } - return result, nil + clear(omitDict) } return db.ExecContext(ctx, stmt.String(), model.Values()...) case sequel.CompositeKeyer: @@ -196,9 +256,15 @@ func UpsertOne[T sequel.KeyValuer, Ptr sequel.KeyValueScanner[T]](ctx context.Co continue } if i < noOfCols-1 { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + "),") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString("),") } else { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } } clear(dict) @@ -235,17 +301,25 @@ func Upsert[T interface { // Don't include auto increment primary key on INSERT columns = append(columns[:idx], columns[idx+1:]...) if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } placeholder := ",(" + strings.Repeat(",?", noOfCols)[1:] + ")" - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString(placeholder) - } else { - stmt.WriteString(placeholder[1:]) - } + stmt.WriteString(placeholder[1:]) + values := data[0].Values() + values = append(values[:idx], values[idx+1:]...) + args = append(args, values...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(placeholder) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -254,30 +328,40 @@ func Upsert[T interface { pkName, _, _ := v.PK() omittedFields = append(omittedFields, pkName) if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } case sequel.CompositeKeyer: if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } _, idxs, _ := v.CompositeKey() @@ -320,10 +404,32 @@ func FindByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Cont return db.QueryRowContext(ctx, query, args...).Scan(model.Addrs()...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return db.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = ? LIMIT 1;", pk).Scan(model.Addrs()...) + stmt := strpool.AcquireString() + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ? LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() - return db.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE ("+strings.Join(keyNames, ",")+") = (?"+strings.Repeat(",?", len(keyNames)-1)+") LIMIT 1;", keys...).Scan(model.Addrs()...) + stmt := strpool.AcquireString() + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = (?") + stmt.WriteString(strings.Repeat(",?", len(keyNames)-1)) + stmt.WriteString(") LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) default: panic("unreachable") } @@ -391,13 +497,35 @@ const ( ) func LockByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Context, tx *sql.Tx, model Ptr, locker sequel.RowLevelLocker) error { + stmt := strpool.AcquireString() switch v := any(model).(type) { case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return tx.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = ? LIMIT 1 "+locker.LockMode()+";", pk).Scan(model.Addrs()...) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ? LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") + row := tx.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() - return tx.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE ("+strings.Join(keyNames, ",")+") = (?"+strings.Repeat(",?", len(keyNames)-1)+") LIMIT 1 "+locker.LockMode()+";", keys...).Scan(model.Addrs()...) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString("(" + strings.Join(keyNames, ",") + ") = (?" + strings.Repeat(",?", len(keyNames)-1) + ") LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") + row := tx.QueryRowContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) default: panic("unreachable") } @@ -441,8 +569,8 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -452,76 +580,89 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT ") - blr.WriteString(strings.Join(TableColumns(v), ",")) - blr.WriteString(" FROM ") - blr.WriteString(DbTable(v)) - blr.WriteString(" WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) - if n := len(r.stmt.OrderBy); n > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } + if n := len(r.stmt.OrderBy); n > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i + } - buf := strpool.AcquireString() - for i := 0; i < n; i++ { - orderedColumn := r.stmt.OrderBy[i] - columnName := orderedColumn.ColumnName() - value := values[colDict[columnName]] - if orderedColumn.Asc() { - // If ascending - blr.WriteString(columnName) - blr.WriteString(" <= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" < ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") - } else { - // If descending - blr.WriteString(columnName) - blr.WriteString(" >= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" > ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") + buf := strpool.AcquireString() + for i := 0; i < n; i++ { + orderedColumn := r.stmt.OrderBy[i] + columnName := orderedColumn.ColumnName() + value := values[colDict[columnName]] + if orderedColumn.Asc() { + // If ascending + stmt.WriteString(columnName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } else { + // If descending + stmt.WriteString(columnName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } } + clear(colDict) + stmt.WriteString("(") + stmt.WriteString(buf.String()) + strpool.ReleaseString(buf) } - clear(colDict) - blr.WriteString("(" + buf.String()) - strpool.ReleaseString(buf) - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") <= " + blr.Vars(vals) + ")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("(" + pkName + " <= " + blr.Var(val) + ")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") <= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -534,10 +675,14 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ")" + suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -547,19 +692,24 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ") DESC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") DESC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + " DESC") + stmt.WriteString(pkName) + stmt.WriteString(" DESC") default: panic("unreachable") } } // Add one to limit to find next cursor - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit + 1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -615,8 +765,9 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -626,73 +777,97 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } - - if len(r.stmt.OrderBy) > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" AND ") - } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " >= " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " <= " + blr.Var(val)) + if len(r.stmt.OrderBy) > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i } - } - blr.WriteString(" AND (") - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" OR ") + + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" AND ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + } } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " > " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " < " + blr.Var(val)) + stmt.WriteString(" AND (") + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" OR ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" > ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" < ") + stmt.WriteString(stmt.Var(val)) + } } + clear(colDict) + stmt.WriteString(" OR ") } - clear(colDict) - blr.WriteString(" OR ") - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") >= " + blr.Vars(vals) + ")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("(" + pkName + " >= " + blr.Var(val) + ")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") >= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -705,10 +880,14 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ")" + suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -718,18 +897,23 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ") ASC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") ASC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName) + stmt.WriteString(pkName) + stmt.WriteString(" ASC") default: panic("unreachable") } } - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit + 1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -782,65 +966,76 @@ type SelectStmt struct { func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectStmt) ([]T, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + if selectStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: - ReleaseStmt(blr) + ReleaseStmt(stmt) return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY " + stmt.GroupBy[0]) + if n := len(selectStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString("," + stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName()) + if n := len(selectStmt.OrderBy); n > 0 { + if selectStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName() + " DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " ASC") + if selectStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " DESC") + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - if stmt.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(stmt.Limit))) + if selectStmt.Limit > 0 { + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(selectStmt.Limit))) } - if stmt.Offset > 0 { - blr.WriteString(" OFFSET ") - blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) + if selectStmt.Offset > 0 { + stmt.WriteString(" OFFSET ") + stmt.WriteString(strconv.FormatUint(selectStmt.Offset, 10)) } - blr.WriteString(";") - rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(";") + rows, err := db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err != nil { return nil, err } @@ -873,67 +1068,67 @@ type SelectOneStmt struct { func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectOneStmt) (Ptr, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectOneStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectOneStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectOneStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(stmt.FromTable) + if selectOneStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectOneStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM ") - blr.WriteString(DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectOneStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectOneStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY ") - blr.WriteString(stmt.GroupBy[0]) + if n := len(selectOneStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectOneStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString(",") - blr.WriteString(stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) + if n := len(selectOneStmt.OrderBy); n > 0 { + if selectOneStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) + if selectOneStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - blr.WriteString(" LIMIT 1;") - row := db.QueryRowContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(" LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err := row.Scan(Ptr(&v).Addrs()...); err != nil { return nil, err } @@ -959,97 +1154,96 @@ func ExecStmt[T any, Stmt interface { UpdateStmt | DeleteStmt }](ctx context.Context, db sequel.DB, stmtFunc func(T) Stmt) (sql.Result, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) - switch vi := any(stmt).(type) { + switch vi := any(stmtFunc(v)).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.Table) + stmt.WriteString("UPDATE ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.Table) } if len(vi.Set) > 0 { - blr.WriteString(" SET ") - vi.Set[0](blr) + stmt.WriteString(" SET ") + vi.Set[0](stmt) for i := 1; i < len(vi.Set); i++ { - blr.WriteString(",") - vi.Set[i](blr) + stmt.WriteString(",") + vi.Set[i](stmt) } } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" ASC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC") } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(vi.Limit))) + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(vi.Limit))) } case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.FromTable) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.FromTable) } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(vi.Limit))) + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(vi.Limit))) } } - blr.WriteString(";") - return db.ExecContext(ctx, blr.Query(), blr.Args()...) + stmt.WriteString(";") + return db.ExecContext(ctx, stmt.Query(), stmt.Args()...) } var ( diff --git a/examples/db/postgres/db.go b/examples/db/postgres/db.go index 675785c2..6a6751fa 100755 --- a/examples/db/postgres/db.go +++ b/examples/db/postgres/db.go @@ -46,8 +46,8 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { stmt.WriteString(strings.Join(TableColumns(model), ",")) stmt.WriteString(";") row := db.QueryRowContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return row.Scan(model.Addrs()...) } } @@ -63,90 +63,77 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db columns := model.Columns() stmt := strpool.AcquireString() + var ( + rows *sql.Rows + err error + ) switch v := any(model).(type) { case sequel.AutoIncrKeyer: _, idx, _ := v.PK() columns = append(columns[:idx], columns[idx+1:]...) noOfCols := len(columns) - cols := strings.Join(columns, ",") args := make([]any, 0, noOfCols*noOfData) stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + cols + ") VALUES ") - if n := len(data); n > 0 { - stmt.WriteString(model.InsertPlaceholders(1)) - values := data[0].Values() + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + values := data[0].Values() + values = append(values[:idx], values[idx+1:]...) + args = append(args, values...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i + 1)) + values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) - for i := 1; i < n; i++ { - stmt.WriteString(",") - stmt.WriteString(model.InsertPlaceholders(i + 1)) - values := data[i].Values() - values = append(values[:idx], values[idx+1:]...) - args = append(args, values...) - } } stmt.WriteString(" RETURNING ") stmt.WriteString(strings.Join(TableColumns(model), ",")) stmt.WriteString(";") - rows, err := db.QueryContext(ctx, stmt.String(), args...) - // Cleanup - args = nil - strpool.ReleaseString(stmt) - if err != nil { - return nil, err - } - defer rows.Close() - var i int64 - for rows.Next() { - if err := rows.Scan(Ptr(&data[i]).Addrs()...); err != nil { - return nil, err - } - i++ - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return sequel.NewRowsAffectedResult(i), nil + rows, err = db.QueryContext(ctx, stmt.String(), args...) + args = nil // Cleanup default: noOfCols := len(columns) args := make([]any, 0, noOfCols*noOfData) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + model.InsertPlaceholders(0)) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") - stmt.WriteString(model.InsertPlaceholders(i)) + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } stmt.WriteString(" RETURNING ") stmt.WriteString(strings.Join(TableColumns(model), ",")) stmt.WriteString(";") - rows, err := db.QueryContext(ctx, stmt.String(), args...) - // Cleanup - args = nil - strpool.ReleaseString(stmt) - if err != nil { - return nil, err - } - defer rows.Close() - var i int64 - for rows.Next() { - if err := rows.Scan(Ptr(&data[i]).Addrs()...); err != nil { - return nil, err - } - i++ - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { + rows, err = db.QueryContext(ctx, stmt.String(), args...) + args = nil // Cleanup + } + strpool.ReleaseString(stmt) // Cleanup + if err != nil { + return nil, err + } + defer rows.Close() + var count int64 + for rows.Next() { + if err := rows.Scan(Ptr(&data[count]).Addrs()...); err != nil { return nil, err } - return sequel.NewRowsAffectedResult(i), nil + count++ } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return sequel.NewRowsAffectedResult(count), nil } type duplicateKeyer interface { @@ -204,33 +191,53 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface { columns = append(columns[:idx], columns[idx+1:]...) values = append(values[:idx], values[idx+1:]...) // Don't include auto increment primary key on INSERT - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") case sequel.PrimaryKeyer: pkName, _, _ := v.PK() opt.omitFields = append(opt.omitFields, pkName) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") case sequel.CompositeKeyer: keyNames, _, _ := v.CompositeKey() opt.omitFields = append(opt.omitFields, keyNames...) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") default: panic("unreachable") } - stmt.WriteString(model.InsertPlaceholders(0)) + stmt.WriteString(model.SQLInsertPlaceholders(1)) if len(opt.duplicateKeys) > 0 { - stmt.WriteString(" ON CONFLICT(" + strings.Join(opt.duplicateKeys, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(opt.duplicateKeys, ",")) + stmt.WriteString(")") } else { switch vi := any(model).(type) { case duplicateKeyer: keys := vi.DuplicateKeys() opt.omitFields = append(opt.omitFields, keys...) - stmt.WriteString(" ON CONFLICT(" + strings.Join(keys, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(keys, ",")) + stmt.WriteString(")") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - stmt.WriteString(" ON CONFLICT(" + pkName + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(pkName) + stmt.WriteString(")") case sequel.CompositeKeyer: names, _, _ := vi.CompositeKey() - stmt.WriteString(" ON CONFLICT(" + strings.Join(names, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(names, ",")) + stmt.WriteString(")") default: panic("unreachable") } @@ -261,7 +268,9 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface { } clear(omitDict) } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") return db.QueryRowContext(ctx, stmt.String(), values...).Scan(model.Addrs()...) } @@ -294,14 +303,18 @@ func Upsert[T interface { opt.omitFields = append(opt.omitFields, pkName) columns = append(columns[:idx], columns[idx+1:]...) // Don't include auto increment primary key on INSERT - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") - - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + values := data[0].Values() + values = append(values[:idx], values[idx+1:]...) + args = append(args, values...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -309,25 +322,31 @@ func Upsert[T interface { case sequel.PrimaryKeyer: pkName, _, _ := v.PK() opt.omitFields = append(opt.omitFields, pkName) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } case sequel.CompositeKeyer: keyNames, _, _ := v.CompositeKey() opt.omitFields = append(opt.omitFields, keyNames...) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(") VALUES ") + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } default: @@ -340,17 +359,23 @@ func Upsert[T interface { case duplicateKeyer: keys := vi.DuplicateKeys() opt.omitFields = append(opt.omitFields, keys...) - stmt.WriteString(" ON CONFLICT(" + strings.Join(keys, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(keys, ",")) + stmt.WriteString(")") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - stmt.WriteString(" ON CONFLICT(" + pkName + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(pkName) + stmt.WriteString(")") case sequel.CompositeKeyer: names, _, _ := vi.CompositeKey() // // Exclude primary key, don't update it // for i := len(idxs) - 1; i >= 0; i-- { // columns = append(columns[:idxs[i]], columns[idxs[i]+1:]...) // } - stmt.WriteString(" ON CONFLICT(" + strings.Join(names, ",") + ")") + stmt.WriteString(" ON CONFLICT(") + stmt.WriteString(strings.Join(names, ",")) + stmt.WriteString(")") default: panic("unreachable") } @@ -373,27 +398,34 @@ func Upsert[T interface { continue } if first { - stmt.WriteString(columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } else { - stmt.WriteString("," + columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } first = false } clear(omitDict) } - stmt.WriteString(" RETURNING " + strings.Join(TableColumns(model), ",") + ";") + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") rows, err := db.QueryContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) // Deallocate statement if err != nil { return nil, err } defer rows.Close() - var i int64 + var count int64 for rows.Next() { - if err := rows.Scan(Ptr(&data[i]).Addrs()...); err != nil { + if err := rows.Scan(Ptr(&data[count]).Addrs()...); err != nil { return nil, err } - i++ + count++ } if err := rows.Close(); err != nil { return nil, err @@ -401,7 +433,7 @@ func Upsert[T interface { if err := rows.Err(); err != nil { return nil, err } - return sequel.NewRowsAffectedResult(i), nil + return sequel.NewRowsAffectedResult(count), nil } // FindByPK is to find single record using primary key. @@ -412,7 +444,17 @@ func FindByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Cont return db.QueryRowContext(ctx, query, args...).Scan(model.Addrs()...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return db.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = $1 LIMIT 1;", pk).Scan(model.Addrs()...) + stmt := strpool.AcquireString() + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = $1 LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() stmt := strpool.AcquireString() @@ -443,14 +485,27 @@ func UpdateByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) values := model.Values() values = append(values[:pkIdx], append(values[pkIdx+1:], pk)...) stmt := strpool.AcquireString() - defer strpool.ReleaseString(stmt) - stmt.WriteString("UPDATE " + DbTable(model) + " SET " + columns[0] + " = " + wrapVar(1)) + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" SET ") + stmt.WriteString(columns[0]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(1)) noOfColumn := len(columns) for i := 1; i < noOfColumn; i++ { - stmt.WriteString("," + columns[i] + " = " + wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(i + 1)) } - stmt.WriteString(" WHERE " + pkName + " = " + wrapVar(noOfColumn+2) + ";") - return db.ExecContext(ctx, stmt.String(), append(values, pk)...) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(noOfColumn + 2)) + stmt.WriteString(";") + result, err := db.ExecContext(ctx, stmt.String(), append(values, pk)...) + strpool.ReleaseString(stmt) + return result, err case sequel.CompositeKeyer: columns := model.Columns() keyNames, keyIdxs, keys := v.CompositeKey() @@ -464,14 +519,28 @@ func UpdateByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) args := make([]any, 0, noOfColumn+len(keys)) stmt := strpool.AcquireString() defer strpool.ReleaseString(stmt) - stmt.WriteString("UPDATE " + DbTable(model) + " SET " + columns[0] + " = $1") + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" SET ") + stmt.WriteString(columns[0]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(1)) for i := 1; i < noOfColumn; i++ { - stmt.WriteString("," + columns[i] + " = " + wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(i + 1)) } - stmt.WriteString(" WHERE (" + strings.Join(keyNames, ",") + ") = (" + wrapVar(noOfColumn+1)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = (") + stmt.WriteString(wrapVar(noOfColumn + 1)) noOfKey := len(keyNames) for i := 1; i < noOfKey; i++ { - stmt.WriteString("," + columns[i] + " = " + wrapVar(noOfColumn+i+1)) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = ") + stmt.WriteString(wrapVar(noOfColumn + i + 1)) } stmt.WriteString(");") args = append(args, values...) @@ -521,19 +590,40 @@ const ( ) func LockByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Context, tx *sql.Tx, model Ptr, locker sequel.RowLevelLocker) error { + stmt := strpool.AcquireString() switch v := any(model).(type) { case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return tx.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = $1 LIMIT 1 "+locker.LockMode()+";", pk).Scan(model.Addrs()...) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = $1 LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") + row := tx.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() - stmt := strpool.AcquireString() - stmt.WriteString("SELECT " + strings.Join(TableColumns(model), ",") + " FROM " + DbTable(model) + " WHERE (" + strings.Join(keyNames, ",") + ") = ($1") + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString("(") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ($1") noOfKey := len(keyNames) for i := 1; i < noOfKey; i++ { - stmt.WriteString("," + wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(wrapVar(i + 1)) } - stmt.WriteString(") LIMIT 1 " + locker.LockMode() + ";") + stmt.WriteString(") LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") row := tx.QueryRowContext(ctx, stmt.String(), keys...) strpool.ReleaseString(stmt) return row.Scan(model.Addrs()...) @@ -580,8 +670,8 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -591,76 +681,89 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT ") - blr.WriteString(strings.Join(TableColumns(v), ",")) - blr.WriteString(" FROM ") - blr.WriteString(DbTable(v)) - blr.WriteString(" WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) - if n := len(r.stmt.OrderBy); n > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } + if n := len(r.stmt.OrderBy); n > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i + } - buf := strpool.AcquireString() - for i := 0; i < n; i++ { - orderedColumn := r.stmt.OrderBy[i] - columnName := orderedColumn.ColumnName() - value := values[colDict[columnName]] - if orderedColumn.Asc() { - // If ascending - blr.WriteString(columnName) - blr.WriteString(" <= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" < ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") - } else { - // If descending - blr.WriteString(columnName) - blr.WriteString(" >= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" > ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") + buf := strpool.AcquireString() + for i := 0; i < n; i++ { + orderedColumn := r.stmt.OrderBy[i] + columnName := orderedColumn.ColumnName() + value := values[colDict[columnName]] + if orderedColumn.Asc() { + // If ascending + stmt.WriteString(columnName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } else { + // If descending + stmt.WriteString(columnName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } } + clear(colDict) + stmt.WriteString("(") + stmt.WriteString(buf.String()) + strpool.ReleaseString(buf) } - clear(colDict) - blr.WriteString("(" + buf.String()) - strpool.ReleaseString(buf) - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") <= " + blr.Vars(vals) + ")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("(" + pkName + " <= " + blr.Var(val) + ")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") <= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -673,10 +776,14 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ")" + suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -686,19 +793,24 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ") DESC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") DESC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + " DESC") + stmt.WriteString(pkName) + stmt.WriteString(" DESC") default: panic("unreachable") } } // Add one to limit to find next cursor - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit + 1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -754,8 +866,9 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -765,73 +878,97 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } - - if len(r.stmt.OrderBy) > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" AND ") - } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " >= " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " <= " + blr.Var(val)) + if len(r.stmt.OrderBy) > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i } - } - blr.WriteString(" AND (") - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" OR ") + + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" AND ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + } } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " > " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " < " + blr.Var(val)) + stmt.WriteString(" AND (") + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" OR ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" > ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" < ") + stmt.WriteString(stmt.Var(val)) + } } + clear(colDict) + stmt.WriteString(" OR ") } - clear(colDict) - blr.WriteString(" OR ") - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") >= " + blr.Vars(vals) + ")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("(" + pkName + " >= " + blr.Var(val) + ")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") >= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -844,10 +981,14 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ")" + suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -857,18 +998,23 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ") ASC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") ASC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName) + stmt.WriteString(pkName) + stmt.WriteString(" ASC") default: panic("unreachable") } } - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit + 1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -921,65 +1067,76 @@ type SelectStmt struct { func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectStmt) ([]T, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + if selectStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: - ReleaseStmt(blr) + ReleaseStmt(stmt) return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY " + stmt.GroupBy[0]) + if n := len(selectStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString("," + stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName()) + if n := len(selectStmt.OrderBy); n > 0 { + if selectStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName() + " DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " ASC") + if selectStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " DESC") + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - if stmt.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(stmt.Limit))) + if selectStmt.Limit > 0 { + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(selectStmt.Limit))) } - if stmt.Offset > 0 { - blr.WriteString(" OFFSET ") - blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) + if selectStmt.Offset > 0 { + stmt.WriteString(" OFFSET ") + stmt.WriteString(strconv.FormatUint(selectStmt.Offset, 10)) } - blr.WriteString(";") - rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(";") + rows, err := db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err != nil { return nil, err } @@ -1012,67 +1169,67 @@ type SelectOneStmt struct { func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectOneStmt) (Ptr, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectOneStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectOneStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectOneStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(stmt.FromTable) + if selectOneStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectOneStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM ") - blr.WriteString(DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectOneStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectOneStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY ") - blr.WriteString(stmt.GroupBy[0]) + if n := len(selectOneStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectOneStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString(",") - blr.WriteString(stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) + if n := len(selectOneStmt.OrderBy); n > 0 { + if selectOneStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) + if selectOneStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - blr.WriteString(" LIMIT 1;") - row := db.QueryRowContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(" LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err := row.Scan(Ptr(&v).Addrs()...); err != nil { return nil, err } @@ -1096,89 +1253,88 @@ func ExecStmt[T any, Stmt interface { UpdateStmt | DeleteStmt }](ctx context.Context, db sequel.DB, stmtFunc func(T) Stmt) (sql.Result, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) - switch vi := any(stmt).(type) { + switch vi := any(stmtFunc(v)).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.Table) + stmt.WriteString("UPDATE ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.Table) } if len(vi.Set) > 0 { - blr.WriteString(" SET ") - vi.Set[0](blr) + stmt.WriteString(" SET ") + vi.Set[0](stmt) for i := 1; i < len(vi.Set); i++ { - blr.WriteString(",") - vi.Set[i](blr) + stmt.WriteString(",") + vi.Set[i](stmt) } } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" ASC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC") } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.FromTable) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.FromTable) } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } } - blr.WriteString(";") - return db.ExecContext(ctx, blr.Query(), blr.Args()...) + stmt.WriteString(";") + return db.ExecContext(ctx, stmt.Query(), stmt.Args()...) } var ( diff --git a/examples/db/sqlite/db.go b/examples/db/sqlite/db.go index d98562c5..c7cba63d 100755 --- a/examples/db/sqlite/db.go +++ b/examples/db/sqlite/db.go @@ -56,7 +56,8 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { stmt.WriteString(strings.Repeat("?,", len(columns)-1)) stmt.WriteString("?);") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup if err != nil { return nil, err } @@ -101,8 +102,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) } stmt.WriteString(";") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return result, err default: noOfColumns := len(columns) @@ -117,8 +118,8 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) } stmt.WriteString(";") result, err := db.ExecContext(ctx, stmt.String(), args...) - strpool.ReleaseString(stmt) - args = nil + strpool.ReleaseString(stmt) // Cleanup + args = nil // Cleanup return result, err } } @@ -127,52 +128,111 @@ func UpsertOne[T sequel.KeyValuer, Ptr sequel.KeyValueScanner[T]](ctx context.Co stmt := strpool.AcquireString() defer strpool.ReleaseString(stmt) switch v := any(model).(type) { - case sequel.PrimaryKeyer: + case sequel.AutoIncrKeyer: pkName, idx, _ := v.PK() columns := model.Columns() if !override { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat(",?", len(columns))[1:] + ");") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", len(columns))[1:] + ");") } else { omitDict := map[string]struct{}{pkName: {}} for i := range omittedFields { omitDict[omittedFields[i]] = struct{}{} } noOfCols := len(columns) - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES (" + strings.Repeat(",?", noOfCols)[1:] + ") ON DUPLICATE KEY UPDATE ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", noOfCols)[1:]) + stmt.WriteString(") ON DUPLICATE KEY UPDATE ") first := true for i := range columns { if _, ok := omitDict[columns[i]]; ok { continue } if first { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString(" =VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } else { - stmt.WriteString("," + columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" =VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } first = false } clear(omitDict) } - if _, ok := any(model).(sequel.AutoIncrKeyer); ok { - result, err := db.ExecContext(ctx, stmt.String(), model.Values()...) - if err != nil { + result, err := db.ExecContext(ctx, stmt.String(), model.Values()...) + if err != nil { + return nil, err + } + i64, err := result.LastInsertId() + if err != nil { + return nil, err + } + switch v := model.Addrs()[idx].(type) { + case *int64: + *v = i64 + case sql.Scanner: + if err := v.Scan(i64); err != nil { return nil, err } - i64, err := result.LastInsertId() - if err != nil { - return nil, err + default: + return nil, fmt.Errorf(`invalid auto increment data type %T`, v) + } + return result, nil + case sequel.PrimaryKeyer: + pkName, _, _ := v.PK() + columns := model.Columns() + if !override { + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", len(columns))[1:]) + stmt.WriteString(");") + } else { + omitDict := map[string]struct{}{pkName: {}} + for i := range omittedFields { + omitDict[omittedFields[i]] = struct{}{} } - switch v := model.Addrs()[idx].(type) { - case *int64: - *v = i64 - case sql.Scanner: - if err := v.Scan(i64); err != nil { - return nil, err + noOfCols := len(columns) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES (") + stmt.WriteString(strings.Repeat(",?", noOfCols)[1:]) + stmt.WriteString(") ON DUPLICATE KEY UPDATE ") + first := true + for i := range columns { + if _, ok := omitDict[columns[i]]; ok { + continue + } + if first { + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") + } else { + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } - default: - return nil, fmt.Errorf(`sqlgen: invalid auto increment data type %T`, v) + first = false } - return result, nil + clear(omitDict) } return db.ExecContext(ctx, stmt.String(), model.Values()...) case sequel.CompositeKeyer: @@ -196,9 +256,15 @@ func UpsertOne[T sequel.KeyValuer, Ptr sequel.KeyValueScanner[T]](ctx context.Co continue } if i < noOfCols-1 { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + "),") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString("),") } else { - stmt.WriteString(columns[i] + " =VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString(" = VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } } clear(dict) @@ -235,17 +301,25 @@ func Upsert[T interface { // Don't include auto increment primary key on INSERT columns = append(columns[:idx], columns[idx+1:]...) if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } placeholder := ",(" + strings.Repeat(",?", noOfCols)[1:] + ")" - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString(placeholder) - } else { - stmt.WriteString(placeholder[1:]) - } + stmt.WriteString(placeholder[1:]) + values := data[0].Values() + values = append(values[:idx], values[idx+1:]...) + args = append(args, values...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(placeholder) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -254,30 +328,40 @@ func Upsert[T interface { pkName, _, _ := v.PK() omittedFields = append(omittedFields, pkName) if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } case sequel.CompositeKeyer: if override { - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { - stmt.WriteString("INSERT IGNORE INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString("INSERT IGNORE INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } - for i := 0; i < noOfData; i++ { - if i > 0 { - stmt.WriteString("," + model.InsertPlaceholders(i)) - } else { - stmt.WriteString(model.InsertPlaceholders(i)) - } + stmt.WriteString(model.SQLInsertPlaceholders(1)) + args = append(args, data[0].Values()...) + for i := 1; i < noOfData; i++ { + stmt.WriteString(",") + stmt.WriteString(model.SQLInsertPlaceholders(i)) args = append(args, data[i].Values()...) } _, idxs, _ := v.CompositeKey() @@ -320,10 +404,32 @@ func FindByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Cont return db.QueryRowContext(ctx, query, args...).Scan(model.Addrs()...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return db.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = ? LIMIT 1;", pk).Scan(model.Addrs()...) + stmt := strpool.AcquireString() + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ? LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() - return db.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE ("+strings.Join(keyNames, ",")+") = (?"+strings.Repeat(",?", len(keyNames)-1)+") LIMIT 1;", keys...).Scan(model.Addrs()...) + stmt := strpool.AcquireString() + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = (?") + stmt.WriteString(strings.Repeat(",?", len(keyNames)-1)) + stmt.WriteString(") LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) default: panic("unreachable") } @@ -391,13 +497,35 @@ const ( ) func LockByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Context, tx *sql.Tx, model Ptr, locker sequel.RowLevelLocker) error { + stmt := strpool.AcquireString() switch v := any(model).(type) { case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - return tx.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE "+pkName+" = ? LIMIT 1 "+locker.LockMode()+";", pk).Scan(model.Addrs()...) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ? LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") + row := tx.QueryRowContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() - return tx.QueryRowContext(ctx, "SELECT "+strings.Join(TableColumns(model), ",")+" FROM "+DbTable(model)+" WHERE ("+strings.Join(keyNames, ",")+") = (?"+strings.Repeat(",?", len(keyNames)-1)+") LIMIT 1 "+locker.LockMode()+";", keys...).Scan(model.Addrs()...) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString("(" + strings.Join(keyNames, ",") + ") = (?" + strings.Repeat(",?", len(keyNames)-1) + ") LIMIT 1 ") + stmt.WriteString(locker.LockMode()) + stmt.WriteString(";") + row := tx.QueryRowContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return row.Scan(model.Addrs()...) default: panic("unreachable") } @@ -441,8 +569,8 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -452,76 +580,89 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT ") - blr.WriteString(strings.Join(TableColumns(v), ",")) - blr.WriteString(" FROM ") - blr.WriteString(DbTable(v)) - blr.WriteString(" WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) - if n := len(r.stmt.OrderBy); n > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } + if n := len(r.stmt.OrderBy); n > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i + } - buf := strpool.AcquireString() - for i := 0; i < n; i++ { - orderedColumn := r.stmt.OrderBy[i] - columnName := orderedColumn.ColumnName() - value := values[colDict[columnName]] - if orderedColumn.Asc() { - // If ascending - blr.WriteString(columnName) - blr.WriteString(" <= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" < ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") - } else { - // If descending - blr.WriteString(columnName) - blr.WriteString(" >= ") - blr.WriteString(blr.Var(value)) - blr.WriteString(" AND ") - buf.WriteString(columnName) - buf.WriteString(" > ") - buf.WriteString(blr.Var(value)) - buf.WriteString(" OR ") + buf := strpool.AcquireString() + for i := 0; i < n; i++ { + orderedColumn := r.stmt.OrderBy[i] + columnName := orderedColumn.ColumnName() + value := values[colDict[columnName]] + if orderedColumn.Asc() { + // If ascending + stmt.WriteString(columnName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" < ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } else { + // If descending + stmt.WriteString(columnName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(value)) + stmt.WriteString(" AND ") + buf.WriteString(columnName) + buf.WriteString(" > ") + buf.WriteString(stmt.Var(value)) + buf.WriteString(" OR ") + } } + clear(colDict) + stmt.WriteString("(") + stmt.WriteString(buf.String()) + strpool.ReleaseString(buf) } - clear(colDict) - blr.WriteString("(" + buf.String()) - strpool.ReleaseString(buf) - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") <= " + blr.Vars(vals) + ")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("(" + pkName + " <= " + blr.Var(val) + ")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") <= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -534,10 +675,14 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ")" + suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -547,19 +692,24 @@ func (r *Pager[T, Ptr]) Prev(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ") DESC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") DESC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + " DESC") + stmt.WriteString(pkName) + stmt.WriteString(" DESC") default: panic("unreachable") } } // Add one to limit to find next cursor - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit + 1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -615,8 +765,9 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite v = cursor[0] hasCursor = true } - blr := AcquireStmt() - defer ReleaseStmt(blr) + + stmt := AcquireStmt() + defer ReleaseStmt(stmt) for { if hasCursor { @@ -626,73 +777,97 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite } } - blr.WriteString("SELECT " + strings.Join(TableColumns(v), ",") + " FROM " + DbTable(v) + " WHERE ") - if r.stmt.Where != nil { - r.stmt.Where(blr) - } - - if len(r.stmt.OrderBy) > 0 { - colDict := make(map[string]int) - columns := v.Columns() - values := v.Values() - for i := range columns { - colDict[columns[i]] = i + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(v), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(v)) + if r.stmt.Where != nil || len(r.stmt.OrderBy) > 0 || hasCursor { + stmt.WriteString(" WHERE ") + if r.stmt.Where != nil { + r.stmt.Where(stmt) } - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" AND ") - } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " >= " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " <= " + blr.Var(val)) + if len(r.stmt.OrderBy) > 0 { + colDict := make(map[string]int) + columns := v.Columns() + values := v.Values() + for i := range columns { + colDict[columns[i]] = i } - } - blr.WriteString(" AND (") - for i, orderBy := range r.stmt.OrderBy { - colName := orderBy.ColumnName() - val := values[colDict[colName]] - if i > 0 { - blr.WriteString(" OR ") + + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" AND ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" <= ") + stmt.WriteString(stmt.Var(val)) + } } - if orderBy.Asc() { - // If ascending - blr.WriteString(colName + " > " + blr.Var(val)) - } else { - // If descending - blr.WriteString(colName + " < " + blr.Var(val)) + stmt.WriteString(" AND (") + for i, orderBy := range r.stmt.OrderBy { + colName := orderBy.ColumnName() + val := values[colDict[colName]] + if i > 0 { + stmt.WriteString(" OR ") + } + if orderBy.Asc() { + // If ascending + stmt.WriteString(colName) + stmt.WriteString(" > ") + stmt.WriteString(stmt.Var(val)) + } else { + // If descending + stmt.WriteString(colName) + stmt.WriteString(" < ") + stmt.WriteString(stmt.Var(val)) + } } + clear(colDict) + stmt.WriteString(" OR ") } - clear(colDict) - blr.WriteString(" OR ") - } - if hasCursor { - // Check the primary key and compare value - switch vi := any(v).(type) { - case sequel.CompositeKeyer: - pkNames, _, vals := vi.CompositeKey() - blr.WriteString("((" + strings.Join(pkNames, ",") + ") >= " + blr.Vars(vals) + ")") - case sequel.PrimaryKeyer: - pkName, _, val := vi.PK() - blr.WriteString("(" + pkName + " >= " + blr.Var(val) + ")") - default: - panic("unreachable") + if hasCursor { + // Check the primary key and compare value + switch vi := any(v).(type) { + case sequel.CompositeKeyer: + pkNames, _, vals := vi.CompositeKey() + stmt.WriteString("((") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") >= ") + stmt.WriteString(stmt.Vars(vals)) + stmt.WriteString(")") + case sequel.PrimaryKeyer: + pkName, _, val := vi.PK() + stmt.WriteString("(") + stmt.WriteString(pkName) + stmt.WriteString(" >= ") + stmt.WriteString(stmt.Var(val)) + stmt.WriteString(")") + default: + panic("unreachable") + } } } - blr.WriteString(" ORDER BY ") + stmt.WriteString(" ORDER BY ") if len(r.stmt.OrderBy) > 0 { for i := range r.stmt.OrderBy { if r.stmt.OrderBy[i].Asc() { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " ASC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC,") } else { - blr.WriteString(r.stmt.OrderBy[i].ColumnName() + " DESC,") + stmt.WriteString(r.stmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC,") } } var ( @@ -705,10 +880,14 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ")" + suffix) + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(")") + stmt.WriteString(suffix) case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName + suffix) + stmt.WriteString(pkName) + stmt.WriteString(suffix) default: panic("unreachable") } @@ -718,18 +897,23 @@ func (r *Pager[T, Ptr]) Next(ctx context.Context, db sequel.DB, cursor ...T) ite switch vi := any(v).(type) { case sequel.CompositeKeyer: pkNames, _, _ := vi.CompositeKey() - blr.WriteString("(" + strings.Join(pkNames, ",") + ") ASC") + stmt.WriteString("(") + stmt.WriteString(strings.Join(pkNames, ",")) + stmt.WriteString(") ASC") case sequel.PrimaryKeyer: pkName, _, _ := vi.PK() - blr.WriteString(pkName) + stmt.WriteString(pkName) + stmt.WriteString(" ASC") default: panic("unreachable") } } - blr.WriteString(" LIMIT " + strconv.Itoa((int)(r.stmt.Limit+1)) + ";") + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(r.stmt.Limit + 1))) + stmt.WriteString(";") - rows, err = db.QueryContext(ctx, blr.Query(), blr.Args()...) - blr.Reset() + rows, err = db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + stmt.Reset() if err != nil { yield(nil, err) return @@ -782,65 +966,76 @@ type SelectStmt struct { func QueryStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectStmt) ([]T, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM " + dbName(v) + stmt.FromTable) + if selectStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM " + DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: - ReleaseStmt(blr) + ReleaseStmt(stmt) return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY " + stmt.GroupBy[0]) + if n := len(selectStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString("," + stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName()) + if n := len(selectStmt.OrderBy); n > 0 { + if selectStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY " + stmt.OrderBy[0].ColumnName() + " DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " ASC") + if selectStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString("," + stmt.OrderBy[i].ColumnName() + " DESC") + stmt.WriteString(",") + stmt.WriteString(selectStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - if stmt.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(stmt.Limit))) + if selectStmt.Limit > 0 { + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(selectStmt.Limit))) } - if stmt.Offset > 0 { - blr.WriteString(" OFFSET ") - blr.WriteString(strconv.FormatUint(stmt.Offset, 10)) + if selectStmt.Offset > 0 { + stmt.WriteString(" OFFSET ") + stmt.WriteString(strconv.FormatUint(selectStmt.Offset, 10)) } - blr.WriteString(";") - rows, err := db.QueryContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(";") + rows, err := db.QueryContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err != nil { return nil, err } @@ -873,67 +1068,67 @@ type SelectOneStmt struct { func QueryOneStmt[T any, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, stmtFunc func(T) SelectOneStmt) (Ptr, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - blr.WriteString("SELECT ") - if len(stmt.Select) > 0 { - blr.WriteString(strings.Join(stmt.Select, ",")) + selectOneStmt := stmtFunc(v) + stmt := AcquireStmt() + stmt.WriteString("SELECT ") + if len(selectOneStmt.Select) > 0 { + stmt.WriteString(strings.Join(selectOneStmt.Select, ",")) } else { switch vj := any(v).(type) { case sequel.Columner: - blr.WriteString(strings.Join(TableColumns(vj), ",")) + stmt.WriteString(strings.Join(TableColumns(vj), ",")) default: - blr.WriteString("*") + stmt.WriteString("*") } } - if stmt.FromTable != "" { - blr.WriteString(" FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(stmt.FromTable) + if selectOneStmt.FromTable != "" { + stmt.WriteString(" FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(selectOneStmt.FromTable) } else { switch vj := any(v).(type) { case sequel.Tabler: - blr.WriteString(" FROM ") - blr.WriteString(DbTable(vj)) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(vj)) default: return nil, fmt.Errorf("missing table name for model %T", v) } } - if stmt.Where != nil { - blr.WriteString(" WHERE ") - stmt.Where(blr) + if selectOneStmt.Where != nil { + stmt.WriteString(" WHERE ") + selectOneStmt.Where(stmt) } - if n := len(stmt.GroupBy); n > 0 { - blr.WriteString(" GROUP BY ") - blr.WriteString(stmt.GroupBy[0]) + if n := len(selectOneStmt.GroupBy); n > 0 { + stmt.WriteString(" GROUP BY ") + stmt.WriteString(selectOneStmt.GroupBy[0]) for i := 1; i < n; i++ { - blr.WriteString(",") - blr.WriteString(stmt.GroupBy[i]) + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.GroupBy[i]) } } - if n := len(stmt.OrderBy); n > 0 { - if stmt.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) + if n := len(selectOneStmt.OrderBy); n > 0 { + if selectOneStmt.OrderBy[0].Asc() { + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(stmt.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(selectOneStmt.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { - if stmt.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) + if selectOneStmt.OrderBy[i].Asc() { + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(stmt.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(selectOneStmt.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } - blr.WriteString(" LIMIT 1;") - row := db.QueryRowContext(ctx, blr.Query(), blr.Args()...) - ReleaseStmt(blr) + stmt.WriteString(" LIMIT 1;") + row := db.QueryRowContext(ctx, stmt.Query(), stmt.Args()...) + ReleaseStmt(stmt) if err := row.Scan(Ptr(&v).Addrs()...); err != nil { return nil, err } @@ -959,97 +1154,96 @@ func ExecStmt[T any, Stmt interface { UpdateStmt | DeleteStmt }](ctx context.Context, db sequel.DB, stmtFunc func(T) Stmt) (sql.Result, error) { var v T - stmt := stmtFunc(v) - blr := AcquireStmt() - defer ReleaseStmt(blr) + stmt := AcquireStmt() + defer ReleaseStmt(stmt) - switch vi := any(stmt).(type) { + switch vi := any(stmtFunc(v)).(type) { case UpdateStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("UPDATE ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("UPDATE ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("UPDATE ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.Table) + stmt.WriteString("UPDATE ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.Table) } if len(vi.Set) > 0 { - blr.WriteString(" SET ") - vi.Set[0](blr) + stmt.WriteString(" SET ") + vi.Set[0](stmt) for i := 1; i < len(vi.Set); i++ { - blr.WriteString(",") - vi.Set[i](blr) + stmt.WriteString(",") + vi.Set[i](stmt) } } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" ASC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" ASC") } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(vi.Limit))) + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(vi.Limit))) } case DeleteStmt: if vt, ok := any(v).(sequel.Tabler); ok { - blr.WriteString("DELETE FROM ") - blr.WriteString(DbTable(vt)) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(vt)) } else { - blr.WriteString("DELETE FROM ") - blr.WriteString(dbName(v)) - blr.WriteString(vi.FromTable) + stmt.WriteString("DELETE FROM ") + stmt.WriteString(dbName(v)) + stmt.WriteString(vi.FromTable) } if vi.Where != nil { - blr.WriteString(" WHERE ") - vi.Where(blr) + stmt.WriteString(" WHERE ") + vi.Where(stmt) } if n := len(vi.OrderBy); n > 0 { if vi.OrderBy[0].Asc() { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) } else { - blr.WriteString(" ORDER BY ") - blr.WriteString(vi.OrderBy[0].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(" ORDER BY ") + stmt.WriteString(vi.OrderBy[0].ColumnName()) + stmt.WriteString(" DESC") } for i := 1; i < n; i++ { if vi.OrderBy[i].Asc() { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) } else { - blr.WriteString(",") - blr.WriteString(vi.OrderBy[i].ColumnName()) - blr.WriteString(" DESC") + stmt.WriteString(",") + stmt.WriteString(vi.OrderBy[i].ColumnName()) + stmt.WriteString(" DESC") } } } if vi.Limit > 0 { - blr.WriteString(" LIMIT ") - blr.WriteString(strconv.Itoa((int)(vi.Limit))) + stmt.WriteString(" LIMIT ") + stmt.WriteString(strconv.Itoa((int)(vi.Limit))) } } - blr.WriteString(";") - return db.ExecContext(ctx, blr.Query(), blr.Args()...) + stmt.WriteString(";") + return db.ExecContext(ctx, stmt.Query(), stmt.Args()...) } var ( diff --git a/examples/go.sum b/examples/go.sum index 20fcb67f..53448a52 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -16,19 +16,11 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= -github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= -github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= -github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= -github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dhui/dktest v0.4.6 h1:+DPKyScKSEp3VLtbMDHcUq6V5Lm5zfZZVb0Sk7Ahom4= -github.com/dhui/dktest v0.4.6/go.mod h1:JHTSYDtKkvFNFHJKqCzVzqXecyv+tKt8EzceOmQOgbU= -github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= -github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/cli v27.4.1+incompatible h1:VzPiUlRJ/xh+otB75gva3r05isHMo5wXDfPRi5/b4hI= github.com/docker/cli v27.4.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v28.3.3+incompatible h1:Dypm25kh4rmk49v1eiVbsAtpAsYURjYkaKubwuBdxEI= @@ -37,14 +29,8 @@ github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= -github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= -github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -113,8 +99,6 @@ github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85 github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -161,16 +145,6 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= diff --git a/examples/testcase/core/generated.go b/examples/testcase/core/generated.go index 8590b7ce..1ff2b9f8 100755 --- a/examples/testcase/core/generated.go +++ b/examples/testcase/core/generated.go @@ -70,10 +70,10 @@ func (v *User) Addrs() []any { &v.embed.deepNested.Name, // 14 - name } } -func (User) InsertColumns() []string { - return []string{"no", "joined_time", "address", "kind", "type", "chan", "postal_code", "extra_info", "nicknames", "slice", "map", "nested", "t", "name"} // 14 +func (User) SQLInsertColumns() string { + return "`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name`" } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 14 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/core/generated.go.tpl b/examples/testcase/core/generated.go.tpl index 8590b7ce..1ff2b9f8 100644 --- a/examples/testcase/core/generated.go.tpl +++ b/examples/testcase/core/generated.go.tpl @@ -70,10 +70,10 @@ func (v *User) Addrs() []any { &v.embed.deepNested.Name, // 14 - name } } -func (User) InsertColumns() []string { - return []string{"no", "joined_time", "address", "kind", "type", "chan", "postal_code", "extra_info", "nicknames", "slice", "map", "nested", "t", "name"} // 14 +func (User) SQLInsertColumns() string { + return "`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name`" } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 14 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/custom-declare/generated.go b/examples/testcase/schema/custom-declare/generated.go index 8de31958..be0c4010 100755 --- a/examples/testcase/schema/custom-declare/generated.go +++ b/examples/testcase/schema/custom-declare/generated.go @@ -6,7 +6,7 @@ import ( "github.com/si3nloong/sqlgen/sequel" ) -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v A) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/custom-declare/generated.go.tpl b/examples/testcase/schema/custom-declare/generated.go.tpl index 8de31958..be0c4010 100644 --- a/examples/testcase/schema/custom-declare/generated.go.tpl +++ b/examples/testcase/schema/custom-declare/generated.go.tpl @@ -6,7 +6,7 @@ import ( "github.com/si3nloong/sqlgen/sequel" ) -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v A) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/dynamic-table-name/generated.go b/examples/testcase/schema/dynamic-table-name/generated.go index a654b178..cf18a0ba 100755 --- a/examples/testcase/schema/dynamic-table-name/generated.go +++ b/examples/testcase/schema/dynamic-table-name/generated.go @@ -25,7 +25,7 @@ func (v *A) Addrs() []any { &v.Name, // 1 - name } } -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v A) InsertOneStmt() (string, []any) { @@ -63,7 +63,7 @@ func (v *Model) Addrs() []any { &v.Name, // 0 - name } } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v Model) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/dynamic-table-name/generated.go.tpl b/examples/testcase/schema/dynamic-table-name/generated.go.tpl index a654b178..cf18a0ba 100644 --- a/examples/testcase/schema/dynamic-table-name/generated.go.tpl +++ b/examples/testcase/schema/dynamic-table-name/generated.go.tpl @@ -25,7 +25,7 @@ func (v *A) Addrs() []any { &v.Name, // 1 - name } } -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v A) InsertOneStmt() (string, []any) { @@ -63,7 +63,7 @@ func (v *Model) Addrs() []any { &v.Name, // 0 - name } } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v Model) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/generated.go b/examples/testcase/schema/generated.go index 86d4ec0f..d7b0a4aa 100755 --- a/examples/testcase/schema/generated.go +++ b/examples/testcase/schema/generated.go @@ -30,7 +30,7 @@ func (v *A) Addrs() []any { &v.CreatedAt, // 2 - created_at } } -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v A) InsertOneStmt() (string, []any) { @@ -73,7 +73,7 @@ func (v *B) Addrs() []any { &v.CreatedAt, // 1 - created_at } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v B) InsertOneStmt() (string, []any) { @@ -112,7 +112,7 @@ func (v *C) Addrs() []any { &v.ID, // 0 - id } } -func (C) InsertPlaceholders(row int) string { +func (C) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v C) InsertOneStmt() (string, []any) { @@ -148,7 +148,7 @@ func (v *D) Addrs() []any { &v.ID, // 0 - id } } -func (D) InsertPlaceholders(row int) string { +func (D) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v D) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/generated.go.tpl b/examples/testcase/schema/generated.go.tpl index 86d4ec0f..d7b0a4aa 100644 --- a/examples/testcase/schema/generated.go.tpl +++ b/examples/testcase/schema/generated.go.tpl @@ -30,7 +30,7 @@ func (v *A) Addrs() []any { &v.CreatedAt, // 2 - created_at } } -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v A) InsertOneStmt() (string, []any) { @@ -73,7 +73,7 @@ func (v *B) Addrs() []any { &v.CreatedAt, // 1 - created_at } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v B) InsertOneStmt() (string, []any) { @@ -112,7 +112,7 @@ func (v *C) Addrs() []any { &v.ID, // 0 - id } } -func (C) InsertPlaceholders(row int) string { +func (C) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v C) InsertOneStmt() (string, []any) { @@ -148,7 +148,7 @@ func (v *D) Addrs() []any { &v.ID, // 0 - id } } -func (D) InsertPlaceholders(row int) string { +func (D) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v D) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/nopk/generated.go b/examples/testcase/schema/nopk/generated.go index c4371314..b222e89c 100755 --- a/examples/testcase/schema/nopk/generated.go +++ b/examples/testcase/schema/nopk/generated.go @@ -27,7 +27,7 @@ func (v *Customer) Addrs() []any { &v.Married, // 2 - married } } -func (Customer) InsertPlaceholders(row int) string { +func (Customer) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Customer) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/nopk/generated.go.tpl b/examples/testcase/schema/nopk/generated.go.tpl index c4371314..b222e89c 100644 --- a/examples/testcase/schema/nopk/generated.go.tpl +++ b/examples/testcase/schema/nopk/generated.go.tpl @@ -27,7 +27,7 @@ func (v *Customer) Addrs() []any { &v.Married, // 2 - married } } -func (Customer) InsertPlaceholders(row int) string { +func (Customer) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Customer) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/table-name/generated.go b/examples/testcase/schema/table-name/generated.go index c1f2fb1b..52fb1982 100755 --- a/examples/testcase/schema/table-name/generated.go +++ b/examples/testcase/schema/table-name/generated.go @@ -22,7 +22,7 @@ func (v *CustomTableName1) Addrs() []any { &v.Text, // 0 - text } } -func (CustomTableName1) InsertPlaceholders(row int) string { +func (CustomTableName1) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v CustomTableName1) InsertOneStmt() (string, []any) { @@ -51,7 +51,7 @@ func (v *CustomTableName2) Addrs() []any { &v.Text, // 0 - text } } -func (CustomTableName2) InsertPlaceholders(row int) string { +func (CustomTableName2) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v CustomTableName2) InsertOneStmt() (string, []any) { @@ -80,7 +80,7 @@ func (v *CustomTableName3) Addrs() []any { &v.Text, // 0 - text } } -func (CustomTableName3) InsertPlaceholders(row int) string { +func (CustomTableName3) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v CustomTableName3) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/schema/table-name/generated.go.tpl b/examples/testcase/schema/table-name/generated.go.tpl index c1f2fb1b..52fb1982 100644 --- a/examples/testcase/schema/table-name/generated.go.tpl +++ b/examples/testcase/schema/table-name/generated.go.tpl @@ -22,7 +22,7 @@ func (v *CustomTableName1) Addrs() []any { &v.Text, // 0 - text } } -func (CustomTableName1) InsertPlaceholders(row int) string { +func (CustomTableName1) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v CustomTableName1) InsertOneStmt() (string, []any) { @@ -51,7 +51,7 @@ func (v *CustomTableName2) Addrs() []any { &v.Text, // 0 - text } } -func (CustomTableName2) InsertPlaceholders(row int) string { +func (CustomTableName2) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v CustomTableName2) InsertOneStmt() (string, []any) { @@ -80,7 +80,7 @@ func (v *CustomTableName3) Addrs() []any { &v.Text, // 0 - text } } -func (CustomTableName3) InsertPlaceholders(row int) string { +func (CustomTableName3) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v CustomTableName3) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/alias/generated.go b/examples/testcase/struct-field/alias/generated.go index 4e9a031f..f1a775fe 100755 --- a/examples/testcase/struct-field/alias/generated.go +++ b/examples/testcase/struct-field/alias/generated.go @@ -44,7 +44,7 @@ func (v *AliasStruct) Addrs() []any { encoding.TimeScanner(&v.model.Updated), // 7 - updated } } -func (AliasStruct) InsertPlaceholders(row int) string { +func (AliasStruct) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?)" // 8 } func (v AliasStruct) InsertOneStmt() (string, []any) { @@ -121,7 +121,7 @@ func (v *B) Addrs() []any { &v.Name, // 0 - name } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v B) InsertOneStmt() (string, []any) { @@ -150,7 +150,7 @@ func (v *C) Addrs() []any { &v.ID, // 0 - id } } -func (C) InsertPlaceholders(row int) string { +func (C) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v C) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/alias/generated.go.tpl b/examples/testcase/struct-field/alias/generated.go.tpl index 4e9a031f..f1a775fe 100644 --- a/examples/testcase/struct-field/alias/generated.go.tpl +++ b/examples/testcase/struct-field/alias/generated.go.tpl @@ -44,7 +44,7 @@ func (v *AliasStruct) Addrs() []any { encoding.TimeScanner(&v.model.Updated), // 7 - updated } } -func (AliasStruct) InsertPlaceholders(row int) string { +func (AliasStruct) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?)" // 8 } func (v AliasStruct) InsertOneStmt() (string, []any) { @@ -121,7 +121,7 @@ func (v *B) Addrs() []any { &v.Name, // 0 - name } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v B) InsertOneStmt() (string, []any) { @@ -150,7 +150,7 @@ func (v *C) Addrs() []any { &v.ID, // 0 - id } } -func (C) InsertPlaceholders(row int) string { +func (C) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v C) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/array/generated.go b/examples/testcase/struct-field/array/generated.go index f2c9d7f3..576a7e11 100755 --- a/examples/testcase/struct-field/array/generated.go +++ b/examples/testcase/struct-field/array/generated.go @@ -31,7 +31,7 @@ func (v *Array) Addrs() []any { encoding.JSONScanner(&v.Str), // 4 - str } } -func (Array) InsertPlaceholders(row int) string { +func (Array) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?)" // 5 } func (v Array) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/array/generated.go.tpl b/examples/testcase/struct-field/array/generated.go.tpl index f2c9d7f3..576a7e11 100644 --- a/examples/testcase/struct-field/array/generated.go.tpl +++ b/examples/testcase/struct-field/array/generated.go.tpl @@ -31,7 +31,7 @@ func (v *Array) Addrs() []any { encoding.JSONScanner(&v.Str), // 4 - str } } -func (Array) InsertPlaceholders(row int) string { +func (Array) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?)" // 5 } func (v Array) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/custom/generated.go b/examples/testcase/struct-field/custom/generated.go index 7998b5a5..5a61793f 100755 --- a/examples/testcase/struct-field/custom/generated.go +++ b/examples/testcase/struct-field/custom/generated.go @@ -41,7 +41,7 @@ func (v *Address) Addrs() []any { encoding.StringScanner[CountryCode](&v.CountryCode), // 6 - country_code } } -func (Address) InsertPlaceholders(row int) string { +func (Address) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?)" // 7 } func (v Address) InsertOneStmt() (string, []any) { @@ -121,7 +121,7 @@ func (v *Customer) Addrs() []any { &v.JoinAt, // 6 - join_at } } -func (Customer) InsertPlaceholders(row int) string { +func (Customer) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?)" // 7 } func (v Customer) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/custom/generated.go.tpl b/examples/testcase/struct-field/custom/generated.go.tpl index 7998b5a5..5a61793f 100644 --- a/examples/testcase/struct-field/custom/generated.go.tpl +++ b/examples/testcase/struct-field/custom/generated.go.tpl @@ -41,7 +41,7 @@ func (v *Address) Addrs() []any { encoding.StringScanner[CountryCode](&v.CountryCode), // 6 - country_code } } -func (Address) InsertPlaceholders(row int) string { +func (Address) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?)" // 7 } func (v Address) InsertOneStmt() (string, []any) { @@ -121,7 +121,7 @@ func (v *Customer) Addrs() []any { &v.JoinAt, // 6 - join_at } } -func (Customer) InsertPlaceholders(row int) string { +func (Customer) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?)" // 7 } func (v Customer) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/date/generated.go b/examples/testcase/struct-field/date/generated.go index f03d2346..8c55379d 100755 --- a/examples/testcase/struct-field/date/generated.go +++ b/examples/testcase/struct-field/date/generated.go @@ -31,7 +31,7 @@ func (v *User) Addrs() []any { encoding.TextScanner[civil.Date](&v.BirthDate), // 1 - birth_date } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/date/generated.go.tpl b/examples/testcase/struct-field/date/generated.go.tpl index f03d2346..8c55379d 100644 --- a/examples/testcase/struct-field/date/generated.go.tpl +++ b/examples/testcase/struct-field/date/generated.go.tpl @@ -31,7 +31,7 @@ func (v *User) Addrs() []any { encoding.TextScanner[civil.Date](&v.BirthDate), // 1 - birth_date } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/enum/generated.go b/examples/testcase/struct-field/enum/generated.go index 9823d203..bcca4d07 100755 --- a/examples/testcase/struct-field/enum/generated.go +++ b/examples/testcase/struct-field/enum/generated.go @@ -27,7 +27,7 @@ func (v *Custom) Addrs() []any { encoding.Uint16Scanner[uint16](&v.Num), // 2 - num } } -func (Custom) InsertPlaceholders(row int) string { +func (Custom) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Custom) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/enum/generated.go.tpl b/examples/testcase/struct-field/enum/generated.go.tpl index 9823d203..bcca4d07 100644 --- a/examples/testcase/struct-field/enum/generated.go.tpl +++ b/examples/testcase/struct-field/enum/generated.go.tpl @@ -27,7 +27,7 @@ func (v *Custom) Addrs() []any { encoding.Uint16Scanner[uint16](&v.Num), // 2 - num } } -func (Custom) InsertPlaceholders(row int) string { +func (Custom) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Custom) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/enum/imported/generated.go b/examples/testcase/struct-field/enum/imported/generated.go index d9ba2aac..df2adf12 100755 --- a/examples/testcase/struct-field/enum/imported/generated.go +++ b/examples/testcase/struct-field/enum/imported/generated.go @@ -25,7 +25,7 @@ func (v *ImportedEnum) Addrs() []any { encoding.IntScanner[time.Weekday](&v.Weekday), // 0 - weekday } } -func (ImportedEnum) InsertPlaceholders(row int) string { +func (ImportedEnum) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v ImportedEnum) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/enum/imported/generated.go.tpl b/examples/testcase/struct-field/enum/imported/generated.go.tpl index d9ba2aac..df2adf12 100644 --- a/examples/testcase/struct-field/enum/imported/generated.go.tpl +++ b/examples/testcase/struct-field/enum/imported/generated.go.tpl @@ -25,7 +25,7 @@ func (v *ImportedEnum) Addrs() []any { encoding.IntScanner[time.Weekday](&v.Weekday), // 0 - weekday } } -func (ImportedEnum) InsertPlaceholders(row int) string { +func (ImportedEnum) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v ImportedEnum) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/imported/generated.go b/examples/testcase/struct-field/imported/generated.go index 5c9a787e..b590ee7c 100755 --- a/examples/testcase/struct-field/imported/generated.go +++ b/examples/testcase/struct-field/imported/generated.go @@ -40,7 +40,7 @@ func (v *Model) Addrs() []any { &v.Time, // 7 - time } } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?)" // 8 } func (v Model) InsertOneStmt() (string, []any) { @@ -111,7 +111,7 @@ func (v *Some) Addrs() []any { &v.ID, // 0 - id } } -func (Some) InsertPlaceholders(row int) string { +func (Some) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v Some) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/imported/generated.go.tpl b/examples/testcase/struct-field/imported/generated.go.tpl index 5c9a787e..b590ee7c 100644 --- a/examples/testcase/struct-field/imported/generated.go.tpl +++ b/examples/testcase/struct-field/imported/generated.go.tpl @@ -40,7 +40,7 @@ func (v *Model) Addrs() []any { &v.Time, // 7 - time } } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?)" // 8 } func (v Model) InsertOneStmt() (string, []any) { @@ -111,7 +111,7 @@ func (v *Some) Addrs() []any { &v.ID, // 0 - id } } -func (Some) InsertPlaceholders(row int) string { +func (Some) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v Some) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/json/generated.go b/examples/testcase/struct-field/json/generated.go index e603911c..2881093d 100755 --- a/examples/testcase/struct-field/json/generated.go +++ b/examples/testcase/struct-field/json/generated.go @@ -27,7 +27,7 @@ func (v *JSON) Addrs() []any { encoding.StringScanner[json.RawMessage](&v.RawBytes), // 1 - raw_bytes } } -func (JSON) InsertPlaceholders(row int) string { +func (JSON) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v JSON) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/json/generated.go.tpl b/examples/testcase/struct-field/json/generated.go.tpl index e603911c..2881093d 100644 --- a/examples/testcase/struct-field/json/generated.go.tpl +++ b/examples/testcase/struct-field/json/generated.go.tpl @@ -27,7 +27,7 @@ func (v *JSON) Addrs() []any { encoding.StringScanner[json.RawMessage](&v.RawBytes), // 1 - raw_bytes } } -func (JSON) InsertPlaceholders(row int) string { +func (JSON) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v JSON) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go b/examples/testcase/struct-field/pk/auto-incr/generated.go index ed776ffd..17bad31a 100755 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go @@ -38,10 +38,10 @@ func (v *Model) Addrs() []any { &v.N, // 3 - n } } -func (Model) InsertColumns() []string { - return []string{"name", "f", "n"} // 3 +func (Model) SQLInsertColumns() string { + return "`name`,`f`,`n`" } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Model) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl index ed776ffd..17bad31a 100644 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl @@ -38,10 +38,10 @@ func (v *Model) Addrs() []any { &v.N, // 3 - n } } -func (Model) InsertColumns() []string { - return []string{"name", "f", "n"} // 3 +func (Model) SQLInsertColumns() string { + return "`name`,`f`,`n`" } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Model) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/composite/generated.go b/examples/testcase/struct-field/pk/composite/generated.go index 87006a46..f8a662ee 100755 --- a/examples/testcase/struct-field/pk/composite/generated.go +++ b/examples/testcase/struct-field/pk/composite/generated.go @@ -33,7 +33,7 @@ func (v *Composite) Addrs() []any { &v.Col3, // 3 - col_3 } } -func (Composite) InsertPlaceholders(row int) string { +func (Composite) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v Composite) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/composite/generated.go.tpl b/examples/testcase/struct-field/pk/composite/generated.go.tpl index 87006a46..f8a662ee 100644 --- a/examples/testcase/struct-field/pk/composite/generated.go.tpl +++ b/examples/testcase/struct-field/pk/composite/generated.go.tpl @@ -33,7 +33,7 @@ func (v *Composite) Addrs() []any { &v.Col3, // 3 - col_3 } } -func (Composite) InsertPlaceholders(row int) string { +func (Composite) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v Composite) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/generated.go b/examples/testcase/struct-field/pk/generated.go index fbcb4b03..aa802d60 100755 --- a/examples/testcase/struct-field/pk/generated.go +++ b/examples/testcase/struct-field/pk/generated.go @@ -35,7 +35,7 @@ func (v *Car) Addrs() []any { &v.ManucDate, // 3 - manuc_date } } -func (Car) InsertPlaceholders(row int) string { +func (Car) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v Car) InsertOneStmt() (string, []any) { @@ -94,7 +94,7 @@ func (v *House) Addrs() []any { &v.No, // 1 - no } } -func (House) InsertPlaceholders(row int) string { +func (House) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v House) InsertOneStmt() (string, []any) { @@ -145,7 +145,7 @@ func (v *User) Addrs() []any { &v.Email, // 3 - email } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/generated.go.tpl b/examples/testcase/struct-field/pk/generated.go.tpl index fbcb4b03..aa802d60 100644 --- a/examples/testcase/struct-field/pk/generated.go.tpl +++ b/examples/testcase/struct-field/pk/generated.go.tpl @@ -35,7 +35,7 @@ func (v *Car) Addrs() []any { &v.ManucDate, // 3 - manuc_date } } -func (Car) InsertPlaceholders(row int) string { +func (Car) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v Car) InsertOneStmt() (string, []any) { @@ -94,7 +94,7 @@ func (v *House) Addrs() []any { &v.No, // 1 - no } } -func (House) InsertPlaceholders(row int) string { +func (House) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v House) InsertOneStmt() (string, []any) { @@ -145,7 +145,7 @@ func (v *User) Addrs() []any { &v.Email, // 3 - email } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/uuid/generated.go b/examples/testcase/struct-field/pk/uuid/generated.go index 0b8f3393..767af293 100755 --- a/examples/testcase/struct-field/pk/uuid/generated.go +++ b/examples/testcase/struct-field/pk/uuid/generated.go @@ -25,7 +25,7 @@ func (v *User) Addrs() []any { &v.Name, // 1 - name } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pk/uuid/generated.go.tpl b/examples/testcase/struct-field/pk/uuid/generated.go.tpl index 0b8f3393..767af293 100644 --- a/examples/testcase/struct-field/pk/uuid/generated.go.tpl +++ b/examples/testcase/struct-field/pk/uuid/generated.go.tpl @@ -25,7 +25,7 @@ func (v *User) Addrs() []any { &v.Name, // 1 - name } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pointer/generated.go b/examples/testcase/struct-field/pointer/generated.go index 53da37fb..58d82468 100755 --- a/examples/testcase/struct-field/pointer/generated.go +++ b/examples/testcase/struct-field/pointer/generated.go @@ -137,10 +137,10 @@ func (v *Ptr) Addrs() []any { encoding.StringScanner[string](&v.deepNested.embedded.PtrStr), // 20 - ptr_str } } -func (Ptr) InsertColumns() []string { - return []string{"str", "bytes", "bool", "int", "int_8", "int_16", "int_32", "int_64", "uint", "uint_8", "uint_16", "uint_32", "uint_64", "f_32", "f_64", "time", "nested", "embedded_time", "any_time", "ptr_str"} // 20 +func (Ptr) SQLInsertColumns() string { + return "`str`,`bytes`,`bool`,`int`,`int_8`,`int_16`,`int_32`,`int_64`,`uint`,`uint_8`,`uint_16`,`uint_32`,`uint_64`,`f_32`,`f_64`,`time`,`nested`,`embedded_time`,`any_time`,`ptr_str`" } -func (Ptr) InsertPlaceholders(row int) string { +func (Ptr) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 20 } func (v Ptr) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/pointer/generated.go.tpl b/examples/testcase/struct-field/pointer/generated.go.tpl index 53da37fb..58d82468 100644 --- a/examples/testcase/struct-field/pointer/generated.go.tpl +++ b/examples/testcase/struct-field/pointer/generated.go.tpl @@ -137,10 +137,10 @@ func (v *Ptr) Addrs() []any { encoding.StringScanner[string](&v.deepNested.embedded.PtrStr), // 20 - ptr_str } } -func (Ptr) InsertColumns() []string { - return []string{"str", "bytes", "bool", "int", "int_8", "int_16", "int_32", "int_64", "uint", "uint_8", "uint_16", "uint_32", "uint_64", "f_32", "f_64", "time", "nested", "embedded_time", "any_time", "ptr_str"} // 20 +func (Ptr) SQLInsertColumns() string { + return "`str`,`bytes`,`bool`,`int`,`int_8`,`int_16`,`int_32`,`int_64`,`uint`,`uint_8`,`uint_16`,`uint_32`,`uint_64`,`f_32`,`f_64`,`time`,`nested`,`embedded_time`,`any_time`,`ptr_str`" } -func (Ptr) InsertPlaceholders(row int) string { +func (Ptr) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 20 } func (v Ptr) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/primitive/generated.go b/examples/testcase/struct-field/primitive/generated.go index aea2b303..35718278 100755 --- a/examples/testcase/struct-field/primitive/generated.go +++ b/examples/testcase/struct-field/primitive/generated.go @@ -55,7 +55,7 @@ func (v *Primitive) Addrs() []any { &v.Time, // 15 - time } } -func (Primitive) InsertPlaceholders(row int) string { +func (Primitive) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 16 } func (v Primitive) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/primitive/generated.go.tpl b/examples/testcase/struct-field/primitive/generated.go.tpl index aea2b303..35718278 100644 --- a/examples/testcase/struct-field/primitive/generated.go.tpl +++ b/examples/testcase/struct-field/primitive/generated.go.tpl @@ -55,7 +55,7 @@ func (v *Primitive) Addrs() []any { &v.Time, // 15 - time } } -func (Primitive) InsertPlaceholders(row int) string { +func (Primitive) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 16 } func (v Primitive) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/readonly/generated.go b/examples/testcase/struct-field/readonly/generated.go index e2c39efb..7edfd849 100755 --- a/examples/testcase/struct-field/readonly/generated.go +++ b/examples/testcase/struct-field/readonly/generated.go @@ -26,10 +26,10 @@ func (v *Model) Addrs() []any { &v.ReadOnly, // 2 - read_only } } -func (Model) InsertColumns() []string { - return []string{"a", "b"} // 2 +func (Model) SQLInsertColumns() string { + return "`a`,`b`" } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v Model) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/readonly/generated.go.tpl b/examples/testcase/struct-field/readonly/generated.go.tpl index e2c39efb..7edfd849 100644 --- a/examples/testcase/struct-field/readonly/generated.go.tpl +++ b/examples/testcase/struct-field/readonly/generated.go.tpl @@ -26,10 +26,10 @@ func (v *Model) Addrs() []any { &v.ReadOnly, // 2 - read_only } } -func (Model) InsertColumns() []string { - return []string{"a", "b"} // 2 +func (Model) SQLInsertColumns() string { + return "`a`,`b`" } -func (Model) InsertPlaceholders(row int) string { +func (Model) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v Model) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/size/generated.go b/examples/testcase/struct-field/size/generated.go index 7682b9da..2d6a673a 100755 --- a/examples/testcase/struct-field/size/generated.go +++ b/examples/testcase/struct-field/size/generated.go @@ -28,7 +28,7 @@ func (v *Size) Addrs() []any { &v.Time, // 2 - time } } -func (Size) InsertPlaceholders(row int) string { +func (Size) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Size) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/size/generated.go.tpl b/examples/testcase/struct-field/size/generated.go.tpl index 7682b9da..2d6a673a 100644 --- a/examples/testcase/struct-field/size/generated.go.tpl +++ b/examples/testcase/struct-field/size/generated.go.tpl @@ -28,7 +28,7 @@ func (v *Size) Addrs() []any { &v.Time, // 2 - time } } -func (Size) InsertPlaceholders(row int) string { +func (Size) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Size) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/slice/generated.go b/examples/testcase/struct-field/slice/generated.go index 70e8a3af..cffb0316 100755 --- a/examples/testcase/struct-field/slice/generated.go +++ b/examples/testcase/struct-field/slice/generated.go @@ -63,10 +63,10 @@ func (v *Slice) Addrs() []any { (*sqltype.Float64Slice[float64])(&v.F64List), // 15 - f_64_list } } -func (Slice) InsertColumns() []string { - return []string{"bool_list", "str_list", "custom_str_list", "int_list", "int_8_list", "int_16_list", "int_32_list", "int_64_list", "uint_list", "uint_8_list", "uint_16_list", "uint_32_list", "uint_64_list", "f_32_list", "f_64_list"} // 15 +func (Slice) SQLInsertColumns() string { + return "`bool_list`,`str_list`,`custom_str_list`,`int_list`,`int_8_list`,`int_16_list`,`int_32_list`,`int_64_list`,`uint_list`,`uint_8_list`,`uint_16_list`,`uint_32_list`,`uint_64_list`,`f_32_list`,`f_64_list`" } -func (Slice) InsertPlaceholders(row int) string { +func (Slice) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 15 } func (v Slice) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/slice/generated.go.tpl b/examples/testcase/struct-field/slice/generated.go.tpl index 70e8a3af..cffb0316 100644 --- a/examples/testcase/struct-field/slice/generated.go.tpl +++ b/examples/testcase/struct-field/slice/generated.go.tpl @@ -63,10 +63,10 @@ func (v *Slice) Addrs() []any { (*sqltype.Float64Slice[float64])(&v.F64List), // 15 - f_64_list } } -func (Slice) InsertColumns() []string { - return []string{"bool_list", "str_list", "custom_str_list", "int_list", "int_8_list", "int_16_list", "int_32_list", "int_64_list", "uint_list", "uint_8_list", "uint_16_list", "uint_32_list", "uint_64_list", "f_32_list", "f_64_list"} // 15 +func (Slice) SQLInsertColumns() string { + return "`bool_list`,`str_list`,`custom_str_list`,`int_list`,`int_8_list`,`int_16_list`,`int_32_list`,`int_64_list`,`uint_list`,`uint_8_list`,`uint_16_list`,`uint_32_list`,`uint_64_list`,`f_32_list`,`f_64_list`" } -func (Slice) InsertPlaceholders(row int) string { +func (Slice) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 15 } func (v Slice) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/sql/generated.go b/examples/testcase/struct-field/sql/generated.go index 2c36f6e0..c9c810ed 100755 --- a/examples/testcase/struct-field/sql/generated.go +++ b/examples/testcase/struct-field/sql/generated.go @@ -53,10 +53,10 @@ func (v *AutoPkLocation) Addrs() []any { encoding.TextScanner[civil.Date](&v.PtrDate), // 4 - ptr_date } } -func (AutoPkLocation) InsertColumns() []string { - return []string{"geo_point", "ptr_geo_point", "ptr_uuid", "ptr_date"} // 4 +func (AutoPkLocation) SQLInsertColumns() string { + return "`geo_point`,`ptr_geo_point`,`ptr_uuid`,`ptr_date`" } -func (AutoPkLocation) InsertPlaceholders(row int) string { +func (AutoPkLocation) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v AutoPkLocation) InsertOneStmt() (string, []any) { @@ -135,7 +135,7 @@ func (v *Location) Addrs() []any { &v.UUID, // 2 - uuid } } -func (Location) InsertPlaceholders(row int) string { +func (Location) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Location) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/sql/generated.go.tpl b/examples/testcase/struct-field/sql/generated.go.tpl index 2c36f6e0..c9c810ed 100644 --- a/examples/testcase/struct-field/sql/generated.go.tpl +++ b/examples/testcase/struct-field/sql/generated.go.tpl @@ -53,10 +53,10 @@ func (v *AutoPkLocation) Addrs() []any { encoding.TextScanner[civil.Date](&v.PtrDate), // 4 - ptr_date } } -func (AutoPkLocation) InsertColumns() []string { - return []string{"geo_point", "ptr_geo_point", "ptr_uuid", "ptr_date"} // 4 +func (AutoPkLocation) SQLInsertColumns() string { + return "`geo_point`,`ptr_geo_point`,`ptr_uuid`,`ptr_date`" } -func (AutoPkLocation) InsertPlaceholders(row int) string { +func (AutoPkLocation) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v AutoPkLocation) InsertOneStmt() (string, []any) { @@ -135,7 +135,7 @@ func (v *Location) Addrs() []any { &v.UUID, // 2 - uuid } } -func (Location) InsertPlaceholders(row int) string { +func (Location) SQLInsertPlaceholders(row int) string { return "(?,?,?)" // 3 } func (v Location) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/unique/generated.go b/examples/testcase/struct-field/unique/generated.go index c57fe4f9..ff257753 100755 --- a/examples/testcase/struct-field/unique/generated.go +++ b/examples/testcase/struct-field/unique/generated.go @@ -29,7 +29,7 @@ func (v *User) Addrs() []any { &v.LastName, // 3 - last_name } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/unique/generated.go.tpl b/examples/testcase/struct-field/unique/generated.go.tpl index c57fe4f9..ff257753 100644 --- a/examples/testcase/struct-field/unique/generated.go.tpl +++ b/examples/testcase/struct-field/unique/generated.go.tpl @@ -29,7 +29,7 @@ func (v *User) Addrs() []any { &v.LastName, // 3 - last_name } } -func (User) InsertPlaceholders(row int) string { +func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v User) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/valuer/generated.go b/examples/testcase/struct-field/valuer/generated.go index 69991591..a98fc4cb 100755 --- a/examples/testcase/struct-field/valuer/generated.go +++ b/examples/testcase/struct-field/valuer/generated.go @@ -32,7 +32,7 @@ func (v *B) Addrs() []any { &v.N, // 3 - n } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v B) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/valuer/generated.go.tpl b/examples/testcase/struct-field/valuer/generated.go.tpl index 69991591..a98fc4cb 100644 --- a/examples/testcase/struct-field/valuer/generated.go.tpl +++ b/examples/testcase/struct-field/valuer/generated.go.tpl @@ -32,7 +32,7 @@ func (v *B) Addrs() []any { &v.N, // 3 - n } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?,?,?)" // 4 } func (v B) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/version/generated.go b/examples/testcase/struct-field/version/generated.go index 1a0fddaf..a020eec9 100755 --- a/examples/testcase/struct-field/version/generated.go +++ b/examples/testcase/struct-field/version/generated.go @@ -27,7 +27,7 @@ func (v *Version) Addrs() []any { &v.ID, // 0 - id } } -func (Version) InsertPlaceholders(row int) string { +func (Version) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v Version) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct-field/version/generated.go.tpl b/examples/testcase/struct-field/version/generated.go.tpl index 1a0fddaf..a020eec9 100644 --- a/examples/testcase/struct-field/version/generated.go.tpl +++ b/examples/testcase/struct-field/version/generated.go.tpl @@ -27,7 +27,7 @@ func (v *Version) Addrs() []any { &v.ID, // 0 - id } } -func (Version) InsertPlaceholders(row int) string { +func (Version) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v Version) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/alias/generated.go b/examples/testcase/struct/alias/generated.go index d80dc4d6..19fca721 100755 --- a/examples/testcase/struct/alias/generated.go +++ b/examples/testcase/struct/alias/generated.go @@ -23,7 +23,7 @@ func (v *A) Addrs() []any { encoding.TextScanner[civil.Time](&v.Time), // 1 - time } } -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v A) InsertOneStmt() (string, []any) { @@ -60,7 +60,7 @@ func (v *C) Addrs() []any { &v.Valid, // 1 - valid } } -func (C) InsertPlaceholders(row int) string { +func (C) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v C) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/alias/generated.go.tpl b/examples/testcase/struct/alias/generated.go.tpl index d80dc4d6..19fca721 100644 --- a/examples/testcase/struct/alias/generated.go.tpl +++ b/examples/testcase/struct/alias/generated.go.tpl @@ -23,7 +23,7 @@ func (v *A) Addrs() []any { encoding.TextScanner[civil.Time](&v.Time), // 1 - time } } -func (A) InsertPlaceholders(row int) string { +func (A) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v A) InsertOneStmt() (string, []any) { @@ -60,7 +60,7 @@ func (v *C) Addrs() []any { &v.Valid, // 1 - valid } } -func (C) InsertPlaceholders(row int) string { +func (C) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v C) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/embedded/imported/generated.go b/examples/testcase/struct/embedded/imported/generated.go index a1a29a59..29316e86 100755 --- a/examples/testcase/struct/embedded/imported/generated.go +++ b/examples/testcase/struct/embedded/imported/generated.go @@ -26,7 +26,7 @@ func (v *B) Addrs() []any { encoding.TextScanner[civil.Time](&v.DateTime.Time), // 1 - time } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v B) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/embedded/imported/generated.go.tpl b/examples/testcase/struct/embedded/imported/generated.go.tpl index a1a29a59..29316e86 100644 --- a/examples/testcase/struct/embedded/imported/generated.go.tpl +++ b/examples/testcase/struct/embedded/imported/generated.go.tpl @@ -26,7 +26,7 @@ func (v *B) Addrs() []any { encoding.TextScanner[civil.Time](&v.DateTime.Time), // 1 - time } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?)" // 2 } func (v B) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/embedded/local/generated.go b/examples/testcase/struct/embedded/local/generated.go index c4b1c9fd..e40b0724 100755 --- a/examples/testcase/struct/embedded/local/generated.go +++ b/examples/testcase/struct/embedded/local/generated.go @@ -32,7 +32,7 @@ func (v *B) Addrs() []any { &v.ts.OK, // 4 - ok } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?)" // 5 } func (v B) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/embedded/local/generated.go.tpl b/examples/testcase/struct/embedded/local/generated.go.tpl index c4b1c9fd..e40b0724 100644 --- a/examples/testcase/struct/embedded/local/generated.go.tpl +++ b/examples/testcase/struct/embedded/local/generated.go.tpl @@ -32,7 +32,7 @@ func (v *B) Addrs() []any { &v.ts.OK, // 4 - ok } } -func (B) InsertPlaceholders(row int) string { +func (B) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?)" // 5 } func (v B) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/inline-nested/generated.go b/examples/testcase/struct/inline-nested/generated.go index f2b69873..9cf6ee36 100755 --- a/examples/testcase/struct/inline-nested/generated.go +++ b/examples/testcase/struct/inline-nested/generated.go @@ -28,7 +28,7 @@ func (v *DeepNestedModel) Addrs() []any { encoding.JSONScanner(&v.Nested), // 0 - nested } } -func (DeepNestedModel) InsertPlaceholders(row int) string { +func (DeepNestedModel) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v DeepNestedModel) InsertOneStmt() (string, []any) { @@ -77,7 +77,7 @@ func (v *NestedModel) Addrs() []any { encoding.JSONScanner(&v.Nested), // 0 - nested } } -func (NestedModel) InsertPlaceholders(row int) string { +func (NestedModel) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v NestedModel) InsertOneStmt() (string, []any) { @@ -113,7 +113,7 @@ func (v *NestedModelWithTag) Addrs() []any { encoding.JSONScanner(&v.Nested), // 0 - nested } } -func (NestedModelWithTag) InsertPlaceholders(row int) string { +func (NestedModelWithTag) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v NestedModelWithTag) InsertOneStmt() (string, []any) { diff --git a/examples/testcase/struct/inline-nested/generated.go.tpl b/examples/testcase/struct/inline-nested/generated.go.tpl index f2b69873..9cf6ee36 100644 --- a/examples/testcase/struct/inline-nested/generated.go.tpl +++ b/examples/testcase/struct/inline-nested/generated.go.tpl @@ -28,7 +28,7 @@ func (v *DeepNestedModel) Addrs() []any { encoding.JSONScanner(&v.Nested), // 0 - nested } } -func (DeepNestedModel) InsertPlaceholders(row int) string { +func (DeepNestedModel) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v DeepNestedModel) InsertOneStmt() (string, []any) { @@ -77,7 +77,7 @@ func (v *NestedModel) Addrs() []any { encoding.JSONScanner(&v.Nested), // 0 - nested } } -func (NestedModel) InsertPlaceholders(row int) string { +func (NestedModel) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v NestedModel) InsertOneStmt() (string, []any) { @@ -113,7 +113,7 @@ func (v *NestedModelWithTag) Addrs() []any { encoding.JSONScanner(&v.Nested), // 0 - nested } } -func (NestedModelWithTag) InsertPlaceholders(row int) string { +func (NestedModelWithTag) SQLInsertPlaceholders(row int) string { return "(?)" // 1 } func (v NestedModelWithTag) InsertOneStmt() (string, []any) { diff --git a/go.mod b/go.mod index 0107ab9e..c8bc3690 100644 --- a/go.mod +++ b/go.mod @@ -4,12 +4,13 @@ go 1.24.0 toolchain go1.24.1 -require github.com/stretchr/testify v1.10.0 +require github.com/stretchr/testify v1.11.1 require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/kr/pretty v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 06d53475..8b27556b 100644 --- a/go.sum +++ b/go.sum @@ -11,10 +11,11 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/go.work.sum b/go.work.sum index 63698b62..6a9c67dc 100644 --- a/go.work.sum +++ b/go.work.sum @@ -168,6 +168,10 @@ github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido6 github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cockroachdb/cockroach-go/v2 v2.1.1/go.mod h1:7NtUnP6eK+l6k483WSYNrq3Kb23bWV10IRV1TyeSpwM= github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cyphar/filepath-securejoin v0.3.5/go.mod h1:edhVd3c6OXKjUmSrVa/tGJRS9joFTxlslFCAyaxigkE= @@ -176,6 +180,10 @@ github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ= github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/dhui/dktest v0.4.6 h1:+DPKyScKSEp3VLtbMDHcUq6V5Lm5zfZZVb0Sk7Ahom4= +github.com/dhui/dktest v0.4.6/go.mod h1:JHTSYDtKkvFNFHJKqCzVzqXecyv+tKt8EzceOmQOgbU= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -186,11 +194,17 @@ github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnv github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= @@ -269,6 +283,8 @@ github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiT github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mrunalp/fileutils v0.5.1/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mutecomm/go-sqlcipher/v4 v4.4.0/go.mod h1:PyN04SaWalavxRGH9E8ZftG6Ju7rsPrGmQRjrEaVpiY= @@ -311,14 +327,24 @@ github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVT github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= diff --git a/sequel/sequel.go b/sequel/sequel.go index d15b849f..e1a1a918 100644 --- a/sequel/sequel.go +++ b/sequel/sequel.go @@ -98,7 +98,8 @@ type Inserter interface { Tabler Columner Valuer - InsertPlaceholders(row int) string + SQLInsertColumns() string + SQLInsertPlaceholders(row int) string } type ColumnValuer interface { From c8e2c76fdea9b1cfb8a6be7a907810e2f6665c7c Mon Sep 17 00:00:00 2001 From: si3nloong Date: Mon, 20 Apr 2026 01:20:02 +0800 Subject: [PATCH 18/56] fix: logical error on generated codes --- cmd/sqlgen/codegen/generate.go | 8 ++++---- cmd/sqlgen/codegen/templates/db.go.tpl | 18 +++++++++--------- examples/db/mysql/db.go | 4 ++-- examples/db/postgres/db.go | 12 ++++++------ examples/db/sqlite/db.go | 4 ++-- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index 16dcdaa0..ce8ce87a 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -292,13 +292,13 @@ loop: if g.staticVar { fprintfln(w, `return "(%s)" // %d`, strings.Repeat(","+g.dialect.QuoteVar(0), len(insertColumns))[1:], len(insertColumns)) } else { - fprintfln(w, "const noOfColumn = %d", len(insertColumns)) - fmt.Fprint(w, `return "("+`) + fprintfln(w, "pos := row * %d", len(insertColumns)) + fmt.Fprintf(w, `return "(%c"+`, g.dialect.VarRune()) for i := range insertColumns { if i > 0 { - fmt.Fprint(w, `+","+`) + fmt.Fprintf(w, `+",%c"+`, g.dialect.VarRune()) } - fmt.Fprintf(w, `%c+ strconv.Itoa((row * noOfColumn) + %d)`, g.dialect.VarRune(), i+1) + fmt.Fprintf(w, `strconv.Itoa(pos + %d)`, i+1) } fmt.Fprint(w, `+")"`) } diff --git a/cmd/sqlgen/codegen/templates/db.go.tpl b/cmd/sqlgen/codegen/templates/db.go.tpl index fa58a415..374fffc8 100644 --- a/cmd/sqlgen/codegen/templates/db.go.tpl +++ b/cmd/sqlgen/codegen/templates/db.go.tpl @@ -117,13 +117,13 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") - stmt.WriteString(model.SQLInsertPlaceholders(i + 1)) + stmt.WriteString(model.SQLInsertPlaceholders(i)) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -141,7 +141,7 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -316,7 +316,7 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface{ default: panic("unreachable") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) if len(opt.duplicateKeys) > 0 { stmt.WriteString(" ON CONFLICT(") stmt.WriteString(strings.Join(opt.duplicateKeys, ",")) @@ -409,7 +409,7 @@ func Upsert[T interface { stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -428,7 +428,7 @@ func Upsert[T interface { stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -443,7 +443,7 @@ func Upsert[T interface { stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -749,7 +749,7 @@ func Upsert[T interface { stmt.WriteString(DbTable(model)) stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -770,7 +770,7 @@ func Upsert[T interface { stmt.WriteString(strings.Join(columns, ",")) stmt.WriteString(") VALUES ") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") diff --git a/examples/db/mysql/db.go b/examples/db/mysql/db.go index 095997a5..be6dae0e 100755 --- a/examples/db/mysql/db.go +++ b/examples/db/mysql/db.go @@ -336,7 +336,7 @@ func Upsert[T interface { stmt.WriteString(DbTable(model)) stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -357,7 +357,7 @@ func Upsert[T interface { stmt.WriteString(strings.Join(columns, ",")) stmt.WriteString(") VALUES ") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") diff --git a/examples/db/postgres/db.go b/examples/db/postgres/db.go index 6a6751fa..f82b5f96 100755 --- a/examples/db/postgres/db.go +++ b/examples/db/postgres/db.go @@ -78,7 +78,7 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -102,7 +102,7 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -215,7 +215,7 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface { default: panic("unreachable") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) if len(opt.duplicateKeys) > 0 { stmt.WriteString(" ON CONFLICT(") stmt.WriteString(strings.Join(opt.duplicateKeys, ",")) @@ -308,7 +308,7 @@ func Upsert[T interface { stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) values := data[0].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) @@ -327,7 +327,7 @@ func Upsert[T interface { stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -342,7 +342,7 @@ func Upsert[T interface { stmt.WriteString(" (") stmt.WriteString(model.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") diff --git a/examples/db/sqlite/db.go b/examples/db/sqlite/db.go index c7cba63d..56ef4747 100755 --- a/examples/db/sqlite/db.go +++ b/examples/db/sqlite/db.go @@ -336,7 +336,7 @@ func Upsert[T interface { stmt.WriteString(DbTable(model)) stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -357,7 +357,7 @@ func Upsert[T interface { stmt.WriteString(strings.Join(columns, ",")) stmt.WriteString(") VALUES ") } - stmt.WriteString(model.SQLInsertPlaceholders(1)) + stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") From 8b71ef1df632d14155f3e14238accd645fe6f92b Mon Sep 17 00:00:00 2001 From: si3nloong Date: Mon, 20 Apr 2026 01:34:12 +0800 Subject: [PATCH 19/56] fix: invalid SQL generated for `postgres` --- cmd/sqlgen/codegen/generate.go | 36 +++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index ce8ce87a..24bbb8be 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -584,26 +584,30 @@ func (g *Generator) buildScanner(w io.Writer, importPkgs *Package, table *compil } func (g *Generator) buildFindByPK(w io.Writer, importPkgs *Package, t *compiler.Table) error { + noOfColumns := len(t.Columns) + if noOfColumns == 0 { + return nil + } + + // Build the select statement w1 := bytes.NewBufferString("") defer w1.Reset() fmt.Fprintf(w1, "%cSELECT ", g.quoteRune) - if n := len(t.Columns); n > 0 { - column := t.Columns[0] + column := t.Columns[0] + scanner, err := g.sqlScanner(column) + if err != nil { + return err + } + fmt.Fprint(w1, scanner) + for i := 1; i < noOfColumns; i++ { + column = t.Columns[i] scanner, err := g.sqlScanner(column) if err != nil { return err } - fmt.Fprint(w1, scanner) - for i := 1; i < n; i++ { - column = t.Columns[i] - scanner, err := g.sqlScanner(column) - if err != nil { - return err - } - fmt.Fprint(w1, ","+scanner) - } - fmt.Fprint(w1, " FROM ") + fmt.Fprint(w1, ","+scanner) } + fmt.Fprint(w1, " FROM ") if method, isWrongType := t.Implements(sqlTabler); isWrongType { g.LogError(fmt.Errorf(`sqlgen: struct %q has function "TableName" but wrong footprint`, t.GoName)) } else if method != nil { @@ -614,7 +618,7 @@ func (g *Generator) buildFindByPK(w io.Writer, importPkgs *Package, t *compiler. fmt.Fprint(w1, " WHERE ") pk, ok := t.PK() if !ok { - return fmt.Errorf(`sqlgen:`) + return fmt.Errorf(`sqlgen: struct %q has no primary key`, t.GoName) } w2 := bytes.NewBufferString("") defer w2.Reset() @@ -701,7 +705,7 @@ func (g *Generator) buildInsertOne(w io.Writer, importPkgs *Package, t *compiler fmt.Fprint(w3, ","+valuer) fmt.Fprint(w4, ","+scanner) } - fmt.Fprintf(w1, "(%s) VALUES (%s) RETURNING (%s)", w2, w3, w4) + fmt.Fprintf(w1, ") VALUES (%s) RETURNING (%s)", w3, w4) } else { column := columns[0] valuer, err := g.sqlValuer(column, 0) @@ -776,10 +780,10 @@ func (g *Generator) buildUpdateByPK(w io.Writer, importPkgs *Package, t *compile fmt.Fprint(w1, " WHERE ") switch pk := t.MustPK().(type) { case *compiler.AutoIncrPrimaryKey: - fmt.Fprintf(w1, "%s = %s", g.MustQuoteIdentifier(pk.Name()), g.dialect.QuoteVar(noOfColumns)) + fmt.Fprintf(w1, "%s = %s", g.MustQuoteIdentifier(pk.Name()), g.dialect.QuoteVar(noOfColumns+1)) fmt.Fprint(w2, g.getOrValue(importPkgs, "v", pk)) case *compiler.PrimaryKey: - fmt.Fprintf(w1, "%s = %s", g.MustQuoteIdentifier(pk.Name()), g.dialect.QuoteVar(noOfColumns)) + fmt.Fprintf(w1, "%s = %s", g.MustQuoteIdentifier(pk.Name()), g.dialect.QuoteVar(noOfColumns+1)) fmt.Fprint(w2, g.getOrValue(importPkgs, "v", pk)) case *compiler.CompositePrimaryKey: if n := len(pk.Columns); n > 0 { From 2487e3cd248b0f575763812714670fbc7a9132ce Mon Sep 17 00:00:00 2001 From: si3nloong Date: Tue, 21 Apr 2026 21:41:16 +0800 Subject: [PATCH 20/56] chore: rename normalized name and update go modules --- .github/workflows/test.yml | 6 +- cmd/sqlgen/codegen/tool.go | 2 +- cmd/sqlgen/go.mod | 9 +-- cmd/sqlgen/go.sum | 14 +++-- examples/db/postgres/db.go | 2 +- examples/go.mod | 4 +- examples/go.sum | 4 +- examples/testcase/core/generated.go | 8 +-- examples/testcase/core/generated.go.tpl | 8 +-- .../testcase/struct-field/custom/generated.go | 8 +-- .../struct-field/custom/generated.go.tpl | 8 +-- .../struct-field/pointer/generated.go | 4 +- .../struct-field/pointer/generated.go.tpl | 4 +- .../struct-field/primitive/generated.go | 8 +-- .../struct-field/primitive/generated.go.tpl | 8 +-- .../testcase/struct-field/slice/generated.go | 60 +++++++++---------- .../struct-field/slice/generated.go.tpl | 60 +++++++++---------- go.work | 2 +- go.work.sum | 9 +-- 19 files changed, 114 insertions(+), 114 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 80ed1300..857fa1fa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,9 +5,9 @@ jobs: test: strategy: matrix: - # os: [ubuntu-latest, windows-latest] - os: [ubuntu-latest] - go: ["1.24", "1.25"] + os: [ubuntu-latest, windows-latest] + # os: [ubuntu-latest] + go: ["1.24", "1.25", "1.26"] runs-on: ${{ matrix.os }} continue-on-error: false steps: diff --git a/cmd/sqlgen/codegen/tool.go b/cmd/sqlgen/codegen/tool.go index e6ae297a..860b6911 100644 --- a/cmd/sqlgen/codegen/tool.go +++ b/cmd/sqlgen/codegen/tool.go @@ -128,7 +128,7 @@ func mustNoError[T any](_ T, err error) { func normalize(v string) string { v = strings.Replace(v, "*", "Ptr", -1) - v = strings.Replace(v, "[]", "Array", -1) + v = strings.Replace(v, "[]", "Slice", -1) reg := regexp.MustCompile(`[^a-zA-Z0-9]+`) return reg.ReplaceAllString(strfmt.ToPascalCase(v), "") } diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index b75810f6..db1272e3 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -1,6 +1,6 @@ module github.com/si3nloong/sqlgen/cmd/sqlgen -go 1.24.0 +go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 @@ -8,10 +8,10 @@ require ( github.com/go-playground/validator/v10 v10.27.0 github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.18.0 - github.com/jackc/pgx/v5 v5.7.6 + github.com/jackc/pgx/v5 v5.9.2 github.com/mattn/go-sqlite3 v1.14.22 github.com/samber/lo v1.51.0 - github.com/si3nloong/sqlgen v1.0.0-beta.0 + github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250911091902-df9299821621 @@ -36,7 +36,6 @@ require ( github.com/mattn/go-isatty v0.0.16 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/spf13/pflag v1.0.9 // indirect golang.org/x/crypto v0.42.0 // indirect golang.org/x/mod v0.28.0 // indirect @@ -47,3 +46,5 @@ require ( golang.org/x/text v0.29.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/si3nloong/sqlgen => ../.. diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 64da77d8..173c622a 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -10,6 +10,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -37,8 +38,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.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk= -github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= +github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= +github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= 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/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= @@ -51,9 +52,13 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -63,8 +68,6 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI= github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/si3nloong/sqlgen v1.0.0-beta.0 h1:1Za+7apfaPJYiY15HsGWhCQqiEtLpdaaD2rieRQeb1c= -github.com/si3nloong/sqlgen v1.0.0-beta.0/go.mod h1:beZCnk6HYfIAIAoHMlU/CZi11Q3FDGqe+JzGm6pqODk= github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= @@ -96,10 +99,13 @@ 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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/examples/db/postgres/db.go b/examples/db/postgres/db.go index f82b5f96..58f66394 100755 --- a/examples/db/postgres/db.go +++ b/examples/db/postgres/db.go @@ -84,7 +84,7 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db args = append(args, values...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") - stmt.WriteString(model.SQLInsertPlaceholders(i + 1)) + stmt.WriteString(model.SQLInsertPlaceholders(i)) values := data[i].Values() values = append(values[:idx], values[idx+1:]...) args = append(args, values...) diff --git a/examples/go.mod b/examples/go.mod index c158e4f3..73bc0830 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -1,6 +1,6 @@ module github.com/si3nloong/sqlgen/examples -go 1.24.0 +go 1.25.0 require ( cloud.google.com/go v0.115.0 @@ -45,7 +45,7 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.6 // indirect + github.com/jackc/pgx/v5 v5.9.2 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect diff --git a/examples/go.sum b/examples/go.sum index 53448a52..14c47985 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -70,8 +70,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.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk= -github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= +github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= +github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= 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/jaswdr/faker v1.16.0 h1:5ZjusQbqIZwJnUymPirNKJI1yFCuozdSR9oeYPgD5Uk= diff --git a/examples/testcase/core/generated.go b/examples/testcase/core/generated.go index 1ff2b9f8..a96b824b 100755 --- a/examples/testcase/core/generated.go +++ b/examples/testcase/core/generated.go @@ -172,7 +172,7 @@ func (v User) ColumnNicknames() sequel.ColumnConvertClause[[2]string] { return sequel.Column("nicknames", v.Nicknames, convert2stringToValue) } func (v User) ColumnSlice() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("slice", v.Slice, convertArrayfloat64ToValue) + return sequel.Column("slice", v.Slice, convertSlicefloat64ToValue) } func (v User) ColumnMap() sequel.ColumnConvertClause[map[string]float64] { return sequel.Column("map", v.Map, convertMapstringfloat64ToValue) @@ -193,6 +193,9 @@ func convertUserExtraInfoInlineStructToValue(val UserExtraInfoInlineStruct) any func convertUintToValue(val uint) any { return (int64)(val) } +func convertSlicefloat64ToValue(val []float64) any { + return (sqltype.Float64Slice[float64])(val) +} func convertReflectKindToValue(val reflect.Kind) any { return (int64)(val) } @@ -217,9 +220,6 @@ func convertMapstringfloat64ToValue(val map[string]float64) any { func convertHouseUnitTypeToValue(val HouseUnitType) any { return (int64)(val) } -func convertArrayfloat64ToValue(val []float64) any { - return (sqltype.Float64Slice[float64])(val) -} func convertAddressToValue(val Address) any { return encoding.JSONValue(val) } diff --git a/examples/testcase/core/generated.go.tpl b/examples/testcase/core/generated.go.tpl index 1ff2b9f8..a96b824b 100644 --- a/examples/testcase/core/generated.go.tpl +++ b/examples/testcase/core/generated.go.tpl @@ -172,7 +172,7 @@ func (v User) ColumnNicknames() sequel.ColumnConvertClause[[2]string] { return sequel.Column("nicknames", v.Nicknames, convert2stringToValue) } func (v User) ColumnSlice() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("slice", v.Slice, convertArrayfloat64ToValue) + return sequel.Column("slice", v.Slice, convertSlicefloat64ToValue) } func (v User) ColumnMap() sequel.ColumnConvertClause[map[string]float64] { return sequel.Column("map", v.Map, convertMapstringfloat64ToValue) @@ -193,6 +193,9 @@ func convertUserExtraInfoInlineStructToValue(val UserExtraInfoInlineStruct) any func convertUintToValue(val uint) any { return (int64)(val) } +func convertSlicefloat64ToValue(val []float64) any { + return (sqltype.Float64Slice[float64])(val) +} func convertReflectKindToValue(val reflect.Kind) any { return (int64)(val) } @@ -217,9 +220,6 @@ func convertMapstringfloat64ToValue(val map[string]float64) any { func convertHouseUnitTypeToValue(val HouseUnitType) any { return (int64)(val) } -func convertArrayfloat64ToValue(val []float64) any { - return (sqltype.Float64Slice[float64])(val) -} func convertAddressToValue(val Address) any { return encoding.JSONValue(val) } diff --git a/examples/testcase/struct-field/custom/generated.go b/examples/testcase/struct-field/custom/generated.go index 5a61793f..368c69db 100755 --- a/examples/testcase/struct-field/custom/generated.go +++ b/examples/testcase/struct-field/custom/generated.go @@ -161,7 +161,7 @@ func (v Customer) ColumnAddress() sequel.ColumnConvertClause[Addresses] { return sequel.Column("address", v.Address, convertAddressesToValue) } func (v Customer) ColumnNicknames() sequel.ColumnConvertClause[[]longText] { - return sequel.Column("nicknames", v.Nicknames, convertArraylongTextToValue) + return sequel.Column("nicknames", v.Nicknames, convertSlicelongTextToValue) } func (v Customer) ColumnStatus() sequel.ColumnClause[string] { return sequel.BasicColumn("status", v.Status) @@ -182,6 +182,9 @@ func convertStateCodeToValue(val StateCode) any { func convertSqlNullStringToValue(val sql.NullString) any { return val } +func convertSlicelongTextToValue(val []longText) any { + return (sqltype.StringSlice[longText])(val) +} func convertOrbPointToValue(val orb.Point) any { return ewkb.Value(val, 4326) } @@ -191,9 +194,6 @@ func convertLongTextToValue(val longText) any { func convertCountryCodeToValue(val CountryCode) any { return (string)(val) } -func convertArraylongTextToValue(val []longText) any { - return (sqltype.StringSlice[longText])(val) -} func convertAddressesToValue(val Addresses) any { return val } diff --git a/examples/testcase/struct-field/custom/generated.go.tpl b/examples/testcase/struct-field/custom/generated.go.tpl index 5a61793f..368c69db 100644 --- a/examples/testcase/struct-field/custom/generated.go.tpl +++ b/examples/testcase/struct-field/custom/generated.go.tpl @@ -161,7 +161,7 @@ func (v Customer) ColumnAddress() sequel.ColumnConvertClause[Addresses] { return sequel.Column("address", v.Address, convertAddressesToValue) } func (v Customer) ColumnNicknames() sequel.ColumnConvertClause[[]longText] { - return sequel.Column("nicknames", v.Nicknames, convertArraylongTextToValue) + return sequel.Column("nicknames", v.Nicknames, convertSlicelongTextToValue) } func (v Customer) ColumnStatus() sequel.ColumnClause[string] { return sequel.BasicColumn("status", v.Status) @@ -182,6 +182,9 @@ func convertStateCodeToValue(val StateCode) any { func convertSqlNullStringToValue(val sql.NullString) any { return val } +func convertSlicelongTextToValue(val []longText) any { + return (sqltype.StringSlice[longText])(val) +} func convertOrbPointToValue(val orb.Point) any { return ewkb.Value(val, 4326) } @@ -191,9 +194,6 @@ func convertLongTextToValue(val longText) any { func convertCountryCodeToValue(val CountryCode) any { return (string)(val) } -func convertArraylongTextToValue(val []longText) any { - return (sqltype.StringSlice[longText])(val) -} func convertAddressesToValue(val Addresses) any { return val } diff --git a/examples/testcase/struct-field/pointer/generated.go b/examples/testcase/struct-field/pointer/generated.go index 58d82468..5c71a93a 100755 --- a/examples/testcase/struct-field/pointer/generated.go +++ b/examples/testcase/struct-field/pointer/generated.go @@ -292,7 +292,7 @@ func (v Ptr) ColumnStr() sequel.ColumnConvertClause[*string] { return sequel.Column("str", v.Str, convertPtrstringToValue) } func (v Ptr) ColumnBytes() sequel.ColumnConvertClause[*[]byte] { - return sequel.Column("bytes", v.Bytes, convertPtrArraybyteToValue) + return sequel.Column("bytes", v.Bytes, convertPtrSlicebyteToValue) } func (v Ptr) ColumnBool() sequel.ColumnConvertClause[*bool] { return sequel.Column("bool", v.Bool, convertPtrboolToValue) @@ -445,7 +445,7 @@ func convertPtrboolToValue(val *bool) any { } return nil } -func convertPtrArraybyteToValue(val *[]byte) any { +func convertPtrSlicebyteToValue(val *[]byte) any { if val != nil { return *val } diff --git a/examples/testcase/struct-field/pointer/generated.go.tpl b/examples/testcase/struct-field/pointer/generated.go.tpl index 58d82468..5c71a93a 100644 --- a/examples/testcase/struct-field/pointer/generated.go.tpl +++ b/examples/testcase/struct-field/pointer/generated.go.tpl @@ -292,7 +292,7 @@ func (v Ptr) ColumnStr() sequel.ColumnConvertClause[*string] { return sequel.Column("str", v.Str, convertPtrstringToValue) } func (v Ptr) ColumnBytes() sequel.ColumnConvertClause[*[]byte] { - return sequel.Column("bytes", v.Bytes, convertPtrArraybyteToValue) + return sequel.Column("bytes", v.Bytes, convertPtrSlicebyteToValue) } func (v Ptr) ColumnBool() sequel.ColumnConvertClause[*bool] { return sequel.Column("bool", v.Bool, convertPtrboolToValue) @@ -445,7 +445,7 @@ func convertPtrboolToValue(val *bool) any { } return nil } -func convertPtrArraybyteToValue(val *[]byte) any { +func convertPtrSlicebyteToValue(val *[]byte) any { if val != nil { return *val } diff --git a/examples/testcase/struct-field/primitive/generated.go b/examples/testcase/struct-field/primitive/generated.go index 35718278..47fb2581 100755 --- a/examples/testcase/struct-field/primitive/generated.go +++ b/examples/testcase/struct-field/primitive/generated.go @@ -113,7 +113,7 @@ func (v Primitive) ColumnStr() sequel.ColumnClause[string] { return sequel.BasicColumn("str", v.Str) } func (v Primitive) ColumnBytes() sequel.ColumnConvertClause[[]byte] { - return sequel.Column("bytes", v.Bytes, convertArraybyteToValue) + return sequel.Column("bytes", v.Bytes, convertSlicebyteToValue) } func (v Primitive) ColumnBool() sequel.ColumnClause[bool] { return sequel.BasicColumn("bool", v.Bool) @@ -173,6 +173,9 @@ func convertUint32ToValue(val uint32) any { func convertUint16ToValue(val uint16) any { return (int64)(val) } +func convertSlicebyteToValue(val []byte) any { + return val +} func convertIntToValue(val int) any { return (int64)(val) } @@ -188,6 +191,3 @@ func convertInt16ToValue(val int16) any { func convertFloat32ToValue(val float32) any { return (float64)(val) } -func convertArraybyteToValue(val []byte) any { - return val -} diff --git a/examples/testcase/struct-field/primitive/generated.go.tpl b/examples/testcase/struct-field/primitive/generated.go.tpl index 35718278..47fb2581 100644 --- a/examples/testcase/struct-field/primitive/generated.go.tpl +++ b/examples/testcase/struct-field/primitive/generated.go.tpl @@ -113,7 +113,7 @@ func (v Primitive) ColumnStr() sequel.ColumnClause[string] { return sequel.BasicColumn("str", v.Str) } func (v Primitive) ColumnBytes() sequel.ColumnConvertClause[[]byte] { - return sequel.Column("bytes", v.Bytes, convertArraybyteToValue) + return sequel.Column("bytes", v.Bytes, convertSlicebyteToValue) } func (v Primitive) ColumnBool() sequel.ColumnClause[bool] { return sequel.BasicColumn("bool", v.Bool) @@ -173,6 +173,9 @@ func convertUint32ToValue(val uint32) any { func convertUint16ToValue(val uint16) any { return (int64)(val) } +func convertSlicebyteToValue(val []byte) any { + return val +} func convertIntToValue(val int) any { return (int64)(val) } @@ -188,6 +191,3 @@ func convertInt16ToValue(val int16) any { func convertFloat32ToValue(val float32) any { return (float64)(val) } -func convertArraybyteToValue(val []byte) any { - return val -} diff --git a/examples/testcase/struct-field/slice/generated.go b/examples/testcase/struct-field/slice/generated.go index cffb0316..e352b9e0 100755 --- a/examples/testcase/struct-field/slice/generated.go +++ b/examples/testcase/struct-field/slice/generated.go @@ -130,96 +130,96 @@ func (v Slice) ColumnID() sequel.ColumnConvertClause[uint64] { return sequel.Column("id", v.ID, convertUint64ToValue) } func (v Slice) ColumnBoolList() sequel.ColumnConvertClause[[]bool] { - return sequel.Column("bool_list", v.BoolList, convertArrayboolToValue) + return sequel.Column("bool_list", v.BoolList, convertSliceboolToValue) } func (v Slice) ColumnStrList() sequel.ColumnConvertClause[[]string] { - return sequel.Column("str_list", v.StrList, convertArraystringToValue) + return sequel.Column("str_list", v.StrList, convertSlicestringToValue) } func (v Slice) ColumnCustomStrList() sequel.ColumnConvertClause[[]customStr] { - return sequel.Column("custom_str_list", v.CustomStrList, convertArraycustomStrToValue) + return sequel.Column("custom_str_list", v.CustomStrList, convertSlicecustomStrToValue) } func (v Slice) ColumnIntList() sequel.ColumnConvertClause[[]int] { - return sequel.Column("int_list", v.IntList, convertArrayintToValue) + return sequel.Column("int_list", v.IntList, convertSliceintToValue) } func (v Slice) ColumnInt8List() sequel.ColumnConvertClause[[]int8] { - return sequel.Column("int_8_list", v.Int8List, convertArrayint8ToValue) + return sequel.Column("int_8_list", v.Int8List, convertSliceint8ToValue) } func (v Slice) ColumnInt16List() sequel.ColumnConvertClause[[]int16] { - return sequel.Column("int_16_list", v.Int16List, convertArrayint16ToValue) + return sequel.Column("int_16_list", v.Int16List, convertSliceint16ToValue) } func (v Slice) ColumnInt32List() sequel.ColumnConvertClause[[]int32] { - return sequel.Column("int_32_list", v.Int32List, convertArrayint32ToValue) + return sequel.Column("int_32_list", v.Int32List, convertSliceint32ToValue) } func (v Slice) ColumnInt64List() sequel.ColumnConvertClause[[]int64] { - return sequel.Column("int_64_list", v.Int64List, convertArrayint64ToValue) + return sequel.Column("int_64_list", v.Int64List, convertSliceint64ToValue) } func (v Slice) ColumnUintList() sequel.ColumnConvertClause[[]uint] { - return sequel.Column("uint_list", v.UintList, convertArrayuintToValue) + return sequel.Column("uint_list", v.UintList, convertSliceuintToValue) } func (v Slice) ColumnUint8List() sequel.ColumnConvertClause[[]uint8] { - return sequel.Column("uint_8_list", v.Uint8List, convertArrayuint8ToValue) + return sequel.Column("uint_8_list", v.Uint8List, convertSliceuint8ToValue) } func (v Slice) ColumnUint16List() sequel.ColumnConvertClause[[]uint16] { - return sequel.Column("uint_16_list", v.Uint16List, convertArrayuint16ToValue) + return sequel.Column("uint_16_list", v.Uint16List, convertSliceuint16ToValue) } func (v Slice) ColumnUint32List() sequel.ColumnConvertClause[[]uint32] { - return sequel.Column("uint_32_list", v.Uint32List, convertArrayuint32ToValue) + return sequel.Column("uint_32_list", v.Uint32List, convertSliceuint32ToValue) } func (v Slice) ColumnUint64List() sequel.ColumnConvertClause[[]uint64] { - return sequel.Column("uint_64_list", v.Uint64List, convertArrayuint64ToValue) + return sequel.Column("uint_64_list", v.Uint64List, convertSliceuint64ToValue) } func (v Slice) ColumnF32List() sequel.ColumnConvertClause[[]float32] { - return sequel.Column("f_32_list", v.F32List, convertArrayfloat32ToValue) + return sequel.Column("f_32_list", v.F32List, convertSlicefloat32ToValue) } func (v Slice) ColumnF64List() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("f_64_list", v.F64List, convertArrayfloat64ToValue) + return sequel.Column("f_64_list", v.F64List, convertSlicefloat64ToValue) } func convertUint64ToValue(val uint64) any { return val } -func convertArrayuintToValue(val []uint) any { +func convertSliceuintToValue(val []uint) any { return (sqltype.UintSlice[uint])(val) } -func convertArrayuint8ToValue(val []uint8) any { +func convertSliceuint8ToValue(val []uint8) any { return (sqltype.Uint8Slice[uint8])(val) } -func convertArrayuint64ToValue(val []uint64) any { +func convertSliceuint64ToValue(val []uint64) any { return (sqltype.Uint64Slice[uint64])(val) } -func convertArrayuint32ToValue(val []uint32) any { +func convertSliceuint32ToValue(val []uint32) any { return (sqltype.Uint32Slice[uint32])(val) } -func convertArrayuint16ToValue(val []uint16) any { +func convertSliceuint16ToValue(val []uint16) any { return (sqltype.Uint16Slice[uint16])(val) } -func convertArraystringToValue(val []string) any { +func convertSlicestringToValue(val []string) any { return (sqltype.StringSlice[string])(val) } -func convertArrayintToValue(val []int) any { +func convertSliceintToValue(val []int) any { return (sqltype.IntSlice[int])(val) } -func convertArrayint8ToValue(val []int8) any { +func convertSliceint8ToValue(val []int8) any { return (sqltype.Int8Slice[int8])(val) } -func convertArrayint64ToValue(val []int64) any { +func convertSliceint64ToValue(val []int64) any { return (sqltype.Int64Slice[int64])(val) } -func convertArrayint32ToValue(val []int32) any { +func convertSliceint32ToValue(val []int32) any { return (sqltype.Int32Slice[int32])(val) } -func convertArrayint16ToValue(val []int16) any { +func convertSliceint16ToValue(val []int16) any { return (sqltype.Int16Slice[int16])(val) } -func convertArrayfloat64ToValue(val []float64) any { +func convertSlicefloat64ToValue(val []float64) any { return (sqltype.Float64Slice[float64])(val) } -func convertArrayfloat32ToValue(val []float32) any { +func convertSlicefloat32ToValue(val []float32) any { return (sqltype.Float32Slice[float32])(val) } -func convertArraycustomStrToValue(val []customStr) any { +func convertSlicecustomStrToValue(val []customStr) any { return (sqltype.StringSlice[customStr])(val) } -func convertArrayboolToValue(val []bool) any { +func convertSliceboolToValue(val []bool) any { return (sqltype.BoolSlice[bool])(val) } diff --git a/examples/testcase/struct-field/slice/generated.go.tpl b/examples/testcase/struct-field/slice/generated.go.tpl index cffb0316..e352b9e0 100644 --- a/examples/testcase/struct-field/slice/generated.go.tpl +++ b/examples/testcase/struct-field/slice/generated.go.tpl @@ -130,96 +130,96 @@ func (v Slice) ColumnID() sequel.ColumnConvertClause[uint64] { return sequel.Column("id", v.ID, convertUint64ToValue) } func (v Slice) ColumnBoolList() sequel.ColumnConvertClause[[]bool] { - return sequel.Column("bool_list", v.BoolList, convertArrayboolToValue) + return sequel.Column("bool_list", v.BoolList, convertSliceboolToValue) } func (v Slice) ColumnStrList() sequel.ColumnConvertClause[[]string] { - return sequel.Column("str_list", v.StrList, convertArraystringToValue) + return sequel.Column("str_list", v.StrList, convertSlicestringToValue) } func (v Slice) ColumnCustomStrList() sequel.ColumnConvertClause[[]customStr] { - return sequel.Column("custom_str_list", v.CustomStrList, convertArraycustomStrToValue) + return sequel.Column("custom_str_list", v.CustomStrList, convertSlicecustomStrToValue) } func (v Slice) ColumnIntList() sequel.ColumnConvertClause[[]int] { - return sequel.Column("int_list", v.IntList, convertArrayintToValue) + return sequel.Column("int_list", v.IntList, convertSliceintToValue) } func (v Slice) ColumnInt8List() sequel.ColumnConvertClause[[]int8] { - return sequel.Column("int_8_list", v.Int8List, convertArrayint8ToValue) + return sequel.Column("int_8_list", v.Int8List, convertSliceint8ToValue) } func (v Slice) ColumnInt16List() sequel.ColumnConvertClause[[]int16] { - return sequel.Column("int_16_list", v.Int16List, convertArrayint16ToValue) + return sequel.Column("int_16_list", v.Int16List, convertSliceint16ToValue) } func (v Slice) ColumnInt32List() sequel.ColumnConvertClause[[]int32] { - return sequel.Column("int_32_list", v.Int32List, convertArrayint32ToValue) + return sequel.Column("int_32_list", v.Int32List, convertSliceint32ToValue) } func (v Slice) ColumnInt64List() sequel.ColumnConvertClause[[]int64] { - return sequel.Column("int_64_list", v.Int64List, convertArrayint64ToValue) + return sequel.Column("int_64_list", v.Int64List, convertSliceint64ToValue) } func (v Slice) ColumnUintList() sequel.ColumnConvertClause[[]uint] { - return sequel.Column("uint_list", v.UintList, convertArrayuintToValue) + return sequel.Column("uint_list", v.UintList, convertSliceuintToValue) } func (v Slice) ColumnUint8List() sequel.ColumnConvertClause[[]uint8] { - return sequel.Column("uint_8_list", v.Uint8List, convertArrayuint8ToValue) + return sequel.Column("uint_8_list", v.Uint8List, convertSliceuint8ToValue) } func (v Slice) ColumnUint16List() sequel.ColumnConvertClause[[]uint16] { - return sequel.Column("uint_16_list", v.Uint16List, convertArrayuint16ToValue) + return sequel.Column("uint_16_list", v.Uint16List, convertSliceuint16ToValue) } func (v Slice) ColumnUint32List() sequel.ColumnConvertClause[[]uint32] { - return sequel.Column("uint_32_list", v.Uint32List, convertArrayuint32ToValue) + return sequel.Column("uint_32_list", v.Uint32List, convertSliceuint32ToValue) } func (v Slice) ColumnUint64List() sequel.ColumnConvertClause[[]uint64] { - return sequel.Column("uint_64_list", v.Uint64List, convertArrayuint64ToValue) + return sequel.Column("uint_64_list", v.Uint64List, convertSliceuint64ToValue) } func (v Slice) ColumnF32List() sequel.ColumnConvertClause[[]float32] { - return sequel.Column("f_32_list", v.F32List, convertArrayfloat32ToValue) + return sequel.Column("f_32_list", v.F32List, convertSlicefloat32ToValue) } func (v Slice) ColumnF64List() sequel.ColumnConvertClause[[]float64] { - return sequel.Column("f_64_list", v.F64List, convertArrayfloat64ToValue) + return sequel.Column("f_64_list", v.F64List, convertSlicefloat64ToValue) } func convertUint64ToValue(val uint64) any { return val } -func convertArrayuintToValue(val []uint) any { +func convertSliceuintToValue(val []uint) any { return (sqltype.UintSlice[uint])(val) } -func convertArrayuint8ToValue(val []uint8) any { +func convertSliceuint8ToValue(val []uint8) any { return (sqltype.Uint8Slice[uint8])(val) } -func convertArrayuint64ToValue(val []uint64) any { +func convertSliceuint64ToValue(val []uint64) any { return (sqltype.Uint64Slice[uint64])(val) } -func convertArrayuint32ToValue(val []uint32) any { +func convertSliceuint32ToValue(val []uint32) any { return (sqltype.Uint32Slice[uint32])(val) } -func convertArrayuint16ToValue(val []uint16) any { +func convertSliceuint16ToValue(val []uint16) any { return (sqltype.Uint16Slice[uint16])(val) } -func convertArraystringToValue(val []string) any { +func convertSlicestringToValue(val []string) any { return (sqltype.StringSlice[string])(val) } -func convertArrayintToValue(val []int) any { +func convertSliceintToValue(val []int) any { return (sqltype.IntSlice[int])(val) } -func convertArrayint8ToValue(val []int8) any { +func convertSliceint8ToValue(val []int8) any { return (sqltype.Int8Slice[int8])(val) } -func convertArrayint64ToValue(val []int64) any { +func convertSliceint64ToValue(val []int64) any { return (sqltype.Int64Slice[int64])(val) } -func convertArrayint32ToValue(val []int32) any { +func convertSliceint32ToValue(val []int32) any { return (sqltype.Int32Slice[int32])(val) } -func convertArrayint16ToValue(val []int16) any { +func convertSliceint16ToValue(val []int16) any { return (sqltype.Int16Slice[int16])(val) } -func convertArrayfloat64ToValue(val []float64) any { +func convertSlicefloat64ToValue(val []float64) any { return (sqltype.Float64Slice[float64])(val) } -func convertArrayfloat32ToValue(val []float32) any { +func convertSlicefloat32ToValue(val []float32) any { return (sqltype.Float32Slice[float32])(val) } -func convertArraycustomStrToValue(val []customStr) any { +func convertSlicecustomStrToValue(val []customStr) any { return (sqltype.StringSlice[customStr])(val) } -func convertArrayboolToValue(val []bool) any { +func convertSliceboolToValue(val []bool) any { return (sqltype.BoolSlice[bool])(val) } diff --git a/go.work b/go.work index 4e6c0ddb..5ab8d35b 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.24.0 +go 1.25.0 use ( . diff --git a/go.work.sum b/go.work.sum index 6a9c67dc..b7e84ddd 100644 --- a/go.work.sum +++ b/go.work.sum @@ -260,6 +260,7 @@ github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bY github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= +github.com/jackc/pgx/v5 v5.9.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= @@ -269,11 +270,6 @@ github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrD github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/ktrysmt/go-bitbucket v0.6.4/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4= github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/microsoft/go-mssqldb v1.0.0/go.mod h1:+4wZTUnz/SV6nffv+RRRB/ss8jPng5Sho2SmM1l2ts4= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= @@ -376,9 +372,6 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= From 5a7f2ac77a0fd3a8eeb3dd4172275f4a306488ff Mon Sep 17 00:00:00 2001 From: si3nloong Date: Tue, 21 Apr 2026 22:24:01 +0800 Subject: [PATCH 21/56] chore: improve generated codes --- cmd/sqlgen/codegen/generate.go | 23 +++++++- docs/MODELS.md | 6 +- examples/testcase/core/generated.go | 8 +-- examples/testcase/core/generated.go.tpl | 8 +-- .../schema/custom-declare/generated.go | 2 +- .../schema/custom-declare/generated.go.tpl | 2 +- .../schema/dynamic-table-name/generated.go | 6 +- .../dynamic-table-name/generated.go.tpl | 6 +- examples/testcase/schema/generated.go | 17 +++--- examples/testcase/schema/generated.go.tpl | 17 +++--- examples/testcase/schema/nopk/generated.go | 4 +- .../testcase/schema/nopk/generated.go.tpl | 4 +- .../testcase/schema/table-name/generated.go | 6 +- .../schema/table-name/generated.go.tpl | 6 +- .../testcase/struct-field/alias/generated.go | 15 ++--- .../struct-field/alias/generated.go.tpl | 15 ++--- .../testcase/struct-field/custom/generated.go | 31 ++++------ .../struct-field/custom/generated.go.tpl | 31 ++++------ .../testcase/struct-field/date/generated.go | 7 +-- .../struct-field/date/generated.go.tpl | 7 +-- .../struct-field/imported/generated.go | 56 ++++++------------- .../struct-field/imported/generated.go.tpl | 56 ++++++------------- .../struct-field/pk/auto-incr/generated.go | 2 +- .../pk/auto-incr/generated.go.tpl | 2 +- .../pk/auto-incr/int64/generate.go.tpl | 2 +- .../pk/auto-incr/int64/generated.go | 2 +- .../struct-field/pk/composite/generated.go | 14 ++--- .../pk/composite/generated.go.tpl | 14 ++--- .../testcase/struct-field/pk/generated.go | 17 +++--- .../testcase/struct-field/pk/generated.go.tpl | 17 +++--- .../struct-field/pk/uuid/generated.go | 10 +--- .../struct-field/pk/uuid/generated.go.tpl | 10 +--- .../struct-field/pointer/generated.go | 4 +- .../struct-field/pointer/generated.go.tpl | 4 +- .../struct-field/primitive/generated.go | 10 ++-- .../struct-field/primitive/generated.go.tpl | 10 ++-- .../struct-field/readonly/generated.go | 6 +- .../struct-field/readonly/generated.go.tpl | 6 +- .../testcase/struct-field/size/generated.go | 6 +- .../struct-field/size/generated.go.tpl | 6 +- .../testcase/struct-field/sql/generated.go | 7 +-- .../struct-field/sql/generated.go.tpl | 7 +-- .../testcase/struct-field/unique/generated.go | 6 +- .../struct-field/unique/generated.go.tpl | 6 +- .../testcase/struct-field/valuer/generated.go | 11 ++-- .../struct-field/valuer/generated.go.tpl | 11 ++-- .../struct-field/version/generated.go | 8 +-- .../struct-field/version/generated.go.tpl | 8 +-- examples/testcase/struct/alias/generated.go | 4 +- .../testcase/struct/alias/generated.go.tpl | 4 +- .../struct/embedded/local/generated.go | 10 ++-- .../struct/embedded/local/generated.go.tpl | 10 ++-- .../testcase/struct/readonly/generated.go | 6 +- .../testcase/struct/readonly/generated.go.tpl | 6 +- examples/testcase/struct/tag/generated.go | 12 ++-- examples/testcase/struct/tag/generated.go.tpl | 12 ++-- sequel/{clause.go => column.go} | 30 ++++++---- sequel/{clause_test.go => column_test.go} | 6 +- 58 files changed, 265 insertions(+), 374 deletions(-) rename sequel/{clause.go => column.go} (67%) rename sequel/{clause_test.go => column_test.go} (87%) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index 24bbb8be..e223def5 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -354,9 +354,10 @@ loop: // Build the valuer function for each column for _, f := range t.Columns { var typeStr string - isBasic := g.isBasicType(f.GoType()) + ft := f.GoType() + isBasic := g.isBasicType(ft) // underlyingType, _ := underlyingType(f.GoType()) - switch vt := f.GoType().(type) { + switch vt := ft.(type) { // First level struct data type case *types.Struct: buf := strpool.AcquireString() @@ -376,13 +377,17 @@ loop: } if isBasic { fprintfln(w, "func (v %s) %s() sequel.ColumnClause[%s] {", t.GoName, g.config.Getter.Prefix+f.GoName(), typeStr) + } else if g.peekTypeIsValuer(ft) { + fprintfln(w, "func (v %s) %s() sequel.ColumnClause[%s] {", t.GoName, g.config.Getter.Prefix+f.GoName(), typeStr) } else { fprintfln(w, "func (v %s) %s() sequel.ColumnConvertClause[%s] {", t.GoName, g.config.Getter.Prefix+f.GoName(), typeStr) } } if isBasic { - fprintfln(w, "return sequel.BasicColumn(%s, v.%s)", g.Quote(g.QuoteIdentifier(f.Name())), f.GoPath()) + fprintfln(w, "return sequel.PrimitiveColumn(%s, v.%s)", g.Quote(g.QuoteIdentifier(f.Name())), f.GoPath()) + } else if g.peekTypeIsValuer(ft) { + fprintfln(w, "return sequel.ValueColumn(%s, v.%s)", g.Quote(g.QuoteIdentifier(f.Name())), f.GoPath()) } else { typeName := f.GoType().String() // Generate anonymous function @@ -833,6 +838,18 @@ func (g *Generator) isBasicType(t types.Type) bool { return false } +func (g *Generator) peekTypeIsValuer(t types.Type) bool { + switch t.(type) { + case *types.Pointer: + return false + default: + if _, wrong := types.MissingMethod(t, goSqlValuer, true); wrong { + return true + } + return false + } +} + func (g *Generator) valuer(importPkgs *Package, goPath string, t types.Type) string { // This is to prevent auto cast if the value is driver.Value if g.isBasicType(t) { diff --git a/docs/MODELS.md b/docs/MODELS.md index 6cf98244..d6259b5a 100644 --- a/docs/MODELS.md +++ b/docs/MODELS.md @@ -161,10 +161,10 @@ func (v User) CreatedAtValue() any { return v.CreatedAt } func (v User) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v User) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } func (v User) ColumnAge() sequel.ColumnConvertClause[*int] { return sequel.Column("age", v.Age, func(val *int) any { @@ -200,7 +200,7 @@ func (v User) ColumnMoneyInBank() sequel.ColumnConvertClause[decimal.Decimal] { }) } func (v User) ColumnCreatedAt() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("created_at", v.CreatedAt) + return sequel.PrimitiveColumn("created_at", v.CreatedAt) } ``` diff --git a/examples/testcase/core/generated.go b/examples/testcase/core/generated.go index a96b824b..4d835b2b 100755 --- a/examples/testcase/core/generated.go +++ b/examples/testcase/core/generated.go @@ -137,13 +137,13 @@ func (v User) NameValue() any { return v.embed.deepNested.Name } func (v User) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v User) ColumnNo() sequel.ColumnConvertClause[uint] { return sequel.Column("no", v.No, convertUintToValue) } func (v User) ColumnJoinedTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("joined_time", v.JoinedTime) + return sequel.PrimitiveColumn("joined_time", v.JoinedTime) } func (v User) ColumnAddress() sequel.ColumnConvertClause[Address] { return sequel.Column("address", v.Address, convertAddressToValue) @@ -181,10 +181,10 @@ func (v User) ColumnNested() sequel.ColumnConvertClause[*struct{ Deep struct{ Bo return sequel.Column("nested", v.embed.Nested, convertPtrstructDeepStructBoolBoolToValue) } func (v User) ColumnT() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("t", v.embed.T) + return sequel.PrimitiveColumn("t", v.embed.T) } func (v User) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.embed.deepNested.Name) + return sequel.PrimitiveColumn("name", v.embed.deepNested.Name) } func convertUserExtraInfoInlineStructToValue(val UserExtraInfoInlineStruct) any { diff --git a/examples/testcase/core/generated.go.tpl b/examples/testcase/core/generated.go.tpl index a96b824b..4d835b2b 100644 --- a/examples/testcase/core/generated.go.tpl +++ b/examples/testcase/core/generated.go.tpl @@ -137,13 +137,13 @@ func (v User) NameValue() any { return v.embed.deepNested.Name } func (v User) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v User) ColumnNo() sequel.ColumnConvertClause[uint] { return sequel.Column("no", v.No, convertUintToValue) } func (v User) ColumnJoinedTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("joined_time", v.JoinedTime) + return sequel.PrimitiveColumn("joined_time", v.JoinedTime) } func (v User) ColumnAddress() sequel.ColumnConvertClause[Address] { return sequel.Column("address", v.Address, convertAddressToValue) @@ -181,10 +181,10 @@ func (v User) ColumnNested() sequel.ColumnConvertClause[*struct{ Deep struct{ Bo return sequel.Column("nested", v.embed.Nested, convertPtrstructDeepStructBoolBoolToValue) } func (v User) ColumnT() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("t", v.embed.T) + return sequel.PrimitiveColumn("t", v.embed.T) } func (v User) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.embed.deepNested.Name) + return sequel.PrimitiveColumn("name", v.embed.deepNested.Name) } func convertUserExtraInfoInlineStructToValue(val UserExtraInfoInlineStruct) any { diff --git a/examples/testcase/schema/custom-declare/generated.go b/examples/testcase/schema/custom-declare/generated.go index be0c4010..48ab55f6 100755 --- a/examples/testcase/schema/custom-declare/generated.go +++ b/examples/testcase/schema/custom-declare/generated.go @@ -16,5 +16,5 @@ func (v A) NameValue() any { return v.Name } func (v A) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } diff --git a/examples/testcase/schema/custom-declare/generated.go.tpl b/examples/testcase/schema/custom-declare/generated.go.tpl index be0c4010..48ab55f6 100644 --- a/examples/testcase/schema/custom-declare/generated.go.tpl +++ b/examples/testcase/schema/custom-declare/generated.go.tpl @@ -16,5 +16,5 @@ func (v A) NameValue() any { return v.Name } func (v A) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } diff --git a/examples/testcase/schema/dynamic-table-name/generated.go b/examples/testcase/schema/dynamic-table-name/generated.go index cf18a0ba..922a187e 100755 --- a/examples/testcase/schema/dynamic-table-name/generated.go +++ b/examples/testcase/schema/dynamic-table-name/generated.go @@ -44,10 +44,10 @@ func (v A) NameValue() any { return v.Name } func (v A) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v A) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } func (Model) Columns() []string { @@ -73,5 +73,5 @@ func (v Model) NameValue() any { return v.Name } func (v Model) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } diff --git a/examples/testcase/schema/dynamic-table-name/generated.go.tpl b/examples/testcase/schema/dynamic-table-name/generated.go.tpl index cf18a0ba..922a187e 100644 --- a/examples/testcase/schema/dynamic-table-name/generated.go.tpl +++ b/examples/testcase/schema/dynamic-table-name/generated.go.tpl @@ -44,10 +44,10 @@ func (v A) NameValue() any { return v.Name } func (v A) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v A) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } func (Model) Columns() []string { @@ -73,5 +73,5 @@ func (v Model) NameValue() any { return v.Name } func (v Model) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } diff --git a/examples/testcase/schema/generated.go b/examples/testcase/schema/generated.go index d7b0a4aa..de9da940 100755 --- a/examples/testcase/schema/generated.go +++ b/examples/testcase/schema/generated.go @@ -46,13 +46,13 @@ func (v A) CreatedAtValue() any { return v.CreatedAt } func (v A) ColumnID() sequel.ColumnClause[string] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v A) ColumnText() sequel.ColumnConvertClause[LongText] { return sequel.Column("text", v.Text, convertLongTextToValue) } func (v A) ColumnCreatedAt() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("created_at", v.CreatedAt) + return sequel.PrimitiveColumn("created_at", v.CreatedAt) } func (B) TableName() string { @@ -86,10 +86,10 @@ func (v B) CreatedAtValue() any { return v.CreatedAt } func (v B) ColumnID() sequel.ColumnClause[string] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v B) ColumnCreatedAt() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("created_at", v.CreatedAt) + return sequel.PrimitiveColumn("created_at", v.CreatedAt) } func (C) TableName() string { @@ -125,7 +125,7 @@ func (v C) IDValue() any { return v.ID } func (v C) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (D) TableName() string { @@ -160,13 +160,10 @@ func (v D) FindOneByPKStmt() (string, []any) { func (v D) IDValue() any { return v.ID } -func (v D) ColumnID() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("id", v.ID, convertSqlNullStringToValue) +func (v D) ColumnID() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("id", v.ID) } -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} func convertLongTextToValue(val LongText) any { return (string)(val) } diff --git a/examples/testcase/schema/generated.go.tpl b/examples/testcase/schema/generated.go.tpl index d7b0a4aa..de9da940 100644 --- a/examples/testcase/schema/generated.go.tpl +++ b/examples/testcase/schema/generated.go.tpl @@ -46,13 +46,13 @@ func (v A) CreatedAtValue() any { return v.CreatedAt } func (v A) ColumnID() sequel.ColumnClause[string] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v A) ColumnText() sequel.ColumnConvertClause[LongText] { return sequel.Column("text", v.Text, convertLongTextToValue) } func (v A) ColumnCreatedAt() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("created_at", v.CreatedAt) + return sequel.PrimitiveColumn("created_at", v.CreatedAt) } func (B) TableName() string { @@ -86,10 +86,10 @@ func (v B) CreatedAtValue() any { return v.CreatedAt } func (v B) ColumnID() sequel.ColumnClause[string] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v B) ColumnCreatedAt() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("created_at", v.CreatedAt) + return sequel.PrimitiveColumn("created_at", v.CreatedAt) } func (C) TableName() string { @@ -125,7 +125,7 @@ func (v C) IDValue() any { return v.ID } func (v C) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (D) TableName() string { @@ -160,13 +160,10 @@ func (v D) FindOneByPKStmt() (string, []any) { func (v D) IDValue() any { return v.ID } -func (v D) ColumnID() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("id", v.ID, convertSqlNullStringToValue) +func (v D) ColumnID() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("id", v.ID) } -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} func convertLongTextToValue(val LongText) any { return (string)(val) } diff --git a/examples/testcase/schema/nopk/generated.go b/examples/testcase/schema/nopk/generated.go index b222e89c..b1482487 100755 --- a/examples/testcase/schema/nopk/generated.go +++ b/examples/testcase/schema/nopk/generated.go @@ -43,13 +43,13 @@ func (v Customer) MarriedValue() any { return v.Married } func (v Customer) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("age", v.Age, convertUint8ToValue) } func (v Customer) ColumnMarried() sequel.ColumnClause[bool] { - return sequel.BasicColumn("married", v.Married) + return sequel.PrimitiveColumn("married", v.Married) } func convertUint8ToValue(val uint8) any { diff --git a/examples/testcase/schema/nopk/generated.go.tpl b/examples/testcase/schema/nopk/generated.go.tpl index b222e89c..b1482487 100644 --- a/examples/testcase/schema/nopk/generated.go.tpl +++ b/examples/testcase/schema/nopk/generated.go.tpl @@ -43,13 +43,13 @@ func (v Customer) MarriedValue() any { return v.Married } func (v Customer) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("age", v.Age, convertUint8ToValue) } func (v Customer) ColumnMarried() sequel.ColumnClause[bool] { - return sequel.BasicColumn("married", v.Married) + return sequel.PrimitiveColumn("married", v.Married) } func convertUint8ToValue(val uint8) any { diff --git a/examples/testcase/schema/table-name/generated.go b/examples/testcase/schema/table-name/generated.go index 52fb1982..825adea3 100755 --- a/examples/testcase/schema/table-name/generated.go +++ b/examples/testcase/schema/table-name/generated.go @@ -32,7 +32,7 @@ func (v CustomTableName1) TextValue() any { return v.Text } func (v CustomTableName1) ColumnText() sequel.ColumnClause[string] { - return sequel.BasicColumn("text", v.Text) + return sequel.PrimitiveColumn("text", v.Text) } func (CustomTableName2) TableName() string { @@ -61,7 +61,7 @@ func (v CustomTableName2) TextValue() any { return v.Text } func (v CustomTableName2) ColumnText() sequel.ColumnClause[string] { - return sequel.BasicColumn("text", v.Text) + return sequel.PrimitiveColumn("text", v.Text) } func (CustomTableName3) TableName() string { @@ -90,5 +90,5 @@ func (v CustomTableName3) TextValue() any { return v.Text } func (v CustomTableName3) ColumnText() sequel.ColumnClause[string] { - return sequel.BasicColumn("text", v.Text) + return sequel.PrimitiveColumn("text", v.Text) } diff --git a/examples/testcase/schema/table-name/generated.go.tpl b/examples/testcase/schema/table-name/generated.go.tpl index 52fb1982..825adea3 100644 --- a/examples/testcase/schema/table-name/generated.go.tpl +++ b/examples/testcase/schema/table-name/generated.go.tpl @@ -32,7 +32,7 @@ func (v CustomTableName1) TextValue() any { return v.Text } func (v CustomTableName1) ColumnText() sequel.ColumnClause[string] { - return sequel.BasicColumn("text", v.Text) + return sequel.PrimitiveColumn("text", v.Text) } func (CustomTableName2) TableName() string { @@ -61,7 +61,7 @@ func (v CustomTableName2) TextValue() any { return v.Text } func (v CustomTableName2) ColumnText() sequel.ColumnClause[string] { - return sequel.BasicColumn("text", v.Text) + return sequel.PrimitiveColumn("text", v.Text) } func (CustomTableName3) TableName() string { @@ -90,5 +90,5 @@ func (v CustomTableName3) TextValue() any { return v.Text } func (v CustomTableName3) ColumnText() sequel.ColumnClause[string] { - return sequel.BasicColumn("text", v.Text) + return sequel.PrimitiveColumn("text", v.Text) } diff --git a/examples/testcase/struct-field/alias/generated.go b/examples/testcase/struct-field/alias/generated.go index f1a775fe..710d1568 100755 --- a/examples/testcase/struct-field/alias/generated.go +++ b/examples/testcase/struct-field/alias/generated.go @@ -81,10 +81,10 @@ func (v AliasStruct) UpdatedValue() any { return (time.Time)(v.model.Updated) } func (v AliasStruct) ColumnB() sequel.ColumnClause[float64] { - return sequel.BasicColumn("b", v.B) + return sequel.PrimitiveColumn("b", v.B) } func (v AliasStruct) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("Id", v.pk.ID) + return sequel.PrimitiveColumn("Id", v.pk.ID) } func (v AliasStruct) ColumnHeader() sequel.ColumnConvertClause[aliasStr] { return sequel.Column("header", v.Header, convertAliasStrToValue) @@ -95,8 +95,8 @@ func (v AliasStruct) ColumnRaw() sequel.ColumnConvertClause[sql.RawBytes] { func (v AliasStruct) ColumnText() sequel.ColumnConvertClause[customStr] { return sequel.Column("text", v.Text, convertCustomStrToValue) } -func (v AliasStruct) ColumnNullStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("null_str", v.NullStr, convertSqlNullStringToValue) +func (v AliasStruct) ColumnNullStr() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("null_str", v.NullStr) } func (v AliasStruct) ColumnCreated() sequel.ColumnConvertClause[DT] { return sequel.Column("created", v.model.Created, convertDtToValue) @@ -131,7 +131,7 @@ func (v B) NameValue() any { return v.Name } func (v B) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } func (C) TableName() string { @@ -160,15 +160,12 @@ func (v C) IDValue() any { return v.ID } func (v C) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func convertSqlRawBytesToValue(val sql.RawBytes) any { return val } -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} func convertDtToValue(val DT) any { return (time.Time)(val) } diff --git a/examples/testcase/struct-field/alias/generated.go.tpl b/examples/testcase/struct-field/alias/generated.go.tpl index f1a775fe..710d1568 100644 --- a/examples/testcase/struct-field/alias/generated.go.tpl +++ b/examples/testcase/struct-field/alias/generated.go.tpl @@ -81,10 +81,10 @@ func (v AliasStruct) UpdatedValue() any { return (time.Time)(v.model.Updated) } func (v AliasStruct) ColumnB() sequel.ColumnClause[float64] { - return sequel.BasicColumn("b", v.B) + return sequel.PrimitiveColumn("b", v.B) } func (v AliasStruct) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("Id", v.pk.ID) + return sequel.PrimitiveColumn("Id", v.pk.ID) } func (v AliasStruct) ColumnHeader() sequel.ColumnConvertClause[aliasStr] { return sequel.Column("header", v.Header, convertAliasStrToValue) @@ -95,8 +95,8 @@ func (v AliasStruct) ColumnRaw() sequel.ColumnConvertClause[sql.RawBytes] { func (v AliasStruct) ColumnText() sequel.ColumnConvertClause[customStr] { return sequel.Column("text", v.Text, convertCustomStrToValue) } -func (v AliasStruct) ColumnNullStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("null_str", v.NullStr, convertSqlNullStringToValue) +func (v AliasStruct) ColumnNullStr() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("null_str", v.NullStr) } func (v AliasStruct) ColumnCreated() sequel.ColumnConvertClause[DT] { return sequel.Column("created", v.model.Created, convertDtToValue) @@ -131,7 +131,7 @@ func (v B) NameValue() any { return v.Name } func (v B) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) + return sequel.PrimitiveColumn("name", v.Name) } func (C) TableName() string { @@ -160,15 +160,12 @@ func (v C) IDValue() any { return v.ID } func (v C) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func convertSqlRawBytesToValue(val sql.RawBytes) any { return val } -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} func convertDtToValue(val DT) any { return (time.Time)(val) } diff --git a/examples/testcase/struct-field/custom/generated.go b/examples/testcase/struct-field/custom/generated.go index 368c69db..14f00913 100755 --- a/examples/testcase/struct-field/custom/generated.go +++ b/examples/testcase/struct-field/custom/generated.go @@ -72,13 +72,13 @@ func (v Address) CountryCodeValue() any { return (string)(v.CountryCode) } func (v Address) ColumnLine1() sequel.ColumnClause[string] { - return sequel.BasicColumn("line_1", v.Line1) + return sequel.PrimitiveColumn("line_1", v.Line1) } -func (v Address) ColumnLine2() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("line_2", v.Line2, convertSqlNullStringToValue) +func (v Address) ColumnLine2() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("line_2", v.Line2) } func (v Address) ColumnCity() sequel.ColumnClause[string] { - return sequel.BasicColumn("city", v.City) + return sequel.PrimitiveColumn("city", v.City) } func (v Address) ColumnPostCode() sequel.ColumnConvertClause[uint] { return sequel.Column("post_code", v.PostCode, convertUintToValue) @@ -149,25 +149,25 @@ func (v Customer) JoinAtValue() any { return v.JoinAt } func (v Customer) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("howOld", v.Age, convertUint8ToValue) } -func (v Customer) ColumnName() sequel.ColumnConvertClause[longText] { - return sequel.Column("name", v.Name, convertLongTextToValue) +func (v Customer) ColumnName() sequel.ColumnClause[longText] { + return sequel.ValueColumn("name", v.Name) } -func (v Customer) ColumnAddress() sequel.ColumnConvertClause[Addresses] { - return sequel.Column("address", v.Address, convertAddressesToValue) +func (v Customer) ColumnAddress() sequel.ColumnClause[Addresses] { + return sequel.ValueColumn("address", v.Address) } func (v Customer) ColumnNicknames() sequel.ColumnConvertClause[[]longText] { return sequel.Column("nicknames", v.Nicknames, convertSlicelongTextToValue) } func (v Customer) ColumnStatus() sequel.ColumnClause[string] { - return sequel.BasicColumn("status", v.Status) + return sequel.PrimitiveColumn("status", v.Status) } func (v Customer) ColumnJoinAt() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("join_at", v.JoinAt) + return sequel.PrimitiveColumn("join_at", v.JoinAt) } func convertUintToValue(val uint) any { @@ -179,21 +179,12 @@ func convertUint8ToValue(val uint8) any { func convertStateCodeToValue(val StateCode) any { return (string)(val) } -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} func convertSlicelongTextToValue(val []longText) any { return (sqltype.StringSlice[longText])(val) } func convertOrbPointToValue(val orb.Point) any { return ewkb.Value(val, 4326) } -func convertLongTextToValue(val longText) any { - return val -} func convertCountryCodeToValue(val CountryCode) any { return (string)(val) } -func convertAddressesToValue(val Addresses) any { - return val -} diff --git a/examples/testcase/struct-field/custom/generated.go.tpl b/examples/testcase/struct-field/custom/generated.go.tpl index 368c69db..14f00913 100644 --- a/examples/testcase/struct-field/custom/generated.go.tpl +++ b/examples/testcase/struct-field/custom/generated.go.tpl @@ -72,13 +72,13 @@ func (v Address) CountryCodeValue() any { return (string)(v.CountryCode) } func (v Address) ColumnLine1() sequel.ColumnClause[string] { - return sequel.BasicColumn("line_1", v.Line1) + return sequel.PrimitiveColumn("line_1", v.Line1) } -func (v Address) ColumnLine2() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("line_2", v.Line2, convertSqlNullStringToValue) +func (v Address) ColumnLine2() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("line_2", v.Line2) } func (v Address) ColumnCity() sequel.ColumnClause[string] { - return sequel.BasicColumn("city", v.City) + return sequel.PrimitiveColumn("city", v.City) } func (v Address) ColumnPostCode() sequel.ColumnConvertClause[uint] { return sequel.Column("post_code", v.PostCode, convertUintToValue) @@ -149,25 +149,25 @@ func (v Customer) JoinAtValue() any { return v.JoinAt } func (v Customer) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v Customer) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("howOld", v.Age, convertUint8ToValue) } -func (v Customer) ColumnName() sequel.ColumnConvertClause[longText] { - return sequel.Column("name", v.Name, convertLongTextToValue) +func (v Customer) ColumnName() sequel.ColumnClause[longText] { + return sequel.ValueColumn("name", v.Name) } -func (v Customer) ColumnAddress() sequel.ColumnConvertClause[Addresses] { - return sequel.Column("address", v.Address, convertAddressesToValue) +func (v Customer) ColumnAddress() sequel.ColumnClause[Addresses] { + return sequel.ValueColumn("address", v.Address) } func (v Customer) ColumnNicknames() sequel.ColumnConvertClause[[]longText] { return sequel.Column("nicknames", v.Nicknames, convertSlicelongTextToValue) } func (v Customer) ColumnStatus() sequel.ColumnClause[string] { - return sequel.BasicColumn("status", v.Status) + return sequel.PrimitiveColumn("status", v.Status) } func (v Customer) ColumnJoinAt() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("join_at", v.JoinAt) + return sequel.PrimitiveColumn("join_at", v.JoinAt) } func convertUintToValue(val uint) any { @@ -179,21 +179,12 @@ func convertUint8ToValue(val uint8) any { func convertStateCodeToValue(val StateCode) any { return (string)(val) } -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} func convertSlicelongTextToValue(val []longText) any { return (sqltype.StringSlice[longText])(val) } func convertOrbPointToValue(val orb.Point) any { return ewkb.Value(val, 4326) } -func convertLongTextToValue(val longText) any { - return val -} func convertCountryCodeToValue(val CountryCode) any { return (string)(val) } -func convertAddressesToValue(val Addresses) any { - return val -} diff --git a/examples/testcase/struct-field/date/generated.go b/examples/testcase/struct-field/date/generated.go index 8c55379d..f29acc8d 100755 --- a/examples/testcase/struct-field/date/generated.go +++ b/examples/testcase/struct-field/date/generated.go @@ -49,16 +49,13 @@ func (v User) IDValue() any { func (v User) BirthDateValue() any { return encoding.TextValue(v.BirthDate) } -func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) +func (v User) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } func (v User) ColumnBirthDate() sequel.ColumnConvertClause[civil.Date] { return sequel.Column("birth_date", v.BirthDate, convertCivilDateToValue) } -func convertUuidUuidToValue(val uuid.UUID) any { - return val -} func convertCivilDateToValue(val civil.Date) any { return encoding.TextValue(val) } diff --git a/examples/testcase/struct-field/date/generated.go.tpl b/examples/testcase/struct-field/date/generated.go.tpl index 8c55379d..f29acc8d 100644 --- a/examples/testcase/struct-field/date/generated.go.tpl +++ b/examples/testcase/struct-field/date/generated.go.tpl @@ -49,16 +49,13 @@ func (v User) IDValue() any { func (v User) BirthDateValue() any { return encoding.TextValue(v.BirthDate) } -func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) +func (v User) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } func (v User) ColumnBirthDate() sequel.ColumnConvertClause[civil.Date] { return sequel.Column("birth_date", v.BirthDate, convertCivilDateToValue) } -func convertUuidUuidToValue(val uuid.UUID) any { - return val -} func convertCivilDateToValue(val civil.Date) any { return encoding.TextValue(val) } diff --git a/examples/testcase/struct-field/imported/generated.go b/examples/testcase/struct-field/imported/generated.go index b590ee7c..73b456c1 100755 --- a/examples/testcase/struct-field/imported/generated.go +++ b/examples/testcase/struct-field/imported/generated.go @@ -70,29 +70,29 @@ func (v Model) Float64Value() any { func (v Model) TimeValue() any { return v.Time } -func (v Model) ColumnStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("str", v.Str, convertSqlNullStringToValue) +func (v Model) ColumnStr() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("str", v.Str) } -func (v Model) ColumnBool() sequel.ColumnConvertClause[sql.NullBool] { - return sequel.Column("bool", v.Bool, convertSqlNullBoolToValue) +func (v Model) ColumnBool() sequel.ColumnClause[sql.NullBool] { + return sequel.ValueColumn("bool", v.Bool) } func (v Model) ColumnRawBytes() sequel.ColumnConvertClause[sql.RawBytes] { return sequel.Column("raw_bytes", v.RawBytes, convertSqlRawBytesToValue) } -func (v Model) ColumnInt16() sequel.ColumnConvertClause[sql.NullInt16] { - return sequel.Column("int_16", v.Int16, convertSqlNullInt16ToValue) +func (v Model) ColumnInt16() sequel.ColumnClause[sql.NullInt16] { + return sequel.ValueColumn("int_16", v.Int16) } -func (v Model) ColumnInt32() sequel.ColumnConvertClause[sql.NullInt32] { - return sequel.Column("int_32", v.Int32, convertSqlNullInt32ToValue) +func (v Model) ColumnInt32() sequel.ColumnClause[sql.NullInt32] { + return sequel.ValueColumn("int_32", v.Int32) } -func (v Model) ColumnInt64() sequel.ColumnConvertClause[sql.NullInt64] { - return sequel.Column("int_64", v.Int64, convertSqlNullInt64ToValue) +func (v Model) ColumnInt64() sequel.ColumnClause[sql.NullInt64] { + return sequel.ValueColumn("int_64", v.Int64) } -func (v Model) ColumnFloat64() sequel.ColumnConvertClause[sql.NullFloat64] { - return sequel.Column("float_64", v.Float64, convertSqlNullFloat64ToValue) +func (v Model) ColumnFloat64() sequel.ColumnClause[sql.NullFloat64] { + return sequel.ValueColumn("float_64", v.Float64) } -func (v Model) ColumnTime() sequel.ColumnConvertClause[sql.NullTime] { - return sequel.Column("time", v.Time, convertSqlNullTimeToValue) +func (v Model) ColumnTime() sequel.ColumnClause[sql.NullTime] { + return sequel.ValueColumn("time", v.Time) } func (Some) TableName() string { @@ -120,34 +120,10 @@ func (v Some) InsertOneStmt() (string, []any) { func (v Some) IDValue() any { return v.ID } -func (v Some) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) +func (v Some) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } -func convertUuidUuidToValue(val uuid.UUID) any { - return val -} func convertSqlRawBytesToValue(val sql.RawBytes) any { return val } -func convertSqlNullTimeToValue(val sql.NullTime) any { - return val -} -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} -func convertSqlNullInt64ToValue(val sql.NullInt64) any { - return val -} -func convertSqlNullInt32ToValue(val sql.NullInt32) any { - return val -} -func convertSqlNullInt16ToValue(val sql.NullInt16) any { - return val -} -func convertSqlNullFloat64ToValue(val sql.NullFloat64) any { - return val -} -func convertSqlNullBoolToValue(val sql.NullBool) any { - return val -} diff --git a/examples/testcase/struct-field/imported/generated.go.tpl b/examples/testcase/struct-field/imported/generated.go.tpl index b590ee7c..73b456c1 100644 --- a/examples/testcase/struct-field/imported/generated.go.tpl +++ b/examples/testcase/struct-field/imported/generated.go.tpl @@ -70,29 +70,29 @@ func (v Model) Float64Value() any { func (v Model) TimeValue() any { return v.Time } -func (v Model) ColumnStr() sequel.ColumnConvertClause[sql.NullString] { - return sequel.Column("str", v.Str, convertSqlNullStringToValue) +func (v Model) ColumnStr() sequel.ColumnClause[sql.NullString] { + return sequel.ValueColumn("str", v.Str) } -func (v Model) ColumnBool() sequel.ColumnConvertClause[sql.NullBool] { - return sequel.Column("bool", v.Bool, convertSqlNullBoolToValue) +func (v Model) ColumnBool() sequel.ColumnClause[sql.NullBool] { + return sequel.ValueColumn("bool", v.Bool) } func (v Model) ColumnRawBytes() sequel.ColumnConvertClause[sql.RawBytes] { return sequel.Column("raw_bytes", v.RawBytes, convertSqlRawBytesToValue) } -func (v Model) ColumnInt16() sequel.ColumnConvertClause[sql.NullInt16] { - return sequel.Column("int_16", v.Int16, convertSqlNullInt16ToValue) +func (v Model) ColumnInt16() sequel.ColumnClause[sql.NullInt16] { + return sequel.ValueColumn("int_16", v.Int16) } -func (v Model) ColumnInt32() sequel.ColumnConvertClause[sql.NullInt32] { - return sequel.Column("int_32", v.Int32, convertSqlNullInt32ToValue) +func (v Model) ColumnInt32() sequel.ColumnClause[sql.NullInt32] { + return sequel.ValueColumn("int_32", v.Int32) } -func (v Model) ColumnInt64() sequel.ColumnConvertClause[sql.NullInt64] { - return sequel.Column("int_64", v.Int64, convertSqlNullInt64ToValue) +func (v Model) ColumnInt64() sequel.ColumnClause[sql.NullInt64] { + return sequel.ValueColumn("int_64", v.Int64) } -func (v Model) ColumnFloat64() sequel.ColumnConvertClause[sql.NullFloat64] { - return sequel.Column("float_64", v.Float64, convertSqlNullFloat64ToValue) +func (v Model) ColumnFloat64() sequel.ColumnClause[sql.NullFloat64] { + return sequel.ValueColumn("float_64", v.Float64) } -func (v Model) ColumnTime() sequel.ColumnConvertClause[sql.NullTime] { - return sequel.Column("time", v.Time, convertSqlNullTimeToValue) +func (v Model) ColumnTime() sequel.ColumnClause[sql.NullTime] { + return sequel.ValueColumn("time", v.Time) } func (Some) TableName() string { @@ -120,34 +120,10 @@ func (v Some) InsertOneStmt() (string, []any) { func (v Some) IDValue() any { return v.ID } -func (v Some) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) +func (v Some) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } -func convertUuidUuidToValue(val uuid.UUID) any { - return val -} func convertSqlRawBytesToValue(val sql.RawBytes) any { return val } -func convertSqlNullTimeToValue(val sql.NullTime) any { - return val -} -func convertSqlNullStringToValue(val sql.NullString) any { - return val -} -func convertSqlNullInt64ToValue(val sql.NullInt64) any { - return val -} -func convertSqlNullInt32ToValue(val sql.NullInt32) any { - return val -} -func convertSqlNullInt16ToValue(val sql.NullInt16) any { - return val -} -func convertSqlNullFloat64ToValue(val sql.NullFloat64) any { - return val -} -func convertSqlNullBoolToValue(val sql.NullBool) any { - return val -} diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go b/examples/testcase/struct-field/pk/auto-incr/generated.go index 17bad31a..a739592f 100755 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go @@ -75,7 +75,7 @@ func (v Model) ColumnID() sequel.ColumnConvertClause[uint] { return sequel.Column("id", v.ID, convertUintToValue) } func (v Model) ColumnN() sequel.ColumnClause[int64] { - return sequel.BasicColumn("n", v.N) + return sequel.PrimitiveColumn("n", v.N) } func convertUintToValue(val uint) any { diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl index 17bad31a..a739592f 100644 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl @@ -75,7 +75,7 @@ func (v Model) ColumnID() sequel.ColumnConvertClause[uint] { return sequel.Column("id", v.ID, convertUintToValue) } func (v Model) ColumnN() sequel.ColumnClause[int64] { - return sequel.BasicColumn("n", v.N) + return sequel.PrimitiveColumn("n", v.N) } func convertUintToValue(val uint) any { diff --git a/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl index 250d4dd5..4e9744d2 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl @@ -38,5 +38,5 @@ func (v Model) IDValue() any { return v.ID } func (v Model) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } diff --git a/examples/testcase/struct-field/pk/auto-incr/int64/generated.go b/examples/testcase/struct-field/pk/auto-incr/int64/generated.go index 250d4dd5..4e9744d2 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int64/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int64/generated.go @@ -38,5 +38,5 @@ func (v Model) IDValue() any { return v.ID } func (v Model) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } diff --git a/examples/testcase/struct-field/pk/composite/generated.go b/examples/testcase/struct-field/pk/composite/generated.go index f8a662ee..89a9a5b3 100755 --- a/examples/testcase/struct-field/pk/composite/generated.go +++ b/examples/testcase/struct-field/pk/composite/generated.go @@ -58,18 +58,14 @@ func (v Composite) Col3Value() any { return v.Col3 } func (v Composite) ColumnFlag() sequel.ColumnClause[bool] { - return sequel.BasicColumn("flag", v.Flag) + return sequel.PrimitiveColumn("flag", v.Flag) } func (v Composite) ColumnCol1() sequel.ColumnClause[string] { - return sequel.BasicColumn("col_1", v.Col1) + return sequel.PrimitiveColumn("col_1", v.Col1) } func (v Composite) ColumnCol2() sequel.ColumnClause[bool] { - return sequel.BasicColumn("col_2", v.Col2) + return sequel.PrimitiveColumn("col_2", v.Col2) } -func (v Composite) ColumnCol3() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("col_3", v.Col3, convertUuidUuidToValue) -} - -func convertUuidUuidToValue(val uuid.UUID) any { - return val +func (v Composite) ColumnCol3() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("col_3", v.Col3) } diff --git a/examples/testcase/struct-field/pk/composite/generated.go.tpl b/examples/testcase/struct-field/pk/composite/generated.go.tpl index f8a662ee..89a9a5b3 100644 --- a/examples/testcase/struct-field/pk/composite/generated.go.tpl +++ b/examples/testcase/struct-field/pk/composite/generated.go.tpl @@ -58,18 +58,14 @@ func (v Composite) Col3Value() any { return v.Col3 } func (v Composite) ColumnFlag() sequel.ColumnClause[bool] { - return sequel.BasicColumn("flag", v.Flag) + return sequel.PrimitiveColumn("flag", v.Flag) } func (v Composite) ColumnCol1() sequel.ColumnClause[string] { - return sequel.BasicColumn("col_1", v.Col1) + return sequel.PrimitiveColumn("col_1", v.Col1) } func (v Composite) ColumnCol2() sequel.ColumnClause[bool] { - return sequel.BasicColumn("col_2", v.Col2) + return sequel.PrimitiveColumn("col_2", v.Col2) } -func (v Composite) ColumnCol3() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("col_3", v.Col3, convertUuidUuidToValue) -} - -func convertUuidUuidToValue(val uuid.UUID) any { - return val +func (v Composite) ColumnCol3() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("col_3", v.Col3) } diff --git a/examples/testcase/struct-field/pk/generated.go b/examples/testcase/struct-field/pk/generated.go index aa802d60..1460e4b5 100755 --- a/examples/testcase/struct-field/pk/generated.go +++ b/examples/testcase/struct-field/pk/generated.go @@ -59,17 +59,17 @@ func (v Car) ColorValue() any { func (v Car) ManucDateValue() any { return v.ManucDate } -func (v Car) ColumnID() sequel.ColumnConvertClause[PK] { - return sequel.Column("id", v.ID, convertPkToValue) +func (v Car) ColumnID() sequel.ColumnClause[PK] { + return sequel.ValueColumn("id", v.ID) } func (v Car) ColumnNo() sequel.ColumnClause[string] { - return sequel.BasicColumn("no", v.No) + return sequel.PrimitiveColumn("no", v.No) } func (v Car) ColumnColor() sequel.ColumnConvertClause[Color] { return sequel.Column("color", v.Color, convertColorToValue) } func (v Car) ColumnManucDate() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("manuc_date", v.ManucDate) + return sequel.PrimitiveColumn("manuc_date", v.ManucDate) } func (House) TableName() string { @@ -116,7 +116,7 @@ func (v House) ColumnID() sequel.ColumnConvertClause[uint] { return sequel.Column("id", v.ID, convertUintToValue) } func (v House) ColumnNo() sequel.ColumnClause[string] { - return sequel.BasicColumn("no", v.No) + return sequel.PrimitiveColumn("no", v.No) } func (User) TableName() string { @@ -170,7 +170,7 @@ func (v User) EmailValue() any { return v.Email } func (v User) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v User) ColumnName() sequel.ColumnConvertClause[LongText] { return sequel.Column("name", v.Name, convertLongTextToValue) @@ -179,7 +179,7 @@ func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnEmail() sequel.ColumnClause[string] { - return sequel.BasicColumn("email", v.Email) + return sequel.PrimitiveColumn("email", v.Email) } func convertUintToValue(val uint) any { @@ -188,9 +188,6 @@ func convertUintToValue(val uint) any { func convertUint8ToValue(val uint8) any { return (int64)(val) } -func convertPkToValue(val PK) any { - return val -} func convertLongTextToValue(val LongText) any { return (string)(val) } diff --git a/examples/testcase/struct-field/pk/generated.go.tpl b/examples/testcase/struct-field/pk/generated.go.tpl index aa802d60..1460e4b5 100644 --- a/examples/testcase/struct-field/pk/generated.go.tpl +++ b/examples/testcase/struct-field/pk/generated.go.tpl @@ -59,17 +59,17 @@ func (v Car) ColorValue() any { func (v Car) ManucDateValue() any { return v.ManucDate } -func (v Car) ColumnID() sequel.ColumnConvertClause[PK] { - return sequel.Column("id", v.ID, convertPkToValue) +func (v Car) ColumnID() sequel.ColumnClause[PK] { + return sequel.ValueColumn("id", v.ID) } func (v Car) ColumnNo() sequel.ColumnClause[string] { - return sequel.BasicColumn("no", v.No) + return sequel.PrimitiveColumn("no", v.No) } func (v Car) ColumnColor() sequel.ColumnConvertClause[Color] { return sequel.Column("color", v.Color, convertColorToValue) } func (v Car) ColumnManucDate() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("manuc_date", v.ManucDate) + return sequel.PrimitiveColumn("manuc_date", v.ManucDate) } func (House) TableName() string { @@ -116,7 +116,7 @@ func (v House) ColumnID() sequel.ColumnConvertClause[uint] { return sequel.Column("id", v.ID, convertUintToValue) } func (v House) ColumnNo() sequel.ColumnClause[string] { - return sequel.BasicColumn("no", v.No) + return sequel.PrimitiveColumn("no", v.No) } func (User) TableName() string { @@ -170,7 +170,7 @@ func (v User) EmailValue() any { return v.Email } func (v User) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v User) ColumnName() sequel.ColumnConvertClause[LongText] { return sequel.Column("name", v.Name, convertLongTextToValue) @@ -179,7 +179,7 @@ func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnEmail() sequel.ColumnClause[string] { - return sequel.BasicColumn("email", v.Email) + return sequel.PrimitiveColumn("email", v.Email) } func convertUintToValue(val uint) any { @@ -188,9 +188,6 @@ func convertUintToValue(val uint) any { func convertUint8ToValue(val uint8) any { return (int64)(val) } -func convertPkToValue(val PK) any { - return val -} func convertLongTextToValue(val LongText) any { return (string)(val) } diff --git a/examples/testcase/struct-field/pk/uuid/generated.go b/examples/testcase/struct-field/pk/uuid/generated.go index 767af293..0a24e823 100755 --- a/examples/testcase/struct-field/pk/uuid/generated.go +++ b/examples/testcase/struct-field/pk/uuid/generated.go @@ -37,13 +37,9 @@ func (v User) IDValue() any { func (v User) NameValue() any { return v.Name } -func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) +func (v User) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } func (v User) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) -} - -func convertUuidUuidToValue(val uuid.UUID) any { - return val + return sequel.PrimitiveColumn("name", v.Name) } diff --git a/examples/testcase/struct-field/pk/uuid/generated.go.tpl b/examples/testcase/struct-field/pk/uuid/generated.go.tpl index 767af293..0a24e823 100644 --- a/examples/testcase/struct-field/pk/uuid/generated.go.tpl +++ b/examples/testcase/struct-field/pk/uuid/generated.go.tpl @@ -37,13 +37,9 @@ func (v User) IDValue() any { func (v User) NameValue() any { return v.Name } -func (v User) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) +func (v User) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } func (v User) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.Name) -} - -func convertUuidUuidToValue(val uuid.UUID) any { - return val + return sequel.PrimitiveColumn("name", v.Name) } diff --git a/examples/testcase/struct-field/pointer/generated.go b/examples/testcase/struct-field/pointer/generated.go index 5c71a93a..abf4375a 100755 --- a/examples/testcase/struct-field/pointer/generated.go +++ b/examples/testcase/struct-field/pointer/generated.go @@ -286,7 +286,7 @@ func (v Ptr) PtrStrValue() any { return nil } func (v Ptr) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v Ptr) ColumnStr() sequel.ColumnConvertClause[*string] { return sequel.Column("str", v.Str, convertPtrstringToValue) @@ -343,7 +343,7 @@ func (v Ptr) ColumnEmbeddedTime() sequel.ColumnConvertClause[*time.Time] { return sequel.Column("embedded_time", v.deepNested.embedded.EmbeddedTime, convertPtrtimeTimeToValue) } func (v Ptr) ColumnAnyTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("any_time", v.deepNested.embedded.AnyTime) + return sequel.PrimitiveColumn("any_time", v.deepNested.embedded.AnyTime) } func (v Ptr) ColumnPtrStr() sequel.ColumnConvertClause[*string] { return sequel.Column("ptr_str", v.deepNested.embedded.PtrStr, convertPtrstringToValue) diff --git a/examples/testcase/struct-field/pointer/generated.go.tpl b/examples/testcase/struct-field/pointer/generated.go.tpl index 5c71a93a..abf4375a 100644 --- a/examples/testcase/struct-field/pointer/generated.go.tpl +++ b/examples/testcase/struct-field/pointer/generated.go.tpl @@ -286,7 +286,7 @@ func (v Ptr) PtrStrValue() any { return nil } func (v Ptr) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v Ptr) ColumnStr() sequel.ColumnConvertClause[*string] { return sequel.Column("str", v.Str, convertPtrstringToValue) @@ -343,7 +343,7 @@ func (v Ptr) ColumnEmbeddedTime() sequel.ColumnConvertClause[*time.Time] { return sequel.Column("embedded_time", v.deepNested.embedded.EmbeddedTime, convertPtrtimeTimeToValue) } func (v Ptr) ColumnAnyTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("any_time", v.deepNested.embedded.AnyTime) + return sequel.PrimitiveColumn("any_time", v.deepNested.embedded.AnyTime) } func (v Ptr) ColumnPtrStr() sequel.ColumnConvertClause[*string] { return sequel.Column("ptr_str", v.deepNested.embedded.PtrStr, convertPtrstringToValue) diff --git a/examples/testcase/struct-field/primitive/generated.go b/examples/testcase/struct-field/primitive/generated.go index 47fb2581..d0864b0a 100755 --- a/examples/testcase/struct-field/primitive/generated.go +++ b/examples/testcase/struct-field/primitive/generated.go @@ -110,13 +110,13 @@ func (v Primitive) TimeValue() any { return v.Time } func (v Primitive) ColumnStr() sequel.ColumnClause[string] { - return sequel.BasicColumn("str", v.Str) + return sequel.PrimitiveColumn("str", v.Str) } func (v Primitive) ColumnBytes() sequel.ColumnConvertClause[[]byte] { return sequel.Column("bytes", v.Bytes, convertSlicebyteToValue) } func (v Primitive) ColumnBool() sequel.ColumnClause[bool] { - return sequel.BasicColumn("bool", v.Bool) + return sequel.PrimitiveColumn("bool", v.Bool) } func (v Primitive) ColumnInt() sequel.ColumnConvertClause[int] { return sequel.Column("int", v.Int, convertIntToValue) @@ -131,7 +131,7 @@ func (v Primitive) ColumnInt32() sequel.ColumnConvertClause[int32] { return sequel.Column("int_32", v.Int32, convertInt32ToValue) } func (v Primitive) ColumnInt64() sequel.ColumnClause[int64] { - return sequel.BasicColumn("int_64", v.Int64) + return sequel.PrimitiveColumn("int_64", v.Int64) } func (v Primitive) ColumnUint() sequel.ColumnConvertClause[uint] { return sequel.Column("uint", v.Uint, convertUintToValue) @@ -152,10 +152,10 @@ func (v Primitive) ColumnF32() sequel.ColumnConvertClause[float32] { return sequel.Column("f_32", v.F32, convertFloat32ToValue) } func (v Primitive) ColumnF64() sequel.ColumnClause[float64] { - return sequel.BasicColumn("f_64", v.F64) + return sequel.PrimitiveColumn("f_64", v.F64) } func (v Primitive) ColumnTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("time", v.Time) + return sequel.PrimitiveColumn("time", v.Time) } func convertUintToValue(val uint) any { diff --git a/examples/testcase/struct-field/primitive/generated.go.tpl b/examples/testcase/struct-field/primitive/generated.go.tpl index 47fb2581..d0864b0a 100644 --- a/examples/testcase/struct-field/primitive/generated.go.tpl +++ b/examples/testcase/struct-field/primitive/generated.go.tpl @@ -110,13 +110,13 @@ func (v Primitive) TimeValue() any { return v.Time } func (v Primitive) ColumnStr() sequel.ColumnClause[string] { - return sequel.BasicColumn("str", v.Str) + return sequel.PrimitiveColumn("str", v.Str) } func (v Primitive) ColumnBytes() sequel.ColumnConvertClause[[]byte] { return sequel.Column("bytes", v.Bytes, convertSlicebyteToValue) } func (v Primitive) ColumnBool() sequel.ColumnClause[bool] { - return sequel.BasicColumn("bool", v.Bool) + return sequel.PrimitiveColumn("bool", v.Bool) } func (v Primitive) ColumnInt() sequel.ColumnConvertClause[int] { return sequel.Column("int", v.Int, convertIntToValue) @@ -131,7 +131,7 @@ func (v Primitive) ColumnInt32() sequel.ColumnConvertClause[int32] { return sequel.Column("int_32", v.Int32, convertInt32ToValue) } func (v Primitive) ColumnInt64() sequel.ColumnClause[int64] { - return sequel.BasicColumn("int_64", v.Int64) + return sequel.PrimitiveColumn("int_64", v.Int64) } func (v Primitive) ColumnUint() sequel.ColumnConvertClause[uint] { return sequel.Column("uint", v.Uint, convertUintToValue) @@ -152,10 +152,10 @@ func (v Primitive) ColumnF32() sequel.ColumnConvertClause[float32] { return sequel.Column("f_32", v.F32, convertFloat32ToValue) } func (v Primitive) ColumnF64() sequel.ColumnClause[float64] { - return sequel.BasicColumn("f_64", v.F64) + return sequel.PrimitiveColumn("f_64", v.F64) } func (v Primitive) ColumnTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("time", v.Time) + return sequel.PrimitiveColumn("time", v.Time) } func convertUintToValue(val uint) any { diff --git a/examples/testcase/struct-field/readonly/generated.go b/examples/testcase/struct-field/readonly/generated.go index 7edfd849..56818b95 100755 --- a/examples/testcase/struct-field/readonly/generated.go +++ b/examples/testcase/struct-field/readonly/generated.go @@ -45,11 +45,11 @@ func (v Model) ReadOnlyValue() any { return v.ReadOnly } func (v Model) ColumnA() sequel.ColumnClause[string] { - return sequel.BasicColumn("a", v.A) + return sequel.PrimitiveColumn("a", v.A) } func (v Model) ColumnB() sequel.ColumnClause[bool] { - return sequel.BasicColumn("b", v.B) + return sequel.PrimitiveColumn("b", v.B) } func (v Model) ColumnReadOnly() sequel.ColumnClause[string] { - return sequel.BasicColumn("read_only", v.ReadOnly) + return sequel.PrimitiveColumn("read_only", v.ReadOnly) } diff --git a/examples/testcase/struct-field/readonly/generated.go.tpl b/examples/testcase/struct-field/readonly/generated.go.tpl index 7edfd849..56818b95 100644 --- a/examples/testcase/struct-field/readonly/generated.go.tpl +++ b/examples/testcase/struct-field/readonly/generated.go.tpl @@ -45,11 +45,11 @@ func (v Model) ReadOnlyValue() any { return v.ReadOnly } func (v Model) ColumnA() sequel.ColumnClause[string] { - return sequel.BasicColumn("a", v.A) + return sequel.PrimitiveColumn("a", v.A) } func (v Model) ColumnB() sequel.ColumnClause[bool] { - return sequel.BasicColumn("b", v.B) + return sequel.PrimitiveColumn("b", v.B) } func (v Model) ColumnReadOnly() sequel.ColumnClause[string] { - return sequel.BasicColumn("read_only", v.ReadOnly) + return sequel.PrimitiveColumn("read_only", v.ReadOnly) } diff --git a/examples/testcase/struct-field/size/generated.go b/examples/testcase/struct-field/size/generated.go index 2d6a673a..b3f5b038 100755 --- a/examples/testcase/struct-field/size/generated.go +++ b/examples/testcase/struct-field/size/generated.go @@ -44,11 +44,11 @@ func (v Size) TimeValue() any { return v.Time } func (v Size) ColumnStr() sequel.ColumnClause[string] { - return sequel.BasicColumn("str", v.Str) + return sequel.PrimitiveColumn("str", v.Str) } func (v Size) ColumnTimestamp() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("timestamp", v.Timestamp) + return sequel.PrimitiveColumn("timestamp", v.Timestamp) } func (v Size) ColumnTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("time", v.Time) + return sequel.PrimitiveColumn("time", v.Time) } diff --git a/examples/testcase/struct-field/size/generated.go.tpl b/examples/testcase/struct-field/size/generated.go.tpl index 2d6a673a..b3f5b038 100644 --- a/examples/testcase/struct-field/size/generated.go.tpl +++ b/examples/testcase/struct-field/size/generated.go.tpl @@ -44,11 +44,11 @@ func (v Size) TimeValue() any { return v.Time } func (v Size) ColumnStr() sequel.ColumnClause[string] { - return sequel.BasicColumn("str", v.Str) + return sequel.PrimitiveColumn("str", v.Str) } func (v Size) ColumnTimestamp() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("timestamp", v.Timestamp) + return sequel.PrimitiveColumn("timestamp", v.Timestamp) } func (v Size) ColumnTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("time", v.Time) + return sequel.PrimitiveColumn("time", v.Time) } diff --git a/examples/testcase/struct-field/sql/generated.go b/examples/testcase/struct-field/sql/generated.go index c9c810ed..7dc64d9c 100755 --- a/examples/testcase/struct-field/sql/generated.go +++ b/examples/testcase/struct-field/sql/generated.go @@ -165,13 +165,10 @@ func (v Location) ColumnID() sequel.ColumnConvertClause[uint64] { func (v Location) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } -func (v Location) ColumnUUID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("uuid", v.UUID, convertUuidUuidToValue) +func (v Location) ColumnUUID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("uuid", v.UUID) } -func convertUuidUuidToValue(val uuid.UUID) any { - return val -} func convertUint64ToValue(val uint64) any { return val } diff --git a/examples/testcase/struct-field/sql/generated.go.tpl b/examples/testcase/struct-field/sql/generated.go.tpl index c9c810ed..7dc64d9c 100644 --- a/examples/testcase/struct-field/sql/generated.go.tpl +++ b/examples/testcase/struct-field/sql/generated.go.tpl @@ -165,13 +165,10 @@ func (v Location) ColumnID() sequel.ColumnConvertClause[uint64] { func (v Location) ColumnGeoPoint() sequel.ColumnConvertClause[orb.Point] { return sequel.Column("geo_point", v.GeoPoint, convertOrbPointToValue) } -func (v Location) ColumnUUID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("uuid", v.UUID, convertUuidUuidToValue) +func (v Location) ColumnUUID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("uuid", v.UUID) } -func convertUuidUuidToValue(val uuid.UUID) any { - return val -} func convertUint64ToValue(val uint64) any { return val } diff --git a/examples/testcase/struct-field/unique/generated.go b/examples/testcase/struct-field/unique/generated.go index ff257753..70de0be6 100755 --- a/examples/testcase/struct-field/unique/generated.go +++ b/examples/testcase/struct-field/unique/generated.go @@ -48,16 +48,16 @@ func (v User) LastNameValue() any { return v.LastName } func (v User) ColumnEmail() sequel.ColumnClause[string] { - return sequel.BasicColumn("email", v.Email) + return sequel.PrimitiveColumn("email", v.Email) } func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnFirstName() sequel.ColumnClause[string] { - return sequel.BasicColumn("first_name", v.FirstName) + return sequel.PrimitiveColumn("first_name", v.FirstName) } func (v User) ColumnLastName() sequel.ColumnClause[string] { - return sequel.BasicColumn("last_name", v.LastName) + return sequel.PrimitiveColumn("last_name", v.LastName) } func convertUint8ToValue(val uint8) any { diff --git a/examples/testcase/struct-field/unique/generated.go.tpl b/examples/testcase/struct-field/unique/generated.go.tpl index ff257753..70de0be6 100644 --- a/examples/testcase/struct-field/unique/generated.go.tpl +++ b/examples/testcase/struct-field/unique/generated.go.tpl @@ -48,16 +48,16 @@ func (v User) LastNameValue() any { return v.LastName } func (v User) ColumnEmail() sequel.ColumnClause[string] { - return sequel.BasicColumn("email", v.Email) + return sequel.PrimitiveColumn("email", v.Email) } func (v User) ColumnAge() sequel.ColumnConvertClause[uint8] { return sequel.Column("age", v.Age, convertUint8ToValue) } func (v User) ColumnFirstName() sequel.ColumnClause[string] { - return sequel.BasicColumn("first_name", v.FirstName) + return sequel.PrimitiveColumn("first_name", v.FirstName) } func (v User) ColumnLastName() sequel.ColumnClause[string] { - return sequel.BasicColumn("last_name", v.LastName) + return sequel.PrimitiveColumn("last_name", v.LastName) } func convertUint8ToValue(val uint8) any { diff --git a/examples/testcase/struct-field/valuer/generated.go b/examples/testcase/struct-field/valuer/generated.go index a98fc4cb..6637560a 100755 --- a/examples/testcase/struct-field/valuer/generated.go +++ b/examples/testcase/struct-field/valuer/generated.go @@ -54,16 +54,16 @@ func (v B) NValue() any { return v.N } func (v B) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } -func (v B) ColumnValue() sequel.ColumnConvertClause[anyType] { - return sequel.Column("value", v.Value, convertAnyTypeToValue) +func (v B) ColumnValue() sequel.ColumnClause[anyType] { + return sequel.ValueColumn("value", v.Value) } func (v B) ColumnPtrValue() sequel.ColumnConvertClause[*anyType] { return sequel.Column("ptr_value", v.PtrValue, convertPtranyTypeToValue) } func (v B) ColumnN() sequel.ColumnClause[string] { - return sequel.BasicColumn("n", v.N) + return sequel.PrimitiveColumn("n", v.N) } func convertPtranyTypeToValue(val *anyType) any { @@ -72,6 +72,3 @@ func convertPtranyTypeToValue(val *anyType) any { } return nil } -func convertAnyTypeToValue(val anyType) any { - return val -} diff --git a/examples/testcase/struct-field/valuer/generated.go.tpl b/examples/testcase/struct-field/valuer/generated.go.tpl index a98fc4cb..6637560a 100644 --- a/examples/testcase/struct-field/valuer/generated.go.tpl +++ b/examples/testcase/struct-field/valuer/generated.go.tpl @@ -54,16 +54,16 @@ func (v B) NValue() any { return v.N } func (v B) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } -func (v B) ColumnValue() sequel.ColumnConvertClause[anyType] { - return sequel.Column("value", v.Value, convertAnyTypeToValue) +func (v B) ColumnValue() sequel.ColumnClause[anyType] { + return sequel.ValueColumn("value", v.Value) } func (v B) ColumnPtrValue() sequel.ColumnConvertClause[*anyType] { return sequel.Column("ptr_value", v.PtrValue, convertPtranyTypeToValue) } func (v B) ColumnN() sequel.ColumnClause[string] { - return sequel.BasicColumn("n", v.N) + return sequel.PrimitiveColumn("n", v.N) } func convertPtranyTypeToValue(val *anyType) any { @@ -72,6 +72,3 @@ func convertPtranyTypeToValue(val *anyType) any { } return nil } -func convertAnyTypeToValue(val anyType) any { - return val -} diff --git a/examples/testcase/struct-field/version/generated.go b/examples/testcase/struct-field/version/generated.go index a020eec9..18fb027d 100755 --- a/examples/testcase/struct-field/version/generated.go +++ b/examples/testcase/struct-field/version/generated.go @@ -39,10 +39,6 @@ func (v Version) FindOneByPKStmt() (string, []any) { func (v Version) IDValue() any { return v.ID } -func (v Version) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) -} - -func convertUuidUuidToValue(val uuid.UUID) any { - return val +func (v Version) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } diff --git a/examples/testcase/struct-field/version/generated.go.tpl b/examples/testcase/struct-field/version/generated.go.tpl index a020eec9..18fb027d 100644 --- a/examples/testcase/struct-field/version/generated.go.tpl +++ b/examples/testcase/struct-field/version/generated.go.tpl @@ -39,10 +39,6 @@ func (v Version) FindOneByPKStmt() (string, []any) { func (v Version) IDValue() any { return v.ID } -func (v Version) ColumnID() sequel.ColumnConvertClause[uuid.UUID] { - return sequel.Column("id", v.ID, convertUuidUuidToValue) -} - -func convertUuidUuidToValue(val uuid.UUID) any { - return val +func (v Version) ColumnID() sequel.ColumnClause[uuid.UUID] { + return sequel.ValueColumn("id", v.ID) } diff --git a/examples/testcase/struct/alias/generated.go b/examples/testcase/struct/alias/generated.go index 19fca721..f33222e7 100755 --- a/examples/testcase/struct/alias/generated.go +++ b/examples/testcase/struct/alias/generated.go @@ -73,10 +73,10 @@ func (v C) ValidValue() any { return v.Valid } func (v C) ColumnString() sequel.ColumnClause[string] { - return sequel.BasicColumn("string", v.String) + return sequel.PrimitiveColumn("string", v.String) } func (v C) ColumnValid() sequel.ColumnClause[bool] { - return sequel.BasicColumn("valid", v.Valid) + return sequel.PrimitiveColumn("valid", v.Valid) } func convertCivilTimeToValue(val civil.Time) any { diff --git a/examples/testcase/struct/alias/generated.go.tpl b/examples/testcase/struct/alias/generated.go.tpl index 19fca721..f33222e7 100644 --- a/examples/testcase/struct/alias/generated.go.tpl +++ b/examples/testcase/struct/alias/generated.go.tpl @@ -73,10 +73,10 @@ func (v C) ValidValue() any { return v.Valid } func (v C) ColumnString() sequel.ColumnClause[string] { - return sequel.BasicColumn("string", v.String) + return sequel.PrimitiveColumn("string", v.String) } func (v C) ColumnValid() sequel.ColumnClause[bool] { - return sequel.BasicColumn("valid", v.Valid) + return sequel.PrimitiveColumn("valid", v.Valid) } func convertCivilTimeToValue(val civil.Time) any { diff --git a/examples/testcase/struct/embedded/local/generated.go b/examples/testcase/struct/embedded/local/generated.go index e40b0724..592d91aa 100755 --- a/examples/testcase/struct/embedded/local/generated.go +++ b/examples/testcase/struct/embedded/local/generated.go @@ -54,17 +54,17 @@ func (v B) OKValue() any { return v.ts.OK } func (v B) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.a.ID) + return sequel.PrimitiveColumn("id", v.a.ID) } func (v B) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.a.Name) + return sequel.PrimitiveColumn("name", v.a.Name) } func (v B) ColumnZ() sequel.ColumnClause[bool] { - return sequel.BasicColumn("z", v.a.Z) + return sequel.PrimitiveColumn("z", v.a.Z) } func (v B) ColumnCreated() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("created", v.ts.Created) + return sequel.PrimitiveColumn("created", v.ts.Created) } func (v B) ColumnOK() sequel.ColumnClause[bool] { - return sequel.BasicColumn("ok", v.ts.OK) + return sequel.PrimitiveColumn("ok", v.ts.OK) } diff --git a/examples/testcase/struct/embedded/local/generated.go.tpl b/examples/testcase/struct/embedded/local/generated.go.tpl index e40b0724..592d91aa 100644 --- a/examples/testcase/struct/embedded/local/generated.go.tpl +++ b/examples/testcase/struct/embedded/local/generated.go.tpl @@ -54,17 +54,17 @@ func (v B) OKValue() any { return v.ts.OK } func (v B) ColumnID() sequel.ColumnClause[int64] { - return sequel.BasicColumn("id", v.a.ID) + return sequel.PrimitiveColumn("id", v.a.ID) } func (v B) ColumnName() sequel.ColumnClause[string] { - return sequel.BasicColumn("name", v.a.Name) + return sequel.PrimitiveColumn("name", v.a.Name) } func (v B) ColumnZ() sequel.ColumnClause[bool] { - return sequel.BasicColumn("z", v.a.Z) + return sequel.PrimitiveColumn("z", v.a.Z) } func (v B) ColumnCreated() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("created", v.ts.Created) + return sequel.PrimitiveColumn("created", v.ts.Created) } func (v B) ColumnOK() sequel.ColumnClause[bool] { - return sequel.BasicColumn("ok", v.ts.OK) + return sequel.PrimitiveColumn("ok", v.ts.OK) } diff --git a/examples/testcase/struct/readonly/generated.go b/examples/testcase/struct/readonly/generated.go index 89695aa2..e7373893 100755 --- a/examples/testcase/struct/readonly/generated.go +++ b/examples/testcase/struct/readonly/generated.go @@ -20,11 +20,11 @@ func (v *Model) Addrs() []any { } } func (v Model) ColumnA() sequel.ColumnClause[string] { - return sequel.BasicColumn("a", v.A) + return sequel.PrimitiveColumn("a", v.A) } func (v Model) ColumnB() sequel.ColumnClause[bool] { - return sequel.BasicColumn("b", v.B) + return sequel.PrimitiveColumn("b", v.B) } func (v Model) ColumnReadOnly() sequel.ColumnClause[string] { - return sequel.BasicColumn("read_only", v.ReadOnly) + return sequel.PrimitiveColumn("read_only", v.ReadOnly) } diff --git a/examples/testcase/struct/readonly/generated.go.tpl b/examples/testcase/struct/readonly/generated.go.tpl index 89695aa2..e7373893 100644 --- a/examples/testcase/struct/readonly/generated.go.tpl +++ b/examples/testcase/struct/readonly/generated.go.tpl @@ -20,11 +20,11 @@ func (v *Model) Addrs() []any { } } func (v Model) ColumnA() sequel.ColumnClause[string] { - return sequel.BasicColumn("a", v.A) + return sequel.PrimitiveColumn("a", v.A) } func (v Model) ColumnB() sequel.ColumnClause[bool] { - return sequel.BasicColumn("b", v.B) + return sequel.PrimitiveColumn("b", v.B) } func (v Model) ColumnReadOnly() sequel.ColumnClause[string] { - return sequel.BasicColumn("read_only", v.ReadOnly) + return sequel.PrimitiveColumn("read_only", v.ReadOnly) } diff --git a/examples/testcase/struct/tag/generated.go b/examples/testcase/struct/tag/generated.go index 5f028169..5db3960a 100755 --- a/examples/testcase/struct/tag/generated.go +++ b/examples/testcase/struct/tag/generated.go @@ -30,15 +30,11 @@ func (v A) FindOneByPKStmt() (string, []any) { return "SELECT `id`,`time`,`dec` FROM `a` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v A) ColumnID() sequel.ColumnClause[string] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v A) ColumnTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("time", v.Time) + return sequel.PrimitiveColumn("time", v.Time) } -func (v A) ColumnDec() sequel.ColumnConvertClause[decimal.Decimal] { - return sequel.Column("dec", v.Dec, convertDecimalDecimalToValue) -} - -func convertDecimalDecimalToValue(val decimal.Decimal) any { - return val +func (v A) ColumnDec() sequel.ColumnClause[decimal.Decimal] { + return sequel.ValueColumn("dec", v.Dec) } diff --git a/examples/testcase/struct/tag/generated.go.tpl b/examples/testcase/struct/tag/generated.go.tpl index 5f028169..5db3960a 100644 --- a/examples/testcase/struct/tag/generated.go.tpl +++ b/examples/testcase/struct/tag/generated.go.tpl @@ -30,15 +30,11 @@ func (v A) FindOneByPKStmt() (string, []any) { return "SELECT `id`,`time`,`dec` FROM `a` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v A) ColumnID() sequel.ColumnClause[string] { - return sequel.BasicColumn("id", v.ID) + return sequel.PrimitiveColumn("id", v.ID) } func (v A) ColumnTime() sequel.ColumnClause[time.Time] { - return sequel.BasicColumn("time", v.Time) + return sequel.PrimitiveColumn("time", v.Time) } -func (v A) ColumnDec() sequel.ColumnConvertClause[decimal.Decimal] { - return sequel.Column("dec", v.Dec, convertDecimalDecimalToValue) -} - -func convertDecimalDecimalToValue(val decimal.Decimal) any { - return val +func (v A) ColumnDec() sequel.ColumnClause[decimal.Decimal] { + return sequel.ValueColumn("dec", v.Dec) } diff --git a/sequel/clause.go b/sequel/column.go similarity index 67% rename from sequel/clause.go rename to sequel/column.go index 7f923060..03dc506f 100644 --- a/sequel/clause.go +++ b/sequel/column.go @@ -1,23 +1,31 @@ package sequel import ( + "database/sql/driver" "time" ) -type BasicTypes interface { +type PrimitiveTypes interface { string | bool | int64 | float64 | []byte | time.Time } func Column[T any](columnName string, value T, convert ConvertFunc[T]) ColumnConvertClause[T] { - return column[T]{ + return &column[T]{ name: columnName, value: value, convert: convert, } } -func BasicColumn[T BasicTypes](columnName string, value T) ColumnClause[T] { - return basicColumn[T]{ +func PrimitiveColumn[T PrimitiveTypes](columnName string, value T) ColumnClause[T] { + return &primitiveColumn[T]{ + name: columnName, + value: value, + } +} + +func ValueColumn[T driver.Valuer](columnName string, value T) ColumnClause[T] { + return &primitiveColumn[T]{ name: columnName, value: value, } @@ -29,26 +37,26 @@ func SQLColumn[T any](columnName string, value T, sqlValue QueryFunc, convert Co c.value = value c.convert = convert c.sqlValuer = sqlValue - return c + return &c } func OrderByColumn(columnName string, asc bool) OrderByClause { - return orderByColumn{ + return &orderByColumn{ column: columnName, asc: asc, } } -type basicColumn[T BasicTypes] struct { +type primitiveColumn[T any] struct { name string value T } -func (c basicColumn[T]) ColumnName() string { +func (c primitiveColumn[T]) ColumnName() string { return c.name } -func (c basicColumn[T]) Value() T { +func (c primitiveColumn[T]) Value() T { return c.value } @@ -62,7 +70,7 @@ func (c column[T]) ColumnName() string { return c.name } -func (c column[T]) Convert(v T) any { +func (c *column[T]) Convert(v T) any { return c.convert(v) } @@ -75,7 +83,7 @@ type sqlColumn[T any] struct { sqlValuer QueryFunc } -func (c sqlColumn[T]) SQLColumn(placeholder string) string { +func (c *sqlColumn[T]) SQLColumn(placeholder string) string { return c.sqlValuer(placeholder) } diff --git a/sequel/clause_test.go b/sequel/column_test.go similarity index 87% rename from sequel/clause_test.go rename to sequel/column_test.go index 101041fe..717d641c 100644 --- a/sequel/clause_test.go +++ b/sequel/column_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" ) -func TestClause(t *testing.T) { +func TestColumn(t *testing.T) { type Str string var ( @@ -24,8 +24,8 @@ func TestClause(t *testing.T) { require.Equal(t, text, cv.Convert(Str(text))) }) - t.Run("BasicColumn", func(t *testing.T) { - bc := BasicColumn(columnName, text) + t.Run("PrimitiveColumn", func(t *testing.T) { + bc := PrimitiveColumn(columnName, text) require.Equal(t, columnName, bc.ColumnName()) require.Equal(t, text, bc.Value()) }) From 4b09121b30d1d38d6e0d8f14a87be702dc09abcd Mon Sep 17 00:00:00 2001 From: si3nloong Date: Thu, 23 Apr 2026 01:25:41 +0800 Subject: [PATCH 22/56] chore: remove go 1.24 --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 857fa1fa..10e47e76 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest] # os: [ubuntu-latest] - go: ["1.24", "1.25", "1.26"] + go: ["1.25", "1.26"] runs-on: ${{ matrix.os }} continue-on-error: false steps: From da2f2937424bbc5e736d189a760bf497a5b77a05 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Fri, 24 Apr 2026 00:59:46 +0800 Subject: [PATCH 23/56] fix: gh actions in windows machine --- .github/workflows/test.yml | 4 +++- cmd/sqlgen/codegen/codegen.go | 6 ++---- cmd/sqlgen/init.go | 2 ++ sequel/sqltype/float_slice.go | 13 ++++++------- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 10e47e76..740fae55 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,9 @@ jobs: - name: Test run: | go test ./examples/testdata_test.go - go test -race -coverprofile=coverage.txt -covermode=atomic ./... + # Quote native command args with "=" so PowerShell on Windows + # does not split `coverage.txt` into a separate `.txt` token. + go test -race '-coverprofile=coverage.txt' '-covermode=atomic' ./... - name: Codecov uses: codecov/codecov-action@v6 diff --git a/cmd/sqlgen/codegen/codegen.go b/cmd/sqlgen/codegen/codegen.go index d337e524..9985ddb7 100644 --- a/cmd/sqlgen/codegen/codegen.go +++ b/cmd/sqlgen/codegen/codegen.go @@ -14,8 +14,6 @@ import ( "strings" "syscall" - "github.com/Masterminds/semver/v3" - "github.com/go-playground/validator/v10" "github.com/samber/lo" "github.com/si3nloong/sqlgen/cmd/sqlgen/codegen/dialect" @@ -34,8 +32,8 @@ var ( `\`, `[\\/]`, `/`, `[\\/]`, ) - nameRegex = regexp.MustCompile(`(?i)^[a-z]+[a-z0-9\_]*$`) - go121 = lo.Must1(semver.NewConstraint(">= 1.2.1")) + // nameRegex = regexp.MustCompile(`(?i)^[a-z]+[a-z0-9\_]*$`) + // go121 = lo.Must1(semver.NewConstraint(">= 1.2.1")) // goTagRegexp = regexp.MustCompile(`(?i)^([a-z][a-z_]*[a-z])(\:(\w+))?$`) // sqlFuncRegexp = regexp.MustCompile(`(?i)\s*(\w+\()(\w+\s*\,\s*)?(\{\})(\s*\,\s*\w+)?(\))\s*`) ) diff --git a/cmd/sqlgen/init.go b/cmd/sqlgen/init.go index 8adc6651..0c773061 100644 --- a/cmd/sqlgen/init.go +++ b/cmd/sqlgen/init.go @@ -107,6 +107,8 @@ func runInitCommand(cmd *cobra.Command, args []string) error { cfg.NamingConvention = codegen.PascalCase case string(codegen.CamelCase): cfg.NamingConvention = codegen.CamelCase + default: + cfg.NamingConvention = codegen.SnakeCase // default to snake_case } cfg.Tag = answer.Tag cfg.Strict = &answer.Strict diff --git a/sequel/sqltype/float_slice.go b/sequel/sqltype/float_slice.go index 24e70acb..bbc82ee0 100644 --- a/sequel/sqltype/float_slice.go +++ b/sequel/sqltype/float_slice.go @@ -37,11 +37,11 @@ func (a Float32Slice[T]) Value() (driver.Value, error) { // Scan implements the sql.Scanner interface. func (a *Float32Slice[T]) Scan(src interface{}) error { - switch src := src.(type) { + switch v := src.(type) { case []byte: - return a.scanBytes(src) + return a.scanBytes(v) case string: - return a.scanBytes([]byte(src)) + return a.scanBytes([]byte(v)) case nil: *a = nil return nil @@ -99,16 +99,15 @@ func (a Float64Slice[T]) Value() (driver.Value, error) { // Scan implements the sql.Scanner interface. func (a *Float64Slice[T]) Scan(src interface{}) error { - switch src := src.(type) { + switch v := src.(type) { case []byte: - return a.scanBytes(src) + return a.scanBytes(v) case string: - return a.scanBytes([]byte(src)) + return a.scanBytes([]byte(v)) case nil: *a = nil return nil } - return fmt.Errorf("sqltype: cannot convert %T to Float64Slice", src) } From 6be826e481b145af095cc8ce81b3c63e22171081 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Tue, 28 Apr 2026 21:19:49 +0800 Subject: [PATCH 24/56] feat: support Go enum --- cmd/sqlgen/codegen/codegen.go | 6 +- cmd/sqlgen/codegen/generate.go | 57 ++++++++++++++--- cmd/sqlgen/compiler/compiler.go | 15 ++--- cmd/sqlgen/compiler/go_ast.go | 56 +++++++++++++++-- cmd/sqlgen/compiler/parser.go | 61 +++++++++++++------ examples/testcase/struct-field/enum/file2.go | 9 +++ .../testcase/struct-field/enum/generated.go | 46 +++++++++++--- .../struct-field/enum/generated.go.tpl | 46 +++++++++++--- examples/testcase/struct-field/enum/model.go | 7 ++- 9 files changed, 245 insertions(+), 58 deletions(-) create mode 100644 examples/testcase/struct-field/enum/file2.go diff --git a/cmd/sqlgen/codegen/codegen.go b/cmd/sqlgen/codegen/codegen.go index 9985ddb7..f0765068 100644 --- a/cmd/sqlgen/codegen/codegen.go +++ b/cmd/sqlgen/codegen/codegen.go @@ -180,6 +180,7 @@ func Generate(c *Config) error { // Resolve every source provided for len(sources) > 0 { srcDir = strings.TrimSpace(sources[0]) + sources = sources[1:] if srcDir == "" { return fmt.Errorf("sqlgen: source directory %q is empty path", srcDir) } @@ -240,7 +241,7 @@ func Generate(c *Config) error { fi, err := os.Stat(srcDir) // If the file or folder not exists, we skip! if os.IsNotExist(err) { - goto nextSrc + continue } else if err != nil { return err } @@ -261,9 +262,6 @@ func Generate(c *Config) error { if err := parseGoPackage(generator, rootDir, dirs, matcher); err != nil { return err } - - nextSrc: - sources = sources[1:] } if cfg.Database != nil { diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index e223def5..404ffd7a 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -325,6 +325,18 @@ loop: if !t.Readonly { for _, f := range t.Columns { fprintfln(w, "func (v %s) %s any {", t.GoName, valueFunc(f)) + if defaultValue, ok := f.DefaultValue(); ok { + switch defaultValue.Kind() { + case compiler.KindInt: + fprintfln(w, "if v.%s == 0 {", f.GoName()) + fprintfln(w, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w, "}") + case compiler.KindString: + fprintfln(w, `if v.%s == "" {`, f.GoName()) + fprintfln(w, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w, "}") + } + } queue := []string{} // Find all the possible pointer paths for _, paths := range f.GoPtrPaths() { @@ -398,11 +410,36 @@ loop: fprintfln(w2, `func %s(val %s) any {`, funcName, typeStr) if f.IsGoPtr() { fprintfln(w2, "if val != nil {") + if defaultValue, ok := f.DefaultValue(); ok { + switch defaultValue.Kind() { + case compiler.KindInt: + fprintfln(w2, "if *val == 0 {") + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w2, "}") + case compiler.KindString: + fprintfln(w2, `if *val == "" {`) + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w2, "}") + } + } // Deference the pointer value and return it fprintfln(w2, "return %s", g.valuer(importPkgs, "*val", assertAsPtr[types.Pointer](f.GoType()).Elem())) fprintfln(w2, "}") fprintfln(w2, "return nil") } else { + if defaultValue, ok := f.DefaultValue(); ok { + switch defaultValue.Kind() { + case compiler.KindInt: + fprintfln(w2, "if val == 0 {") + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w2, "}") + case compiler.KindString: + fprintfln(w2, `if val == "" {`) + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w2, "}") + } + } + fprintfln(w2, "return %s", g.valuer(importPkgs, "val", f.GoType())) } fprintfln(w2, "}") @@ -564,6 +601,10 @@ func (g *Generator) buildValuer(w io.Writer, importPkgs *Package, t *compiler.Ta fprintfln(w, "return []any{") tmpl := "%s, // %" + stfwidth(n) + "d - %s" for _, f := range t.Columns { + if _, ok := f.DefaultValue(); ok { + fprintfln(w, tmpl, fmt.Sprintf("v.%sValue()", f.GoName()), f.Pos(), f.Name()) + continue + } fprintfln(w, tmpl, g.getOrValue(importPkgs, "v", f), f.Pos(), f.Name()) } fprintfln(w, "}") @@ -629,30 +670,30 @@ func (g *Generator) buildFindByPK(w io.Writer, importPkgs *Package, t *compiler. defer w2.Reset() switch v := pk.(type) { case *compiler.AutoIncrPrimaryKey: - fmt.Fprint(w1, g.MustQuoteIdentifier(v.Name())+" = "+g.dialect.QuoteVar(1)) + fmt.Fprintf(w1, "%s = %s", g.MustQuoteIdentifier(v.Name()), g.dialect.QuoteVar(1)) fmt.Fprint(w2, g.valuer(importPkgs, "v."+v.GoPath(), v.GoType())) case *compiler.PrimaryKey: - fmt.Fprint(w1, g.MustQuoteIdentifier(v.Name())+" = "+g.dialect.QuoteVar(1)) + fmt.Fprintf(w1, "%s = %s", g.MustQuoteIdentifier(v.Name()), g.dialect.QuoteVar(1)) fmt.Fprint(w2, g.valuer(importPkgs, "v."+v.GoPath(), v.GoType())) case *compiler.CompositePrimaryKey: if n := len(v.Columns); n > 0 { w3 := strpool.AcquireString() column := v.Columns[0] - fmt.Fprint(w1, "("+g.MustQuoteIdentifier(column.Name())) + fmt.Fprintf(w1, "(%s", g.MustQuoteIdentifier(column.Name())) fmt.Fprint(w2, g.valuer(importPkgs, "v."+column.GoPath(), column.GoType())) fmt.Fprint(w3, g.dialect.QuoteVar(1)) for i := 1; i < n; i++ { column = v.Columns[i] - fmt.Fprint(w1, ","+g.MustQuoteIdentifier(column.Name())) - fmt.Fprint(w2, ","+g.valuer(importPkgs, "v."+column.GoPath(), column.GoType())) - fmt.Fprint(w3, ","+g.dialect.QuoteVar(i+1)) + fmt.Fprintf(w1, ",%s", g.MustQuoteIdentifier(column.Name())) + fmt.Fprintf(w2, ",%s", g.valuer(importPkgs, "v."+column.GoPath(), column.GoType())) + fmt.Fprintf(w3, ",%s", g.dialect.QuoteVar(i+1)) } fmt.Fprintf(w1, ") = (%s)", w3) strpool.ReleaseString(w3) } } fmt.Fprintf(w1, " LIMIT 1;%c", g.quoteRune) - fprintfln(w, "func (v "+t.GoName+") FindOneByPKStmt() (string, []any) {") + fprintfln(w, "func (v %s) FindOneByPKStmt() (string, []any) {", t.GoName) fprintfln(w, "return %s, []any{%s}", w1, w2) fprintfln(w, "}") return nil @@ -972,7 +1013,7 @@ func methodName(i *types.Interface) string { } func valueFunc(f compiler.Column) string { - return f.GoName() + "Value()" + return fmt.Sprintf("%sValue()", f.GoName()) } func stfwidth(n int) string { diff --git a/cmd/sqlgen/compiler/compiler.go b/cmd/sqlgen/compiler/compiler.go index 65180bf9..09d0a558 100644 --- a/cmd/sqlgen/compiler/compiler.go +++ b/cmd/sqlgen/compiler/compiler.go @@ -241,13 +241,14 @@ type structCache struct { } type structField struct { - name string - t types.Type - index []int - exported bool - embedded bool - parent *structField - tag reflect.StructTag + name string + t types.Type + index []int + exported bool + embedded bool + defaultValue types.Object + parent *structField + tag reflect.StructTag } type typeQueue struct { diff --git a/cmd/sqlgen/compiler/go_ast.go b/cmd/sqlgen/compiler/go_ast.go index ad547074..189b9c11 100644 --- a/cmd/sqlgen/compiler/go_ast.go +++ b/cmd/sqlgen/compiler/go_ast.go @@ -1,6 +1,7 @@ package compiler import ( + "go/constant" "go/types" "strings" ) @@ -17,11 +18,27 @@ type GoDecl interface { GoPtrPaths() [][]GoDecl } +type Kind int + +const ( + KindUnknown Kind = iota + KindInt + KindString + KindSQL +) + +type Value interface { + Name() string + Kind() Kind + Value() string +} + type Column interface { GoDecl IsUnderlyingPtr() bool Pos() int Name() string + DefaultValue() (Value, bool) columnType() } @@ -104,9 +121,10 @@ func mapToGoInfo(s *structField) *goInfo { type BasicColumn struct { *goInfo - Readonly bool - name string - pos int + Readonly bool + name string + defaultValue types.Object + pos int } func (c BasicColumn) GoSize() (int64, bool) { @@ -117,7 +135,22 @@ func (c BasicColumn) GoSize() (int64, bool) { } func (c BasicColumn) Name() string { return c.name } func (c BasicColumn) Pos() int { return c.pos } -func (BasicColumn) columnType() {} +func (c BasicColumn) DefaultValue() (Value, bool) { + if c.defaultValue == nil { + return nil, false + } + switch v := c.defaultValue.(type) { + case *types.Const: + switch v.Val().Kind() { + case constant.Int: + return constantValue{name: v.Name(), kind: KindInt, value: v.Val().String()}, true + case constant.String: + return constantValue{name: v.Name(), kind: KindString, value: v.Val().String()}, true + } + } + return nil, true +} +func (BasicColumn) columnType() {} type GeneratedColumn struct { *goInfo @@ -127,4 +160,17 @@ type GeneratedColumn struct { func (c GeneratedColumn) Name() string { return c.name } func (c GeneratedColumn) Pos() int { return c.pos } -func (GeneratedColumn) columnType() {} +func (c GeneratedColumn) DefaultValue() (Value, bool) { + return nil, false +} +func (GeneratedColumn) columnType() {} + +type constantValue struct { + name string + kind Kind + value string +} + +func (v constantValue) Name() string { return v.name } +func (v constantValue) Kind() Kind { return v.kind } +func (v constantValue) Value() string { return v.value } diff --git a/cmd/sqlgen/compiler/parser.go b/cmd/sqlgen/compiler/parser.go index 963521eb..8cbdc8c0 100644 --- a/cmd/sqlgen/compiler/parser.go +++ b/cmd/sqlgen/compiler/parser.go @@ -6,7 +6,6 @@ import ( "go/token" "go/types" "iter" - "log" "reflect" "regexp" "sort" @@ -672,7 +671,7 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err t := obj.Decl.(*ast.TypeSpec) switch t.Type.(type) { case *ast.StructType: - ft := &structField{ + field := &structField{ name: types.ExprString(vi), t: f.pkg.TypesInfo.TypeOf(fi.Type), index: append(f.idx, i), @@ -682,11 +681,11 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err parent: f.prev, tag: tag, } - structFields = append(structFields, ft) + structFields = append(structFields, field) q = append(q, typeQueue{ idx: append(f.idx, i), - prev: ft, + prev: field, t: t.Type.(*ast.StructType), pkg: f.pkg, }) @@ -746,6 +745,12 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err } } + field := &structField{ + t: f.pkg.TypesInfo.TypeOf(fi.Type), + parent: f.prev, + tag: tag, + } + // Every struct field switch fv := fi.Type.(type) { // Imported types @@ -754,7 +759,7 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err // we will inspect it importPkg, ok := f.pkg.Imports[types.ExprString(fv.X)] if ok { - log.Println(importPkg) + _ = importPkg // for _, file := range importPkg.Syntax { // ast.Inspect(file, func(n ast.Node) bool { // mapEnumIfExists(importPkg, n, enumMap) @@ -766,19 +771,40 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err // Local types case *ast.Ident: if fv.Obj != nil { + scope := pkg.Types.Scope() + constants := make([]*types.Const, 0, len(scope.Names())) + + // 1. Collect all constants of the custom type + for _, name := range scope.Names() { + obj := scope.Lookup(name) + if constant, ok := obj.(*types.Const); ok { + if named, ok := constant.Type().(*types.Named); ok && named.Obj().Name() == fv.Name { + constants = append(constants, constant) + } + } + } + + if len(constants) > 0 { + // 2. Sort by the global FileSet position + // This automatically handles file order (alphabetical) and line order. + sort.Slice(constants, func(i, j int) bool { + return constants[i].Pos() < constants[j].Pos() + }) + field.defaultValue = constants[0] + } } + + case *ast.StarExpr: + // If it's a pointer, we need to get the underlying type } for j, n := range fi.Names { - structFields = append(structFields, &structField{ - name: types.ExprString(n), - t: f.pkg.TypesInfo.TypeOf(fi.Type), - index: append(f.idx, i+j), - exported: n.IsExported(), - parent: f.prev, - tag: tag, - }) + field.name = types.ExprString(n) + field.index = append(f.idx, i+j) + field.exported = n.IsExported() + + structFields = append(structFields, field) } } } @@ -907,10 +933,11 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err tag := parseTag(tagPaths) column := &BasicColumn{ - goInfo: columnMap[f], - Readonly: tag.hasOpts(TagOptionReadonly), - name: name, - pos: pos, + goInfo: columnMap[f], + Readonly: tag.hasOpts(TagOptionReadonly), + defaultValue: f.defaultValue, + name: name, + pos: pos, } if tag.hasOpts(TagOptionAutoIncrement, TagOptionPK, TagOptionPKAlias) { diff --git a/examples/testcase/struct-field/enum/file2.go b/examples/testcase/struct-field/enum/file2.go new file mode 100644 index 00000000..39a45f53 --- /dev/null +++ b/examples/testcase/struct-field/enum/file2.go @@ -0,0 +1,9 @@ +package enum + +const ( + otherStr2 longText = "very very very long text (2)" + otherStr3 longText = "very very very long text (3)" + otherStr4 longText = "very very very long text (4)" + otherStr5 longText = "very very very long text (5)" + otherStr6 longText = "very very very long text (6)" +) diff --git a/examples/testcase/struct-field/enum/generated.go b/examples/testcase/struct-field/enum/generated.go index bcca4d07..3caba7a0 100755 --- a/examples/testcase/struct-field/enum/generated.go +++ b/examples/testcase/struct-field/enum/generated.go @@ -11,34 +11,51 @@ func (Custom) TableName() string { return "custom" } func (Custom) Columns() []string { - return []string{"text", "e", "num"} // 3 + return []string{"text", "e", "ptr_str", "num"} // 4 } func (v Custom) Values() []any { return []any{ - (string)(v.Str), // 0 - text - (int64)(v.Enum), // 1 - e - (int64)(v.Num), // 2 - num + v.StrValue(), // 0 - text + v.EnumValue(), // 1 - e + v.PtrStrValue(), // 2 - ptr_str + (int64)(v.Num), // 3 - num } } func (v *Custom) Addrs() []any { + if v.PtrStr == nil { + v.PtrStr = new(longText) + } return []any{ encoding.StringScanner[longText](&v.Str), // 0 - text encoding.IntScanner[Enum](&v.Enum), // 1 - e - encoding.Uint16Scanner[uint16](&v.Num), // 2 - num + encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str + encoding.Uint16Scanner[uint16](&v.Num), // 3 - num } } func (Custom) SQLInsertPlaceholders(row int) string { - return "(?,?,?)" // 3 + return "(?,?,?,?)" // 4 } func (v Custom) InsertOneStmt() (string, []any) { - return "INSERT INTO `custom` (`text`,`e`,`num`) VALUES (?,?,?);", v.Values() + return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`num`) VALUES (?,?,?,?);", v.Values() } func (v Custom) StrValue() any { + if v.Str == "" { + return (string)(otherStr) + } return (string)(v.Str) } func (v Custom) EnumValue() any { + if v.Enum == 0 { + return (int64)(success) + } return (int64)(v.Enum) } +func (v Custom) PtrStrValue() any { + if v.PtrStr != nil { + return (string)(*v.PtrStr) + } + return nil +} func (v Custom) NumValue() any { return (int64)(v.Num) } @@ -48,6 +65,9 @@ func (v Custom) ColumnStr() sequel.ColumnConvertClause[longText] { func (v Custom) ColumnEnum() sequel.ColumnConvertClause[Enum] { return sequel.Column("e", v.Enum, convertEnumToValue) } +func (v Custom) ColumnPtrStr() sequel.ColumnConvertClause[*longText] { + return sequel.Column("ptr_str", v.PtrStr, convertPtrlongTextToValue) +} func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { return sequel.Column("num", v.Num, convertUint16ToValue) } @@ -55,9 +75,21 @@ func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { func convertUint16ToValue(val uint16) any { return (int64)(val) } +func convertPtrlongTextToValue(val *longText) any { + if val != nil { + return (string)(*val) + } + return nil +} func convertLongTextToValue(val longText) any { + if val == "" { + return (string)(otherStr) + } return (string)(val) } func convertEnumToValue(val Enum) any { + if val == 0 { + return (int64)(success) + } return (int64)(val) } diff --git a/examples/testcase/struct-field/enum/generated.go.tpl b/examples/testcase/struct-field/enum/generated.go.tpl index bcca4d07..3caba7a0 100644 --- a/examples/testcase/struct-field/enum/generated.go.tpl +++ b/examples/testcase/struct-field/enum/generated.go.tpl @@ -11,34 +11,51 @@ func (Custom) TableName() string { return "custom" } func (Custom) Columns() []string { - return []string{"text", "e", "num"} // 3 + return []string{"text", "e", "ptr_str", "num"} // 4 } func (v Custom) Values() []any { return []any{ - (string)(v.Str), // 0 - text - (int64)(v.Enum), // 1 - e - (int64)(v.Num), // 2 - num + v.StrValue(), // 0 - text + v.EnumValue(), // 1 - e + v.PtrStrValue(), // 2 - ptr_str + (int64)(v.Num), // 3 - num } } func (v *Custom) Addrs() []any { + if v.PtrStr == nil { + v.PtrStr = new(longText) + } return []any{ encoding.StringScanner[longText](&v.Str), // 0 - text encoding.IntScanner[Enum](&v.Enum), // 1 - e - encoding.Uint16Scanner[uint16](&v.Num), // 2 - num + encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str + encoding.Uint16Scanner[uint16](&v.Num), // 3 - num } } func (Custom) SQLInsertPlaceholders(row int) string { - return "(?,?,?)" // 3 + return "(?,?,?,?)" // 4 } func (v Custom) InsertOneStmt() (string, []any) { - return "INSERT INTO `custom` (`text`,`e`,`num`) VALUES (?,?,?);", v.Values() + return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`num`) VALUES (?,?,?,?);", v.Values() } func (v Custom) StrValue() any { + if v.Str == "" { + return (string)(otherStr) + } return (string)(v.Str) } func (v Custom) EnumValue() any { + if v.Enum == 0 { + return (int64)(success) + } return (int64)(v.Enum) } +func (v Custom) PtrStrValue() any { + if v.PtrStr != nil { + return (string)(*v.PtrStr) + } + return nil +} func (v Custom) NumValue() any { return (int64)(v.Num) } @@ -48,6 +65,9 @@ func (v Custom) ColumnStr() sequel.ColumnConvertClause[longText] { func (v Custom) ColumnEnum() sequel.ColumnConvertClause[Enum] { return sequel.Column("e", v.Enum, convertEnumToValue) } +func (v Custom) ColumnPtrStr() sequel.ColumnConvertClause[*longText] { + return sequel.Column("ptr_str", v.PtrStr, convertPtrlongTextToValue) +} func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { return sequel.Column("num", v.Num, convertUint16ToValue) } @@ -55,9 +75,21 @@ func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { func convertUint16ToValue(val uint16) any { return (int64)(val) } +func convertPtrlongTextToValue(val *longText) any { + if val != nil { + return (string)(*val) + } + return nil +} func convertLongTextToValue(val longText) any { + if val == "" { + return (string)(otherStr) + } return (string)(val) } func convertEnumToValue(val Enum) any { + if val == 0 { + return (int64)(success) + } return (int64)(val) } diff --git a/examples/testcase/struct-field/enum/model.go b/examples/testcase/struct-field/enum/model.go index 043b5c27..b4e03c5d 100644 --- a/examples/testcase/struct-field/enum/model.go +++ b/examples/testcase/struct-field/enum/model.go @@ -3,15 +3,16 @@ package enum type Enum int const ( - success Enum = iota + 1 + success Enum = iota + 1_00 failed otherStr longText = "very very very long text" cancelled ) type Custom struct { - Str longText `sql:"text"` - Enum Enum `sql:"e"` + Str longText `sql:"text"` + Enum Enum `sql:"e"` + PtrStr *longText `sql:"ptr_str"` priv int Status string `sql:"-"` Num uint16 From 329998f52ac0b1aa54d8f30046f68ca354ad5e37 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Wed, 29 Apr 2026 00:52:01 +0800 Subject: [PATCH 25/56] fix: Go enum bugs --- cmd/sqlgen/codegen/generate.go | 24 ++++---- cmd/sqlgen/compiler/go_ast.go | 18 +++--- cmd/sqlgen/compiler/parser.go | 59 ++++++++++--------- .../testcase/struct-field/enum/generated.go | 27 ++++++--- .../struct-field/enum/generated.go.tpl | 27 ++++++--- .../struct-field/enum/imported/generated.go | 20 +++++-- .../enum/imported/generated.go.tpl | 20 +++++-- .../struct-field/enum/imported/model.go | 6 +- examples/testcase/struct-field/enum/model.go | 17 ++++++ 9 files changed, 146 insertions(+), 72 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index 404ffd7a..e8356678 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -328,12 +328,14 @@ loop: if defaultValue, ok := f.DefaultValue(); ok { switch defaultValue.Kind() { case compiler.KindInt: - fprintfln(w, "if v.%s == 0 {", f.GoName()) - fprintfln(w, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) - fprintfln(w, "}") + if defaultValue.Value() != "0" { + fprintfln(w, "if v.%s == 0 {", f.GoName()) + fprintfln(w, "return %s", g.valuer(importPkgs, defaultValue.GoPath(), f.GoType())) + fprintfln(w, "}") + } case compiler.KindString: fprintfln(w, `if v.%s == "" {`, f.GoName()) - fprintfln(w, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w, "return %s", g.valuer(importPkgs, defaultValue.GoPath(), f.GoType())) fprintfln(w, "}") } } @@ -414,11 +416,11 @@ loop: switch defaultValue.Kind() { case compiler.KindInt: fprintfln(w2, "if *val == 0 {") - fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.GoPath(), f.GoType())) fprintfln(w2, "}") case compiler.KindString: fprintfln(w2, `if *val == "" {`) - fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.GoPath(), f.GoType())) fprintfln(w2, "}") } } @@ -430,12 +432,14 @@ loop: if defaultValue, ok := f.DefaultValue(); ok { switch defaultValue.Kind() { case compiler.KindInt: - fprintfln(w2, "if val == 0 {") - fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) - fprintfln(w2, "}") + if defaultValue.Value() != "0" { + fprintfln(w2, "if val == 0 {") + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.GoPath(), f.GoType())) + fprintfln(w2, "}") + } case compiler.KindString: fprintfln(w2, `if val == "" {`) - fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.Name(), f.GoType())) + fprintfln(w2, "return %s", g.valuer(importPkgs, defaultValue.GoPath(), f.GoType())) fprintfln(w2, "}") } } diff --git a/cmd/sqlgen/compiler/go_ast.go b/cmd/sqlgen/compiler/go_ast.go index 189b9c11..42411bf9 100644 --- a/cmd/sqlgen/compiler/go_ast.go +++ b/cmd/sqlgen/compiler/go_ast.go @@ -28,7 +28,7 @@ const ( ) type Value interface { - Name() string + GoPath() string Kind() Kind Value() string } @@ -143,9 +143,9 @@ func (c BasicColumn) DefaultValue() (Value, bool) { case *types.Const: switch v.Val().Kind() { case constant.Int: - return constantValue{name: v.Name(), kind: KindInt, value: v.Val().String()}, true + return constantValue{goPath: v.Pkg().Path() + "." + v.Name(), kind: KindInt, value: v.Val().String()}, true case constant.String: - return constantValue{name: v.Name(), kind: KindString, value: v.Val().String()}, true + return constantValue{goPath: v.Pkg().Path() + "." + v.Name(), kind: KindString, value: v.Val().String()}, true } } return nil, true @@ -166,11 +166,11 @@ func (c GeneratedColumn) DefaultValue() (Value, bool) { func (GeneratedColumn) columnType() {} type constantValue struct { - name string - kind Kind - value string + goPath string + kind Kind + value string } -func (v constantValue) Name() string { return v.name } -func (v constantValue) Kind() Kind { return v.kind } -func (v constantValue) Value() string { return v.value } +func (v constantValue) GoPath() string { return v.goPath } +func (v constantValue) Kind() Kind { return v.kind } +func (v constantValue) Value() string { return v.value } diff --git a/cmd/sqlgen/compiler/parser.go b/cmd/sqlgen/compiler/parser.go index 8cbdc8c0..019d4b3f 100644 --- a/cmd/sqlgen/compiler/parser.go +++ b/cmd/sqlgen/compiler/parser.go @@ -759,39 +759,16 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err // we will inspect it importPkg, ok := f.pkg.Imports[types.ExprString(fv.X)] if ok { - _ = importPkg - // for _, file := range importPkg.Syntax { - // ast.Inspect(file, func(n ast.Node) bool { - // mapEnumIfExists(importPkg, n, enumMap) - // return true - // }) - // } + if constValue, ok := findFirstConstValueInPackage(importPkg, fv.Sel.Name); ok { + field.defaultValue = constValue + } } // Local types case *ast.Ident: if fv.Obj != nil { - scope := pkg.Types.Scope() - constants := make([]*types.Const, 0, len(scope.Names())) - - // 1. Collect all constants of the custom type - for _, name := range scope.Names() { - obj := scope.Lookup(name) - if constant, ok := obj.(*types.Const); ok { - if named, ok := constant.Type().(*types.Named); ok && named.Obj().Name() == fv.Name { - constants = append(constants, constant) - } - } - } - - if len(constants) > 0 { - // 2. Sort by the global FileSet position - // This automatically handles file order (alphabetical) and line order. - sort.Slice(constants, func(i, j int) bool { - return constants[i].Pos() < constants[j].Pos() - }) - - field.defaultValue = constants[0] + if constValue, ok := findFirstConstValueInPackage(pkg, fv.Obj.Name); ok { + field.defaultValue = constValue } } @@ -979,3 +956,29 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err } }, nil } + +func findFirstConstValueInPackage(pkg *packages.Package, typeName string) (*types.Const, bool) { + scope := pkg.Types.Scope() + constants := make([]*types.Const, 0, len(scope.Names())) + + // 1. Collect all constants of the custom type + for _, name := range scope.Names() { + obj := scope.Lookup(name) + if constant, ok := obj.(*types.Const); ok { + if named, ok := constant.Type().(*types.Named); ok && named.Obj().Name() == typeName { + constants = append(constants, constant) + } + } + } + + if len(constants) > 0 { + // 2. Sort by the global FileSet position + // This automatically handles file order (alphabetical) and line order. + sort.Slice(constants, func(i, j int) bool { + return constants[i].Pos() < constants[j].Pos() + }) + + return constants[0], true + } + return nil, false +} diff --git a/examples/testcase/struct-field/enum/generated.go b/examples/testcase/struct-field/enum/generated.go index 3caba7a0..79d3c93c 100755 --- a/examples/testcase/struct-field/enum/generated.go +++ b/examples/testcase/struct-field/enum/generated.go @@ -11,14 +11,15 @@ func (Custom) TableName() string { return "custom" } func (Custom) Columns() []string { - return []string{"text", "e", "ptr_str", "num"} // 4 + return []string{"text", "e", "ptr_str", "uint_16", "num"} // 5 } func (v Custom) Values() []any { return []any{ v.StrValue(), // 0 - text v.EnumValue(), // 1 - e v.PtrStrValue(), // 2 - ptr_str - (int64)(v.Num), // 3 - num + v.Uint16Value(), // 3 - uint_16 + (int64)(v.Num), // 4 - num } } func (v *Custom) Addrs() []any { @@ -26,17 +27,18 @@ func (v *Custom) Addrs() []any { v.PtrStr = new(longText) } return []any{ - encoding.StringScanner[longText](&v.Str), // 0 - text - encoding.IntScanner[Enum](&v.Enum), // 1 - e - encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str - encoding.Uint16Scanner[uint16](&v.Num), // 3 - num + encoding.StringScanner[longText](&v.Str), // 0 - text + encoding.IntScanner[Enum](&v.Enum), // 1 - e + encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str + encoding.Uint16Scanner[uint16Enum](&v.Uint16), // 3 - uint_16 + encoding.Uint16Scanner[uint16](&v.Num), // 4 - num } } func (Custom) SQLInsertPlaceholders(row int) string { - return "(?,?,?,?)" // 4 + return "(?,?,?,?,?)" // 5 } func (v Custom) InsertOneStmt() (string, []any) { - return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`num`) VALUES (?,?,?,?);", v.Values() + return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`uint_16`,`num`) VALUES (?,?,?,?,?);", v.Values() } func (v Custom) StrValue() any { if v.Str == "" { @@ -56,6 +58,9 @@ func (v Custom) PtrStrValue() any { } return nil } +func (v Custom) Uint16Value() any { + return (int64)(v.Uint16) +} func (v Custom) NumValue() any { return (int64)(v.Num) } @@ -68,6 +73,9 @@ func (v Custom) ColumnEnum() sequel.ColumnConvertClause[Enum] { func (v Custom) ColumnPtrStr() sequel.ColumnConvertClause[*longText] { return sequel.Column("ptr_str", v.PtrStr, convertPtrlongTextToValue) } +func (v Custom) ColumnUint16() sequel.ColumnConvertClause[uint16Enum] { + return sequel.Column("uint_16", v.Uint16, convertUint16EnumToValue) +} func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { return sequel.Column("num", v.Num, convertUint16ToValue) } @@ -75,6 +83,9 @@ func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { func convertUint16ToValue(val uint16) any { return (int64)(val) } +func convertUint16EnumToValue(val uint16Enum) any { + return (int64)(val) +} func convertPtrlongTextToValue(val *longText) any { if val != nil { return (string)(*val) diff --git a/examples/testcase/struct-field/enum/generated.go.tpl b/examples/testcase/struct-field/enum/generated.go.tpl index 3caba7a0..79d3c93c 100644 --- a/examples/testcase/struct-field/enum/generated.go.tpl +++ b/examples/testcase/struct-field/enum/generated.go.tpl @@ -11,14 +11,15 @@ func (Custom) TableName() string { return "custom" } func (Custom) Columns() []string { - return []string{"text", "e", "ptr_str", "num"} // 4 + return []string{"text", "e", "ptr_str", "uint_16", "num"} // 5 } func (v Custom) Values() []any { return []any{ v.StrValue(), // 0 - text v.EnumValue(), // 1 - e v.PtrStrValue(), // 2 - ptr_str - (int64)(v.Num), // 3 - num + v.Uint16Value(), // 3 - uint_16 + (int64)(v.Num), // 4 - num } } func (v *Custom) Addrs() []any { @@ -26,17 +27,18 @@ func (v *Custom) Addrs() []any { v.PtrStr = new(longText) } return []any{ - encoding.StringScanner[longText](&v.Str), // 0 - text - encoding.IntScanner[Enum](&v.Enum), // 1 - e - encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str - encoding.Uint16Scanner[uint16](&v.Num), // 3 - num + encoding.StringScanner[longText](&v.Str), // 0 - text + encoding.IntScanner[Enum](&v.Enum), // 1 - e + encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str + encoding.Uint16Scanner[uint16Enum](&v.Uint16), // 3 - uint_16 + encoding.Uint16Scanner[uint16](&v.Num), // 4 - num } } func (Custom) SQLInsertPlaceholders(row int) string { - return "(?,?,?,?)" // 4 + return "(?,?,?,?,?)" // 5 } func (v Custom) InsertOneStmt() (string, []any) { - return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`num`) VALUES (?,?,?,?);", v.Values() + return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`uint_16`,`num`) VALUES (?,?,?,?,?);", v.Values() } func (v Custom) StrValue() any { if v.Str == "" { @@ -56,6 +58,9 @@ func (v Custom) PtrStrValue() any { } return nil } +func (v Custom) Uint16Value() any { + return (int64)(v.Uint16) +} func (v Custom) NumValue() any { return (int64)(v.Num) } @@ -68,6 +73,9 @@ func (v Custom) ColumnEnum() sequel.ColumnConvertClause[Enum] { func (v Custom) ColumnPtrStr() sequel.ColumnConvertClause[*longText] { return sequel.Column("ptr_str", v.PtrStr, convertPtrlongTextToValue) } +func (v Custom) ColumnUint16() sequel.ColumnConvertClause[uint16Enum] { + return sequel.Column("uint_16", v.Uint16, convertUint16EnumToValue) +} func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { return sequel.Column("num", v.Num, convertUint16ToValue) } @@ -75,6 +83,9 @@ func (v Custom) ColumnNum() sequel.ColumnConvertClause[uint16] { func convertUint16ToValue(val uint16) any { return (int64)(val) } +func convertUint16EnumToValue(val uint16Enum) any { + return (int64)(val) +} func convertPtrlongTextToValue(val *longText) any { if val != nil { return (string)(*val) diff --git a/examples/testcase/struct-field/enum/imported/generated.go b/examples/testcase/struct-field/enum/imported/generated.go index df2adf12..1a064e65 100755 --- a/examples/testcase/struct-field/enum/imported/generated.go +++ b/examples/testcase/struct-field/enum/imported/generated.go @@ -3,6 +3,7 @@ package imported import ( + "reflect" "time" "github.com/si3nloong/sqlgen/sequel" @@ -13,31 +14,42 @@ func (ImportedEnum) TableName() string { return "imported_enum" } func (ImportedEnum) Columns() []string { - return []string{"weekday"} // 1 + return []string{"weekday", "kind"} // 2 } func (v ImportedEnum) Values() []any { return []any{ - (int64)(v.Weekday), // 0 - weekday + v.WeekdayValue(), // 0 - weekday + v.KindValue(), // 1 - kind } } func (v *ImportedEnum) Addrs() []any { return []any{ encoding.IntScanner[time.Weekday](&v.Weekday), // 0 - weekday + encoding.UintScanner[reflect.Kind](&v.Kind), // 1 - kind } } func (ImportedEnum) SQLInsertPlaceholders(row int) string { - return "(?)" // 1 + return "(?,?)" // 2 } func (v ImportedEnum) InsertOneStmt() (string, []any) { - return "INSERT INTO `imported_enum` (`weekday`) VALUES (?);", v.Values() + return "INSERT INTO `imported_enum` (`weekday`,`kind`) VALUES (?,?);", v.Values() } func (v ImportedEnum) WeekdayValue() any { return (int64)(v.Weekday) } +func (v ImportedEnum) KindValue() any { + return (int64)(v.Kind) +} func (v ImportedEnum) ColumnWeekday() sequel.ColumnConvertClause[time.Weekday] { return sequel.Column("weekday", v.Weekday, convertTimeWeekdayToValue) } +func (v ImportedEnum) ColumnKind() sequel.ColumnConvertClause[reflect.Kind] { + return sequel.Column("kind", v.Kind, convertReflectKindToValue) +} func convertTimeWeekdayToValue(val time.Weekday) any { return (int64)(val) } +func convertReflectKindToValue(val reflect.Kind) any { + return (int64)(val) +} diff --git a/examples/testcase/struct-field/enum/imported/generated.go.tpl b/examples/testcase/struct-field/enum/imported/generated.go.tpl index df2adf12..1a064e65 100644 --- a/examples/testcase/struct-field/enum/imported/generated.go.tpl +++ b/examples/testcase/struct-field/enum/imported/generated.go.tpl @@ -3,6 +3,7 @@ package imported import ( + "reflect" "time" "github.com/si3nloong/sqlgen/sequel" @@ -13,31 +14,42 @@ func (ImportedEnum) TableName() string { return "imported_enum" } func (ImportedEnum) Columns() []string { - return []string{"weekday"} // 1 + return []string{"weekday", "kind"} // 2 } func (v ImportedEnum) Values() []any { return []any{ - (int64)(v.Weekday), // 0 - weekday + v.WeekdayValue(), // 0 - weekday + v.KindValue(), // 1 - kind } } func (v *ImportedEnum) Addrs() []any { return []any{ encoding.IntScanner[time.Weekday](&v.Weekday), // 0 - weekday + encoding.UintScanner[reflect.Kind](&v.Kind), // 1 - kind } } func (ImportedEnum) SQLInsertPlaceholders(row int) string { - return "(?)" // 1 + return "(?,?)" // 2 } func (v ImportedEnum) InsertOneStmt() (string, []any) { - return "INSERT INTO `imported_enum` (`weekday`) VALUES (?);", v.Values() + return "INSERT INTO `imported_enum` (`weekday`,`kind`) VALUES (?,?);", v.Values() } func (v ImportedEnum) WeekdayValue() any { return (int64)(v.Weekday) } +func (v ImportedEnum) KindValue() any { + return (int64)(v.Kind) +} func (v ImportedEnum) ColumnWeekday() sequel.ColumnConvertClause[time.Weekday] { return sequel.Column("weekday", v.Weekday, convertTimeWeekdayToValue) } +func (v ImportedEnum) ColumnKind() sequel.ColumnConvertClause[reflect.Kind] { + return sequel.Column("kind", v.Kind, convertReflectKindToValue) +} func convertTimeWeekdayToValue(val time.Weekday) any { return (int64)(val) } +func convertReflectKindToValue(val reflect.Kind) any { + return (int64)(val) +} diff --git a/examples/testcase/struct-field/enum/imported/model.go b/examples/testcase/struct-field/enum/imported/model.go index 536ddcc7..91d41498 100644 --- a/examples/testcase/struct-field/enum/imported/model.go +++ b/examples/testcase/struct-field/enum/imported/model.go @@ -1,7 +1,11 @@ package imported -import "time" +import ( + "reflect" + "time" +) type ImportedEnum struct { Weekday time.Weekday + Kind reflect.Kind } diff --git a/examples/testcase/struct-field/enum/model.go b/examples/testcase/struct-field/enum/model.go index b4e03c5d..19b925a9 100644 --- a/examples/testcase/struct-field/enum/model.go +++ b/examples/testcase/struct-field/enum/model.go @@ -9,12 +9,29 @@ const ( cancelled ) +type uint16Enum uint16 + +const ( + zero uint16Enum = iota + one + two + three + four + five + six + seven + eight + nine + ten +) + type Custom struct { Str longText `sql:"text"` Enum Enum `sql:"e"` PtrStr *longText `sql:"ptr_str"` priv int Status string `sql:"-"` + Uint16 uint16Enum Num uint16 } From 7070bf6476a1d79f6b445dd6ab951aee761f8db7 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Wed, 29 Apr 2026 01:21:23 +0800 Subject: [PATCH 26/56] fix: generation bug --- cmd/sqlgen/compiler/parser.go | 60 +++++++++---------- examples/testcase/core/generated.go | 18 +++++- examples/testcase/core/generated.go.tpl | 18 +++++- .../testcase/struct-field/pk/generated.go | 8 +-- .../testcase/struct-field/pk/generated.go.tpl | 8 +-- 5 files changed, 67 insertions(+), 45 deletions(-) diff --git a/cmd/sqlgen/compiler/parser.go b/cmd/sqlgen/compiler/parser.go index 019d4b3f..2f7b6a54 100644 --- a/cmd/sqlgen/compiler/parser.go +++ b/cmd/sqlgen/compiler/parser.go @@ -745,41 +745,39 @@ func ParseDir(dir string, cfg *Config) (*packages.Package, iter.Seq2[*Table, err } } - field := &structField{ - t: f.pkg.TypesInfo.TypeOf(fi.Type), - parent: f.prev, - tag: tag, - } - - // Every struct field - switch fv := fi.Type.(type) { - // Imported types - case *ast.SelectorExpr: - // If the field type is a Go imported enum, - // we will inspect it - importPkg, ok := f.pkg.Imports[types.ExprString(fv.X)] - if ok { - if constValue, ok := findFirstConstValueInPackage(importPkg, fv.Sel.Name); ok { - field.defaultValue = constValue - } + for j, n := range fi.Names { + field := &structField{ + t: f.pkg.TypesInfo.TypeOf(fi.Type), + parent: f.prev, + tag: tag, + name: types.ExprString(n), + index: append(f.idx, i+j), + exported: n.IsExported(), } - - // Local types - case *ast.Ident: - if fv.Obj != nil { - if constValue, ok := findFirstConstValueInPackage(pkg, fv.Obj.Name); ok { - field.defaultValue = constValue + // Every struct field + switch fv := fi.Type.(type) { + // Imported types + case *ast.SelectorExpr: + // If the field type is a Go imported enum, + // we will inspect it + importPkg, ok := f.pkg.Imports[types.ExprString(fv.X)] + if ok { + if constValue, ok := findFirstConstValueInPackage(importPkg, fv.Sel.Name); ok { + field.defaultValue = constValue + } } - } - case *ast.StarExpr: - // If it's a pointer, we need to get the underlying type - } + // Local types + case *ast.Ident: + if fv.Obj != nil { + if constValue, ok := findFirstConstValueInPackage(pkg, fv.Obj.Name); ok { + field.defaultValue = constValue + } + } - for j, n := range fi.Names { - field.name = types.ExprString(n) - field.index = append(f.idx, i+j) - field.exported = n.IsExported() + // case *ast.StarExpr: + // If it's a pointer, we need to get the underlying type + } structFields = append(structFields, field) } diff --git a/examples/testcase/core/generated.go b/examples/testcase/core/generated.go index 4d835b2b..f8720514 100755 --- a/examples/testcase/core/generated.go +++ b/examples/testcase/core/generated.go @@ -32,9 +32,9 @@ func (v User) Values() []any { (int64)(v.No), // 1 - no v.JoinedTime, // 2 - joined_time encoding.JSONValue(v.Address), // 3 - address - (int64)(v.Kind), // 4 - kind - (int64)(v.Type), // 5 - type - (int64)(v.Chan), // 6 - chan + v.KindValue(), // 4 - kind + v.TypeValue(), // 5 - type + v.ChanValue(), // 6 - chan v.PostalCodeValue(), // 7 - postal_code encoding.JSONValue(v.ExtraInfo), // 8 - extra_info encoding.JSONValue(v.Nicknames), // 9 - nicknames @@ -101,9 +101,15 @@ func (v User) KindValue() any { return (int64)(v.Kind) } func (v User) TypeValue() any { + if v.Type == 0 { + return (int64)(HouseUnitTypeA) + } return (int64)(v.Type) } func (v User) ChanValue() any { + if v.Chan == 0 { + return (int64)(reflect.RecvDir) + } return (int64)(v.Chan) } func (v User) PostalCodeValue() any { @@ -200,6 +206,9 @@ func convertReflectKindToValue(val reflect.Kind) any { return (int64)(val) } func convertReflectChanDirToValue(val reflect.ChanDir) any { + if val == 0 { + return (int64)(reflect.RecvDir) + } return (int64)(val) } func convertPtrstructDeepStructBoolBoolToValue(val *struct{ Deep struct{ Bool bool } }) any { @@ -218,6 +227,9 @@ func convertMapstringfloat64ToValue(val map[string]float64) any { return encoding.JSONValue(val) } func convertHouseUnitTypeToValue(val HouseUnitType) any { + if val == 0 { + return (int64)(HouseUnitTypeA) + } return (int64)(val) } func convertAddressToValue(val Address) any { diff --git a/examples/testcase/core/generated.go.tpl b/examples/testcase/core/generated.go.tpl index 4d835b2b..f8720514 100644 --- a/examples/testcase/core/generated.go.tpl +++ b/examples/testcase/core/generated.go.tpl @@ -32,9 +32,9 @@ func (v User) Values() []any { (int64)(v.No), // 1 - no v.JoinedTime, // 2 - joined_time encoding.JSONValue(v.Address), // 3 - address - (int64)(v.Kind), // 4 - kind - (int64)(v.Type), // 5 - type - (int64)(v.Chan), // 6 - chan + v.KindValue(), // 4 - kind + v.TypeValue(), // 5 - type + v.ChanValue(), // 6 - chan v.PostalCodeValue(), // 7 - postal_code encoding.JSONValue(v.ExtraInfo), // 8 - extra_info encoding.JSONValue(v.Nicknames), // 9 - nicknames @@ -101,9 +101,15 @@ func (v User) KindValue() any { return (int64)(v.Kind) } func (v User) TypeValue() any { + if v.Type == 0 { + return (int64)(HouseUnitTypeA) + } return (int64)(v.Type) } func (v User) ChanValue() any { + if v.Chan == 0 { + return (int64)(reflect.RecvDir) + } return (int64)(v.Chan) } func (v User) PostalCodeValue() any { @@ -200,6 +206,9 @@ func convertReflectKindToValue(val reflect.Kind) any { return (int64)(val) } func convertReflectChanDirToValue(val reflect.ChanDir) any { + if val == 0 { + return (int64)(reflect.RecvDir) + } return (int64)(val) } func convertPtrstructDeepStructBoolBoolToValue(val *struct{ Deep struct{ Bool bool } }) any { @@ -218,6 +227,9 @@ func convertMapstringfloat64ToValue(val map[string]float64) any { return encoding.JSONValue(val) } func convertHouseUnitTypeToValue(val HouseUnitType) any { + if val == 0 { + return (int64)(HouseUnitTypeA) + } return (int64)(val) } func convertAddressToValue(val Address) any { diff --git a/examples/testcase/struct-field/pk/generated.go b/examples/testcase/struct-field/pk/generated.go index 1460e4b5..eecdad17 100755 --- a/examples/testcase/struct-field/pk/generated.go +++ b/examples/testcase/struct-field/pk/generated.go @@ -21,10 +21,10 @@ func (Car) Columns() []string { } func (v Car) Values() []any { return []any{ - v.ID, // 0 - id - v.No, // 1 - no - (int64)(v.Color), // 2 - color - v.ManucDate, // 3 - manuc_date + v.ID, // 0 - id + v.No, // 1 - no + v.ColorValue(), // 2 - color + v.ManucDate, // 3 - manuc_date } } func (v *Car) Addrs() []any { diff --git a/examples/testcase/struct-field/pk/generated.go.tpl b/examples/testcase/struct-field/pk/generated.go.tpl index 1460e4b5..eecdad17 100644 --- a/examples/testcase/struct-field/pk/generated.go.tpl +++ b/examples/testcase/struct-field/pk/generated.go.tpl @@ -21,10 +21,10 @@ func (Car) Columns() []string { } func (v Car) Values() []any { return []any{ - v.ID, // 0 - id - v.No, // 1 - no - (int64)(v.Color), // 2 - color - v.ManucDate, // 3 - manuc_date + v.ID, // 0 - id + v.No, // 1 - no + v.ColorValue(), // 2 - color + v.ManucDate, // 3 - manuc_date } } func (v *Car) Addrs() []any { From 7f81423dd9ed11a7e2a6b54eec2cdb3693b63b09 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Fri, 1 May 2026 00:03:12 +0800 Subject: [PATCH 27/56] chore: update template codes --- cmd/sqlgen/codegen/generate.go | 4 +- cmd/sqlgen/codegen/interface.go | 28 +++-- cmd/sqlgen/codegen/templates/db.go.tpl | 163 ++++++++++++++++++------- examples/db/mysql/db.go | 68 ++++++++--- examples/db/postgres/db.go | 106 ++++++++++------ examples/db/sqlite/db.go | 68 ++++++++--- examples/go.sum | 26 ++++ sequel/sequel.go | 1 + 8 files changed, 341 insertions(+), 123 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index e8356678..af904a46 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -621,13 +621,13 @@ func (g *Generator) buildScanner(w io.Writer, importPkgs *Package, table *compil // Initialize all pointer fields before we passed those property addr for p := range table.ColumnGoPtrPaths() { fprintfln(w, "if v.%s == nil {", p.GoPath()) - fmt.Fprintf(w, "v.%s = new(%s)", p.GoPath(), Expr(strings.TrimPrefix(p.GoType().String(), "*")).Format(importPkgs, ExprParams{})) + fmt.Fprintf(w, "v.%s = new(%s)", p.GoPath(), Expr(strings.TrimPrefix(p.GoType().String(), "*")).Format(importPkgs)) fprintfln(w, "}") } fprintfln(w, "return []any{") tmpl := "%s, // %" + stfwidth(len(table.Columns)) + "d - %s" for _, f := range table.Columns { - fprintfln(w, tmpl, g.scanner(importPkgs, "&v."+f.GoPath(), f.GoType()), f.Pos(), f.Name()) + fprintfln(w, tmpl, g.scanner(importPkgs, fmt.Sprintf("&v.%s", f.GoPath()), f.GoType()), f.Pos(), f.Name()) } fprintfln(w, "}") fprintfln(w, "}") diff --git a/cmd/sqlgen/codegen/interface.go b/cmd/sqlgen/codegen/interface.go index 7a66af44..3c88ce1d 100644 --- a/cmd/sqlgen/codegen/interface.go +++ b/cmd/sqlgen/codegen/interface.go @@ -36,18 +36,19 @@ func init() { } for _, p := range pkgs { + scope := p.Types.Scope() switch p.ID { case "database/sql/driver": - goSqlValuer = p.Types.Scope().Lookup("Valuer").Type().Underlying().(*types.Interface) + goSqlValuer = scope.Lookup("Valuer").Type().Underlying().(*types.Interface) case "database/sql": - goSqlScanner = p.Types.Scope().Lookup("Scanner").Type().Underlying().(*types.Interface) + goSqlScanner = scope.Lookup("Scanner").Type().Underlying().(*types.Interface) case "encoding": - binaryMarshaler = p.Types.Scope().Lookup("BinaryMarshaler").Type().Underlying().(*types.Interface) - binaryUnmarshaler = p.Types.Scope().Lookup("BinaryUnmarshaler").Type().Underlying().(*types.Interface) - textMarshaler = p.Types.Scope().Lookup("TextMarshaler").Type().Underlying().(*types.Interface) - textUnmarshaler = p.Types.Scope().Lookup("TextUnmarshaler").Type().Underlying().(*types.Interface) + binaryMarshaler = scope.Lookup("BinaryMarshaler").Type().Underlying().(*types.Interface) + binaryUnmarshaler = scope.Lookup("BinaryUnmarshaler").Type().Underlying().(*types.Interface) + textMarshaler = scope.Lookup("TextMarshaler").Type().Underlying().(*types.Interface) + textUnmarshaler = scope.Lookup("TextUnmarshaler").Type().Underlying().(*types.Interface) case "time": - typeOfTime = p.Types.Scope().Lookup("Time").Type().(*types.Named).String() + typeOfTime = scope.Lookup("Time").Type().(*types.Named).String() } } @@ -61,10 +62,11 @@ func init() { if err != nil { panic(err) } - sqlDatabaser = pkg.Scope().Lookup("Databaser").Type().Underlying().(*types.Interface) - sqlTabler = pkg.Scope().Lookup("Tabler").Type().Underlying().(*types.Interface) - sqlColumner = pkg.Scope().Lookup("Columner").Type().Underlying().(*types.Interface) - sqlQueryColumner = pkg.Scope().Lookup("SQLColumner").Type().Underlying().(*types.Interface) - sqlValuer = pkg.Scope().Lookup("Valuer").Type().Underlying().(*types.Interface) - sqlScanner = pkg.Scope().Lookup("Scanner").Type().Underlying().(*types.Interface) + scope := pkg.Scope() + sqlDatabaser = scope.Lookup("Databaser").Type().Underlying().(*types.Interface) + sqlTabler = scope.Lookup("Tabler").Type().Underlying().(*types.Interface) + sqlColumner = scope.Lookup("Columner").Type().Underlying().(*types.Interface) + sqlQueryColumner = scope.Lookup("SQLColumner").Type().Underlying().(*types.Interface) + sqlValuer = scope.Lookup("Valuer").Type().Underlying().(*types.Interface) + sqlScanner = scope.Lookup("Scanner").Type().Underlying().(*types.Interface) } diff --git a/cmd/sqlgen/codegen/templates/db.go.tpl b/cmd/sqlgen/codegen/templates/db.go.tpl index 374fffc8..dfbe6ab0 100644 --- a/cmd/sqlgen/codegen/templates/db.go.tpl +++ b/cmd/sqlgen/codegen/templates/db.go.tpl @@ -20,13 +20,27 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { case sequel.SingleInserter: query, args := v.InsertOneStmt() return db.QueryRowContext(ctx, query, args...).Scan(model.Addrs()...) + case sequel.Inserter: + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(v.SQLInsertColumns()) + stmt.WriteString(" VALUES ") + stmt.WriteString(v.SQLInsertPlaceholders(0)) + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") + row := db.QueryRowContext(ctx, stmt.String(), v.SQLInsertValues()...) + strpool.ReleaseString(stmt) // Cleanup + return row.Scan(model.Addrs()...) default: - columns, args := model.Columns(), model.Values() + columns, args := TableColumns(model), model.Values() + columnSQL := strings.Join(columns, ",") stmt := strpool.AcquireString() stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) stmt.WriteString(" (") - stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(columnSQL) stmt.WriteString(") VALUES ({{ quoteVar 1 }}") noOfArgs := len(args) for i := 1; i < noOfArgs; i++ { @@ -34,7 +48,7 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { stmt.WriteString(wrapVar(i+1)) } stmt.WriteString(") RETURNING ") - stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(columnSQL) stmt.WriteString(";") row := db.QueryRowContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) // Cleanup @@ -68,8 +82,19 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { case sequel.SingleInserter: query, args := v.InsertOneStmt() return db.ExecContext(ctx, query, args...) + case sequel.Inserter: + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(v.SQLInsertColumns()) + stmt.WriteString(" VALUES ") + stmt.WriteString(v.SQLInsertPlaceholders(0)) + stmt.WriteString(";") + result, err := db.ExecContext(ctx, stmt.String(), v.SQLInsertValues()...) + strpool.ReleaseString(stmt) // Cleanup + return result, err default: - columns, args := model.Columns(), model.Values() + columns, args := TableColumns(model), model.Values() stmt := strpool.AcquireString() stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) @@ -81,10 +106,7 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { result, err := db.ExecContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) // Cleanup args = nil // Cleanup - if err != nil { - return nil, err - } - return result, nil + return result, err } } {{ end }} @@ -92,14 +114,14 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { {{ if eq driver "postgres" -}} {{- /* postgres */ -}} // Insert is a helper function to insert multiple records. -func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, data []T) (sql.Result, error) { +func Insert[T sequel.ColumnValuer, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, data []T) (sql.Result, error) { noOfData := len(data) if noOfData == 0 { return new(sequel.EmptyResult), nil } model := data[0] - columns := model.Columns() + columns := TableColumns(model) stmt := strpool.AcquireString() var ( @@ -107,29 +129,23 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db err error ) switch v := any(model).(type) { - case sequel.AutoIncrKeyer: - _, idx, _ := v.PK() - columns = append(columns[:idx], columns[idx+1:]...) + case sequel.Inserter: noOfCols := len(columns) args := make([]any, 0, noOfCols*noOfData) stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) stmt.WriteString(" (") - stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(v.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(0)) - values := data[0].Values() - values = append(values[:idx], values[idx+1:]...) - args = append(args, values...) + stmt.WriteString(v.SQLInsertPlaceholders(0)) + args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") - stmt.WriteString(model.SQLInsertPlaceholders(i)) - values := data[i].Values() - values = append(values[:idx], values[idx+1:]...) - args = append(args, values...) + stmt.WriteString(v.SQLInsertPlaceholders(i)) + args = append(args, data[i].Values()...) } stmt.WriteString(" RETURNING ") - stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(strings.Join(columns, ",")) stmt.WriteString(";") rows, err = db.QueryContext(ctx, stmt.String(), args...) args = nil // Cleanup @@ -139,17 +155,26 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) stmt.WriteString(" (") - stmt.WriteString(model.SQLInsertColumns()) - stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(0)) + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ({{ quoteVar 1 }}") + for i := 1; i < noOfCols; i++ { + stmt.WriteString(",") + stmt.WriteString(wrapVar(i+1)) + } + stmt.WriteString(")") args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { - stmt.WriteString(",") - stmt.WriteString(model.SQLInsertPlaceholders(i)) + stmt.WriteString(",(") + stmt.WriteString(wrapVar(i*noOfCols + 1)) + for j := 1; j < noOfCols; j++ { + stmt.WriteString(",") + stmt.WriteString(wrapVar(i*noOfCols + j + 1)) + } + stmt.WriteString(")") args = append(args, data[i].Values()...) } stmt.WriteString(" RETURNING ") - stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(strings.Join(columns, ",")) stmt.WriteString(";") rows, err = db.QueryContext(ctx, stmt.String(), args...) args = nil // Cleanup @@ -219,7 +244,12 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) noOfColumns := len(columns) args := make([]any, 0, noOfColumns*noOfData) placeholder := "(" + strings.Repeat(",{{ quoteVar 1 }}", noOfColumns)[1:] + ")" - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES "+ placeholder) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") + stmt.WriteString(placeholder) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -743,11 +773,15 @@ func Upsert[T interface { if override { stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { stmt.WriteString("INSERT IGNORE INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) @@ -797,9 +831,16 @@ func Upsert[T interface { continue } if first { - stmt.WriteString(columns[i] + "=VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString("=VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } else { - stmt.WriteString(","+ columns[i] + "=VALUES(" + columns[i] + ")") + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString("=VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } first = false } @@ -847,10 +888,17 @@ func FindByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Cont return row.Scan(model.Addrs()...) {{ else -}} stmt := strpool.AcquireString() - stmt.WriteString("SELECT " + strings.Join(TableColumns(model), ",") + " FROM " + DbTable(model) + " WHERE ("+ strings.Join(keyNames, ",") +") = ({{ quoteVar 1 }}") - noOfKey := len(keyNames) - for i := 1; i < noOfKey; i++ { - stmt.WriteString(","+ wrapVar(i+1)) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ({{ quoteVar 1 }}") + noOfKeys := len(keyNames) + for i := 1; i < noOfKeys; i++ { + stmt.WriteString(",") + stmt.WriteString(wrapVar(i+1)) } stmt.WriteString(") LIMIT 1;") row := db.QueryRowContext(ctx, stmt.String(), keys...) @@ -957,23 +1005,46 @@ func DeleteByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) return db.ExecContext(ctx, query, args...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - query := "DELETE FROM "+DbTable(model)+" WHERE "+pkName+" = {{ quoteVar 1 }};" - return db.ExecContext(ctx, query, pk) + stmt := strpool.AcquireString() + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = {{ quoteVar 1 }};") + result, err := db.ExecContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return result, err case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() {{ if isStaticVar -}} - query := "DELETE FROM "+DbTable(model)+" WHERE ("+strings.Join(keyNames, ",")+") = ({{ quoteVar 1 }}"+strings.Repeat(",{{ quoteVar 1 }}", len(keyNames)-1)+");" - return db.ExecContext(ctx, query, keys...) + stmt := strpool.AcquireString() + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ({{ quoteVar 1 }}") + stmt.WriteString(strings.Repeat(",{{ quoteVar 1 }}", len(keyNames)-1)) + stmt.WriteString(");") + result, err := db.ExecContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return result, err {{ else -}} stmt := strpool.AcquireString() - defer strpool.ReleaseString(stmt) - stmt.WriteString("DELETE FROM "+DbTable(model)+" WHERE ("+ strings.Join(keyNames, ",") +") = ({{ quoteVar 1 }}") + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ({{ quoteVar 1 }}") noOfKey := len(keyNames) for i := 1; i < noOfKey; i++ { - stmt.WriteString(","+ wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(wrapVar(i+1)) } stmt.WriteString(");") - return db.ExecContext(ctx, stmt.String(), keys...) + result, err := db.ExecContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) // Clean up + keys = nil // Clean up + return result, err {{ end -}} default: panic("unreachable") diff --git a/examples/db/mysql/db.go b/examples/db/mysql/db.go index be6dae0e..247d7670 100755 --- a/examples/db/mysql/db.go +++ b/examples/db/mysql/db.go @@ -45,8 +45,19 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { case sequel.SingleInserter: query, args := v.InsertOneStmt() return db.ExecContext(ctx, query, args...) + case sequel.Inserter: + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(v.SQLInsertColumns()) + stmt.WriteString(" VALUES ") + stmt.WriteString(v.SQLInsertPlaceholders(0)) + stmt.WriteString(";") + result, err := db.ExecContext(ctx, stmt.String(), v.SQLInsertValues()...) + strpool.ReleaseString(stmt) // Cleanup + return result, err default: - columns, args := model.Columns(), model.Values() + columns, args := TableColumns(model), model.Values() stmt := strpool.AcquireString() stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) @@ -58,10 +69,7 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { result, err := db.ExecContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) // Cleanup args = nil // Cleanup - if err != nil { - return nil, err - } - return result, nil + return result, err } } @@ -109,7 +117,12 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) noOfColumns := len(columns) args := make([]any, 0, noOfColumns*noOfData) placeholder := "(" + strings.Repeat(",?", noOfColumns)[1:] + ")" - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + placeholder) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") + stmt.WriteString(placeholder) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -330,11 +343,15 @@ func Upsert[T interface { if override { stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { stmt.WriteString("INSERT IGNORE INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) @@ -384,9 +401,16 @@ func Upsert[T interface { continue } if first { - stmt.WriteString(columns[i] + "=VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString("=VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } else { - stmt.WriteString("," + columns[i] + "=VALUES(" + columns[i] + ")") + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString("=VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } first = false } @@ -474,12 +498,28 @@ func DeleteByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) return db.ExecContext(ctx, query, args...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - query := "DELETE FROM " + DbTable(model) + " WHERE " + pkName + " = ?;" - return db.ExecContext(ctx, query, pk) + stmt := strpool.AcquireString() + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ?;") + result, err := db.ExecContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return result, err case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() - query := "DELETE FROM " + DbTable(model) + " WHERE (" + strings.Join(keyNames, ",") + ") = (?" + strings.Repeat(",?", len(keyNames)-1) + ");" - return db.ExecContext(ctx, query, keys...) + stmt := strpool.AcquireString() + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = (?") + stmt.WriteString(strings.Repeat(",?", len(keyNames)-1)) + stmt.WriteString(");") + result, err := db.ExecContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return result, err default: panic("unreachable") } diff --git a/examples/db/postgres/db.go b/examples/db/postgres/db.go index 58f66394..f7d592ce 100755 --- a/examples/db/postgres/db.go +++ b/examples/db/postgres/db.go @@ -29,13 +29,27 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { case sequel.SingleInserter: query, args := v.InsertOneStmt() return db.QueryRowContext(ctx, query, args...).Scan(model.Addrs()...) + case sequel.Inserter: + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(v.SQLInsertColumns()) + stmt.WriteString(" VALUES ") + stmt.WriteString(v.SQLInsertPlaceholders(0)) + stmt.WriteString(" RETURNING ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(";") + row := db.QueryRowContext(ctx, stmt.String(), v.SQLInsertValues()...) + strpool.ReleaseString(stmt) // Cleanup + return row.Scan(model.Addrs()...) default: - columns, args := model.Columns(), model.Values() + columns, args := TableColumns(model), model.Values() + columnSQL := strings.Join(columns, ",") stmt := strpool.AcquireString() stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) stmt.WriteString(" (") - stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(columnSQL) stmt.WriteString(") VALUES ($1") noOfArgs := len(args) for i := 1; i < noOfArgs; i++ { @@ -43,7 +57,7 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { stmt.WriteString(wrapVar(i + 1)) } stmt.WriteString(") RETURNING ") - stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(columnSQL) stmt.WriteString(";") row := db.QueryRowContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) // Cleanup @@ -53,14 +67,14 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { } // Insert is a helper function to insert multiple records. -func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, data []T) (sql.Result, error) { +func Insert[T sequel.ColumnValuer, Ptr sequel.PtrScanner[T]](ctx context.Context, db sequel.DB, data []T) (sql.Result, error) { noOfData := len(data) if noOfData == 0 { return new(sequel.EmptyResult), nil } model := data[0] - columns := model.Columns() + columns := TableColumns(model) stmt := strpool.AcquireString() var ( @@ -68,29 +82,23 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db err error ) switch v := any(model).(type) { - case sequel.AutoIncrKeyer: - _, idx, _ := v.PK() - columns = append(columns[:idx], columns[idx+1:]...) + case sequel.Inserter: noOfCols := len(columns) args := make([]any, 0, noOfCols*noOfData) stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) stmt.WriteString(" (") - stmt.WriteString(model.SQLInsertColumns()) + stmt.WriteString(v.SQLInsertColumns()) stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(0)) - values := data[0].Values() - values = append(values[:idx], values[idx+1:]...) - args = append(args, values...) + stmt.WriteString(v.SQLInsertPlaceholders(0)) + args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") - stmt.WriteString(model.SQLInsertPlaceholders(i)) - values := data[i].Values() - values = append(values[:idx], values[idx+1:]...) - args = append(args, values...) + stmt.WriteString(v.SQLInsertPlaceholders(i)) + args = append(args, data[i].Values()...) } stmt.WriteString(" RETURNING ") - stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(strings.Join(columns, ",")) stmt.WriteString(";") rows, err = db.QueryContext(ctx, stmt.String(), args...) args = nil // Cleanup @@ -100,17 +108,26 @@ func Insert[T sequel.Inserter, Ptr sequel.PtrScanner[T]](ctx context.Context, db stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) stmt.WriteString(" (") - stmt.WriteString(model.SQLInsertColumns()) - stmt.WriteString(") VALUES ") - stmt.WriteString(model.SQLInsertPlaceholders(0)) + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ($1") + for i := 1; i < noOfCols; i++ { + stmt.WriteString(",") + stmt.WriteString(wrapVar(i + 1)) + } + stmt.WriteString(")") args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { - stmt.WriteString(",") - stmt.WriteString(model.SQLInsertPlaceholders(i)) + stmt.WriteString(",(") + stmt.WriteString(wrapVar(i*noOfCols + 1)) + for j := 1; j < noOfCols; j++ { + stmt.WriteString(",") + stmt.WriteString(wrapVar(i*noOfCols + j + 1)) + } + stmt.WriteString(")") args = append(args, data[i].Values()...) } stmt.WriteString(" RETURNING ") - stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(strings.Join(columns, ",")) stmt.WriteString(";") rows, err = db.QueryContext(ctx, stmt.String(), args...) args = nil // Cleanup @@ -458,10 +475,17 @@ func FindByPK[T sequel.KeyScanner, Ptr sequel.KeyPtrScanner[T]](ctx context.Cont case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() stmt := strpool.AcquireString() - stmt.WriteString("SELECT " + strings.Join(TableColumns(model), ",") + " FROM " + DbTable(model) + " WHERE (" + strings.Join(keyNames, ",") + ") = ($1") - noOfKey := len(keyNames) - for i := 1; i < noOfKey; i++ { - stmt.WriteString("," + wrapVar(i+1)) + stmt.WriteString("SELECT ") + stmt.WriteString(strings.Join(TableColumns(model), ",")) + stmt.WriteString(" FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ($1") + noOfKeys := len(keyNames) + for i := 1; i < noOfKeys; i++ { + stmt.WriteString(",") + stmt.WriteString(wrapVar(i + 1)) } stmt.WriteString(") LIMIT 1;") row := db.QueryRowContext(ctx, stmt.String(), keys...) @@ -558,19 +582,33 @@ func DeleteByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) return db.ExecContext(ctx, query, args...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - query := "DELETE FROM " + DbTable(model) + " WHERE " + pkName + " = $1;" - return db.ExecContext(ctx, query, pk) + stmt := strpool.AcquireString() + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = $1;") + result, err := db.ExecContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return result, err case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() stmt := strpool.AcquireString() - defer strpool.ReleaseString(stmt) - stmt.WriteString("DELETE FROM " + DbTable(model) + " WHERE (" + strings.Join(keyNames, ",") + ") = ($1") + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = ($1") noOfKey := len(keyNames) for i := 1; i < noOfKey; i++ { - stmt.WriteString("," + wrapVar(i+1)) + stmt.WriteString(",") + stmt.WriteString(wrapVar(i + 1)) } stmt.WriteString(");") - return db.ExecContext(ctx, stmt.String(), keys...) + result, err := db.ExecContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) // Clean up + keys = nil // Clean up + return result, err default: panic("unreachable") } diff --git a/examples/db/sqlite/db.go b/examples/db/sqlite/db.go index 56ef4747..4b148673 100755 --- a/examples/db/sqlite/db.go +++ b/examples/db/sqlite/db.go @@ -45,8 +45,19 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { case sequel.SingleInserter: query, args := v.InsertOneStmt() return db.ExecContext(ctx, query, args...) + case sequel.Inserter: + stmt := strpool.AcquireString() + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(v.SQLInsertColumns()) + stmt.WriteString(" VALUES ") + stmt.WriteString(v.SQLInsertPlaceholders(0)) + stmt.WriteString(";") + result, err := db.ExecContext(ctx, stmt.String(), v.SQLInsertValues()...) + strpool.ReleaseString(stmt) // Cleanup + return result, err default: - columns, args := model.Columns(), model.Values() + columns, args := TableColumns(model), model.Values() stmt := strpool.AcquireString() stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) @@ -58,10 +69,7 @@ func InsertOne[T sequel.ColumnValuer, Ptr interface { result, err := db.ExecContext(ctx, stmt.String(), args...) strpool.ReleaseString(stmt) // Cleanup args = nil // Cleanup - if err != nil { - return nil, err - } - return result, nil + return result, err } } @@ -109,7 +117,12 @@ func Insert[T sequel.ColumnValuer](ctx context.Context, db sequel.DB, data []T) noOfColumns := len(columns) args := make([]any, 0, noOfColumns*noOfData) placeholder := "(" + strings.Repeat(",?", noOfColumns)[1:] + ")" - stmt.WriteString("INSERT INTO " + DbTable(model) + " (" + strings.Join(columns, ",") + ") VALUES " + placeholder) + stmt.WriteString("INSERT INTO ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") + stmt.WriteString(placeholder) args = append(args, data[0].Values()...) for i := 1; i < noOfData; i++ { stmt.WriteString(",") @@ -330,11 +343,15 @@ func Upsert[T interface { if override { stmt.WriteString("INSERT INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } else { stmt.WriteString("INSERT IGNORE INTO ") stmt.WriteString(DbTable(model)) - stmt.WriteString(" (" + strings.Join(columns, ",") + ") VALUES ") + stmt.WriteString(" (") + stmt.WriteString(strings.Join(columns, ",")) + stmt.WriteString(") VALUES ") } stmt.WriteString(model.SQLInsertPlaceholders(0)) args = append(args, data[0].Values()...) @@ -384,9 +401,16 @@ func Upsert[T interface { continue } if first { - stmt.WriteString(columns[i] + "=VALUES(" + columns[i] + ")") + stmt.WriteString(columns[i]) + stmt.WriteString("=VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } else { - stmt.WriteString("," + columns[i] + "=VALUES(" + columns[i] + ")") + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString("=VALUES(") + stmt.WriteString(columns[i]) + stmt.WriteString(")") } first = false } @@ -474,12 +498,28 @@ func DeleteByPK[T sequel.KeyValuer](ctx context.Context, db sequel.DB, model T) return db.ExecContext(ctx, query, args...) case sequel.PrimaryKeyer: pkName, _, pk := v.PK() - query := "DELETE FROM " + DbTable(model) + " WHERE " + pkName + " = ?;" - return db.ExecContext(ctx, query, pk) + stmt := strpool.AcquireString() + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE ") + stmt.WriteString(pkName) + stmt.WriteString(" = ?;") + result, err := db.ExecContext(ctx, stmt.String(), pk) + strpool.ReleaseString(stmt) + return result, err case sequel.CompositeKeyer: keyNames, _, keys := v.CompositeKey() - query := "DELETE FROM " + DbTable(model) + " WHERE (" + strings.Join(keyNames, ",") + ") = (?" + strings.Repeat(",?", len(keyNames)-1) + ");" - return db.ExecContext(ctx, query, keys...) + stmt := strpool.AcquireString() + stmt.WriteString("DELETE FROM ") + stmt.WriteString(DbTable(model)) + stmt.WriteString(" WHERE (") + stmt.WriteString(strings.Join(keyNames, ",")) + stmt.WriteString(") = (?") + stmt.WriteString(strings.Repeat(",?", len(keyNames)-1)) + stmt.WriteString(");") + result, err := db.ExecContext(ctx, stmt.String(), keys...) + strpool.ReleaseString(stmt) + return result, err default: panic("unreachable") } diff --git a/examples/go.sum b/examples/go.sum index 14c47985..ede855a5 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -16,11 +16,19 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dhui/dktest v0.4.6 h1:+DPKyScKSEp3VLtbMDHcUq6V5Lm5zfZZVb0Sk7Ahom4= +github.com/dhui/dktest v0.4.6/go.mod h1:JHTSYDtKkvFNFHJKqCzVzqXecyv+tKt8EzceOmQOgbU= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/cli v27.4.1+incompatible h1:VzPiUlRJ/xh+otB75gva3r05isHMo5wXDfPRi5/b4hI= github.com/docker/cli v27.4.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v28.3.3+incompatible h1:Dypm25kh4rmk49v1eiVbsAtpAsYURjYkaKubwuBdxEI= @@ -29,8 +37,14 @@ github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -99,6 +113,8 @@ github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85 github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -145,6 +161,16 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= diff --git a/sequel/sequel.go b/sequel/sequel.go index e1a1a918..863a2859 100644 --- a/sequel/sequel.go +++ b/sequel/sequel.go @@ -99,6 +99,7 @@ type Inserter interface { Columner Valuer SQLInsertColumns() string + SQLInsertValues() []any SQLInsertPlaceholders(row int) string } From 97e5ecd1ce684a11e9c785b9c9fc5dfe01a97342 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Sun, 3 May 2026 18:00:18 +0800 Subject: [PATCH 28/56] chore: update `UpsertOne` --- cmd/sqlgen/codegen/templates/db.go.tpl | 9 +++++++-- examples/db/postgres/db.go | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cmd/sqlgen/codegen/templates/db.go.tpl b/cmd/sqlgen/codegen/templates/db.go.tpl index dfbe6ab0..a5e79966 100644 --- a/cmd/sqlgen/codegen/templates/db.go.tpl +++ b/cmd/sqlgen/codegen/templates/db.go.tpl @@ -391,9 +391,14 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface{ continue } if first { - stmt.WriteString(columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } else { - stmt.WriteString("," + columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } first = false } diff --git a/examples/db/postgres/db.go b/examples/db/postgres/db.go index f7d592ce..b4b0e7e2 100755 --- a/examples/db/postgres/db.go +++ b/examples/db/postgres/db.go @@ -277,9 +277,14 @@ func UpsertOne[T sequel.KeyValuer, Ptr interface { continue } if first { - stmt.WriteString(columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } else { - stmt.WriteString("," + columns[i] + " = EXCLUDED." + columns[i]) + stmt.WriteString(",") + stmt.WriteString(columns[i]) + stmt.WriteString(" = EXCLUDED.") + stmt.WriteString(columns[i]) } first = false } From 2c2c55cd6b4b700bb273b06715553ac8c90bee5c Mon Sep 17 00:00:00 2001 From: si3nloong Date: Sun, 3 May 2026 19:09:05 +0800 Subject: [PATCH 29/56] feat: add `SetPK` functionality --- cmd/sqlgen/codegen/generate.go | 18 ++++++++++++++++++ examples/testcase/core/generated.go | 5 ++++- examples/testcase/core/generated.go.tpl | 5 ++++- .../schema/dynamic-table-name/generated.go | 3 +++ .../schema/dynamic-table-name/generated.go.tpl | 3 +++ examples/testcase/schema/generated.go | 6 ++++++ examples/testcase/schema/generated.go.tpl | 6 ++++++ .../testcase/struct-field/alias/generated.go | 3 +++ .../struct-field/alias/generated.go.tpl | 3 +++ .../testcase/struct-field/date/generated.go | 3 +++ .../struct-field/date/generated.go.tpl | 3 +++ .../struct-field/pk/auto-incr/generated.go | 5 ++++- .../struct-field/pk/auto-incr/generated.go.tpl | 5 ++++- .../struct-field/pk/auto-incr/int/generated.go | 5 ++++- .../pk/auto-incr/int/generated.go.tpl | 5 ++++- .../pk/auto-incr/int16/generate.go.tpl | 5 ++++- .../pk/auto-incr/int16/generated.go | 5 ++++- .../pk/auto-incr/int32/generated.go | 5 ++++- .../pk/auto-incr/int32/generated.go.tpl | 5 ++++- .../pk/auto-incr/int64/generate.go.tpl | 5 ++++- .../pk/auto-incr/int64/generated.go | 5 ++++- .../pk/auto-incr/int8/generated.go | 5 ++++- .../pk/auto-incr/int8/generated.go.tpl | 5 ++++- .../pk/auto-incr/uint/generated.go | 5 ++++- .../pk/auto-incr/uint/generated.go.tpl | 5 ++++- .../pk/auto-incr/uint16/generated.go | 5 ++++- .../pk/auto-incr/uint16/generated.go.tpl | 5 ++++- .../pk/auto-incr/uint32/generated.go | 5 ++++- .../pk/auto-incr/uint32/generated.go.tpl | 5 ++++- .../pk/auto-incr/uint64/generated.go | 5 ++++- .../pk/auto-incr/uint64/generated.go.tpl | 5 ++++- .../pk/auto-incr/uint8/generated.go | 5 ++++- .../pk/auto-incr/uint8/generated.go.tpl | 5 ++++- .../struct-field/pk/composite/generated.go | 4 ++++ .../struct-field/pk/composite/generated.go.tpl | 4 ++++ examples/testcase/struct-field/pk/generated.go | 9 +++++++++ .../testcase/struct-field/pk/generated.go.tpl | 9 +++++++++ .../testcase/struct-field/pointer/generated.go | 5 ++++- .../struct-field/pointer/generated.go.tpl | 5 ++++- .../testcase/struct-field/slice/generated.go | 5 ++++- .../struct-field/slice/generated.go.tpl | 5 ++++- .../testcase/struct-field/sql/generated.go | 8 +++++++- .../testcase/struct-field/sql/generated.go.tpl | 8 +++++++- .../testcase/struct-field/version/generated.go | 3 +++ .../struct-field/version/generated.go.tpl | 3 +++ examples/testcase/struct/tag/generated.go | 3 +++ examples/testcase/struct/tag/generated.go.tpl | 3 +++ 47 files changed, 212 insertions(+), 30 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index af904a46..c5c43f00 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -218,6 +218,9 @@ loop: fprintfln(w, "func (%s) HasPK() {}", t.GoName) switch v := pk.(type) { case *compiler.AutoIncrPrimaryKey: + fprintfln(w, "func (v *%s) SetPK(val %s) {", t.GoName, v.GoType().String()) + fprintfln(w, "v.%s = val", v.GoName()) + fprintfln(w, "}") fprintfln(w, "func (%s) IsAutoIncr() {}", t.GoName) fprintfln(w, "func (v *%s) ScanAutoIncr(val int64) error {", t.GoName) fprintfln(w, "v.%s = %s(val)", v.GoName(), v.GoType()) @@ -227,6 +230,9 @@ loop: fprintfln(w, "return %s, %d, %s", g.Quote(g.QuoteIdentifier(v.Name())), v.Pos(), g.getOrValue(importPkgs, "v", v)) fprintfln(w, "}") case *compiler.PrimaryKey: + fprintfln(w, "func (v *%s) SetPK(val %s) {", t.GoName, Expr(v.GoType().String()).Format(importPkgs)) + fprintfln(w, "v.%s = val", v.GoName()) + fprintfln(w, "}") fprintfln(w, "func (v %s) PK() (string, int, any) {", t.GoName) fprintfln(w, "return %s, %d, %s", g.Quote(g.QuoteIdentifier(v.Name())), v.Pos(), g.getOrValue(importPkgs, "v", v)) fprintfln(w, "}") @@ -541,6 +547,18 @@ func (g *Generator) buildHeader(w io.Writer) { func (g *Generator) buildCompositeKeys(w io.Writer, importPkgs *Package, goName string, k *compiler.CompositePrimaryKey) { // column names, indexes, values + fmt.Fprintf(w, "func (v *%s) SetPK(", goName) + for i, column := range k.Columns { + if i > 0 { + fmt.Fprint(w, ", ") + } + fmt.Fprintf(w, "val%d %s", i+1, Expr(column.GoType().String()).Format(importPkgs)) + } + fprintfln(w, ") {") + for i, column := range k.Columns { + fprintfln(w, "v.%s = val%d", column.GoName(), i+1) + } + fprintfln(w, "}") fprintfln(w, "func (v %s) CompositeKey() ([]string, []int, []any) {", goName) w1 := strpool.AcquireString() w2 := strpool.AcquireString() diff --git a/examples/testcase/core/generated.go b/examples/testcase/core/generated.go index f8720514..d28ca2df 100755 --- a/examples/testcase/core/generated.go +++ b/examples/testcase/core/generated.go @@ -14,7 +14,10 @@ import ( func (User) TableName() string { return "user" } -func (User) HasPK() {} +func (User) HasPK() {} +func (v *User) SetPK(val int64) { + v.ID = val +} func (User) IsAutoIncr() {} func (v *User) ScanAutoIncr(val int64) error { v.ID = int64(val) diff --git a/examples/testcase/core/generated.go.tpl b/examples/testcase/core/generated.go.tpl index f8720514..d28ca2df 100644 --- a/examples/testcase/core/generated.go.tpl +++ b/examples/testcase/core/generated.go.tpl @@ -14,7 +14,10 @@ import ( func (User) TableName() string { return "user" } -func (User) HasPK() {} +func (User) HasPK() {} +func (v *User) SetPK(val int64) { + v.ID = val +} func (User) IsAutoIncr() {} func (v *User) ScanAutoIncr(val int64) error { v.ID = int64(val) diff --git a/examples/testcase/schema/dynamic-table-name/generated.go b/examples/testcase/schema/dynamic-table-name/generated.go index 922a187e..7bac372d 100755 --- a/examples/testcase/schema/dynamic-table-name/generated.go +++ b/examples/testcase/schema/dynamic-table-name/generated.go @@ -7,6 +7,9 @@ import ( ) func (A) HasPK() {} +func (v *A) SetPK(val int64) { + v.ID = val +} func (v A) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/schema/dynamic-table-name/generated.go.tpl b/examples/testcase/schema/dynamic-table-name/generated.go.tpl index 922a187e..7bac372d 100644 --- a/examples/testcase/schema/dynamic-table-name/generated.go.tpl +++ b/examples/testcase/schema/dynamic-table-name/generated.go.tpl @@ -7,6 +7,9 @@ import ( ) func (A) HasPK() {} +func (v *A) SetPK(val int64) { + v.ID = val +} func (v A) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/schema/generated.go b/examples/testcase/schema/generated.go index de9da940..6f240f8b 100755 --- a/examples/testcase/schema/generated.go +++ b/examples/testcase/schema/generated.go @@ -96,6 +96,9 @@ func (C) TableName() string { return "c" } func (C) HasPK() {} +func (v *C) SetPK(val int64) { + v.ID = val +} func (v C) PK() (string, int, any) { return "id", 0, v.ID } @@ -132,6 +135,9 @@ func (D) TableName() string { return "d" } func (D) HasPK() {} +func (v *D) SetPK(val sql.NullString) { + v.ID = val +} func (v D) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/schema/generated.go.tpl b/examples/testcase/schema/generated.go.tpl index de9da940..6f240f8b 100644 --- a/examples/testcase/schema/generated.go.tpl +++ b/examples/testcase/schema/generated.go.tpl @@ -96,6 +96,9 @@ func (C) TableName() string { return "c" } func (C) HasPK() {} +func (v *C) SetPK(val int64) { + v.ID = val +} func (v C) PK() (string, int, any) { return "id", 0, v.ID } @@ -132,6 +135,9 @@ func (D) TableName() string { return "d" } func (D) HasPK() {} +func (v *D) SetPK(val sql.NullString) { + v.ID = val +} func (v D) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/alias/generated.go b/examples/testcase/struct-field/alias/generated.go index 710d1568..e7beb83a 100755 --- a/examples/testcase/struct-field/alias/generated.go +++ b/examples/testcase/struct-field/alias/generated.go @@ -14,6 +14,9 @@ func (AliasStruct) TableName() string { return "alias_struct" } func (AliasStruct) HasPK() {} +func (v *AliasStruct) SetPK(val int64) { + v.ID = val +} func (v AliasStruct) PK() (string, int, any) { return "Id", 1, v.pk.ID } diff --git a/examples/testcase/struct-field/alias/generated.go.tpl b/examples/testcase/struct-field/alias/generated.go.tpl index 710d1568..e7beb83a 100644 --- a/examples/testcase/struct-field/alias/generated.go.tpl +++ b/examples/testcase/struct-field/alias/generated.go.tpl @@ -14,6 +14,9 @@ func (AliasStruct) TableName() string { return "alias_struct" } func (AliasStruct) HasPK() {} +func (v *AliasStruct) SetPK(val int64) { + v.ID = val +} func (v AliasStruct) PK() (string, int, any) { return "Id", 1, v.pk.ID } diff --git a/examples/testcase/struct-field/date/generated.go b/examples/testcase/struct-field/date/generated.go index f29acc8d..a088bf9f 100755 --- a/examples/testcase/struct-field/date/generated.go +++ b/examples/testcase/struct-field/date/generated.go @@ -13,6 +13,9 @@ func (User) TableName() string { return "user" } func (User) HasPK() {} +func (v *User) SetPK(val uuid.UUID) { + v.ID = val +} func (v User) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/date/generated.go.tpl b/examples/testcase/struct-field/date/generated.go.tpl index f29acc8d..a088bf9f 100644 --- a/examples/testcase/struct-field/date/generated.go.tpl +++ b/examples/testcase/struct-field/date/generated.go.tpl @@ -13,6 +13,9 @@ func (User) TableName() string { return "user" } func (User) HasPK() {} +func (v *User) SetPK(val uuid.UUID) { + v.ID = val +} func (v User) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go b/examples/testcase/struct-field/pk/auto-incr/generated.go index a739592f..1f2be783 100755 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "AutoIncrPK" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl index a739592f..1f2be783 100644 --- a/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "AutoIncrPK" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int/generated.go b/examples/testcase/struct-field/pk/auto-incr/int/generated.go index 5d94743d..5bad06b5 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl index 5d94743d..5bad06b5 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl index 0a35afa5..0abf8f3f 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int16/generate.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int16) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int16(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int16/generated.go b/examples/testcase/struct-field/pk/auto-incr/int16/generated.go index 0a35afa5..0abf8f3f 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int16/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int16/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int16) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int16(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go index c7c5e3b3..e995ef30 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int32) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int32(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl index c7c5e3b3..e995ef30 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int32/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int32) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int32(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl index 4e9744d2..d3f234f6 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int64/generate.go.tpl @@ -9,7 +9,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int64) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int64(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int64/generated.go b/examples/testcase/struct-field/pk/auto-incr/int64/generated.go index 4e9744d2..d3f234f6 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int64/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int64/generated.go @@ -9,7 +9,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int64) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int64(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go index 737b6cba..b81dc98b 100755 --- a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int8) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int8(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl index 737b6cba..b81dc98b 100644 --- a/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/int8/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val int8) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = int8(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go index 537be1da..55810dff 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl index 537be1da..55810dff 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go index 3aad00d5..a3f83653 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint16) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint16(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl index 3aad00d5..a3f83653 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint16/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint16) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint16(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go index 809fb121..45b324e0 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint32) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint32(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl index 809fb121..45b324e0 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint32/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint32) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint32(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go index 6ef5abb2..6c3295ca 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint64) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint64(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl index 6ef5abb2..6c3295ca 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint64/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint64) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint64(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go index b97b2614..be049dbe 100755 --- a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go +++ b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint8) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint8(val) diff --git a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl index b97b2614..be049dbe 100644 --- a/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl +++ b/examples/testcase/struct-field/pk/auto-incr/uint8/generated.go.tpl @@ -10,7 +10,10 @@ import ( func (Model) TableName() string { return "model" } -func (Model) HasPK() {} +func (Model) HasPK() {} +func (v *Model) SetPK(val uint8) { + v.ID = val +} func (Model) IsAutoIncr() {} func (v *Model) ScanAutoIncr(val int64) error { v.ID = uint8(val) diff --git a/examples/testcase/struct-field/pk/composite/generated.go b/examples/testcase/struct-field/pk/composite/generated.go index 89a9a5b3..6cefa590 100755 --- a/examples/testcase/struct-field/pk/composite/generated.go +++ b/examples/testcase/struct-field/pk/composite/generated.go @@ -11,6 +11,10 @@ func (Composite) TableName() string { return "composite" } func (Composite) HasPK() {} +func (v *Composite) SetPK(val1 string, val2 uuid.UUID) { + v.Col1 = val1 + v.Col3 = val2 +} func (v Composite) CompositeKey() ([]string, []int, []any) { return []string{"col_1", "col_3"}, []int{1, 3}, []any{v.Col1, v.Col3} } diff --git a/examples/testcase/struct-field/pk/composite/generated.go.tpl b/examples/testcase/struct-field/pk/composite/generated.go.tpl index 89a9a5b3..6cefa590 100644 --- a/examples/testcase/struct-field/pk/composite/generated.go.tpl +++ b/examples/testcase/struct-field/pk/composite/generated.go.tpl @@ -11,6 +11,10 @@ func (Composite) TableName() string { return "composite" } func (Composite) HasPK() {} +func (v *Composite) SetPK(val1 string, val2 uuid.UUID) { + v.Col1 = val1 + v.Col3 = val2 +} func (v Composite) CompositeKey() ([]string, []int, []any) { return []string{"col_1", "col_3"}, []int{1, 3}, []any{v.Col1, v.Col3} } diff --git a/examples/testcase/struct-field/pk/generated.go b/examples/testcase/struct-field/pk/generated.go index eecdad17..32f19855 100755 --- a/examples/testcase/struct-field/pk/generated.go +++ b/examples/testcase/struct-field/pk/generated.go @@ -13,6 +13,9 @@ func (Car) TableName() string { return "car" } func (Car) HasPK() {} +func (v *Car) SetPK(val PK) { + v.ID = val +} func (v Car) PK() (string, int, any) { return "id", 0, v.ID } @@ -76,6 +79,9 @@ func (House) TableName() string { return "house" } func (House) HasPK() {} +func (v *House) SetPK(val uint) { + v.ID = val +} func (v House) PK() (string, int, any) { return "id", 0, (int64)(v.ID) } @@ -123,6 +129,9 @@ func (User) TableName() string { return "user" } func (User) HasPK() {} +func (v *User) SetPK(val int64) { + v.ID = val +} func (v User) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/pk/generated.go.tpl b/examples/testcase/struct-field/pk/generated.go.tpl index eecdad17..32f19855 100644 --- a/examples/testcase/struct-field/pk/generated.go.tpl +++ b/examples/testcase/struct-field/pk/generated.go.tpl @@ -13,6 +13,9 @@ func (Car) TableName() string { return "car" } func (Car) HasPK() {} +func (v *Car) SetPK(val PK) { + v.ID = val +} func (v Car) PK() (string, int, any) { return "id", 0, v.ID } @@ -76,6 +79,9 @@ func (House) TableName() string { return "house" } func (House) HasPK() {} +func (v *House) SetPK(val uint) { + v.ID = val +} func (v House) PK() (string, int, any) { return "id", 0, (int64)(v.ID) } @@ -123,6 +129,9 @@ func (User) TableName() string { return "user" } func (User) HasPK() {} +func (v *User) SetPK(val int64) { + v.ID = val +} func (v User) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/pointer/generated.go b/examples/testcase/struct-field/pointer/generated.go index abf4375a..807680ce 100755 --- a/examples/testcase/struct-field/pointer/generated.go +++ b/examples/testcase/struct-field/pointer/generated.go @@ -12,7 +12,10 @@ import ( func (Ptr) TableName() string { return "ptr" } -func (Ptr) HasPK() {} +func (Ptr) HasPK() {} +func (v *Ptr) SetPK(val int64) { + v.ID = val +} func (Ptr) IsAutoIncr() {} func (v *Ptr) ScanAutoIncr(val int64) error { v.ID = int64(val) diff --git a/examples/testcase/struct-field/pointer/generated.go.tpl b/examples/testcase/struct-field/pointer/generated.go.tpl index abf4375a..807680ce 100644 --- a/examples/testcase/struct-field/pointer/generated.go.tpl +++ b/examples/testcase/struct-field/pointer/generated.go.tpl @@ -12,7 +12,10 @@ import ( func (Ptr) TableName() string { return "ptr" } -func (Ptr) HasPK() {} +func (Ptr) HasPK() {} +func (v *Ptr) SetPK(val int64) { + v.ID = val +} func (Ptr) IsAutoIncr() {} func (v *Ptr) ScanAutoIncr(val int64) error { v.ID = int64(val) diff --git a/examples/testcase/struct-field/slice/generated.go b/examples/testcase/struct-field/slice/generated.go index e352b9e0..0e3c2a08 100755 --- a/examples/testcase/struct-field/slice/generated.go +++ b/examples/testcase/struct-field/slice/generated.go @@ -11,7 +11,10 @@ import ( func (Slice) TableName() string { return "slice" } -func (Slice) HasPK() {} +func (Slice) HasPK() {} +func (v *Slice) SetPK(val uint64) { + v.ID = val +} func (Slice) IsAutoIncr() {} func (v *Slice) ScanAutoIncr(val int64) error { v.ID = uint64(val) diff --git a/examples/testcase/struct-field/slice/generated.go.tpl b/examples/testcase/struct-field/slice/generated.go.tpl index e352b9e0..0e3c2a08 100644 --- a/examples/testcase/struct-field/slice/generated.go.tpl +++ b/examples/testcase/struct-field/slice/generated.go.tpl @@ -11,7 +11,10 @@ import ( func (Slice) TableName() string { return "slice" } -func (Slice) HasPK() {} +func (Slice) HasPK() {} +func (v *Slice) SetPK(val uint64) { + v.ID = val +} func (Slice) IsAutoIncr() {} func (v *Slice) ScanAutoIncr(val int64) error { v.ID = uint64(val) diff --git a/examples/testcase/struct-field/sql/generated.go b/examples/testcase/struct-field/sql/generated.go index 7dc64d9c..427d69e8 100755 --- a/examples/testcase/struct-field/sql/generated.go +++ b/examples/testcase/struct-field/sql/generated.go @@ -14,7 +14,10 @@ import ( func (AutoPkLocation) TableName() string { return "auto_pk_location" } -func (AutoPkLocation) HasPK() {} +func (AutoPkLocation) HasPK() {} +func (v *AutoPkLocation) SetPK(val uint64) { + v.ID = val +} func (AutoPkLocation) IsAutoIncr() {} func (v *AutoPkLocation) ScanAutoIncr(val int64) error { v.ID = uint64(val) @@ -115,6 +118,9 @@ func (Location) TableName() string { return "location" } func (Location) HasPK() {} +func (v *Location) SetPK(val uint64) { + v.ID = val +} func (v Location) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/sql/generated.go.tpl b/examples/testcase/struct-field/sql/generated.go.tpl index 7dc64d9c..427d69e8 100644 --- a/examples/testcase/struct-field/sql/generated.go.tpl +++ b/examples/testcase/struct-field/sql/generated.go.tpl @@ -14,7 +14,10 @@ import ( func (AutoPkLocation) TableName() string { return "auto_pk_location" } -func (AutoPkLocation) HasPK() {} +func (AutoPkLocation) HasPK() {} +func (v *AutoPkLocation) SetPK(val uint64) { + v.ID = val +} func (AutoPkLocation) IsAutoIncr() {} func (v *AutoPkLocation) ScanAutoIncr(val int64) error { v.ID = uint64(val) @@ -115,6 +118,9 @@ func (Location) TableName() string { return "location" } func (Location) HasPK() {} +func (v *Location) SetPK(val uint64) { + v.ID = val +} func (v Location) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/version/generated.go b/examples/testcase/struct-field/version/generated.go index 18fb027d..62608e98 100755 --- a/examples/testcase/struct-field/version/generated.go +++ b/examples/testcase/struct-field/version/generated.go @@ -11,6 +11,9 @@ func (Version) TableName() string { return "version" } func (Version) HasPK() {} +func (v *Version) SetPK(val uuid.UUID) { + v.ID = val +} func (v Version) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct-field/version/generated.go.tpl b/examples/testcase/struct-field/version/generated.go.tpl index 18fb027d..62608e98 100644 --- a/examples/testcase/struct-field/version/generated.go.tpl +++ b/examples/testcase/struct-field/version/generated.go.tpl @@ -11,6 +11,9 @@ func (Version) TableName() string { return "version" } func (Version) HasPK() {} +func (v *Version) SetPK(val uuid.UUID) { + v.ID = val +} func (v Version) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct/tag/generated.go b/examples/testcase/struct/tag/generated.go index 5db3960a..1a5d6351 100755 --- a/examples/testcase/struct/tag/generated.go +++ b/examples/testcase/struct/tag/generated.go @@ -13,6 +13,9 @@ func (A) TableName() string { return "a" } func (A) HasPK() {} +func (v *A) SetPK(val string) { + v.ID = val +} func (v A) PK() (string, int, any) { return "id", 0, v.ID } diff --git a/examples/testcase/struct/tag/generated.go.tpl b/examples/testcase/struct/tag/generated.go.tpl index 5db3960a..1a5d6351 100644 --- a/examples/testcase/struct/tag/generated.go.tpl +++ b/examples/testcase/struct/tag/generated.go.tpl @@ -13,6 +13,9 @@ func (A) TableName() string { return "a" } func (A) HasPK() {} +func (v *A) SetPK(val string) { + v.ID = val +} func (v A) PK() (string, int, any) { return "id", 0, v.ID } From 49d6bd49f155ff8207c6f29129ea0225f1ddd551 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Sun, 3 May 2026 20:02:49 +0800 Subject: [PATCH 30/56] fix: getter --- cmd/sqlgen/codegen/generate.go | 23 ++++----- examples/testcase/core/generated.go | 4 +- examples/testcase/core/generated.go.tpl | 4 +- .../testcase/struct-field/enum/generated.go | 50 ++++++++++++++----- .../struct-field/enum/generated.go.tpl | 50 ++++++++++++++----- examples/testcase/struct-field/enum/model.go | 1 + examples/testcase/struct-field/pk/car.go | 1 + .../testcase/struct-field/pk/generated.go | 34 ++++++++++--- .../testcase/struct-field/pk/generated.go.tpl | 34 ++++++++++--- .../struct-field/pk/uuid/generated.go | 13 +++++ .../struct-field/pk/uuid/generated.go.tpl | 13 +++++ .../testcase/struct-field/pk/uuid/uuid.go | 2 +- 12 files changed, 172 insertions(+), 57 deletions(-) diff --git a/cmd/sqlgen/codegen/generate.go b/cmd/sqlgen/codegen/generate.go index c5c43f00..c801e66e 100644 --- a/cmd/sqlgen/codegen/generate.go +++ b/cmd/sqlgen/codegen/generate.go @@ -623,10 +623,6 @@ func (g *Generator) buildValuer(w io.Writer, importPkgs *Package, t *compiler.Ta fprintfln(w, "return []any{") tmpl := "%s, // %" + stfwidth(n) + "d - %s" for _, f := range t.Columns { - if _, ok := f.DefaultValue(); ok { - fprintfln(w, tmpl, fmt.Sprintf("v.%sValue()", f.GoName()), f.Pos(), f.Name()) - continue - } fprintfln(w, tmpl, g.getOrValue(importPkgs, "v", f), f.Pos(), f.Name()) } fprintfln(w, "}") @@ -768,10 +764,10 @@ func (g *Generator) buildInsertOne(w io.Writer, importPkgs *Package, t *compiler if err != nil { return err } - fmt.Fprint(w1, ","+g.MustQuoteIdentifier(column.Name())) - fmt.Fprint(w2, ","+g.getOrValue(importPkgs, "v", column)) - fmt.Fprint(w3, ","+valuer) - fmt.Fprint(w4, ","+scanner) + fmt.Fprintf(w1, ",%s", g.MustQuoteIdentifier(column.Name())) + fmt.Fprintf(w2, ",%s", g.getOrValue(importPkgs, "v", column)) + fmt.Fprintf(w3, ",%s", valuer) + fmt.Fprintf(w4, ",%s", scanner) } fmt.Fprintf(w1, ") VALUES (%s) RETURNING (%s)", w3, w4) } else { @@ -791,9 +787,9 @@ func (g *Generator) buildInsertOne(w io.Writer, importPkgs *Package, t *compiler if err != nil { return err } - fmt.Fprint(w1, ","+g.MustQuoteIdentifier(column.Name())) - fmt.Fprint(w2, ","+g.getOrValue(importPkgs, "v", column)) - fmt.Fprint(w3, ","+valuer) + fmt.Fprintf(w1, ",%s", g.MustQuoteIdentifier(column.Name())) + fmt.Fprintf(w2, ",%s", g.getOrValue(importPkgs, "v", column)) + fmt.Fprintf(w3, ",%s", valuer) } fmt.Fprintf(w1, ") VALUES (%s)", w3) } @@ -802,7 +798,7 @@ func (g *Generator) buildInsertOne(w io.Writer, importPkgs *Package, t *compiler // mean it has no auto increment key fprintfln(w, "func (v %s) InsertOneStmt() (string, []any) {", t.GoName) if len(columns) == len(t.Columns) { - fprintfln(w, "return %s, v.Values()", w1) + fprintfln(w, "return %s, v.%s()", w1, methodName(sqlValuer)) } else { fprintfln(w, "return %s, []any{%s}", w1, w2) } @@ -878,6 +874,9 @@ func (g *Generator) buildUpdateByPK(w io.Writer, importPkgs *Package, t *compile } func (g *Generator) getOrValue(importPkgs *Package, obj string, f compiler.Column) string { + if _, ok := f.DefaultValue(); ok { + return fmt.Sprintf("%s.%sValue()", obj, f.GoName()) + } goPath := obj + "." + f.GoPath() if f.IsUnderlyingPtr() { return obj + "." + valueFunc(f) diff --git a/examples/testcase/core/generated.go b/examples/testcase/core/generated.go index d28ca2df..6f37fd57 100755 --- a/examples/testcase/core/generated.go +++ b/examples/testcase/core/generated.go @@ -80,13 +80,13 @@ func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 14 } func (v User) InsertOneStmt() (string, []any) { - return "INSERT INTO `user` (`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), (int64)(v.Kind), (int64)(v.Type), (int64)(v.Chan), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name} + return "INSERT INTO `user` (`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), v.KindValue(), v.TypeValue(), v.ChanValue(), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name} } func (v User) FindOneByPKStmt() (string, []any) { return "SELECT `id`,`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name` FROM `user` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v User) UpdateOneByPKStmt() (string, []any) { - return "UPDATE `user` SET `no` = ?,`joined_time` = ?,`address` = ?,`kind` = ?,`type` = ?,`chan` = ?,`postal_code` = ?,`extra_info` = ?,`nicknames` = ?,`slice` = ?,`map` = ?,`nested` = ?,`t` = ?,`name` = ? WHERE `id` = ?;", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), (int64)(v.Kind), (int64)(v.Type), (int64)(v.Chan), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name, v.ID} + return "UPDATE `user` SET `no` = ?,`joined_time` = ?,`address` = ?,`kind` = ?,`type` = ?,`chan` = ?,`postal_code` = ?,`extra_info` = ?,`nicknames` = ?,`slice` = ?,`map` = ?,`nested` = ?,`t` = ?,`name` = ? WHERE `id` = ?;", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), v.KindValue(), v.TypeValue(), v.ChanValue(), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name, v.ID} } func (v User) IDValue() any { return v.ID diff --git a/examples/testcase/core/generated.go.tpl b/examples/testcase/core/generated.go.tpl index d28ca2df..6f37fd57 100644 --- a/examples/testcase/core/generated.go.tpl +++ b/examples/testcase/core/generated.go.tpl @@ -80,13 +80,13 @@ func (User) SQLInsertPlaceholders(row int) string { return "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" // 14 } func (v User) InsertOneStmt() (string, []any) { - return "INSERT INTO `user` (`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), (int64)(v.Kind), (int64)(v.Type), (int64)(v.Chan), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name} + return "INSERT INTO `user` (`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), v.KindValue(), v.TypeValue(), v.ChanValue(), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name} } func (v User) FindOneByPKStmt() (string, []any) { return "SELECT `id`,`no`,`joined_time`,`address`,`kind`,`type`,`chan`,`postal_code`,`extra_info`,`nicknames`,`slice`,`map`,`nested`,`t`,`name` FROM `user` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v User) UpdateOneByPKStmt() (string, []any) { - return "UPDATE `user` SET `no` = ?,`joined_time` = ?,`address` = ?,`kind` = ?,`type` = ?,`chan` = ?,`postal_code` = ?,`extra_info` = ?,`nicknames` = ?,`slice` = ?,`map` = ?,`nested` = ?,`t` = ?,`name` = ? WHERE `id` = ?;", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), (int64)(v.Kind), (int64)(v.Type), (int64)(v.Chan), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name, v.ID} + return "UPDATE `user` SET `no` = ?,`joined_time` = ?,`address` = ?,`kind` = ?,`type` = ?,`chan` = ?,`postal_code` = ?,`extra_info` = ?,`nicknames` = ?,`slice` = ?,`map` = ?,`nested` = ?,`t` = ?,`name` = ? WHERE `id` = ?;", []any{(int64)(v.No), v.JoinedTime, encoding.JSONValue(v.Address), v.KindValue(), v.TypeValue(), v.ChanValue(), v.PostalCodeValue(), encoding.JSONValue(v.ExtraInfo), encoding.JSONValue(v.Nicknames), (sqltype.Float64Slice[float64])(v.Slice), encoding.JSONValue(v.Map), v.NestedValue(), v.embed.T, v.embed.deepNested.Name, v.ID} } func (v User) IDValue() any { return v.ID diff --git a/examples/testcase/struct-field/enum/generated.go b/examples/testcase/struct-field/enum/generated.go index 79d3c93c..3c733c79 100755 --- a/examples/testcase/struct-field/enum/generated.go +++ b/examples/testcase/struct-field/enum/generated.go @@ -10,16 +10,24 @@ import ( func (Custom) TableName() string { return "custom" } +func (Custom) HasPK() {} +func (v *Custom) SetPK(val int) { + v.ID = val +} +func (v Custom) PK() (string, int, any) { + return "id", 0, (int64)(v.ID) +} func (Custom) Columns() []string { - return []string{"text", "e", "ptr_str", "uint_16", "num"} // 5 + return []string{"id", "text", "e", "ptr_str", "uint_16", "num"} // 6 } func (v Custom) Values() []any { return []any{ - v.StrValue(), // 0 - text - v.EnumValue(), // 1 - e - v.PtrStrValue(), // 2 - ptr_str - v.Uint16Value(), // 3 - uint_16 - (int64)(v.Num), // 4 - num + (int64)(v.ID), // 0 - id + v.StrValue(), // 1 - text + v.EnumValue(), // 2 - e + v.PtrStrValue(), // 3 - ptr_str + v.Uint16Value(), // 4 - uint_16 + (int64)(v.Num), // 5 - num } } func (v *Custom) Addrs() []any { @@ -27,18 +35,28 @@ func (v *Custom) Addrs() []any { v.PtrStr = new(longText) } return []any{ - encoding.StringScanner[longText](&v.Str), // 0 - text - encoding.IntScanner[Enum](&v.Enum), // 1 - e - encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str - encoding.Uint16Scanner[uint16Enum](&v.Uint16), // 3 - uint_16 - encoding.Uint16Scanner[uint16](&v.Num), // 4 - num + encoding.IntScanner[int](&v.ID), // 0 - id + encoding.StringScanner[longText](&v.Str), // 1 - text + encoding.IntScanner[Enum](&v.Enum), // 2 - e + encoding.JSONScanner(&v.PtrStr), // 3 - ptr_str + encoding.Uint16Scanner[uint16Enum](&v.Uint16), // 4 - uint_16 + encoding.Uint16Scanner[uint16](&v.Num), // 5 - num } } func (Custom) SQLInsertPlaceholders(row int) string { - return "(?,?,?,?,?)" // 5 + return "(?,?,?,?,?,?)" // 6 } func (v Custom) InsertOneStmt() (string, []any) { - return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`uint_16`,`num`) VALUES (?,?,?,?,?);", v.Values() + return "INSERT INTO `custom` (`id`,`text`,`e`,`ptr_str`,`uint_16`,`num`) VALUES (?,?,?,?,?,?);", v.Values() +} +func (v Custom) FindOneByPKStmt() (string, []any) { + return "SELECT `id`,`text`,`e`,`ptr_str`,`uint_16`,`num` FROM `custom` WHERE `id` = ? LIMIT 1;", []any{(int64)(v.ID)} +} +func (v Custom) UpdateOneByPKStmt() (string, []any) { + return "UPDATE `custom` SET `text` = ?,`e` = ?,`ptr_str` = ?,`uint_16` = ?,`num` = ? WHERE `id` = ?;", []any{v.StrValue(), v.EnumValue(), v.PtrStrValue(), v.Uint16Value(), (int64)(v.Num), (int64)(v.ID)} +} +func (v Custom) IDValue() any { + return (int64)(v.ID) } func (v Custom) StrValue() any { if v.Str == "" { @@ -64,6 +82,9 @@ func (v Custom) Uint16Value() any { func (v Custom) NumValue() any { return (int64)(v.Num) } +func (v Custom) ColumnID() sequel.ColumnConvertClause[int] { + return sequel.Column("id", v.ID, convertIntToValue) +} func (v Custom) ColumnStr() sequel.ColumnConvertClause[longText] { return sequel.Column("text", v.Str, convertLongTextToValue) } @@ -98,6 +119,9 @@ func convertLongTextToValue(val longText) any { } return (string)(val) } +func convertIntToValue(val int) any { + return (int64)(val) +} func convertEnumToValue(val Enum) any { if val == 0 { return (int64)(success) diff --git a/examples/testcase/struct-field/enum/generated.go.tpl b/examples/testcase/struct-field/enum/generated.go.tpl index 79d3c93c..3c733c79 100644 --- a/examples/testcase/struct-field/enum/generated.go.tpl +++ b/examples/testcase/struct-field/enum/generated.go.tpl @@ -10,16 +10,24 @@ import ( func (Custom) TableName() string { return "custom" } +func (Custom) HasPK() {} +func (v *Custom) SetPK(val int) { + v.ID = val +} +func (v Custom) PK() (string, int, any) { + return "id", 0, (int64)(v.ID) +} func (Custom) Columns() []string { - return []string{"text", "e", "ptr_str", "uint_16", "num"} // 5 + return []string{"id", "text", "e", "ptr_str", "uint_16", "num"} // 6 } func (v Custom) Values() []any { return []any{ - v.StrValue(), // 0 - text - v.EnumValue(), // 1 - e - v.PtrStrValue(), // 2 - ptr_str - v.Uint16Value(), // 3 - uint_16 - (int64)(v.Num), // 4 - num + (int64)(v.ID), // 0 - id + v.StrValue(), // 1 - text + v.EnumValue(), // 2 - e + v.PtrStrValue(), // 3 - ptr_str + v.Uint16Value(), // 4 - uint_16 + (int64)(v.Num), // 5 - num } } func (v *Custom) Addrs() []any { @@ -27,18 +35,28 @@ func (v *Custom) Addrs() []any { v.PtrStr = new(longText) } return []any{ - encoding.StringScanner[longText](&v.Str), // 0 - text - encoding.IntScanner[Enum](&v.Enum), // 1 - e - encoding.JSONScanner(&v.PtrStr), // 2 - ptr_str - encoding.Uint16Scanner[uint16Enum](&v.Uint16), // 3 - uint_16 - encoding.Uint16Scanner[uint16](&v.Num), // 4 - num + encoding.IntScanner[int](&v.ID), // 0 - id + encoding.StringScanner[longText](&v.Str), // 1 - text + encoding.IntScanner[Enum](&v.Enum), // 2 - e + encoding.JSONScanner(&v.PtrStr), // 3 - ptr_str + encoding.Uint16Scanner[uint16Enum](&v.Uint16), // 4 - uint_16 + encoding.Uint16Scanner[uint16](&v.Num), // 5 - num } } func (Custom) SQLInsertPlaceholders(row int) string { - return "(?,?,?,?,?)" // 5 + return "(?,?,?,?,?,?)" // 6 } func (v Custom) InsertOneStmt() (string, []any) { - return "INSERT INTO `custom` (`text`,`e`,`ptr_str`,`uint_16`,`num`) VALUES (?,?,?,?,?);", v.Values() + return "INSERT INTO `custom` (`id`,`text`,`e`,`ptr_str`,`uint_16`,`num`) VALUES (?,?,?,?,?,?);", v.Values() +} +func (v Custom) FindOneByPKStmt() (string, []any) { + return "SELECT `id`,`text`,`e`,`ptr_str`,`uint_16`,`num` FROM `custom` WHERE `id` = ? LIMIT 1;", []any{(int64)(v.ID)} +} +func (v Custom) UpdateOneByPKStmt() (string, []any) { + return "UPDATE `custom` SET `text` = ?,`e` = ?,`ptr_str` = ?,`uint_16` = ?,`num` = ? WHERE `id` = ?;", []any{v.StrValue(), v.EnumValue(), v.PtrStrValue(), v.Uint16Value(), (int64)(v.Num), (int64)(v.ID)} +} +func (v Custom) IDValue() any { + return (int64)(v.ID) } func (v Custom) StrValue() any { if v.Str == "" { @@ -64,6 +82,9 @@ func (v Custom) Uint16Value() any { func (v Custom) NumValue() any { return (int64)(v.Num) } +func (v Custom) ColumnID() sequel.ColumnConvertClause[int] { + return sequel.Column("id", v.ID, convertIntToValue) +} func (v Custom) ColumnStr() sequel.ColumnConvertClause[longText] { return sequel.Column("text", v.Str, convertLongTextToValue) } @@ -98,6 +119,9 @@ func convertLongTextToValue(val longText) any { } return (string)(val) } +func convertIntToValue(val int) any { + return (int64)(val) +} func convertEnumToValue(val Enum) any { if val == 0 { return (int64)(success) diff --git a/examples/testcase/struct-field/enum/model.go b/examples/testcase/struct-field/enum/model.go index 19b925a9..d672b3fe 100644 --- a/examples/testcase/struct-field/enum/model.go +++ b/examples/testcase/struct-field/enum/model.go @@ -26,6 +26,7 @@ const ( ) type Custom struct { + ID int `sql:",pk"` Str longText `sql:"text"` Enum Enum `sql:"e"` PtrStr *longText `sql:"ptr_str"` diff --git a/examples/testcase/struct-field/pk/car.go b/examples/testcase/struct-field/pk/car.go index 032151ac..bc0ddba8 100644 --- a/examples/testcase/struct-field/pk/car.go +++ b/examples/testcase/struct-field/pk/car.go @@ -13,5 +13,6 @@ type Car struct { ID PK `sql:",pk"` No string Color Color + Year *int ManucDate time.Time } diff --git a/examples/testcase/struct-field/pk/generated.go b/examples/testcase/struct-field/pk/generated.go index 32f19855..3de90476 100755 --- a/examples/testcase/struct-field/pk/generated.go +++ b/examples/testcase/struct-field/pk/generated.go @@ -20,35 +20,40 @@ func (v Car) PK() (string, int, any) { return "id", 0, v.ID } func (Car) Columns() []string { - return []string{"id", "no", "color", "manuc_date"} // 4 + return []string{"id", "no", "color", "year", "manuc_date"} // 5 } func (v Car) Values() []any { return []any{ v.ID, // 0 - id v.No, // 1 - no v.ColorValue(), // 2 - color - v.ManucDate, // 3 - manuc_date + v.YearValue(), // 3 - year + v.ManucDate, // 4 - manuc_date } } func (v *Car) Addrs() []any { + if v.Year == nil { + v.Year = new(int) + } return []any{ encoding.Int64Scanner[PK](&v.ID), // 0 - id &v.No, // 1 - no encoding.IntScanner[Color](&v.Color), // 2 - color - &v.ManucDate, // 3 - manuc_date + encoding.IntScanner[int](&v.Year), // 3 - year + &v.ManucDate, // 4 - manuc_date } } func (Car) SQLInsertPlaceholders(row int) string { - return "(?,?,?,?)" // 4 + return "(?,?,?,?,?)" // 5 } func (v Car) InsertOneStmt() (string, []any) { - return "INSERT INTO `car` (`id`,`no`,`color`,`manuc_date`) VALUES (?,?,?,?);", v.Values() + return "INSERT INTO `car` (`id`,`no`,`color`,`year`,`manuc_date`) VALUES (?,?,?,?,?);", v.Values() } func (v Car) FindOneByPKStmt() (string, []any) { - return "SELECT `id`,`no`,`color`,`manuc_date` FROM `car` WHERE `id` = ? LIMIT 1;", []any{v.ID} + return "SELECT `id`,`no`,`color`,`year`,`manuc_date` FROM `car` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v Car) UpdateOneByPKStmt() (string, []any) { - return "UPDATE `car` SET `no` = ?,`color` = ?,`manuc_date` = ? WHERE `id` = ?;", []any{v.No, (int64)(v.Color), v.ManucDate, v.ID} + return "UPDATE `car` SET `no` = ?,`color` = ?,`year` = ?,`manuc_date` = ? WHERE `id` = ?;", []any{v.No, v.ColorValue(), v.YearValue(), v.ManucDate, v.ID} } func (v Car) IDValue() any { return v.ID @@ -59,6 +64,12 @@ func (v Car) NoValue() any { func (v Car) ColorValue() any { return (int64)(v.Color) } +func (v Car) YearValue() any { + if v.Year != nil { + return (int64)(*v.Year) + } + return nil +} func (v Car) ManucDateValue() any { return v.ManucDate } @@ -71,6 +82,9 @@ func (v Car) ColumnNo() sequel.ColumnClause[string] { func (v Car) ColumnColor() sequel.ColumnConvertClause[Color] { return sequel.Column("color", v.Color, convertColorToValue) } +func (v Car) ColumnYear() sequel.ColumnConvertClause[*int] { + return sequel.Column("year", v.Year, convertPtrintToValue) +} func (v Car) ColumnManucDate() sequel.ColumnClause[time.Time] { return sequel.PrimitiveColumn("manuc_date", v.ManucDate) } @@ -197,6 +211,12 @@ func convertUintToValue(val uint) any { func convertUint8ToValue(val uint8) any { return (int64)(val) } +func convertPtrintToValue(val *int) any { + if val != nil { + return (int64)(*val) + } + return nil +} func convertLongTextToValue(val LongText) any { return (string)(val) } diff --git a/examples/testcase/struct-field/pk/generated.go.tpl b/examples/testcase/struct-field/pk/generated.go.tpl index 32f19855..3de90476 100644 --- a/examples/testcase/struct-field/pk/generated.go.tpl +++ b/examples/testcase/struct-field/pk/generated.go.tpl @@ -20,35 +20,40 @@ func (v Car) PK() (string, int, any) { return "id", 0, v.ID } func (Car) Columns() []string { - return []string{"id", "no", "color", "manuc_date"} // 4 + return []string{"id", "no", "color", "year", "manuc_date"} // 5 } func (v Car) Values() []any { return []any{ v.ID, // 0 - id v.No, // 1 - no v.ColorValue(), // 2 - color - v.ManucDate, // 3 - manuc_date + v.YearValue(), // 3 - year + v.ManucDate, // 4 - manuc_date } } func (v *Car) Addrs() []any { + if v.Year == nil { + v.Year = new(int) + } return []any{ encoding.Int64Scanner[PK](&v.ID), // 0 - id &v.No, // 1 - no encoding.IntScanner[Color](&v.Color), // 2 - color - &v.ManucDate, // 3 - manuc_date + encoding.IntScanner[int](&v.Year), // 3 - year + &v.ManucDate, // 4 - manuc_date } } func (Car) SQLInsertPlaceholders(row int) string { - return "(?,?,?,?)" // 4 + return "(?,?,?,?,?)" // 5 } func (v Car) InsertOneStmt() (string, []any) { - return "INSERT INTO `car` (`id`,`no`,`color`,`manuc_date`) VALUES (?,?,?,?);", v.Values() + return "INSERT INTO `car` (`id`,`no`,`color`,`year`,`manuc_date`) VALUES (?,?,?,?,?);", v.Values() } func (v Car) FindOneByPKStmt() (string, []any) { - return "SELECT `id`,`no`,`color`,`manuc_date` FROM `car` WHERE `id` = ? LIMIT 1;", []any{v.ID} + return "SELECT `id`,`no`,`color`,`year`,`manuc_date` FROM `car` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v Car) UpdateOneByPKStmt() (string, []any) { - return "UPDATE `car` SET `no` = ?,`color` = ?,`manuc_date` = ? WHERE `id` = ?;", []any{v.No, (int64)(v.Color), v.ManucDate, v.ID} + return "UPDATE `car` SET `no` = ?,`color` = ?,`year` = ?,`manuc_date` = ? WHERE `id` = ?;", []any{v.No, v.ColorValue(), v.YearValue(), v.ManucDate, v.ID} } func (v Car) IDValue() any { return v.ID @@ -59,6 +64,12 @@ func (v Car) NoValue() any { func (v Car) ColorValue() any { return (int64)(v.Color) } +func (v Car) YearValue() any { + if v.Year != nil { + return (int64)(*v.Year) + } + return nil +} func (v Car) ManucDateValue() any { return v.ManucDate } @@ -71,6 +82,9 @@ func (v Car) ColumnNo() sequel.ColumnClause[string] { func (v Car) ColumnColor() sequel.ColumnConvertClause[Color] { return sequel.Column("color", v.Color, convertColorToValue) } +func (v Car) ColumnYear() sequel.ColumnConvertClause[*int] { + return sequel.Column("year", v.Year, convertPtrintToValue) +} func (v Car) ColumnManucDate() sequel.ColumnClause[time.Time] { return sequel.PrimitiveColumn("manuc_date", v.ManucDate) } @@ -197,6 +211,12 @@ func convertUintToValue(val uint) any { func convertUint8ToValue(val uint8) any { return (int64)(val) } +func convertPtrintToValue(val *int) any { + if val != nil { + return (int64)(*val) + } + return nil +} func convertLongTextToValue(val LongText) any { return (string)(val) } diff --git a/examples/testcase/struct-field/pk/uuid/generated.go b/examples/testcase/struct-field/pk/uuid/generated.go index 0a24e823..494fd700 100755 --- a/examples/testcase/struct-field/pk/uuid/generated.go +++ b/examples/testcase/struct-field/pk/uuid/generated.go @@ -10,6 +10,13 @@ import ( func (User) TableName() string { return "user" } +func (User) HasPK() {} +func (v *User) SetPK(val uuid.UUID) { + v.ID = val +} +func (v User) PK() (string, int, any) { + return "id", 0, v.ID +} func (User) Columns() []string { return []string{"id", "name"} // 2 } @@ -31,6 +38,12 @@ func (User) SQLInsertPlaceholders(row int) string { func (v User) InsertOneStmt() (string, []any) { return "INSERT INTO `user` (`id`,`name`) VALUES (?,?);", v.Values() } +func (v User) FindOneByPKStmt() (string, []any) { + return "SELECT `id`,`name` FROM `user` WHERE `id` = ? LIMIT 1;", []any{v.ID} +} +func (v User) UpdateOneByPKStmt() (string, []any) { + return "UPDATE `user` SET `name` = ? WHERE `id` = ?;", []any{v.Name, v.ID} +} func (v User) IDValue() any { return v.ID } diff --git a/examples/testcase/struct-field/pk/uuid/generated.go.tpl b/examples/testcase/struct-field/pk/uuid/generated.go.tpl index 0a24e823..494fd700 100644 --- a/examples/testcase/struct-field/pk/uuid/generated.go.tpl +++ b/examples/testcase/struct-field/pk/uuid/generated.go.tpl @@ -10,6 +10,13 @@ import ( func (User) TableName() string { return "user" } +func (User) HasPK() {} +func (v *User) SetPK(val uuid.UUID) { + v.ID = val +} +func (v User) PK() (string, int, any) { + return "id", 0, v.ID +} func (User) Columns() []string { return []string{"id", "name"} // 2 } @@ -31,6 +38,12 @@ func (User) SQLInsertPlaceholders(row int) string { func (v User) InsertOneStmt() (string, []any) { return "INSERT INTO `user` (`id`,`name`) VALUES (?,?);", v.Values() } +func (v User) FindOneByPKStmt() (string, []any) { + return "SELECT `id`,`name` FROM `user` WHERE `id` = ? LIMIT 1;", []any{v.ID} +} +func (v User) UpdateOneByPKStmt() (string, []any) { + return "UPDATE `user` SET `name` = ? WHERE `id` = ?;", []any{v.Name, v.ID} +} func (v User) IDValue() any { return v.ID } diff --git a/examples/testcase/struct-field/pk/uuid/uuid.go b/examples/testcase/struct-field/pk/uuid/uuid.go index 2faad6af..1f346d58 100644 --- a/examples/testcase/struct-field/pk/uuid/uuid.go +++ b/examples/testcase/struct-field/pk/uuid/uuid.go @@ -3,6 +3,6 @@ package main import "github.com/google/uuid" type User struct { - ID uuid.UUID + ID uuid.UUID `sql:"id,pk"` Name string } From 0826bd59b3dec34f746c5b0eefde677969266c16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:43:25 +0000 Subject: [PATCH 31/56] chore(deps): bump github.com/jaswdr/faker from 1.16.0 to 1.19.1 Bumps [github.com/jaswdr/faker](https://github.com/jaswdr/faker) from 1.16.0 to 1.19.1. - [Release notes](https://github.com/jaswdr/faker/releases) - [Commits](https://github.com/jaswdr/faker/compare/v1.16.0...v1.19.1) --- updated-dependencies: - dependency-name: github.com/jaswdr/faker dependency-version: 1.19.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 1 - cmd/sqlgen/go.sum | 2 -- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index db1272e3..f7ee1ad1 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -4,7 +4,6 @@ go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/Masterminds/semver/v3 v3.4.0 github.com/go-playground/validator/v10 v10.27.0 github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.18.0 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 173c622a..20fe5f4f 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -2,8 +2,6 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= -github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= -github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= diff --git a/examples/go.mod b/examples/go.mod index 73bc0830..3f8e386c 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -8,7 +8,7 @@ require ( github.com/gofrs/uuid/v5 v5.0.0 github.com/golang-migrate/migrate/v4 v4.19.0 github.com/google/uuid v1.6.0 - github.com/jaswdr/faker v1.16.0 + github.com/jaswdr/faker v1.19.1 github.com/lib/pq v1.10.9 github.com/mattn/go-sqlite3 v1.14.22 github.com/ory/dockertest/v3 v3.12.0 diff --git a/examples/go.sum b/examples/go.sum index ede855a5..401a1d14 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -88,8 +88,8 @@ github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= 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/jaswdr/faker v1.16.0 h1:5ZjusQbqIZwJnUymPirNKJI1yFCuozdSR9oeYPgD5Uk= -github.com/jaswdr/faker v1.16.0/go.mod h1:x7ZlyB1AZqwqKZgyQlnqEG8FDptmHlncA5u2zY/yi6w= +github.com/jaswdr/faker v1.19.1 h1:xBoz8/O6r0QAR8eEvKJZMdofxiRH+F0M/7MU9eNKhsM= +github.com/jaswdr/faker v1.19.1/go.mod h1:x7ZlyB1AZqwqKZgyQlnqEG8FDptmHlncA5u2zY/yi6w= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= From 5d79c456008a158cf229414056e815cdf136656d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:43:34 +0000 Subject: [PATCH 32/56] chore(deps): bump golang.org/x/tools from 0.37.0 to 0.44.0 Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.37.0 to 0.44.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.37.0...v0.44.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-version: 0.44.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 17 ++++++++--------- cmd/sqlgen/go.sum | 34 ++++++++++++++++------------------ examples/go.mod | 14 +++++++------- examples/go.sum | 28 ++++++++++++++-------------- go.mod | 4 +--- 5 files changed, 46 insertions(+), 51 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index db1272e3..afaa1bac 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -4,7 +4,6 @@ go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/Masterminds/semver/v3 v3.4.0 github.com/go-playground/validator/v10 v10.27.0 github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.18.0 @@ -15,7 +14,7 @@ require ( github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250911091902-df9299821621 - golang.org/x/tools v0.37.0 + golang.org/x/tools v0.44.0 ) require ( @@ -37,13 +36,13 @@ require ( github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/pflag v1.0.9 // indirect - golang.org/x/crypto v0.42.0 // indirect - golang.org/x/mod v0.28.0 // indirect - golang.org/x/net v0.44.0 // indirect - golang.org/x/sync v0.17.0 // indirect - golang.org/x/sys v0.36.0 // indirect - golang.org/x/term v0.35.0 // indirect - golang.org/x/text v0.29.0 // indirect + golang.org/x/crypto v0.50.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/term v0.42.0 // indirect + golang.org/x/text v0.36.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 173c622a..0e19d4fe 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -2,8 +2,6 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= -github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= -github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= @@ -81,22 +79,22 @@ github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= -golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= -golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= -golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= 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.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -106,23 +104,23 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= -golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= -golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= -golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/examples/go.mod b/examples/go.mod index 73bc0830..cdcc7749 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -61,14 +61,14 @@ require ( github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect - golang.org/x/crypto v0.42.0 // indirect + golang.org/x/crypto v0.50.0 // indirect golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect - golang.org/x/mod v0.28.0 // indirect - golang.org/x/net v0.44.0 // indirect - golang.org/x/sync v0.17.0 // indirect - golang.org/x/sys v0.36.0 // indirect - golang.org/x/text v0.29.0 // indirect - golang.org/x/tools v0.37.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/text v0.36.0 // indirect + golang.org/x/tools v0.44.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index ede855a5..7eed4f3c 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -175,27 +175,27 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= -golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= -golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= -golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -204,21 +204,21 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= -golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= -golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= 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= diff --git a/go.mod b/go.mod index c8bc3690..5a012adf 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/si3nloong/sqlgen -go 1.24.0 - -toolchain go1.24.1 +go 1.25.0 require github.com/stretchr/testify v1.11.1 From fe1ab6c32ae0503e41668ac3050dfafecf3ad64c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:43:38 +0000 Subject: [PATCH 33/56] chore(deps): bump github.com/goccy/go-yaml from 1.18.0 to 1.19.2 Bumps [github.com/goccy/go-yaml](https://github.com/goccy/go-yaml) from 1.18.0 to 1.19.2. - [Release notes](https://github.com/goccy/go-yaml/releases) - [Changelog](https://github.com/goccy/go-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/goccy/go-yaml/compare/v1.18.0...v1.19.2) --- updated-dependencies: - dependency-name: github.com/goccy/go-yaml dependency-version: 1.19.2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 3 +-- cmd/sqlgen/go.sum | 6 ++---- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index db1272e3..3ebcf13c 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -4,10 +4,9 @@ go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/Masterminds/semver/v3 v3.4.0 github.com/go-playground/validator/v10 v10.27.0 github.com/go-sql-driver/mysql v1.9.3 - github.com/goccy/go-yaml v1.18.0 + github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.9.2 github.com/mattn/go-sqlite3 v1.14.22 github.com/samber/lo v1.51.0 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 173c622a..4a995982 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -2,8 +2,6 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= -github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= -github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= @@ -26,8 +24,8 @@ github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHO github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= -github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= +github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= diff --git a/examples/go.mod b/examples/go.mod index 73bc0830..ec253080 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -38,7 +38,7 @@ require ( github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.27.0 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect - github.com/goccy/go-yaml v1.18.0 // indirect + github.com/goccy/go-yaml v1.19.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect diff --git a/examples/go.sum b/examples/go.sum index ede855a5..9a000fef 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -57,8 +57,8 @@ github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1 github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= -github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= +github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= From a48946090d8db68af755457ada2d920ecc40dd76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:43:54 +0000 Subject: [PATCH 34/56] chore(deps): bump github.com/samber/lo from 1.51.0 to 1.53.0 Bumps [github.com/samber/lo](https://github.com/samber/lo) from 1.51.0 to 1.53.0. - [Release notes](https://github.com/samber/lo/releases) - [Commits](https://github.com/samber/lo/compare/v1.51.0...v1.53.0) --- updated-dependencies: - dependency-name: github.com/samber/lo dependency-version: 1.53.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 3 +-- cmd/sqlgen/go.sum | 6 ++---- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index db1272e3..49b743f1 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -4,13 +4,12 @@ go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/Masterminds/semver/v3 v3.4.0 github.com/go-playground/validator/v10 v10.27.0 github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.18.0 github.com/jackc/pgx/v5 v5.9.2 github.com/mattn/go-sqlite3 v1.14.22 - github.com/samber/lo v1.51.0 + github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 github.com/spf13/cobra v1.10.1 github.com/stretchr/testify v1.11.1 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 173c622a..7b5d0d22 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -2,8 +2,6 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= -github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= -github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= @@ -66,8 +64,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI= -github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= +github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= +github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= diff --git a/examples/go.mod b/examples/go.mod index 73bc0830..e82e0112 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -56,7 +56,7 @@ require ( github.com/opencontainers/runc v1.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/samber/lo v1.51.0 // indirect + github.com/samber/lo v1.53.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect diff --git a/examples/go.sum b/examples/go.sum index ede855a5..5be056ad 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -132,8 +132,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI= -github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= +github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= +github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/si3nloong/sqlgen/cmd/sqlgen v0.0.0-20251006112000-22238720dfee h1:0zftL95shoh/4XaC1j9EwBpiRVvuaUdN18jaHNAtuXI= From 25d5b11b4da1bca40baea5fd38ae4972aa81460e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:47:06 +0000 Subject: [PATCH 35/56] chore(deps): bump github.com/Masterminds/semver/v3 from 3.4.0 to 3.5.0 Bumps [github.com/Masterminds/semver/v3](https://github.com/Masterminds/semver) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/Masterminds/semver/releases) - [Changelog](https://github.com/Masterminds/semver/blob/master/CHANGELOG.md) - [Commits](https://github.com/Masterminds/semver/compare/v3.4.0...v3.5.0) --- updated-dependencies: - dependency-name: github.com/Masterminds/semver/v3 dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index 8ea5a31f..36021a9c 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -23,7 +23,7 @@ require ( dario.cat/mergo v1.0.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/Masterminds/semver/v3 v3.4.0 // indirect + github.com/Masterminds/semver/v3 v3.5.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect diff --git a/examples/go.sum b/examples/go.sum index 917a0907..2fe73307 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -6,8 +6,8 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= -github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= +github.com/Masterminds/semver/v3 v3.5.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= From 5c976359bd790a024678510c487f9d6debb7069b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:47:36 +0000 Subject: [PATCH 36/56] chore(deps): bump github.com/paulmach/orb from 0.11.1 to 0.13.0 Bumps [github.com/paulmach/orb](https://github.com/paulmach/orb) from 0.11.1 to 0.13.0. - [Release notes](https://github.com/paulmach/orb/releases) - [Changelog](https://github.com/paulmach/orb/blob/master/CHANGELOG.md) - [Commits](https://github.com/paulmach/orb/compare/v0.11.1...v0.13.0) --- updated-dependencies: - dependency-name: github.com/paulmach/orb dependency-version: 0.13.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- examples/go.mod | 2 +- examples/go.sum | 33 ++------------------------------- 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index 8ea5a31f..1384d954 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -12,7 +12,7 @@ require ( github.com/lib/pq v1.10.9 github.com/mattn/go-sqlite3 v1.14.22 github.com/ory/dockertest/v3 v3.12.0 - github.com/paulmach/orb v0.11.1 + github.com/paulmach/orb v0.13.0 github.com/shopspring/decimal v1.4.0 github.com/si3nloong/sqlgen v1.0.0-beta.1.0.20251006073110-36639e879431 github.com/si3nloong/sqlgen/cmd/sqlgen v0.0.0-20251006112000-22238720dfee diff --git a/examples/go.sum b/examples/go.sum index 917a0907..137c9244 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -65,10 +65,6 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE= github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -92,12 +88,8 @@ github.com/jaswdr/faker v1.19.1 h1:xBoz8/O6r0QAR8eEvKJZMdofxiRH+F0M/7MU9eNKhsM= github.com/jaswdr/faker v1.19.1/go.mod h1:x7ZlyB1AZqwqKZgyQlnqEG8FDptmHlncA5u2zY/yi6w= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= @@ -112,7 +104,6 @@ github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -123,9 +114,8 @@ github.com/opencontainers/runc v1.2.3 h1:fxE7amCzfZflJO2lHXf4y/y8M1BoAqp+FVmG19o github.com/opencontainers/runc v1.2.3/go.mod h1:nSxcWUydXrsBZVYNSkTjoQ/N6rcyTtn+1SD5D4+kRIM= github.com/ory/dockertest/v3 v3.12.0 h1:3oV9d0sDzlSQfHtIaB5k6ghUCVMVLpAY8hwrqoCyRCw= github.com/ory/dockertest/v3 v3.12.0/go.mod h1:aKNDTva3cp8dwOWwb9cWuX84aH5akkxXRvO7KCwWVjE= -github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU= -github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= -github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= +github.com/paulmach/orb v0.13.0 h1:r7n7mQGGF+cj/CbcivEj9J3HGK+XR+yXnvzRdq9saIw= +github.com/paulmach/orb v0.13.0/go.mod h1:6scRWINywA2Jf05dcjOfLfxrUIMECvTSG2MVbRLxu/k= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -142,14 +132,9 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -157,10 +142,8 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= @@ -174,7 +157,6 @@ go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXe golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= @@ -187,30 +169,22 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -223,10 +197,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T 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= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= From d81a2d65e3c107e630032d54a63b87dd62934ef6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:49:24 +0000 Subject: [PATCH 37/56] chore(deps): bump github.com/golang-migrate/migrate/v4 Bumps [github.com/golang-migrate/migrate/v4](https://github.com/golang-migrate/migrate) from 4.19.0 to 4.19.1. - [Release notes](https://github.com/golang-migrate/migrate/releases) - [Commits](https://github.com/golang-migrate/migrate/compare/v4.19.0...v4.19.1) --- updated-dependencies: - dependency-name: github.com/golang-migrate/migrate/v4 dependency-version: 4.19.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 5 +++-- cmd/sqlgen/go.sum | 10 ++++++---- examples/go.mod | 10 ++++------ examples/go.sum | 27 ++++++++++++--------------- go.mod | 4 ++-- go.sum | 8 ++++---- 6 files changed, 31 insertions(+), 33 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 63ab370c..0a7657b8 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -20,10 +20,11 @@ require ( require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/creack/pty v1.1.18 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect @@ -34,7 +35,7 @@ require ( github.com/mattn/go-colorable v0.1.6 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/spf13/pflag v1.0.9 // indirect golang.org/x/crypto v0.50.0 // indirect golang.org/x/mod v0.35.0 // indirect diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 714bdf18..10c67276 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -10,8 +10,9 @@ github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -26,8 +27,8 @@ github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1 github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -59,8 +60,9 @@ github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= diff --git a/examples/go.mod b/examples/go.mod index 52d0d76c..7250818c 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -3,10 +3,10 @@ module github.com/si3nloong/sqlgen/examples go 1.25.0 require ( - cloud.google.com/go v0.115.0 + cloud.google.com/go v0.121.6 github.com/go-sql-driver/mysql v1.9.3 github.com/gofrs/uuid/v5 v5.0.0 - github.com/golang-migrate/migrate/v4 v4.19.0 + github.com/golang-migrate/migrate/v4 v4.19.1 github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 github.com/lib/pq v1.10.9 @@ -28,7 +28,7 @@ require ( github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/containerd/continuity v0.4.5 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/docker/cli v27.4.1+incompatible // indirect github.com/docker/docker v28.3.3+incompatible // indirect github.com/docker/go-connections v0.5.0 // indirect @@ -41,8 +41,6 @@ require ( github.com/goccy/go-yaml v1.19.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.9.2 // indirect @@ -55,7 +53,7 @@ require ( github.com/opencontainers/image-spec v1.1.0 // indirect github.com/opencontainers/runc v1.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/samber/lo v1.53.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect diff --git a/examples/go.sum b/examples/go.sum index 3ce41f5f..68d85b7c 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -1,5 +1,5 @@ -cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= -cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= +cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= +cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= @@ -23,8 +23,9 @@ github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmC github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dhui/dktest v0.4.6 h1:+DPKyScKSEp3VLtbMDHcUq6V5Lm5zfZZVb0Sk7Ahom4= github.com/dhui/dktest v0.4.6/go.mod h1:JHTSYDtKkvFNFHJKqCzVzqXecyv+tKt8EzceOmQOgbU= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= @@ -63,19 +64,14 @@ github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE= -github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/golang-migrate/migrate/v4 v4.19.1 h1:OCyb44lFuQfYXYLx1SCxPZQGU7mcaZ7gH9yH4jSFbBA= +github.com/golang-migrate/migrate/v4 v4.19.1/go.mod h1:CTcgfjxhaUtsLipnLoQRWCrjYXycRz/g5+RWDuYgPrE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= @@ -118,8 +114,9 @@ github.com/paulmach/orb v0.13.0 h1:r7n7mQGGF+cj/CbcivEj9J3HGK+XR+yXnvzRdq9saIw= github.com/paulmach/orb v0.13.0/go.mod h1:6scRWINywA2Jf05dcjOfLfxrUIMECvTSG2MVbRLxu/k= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= @@ -146,8 +143,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= diff --git a/go.mod b/go.mod index 5a012adf..43ac5453 100644 --- a/go.mod +++ b/go.mod @@ -5,9 +5,9 @@ go 1.25.0 require github.com/stretchr/testify v1.11.1 require ( - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/kr/pretty v0.3.0 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 8b27556b..e2f5fffb 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,6 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= @@ -9,8 +9,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= From fa0bb6780b6da778029e65417437c2369954a568 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:50:18 +0000 Subject: [PATCH 38/56] chore(deps): bump github.com/lib/pq from 1.10.9 to 1.12.3 Bumps [github.com/lib/pq](https://github.com/lib/pq) from 1.10.9 to 1.12.3. - [Release notes](https://github.com/lib/pq/releases) - [Changelog](https://github.com/lib/pq/blob/master/CHANGELOG.md) - [Commits](https://github.com/lib/pq/compare/v1.10.9...v1.12.3) --- updated-dependencies: - dependency-name: github.com/lib/pq dependency-version: 1.12.3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index 52d0d76c..84ea7abc 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang-migrate/migrate/v4 v4.19.0 github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 - github.com/lib/pq v1.10.9 + github.com/lib/pq v1.12.3 github.com/mattn/go-sqlite3 v1.14.22 github.com/ory/dockertest/v3 v3.12.0 github.com/paulmach/orb v0.13.0 diff --git a/examples/go.sum b/examples/go.sum index 3ce41f5f..a51580c9 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -94,8 +94,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= +github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= From dbd55daaf7e6bb29b15b167c3b1140bd390910a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 19:52:43 +0000 Subject: [PATCH 39/56] chore(deps): bump cloud.google.com/go from 0.121.6 to 0.123.0 Bumps [cloud.google.com/go](https://github.com/googleapis/google-cloud-go) from 0.121.6 to 0.123.0. - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/v0.121.6...v0.123.0) --- updated-dependencies: - dependency-name: cloud.google.com/go dependency-version: 0.123.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index bd2168d3..1049049b 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -3,7 +3,7 @@ module github.com/si3nloong/sqlgen/examples go 1.25.0 require ( - cloud.google.com/go v0.121.6 + cloud.google.com/go v0.123.0 github.com/go-sql-driver/mysql v1.9.3 github.com/gofrs/uuid/v5 v5.0.0 github.com/golang-migrate/migrate/v4 v4.19.1 diff --git a/examples/go.sum b/examples/go.sum index 6df7b21e..68d668f9 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -1,5 +1,5 @@ -cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= -cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= +cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= +cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= From 3e73d8730cf88c247b7bfaa38c68ca3d80b1d138 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 19:52:52 +0000 Subject: [PATCH 40/56] chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.22 to 1.14.44 Bumps [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) from 1.14.22 to 1.14.44. - [Release notes](https://github.com/mattn/go-sqlite3/releases) - [Commits](https://github.com/mattn/go-sqlite3/compare/v1.14.22...v1.14.44) --- updated-dependencies: - dependency-name: github.com/mattn/go-sqlite3 dependency-version: 1.14.44 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 4 ++-- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 0a7657b8..68a85077 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -8,7 +8,7 @@ require ( github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.9.2 - github.com/mattn/go-sqlite3 v1.14.22 + github.com/mattn/go-sqlite3 v1.14.44 github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 github.com/spf13/cobra v1.10.1 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 10c67276..890873a6 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -56,8 +56,8 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= -github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= +github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/examples/go.mod b/examples/go.mod index bd2168d3..b246c6a3 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 github.com/lib/pq v1.12.3 - github.com/mattn/go-sqlite3 v1.14.22 + github.com/mattn/go-sqlite3 v1.14.44 github.com/ory/dockertest/v3 v3.12.0 github.com/paulmach/orb v0.13.0 github.com/shopspring/decimal v1.4.0 diff --git a/examples/go.sum b/examples/go.sum index 6df7b21e..e21de84b 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -92,8 +92,8 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= -github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= +github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= From c576d7a3c5f85a1993d924bef7f15b3bb36c1752 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 19:53:17 +0000 Subject: [PATCH 41/56] chore(deps): bump github.com/go-playground/validator/v10 Bumps [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) from 10.27.0 to 10.30.2. - [Release notes](https://github.com/go-playground/validator/releases) - [Commits](https://github.com/go-playground/validator/compare/v10.27.0...v10.30.2) --- updated-dependencies: - dependency-name: github.com/go-playground/validator/v10 dependency-version: 10.30.2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 5 ++--- cmd/sqlgen/go.sum | 10 ++++------ examples/go.mod | 5 ++--- examples/go.sum | 10 ++++------ 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 0a7657b8..03bbd661 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -4,7 +4,7 @@ go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/go-playground/validator/v10 v10.27.0 + github.com/go-playground/validator/v10 v10.30.2 github.com/go-sql-driver/mysql v1.9.3 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.9.2 @@ -21,7 +21,7 @@ require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/creack/pty v1.1.18 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/gabriel-vasile/mimetype v1.4.8 // indirect + github.com/gabriel-vasile/mimetype v1.4.13 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/google/go-cmp v0.7.0 // indirect @@ -39,7 +39,6 @@ require ( github.com/spf13/pflag v1.0.9 // indirect golang.org/x/crypto v0.50.0 // indirect golang.org/x/mod v0.35.0 // indirect - golang.org/x/net v0.53.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.43.0 // indirect golang.org/x/term v0.42.0 // indirect diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 10c67276..28622bb5 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -13,16 +13,16 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= -github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= +github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= +github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= -github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= +github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= +github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= @@ -91,8 +91,6 @@ golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= 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.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= diff --git a/examples/go.mod b/examples/go.mod index bd2168d3..1ef65354 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -33,10 +33,10 @@ require ( github.com/docker/docker v28.3.3+incompatible // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.8 // indirect + github.com/gabriel-vasile/mimetype v1.4.13 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.27.0 // indirect + github.com/go-playground/validator/v10 v10.30.2 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/goccy/go-yaml v1.19.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -62,7 +62,6 @@ require ( golang.org/x/crypto v0.50.0 // indirect golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect golang.org/x/mod v0.35.0 // indirect - golang.org/x/net v0.53.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.43.0 // indirect golang.org/x/text v0.36.0 // indirect diff --git a/examples/go.sum b/examples/go.sum index 6df7b21e..7f270454 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -40,8 +40,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= -github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= +github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= +github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -52,8 +52,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= -github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= +github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= +github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= @@ -166,8 +166,6 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= From 2e9c8e31710fadfcf79ddeac382178a9bbe19f5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 19:53:22 +0000 Subject: [PATCH 42/56] chore(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.10.1 to 1.10.2. - [Release notes](https://github.com/spf13/cobra/releases) - [Commits](https://github.com/spf13/cobra/compare/v1.10.1...v1.10.2) --- updated-dependencies: - dependency-name: github.com/spf13/cobra dependency-version: 1.10.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 0a7657b8..618d71f6 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -11,7 +11,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.22 github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 - github.com/spf13/cobra v1.10.1 + github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250911091902-df9299821621 golang.org/x/tools v0.44.0 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 10c67276..f6698ea0 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -68,8 +68,8 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= -github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -79,6 +79,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= From b68d69e1615f3e7e4d9273af89c4ba8234fc095a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 19:56:20 +0000 Subject: [PATCH 43/56] chore(deps): bump github.com/go-sql-driver/mysql from 1.9.3 to 1.10.0 Bumps [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) from 1.9.3 to 1.10.0. - [Release notes](https://github.com/go-sql-driver/mysql/releases) - [Changelog](https://github.com/go-sql-driver/mysql/blob/master/CHANGELOG.md) - [Commits](https://github.com/go-sql-driver/mysql/compare/v1.9.3...v1.10.0) --- updated-dependencies: - dependency-name: github.com/go-sql-driver/mysql dependency-version: 1.10.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 4 ++-- cmd/sqlgen/go.sum | 8 ++++---- examples/go.mod | 4 ++-- examples/go.sum | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 1aff94c5..08765f48 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -5,7 +5,7 @@ go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 github.com/go-playground/validator/v10 v10.30.2 - github.com/go-sql-driver/mysql v1.9.3 + github.com/go-sql-driver/mysql v1.10.0 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.9.2 github.com/mattn/go-sqlite3 v1.14.44 @@ -18,7 +18,7 @@ require ( ) require ( - filippo.io/edwards25519 v1.1.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/creack/pty v1.1.18 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/gabriel-vasile/mimetype v1.4.13 // indirect diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 181b2711..f782f20a 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -1,5 +1,5 @@ -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= @@ -23,8 +23,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= -github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= +github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= diff --git a/examples/go.mod b/examples/go.mod index b02d5219..348967ba 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -4,7 +4,7 @@ go 1.25.0 require ( cloud.google.com/go v0.123.0 - github.com/go-sql-driver/mysql v1.9.3 + github.com/go-sql-driver/mysql v1.10.0 github.com/gofrs/uuid/v5 v5.0.0 github.com/golang-migrate/migrate/v4 v4.19.1 github.com/google/uuid v1.6.0 @@ -21,7 +21,7 @@ require ( require ( dario.cat/mergo v1.0.0 // indirect - filippo.io/edwards25519 v1.1.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Masterminds/semver/v3 v3.5.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/examples/go.sum b/examples/go.sum index 2eb81e76..87723cff 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= @@ -54,8 +54,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= -github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= +github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= From 8ab27270f2ea5951e266f870ad0ea0316da9afed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 19:57:45 +0000 Subject: [PATCH 44/56] chore(deps): bump github.com/gofrs/uuid/v5 from 5.0.0 to 5.4.0 Bumps [github.com/gofrs/uuid/v5](https://github.com/gofrs/uuid) from 5.0.0 to 5.4.0. - [Release notes](https://github.com/gofrs/uuid/releases) - [Commits](https://github.com/gofrs/uuid/compare/v5.0.0...v5.4.0) --- updated-dependencies: - dependency-name: github.com/gofrs/uuid/v5 dependency-version: 5.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index 348967ba..f4c6ae2b 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -5,7 +5,7 @@ go 1.25.0 require ( cloud.google.com/go v0.123.0 github.com/go-sql-driver/mysql v1.10.0 - github.com/gofrs/uuid/v5 v5.0.0 + github.com/gofrs/uuid/v5 v5.4.0 github.com/golang-migrate/migrate/v4 v4.19.1 github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 diff --git a/examples/go.sum b/examples/go.sum index 87723cff..1a2b6251 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -60,8 +60,8 @@ github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpG github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= -github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/uuid/v5 v5.4.0 h1:EfbpCTjqMuGyq5ZJwxqzn3Cbr2d0rUZU7v5ycAk/e/0= +github.com/gofrs/uuid/v5 v5.4.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-migrate/migrate/v4 v4.19.1 h1:OCyb44lFuQfYXYLx1SCxPZQGU7mcaZ7gH9yH4jSFbBA= From 7487da67b47bc1986b81ce74d1c34c0b2a89aca7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 19:58:48 +0000 Subject: [PATCH 45/56] chore(deps): bump golang.org/x/tools from 0.44.0 to 0.45.0 Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.44.0 to 0.45.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.44.0...v0.45.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-version: 0.45.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 6 +++--- cmd/sqlgen/go.sum | 12 ++++++------ examples/go.mod | 6 +++--- examples/go.sum | 12 ++++++------ 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 08765f48..32df3031 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -14,7 +14,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250911091902-df9299821621 - golang.org/x/tools v0.44.0 + golang.org/x/tools v0.45.0 ) require ( @@ -38,9 +38,9 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/spf13/pflag v1.0.9 // indirect golang.org/x/crypto v0.50.0 // indirect - golang.org/x/mod v0.35.0 // indirect + golang.org/x/mod v0.36.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect + golang.org/x/sys v0.44.0 // indirect golang.org/x/term v0.42.0 // indirect golang.org/x/text v0.36.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index f782f20a..e431dfaf 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -87,8 +87,8 @@ golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+ golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -105,8 +105,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= @@ -120,8 +120,8 @@ golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/examples/go.mod b/examples/go.mod index 348967ba..5df8969e 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -61,11 +61,11 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 // indirect golang.org/x/crypto v0.50.0 // indirect golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect - golang.org/x/mod v0.35.0 // indirect + golang.org/x/mod v0.36.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect + golang.org/x/sys v0.44.0 // indirect golang.org/x/text v0.36.0 // indirect - golang.org/x/tools v0.44.0 // indirect + golang.org/x/tools v0.45.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index 87723cff..18dc8599 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -160,8 +160,8 @@ golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8t golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -176,8 +176,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= @@ -186,8 +186,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= 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= From d623deb7ba45afc983edd3739152371efbfc4909 Mon Sep 17 00:00:00 2001 From: si3nloong Date: Sat, 16 May 2026 00:15:07 +0800 Subject: [PATCH 46/56] fix: `path` and update `Date` and `Time` handling --- cmd/sqlgen/codegen/codegen.go | 29 ++++---- .../testcase/struct-field/date/generated.go | 21 +++--- .../struct-field/date/generated.go.tpl | 21 +++--- .../testcase/struct-field/sql/generated.go | 14 ++-- .../struct-field/sql/generated.go.tpl | 14 ++-- examples/testcase/struct/alias/generated.go | 28 +++----- .../testcase/struct/alias/generated.go.tpl | 28 +++----- .../struct/embedded/imported/generated.go | 28 +++----- .../struct/embedded/imported/generated.go.tpl | 28 +++----- go.work.sum | 69 ++++++++++++------- 10 files changed, 129 insertions(+), 151 deletions(-) diff --git a/cmd/sqlgen/codegen/codegen.go b/cmd/sqlgen/codegen/codegen.go index f0765068..016878cc 100644 --- a/cmd/sqlgen/codegen/codegen.go +++ b/cmd/sqlgen/codegen/codegen.go @@ -8,7 +8,6 @@ import ( "log/slog" "os" "os/exec" - "path" "path/filepath" "regexp" "strings" @@ -151,17 +150,17 @@ func Walk(cfg *Config, walkFunc WalkFunc) error { } func Generate(c *Config) error { - vldr := validator.New() - if err := vldr.Struct(c); err != nil { - return err - } + // vldr := validator.New() + // if err := vldr.Struct(c); err != nil { + // return err + // } cfg := DefaultConfig() if c != nil { cfg = cfg.Merge(c) } - dialect, ok := dialect.GetDialect((string)(cfg.Driver)) + dialect, ok := dialect.GetDialect(string(cfg.Driver)) if !ok { return fmt.Errorf("sqlgen: missing dialect, please register dialect %q", cfg.Driver) } @@ -199,7 +198,7 @@ func Generate(c *Config) error { srcDir = srcDir + ".go" } - slog.Info("Processing", "dir", srcDir) + slog.Info(fmt.Sprintf("Processing %q", srcDir)) // File: examples/testdata/test.go // Folder: examples/testdata @@ -310,7 +309,7 @@ func parseGoPackage( rename := g.config.RenameFunc() for len(dirs) > 0 { - dir = path.Join(rootDir, dirs[0]) + dir = filepath.Join(rootDir, dirs[0]) dirs = dirs[1:] // Sometimes user might place db destination in the source as well @@ -318,8 +317,8 @@ func parseGoPackage( // if the file is exists in db folder pwd := fileutil.Getpwd() if idx := lo.IndexOf([]string{ - path.Join(pwd, g.config.Database.Dir), - path.Join(pwd, g.config.Database.Operator.Dir), + filepath.Join(pwd, g.config.Database.Dir), + filepath.Join(pwd, g.config.Database.Operator.Dir), }, dir); idx >= 0 { continue } @@ -330,7 +329,7 @@ func parseGoPackage( continue } - filename = path.Join(dir, g.config.Exec.Filename) + filename = filepath.Join(dir, g.config.Exec.Filename) // Unlink the generated file, ignore the error _ = syscall.Unlink(filename) @@ -374,7 +373,7 @@ func (g *Generator) parseGoPackageV2( rename := g.config.RenameFunc() for len(dirs) > 0 { - dir = path.Join(rootDir, dirs[0]) + dir = filepath.Join(rootDir, dirs[0]) dirs = dirs[1:] // Sometimes user might place db destination in the source as well @@ -382,8 +381,8 @@ func (g *Generator) parseGoPackageV2( // if the file is exists in db folder pwd := fileutil.Getpwd() if idx := lo.IndexOf([]string{ - path.Join(pwd, g.config.Database.Dir), - path.Join(pwd, g.config.Database.Operator.Dir), + filepath.Join(pwd, g.config.Database.Dir), + filepath.Join(pwd, g.config.Database.Operator.Dir), }, dir); idx >= 0 { continue } @@ -394,7 +393,7 @@ func (g *Generator) parseGoPackageV2( continue } - filename = path.Join(dir, g.config.Exec.Filename) + filename = filepath.Join(dir, g.config.Exec.Filename) // Unlink the generated file, ignore the error _ = syscall.Unlink(filename) diff --git a/examples/testcase/struct-field/date/generated.go b/examples/testcase/struct-field/date/generated.go index a088bf9f..df728b24 100755 --- a/examples/testcase/struct-field/date/generated.go +++ b/examples/testcase/struct-field/date/generated.go @@ -6,7 +6,6 @@ import ( "cloud.google.com/go/civil" "github.com/google/uuid" "github.com/si3nloong/sqlgen/sequel" - "github.com/si3nloong/sqlgen/sequel/encoding" ) func (User) TableName() string { @@ -24,14 +23,14 @@ func (User) Columns() []string { } func (v User) Values() []any { return []any{ - v.ID, // 0 - id - encoding.TextValue(v.BirthDate), // 1 - birth_date + v.ID, // 0 - id + v.BirthDate, // 1 - birth_date } } func (v *User) Addrs() []any { return []any{ - &v.ID, // 0 - id - encoding.TextScanner[civil.Date](&v.BirthDate), // 1 - birth_date + &v.ID, // 0 - id + &v.BirthDate, // 1 - birth_date } } func (User) SQLInsertPlaceholders(row int) string { @@ -44,21 +43,17 @@ func (v User) FindOneByPKStmt() (string, []any) { return "SELECT `id`,`birth_date` FROM `user` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v User) UpdateOneByPKStmt() (string, []any) { - return "UPDATE `user` SET `birth_date` = ? WHERE `id` = ?;", []any{encoding.TextValue(v.BirthDate), v.ID} + return "UPDATE `user` SET `birth_date` = ? WHERE `id` = ?;", []any{v.BirthDate, v.ID} } func (v User) IDValue() any { return v.ID } func (v User) BirthDateValue() any { - return encoding.TextValue(v.BirthDate) + return v.BirthDate } func (v User) ColumnID() sequel.ColumnClause[uuid.UUID] { return sequel.ValueColumn("id", v.ID) } -func (v User) ColumnBirthDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("birth_date", v.BirthDate, convertCivilDateToValue) -} - -func convertCivilDateToValue(val civil.Date) any { - return encoding.TextValue(val) +func (v User) ColumnBirthDate() sequel.ColumnClause[civil.Date] { + return sequel.ValueColumn("birth_date", v.BirthDate) } diff --git a/examples/testcase/struct-field/date/generated.go.tpl b/examples/testcase/struct-field/date/generated.go.tpl index a088bf9f..df728b24 100644 --- a/examples/testcase/struct-field/date/generated.go.tpl +++ b/examples/testcase/struct-field/date/generated.go.tpl @@ -6,7 +6,6 @@ import ( "cloud.google.com/go/civil" "github.com/google/uuid" "github.com/si3nloong/sqlgen/sequel" - "github.com/si3nloong/sqlgen/sequel/encoding" ) func (User) TableName() string { @@ -24,14 +23,14 @@ func (User) Columns() []string { } func (v User) Values() []any { return []any{ - v.ID, // 0 - id - encoding.TextValue(v.BirthDate), // 1 - birth_date + v.ID, // 0 - id + v.BirthDate, // 1 - birth_date } } func (v *User) Addrs() []any { return []any{ - &v.ID, // 0 - id - encoding.TextScanner[civil.Date](&v.BirthDate), // 1 - birth_date + &v.ID, // 0 - id + &v.BirthDate, // 1 - birth_date } } func (User) SQLInsertPlaceholders(row int) string { @@ -44,21 +43,17 @@ func (v User) FindOneByPKStmt() (string, []any) { return "SELECT `id`,`birth_date` FROM `user` WHERE `id` = ? LIMIT 1;", []any{v.ID} } func (v User) UpdateOneByPKStmt() (string, []any) { - return "UPDATE `user` SET `birth_date` = ? WHERE `id` = ?;", []any{encoding.TextValue(v.BirthDate), v.ID} + return "UPDATE `user` SET `birth_date` = ? WHERE `id` = ?;", []any{v.BirthDate, v.ID} } func (v User) IDValue() any { return v.ID } func (v User) BirthDateValue() any { - return encoding.TextValue(v.BirthDate) + return v.BirthDate } func (v User) ColumnID() sequel.ColumnClause[uuid.UUID] { return sequel.ValueColumn("id", v.ID) } -func (v User) ColumnBirthDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("birth_date", v.BirthDate, convertCivilDateToValue) -} - -func convertCivilDateToValue(val civil.Date) any { - return encoding.TextValue(val) +func (v User) ColumnBirthDate() sequel.ColumnClause[civil.Date] { + return sequel.ValueColumn("birth_date", v.BirthDate) } diff --git a/examples/testcase/struct-field/sql/generated.go b/examples/testcase/struct-field/sql/generated.go index 427d69e8..9a6b99ce 100755 --- a/examples/testcase/struct-field/sql/generated.go +++ b/examples/testcase/struct-field/sql/generated.go @@ -49,11 +49,11 @@ func (v *AutoPkLocation) Addrs() []any { v.PtrDate = new(civil.Date) } return []any{ - encoding.Uint64Scanner[uint64](&v.ID), // 0 - id - ewkb.Scanner(&v.GeoPoint), // 1 - geo_point - encoding.JSONScanner(&v.PtrGeoPoint), // 2 - ptr_geo_point - encoding.PtrScanner(&v.PtrUUID), // 3 - ptr_uuid - encoding.TextScanner[civil.Date](&v.PtrDate), // 4 - ptr_date + encoding.Uint64Scanner[uint64](&v.ID), // 0 - id + ewkb.Scanner(&v.GeoPoint), // 1 - geo_point + encoding.JSONScanner(&v.PtrGeoPoint), // 2 - ptr_geo_point + encoding.PtrScanner(&v.PtrUUID), // 3 - ptr_uuid + encoding.PtrScanner(&v.PtrDate), // 4 - ptr_date } } func (AutoPkLocation) SQLInsertColumns() string { @@ -94,7 +94,7 @@ func (v AutoPkLocation) PtrUUIDValue() any { } func (v AutoPkLocation) PtrDateValue() any { if v.PtrDate != nil { - return encoding.TextValue(*v.PtrDate) + return *v.PtrDate } return nil } @@ -192,7 +192,7 @@ func convertPtrorbPointToValue(val *orb.Point) any { } func convertPtrcivilDateToValue(val *civil.Date) any { if val != nil { - return encoding.TextValue(*val) + return *val } return nil } diff --git a/examples/testcase/struct-field/sql/generated.go.tpl b/examples/testcase/struct-field/sql/generated.go.tpl index 427d69e8..9a6b99ce 100644 --- a/examples/testcase/struct-field/sql/generated.go.tpl +++ b/examples/testcase/struct-field/sql/generated.go.tpl @@ -49,11 +49,11 @@ func (v *AutoPkLocation) Addrs() []any { v.PtrDate = new(civil.Date) } return []any{ - encoding.Uint64Scanner[uint64](&v.ID), // 0 - id - ewkb.Scanner(&v.GeoPoint), // 1 - geo_point - encoding.JSONScanner(&v.PtrGeoPoint), // 2 - ptr_geo_point - encoding.PtrScanner(&v.PtrUUID), // 3 - ptr_uuid - encoding.TextScanner[civil.Date](&v.PtrDate), // 4 - ptr_date + encoding.Uint64Scanner[uint64](&v.ID), // 0 - id + ewkb.Scanner(&v.GeoPoint), // 1 - geo_point + encoding.JSONScanner(&v.PtrGeoPoint), // 2 - ptr_geo_point + encoding.PtrScanner(&v.PtrUUID), // 3 - ptr_uuid + encoding.PtrScanner(&v.PtrDate), // 4 - ptr_date } } func (AutoPkLocation) SQLInsertColumns() string { @@ -94,7 +94,7 @@ func (v AutoPkLocation) PtrUUIDValue() any { } func (v AutoPkLocation) PtrDateValue() any { if v.PtrDate != nil { - return encoding.TextValue(*v.PtrDate) + return *v.PtrDate } return nil } @@ -192,7 +192,7 @@ func convertPtrorbPointToValue(val *orb.Point) any { } func convertPtrcivilDateToValue(val *civil.Date) any { if val != nil { - return encoding.TextValue(*val) + return *val } return nil } diff --git a/examples/testcase/struct/alias/generated.go b/examples/testcase/struct/alias/generated.go index f33222e7..37c4bd90 100755 --- a/examples/testcase/struct/alias/generated.go +++ b/examples/testcase/struct/alias/generated.go @@ -5,7 +5,6 @@ package aliasstruct import ( "cloud.google.com/go/civil" "github.com/si3nloong/sqlgen/sequel" - "github.com/si3nloong/sqlgen/sequel/encoding" ) func (A) Columns() []string { @@ -13,14 +12,14 @@ func (A) Columns() []string { } func (v A) Values() []any { return []any{ - encoding.TextValue(v.Date), // 0 - date - encoding.TextValue(v.Time), // 1 - time + v.Date, // 0 - date + v.Time, // 1 - time } } func (v *A) Addrs() []any { return []any{ - encoding.TextScanner[civil.Date](&v.Date), // 0 - date - encoding.TextScanner[civil.Time](&v.Time), // 1 - time + &v.Date, // 0 - date + &v.Time, // 1 - time } } func (A) SQLInsertPlaceholders(row int) string { @@ -30,16 +29,16 @@ func (v A) InsertOneStmt() (string, []any) { return "INSERT INTO " + v.TableName() + " (`date`,`time`) VALUES (?,?);", v.Values() } func (v A) DateValue() any { - return encoding.TextValue(v.Date) + return v.Date } func (v A) TimeValue() any { - return encoding.TextValue(v.Time) + return v.Time } -func (v A) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.Date, convertCivilDateToValue) +func (v A) ColumnDate() sequel.ColumnClause[civil.Date] { + return sequel.ValueColumn("date", v.Date) } -func (v A) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.Time, convertCivilTimeToValue) +func (v A) ColumnTime() sequel.ColumnClause[civil.Time] { + return sequel.ValueColumn("time", v.Time) } func (C) TableName() string { @@ -78,10 +77,3 @@ func (v C) ColumnString() sequel.ColumnClause[string] { func (v C) ColumnValid() sequel.ColumnClause[bool] { return sequel.PrimitiveColumn("valid", v.Valid) } - -func convertCivilTimeToValue(val civil.Time) any { - return encoding.TextValue(val) -} -func convertCivilDateToValue(val civil.Date) any { - return encoding.TextValue(val) -} diff --git a/examples/testcase/struct/alias/generated.go.tpl b/examples/testcase/struct/alias/generated.go.tpl index f33222e7..37c4bd90 100644 --- a/examples/testcase/struct/alias/generated.go.tpl +++ b/examples/testcase/struct/alias/generated.go.tpl @@ -5,7 +5,6 @@ package aliasstruct import ( "cloud.google.com/go/civil" "github.com/si3nloong/sqlgen/sequel" - "github.com/si3nloong/sqlgen/sequel/encoding" ) func (A) Columns() []string { @@ -13,14 +12,14 @@ func (A) Columns() []string { } func (v A) Values() []any { return []any{ - encoding.TextValue(v.Date), // 0 - date - encoding.TextValue(v.Time), // 1 - time + v.Date, // 0 - date + v.Time, // 1 - time } } func (v *A) Addrs() []any { return []any{ - encoding.TextScanner[civil.Date](&v.Date), // 0 - date - encoding.TextScanner[civil.Time](&v.Time), // 1 - time + &v.Date, // 0 - date + &v.Time, // 1 - time } } func (A) SQLInsertPlaceholders(row int) string { @@ -30,16 +29,16 @@ func (v A) InsertOneStmt() (string, []any) { return "INSERT INTO " + v.TableName() + " (`date`,`time`) VALUES (?,?);", v.Values() } func (v A) DateValue() any { - return encoding.TextValue(v.Date) + return v.Date } func (v A) TimeValue() any { - return encoding.TextValue(v.Time) + return v.Time } -func (v A) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.Date, convertCivilDateToValue) +func (v A) ColumnDate() sequel.ColumnClause[civil.Date] { + return sequel.ValueColumn("date", v.Date) } -func (v A) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.Time, convertCivilTimeToValue) +func (v A) ColumnTime() sequel.ColumnClause[civil.Time] { + return sequel.ValueColumn("time", v.Time) } func (C) TableName() string { @@ -78,10 +77,3 @@ func (v C) ColumnString() sequel.ColumnClause[string] { func (v C) ColumnValid() sequel.ColumnClause[bool] { return sequel.PrimitiveColumn("valid", v.Valid) } - -func convertCivilTimeToValue(val civil.Time) any { - return encoding.TextValue(val) -} -func convertCivilDateToValue(val civil.Date) any { - return encoding.TextValue(val) -} diff --git a/examples/testcase/struct/embedded/imported/generated.go b/examples/testcase/struct/embedded/imported/generated.go index 29316e86..54692d9a 100755 --- a/examples/testcase/struct/embedded/imported/generated.go +++ b/examples/testcase/struct/embedded/imported/generated.go @@ -5,7 +5,6 @@ package embedded import ( "cloud.google.com/go/civil" "github.com/si3nloong/sqlgen/sequel" - "github.com/si3nloong/sqlgen/sequel/encoding" ) func (B) TableName() string { @@ -16,14 +15,14 @@ func (B) Columns() []string { } func (v B) Values() []any { return []any{ - encoding.TextValue(v.DateTime.Date), // 0 - date - encoding.TextValue(v.DateTime.Time), // 1 - time + v.DateTime.Date, // 0 - date + v.DateTime.Time, // 1 - time } } func (v *B) Addrs() []any { return []any{ - encoding.TextScanner[civil.Date](&v.DateTime.Date), // 0 - date - encoding.TextScanner[civil.Time](&v.DateTime.Time), // 1 - time + &v.DateTime.Date, // 0 - date + &v.DateTime.Time, // 1 - time } } func (B) SQLInsertPlaceholders(row int) string { @@ -33,21 +32,14 @@ func (v B) InsertOneStmt() (string, []any) { return "INSERT INTO `b` (`date`,`time`) VALUES (?,?);", v.Values() } func (v B) DateValue() any { - return encoding.TextValue(v.DateTime.Date) + return v.DateTime.Date } func (v B) TimeValue() any { - return encoding.TextValue(v.DateTime.Time) + return v.DateTime.Time } -func (v B) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.DateTime.Date, convertCivilDateToValue) +func (v B) ColumnDate() sequel.ColumnClause[civil.Date] { + return sequel.ValueColumn("date", v.DateTime.Date) } -func (v B) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.DateTime.Time, convertCivilTimeToValue) -} - -func convertCivilTimeToValue(val civil.Time) any { - return encoding.TextValue(val) -} -func convertCivilDateToValue(val civil.Date) any { - return encoding.TextValue(val) +func (v B) ColumnTime() sequel.ColumnClause[civil.Time] { + return sequel.ValueColumn("time", v.DateTime.Time) } diff --git a/examples/testcase/struct/embedded/imported/generated.go.tpl b/examples/testcase/struct/embedded/imported/generated.go.tpl index 29316e86..54692d9a 100644 --- a/examples/testcase/struct/embedded/imported/generated.go.tpl +++ b/examples/testcase/struct/embedded/imported/generated.go.tpl @@ -5,7 +5,6 @@ package embedded import ( "cloud.google.com/go/civil" "github.com/si3nloong/sqlgen/sequel" - "github.com/si3nloong/sqlgen/sequel/encoding" ) func (B) TableName() string { @@ -16,14 +15,14 @@ func (B) Columns() []string { } func (v B) Values() []any { return []any{ - encoding.TextValue(v.DateTime.Date), // 0 - date - encoding.TextValue(v.DateTime.Time), // 1 - time + v.DateTime.Date, // 0 - date + v.DateTime.Time, // 1 - time } } func (v *B) Addrs() []any { return []any{ - encoding.TextScanner[civil.Date](&v.DateTime.Date), // 0 - date - encoding.TextScanner[civil.Time](&v.DateTime.Time), // 1 - time + &v.DateTime.Date, // 0 - date + &v.DateTime.Time, // 1 - time } } func (B) SQLInsertPlaceholders(row int) string { @@ -33,21 +32,14 @@ func (v B) InsertOneStmt() (string, []any) { return "INSERT INTO `b` (`date`,`time`) VALUES (?,?);", v.Values() } func (v B) DateValue() any { - return encoding.TextValue(v.DateTime.Date) + return v.DateTime.Date } func (v B) TimeValue() any { - return encoding.TextValue(v.DateTime.Time) + return v.DateTime.Time } -func (v B) ColumnDate() sequel.ColumnConvertClause[civil.Date] { - return sequel.Column("date", v.DateTime.Date, convertCivilDateToValue) +func (v B) ColumnDate() sequel.ColumnClause[civil.Date] { + return sequel.ValueColumn("date", v.DateTime.Date) } -func (v B) ColumnTime() sequel.ColumnConvertClause[civil.Time] { - return sequel.Column("time", v.DateTime.Time, convertCivilTimeToValue) -} - -func convertCivilTimeToValue(val civil.Time) any { - return encoding.TextValue(val) -} -func convertCivilDateToValue(val civil.Date) any { - return encoding.TextValue(val) +func (v B) ColumnTime() sequel.ColumnClause[civil.Time] { + return sequel.ValueColumn("time", v.DateTime.Time) } diff --git a/go.work.sum b/go.work.sum index b7e84ddd..523e1313 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,4 +1,5 @@ cel.dev/expr v0.16.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go/accessapproval v1.7.11/go.mod h1:KGK3+CLDWm4BvjN0wFtZqdFUGhxlTvTF6PhAwQJGL4M= cloud.google.com/go/accesscontextmanager v1.8.11/go.mod h1:nwPysISS3KR5qXipAU6cW/UbDavDdTBBgPohbkhGSok= @@ -14,8 +15,10 @@ cloud.google.com/go/asset v1.19.5/go.mod h1:sqyLOYaLLfc4ACcn3YxqHno+J7lRt9NJTdO5 cloud.google.com/go/assuredworkloads v1.11.11/go.mod h1:vaYs6+MHqJvLKYgZBOsuuOhBgNNIguhRU0Kt7JTGcnI= cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= cloud.google.com/go/auth v0.8.0/go.mod h1:qGVp/Y3kDRSDZ5gFD/XPUfYQ9xW1iI7q8RIRoCyBbJc= +cloud.google.com/go/auth v0.16.4/go.mod h1:j10ncYwjX/g3cdX7GpEzsdM+d+ZNsXAbb6qXA7p1Y5M= cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.13.11/go.mod h1:oMJdXRDOVC+Eq3PnGhhxSut5Hm9TSyVx1aLEOgerOw8= cloud.google.com/go/baremetalsolution v1.2.10/go.mod h1:eO2c2NMRy5ytcNPhG78KPsWGNsX5W/tUsCOWmYihx6I= cloud.google.com/go/batch v1.9.2/go.mod h1:smqwS4sleDJVAEzBt/TzFfXLktmWjFNugGDWl8coKX4= @@ -32,6 +35,7 @@ cloud.google.com/go/cloudtasks v1.12.12/go.mod h1:8UmM+duMrQpzzRREo0i3x3TrFjsgI/ cloud.google.com/go/compute v1.27.4/go.mod h1:7JZS+h21ERAGHOy5qb7+EPyXlQwzshzrx1x6L9JhTqU= cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= +cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= cloud.google.com/go/contactcenterinsights v1.13.6/go.mod h1:mL+DbN3pMQGaAbDC4wZhryLciwSwHf5Tfk4Itr72Zyk= cloud.google.com/go/container v1.38.0/go.mod h1:U0uPBvkVWOJGY/0qTVuPS7NeafFEUsHSPqT5pB8+fCY= cloud.google.com/go/containeranalysis v0.12.1/go.mod h1:+/lcJIQSFt45TC0N9Nq7/dPbl0isk6hnC4EvBBqyXsM= @@ -64,6 +68,7 @@ cloud.google.com/go/gkemulticloud v1.2.4/go.mod h1:PjTtoKLQpIRztrL+eKQw8030/S4c7 cloud.google.com/go/gsuiteaddons v1.6.11/go.mod h1:U7mk5PLBzDpHhgHv5aJkuvLp9RQzZFpa8hgWAB+xVIk= cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= cloud.google.com/go/iam v1.1.12/go.mod h1:9LDX8J7dN5YRyzVHxwQzrQs9opFFqn0Mxs9nAeB+Hhg= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= cloud.google.com/go/iap v1.9.10/go.mod h1:pO0FEirrhMOT1H0WVwpD5dD9r3oBhvsunyBQtNXzzc0= cloud.google.com/go/ids v1.4.11/go.mod h1:+ZKqWELpJm8WcRRsSvKZWUdkriu4A3XsLLzToTv3418= cloud.google.com/go/iot v1.7.11/go.mod h1:0vZJOqFy9kVLbUXwTP95e0dWHakfR4u5IWqsKMGIfHk= @@ -73,12 +78,14 @@ cloud.google.com/go/lifesciences v0.9.11/go.mod h1:NMxu++FYdv55TxOBEvLIhiAvah8ac cloud.google.com/go/logging v1.11.0/go.mod h1:5LDiJC/RxTt+fHc1LAt20R9TKiUTReDg6RuuFOZ67+A= cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= cloud.google.com/go/longrunning v0.5.11/go.mod h1:rDn7//lmlfWV1Dx6IB4RatCPenTwwmqXuiP0/RgoEO4= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= cloud.google.com/go/managedidentities v1.6.11/go.mod h1:df+8oZ1D4Eri+NrcpuiR5Hd6MGgiMqn0ZCzNmBYPS0A= cloud.google.com/go/maps v1.11.5/go.mod h1:MOS/NN0L6b7Kumr8bLux9XTpd8+D54DYxBMUjq+XfXs= cloud.google.com/go/mediatranslation v0.8.11/go.mod h1:3sNEm0fx61eHk7rfzBzrljVV9XKr931xI3OFacQBVFg= cloud.google.com/go/memcache v1.10.11/go.mod h1:ubJ7Gfz/xQawQY5WO5pht4Q0dhzXBFeEszAeEJnwBHU= cloud.google.com/go/metastore v1.13.10/go.mod h1:RPhMnBxUmTLT1fN7fNbPqtH5EoGHueDxubmJ1R1yT84= cloud.google.com/go/monitoring v1.20.3/go.mod h1:GPIVIdNznIdGqEjtRKQWTLcUeRnPjZW85szouimiczU= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= cloud.google.com/go/networkconnectivity v1.14.10/go.mod h1:f7ZbGl4CV08DDb7lw+NmMXQTKKjMhgCEEwFbEukWuOY= cloud.google.com/go/networkmanagement v1.13.6/go.mod h1:WXBijOnX90IFb6sberjnGrVtZbgDNcPDUYOlGXmG8+4= cloud.google.com/go/networksecurity v0.9.11/go.mod h1:4xbpOqCwplmFgymAjPFM6ZIplVC6+eQ4m7sIiEq9oJA= @@ -109,9 +116,11 @@ cloud.google.com/go/servicedirectory v1.11.11/go.mod h1:pnynaftaj9LmRLIc6t3r7r7r cloud.google.com/go/shell v1.7.11/go.mod h1:SywZHWac7onifaT9m9MmegYp3GgCLm+tgk+w2lXK8vg= cloud.google.com/go/spanner v1.56.0/go.mod h1:DndqtUKQAt3VLuV2Le+9Y3WTnq5cNKrnLb/Piqcj+h0= cloud.google.com/go/spanner v1.65.0/go.mod h1:dQGB+w5a67gtyE3qSKPPxzniedrnAmV6tewQeBY7Hxs= +cloud.google.com/go/spanner v1.85.0/go.mod h1:9zhmtOEoYV06nE4Orbin0dc/ugHzZW9yXuvaM61rpxs= cloud.google.com/go/speech v1.24.0/go.mod h1:HcVyIh5jRXM5zDMcbFCW+DF2uK/MSGN6Rastt6bj1ic= cloud.google.com/go/storage v1.41.0/go.mod h1:J1WCa/Z2FcgdEDuPUY8DxT5I+d9mFKsCepp5vR6Sq80= cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= +cloud.google.com/go/storage v1.56.0/go.mod h1:Tpuj6t4NweCLzlNbw9Z9iwxEkrSem20AetIeH/shgVU= cloud.google.com/go/storagetransfer v1.10.10/go.mod h1:8+nX+WgQ2ZJJnK8e+RbK/zCXk8T7HdwyQAJeY7cEcm0= cloud.google.com/go/talent v1.6.12/go.mod h1:nT9kNVuJhZX2QgqKZS6t6eCWZs5XEBYRBv6bIMnPmo4= cloud.google.com/go/texttospeech v1.7.11/go.mod h1:Ua125HU+WT2IkIo5MzQtuNpNEk72soShJQVdorZ1SAE= @@ -138,6 +147,10 @@ github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSY github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= +github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= @@ -166,12 +179,9 @@ github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido69INQaVO6d87Qn543Xr6nooe9Kz7oBFM= github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cockroachdb/cockroach-go/v2 v2.1.1/go.mod h1:7NtUnP6eK+l6k483WSYNrq3Kb23bWV10IRV1TyeSpwM= github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= -github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= -github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= -github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= -github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cyphar/filepath-securejoin v0.3.5/go.mod h1:edhVd3c6OXKjUmSrVa/tGJRS9joFTxlslFCAyaxigkE= @@ -180,31 +190,25 @@ github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ= github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dhui/dktest v0.4.6 h1:+DPKyScKSEp3VLtbMDHcUq6V5Lm5zfZZVb0Sk7Ahom4= -github.com/dhui/dktest v0.4.6/go.mod h1:JHTSYDtKkvFNFHJKqCzVzqXecyv+tKt8EzceOmQOgbU= -github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= -github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvsekhvalnov/jose2go v1.7.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= -github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= @@ -245,10 +249,13 @@ github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1 github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= @@ -279,8 +286,6 @@ github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiT github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mrunalp/fileutils v0.5.1/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mutecomm/go-sqlcipher/v4 v4.4.0/go.mod h1:PyN04SaWalavxRGH9E8ZftG6Ju7rsPrGmQRjrEaVpiY= @@ -291,6 +296,7 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= +github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= github.com/pierrec/lz4/v4 v4.1.16/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= @@ -309,6 +315,7 @@ github.com/si3nloong/sqlgen/cmd/sqlgen v0.0.0-20250914115358-f853cea1f7ae/go.mod github.com/si3nloong/sqlgen/cmd/sqlgen v0.0.0-20250915031732-2c5dee8403c2/go.mod h1:IFAQG74Eb1YTiKxcmGpaUb6Tu5IJDv8O0uIwyiqieoQ= github.com/si3nloong/sqlgen/cmd/sqlgen v0.0.0-20250916080036-b910b4151209/go.mod h1:IFAQG74Eb1YTiKxcmGpaUb6Tu5IJDv8O0uIwyiqieoQ= github.com/snowflakedb/gosnowflake v1.6.19/go.mod h1:FM1+PWUdwB9udFDsXdfD58NONC0m+MlOSmQRvimobSM= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= @@ -320,27 +327,30 @@ github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOH github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= +go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= @@ -364,10 +374,12 @@ golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= 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.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= @@ -379,6 +391,7 @@ golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw= golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053/go.mod h1:+nZKN+XVh4LCiA9DV3ywrzN4gumyCnKjau3NGb9SGoE= +golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6/go.mod h1:Eqhaxk/wZsWEH8CRxLwj6xzEJbz7k1EFGqx7nyCoabE= golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= @@ -386,6 +399,7 @@ golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -395,9 +409,11 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8= +golang.org/x/tools/godoc v0.1.0-deprecated/go.mod h1:qM63CriJ961IHWmnWa9CjZnBndniPt4a3CK0PVB9bIg= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.183.0/go.mod h1:q43adC5/pHoSZTx5h2mSmdF7NcyfW9JuDyIOJAgS9ZQ= google.golang.org/api v0.191.0/go.mod h1:tD5dsFGxFza0hnQveGfVk9QQYKcfp+VzgRqyXFxE0+E= +google.golang.org/api v0.247.0/go.mod h1:r1qZOPmxXffXg6xS5uhx16Fa/UFY8QU/K4bfKrnvovM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= @@ -407,14 +423,17 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20240528184218-531527333157 h1:u7WMYrIrVvs0TF5yaKwKNbcJyySYf+HAIFXxWltJOXE= google.golang.org/genproto v0.0.0-20240528184218-531527333157/go.mod h1:ubQlAQnzejB8uZzszhrTCU2Fyp6Vi7ZE5nn0c3W8+qQ= google.golang.org/genproto v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:mCr1K1c8kX+1iSBREvU3Juo11CB+QOEWxbRS01wWl5M= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo= google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= google.golang.org/genproto/googleapis/bytestream v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:5/MT647Cn/GGhwTpXC7QqcaR5Cnee4v4MKCU1/nwnIQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -424,6 +443,7 @@ google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -437,6 +457,7 @@ google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFW google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 91a33c64bc3cc507241b97a8481552e37e31b075 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 12:52:21 +0000 Subject: [PATCH 47/56] chore(deps): bump github.com/go-playground/validator/v10 Bumps [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) from 10.30.2 to 10.30.3. - [Release notes](https://github.com/go-playground/validator/releases) - [Commits](https://github.com/go-playground/validator/compare/v10.30.2...v10.30.3) --- updated-dependencies: - dependency-name: github.com/go-playground/validator/v10 dependency-version: 10.30.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 10 +++++----- cmd/sqlgen/go.sum | 20 ++++++++++---------- examples/go.mod | 8 ++++---- examples/go.sum | 16 ++++++++-------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 32df3031..aff33e3d 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -4,7 +4,7 @@ go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/go-playground/validator/v10 v10.30.2 + github.com/go-playground/validator/v10 v10.30.3 github.com/go-sql-driver/mysql v1.10.0 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.9.2 @@ -37,12 +37,12 @@ require ( github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/spf13/pflag v1.0.9 // indirect - golang.org/x/crypto v0.50.0 // indirect + golang.org/x/crypto v0.52.0 // indirect golang.org/x/mod v0.36.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.44.0 // indirect - golang.org/x/term v0.42.0 // indirect - golang.org/x/text v0.36.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index e431dfaf..72c1727b 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -21,8 +21,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= -github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= +github.com/go-playground/validator/v10 v10.30.3 h1:4MU6YkEwx7GbcPJOZxrtbu+QfF3pJLJuaYTeAH0DYy8= +github.com/go-playground/validator/v10 v10.30.3/go.mod h1:4Axh7oCNGcoGkqLoE4YWt6n20mcEIsPRlB7vPk3lpyc= github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= @@ -82,8 +82,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -105,18 +105,18 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= -golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= diff --git a/examples/go.mod b/examples/go.mod index ff0d3982..fdd172b7 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -36,7 +36,7 @@ require ( github.com/gabriel-vasile/mimetype v1.4.13 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.30.2 // indirect + github.com/go-playground/validator/v10 v10.30.3 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/goccy/go-yaml v1.19.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -59,12 +59,12 @@ require ( github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect - golang.org/x/crypto v0.50.0 // indirect + golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect golang.org/x/mod v0.36.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.44.0 // indirect - golang.org/x/text v0.36.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/tools v0.45.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/examples/go.sum b/examples/go.sum index 3b5cca21..12537885 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -52,8 +52,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ= -github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc= +github.com/go-playground/validator/v10 v10.30.3 h1:4MU6YkEwx7GbcPJOZxrtbu+QfF3pJLJuaYTeAH0DYy8= +github.com/go-playground/validator/v10 v10.30.3/go.mod h1:4Axh7oCNGcoGkqLoE4YWt6n20mcEIsPRlB7vPk3lpyc= github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= @@ -154,8 +154,8 @@ go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXe golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -176,12 +176,12 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= From 6a63d303ca567b5ce50a6efc682835891a1887d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 01:37:48 +0000 Subject: [PATCH 48/56] chore(deps): bump github.com/jackc/pgx/v5 from 5.9.2 to 5.10.0 Bumps [github.com/jackc/pgx/v5](https://github.com/jackc/pgx) from 5.9.2 to 5.10.0. - [Changelog](https://github.com/jackc/pgx/blob/master/CHANGELOG.md) - [Commits](https://github.com/jackc/pgx/compare/v5.9.2...v5.10.0) --- updated-dependencies: - dependency-name: github.com/jackc/pgx/v5 dependency-version: 5.10.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 4 ++-- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index aff33e3d..4ba71855 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -7,7 +7,7 @@ require ( github.com/go-playground/validator/v10 v10.30.3 github.com/go-sql-driver/mysql v1.10.0 github.com/goccy/go-yaml v1.19.2 - github.com/jackc/pgx/v5 v5.9.2 + github.com/jackc/pgx/v5 v5.10.0 github.com/mattn/go-sqlite3 v1.14.44 github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 72c1727b..cc19ca30 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -37,8 +37,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.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.10.0 h1:VhSvgU2jSli8o3AqIEOTJr7rZwAEUVo4E4XhR94Zfr0= +github.com/jackc/pgx/v5 v5.10.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= 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/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= diff --git a/examples/go.mod b/examples/go.mod index fdd172b7..2f4985ee 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -43,7 +43,7 @@ require ( github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect + github.com/jackc/pgx/v5 v5.10.0 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect diff --git a/examples/go.sum b/examples/go.sum index 12537885..48e6984d 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -76,8 +76,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.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.10.0 h1:VhSvgU2jSli8o3AqIEOTJr7rZwAEUVo4E4XhR94Zfr0= +github.com/jackc/pgx/v5 v5.10.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= 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/jaswdr/faker v1.19.1 h1:xBoz8/O6r0QAR8eEvKJZMdofxiRH+F0M/7MU9eNKhsM= From 59314788aa722285e7ef5ff0941155af7f64abc0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jun 2026 12:42:37 +0000 Subject: [PATCH 49/56] chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.44 to 1.14.45 Bumps [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) from 1.14.44 to 1.14.45. - [Release notes](https://github.com/mattn/go-sqlite3/releases) - [Commits](https://github.com/mattn/go-sqlite3/compare/v1.14.44...v1.14.45) --- updated-dependencies: - dependency-name: github.com/mattn/go-sqlite3 dependency-version: 1.14.45 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 4 ++-- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 4ba71855..7271e7a4 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -8,7 +8,7 @@ require ( github.com/go-sql-driver/mysql v1.10.0 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.10.0 - github.com/mattn/go-sqlite3 v1.14.44 + github.com/mattn/go-sqlite3 v1.14.45 github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 github.com/spf13/cobra v1.10.2 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index cc19ca30..f3dc3e5f 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -56,8 +56,8 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= -github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= +github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk= +github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/examples/go.mod b/examples/go.mod index 2f4985ee..ab1c34a9 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 github.com/lib/pq v1.12.3 - github.com/mattn/go-sqlite3 v1.14.44 + github.com/mattn/go-sqlite3 v1.14.45 github.com/ory/dockertest/v3 v3.12.0 github.com/paulmach/orb v0.13.0 github.com/shopspring/decimal v1.4.0 diff --git a/examples/go.sum b/examples/go.sum index 48e6984d..030a118a 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -92,8 +92,8 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= -github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= +github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk= +github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= From 51e70bec21d7b8fcf5cfa2e4aa5f3b764dd8eda1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 12:42:44 +0000 Subject: [PATCH 50/56] chore(deps): bump codecov/codecov-action from 6 to 7 Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v6...v7) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 740fae55..6f74abea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,7 +31,7 @@ jobs: go test -race '-coverprofile=coverage.txt' '-covermode=atomic' ./... - name: Codecov - uses: codecov/codecov-action@v6 + uses: codecov/codecov-action@v7 with: token: ${{secrets.CODECOV_TOKEN}} From 46ebff2e808fdcbb77180aff4b4fc7c981b754f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 12:42:47 +0000 Subject: [PATCH 51/56] chore(deps): bump golang.org/x/tools from 0.45.0 to 0.46.0 Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.45.0 to 0.46.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.45.0...v0.46.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-version: 0.46.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 8 ++++---- cmd/sqlgen/go.sum | 16 ++++++++-------- examples/go.mod | 8 ++++---- examples/go.sum | 16 ++++++++-------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 7271e7a4..f3b5892c 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -14,7 +14,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250911091902-df9299821621 - golang.org/x/tools v0.45.0 + golang.org/x/tools v0.46.0 ) require ( @@ -38,9 +38,9 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/spf13/pflag v1.0.9 // indirect golang.org/x/crypto v0.52.0 // indirect - golang.org/x/mod v0.36.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect golang.org/x/term v0.43.0 // indirect golang.org/x/text v0.37.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index f3dc3e5f..a5c9d1bf 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -87,15 +87,15 @@ golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGb golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= -golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -105,8 +105,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= @@ -120,8 +120,8 @@ golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= -golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= +golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= +golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/examples/go.mod b/examples/go.mod index ab1c34a9..74570ab8 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -61,11 +61,11 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 // indirect golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect - golang.org/x/mod v0.36.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect + golang.org/x/mod v0.37.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.45.0 // indirect + golang.org/x/tools v0.46.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index 030a118a..1bc5dc20 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -160,8 +160,8 @@ golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8t golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= -golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -169,15 +169,15 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= @@ -186,8 +186,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= -golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= +golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= +golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= 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= From d56e8cabb027ea693a1c69682035c184fbd4c69b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 12:42:42 +0000 Subject: [PATCH 52/56] chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.45 to 1.14.46 Bumps [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) from 1.14.45 to 1.14.46. - [Release notes](https://github.com/mattn/go-sqlite3/releases) - [Commits](https://github.com/mattn/go-sqlite3/compare/v1.14.45...v1.14.46) --- updated-dependencies: - dependency-name: github.com/mattn/go-sqlite3 dependency-version: 1.14.46 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 4 ++-- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index f3b5892c..34de962a 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -8,7 +8,7 @@ require ( github.com/go-sql-driver/mysql v1.10.0 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.10.0 - github.com/mattn/go-sqlite3 v1.14.45 + github.com/mattn/go-sqlite3 v1.14.46 github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 github.com/spf13/cobra v1.10.2 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index a5c9d1bf..9488dcf8 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -56,8 +56,8 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk= -github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= +github.com/mattn/go-sqlite3 v1.14.46 h1:ZfaNcYO/CGNMRxkN1vvG9qf+Y+uvXfgT9a6MlEw+HmU= +github.com/mattn/go-sqlite3 v1.14.46/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/examples/go.mod b/examples/go.mod index 74570ab8..919a0824 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 github.com/lib/pq v1.12.3 - github.com/mattn/go-sqlite3 v1.14.45 + github.com/mattn/go-sqlite3 v1.14.46 github.com/ory/dockertest/v3 v3.12.0 github.com/paulmach/orb v0.13.0 github.com/shopspring/decimal v1.4.0 diff --git a/examples/go.sum b/examples/go.sum index 1bc5dc20..652d5171 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -92,8 +92,8 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/mattn/go-sqlite3 v1.14.45 h1:6KA/spDguL3KV8rnybG7ezSaE4SeMR3KC9VbUoAQaIk= -github.com/mattn/go-sqlite3 v1.14.45/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= +github.com/mattn/go-sqlite3 v1.14.46 h1:ZfaNcYO/CGNMRxkN1vvG9qf+Y+uvXfgT9a6MlEw+HmU= +github.com/mattn/go-sqlite3 v1.14.46/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= From c3912b124842ed797f40df94f2d7d3a8854b7bcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:42:41 +0000 Subject: [PATCH 53/56] chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.46 to 1.14.47 Bumps [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) from 1.14.46 to 1.14.47. - [Release notes](https://github.com/mattn/go-sqlite3/releases) - [Commits](https://github.com/mattn/go-sqlite3/compare/v1.14.46...v1.14.47) --- updated-dependencies: - dependency-name: github.com/mattn/go-sqlite3 dependency-version: 1.14.47 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 4 ++-- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 34de962a..48d995d9 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -8,7 +8,7 @@ require ( github.com/go-sql-driver/mysql v1.10.0 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.10.0 - github.com/mattn/go-sqlite3 v1.14.46 + github.com/mattn/go-sqlite3 v1.14.47 github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 github.com/spf13/cobra v1.10.2 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 9488dcf8..60e3ca76 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -56,8 +56,8 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.46 h1:ZfaNcYO/CGNMRxkN1vvG9qf+Y+uvXfgT9a6MlEw+HmU= -github.com/mattn/go-sqlite3 v1.14.46/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= +github.com/mattn/go-sqlite3 v1.14.47 h1:jOBI62gS7nKeZv+as1oGEy0+1qISgXwH/QBlR6KbfIo= +github.com/mattn/go-sqlite3 v1.14.47/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/examples/go.mod b/examples/go.mod index 919a0824..8c3c5127 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 github.com/lib/pq v1.12.3 - github.com/mattn/go-sqlite3 v1.14.46 + github.com/mattn/go-sqlite3 v1.14.47 github.com/ory/dockertest/v3 v3.12.0 github.com/paulmach/orb v0.13.0 github.com/shopspring/decimal v1.4.0 diff --git a/examples/go.sum b/examples/go.sum index 652d5171..1653cb14 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -92,8 +92,8 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/mattn/go-sqlite3 v1.14.46 h1:ZfaNcYO/CGNMRxkN1vvG9qf+Y+uvXfgT9a6MlEw+HmU= -github.com/mattn/go-sqlite3 v1.14.46/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= +github.com/mattn/go-sqlite3 v1.14.47 h1:jOBI62gS7nKeZv+as1oGEy0+1qISgXwH/QBlR6KbfIo= +github.com/mattn/go-sqlite3 v1.14.47/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= From 6c76971953d2e0101072295695510251681948fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jun 2026 12:42:39 +0000 Subject: [PATCH 54/56] chore(deps): bump golang.org/x/tools from 0.46.0 to 0.47.0 Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.46.0 to 0.47.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.46.0...v0.47.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-version: 0.47.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 4 ++-- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 48d995d9..28a162df 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -14,7 +14,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250911091902-df9299821621 - golang.org/x/tools v0.46.0 + golang.org/x/tools v0.47.0 ) require ( diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index 60e3ca76..ca570161 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -120,8 +120,8 @@ golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= -golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= +golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/examples/go.mod b/examples/go.mod index 8c3c5127..863a527c 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -65,7 +65,7 @@ require ( golang.org/x/sync v0.21.0 // indirect golang.org/x/sys v0.46.0 // indirect golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.46.0 // indirect + golang.org/x/tools v0.47.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index 1653cb14..144ee241 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -186,8 +186,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.46.0 h1:7jTurBkPZu4moS/Uy4OQT1M+QBlsj3wejyZwsT8Z7rk= -golang.org/x/tools v0.46.0/go.mod h1:FrD85F8l+NWL+9XWBSyVSHO6Ne4jutsfIFba7AWQ5Ys= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= +golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= 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= From 2e26d681e89a7fb1a82b07758bb4e1b3c821a9b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:47:19 +0000 Subject: [PATCH 55/56] chore(deps): bump golang.org/x/tools from 0.47.0 to 0.48.0 Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.47.0 to 0.48.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.47.0...v0.48.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-version: 0.48.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 8 ++++---- cmd/sqlgen/go.sum | 16 ++++++++-------- examples/go.mod | 8 ++++---- examples/go.sum | 16 ++++++++-------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 28a162df..08a32e8a 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -14,7 +14,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250911091902-df9299821621 - golang.org/x/tools v0.47.0 + golang.org/x/tools v0.48.0 ) require ( @@ -38,9 +38,9 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/spf13/pflag v1.0.9 // indirect golang.org/x/crypto v0.52.0 // indirect - golang.org/x/mod v0.37.0 // indirect - golang.org/x/sync v0.21.0 // indirect - golang.org/x/sys v0.46.0 // indirect + golang.org/x/mod v0.38.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/sys v0.47.0 // indirect golang.org/x/term v0.43.0 // indirect golang.org/x/text v0.37.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index ca570161..a69d0450 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -87,15 +87,15 @@ golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGb golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= -golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= +golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= +golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= -golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -105,8 +105,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= -golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= @@ -120,8 +120,8 @@ golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= -golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= +golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= +golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/examples/go.mod b/examples/go.mod index 863a527c..8eaebcea 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -61,11 +61,11 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 // indirect golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect - golang.org/x/mod v0.37.0 // indirect - golang.org/x/sync v0.21.0 // indirect - golang.org/x/sys v0.46.0 // indirect + golang.org/x/mod v0.38.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.47.0 // indirect + golang.org/x/tools v0.48.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index 144ee241..1bc42129 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -160,8 +160,8 @@ golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8t golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= -golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= +golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= +golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -169,15 +169,15 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= -golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= -golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= @@ -186,8 +186,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= -golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= +golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= +golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= 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= From f9d354d3de84d2c7f79286b678646f8689a2b163 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jul 2026 12:42:54 +0000 Subject: [PATCH 56/56] chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.47 to 1.14.48 Bumps [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) from 1.14.47 to 1.14.48. - [Release notes](https://github.com/mattn/go-sqlite3/releases) - [Commits](https://github.com/mattn/go-sqlite3/compare/v1.14.47...v1.14.48) --- updated-dependencies: - dependency-name: github.com/mattn/go-sqlite3 dependency-version: 1.14.48 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- cmd/sqlgen/go.mod | 2 +- cmd/sqlgen/go.sum | 4 ++-- examples/go.mod | 2 +- examples/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/sqlgen/go.mod b/cmd/sqlgen/go.mod index 08a32e8a..4fb352de 100644 --- a/cmd/sqlgen/go.mod +++ b/cmd/sqlgen/go.mod @@ -8,7 +8,7 @@ require ( github.com/go-sql-driver/mysql v1.10.0 github.com/goccy/go-yaml v1.19.2 github.com/jackc/pgx/v5 v5.10.0 - github.com/mattn/go-sqlite3 v1.14.47 + github.com/mattn/go-sqlite3 v1.14.48 github.com/samber/lo v1.53.0 github.com/si3nloong/sqlgen v1.0.0-beta.0.0.20260419173412-8b71ef1df632 github.com/spf13/cobra v1.10.2 diff --git a/cmd/sqlgen/go.sum b/cmd/sqlgen/go.sum index a69d0450..db4292e5 100644 --- a/cmd/sqlgen/go.sum +++ b/cmd/sqlgen/go.sum @@ -56,8 +56,8 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.47 h1:jOBI62gS7nKeZv+as1oGEy0+1qISgXwH/QBlR6KbfIo= -github.com/mattn/go-sqlite3 v1.14.47/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= +github.com/mattn/go-sqlite3 v1.14.48 h1:7XHIgl0a8HwOaiK4E47ozLkST78rR9+OtNGx27D/TFs= +github.com/mattn/go-sqlite3 v1.14.48/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/examples/go.mod b/examples/go.mod index 8eaebcea..bbb5727a 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/uuid v1.6.0 github.com/jaswdr/faker v1.19.1 github.com/lib/pq v1.12.3 - github.com/mattn/go-sqlite3 v1.14.47 + github.com/mattn/go-sqlite3 v1.14.48 github.com/ory/dockertest/v3 v3.12.0 github.com/paulmach/orb v0.13.0 github.com/shopspring/decimal v1.4.0 diff --git a/examples/go.sum b/examples/go.sum index 1bc42129..c22675e7 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -92,8 +92,8 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/mattn/go-sqlite3 v1.14.47 h1:jOBI62gS7nKeZv+as1oGEy0+1qISgXwH/QBlR6KbfIo= -github.com/mattn/go-sqlite3 v1.14.47/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= +github.com/mattn/go-sqlite3 v1.14.48 h1:7XHIgl0a8HwOaiK4E47ozLkST78rR9+OtNGx27D/TFs= +github.com/mattn/go-sqlite3 v1.14.48/go.mod h1:6JTjA44L93a0QCyJef5YvlPoKXntQPjzWv5gtm9sB6w= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=