From 2ae748250d2bf2e0bf8935d59da9b10385db84de Mon Sep 17 00:00:00 2001 From: Lorenzo Bevilacqua <43483037+ardubev16@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:40:11 +0100 Subject: [PATCH] feat(sqlite): add typing for sqlite queries --- .../testdata/emit_pydantic_models/sqlc.yaml | 4 +- .../endtoend/testdata/exec_result/sqlc.yaml | 2 +- .../endtoend/testdata/exec_rows/sqlc.yaml | 2 +- .../inflection_exclude_table_names/sqlc.yaml | 2 +- .../query_parameter_limit_two/sqlc.yaml | 2 +- .../query_parameter_limit_undefined/sqlc.yaml | 2 +- .../query_parameter_limit_zero/sqlc.yaml | 2 +- .../query_parameter_no_limit/sqlc.yaml | 2 +- internal/gen.go | 2 + internal/sqlite_type.go | 50 +++++++++++++++++++ 10 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 internal/sqlite_type.go diff --git a/internal/endtoend/testdata/emit_pydantic_models/sqlc.yaml b/internal/endtoend/testdata/emit_pydantic_models/sqlc.yaml index 180ce29..556942f 100644 --- a/internal/endtoend/testdata/emit_pydantic_models/sqlc.yaml +++ b/internal/endtoend/testdata/emit_pydantic_models/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql @@ -15,4 +15,4 @@ sql: package: db emit_sync_querier: true emit_async_querier: true - emit_pydantic_models: true \ No newline at end of file + emit_pydantic_models: true diff --git a/internal/endtoend/testdata/exec_result/sqlc.yaml b/internal/endtoend/testdata/exec_result/sqlc.yaml index 2adbd31..597a534 100644 --- a/internal/endtoend/testdata/exec_result/sqlc.yaml +++ b/internal/endtoend/testdata/exec_result/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql diff --git a/internal/endtoend/testdata/exec_rows/sqlc.yaml b/internal/endtoend/testdata/exec_rows/sqlc.yaml index 2adbd31..597a534 100644 --- a/internal/endtoend/testdata/exec_rows/sqlc.yaml +++ b/internal/endtoend/testdata/exec_rows/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql diff --git a/internal/endtoend/testdata/inflection_exclude_table_names/sqlc.yaml b/internal/endtoend/testdata/inflection_exclude_table_names/sqlc.yaml index aba5400..7120e7e 100644 --- a/internal/endtoend/testdata/inflection_exclude_table_names/sqlc.yaml +++ b/internal/endtoend/testdata/inflection_exclude_table_names/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql diff --git a/internal/endtoend/testdata/query_parameter_limit_two/sqlc.yaml b/internal/endtoend/testdata/query_parameter_limit_two/sqlc.yaml index e389988..44288e9 100644 --- a/internal/endtoend/testdata/query_parameter_limit_two/sqlc.yaml +++ b/internal/endtoend/testdata/query_parameter_limit_two/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql diff --git a/internal/endtoend/testdata/query_parameter_limit_undefined/sqlc.yaml b/internal/endtoend/testdata/query_parameter_limit_undefined/sqlc.yaml index 66d7a14..81c117a 100644 --- a/internal/endtoend/testdata/query_parameter_limit_undefined/sqlc.yaml +++ b/internal/endtoend/testdata/query_parameter_limit_undefined/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql diff --git a/internal/endtoend/testdata/query_parameter_limit_zero/sqlc.yaml b/internal/endtoend/testdata/query_parameter_limit_zero/sqlc.yaml index 274f730..fdf8bb7 100644 --- a/internal/endtoend/testdata/query_parameter_limit_zero/sqlc.yaml +++ b/internal/endtoend/testdata/query_parameter_limit_zero/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql diff --git a/internal/endtoend/testdata/query_parameter_no_limit/sqlc.yaml b/internal/endtoend/testdata/query_parameter_no_limit/sqlc.yaml index b563730..0a68be2 100644 --- a/internal/endtoend/testdata/query_parameter_no_limit/sqlc.yaml +++ b/internal/endtoend/testdata/query_parameter_no_limit/sqlc.yaml @@ -3,7 +3,7 @@ plugins: - name: py wasm: url: file://../../../../bin/sqlc-gen-python.wasm - sha256: "a6c5d174c407007c3717eea36ff0882744346e6ba991f92f71d6ab2895204c0e" + sha256: "8b2fef2ff398f9cbe23191ff639aa45ef1d68e49040c5e22eed28390365d6f76" sql: - schema: schema.sql queries: query.sql diff --git a/internal/gen.go b/internal/gen.go index f81c53b..f0eb05c 100644 --- a/internal/gen.go +++ b/internal/gen.go @@ -193,6 +193,8 @@ func pyInnerType(req *plugin.GenerateRequest, col *plugin.Column) string { switch req.Settings.Engine { case "postgresql": return postgresType(req, col) + case "sqlite": + return sqliteType(req, col) default: log.Println("unsupported engine type") return "Any" diff --git a/internal/sqlite_type.go b/internal/sqlite_type.go new file mode 100644 index 0000000..76866ba --- /dev/null +++ b/internal/sqlite_type.go @@ -0,0 +1,50 @@ +package python + +import ( + "log" + "strings" + + "github.com/sqlc-dev/plugin-sdk-go/plugin" + "github.com/sqlc-dev/plugin-sdk-go/sdk" +) + +func sqliteType(req *plugin.GenerateRequest, col *plugin.Column) string { + dt := strings.ToLower(sdk.DataType(col.Type)) + + // see: https://github.com/sqlc-dev/sqlc/blob/main/internal/codegen/golang/sqlite_type.go + switch dt { + case "int", "integer", "tinyint", "smallint", "mediumint", "bigint", "unsignedbigint", "int2", "int8": + return "int" + case "blob": + return "bytes" + case "real", "double", "double precision", "float": + return "float" + case "boolean", "bool": + return "bool" + case "date": + return "datetime.date" + case "datetime", "timestamp": + return "datetime.datetime" + case "any": + return "Any" + } + + switch { + case strings.HasPrefix(dt, "character"), + strings.HasPrefix(dt, "varchar"), + strings.HasPrefix(dt, "varyingcharacter"), + strings.HasPrefix(dt, "nchar"), + strings.HasPrefix(dt, "nativecharacter"), + strings.HasPrefix(dt, "nvarchar"), + dt == "text", + dt == "clob", + dt == "json": + return "str" + case strings.HasPrefix(dt, "decimal"), dt == "numeric": + return "float" + + default: + log.Printf("unknown SQLite type: %s\n", dt) + return "Any" + } +}
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: