diff --git a/.env b/.env index bb0ac6cc..e8c9f7b9 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ -SOURCE_WASM_FILE_UBUNTU="WasmRunner/obj/release/net8.0/wasi-wasm/wasm/for-publish/WasmRunner.wasm" -SOURCE_WASM_FILE="WasmRunner/bin/Release/net8.0/wasi-wasm/AppBundle/WasmRunner.wasm" +SOURCE_WASM_FILE_UBUNTU="WasmRunner/obj/release/net10.0/wasi-wasm/wasm/for-publish/WasmRunner.wasm" +SOURCE_WASM_FILE="WasmRunner/obj/release/net10.0/wasi-wasm/wasm/for-publish/WasmRunner.wasm" SQLITE_CONNECTION_STRING="Data Source=tests.db;Mode=ReadWrite" MYSQL_CONNECTION_STRING="server=localhost;database=tests;user=root;AllowLoadLocalInfile=true;ConvertZeroDateTime=True" diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 04a31d8b..05d5db89 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -7,9 +7,6 @@ permissions: contents: write pull-requests: write -env: - DOTNET_VERSION: '8.0.x' - on: release: types: [ published ] @@ -29,7 +26,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 @@ -65,7 +62,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 @@ -101,7 +98,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 @@ -137,7 +134,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 @@ -173,7 +170,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 @@ -204,7 +201,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6d688a6c..b524f80a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ defaults: env: SQLC_VERSION: 1.30.0 - WASI_SDK_VERSION: 22 + WASI_SDK_VERSION: 25 permissions: contents: read @@ -47,8 +47,8 @@ jobs: - name: Setup Derived Variables run: | - echo "WASI_SDK_FOLDER_NAME=wasi-sdk-${{ env.WASI_SDK_VERSION }}.0" >> $GITHUB_ENV - echo "WASI_SDK_FILENAME=wasi-sdk-${{ env.WASI_SDK_VERSION }}.0-linux.tar.gz" >> $GITHUB_ENV + echo "WASI_SDK_FOLDER_NAME=wasi-sdk-${{ env.WASI_SDK_VERSION }}.0-x86_64-linux" >> $GITHUB_ENV + echo "WASI_SDK_FILENAME=wasi-sdk-${{ env.WASI_SDK_VERSION }}.0-x86_64-linux.tar.gz" >> $GITHUB_ENV - name: Download Wasi SDK run: | diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 15d0dd8e..57df483a 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -11,7 +11,6 @@ permissions: pull-requests: write env: - DOTNET_VERSION: '8.0.x' on: workflow_dispatch: @@ -29,7 +28,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Regenerate docs run: ./docs/scripts/generate_all_docs.sh diff --git a/.github/workflows/legacy-tests.yml b/.github/workflows/legacy-tests.yml index 85dc8070..6d437f06 100644 --- a/.github/workflows/legacy-tests.yml +++ b/.github/workflows/legacy-tests.yml @@ -29,10 +29,15 @@ jobs: steps: - uses: actions/checkout@v7 - - name: Set up .NET from global.json + # The .NET Framework projects are built with the Visual Studio MSBuild, which is not guaranteed to support + # the newest .NET SDK that the rest of the repository is pinned to by global.json - so build them with .NET 8 + - name: Set up .NET 8 uses: actions/setup-dotnet@v6 with: - global-json-file: global.json + dotnet-version: '8.0.x' + + - name: Ignore global.json (pinned to the newer SDK) + run: rm global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index bb570657..89d8b6d5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -4,7 +4,6 @@ defaults: shell: bash env: - DOTNET_VERSION: '8.0.x' SQLC_VERSION: 1.30.0 permissions: @@ -35,6 +34,11 @@ jobs: steps: - uses: actions/checkout@v7 + - name: Set up .NET from global.json + uses: actions/setup-dotnet@v6 + with: + global-json-file: global.json + - uses: sqlc-dev/setup-sqlc@v5 with: sqlc-version: '${{ env.SQLC_VERSION }}' @@ -60,7 +64,7 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v6 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Load .env file uses: xom9ikk/dotenv@v2.4.0 diff --git a/.gitignore b/.gitignore index e0820e4c..cc0153c5 100644 --- a/.gitignore +++ b/.gitignore @@ -142,4 +142,6 @@ plugin.wasm .env.bak **/.env.bak -**/*.wasm \ No newline at end of file +**/*.wasm +# sqlc plugin cache (Makefile sets SQLCCACHE=./) +/plugins/ diff --git a/AGENTS.md b/AGENTS.md index c9256687..e7615d7e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -40,6 +40,14 @@ --- +## 🧩 Target Frameworks +- The **plugin** (all projects but `examples`) targets `net10.0`; the SDK is pinned in `global.json`. +- The **generated code** targets the `targetFramework` option: `netstandard2.0`, `netstandard2.1`, `net8.0` (default), `net9.0`, `net10.0`. `DotnetFramework.IsDotnetCore()` is true for every `net*` value; `netstandard*` is "legacy" output. +- The core examples in `sqlc.ci.yaml` are spread over net8.0 / net9.0 / net10.0 so that every framework is built and tested end-to-end. +- The WASM plugin is built as `wasip1` (core module) via overrides in `WasmRunner/WasmRunner.csproj`, because the .NET 10 WASI SDK emits a wasip2 component that sqlc (wazero) cannot load. Re-verify with `sqlc -f sqlc.ci.yaml diff` after SDK upgrades. + +--- + ## �� Code Generation Flow ``` @@ -97,8 +105,8 @@ DbDriver InstantiateDriver() | Option | Default | Description | |--------|---------|-------------| -| `overrideDriverVersion` | 2.3.6 (MySql), 8.0.3 (Npgsql), 8.0.10 (Sqlite) | Override DB driver version | -| `targetFramework` | net8.0 | .NET Standard 2.0/2.1 or .NET 8.0 | +| `overrideDriverVersion` | 2.4.0 (MySql), 8.0.6 (Npgsql), 10.0.13 (Sqlite) | Override DB driver version | +| `targetFramework` | net8.0 | .NET Standard 2.0/2.1, .NET 8.0, 9.0 or 10.0 (the plugin itself runs on .NET 10, independent of this option) | | `generateCsproj` | true | Generate .csproj file | | `namespaceName` | Project name | Override generated namespace | | `useDapper` | false | Use Dapper wrapper | @@ -175,20 +183,21 @@ public partial class Author ### Local Development ```bash # Prerequisites -dotnet --version # .NET 8.0 +dotnet --version # .NET 10 SDK (pinned in global.json) buf --version -# WASM libs for .NET WASI (see WASM docs) +# WASM build: `dotnet workload install wasi-experimental` + WASI SDK 25 exposed via WASI_SDK_PATH (see docs/08_Contributing.md) # Generate protobuf -make protobuf-generate +make generate-protobuf # Generate code -make sqlc-generate-process -make sqlc-generate-wasm +make sqlc-generate # process plugin +make setup-wasm-plugin # WASM plugin -> dist/plugin.wasm # Test plugins -make test-process-plugin -make test-wasm-plugin +make unit-tests +make test-plugin +sqlc -f sqlc.ci.yaml diff # WASM plugin output must equal the committed examples ``` ### Pre-commit Setup @@ -249,14 +258,14 @@ for (int i = 0; i < paramArray.Length; i++) ### Generate Code ```bash -make sqlc-generate-process # Process-based plugin -make sqlc-generate-wasm # WASM plugin +make sqlc-generate # Process-based plugin +make setup-wasm-plugin # WASM plugin ``` ### Test ```bash -make test-process-plugin -make test-wasm-plugin +make unit-tests +make test-plugin ``` ### Release diff --git a/CodeGenerator/CodeGenerator.csproj b/CodeGenerator/CodeGenerator.csproj index deed430d..e5a6f79e 100644 --- a/CodeGenerator/CodeGenerator.csproj +++ b/CodeGenerator/CodeGenerator.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable SqlcGenCsharp diff --git a/Directory.Build.props b/Directory.Build.props deleted file mode 100644 index 09608ab2..00000000 --- a/Directory.Build.props +++ /dev/null @@ -1,6 +0,0 @@ - - - - $(NoWarn);CS9057 - - diff --git a/Drivers/Drivers.csproj b/Drivers/Drivers.csproj index 0b47e221..2dbd1227 100644 --- a/Drivers/Drivers.csproj +++ b/Drivers/Drivers.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable SqlcGenCsharp.Drivers diff --git a/Drivers/SqliteDriver.cs b/Drivers/SqliteDriver.cs index 7b5c7a8e..ba46984f 100644 --- a/Drivers/SqliteDriver.cs +++ b/Drivers/SqliteDriver.cs @@ -14,7 +14,7 @@ public sealed partial class SqliteDriver( IList queries) : DbDriver(options, catalog, queries), IOne, IMany, IExec, IExecRows, IExecLastId, ICopyFrom { - private const string DefaultSqliteVersion = "9.0.0"; + private const string DefaultSqliteVersion = "10.0.13"; private static readonly HashSet IntegerDbTypes = ["integer", "integernotnulldefaultunixepoch"]; diff --git a/Extensions/Extensions.csproj b/Extensions/Extensions.csproj index c64ad492..df2085b3 100644 --- a/Extensions/Extensions.csproj +++ b/Extensions/Extensions.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable SqlcGenCsharp diff --git a/GeneratedProtobuf/GeneratedProtobuf.csproj b/GeneratedProtobuf/GeneratedProtobuf.csproj index 0d6ac66d..598d9e48 100644 --- a/GeneratedProtobuf/GeneratedProtobuf.csproj +++ b/GeneratedProtobuf/GeneratedProtobuf.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable SqlcGenCsharp diff --git a/LocalRunner/LocalRunner.csproj b/LocalRunner/LocalRunner.csproj index de7b21c0..476b36df 100644 --- a/LocalRunner/LocalRunner.csproj +++ b/LocalRunner/LocalRunner.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net10.0 true osx-arm64;linux-x64 SqlcGenCsharp diff --git a/PluginOptions/DotnetFramework.cs b/PluginOptions/DotnetFramework.cs index df75a5f1..2878ab02 100644 --- a/PluginOptions/DotnetFramework.cs +++ b/PluginOptions/DotnetFramework.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; @@ -6,6 +7,8 @@ namespace SqlcGenCsharp; public enum DotnetFramework { Dotnet80, + Dotnet90, + Dotnet100, DotnetStandard20, DotnetStandard21 } @@ -15,6 +18,8 @@ public static class DotnetFrameworkExtensions private static readonly Dictionary EnumToString = new() { { DotnetFramework.Dotnet80, "net8.0" }, + { DotnetFramework.Dotnet90, "net9.0" }, + { DotnetFramework.Dotnet100, "net10.0" }, { DotnetFramework.DotnetStandard21, "netstandard2.1" }, { DotnetFramework.DotnetStandard20, "netstandard2.0" } }; @@ -26,14 +31,16 @@ public static string ToName(this DotnetFramework me) public static DotnetFramework ParseName(string dotnetFramework) { - return EnumToString - .ToDictionary(x => x.Value, x => x.Key) - [dotnetFramework]; + var nameToEnum = EnumToString.ToDictionary(x => x.Value, x => x.Key); + if (nameToEnum.TryGetValue(dotnetFramework, out var parsed)) + return parsed; + throw new ArgumentException( + $"Unsupported targetFramework '{dotnetFramework}', supported values: {string.Join(", ", nameToEnum.Keys)}"); } public static bool IsDotnetCore(this DotnetFramework me) { - return me == DotnetFramework.Dotnet80; + return me is DotnetFramework.Dotnet80 or DotnetFramework.Dotnet90 or DotnetFramework.Dotnet100; } public static bool IsDotnetLegacy(this DotnetFramework me) diff --git a/PluginOptions/PluginOptions.csproj b/PluginOptions/PluginOptions.csproj index 15a5f1a5..1247c4ed 100644 --- a/PluginOptions/PluginOptions.csproj +++ b/PluginOptions/PluginOptions.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable SqlcGenCsharp diff --git a/SqlcGenCsharp/SqlcGenCsharp.csproj b/SqlcGenCsharp/SqlcGenCsharp.csproj index e54d3871..1309c07a 100644 --- a/SqlcGenCsharp/SqlcGenCsharp.csproj +++ b/SqlcGenCsharp/SqlcGenCsharp.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable SqlcGenCsharp diff --git a/WasmRunner/WasmRunner.csproj b/WasmRunner/WasmRunner.csproj index 1a6ba729..565ab5ce 100644 --- a/WasmRunner/WasmRunner.csproj +++ b/WasmRunner/WasmRunner.csproj @@ -1,6 +1,6 @@ - net8.0 + net10.0 SqlcGenCsharp Exe wasi-wasm @@ -17,6 +17,33 @@ + + + + + + + <_WasiClangCommonFlags Remove="--target=wasm32-unknown-wasip2" /> + <_WasiClangLDFlags Remove="--target=wasm32-unknown-wasip2" /> + <_WasiClangCommonFlags Include="--target=wasm32-wasip1" /> + <_WasiClangLDFlags Include="--target=wasm32-wasip1" /> + + + + + + <_WasmLinkStepArgs Remove="@(_WasmLinkStepArgs)" Condition="$([System.String]::new('%(Identity)').Contains('--component-type'))" /> + <_WasmLinkStepArgs Remove="@(_WasmLinkStepArgs)" Condition="$([System.String]::new('%(Identity)').Contains('wasm32-wasip2'))" /> + <_WasmLinkStepArgs Include=""$(WasiSysRoot.Replace('\', '/'))/lib/wasm32-wasip1/libc++.a"" /> + <_WasmLinkStepArgs Include=""$(WasiSysRoot.Replace('\', '/'))/lib/wasm32-wasip1/libc++abi.a"" /> + + + diff --git a/benchmark/BenchmarkRunner/BenchmarkRunner.csproj b/benchmark/BenchmarkRunner/BenchmarkRunner.csproj index 15ae3926..4a9864aa 100644 --- a/benchmark/BenchmarkRunner/BenchmarkRunner.csproj +++ b/benchmark/BenchmarkRunner/BenchmarkRunner.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net10.0 enable enable @@ -21,7 +21,7 @@ - + diff --git a/benchmark/MysqlEFCoreImpl/MysqlEFCoreImpl.csproj b/benchmark/MysqlEFCoreImpl/MysqlEFCoreImpl.csproj index 4d338e1b..22d11501 100644 --- a/benchmark/MysqlEFCoreImpl/MysqlEFCoreImpl.csproj +++ b/benchmark/MysqlEFCoreImpl/MysqlEFCoreImpl.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable diff --git a/benchmark/MysqlSqlcImpl/MysqlSqlcImpl.csproj b/benchmark/MysqlSqlcImpl/MysqlSqlcImpl.csproj index 5fe7c21c..c3144be6 100644 --- a/benchmark/MysqlSqlcImpl/MysqlSqlcImpl.csproj +++ b/benchmark/MysqlSqlcImpl/MysqlSqlcImpl.csproj @@ -5,7 +5,7 @@ - net8.0 + net10.0 MysqlSqlcImpl Library enable diff --git a/benchmark/PostgresqlEFCoreImpl/PostgresqlEFCoreImpl.csproj b/benchmark/PostgresqlEFCoreImpl/PostgresqlEFCoreImpl.csproj index b1b1df88..d58803d3 100644 --- a/benchmark/PostgresqlEFCoreImpl/PostgresqlEFCoreImpl.csproj +++ b/benchmark/PostgresqlEFCoreImpl/PostgresqlEFCoreImpl.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 PostgresEFCoreImpl Library enable diff --git a/benchmark/PostgresqlSqlcImpl/PostgresqlSqlcImpl.csproj b/benchmark/PostgresqlSqlcImpl/PostgresqlSqlcImpl.csproj index d764b85f..d561931c 100644 --- a/benchmark/PostgresqlSqlcImpl/PostgresqlSqlcImpl.csproj +++ b/benchmark/PostgresqlSqlcImpl/PostgresqlSqlcImpl.csproj @@ -5,7 +5,7 @@ - net8.0 + net10.0 PostgresSqlcImpl Library enable diff --git a/benchmark/SqliteEFCoreImpl/SqliteEFCoreImpl.csproj b/benchmark/SqliteEFCoreImpl/SqliteEFCoreImpl.csproj index af310d07..2d4325f7 100644 --- a/benchmark/SqliteEFCoreImpl/SqliteEFCoreImpl.csproj +++ b/benchmark/SqliteEFCoreImpl/SqliteEFCoreImpl.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 SqliteEFCoreImpl Library enable diff --git a/benchmark/SqliteSqlcImpl/SqliteSqlcImpl.csproj b/benchmark/SqliteSqlcImpl/SqliteSqlcImpl.csproj index 17a66c91..40f77dc0 100644 --- a/benchmark/SqliteSqlcImpl/SqliteSqlcImpl.csproj +++ b/benchmark/SqliteSqlcImpl/SqliteSqlcImpl.csproj @@ -5,7 +5,7 @@ - net8.0 + net10.0 SqliteSqlcImpl Library enable @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/docs/03_Usage.md b/docs/03_Usage.md index e465aeea..82f5a472 100644 --- a/docs/03_Usage.md +++ b/docs/03_Usage.md @@ -3,18 +3,29 @@ | Option | Possible values | Optional | Info | |-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| overrideDriverVersion | default:
`2.3.6` for MySqlConnector (mysql)
`8.0.3` for Npgsql (postgresql)
`8.0.10` for Microsoft.Data.Sqlite (sqlite)

values: The desired driver version | Yes | Allows you to override the version of DB driver to be used. | -| targetFramework | default: `net8.0`
values: `netstandard2.0`, `netstandard2.1`, `net8.0` | Yes | Determines the target framework for your generated code, meaning the generated code will be compiled to the specified runtime.
For more information and help deciding on the right value, refer to the [Microsoft .NET Standard documentation](https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-1-0). | +| overrideDriverVersion | default:
`2.4.0` for MySqlConnector (mysql)
`8.0.6` for Npgsql (postgresql)
`10.0.13` for Microsoft.Data.Sqlite (sqlite)

values: The desired driver version | Yes | Allows you to override the version of DB driver to be used. | +| targetFramework | default: `net8.0`
values: `netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0`, `net10.0` | Yes | Determines the target framework for your generated code, meaning the generated code will be compiled to the specified runtime.
For more information and help deciding on the right value, refer to the [Microsoft .NET Standard documentation](https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-1-0). | | generateCsproj | default: `true`
values: `false`,`true` | Yes | Assists you with the integration of SQLC and csharp by generating a `.csproj` file. This converts the generated output to a .dll, a project that you can easily incorporate into your build process. | | namespaceName | default: the generated project name | Yes | Allows you to override the namespace name to be different than the project name | | useDapper | default: `false`
values: `false`,`true` | Yes | Enables Dapper as a thin wrapper for the generated code. For more information, please refer to the [Dapper documentation](https://github.com/DapperLib/Dapper). | -| overrideDapperVersion | default:
`2.1.35`
values: The desired Dapper version | Yes | If `useDapper` is set to `true`, this option allows you to override the version of Dapper to be used. | +| overrideDapperVersion | default:
`2.1.66`
values: The desired Dapper version | Yes | If `useDapper` is set to `true`, this option allows you to override the version of Dapper to be used. | | Override | values: A nested override value like [this](#override-option). | Yes | Allows you to override the generated C# data types for specific columns in specific queries. This option accepts a `query_name:column_name` mapping and the overriden data type. | | | useCentralPackageManagement | default: `false`
values: `false`,`true` | Yes | If true, the code is generated to support central package management. | | useProperSingularization | default: `false`
values: `false`,`true` | Yes | When true, model names are singularized using English grammar rules (`policies` -> `Policy`, `statuses` -> `Status`). Defaults to the legacy behavior of trimming trailing `s` characters, which mangles some names (`policies` -> `Policie`). Opt-in because enabling it renames existing generated classes. | | withAsyncSuffix | default: `true`
values: `false`,`true` | Yes | When true, async methods will have the "Async" suffix appended to their names (e.g., `GetAuthorAsync`). When false, async methods will not have the suffix (e.g., `GetAuthor`). | | withCancellationToken | default: `false`
values: `false`,`true` | Yes | When true, every generated method takes an optional trailing `CancellationToken cancellationToken = default`, threaded into every async DB call so in-flight queries can be cancelled. See [Cancellation](#cancellation). When false (default), generated output is unchanged. | +### Target framework +`targetFramework` sets the framework of the generated `.csproj`, and is independent of the .NET version the plugin itself runs on. + +| Value | Notes | +|-------|-------| +| `net8.0` (default) | Nullable reference types enabled, file-scoped namespaces | +| `net9.0`, `net10.0` | Same generated code as `net8.0`, only the `` differs | +| `netstandard2.1`, `netstandard2.0` | Legacy output - nullable reference types disabled, block-scoped namespaces | + +The default stays `net8.0` so that upgrading the plugin never changes the target of existing projects. + ### Override option Override for a specific query: ```yaml diff --git a/docs/08_Contributing.md b/docs/08_Contributing.md index f334dd4d..0aa0e1f8 100644 --- a/docs/08_Contributing.md +++ b/docs/08_Contributing.md @@ -4,9 +4,25 @@ Make sure that the following applications are installed and added to your path. Follow the instructions in each of these: -- Dotnet CLI - [Dotnet Installation](https://github.com/dotnet/sdk) - use version `.NET 8.0 (latest)`
+- Dotnet CLI - [Dotnet Installation](https://github.com/dotnet/sdk) - the SDK version pinned in `global.json` (`.NET 10`)
- Buf build - [Buf Build](https://buf.build/docs/installation)
-- WASM (follow this guide) - [WASM libs](https://www.strathweb.com/2023/09/dotnet-wasi-applications-in-net-8-0/) +- sqlc - [sqlc Installation](https://docs.sqlc.dev/en/latest/overview/install.html)
+- Docker - for running the end-to-end tests against real PostgreSQL / MySQL instances
+- WASM build tooling (only needed for building the WASM plugin): + - the `wasi-experimental` workload - `dotnet workload install wasi-experimental` + - [WASI SDK](https://github.com/WebAssembly/wasi-sdk/releases) version `25`, extracted somewhere and exposed through the `WASI_SDK_PATH` environment variable + +### Target frameworks +Two different .NET versions are involved, and they are independent of each other: +- The **plugin itself** (all projects except `examples`) targets `net10.0`. +- The **generated code** targets whatever `targetFramework` is configured - `netstandard2.0`, `netstandard2.1`, `net8.0` (default), `net9.0` or `net10.0`. + The `examples` cover every supported value (see `sqlc.ci.yaml`) and are built and tested against real databases in CI. + +### Why the WASM plugin targets `wasip1` +sqlc runs WASM plugins with [wazero](https://wazero.io/), which can load core modules (`wasm32-wasip1`) but not WebAssembly components. +The .NET 10 WASI SDK hardcodes `wasm32-unknown-wasip2` and links a component-model world, which produces a component that sqlc rejects (`invalid version header`). +`WasmRunner/WasmRunner.csproj` therefore overrides the compile and link steps to produce a `wasip1` core module. +These overrides rely on private item names of the WASI SDK, so after any .NET SDK or WASI SDK upgrade, verify the plugin with `make setup-wasm-plugin && sqlc -f sqlc.ci.yaml diff`. ## Pre-commit Setup This repository uses [pre-commit](https://pre-commit.com/). To set up pre-commit hooks, run: @@ -20,21 +36,22 @@ pre-commit install SQLC protobuf are defined in sqlc-dev/sqlc repository. Generating C# code from protocol buffer files: ``` -make protobuf-generate +make generate-protobuf ``` ### Generating code SQLC utilizes our process / WASM plugin to generate code: ``` -make sqlc-generate-process -make sqlc-generate-wasm +make sqlc-generate # process plugin - regenerates the examples and the codegen requests +make setup-wasm-plugin # builds the WASM plugin into dist/plugin.wasm +sqlc -f sqlc.ci.yaml diff # verifies the WASM plugin generates exactly the committed examples ``` ### Testing generated code Testing the SQLC generated code via a predefined flow: ``` -make test-process-plugin -make test-wasm-plugin +make unit-tests # codegen and repository unit tests +make test-plugin # regenerates everything, builds the solution and runs the end-to-end tests (needs Docker) ``` ## Release flow diff --git a/docs/09_Examples.md b/docs/09_Examples.md index a6ae5bf5..66145071 100644 --- a/docs/09_Examples.md +++ b/docs/09_Examples.md @@ -92,7 +92,7 @@ overrides: ### Config ```yaml useDapper: true -targetFramework: net8.0 +targetFramework: net10.0 generateCsproj: true namespaceName: NpgsqlDapperExampleGen overrides: @@ -248,7 +248,7 @@ overrides: ### Config ```yaml useDapper: false -targetFramework: net8.0 +targetFramework: net9.0 generateCsproj: true namespaceName: MySqlConnectorExampleGen overrides: @@ -392,7 +392,7 @@ overrides: ### Config ```yaml useDapper: false -targetFramework: net8.0 +targetFramework: net10.0 generateCsproj: true namespaceName: SqliteExampleGen overrides: @@ -435,7 +435,7 @@ overrides: ### Config ```yaml useDapper: true -targetFramework: net8.0 +targetFramework: net9.0 generateCsproj: true namespaceName: SqliteDapperExampleGen overrides: diff --git a/docs/ExamplesDocGen/ExampleDocGen.csproj b/docs/ExamplesDocGen/ExampleDocGen.csproj index 3ce92306..a47f11f7 100644 --- a/docs/ExamplesDocGen/ExampleDocGen.csproj +++ b/docs/ExamplesDocGen/ExampleDocGen.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net10.0 enable enable DocsGenerator diff --git a/end2end/EndToEndCommon/EndToEndCommon.csproj b/end2end/EndToEndCommon/EndToEndCommon.csproj index e254c45c..91a12126 100644 --- a/end2end/EndToEndCommon/EndToEndCommon.csproj +++ b/end2end/EndToEndCommon/EndToEndCommon.csproj @@ -7,7 +7,7 @@ - + diff --git a/end2end/EndToEndScaffold/EndToEndScaffold.csproj b/end2end/EndToEndScaffold/EndToEndScaffold.csproj index 5fef96a5..5ae26026 100644 --- a/end2end/EndToEndScaffold/EndToEndScaffold.csproj +++ b/end2end/EndToEndScaffold/EndToEndScaffold.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 Exe diff --git a/end2end/EndToEndTests/EndToEndTests.csproj b/end2end/EndToEndTests/EndToEndTests.csproj index a8a8e10f..c18929b7 100644 --- a/end2end/EndToEndTests/EndToEndTests.csproj +++ b/end2end/EndToEndTests/EndToEndTests.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable EndToEndTests @@ -22,7 +22,7 @@ - + diff --git a/end2end/EndToEndTestsLegacy/EndToEndTestsLegacy.csproj b/end2end/EndToEndTestsLegacy/EndToEndTestsLegacy.csproj index c20bbe10..8bfdb44c 100644 --- a/end2end/EndToEndTestsLegacy/EndToEndTestsLegacy.csproj +++ b/end2end/EndToEndTestsLegacy/EndToEndTestsLegacy.csproj @@ -21,7 +21,7 @@ - + diff --git a/examples/MySqlConnectorExample/MySqlConnectorExample.csproj b/examples/MySqlConnectorExample/MySqlConnectorExample.csproj index 8ce47c52..496ab3d1 100644 --- a/examples/MySqlConnectorExample/MySqlConnectorExample.csproj +++ b/examples/MySqlConnectorExample/MySqlConnectorExample.csproj @@ -5,7 +5,7 @@ - net8.0 + net9.0 MySqlConnectorExampleGen Library enable diff --git a/examples/MySqlConnectorExample/request.json b/examples/MySqlConnectorExample/request.json index 574babe0..bf239b28 100644 --- a/examples/MySqlConnectorExample/request.json +++ b/examples/MySqlConnectorExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/MySqlConnectorExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJEYXRlVGltZSJ9fSx7ImNvbHVtbiI6Iio6Y19qc29uX3N0cmluZ19vdmVycmlkZSIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiKjpjX3RpbWVzdGFtcF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6Ikluc3RhbnQifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ4LjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTXlTcWxDb25uZWN0b3JFeGFtcGxlR2VuIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfaW50IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJpbnQifX0seyJjb2x1bW4iOiJHZXRNeXNxbEZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOnRydWUsInR5cGUiOiJEYXRlVGltZSJ9fSx7ImNvbHVtbiI6Iio6Y19qc29uX3N0cmluZ19vdmVycmlkZSIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiKjpjX3RpbWVzdGFtcF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6Ikluc3RhbnQifX1dLCJ0YXJnZXRGcmFtZXdvcmsiOiJuZXQ5LjAiLCJ1c2VEYXBwZXIiOmZhbHNlfQ==", "process": { "cmd": "./dist/LocalRunner" } @@ -3807,5 +3807,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6Ik15U3FsQ29ubmVjdG9yRXhhbXBsZUdlbiIsInVzZURhcHBlciI6ZmFsc2UsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X2ludCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJpbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjp0cnVlfX0seyJjb2x1bW4iOiIqOmNfanNvbl9zdHJpbmdfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190aW1lc3RhbXBfbm9kYV9pbnN0YW50X292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikluc3RhbnQiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZSwidXNlQ2VudHJhbFBhY2thZ2VNYW5hZ2VtZW50IjpmYWxzZSwid2l0aEFzeW5jU3VmZml4Ijp0cnVlLCJ3aXRoQ2FuY2VsbGF0aW9uVG9rZW4iOmZhbHNlLCJ1c2VQcm9wZXJTaW5ndWxhcml6YXRpb24iOmZhbHNlfQ==" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OS4wIiwibmFtZXNwYWNlTmFtZSI6Ik15U3FsQ29ubmVjdG9yRXhhbXBsZUdlbiIsInVzZURhcHBlciI6ZmFsc2UsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X2ludCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJpbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0TXlzcWxGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldE15c3FsRnVuY3Rpb25zOm1heF90aW1lc3RhbXAiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjp0cnVlfX0seyJjb2x1bW4iOiIqOmNfanNvbl9zdHJpbmdfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190aW1lc3RhbXBfbm9kYV9pbnN0YW50X292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikluc3RhbnQiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZSwidXNlQ2VudHJhbFBhY2thZ2VNYW5hZ2VtZW50IjpmYWxzZSwid2l0aEFzeW5jU3VmZml4Ijp0cnVlLCJ3aXRoQ2FuY2VsbGF0aW9uVG9rZW4iOmZhbHNlLCJ1c2VQcm9wZXJTaW5ndWxhcml6YXRpb24iOmZhbHNlfQ==" } \ No newline at end of file diff --git a/examples/MySqlConnectorExample/request.message b/examples/MySqlConnectorExample/request.message index abe526ef..b28485aa 100644 Binary files a/examples/MySqlConnectorExample/request.message and b/examples/MySqlConnectorExample/request.message differ diff --git a/examples/NpgsqlDapperExample/NpgsqlDapperExample.csproj b/examples/NpgsqlDapperExample/NpgsqlDapperExample.csproj index f9703e3f..89bf606d 100644 --- a/examples/NpgsqlDapperExample/NpgsqlDapperExample.csproj +++ b/examples/NpgsqlDapperExample/NpgsqlDapperExample.csproj @@ -5,7 +5,7 @@ - net8.0 + net10.0 NpgsqlDapperExampleGen Library enable diff --git a/examples/NpgsqlDapperExample/request.json b/examples/NpgsqlDapperExample/request.json index a54a0145..57529ac4 100644 --- a/examples/NpgsqlDapperExample/request.json +++ b/examples/NpgsqlDapperExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/NpgsqlDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdGltZXN0YW1wIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6dHJ1ZSwidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNTcGVjaWFsVHlwZXNDbnQ6Y19qc29uIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJKc29uRWxlbWVudCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzU3BlY2lhbFR5cGVzQ250OmNfanNvbmIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6Ikpzb25FbGVtZW50In19LHsiY29sdW1uIjoiKjpjX2pzb25fc3RyaW5nX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiIqOmNfeG1sX3N0cmluZ19vdmVycmlkZSIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiKjpjX21hY2FkZHI4IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiIqOmNfdGltZXN0YW1wX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoiSW5zdGFudCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDguMCIsInVzZURhcHBlciI6dHJ1ZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiTnBnc3FsRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdGltZXN0YW1wIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6dHJ1ZSwidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNTcGVjaWFsVHlwZXNDbnQ6Y19qc29uIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJKc29uRWxlbWVudCJ9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzU3BlY2lhbFR5cGVzQ250OmNfanNvbmIiLCJjc2hhcnBfdHlwZSI6eyJub3ROdWxsIjpmYWxzZSwidHlwZSI6Ikpzb25FbGVtZW50In19LHsiY29sdW1uIjoiKjpjX2pzb25fc3RyaW5nX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiIqOmNfeG1sX3N0cmluZ19vdmVycmlkZSIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoic3RyaW5nIn19LHsiY29sdW1uIjoiKjpjX21hY2FkZHI4IiwiY3NoYXJwX3R5cGUiOnsibm90TnVsbCI6ZmFsc2UsInR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiIqOmNfdGltZXN0YW1wX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7Im5vdE51bGwiOmZhbHNlLCJ0eXBlIjoiSW5zdGFudCJ9fV0sInRhcmdldEZyYW1ld29yayI6Im5ldDEwLjAiLCJ1c2VEYXBwZXIiOnRydWV9", "process": { "cmd": "./dist/LocalRunner" } @@ -36265,5 +36265,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6Ik5wZ3NxbERhcHBlckV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOnRydWUsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50Iiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdGltZXN0YW1wIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6dHJ1ZX19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNTcGVjaWFsVHlwZXNDbnQ6Y19qc29uIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikpzb25FbGVtZW50Iiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzU3BlY2lhbFR5cGVzQ250OmNfanNvbmIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSnNvbkVsZW1lbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2pzb25fc3RyaW5nX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfeG1sX3N0cmluZ19vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmciLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX21hY2FkZHI4IiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfdGltZXN0YW1wX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJJbnN0YW50Iiwibm90TnVsbCI6ZmFsc2V9fV0sImRlYnVnUmVxdWVzdCI6ZmFsc2UsInVzZUNlbnRyYWxQYWNrYWdlTWFuYWdlbWVudCI6ZmFsc2UsIndpdGhBc3luY1N1ZmZpeCI6dHJ1ZSwid2l0aENhbmNlbGxhdGlvblRva2VuIjpmYWxzZSwidXNlUHJvcGVyU2luZ3VsYXJpemF0aW9uIjpmYWxzZX0=" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0MTAuMCIsIm5hbWVzcGFjZU5hbWUiOiJOcGdzcWxEYXBwZXJFeGFtcGxlR2VuIiwidXNlRGFwcGVyIjp0cnVlLCJvdmVycmlkZURhcHBlclZlcnNpb24iOiIiLCJvdmVycmlkZXMiOlt7ImNvbHVtbiI6IkdldFBvc3RncmVzRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc0Z1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmciLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0UG9zdGdyZXNGdW5jdGlvbnM6bWF4X3RpbWVzdGFtcCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSIsIm5vdE51bGwiOnRydWV9fSx7ImNvbHVtbiI6IkdldFBvc3RncmVzU3BlY2lhbFR5cGVzQ250OmNfanNvbiIsImNzaGFycF90eXBlIjp7InR5cGUiOiJKc29uRWxlbWVudCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRQb3N0Z3Jlc1NwZWNpYWxUeXBlc0NudDpjX2pzb25iIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikpzb25FbGVtZW50Iiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19qc29uX3N0cmluZ19vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmciLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3htbF9zdHJpbmdfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19tYWNhZGRyOCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmciLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3RpbWVzdGFtcF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSW5zdGFudCIsIm5vdE51bGwiOmZhbHNlfX1dLCJkZWJ1Z1JlcXVlc3QiOmZhbHNlLCJ1c2VDZW50cmFsUGFja2FnZU1hbmFnZW1lbnQiOmZhbHNlLCJ3aXRoQXN5bmNTdWZmaXgiOnRydWUsIndpdGhDYW5jZWxsYXRpb25Ub2tlbiI6ZmFsc2UsInVzZVByb3BlclNpbmd1bGFyaXphdGlvbiI6ZmFsc2V9" } \ No newline at end of file diff --git a/examples/NpgsqlDapperExample/request.message b/examples/NpgsqlDapperExample/request.message index 369a4741..29308934 100644 --- a/examples/NpgsqlDapperExample/request.message +++ b/examples/NpgsqlDapperExample/request.message @@ -1,8 +1,8 @@ -Ï +Ð 2 -postgresql-examples/config/postgresql/authors/schema.sql+examples/config/postgresql/types/schema.sql",examples/config/postgresql/authors/query.sql"*examples/config/postgresql/types/query.sqlb‡ -examples/NpgsqlDapperExamplecsharpÈ{"debugRequest":true,"generateCsproj":true,"namespaceName":"NpgsqlDapperExampleGen","overrides":[{"column":"GetPostgresFunctions:max_integer","csharp_type":{"notNull":false,"type":"int"}},{"column":"GetPostgresFunctions:max_varchar","csharp_type":{"notNull":false,"type":"string"}},{"column":"GetPostgresFunctions:max_timestamp","csharp_type":{"notNull":true,"type":"DateTime"}},{"column":"GetPostgresSpecialTypesCnt:c_json","csharp_type":{"notNull":false,"type":"JsonElement"}},{"column":"GetPostgresSpecialTypesCnt:c_jsonb","csharp_type":{"notNull":false,"type":"JsonElement"}},{"column":"*:c_json_string_override","csharp_type":{"notNull":false,"type":"string"}},{"column":"*:c_xml_string_override","csharp_type":{"notNull":false,"type":"string"}},{"column":"*:c_macaddr8","csharp_type":{"notNull":false,"type":"string"}},{"column":"*:c_timestamp_noda_instant_override","csharp_type":{"notNull":false,"type":"Instant"}}],"targetFramework":"net8.0","useDapper":true}* +postgresql-examples/config/postgresql/authors/schema.sql+examples/config/postgresql/types/schema.sql",examples/config/postgresql/authors/query.sql"*examples/config/postgresql/types/query.sqlbˆ +examples/NpgsqlDapperExamplecsharpÉ{"debugRequest":true,"generateCsproj":true,"namespaceName":"NpgsqlDapperExampleGen","overrides":[{"column":"GetPostgresFunctions:max_integer","csharp_type":{"notNull":false,"type":"int"}},{"column":"GetPostgresFunctions:max_varchar","csharp_type":{"notNull":false,"type":"string"}},{"column":"GetPostgresFunctions:max_timestamp","csharp_type":{"notNull":true,"type":"DateTime"}},{"column":"GetPostgresSpecialTypesCnt:c_json","csharp_type":{"notNull":false,"type":"JsonElement"}},{"column":"GetPostgresSpecialTypesCnt:c_jsonb","csharp_type":{"notNull":false,"type":"JsonElement"}},{"column":"*:c_json_string_override","csharp_type":{"notNull":false,"type":"string"}},{"column":"*:c_xml_string_override","csharp_type":{"notNull":false,"type":"string"}},{"column":"*:c_macaddr8","csharp_type":{"notNull":false,"type":"string"}},{"column":"*:c_timestamp_noda_instant_override","csharp_type":{"notNull":false,"type":"Instant"}}],"targetFramework":"net10.0","useDapper":true}* ./dist/LocalRunnerìî public"®publicƒ authors) id0ÿÿÿÿÿÿÿÿÿR authorsb  bigserial& @@ -10923,4 +10923,4 @@ hSELECT c_point, c_line, c_lseg, c_box, c_path, c_polygon, c_circle FROM postgre c_path0ÿÿÿÿÿÿÿÿÿRpostgres_geometric_typesbpathzc_path"H c_polygon0ÿÿÿÿÿÿÿÿÿRpostgres_geometric_typesb polygonz c_polygon"E c_circle0ÿÿÿÿÿÿÿÿÿRpostgres_geometric_typesbcirclezc_circle: query.sqlU -'TRUNCATE TABLE postgres_geometric_typesTruncatePostgresGeoTypes:exec: query.sql"v1.30.0*ù{"overrideDriverVersion":"","generateCsproj":true,"targetFramework":"net8.0","namespaceName":"NpgsqlDapperExampleGen","useDapper":true,"overrideDapperVersion":"","overrides":[{"column":"GetPostgresFunctions:max_integer","csharp_type":{"type":"int","notNull":false}},{"column":"GetPostgresFunctions:max_varchar","csharp_type":{"type":"string","notNull":false}},{"column":"GetPostgresFunctions:max_timestamp","csharp_type":{"type":"DateTime","notNull":true}},{"column":"GetPostgresSpecialTypesCnt:c_json","csharp_type":{"type":"JsonElement","notNull":false}},{"column":"GetPostgresSpecialTypesCnt:c_jsonb","csharp_type":{"type":"JsonElement","notNull":false}},{"column":"*:c_json_string_override","csharp_type":{"type":"string","notNull":false}},{"column":"*:c_xml_string_override","csharp_type":{"type":"string","notNull":false}},{"column":"*:c_macaddr8","csharp_type":{"type":"string","notNull":false}},{"column":"*:c_timestamp_noda_instant_override","csharp_type":{"type":"Instant","notNull":false}}],"debugRequest":false,"useCentralPackageManagement":false,"withAsyncSuffix":true,"withCancellationToken":false,"useProperSingularization":false} \ No newline at end of file +'TRUNCATE TABLE postgres_geometric_typesTruncatePostgresGeoTypes:exec: query.sql"v1.30.0*ú{"overrideDriverVersion":"","generateCsproj":true,"targetFramework":"net10.0","namespaceName":"NpgsqlDapperExampleGen","useDapper":true,"overrideDapperVersion":"","overrides":[{"column":"GetPostgresFunctions:max_integer","csharp_type":{"type":"int","notNull":false}},{"column":"GetPostgresFunctions:max_varchar","csharp_type":{"type":"string","notNull":false}},{"column":"GetPostgresFunctions:max_timestamp","csharp_type":{"type":"DateTime","notNull":true}},{"column":"GetPostgresSpecialTypesCnt:c_json","csharp_type":{"type":"JsonElement","notNull":false}},{"column":"GetPostgresSpecialTypesCnt:c_jsonb","csharp_type":{"type":"JsonElement","notNull":false}},{"column":"*:c_json_string_override","csharp_type":{"type":"string","notNull":false}},{"column":"*:c_xml_string_override","csharp_type":{"type":"string","notNull":false}},{"column":"*:c_macaddr8","csharp_type":{"type":"string","notNull":false}},{"column":"*:c_timestamp_noda_instant_override","csharp_type":{"type":"Instant","notNull":false}}],"debugRequest":false,"useCentralPackageManagement":false,"withAsyncSuffix":true,"withCancellationToken":false,"useProperSingularization":false} \ No newline at end of file diff --git a/examples/QuickStartSqliteDalGen/QuickStartSqliteDalGen.csproj b/examples/QuickStartSqliteDalGen/QuickStartSqliteDalGen.csproj index 9482e7ee..b91a9c71 100644 --- a/examples/QuickStartSqliteDalGen/QuickStartSqliteDalGen.csproj +++ b/examples/QuickStartSqliteDalGen/QuickStartSqliteDalGen.csproj @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/examples/SqliteDapperExample/SqliteDapperExample.csproj b/examples/SqliteDapperExample/SqliteDapperExample.csproj index efce62bc..2d93f999 100644 --- a/examples/SqliteDapperExample/SqliteDapperExample.csproj +++ b/examples/SqliteDapperExample/SqliteDapperExample.csproj @@ -5,7 +5,7 @@ - net8.0 + net9.0 SqliteDapperExampleGen Library enable @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/examples/SqliteDapperExample/request.json b/examples/SqliteDapperExample/request.json index e5e539c5..8285d5f2 100644 --- a/examples/SqliteDapperExample/request.json +++ b/examples/SqliteDapperExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/SqliteDapperExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSW5zdGFudCJ9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJJbnN0YW50In19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRGFwcGVyRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSW5zdGFudCJ9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJJbnN0YW50In19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OS4wIiwidXNlRGFwcGVyIjp0cnVlfQ==", "process": { "cmd": "./dist/LocalRunner" } @@ -1463,5 +1463,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6IlNxbGl0ZURhcHBlckV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOnRydWUsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJkZWNpbWFsIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2Jvb2xfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiYm9vbCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3RleHRfbm9kYV9pbnN0YW50X292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikluc3RhbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfbm9kYV9pbnN0YW50X292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikluc3RhbnQiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZSwidXNlQ2VudHJhbFBhY2thZ2VNYW5hZ2VtZW50IjpmYWxzZSwid2l0aEFzeW5jU3VmZml4Ijp0cnVlLCJ3aXRoQ2FuY2VsbGF0aW9uVG9rZW4iOmZhbHNlLCJ1c2VQcm9wZXJTaW5ndWxhcml6YXRpb24iOmZhbHNlfQ==" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OS4wIiwibmFtZXNwYWNlTmFtZSI6IlNxbGl0ZURhcHBlckV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOnRydWUsIm92ZXJyaWRlRGFwcGVyVmVyc2lvbiI6IiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3ZhcmNoYXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoic3RyaW5nIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfcmVhbCIsImNzaGFycF90eXBlIjp7InR5cGUiOiJkZWNpbWFsIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2Jvb2xfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiYm9vbCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3RleHRfbm9kYV9pbnN0YW50X292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikluc3RhbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfbm9kYV9pbnN0YW50X292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6Ikluc3RhbnQiLCJub3ROdWxsIjpmYWxzZX19XSwiZGVidWdSZXF1ZXN0IjpmYWxzZSwidXNlQ2VudHJhbFBhY2thZ2VNYW5hZ2VtZW50IjpmYWxzZSwid2l0aEFzeW5jU3VmZml4Ijp0cnVlLCJ3aXRoQ2FuY2VsbGF0aW9uVG9rZW4iOmZhbHNlLCJ1c2VQcm9wZXJTaW5ndWxhcml6YXRpb24iOmZhbHNlfQ==" } \ No newline at end of file diff --git a/examples/SqliteDapperExample/request.message b/examples/SqliteDapperExample/request.message index 4a4e11cd..9b7bc0f5 100644 Binary files a/examples/SqliteDapperExample/request.message and b/examples/SqliteDapperExample/request.message differ diff --git a/examples/SqliteDapperLegacyExample/SqliteDapperLegacyExample.csproj b/examples/SqliteDapperLegacyExample/SqliteDapperLegacyExample.csproj index 0bea2091..19244ff5 100644 --- a/examples/SqliteDapperLegacyExample/SqliteDapperLegacyExample.csproj +++ b/examples/SqliteDapperLegacyExample/SqliteDapperLegacyExample.csproj @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/examples/SqliteExample/SqliteExample.csproj b/examples/SqliteExample/SqliteExample.csproj index e1e93526..a817de9d 100644 --- a/examples/SqliteExample/SqliteExample.csproj +++ b/examples/SqliteExample/SqliteExample.csproj @@ -5,7 +5,7 @@ - net8.0 + net10.0 SqliteExampleGen Library enable @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/examples/SqliteExample/request.json b/examples/SqliteExample/request.json index 665aef3b..8af2e56e 100644 --- a/examples/SqliteExample/request.json +++ b/examples/SqliteExample/request.json @@ -13,7 +13,7 @@ "codegen": { "out": "examples/SqliteExample", "plugin": "csharp", - "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSW5zdGFudCJ9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJJbnN0YW50In19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwidXNlRGFwcGVyIjpmYWxzZX0=", + "options": "eyJkZWJ1Z1JlcXVlc3QiOnRydWUsImdlbmVyYXRlQ3Nwcm9qIjp0cnVlLCJuYW1lc3BhY2VOYW1lIjoiU3FsaXRlRXhhbXBsZUdlbiIsIm92ZXJyaWRlcyI6W3siY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9pbnRlZ2VyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImludCJ9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmcifX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCJ9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X2RhdGV0aW1lX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6IkRhdGVUaW1lIn19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wifX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSW5zdGFudCJ9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJJbnN0YW50In19XSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0MTAuMCIsInVzZURhcHBlciI6ZmFsc2V9", "process": { "cmd": "./dist/LocalRunner" } @@ -1463,5 +1463,5 @@ } ], "sqlc_version": "v1.30.0", - "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0OC4wIiwibmFtZXNwYWNlTmFtZSI6IlNxbGl0ZUV4YW1wbGVHZW4iLCJ1c2VEYXBwZXIiOmZhbHNlLCJvdmVycmlkZURhcHBlclZlcnNpb24iOiIiLCJvdmVycmlkZXMiOlt7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfaW50ZWdlciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJpbnQiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF92YXJjaGFyIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6InN0cmluZyIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X3JlYWwiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiZGVjaW1hbCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfdGV4dF9kYXRldGltZV9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9kYXRldGltZV9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJEYXRlVGltZSIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ib29sX292ZXJyaWRlIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImJvb2wiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfYm9vbF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJib29sIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y190ZXh0X25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJJbnN0YW50Iiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX25vZGFfaW5zdGFudF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJJbnN0YW50Iiwibm90TnVsbCI6ZmFsc2V9fV0sImRlYnVnUmVxdWVzdCI6ZmFsc2UsInVzZUNlbnRyYWxQYWNrYWdlTWFuYWdlbWVudCI6ZmFsc2UsIndpdGhBc3luY1N1ZmZpeCI6dHJ1ZSwid2l0aENhbmNlbGxhdGlvblRva2VuIjpmYWxzZSwidXNlUHJvcGVyU2luZ3VsYXJpemF0aW9uIjpmYWxzZX0=" + "plugin_options": "eyJvdmVycmlkZURyaXZlclZlcnNpb24iOiIiLCJnZW5lcmF0ZUNzcHJvaiI6dHJ1ZSwidGFyZ2V0RnJhbWV3b3JrIjoibmV0MTAuMCIsIm5hbWVzcGFjZU5hbWUiOiJTcWxpdGVFeGFtcGxlR2VuIiwidXNlRGFwcGVyIjpmYWxzZSwib3ZlcnJpZGVEYXBwZXJWZXJzaW9uIjoiIiwib3ZlcnJpZGVzIjpbeyJjb2x1bW4iOiJHZXRTcWxpdGVGdW5jdGlvbnM6bWF4X2ludGVnZXIiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiaW50Iiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6IkdldFNxbGl0ZUZ1bmN0aW9uczptYXhfdmFyY2hhciIsImNzaGFycF90eXBlIjp7InR5cGUiOiJzdHJpbmciLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiR2V0U3FsaXRlRnVuY3Rpb25zOm1heF9yZWFsIiwiY3NoYXJwX3R5cGUiOnsidHlwZSI6ImRlY2ltYWwiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3RleHRfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX2ludGVnZXJfZGF0ZXRpbWVfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiRGF0ZVRpbWUiLCJub3ROdWxsIjpmYWxzZX19LHsiY29sdW1uIjoiKjpjX3RleHRfYm9vbF9vdmVycmlkZSIsImNzaGFycF90eXBlIjp7InR5cGUiOiJib29sIiwibm90TnVsbCI6ZmFsc2V9fSx7ImNvbHVtbiI6Iio6Y19pbnRlZ2VyX2Jvb2xfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiYm9vbCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfdGV4dF9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSW5zdGFudCIsIm5vdE51bGwiOmZhbHNlfX0seyJjb2x1bW4iOiIqOmNfaW50ZWdlcl9ub2RhX2luc3RhbnRfb3ZlcnJpZGUiLCJjc2hhcnBfdHlwZSI6eyJ0eXBlIjoiSW5zdGFudCIsIm5vdE51bGwiOmZhbHNlfX1dLCJkZWJ1Z1JlcXVlc3QiOmZhbHNlLCJ1c2VDZW50cmFsUGFja2FnZU1hbmFnZW1lbnQiOmZhbHNlLCJ3aXRoQXN5bmNTdWZmaXgiOnRydWUsIndpdGhDYW5jZWxsYXRpb25Ub2tlbiI6ZmFsc2UsInVzZVByb3BlclNpbmd1bGFyaXphdGlvbiI6ZmFsc2V9" } \ No newline at end of file diff --git a/examples/SqliteExample/request.message b/examples/SqliteExample/request.message index 953b752f..14261e63 100644 Binary files a/examples/SqliteExample/request.message and b/examples/SqliteExample/request.message differ diff --git a/examples/SqliteLegacyExample/SqliteLegacyExample.csproj b/examples/SqliteLegacyExample/SqliteLegacyExample.csproj index 8c8f7794..634a902f 100644 --- a/examples/SqliteLegacyExample/SqliteLegacyExample.csproj +++ b/examples/SqliteLegacyExample/SqliteLegacyExample.csproj @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/global.json b/global.json index 3d946171..6c0dfb50 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,6 @@ { "sdk": { - "version": "8.0.416" + "version": "10.0.402", + "rollForward": "latestFeature" } } \ No newline at end of file diff --git a/sqlc.ci.yaml b/sqlc.ci.yaml index 663969bf..9ea51fca 100644 --- a/sqlc.ci.yaml +++ b/sqlc.ci.yaml @@ -81,7 +81,7 @@ sql: out: examples/NpgsqlDapperExample options: useDapper: true - targetFramework: net8.0 + targetFramework: net10.0 generateCsproj: true namespaceName: NpgsqlDapperExampleGen overrides: @@ -226,7 +226,7 @@ sql: out: examples/MySqlConnectorExample options: useDapper: false - targetFramework: net8.0 + targetFramework: net9.0 generateCsproj: true namespaceName: MySqlConnectorExampleGen overrides: @@ -355,7 +355,7 @@ sql: out: examples/SqliteExample options: useDapper: false - targetFramework: net8.0 + targetFramework: net10.0 generateCsproj: true namespaceName: SqliteExampleGen overrides: @@ -394,7 +394,7 @@ sql: out: examples/SqliteDapperExample options: useDapper: true - targetFramework: net8.0 + targetFramework: net9.0 generateCsproj: true namespaceName: SqliteDapperExampleGen overrides: diff --git a/sqlc.local.generated.yaml b/sqlc.local.generated.yaml index d9bb0753..c52ed759 100644 --- a/sqlc.local.generated.yaml +++ b/sqlc.local.generated.yaml @@ -81,7 +81,7 @@ sql: out: examples/NpgsqlDapperExample options: useDapper: true - targetFramework: net8.0 + targetFramework: net10.0 generateCsproj: true namespaceName: NpgsqlDapperExampleGen overrides: @@ -226,7 +226,7 @@ sql: out: examples/MySqlConnectorExample options: useDapper: false - targetFramework: net8.0 + targetFramework: net9.0 generateCsproj: true namespaceName: MySqlConnectorExampleGen overrides: @@ -356,7 +356,7 @@ sql: out: examples/SqliteExample options: useDapper: false - targetFramework: net8.0 + targetFramework: net10.0 generateCsproj: true namespaceName: SqliteExampleGen overrides: @@ -395,7 +395,7 @@ sql: out: examples/SqliteDapperExample options: useDapper: true - targetFramework: net8.0 + targetFramework: net9.0 generateCsproj: true namespaceName: SqliteDapperExampleGen overrides: diff --git a/sqlc.request.generated.yaml b/sqlc.request.generated.yaml index 66b4e901..26a3c908 100644 --- a/sqlc.request.generated.yaml +++ b/sqlc.request.generated.yaml @@ -88,7 +88,7 @@ sql: out: examples/NpgsqlDapperExample options: useDapper: true - targetFramework: net8.0 + targetFramework: net10.0 generateCsproj: true namespaceName: NpgsqlDapperExampleGen overrides: @@ -236,7 +236,7 @@ sql: out: examples/MySqlConnectorExample options: useDapper: false - targetFramework: net8.0 + targetFramework: net9.0 generateCsproj: true namespaceName: MySqlConnectorExampleGen overrides: @@ -370,7 +370,7 @@ sql: out: examples/SqliteExample options: useDapper: false - targetFramework: net8.0 + targetFramework: net10.0 generateCsproj: true namespaceName: SqliteExampleGen overrides: @@ -410,7 +410,7 @@ sql: out: examples/SqliteDapperExample options: useDapper: true - targetFramework: net8.0 + targetFramework: net9.0 generateCsproj: true namespaceName: SqliteDapperExampleGen overrides: diff --git a/unit-tests/CodegenTests/CodegenCsprojTests.cs b/unit-tests/CodegenTests/CodegenCsprojTests.cs index 63a1c3fa..58312e81 100644 --- a/unit-tests/CodegenTests/CodegenCsprojTests.cs +++ b/unit-tests/CodegenTests/CodegenCsprojTests.cs @@ -58,6 +58,43 @@ public void TestCsprojFileNotGenerated() Assert.That(actual.Result.Files.Any(f => f.Name == $"{request.Settings.Codegen.Out}.csproj"), Is.False); } + [TestCase("net8.0", true)] + [TestCase("net9.0", true)] + [TestCase("net10.0", true)] + [TestCase("netstandard2.1", false)] + [TestCase("netstandard2.0", false)] + public void TestTargetFramework(string targetFramework, bool isNullableEnabled) + { + var request = new GenerateRequest + { + Settings = _mysqlSettings, + Catalog = _emptyCatalog, + PluginOptions = ByteString.CopyFrom("{\"targetFramework\": \"" + targetFramework + "\"}", Encoding.UTF8) + }; + + var response = CodeGenerator.Generate(request); + var csprojFile = response.Result.Files.First(f => f.Name == $"{request.Settings.Codegen.Out}.csproj"); + var doc = new XmlDocument(); + doc.LoadXml(csprojFile.Contents.ToStringUtf8()); + + Assert.That(doc.SelectSingleNode("//TargetFramework")!.InnerText, Is.EqualTo(targetFramework)); + Assert.That(doc.SelectSingleNode("//Nullable") is not null, Is.EqualTo(isNullableEnabled)); + } + + [Test] + public void TestUnsupportedTargetFramework() + { + var request = new GenerateRequest + { + Settings = _mysqlSettings, + Catalog = _emptyCatalog, + PluginOptions = ByteString.CopyFrom("{\"targetFramework\": \"net7.0\"}", Encoding.UTF8) + }; + + var exception = Assert.Throws(() => _ = CodeGenerator.Generate(request)); + Assert.That(exception.Message, Does.Contain("net7.0").And.Contain("net10.0")); + } + [Test] public void TestOverrideDriverVersion() { diff --git a/unit-tests/CodegenTests/CodegenTests.csproj b/unit-tests/CodegenTests/CodegenTests.csproj index 866c4473..f205e7e1 100644 --- a/unit-tests/CodegenTests/CodegenTests.csproj +++ b/unit-tests/CodegenTests/CodegenTests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable false diff --git a/unit-tests/CodegenTests/ExtensionsTests.cs b/unit-tests/CodegenTests/ExtensionsTests.cs index 14f6c219..3dbf48da 100644 --- a/unit-tests/CodegenTests/ExtensionsTests.cs +++ b/unit-tests/CodegenTests/ExtensionsTests.cs @@ -155,7 +155,7 @@ public void TestDotnetFrameworkNameRoundTrip(DotnetFramework framework, string n [Test] public void TestParseUnknownFrameworkThrows() { - Assert.Throws(() => DotnetFrameworkExtensions.ParseName("net6.0")); + Assert.Throws(() => DotnetFrameworkExtensions.ParseName("net6.0")); } [TestCase(DotnetFramework.Dotnet80, true)] diff --git a/unit-tests/CodegenTests/OptionsTests.cs b/unit-tests/CodegenTests/OptionsTests.cs index f2a9c94e..66534254 100644 --- a/unit-tests/CodegenTests/OptionsTests.cs +++ b/unit-tests/CodegenTests/OptionsTests.cs @@ -99,7 +99,7 @@ public void TestAllOptionsAreParsed() [Test] public void TestUnknownTargetFrameworkThrows() { - Assert.Throws(() => + Assert.Throws(() => new Options(CreateRequest("sqlite", """{"targetFramework": "net6.0"}"""))); } diff --git a/unit-tests/RepositoryTests/RepositoryTests.csproj b/unit-tests/RepositoryTests/RepositoryTests.csproj index 5c8b98cd..5f10778d 100644 --- a/unit-tests/RepositoryTests/RepositoryTests.csproj +++ b/unit-tests/RepositoryTests/RepositoryTests.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable false