diff --git a/internal/sql/resources/sqlc-gen-ftl.wasm b/internal/sql/resources/sqlc-gen-ftl.wasm index ac7cb8e166..33df4fb5eb 100755 Binary files a/internal/sql/resources/sqlc-gen-ftl.wasm and b/internal/sql/resources/sqlc-gen-ftl.wasm differ diff --git a/internal/sql/sql_test.go b/internal/sql/sql_test.go index e45a84b9fb..f1c51c27d5 100644 --- a/internal/sql/sql_test.go +++ b/internal/sql/sql_test.go @@ -175,6 +175,27 @@ func TestAddDatabaseDeclsToSchema(t *testing.T) { &schema.MetadataGenerated{}, }, }, + &schema.Data{ + Name: "GetNamedParamMySqlQuery", + Pos: schema.Position{ + Filename: filepath.Join(tmpDir, "db/mysql/mysqldb/queries/queries.sql"), + Line: 19, + }, + Metadata: []schema.Metadata{&schema.MetadataGenerated{}}, + Fields: []*schema.Field{{ + Name: "namedId", + Type: &schema.Int{}, + Metadata: []schema.Metadata{ + &schema.MetadataSQLColumn{Name: "named_id", Table: "authors"}, + }, + }, { + Name: "hometown", + Type: &schema.Optional{Type: &schema.String{}}, + Metadata: []schema.Metadata{ + &schema.MetadataSQLColumn{Name: "hometown", Table: "authors"}, + }, + }}, + }, &schema.Data{ Name: "PsqldbAuthor", Pos: schema.Position{ @@ -400,6 +421,25 @@ func TestAddDatabaseDeclsToSchema(t *testing.T) { &schema.MetadataGenerated{}, }, }, + &schema.Verb{ + Pos: schema.Position{ + Filename: filepath.Join(tmpDir, "db/mysql/mysqldb/queries/queries.sql"), + Line: 19, + }, + Name: "getNamedParamMySql", + Request: &schema.Ref{Module: "test", Name: "GetNamedParamMySqlQuery"}, + Response: &schema.Array{Element: &schema.Ref{Module: "test", Name: "Author"}}, + Metadata: []schema.Metadata{ + &schema.MetadataDatabases{ + Uses: []*schema.Ref{{Module: "test", Name: "mysqldb"}}, + }, + &schema.MetadataSQLQuery{ + Query: "SELECT id, bio, birth_year, hometown FROM authors WHERE id = CAST(? AS UNSIGNED) AND hometown = ?", + Command: "many", + }, + &schema.MetadataGenerated{}, + }, + }, &schema.Verb{ Pos: schema.Position{ Filename: filepath.Join(tmpDir, "db/mysql/mysqldb/queries/queries.sql"), diff --git a/internal/sql/testdata/database/db/mysql/mysqldb/queries/queries.sql b/internal/sql/testdata/database/db/mysql/mysqldb/queries/queries.sql index 0d4c973d61..87d117bb82 100644 --- a/internal/sql/testdata/database/db/mysql/mysqldb/queries/queries.sql +++ b/internal/sql/testdata/database/db/mysql/mysqldb/queries/queries.sql @@ -15,3 +15,6 @@ SELECT bio, hometown FROM authors WHERE id = ?; -- name: GetManyAuthorsInfoMySQL :many SELECT bio, hometown FROM authors; + +-- name: GetNamedParamMySQL :many +SELECT * FROM authors WHERE id = CAST(sqlc.arg('named_id') AS UNSIGNED) AND hometown = ?; diff --git a/sqlc-gen-ftl/src/protos/xyz.block.ftl.hotreload.v1.rs b/sqlc-gen-ftl/src/protos/xyz.block.ftl.hotreload.v1.rs index 71b9d9dbad..ebc3e9c515 100644 --- a/sqlc-gen-ftl/src/protos/xyz.block.ftl.hotreload.v1.rs +++ b/sqlc-gen-ftl/src/protos/xyz.block.ftl.hotreload.v1.rs @@ -1,14 +1,11 @@ // @generated // This file is @generated by prost-build. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct ReloadRequest { #[prost(bool, tag="1")] pub force_new_runner: bool, - /// If the reload results in a new runner, this will be the new deployment key - #[prost(string, tag="2")] - pub new_deployment_key: ::prost::alloc::string::String, /// If the schema has changed on the plugin side, this will be true - #[prost(bool, tag="3")] + #[prost(bool, tag="2")] pub schema_changed: bool, } #[derive(Clone, PartialEq, ::prost::Message)] @@ -32,7 +29,11 @@ pub struct RunnerInfoRequest { pub address: ::prost::alloc::string::String, #[prost(string, tag="2")] pub deployment: ::prost::alloc::string::String, - #[prost(message, repeated, tag="3")] + #[prost(int64, tag="3")] + pub schema_version: i64, + #[prost(int64, tag="4")] + pub runner_version: i64, + #[prost(message, repeated, tag="5")] pub databases: ::prost::alloc::vec::Vec, } #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/sqlc-gen-ftl/src/protos/xyz.block.ftl.test.v1.rs b/sqlc-gen-ftl/src/protos/xyz.block.ftl.test.v1.rs new file mode 100644 index 0000000000..ec1fb8ccc5 --- /dev/null +++ b/sqlc-gen-ftl/src/protos/xyz.block.ftl.test.v1.rs @@ -0,0 +1,17 @@ +// @generated +// This file is @generated by prost-build. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct StartTestRunRequest { + #[prost(string, tag="1")] + pub module_name: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub endpoint: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub hot_reload_endpoint: ::prost::alloc::string::String, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct StartTestRunResponse { + #[prost(string, tag="1")] + pub deployment_key: ::prost::alloc::string::String, +} +// @@protoc_insertion_point(module) diff --git a/sqlc-gen-ftl/test/sqlc_gen_ftl_test.rs b/sqlc-gen-ftl/test/sqlc_gen_ftl_test.rs index 00cfe0fdd0..d7479db9b1 100644 --- a/sqlc-gen-ftl/test/sqlc_gen_ftl_test.rs +++ b/sqlc-gen-ftl/test/sqlc_gen_ftl_test.rs @@ -35,6 +35,7 @@ fn get_test_queries(engine: &str) -> Vec { "INSERT INTO all_types ( big_int, small_int, some_decimal, some_numeric, some_float, some_double, some_varchar, some_text, some_char, nullable_text, some_bool, nullable_bool, some_date, some_time, some_timestamp, some_blob, some_json ) VALUES ( @big_int, @small_int, @some_decimal, @some_numeric, @some_float, @some_double, @some_varchar, @some_text, @some_char, @nullable_text, @some_bool, @nullable_bool, @some_date, @some_time, @some_timestamp, @some_blob, @some_json )".to_string(), "INSERT INTO requests (data) VALUES (CONCAT(LOWER(?), LOWER(?)))".to_string(), "SELECT id, data FROM requests WHERE id in (/*SLICE:request_ids*/?)".to_string(), + "SELECT * FROM authors WHERE id = CAST(sqlc.arg('named_id') AS UNSIGNED) AND hometown = ?;".to_string(), ], "postgresql" => vec![ "SELECT id, big_int, small_int, some_decimal, some_numeric, some_float, some_double, some_varchar, some_text, some_char, nullable_text, some_bool, nullable_bool, some_date, some_time, some_timestamp, some_blob, some_json FROM all_types WHERE id = $1".to_string(), @@ -45,6 +46,7 @@ fn get_test_queries(engine: &str) -> Vec { "INSERT INTO all_types ( big_int, small_int, some_decimal, some_numeric, some_float, some_double, some_varchar, some_text, some_char, nullable_text, some_bool, nullable_bool, some_date, some_time, some_timestamp, some_blob, some_json ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17 )".to_string(), "INSERT INTO requests (data) VALUES (CONCAT(LOWER($1), LOWER($2)))".to_string(), "SELECT id, data FROM requests WHERE id = ANY($1::int[])".to_string(), + "SELECT * FROM authors WHERE id = sqlc.arg('named_id')::int AND hometown = ?;".to_string(), ], _ => vec![], }