From 558a28e7634f956c8b3674c950bc57d775cbe9bd Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 18 Nov 2020 18:02:18 -0800 Subject: [PATCH 1/3] mysql: Make dolphin the default, remove mysql:beta --- internal/cmd/generate.go | 54 +++++++----------------------- internal/codegen/golang/gen.go | 4 --- internal/codegen/golang/go_type.go | 2 +- internal/codegen/kotlin/gen.go | 2 +- internal/compiler/engine.go | 2 +- internal/compiler/expand.go | 2 +- internal/config/config.go | 1 - internal/sql/rewrite/parameters.go | 2 +- 8 files changed, 18 insertions(+), 51 deletions(-) diff --git a/internal/cmd/generate.go b/internal/cmd/generate.go index 3c14e3e43c..2ded387ced 100644 --- a/internal/cmd/generate.go +++ b/internal/cmd/generate.go @@ -16,7 +16,6 @@ import ( "github.com/kyleconroy/sqlc/internal/config" "github.com/kyleconroy/sqlc/internal/debug" "github.com/kyleconroy/sqlc/internal/multierr" - "github.com/kyleconroy/sqlc/internal/mysql" "github.com/kyleconroy/sqlc/internal/opts" ) @@ -147,32 +146,22 @@ func Generate(e Env, dir string, stderr io.Writer) (map[string]string, error) { name = combo.Kotlin.Package } + result, errored := parse(e, name, dir, sql.SQL, combo, parseOpts, stderr) + if errored { + break + } + var files map[string]string var out string - - // TODO: Note about how this will be going away - if sql.Engine == config.EngineMySQL { - result, errored := parseMySQL(e, name, dir, sql.SQL, combo, parseOpts, stderr) - if errored { - break - } + switch { + case sql.Gen.Go != nil: out = combo.Go.Out - files, err = golang.DeprecatedGenerate(result, combo) - } else { - result, errored := parse(e, name, dir, sql.SQL, combo, parseOpts, stderr) - if errored { - break - } - switch { - case sql.Gen.Go != nil: - out = combo.Go.Out - files, err = golang.Generate(result, combo) - case sql.Gen.Kotlin != nil: - out = combo.Kotlin.Out - files, err = kotlin.Generate(result, combo) - default: - panic("missing language backend") - } + files, err = golang.Generate(result, combo) + case sql.Gen.Kotlin != nil: + out = combo.Kotlin.Out + files, err = kotlin.Generate(result, combo) + default: + panic("missing language backend") } if err != nil { @@ -193,23 +182,6 @@ func Generate(e Env, dir string, stderr io.Writer) (map[string]string, error) { return output, nil } -// Experimental MySQL support -func parseMySQL(e Env, name, dir string, sql config.SQL, combo config.CombinedSettings, parserOpts opts.Parser, stderr io.Writer) (golang.Generateable, bool) { - q, err := mysql.GeneratePkg(name, sql.Schema, sql.Queries, combo) - if err != nil { - fmt.Fprintf(stderr, "# package %s\n", name) - if parserErr, ok := err.(*multierr.Error); ok { - for _, fileErr := range parserErr.Errs() { - printFileErr(stderr, dir, fileErr) - } - } else { - fmt.Fprintf(stderr, "error parsing schema: %s\n", err) - } - return nil, true - } - return q, false -} - func parse(e Env, name, dir string, sql config.SQL, combo config.CombinedSettings, parserOpts opts.Parser, stderr io.Writer) (*compiler.Result, bool) { c := compiler.NewCompiler(sql, combo) if err := c.ParseCatalog(sql.Schema); err != nil { diff --git a/internal/codegen/golang/gen.go b/internal/codegen/golang/gen.go index 4aa38d8cb4..138a9f41cd 100644 --- a/internal/codegen/golang/gen.go +++ b/internal/codegen/golang/gen.go @@ -372,10 +372,6 @@ func (t *tmplCtx) OutputQuery(sourceName string) bool { return t.SourceName == sourceName } -func DeprecatedGenerate(r Generateable, settings config.CombinedSettings) (map[string]string, error) { - return generate(settings, r.Enums(settings), r.Structs(settings), r.GoQueries(settings)) -} - func Generate(r *compiler.Result, settings config.CombinedSettings) (map[string]string, error) { enums := buildEnums(r, settings) structs := buildStructs(r, settings) diff --git a/internal/codegen/golang/go_type.go b/internal/codegen/golang/go_type.go index a288cfb890..2736f5e4d0 100644 --- a/internal/codegen/golang/go_type.go +++ b/internal/codegen/golang/go_type.go @@ -33,7 +33,7 @@ func goInnerType(r *compiler.Result, col *compiler.Column, settings config.Combi // TODO: Extend the engine interface to handle types switch settings.Package.Engine { - case config.EngineMySQL, config.EngineMySQLBeta: + case config.EngineMySQL: return mysqlType(r, col, settings) case config.EnginePostgreSQL: return postgresType(r, col, settings) diff --git a/internal/codegen/kotlin/gen.go b/internal/codegen/kotlin/gen.go index 245fd0aba5..54cd2a5413 100644 --- a/internal/codegen/kotlin/gen.go +++ b/internal/codegen/kotlin/gen.go @@ -365,7 +365,7 @@ func makeType(r *compiler.Result, col *compiler.Column, settings config.Combined func ktInnerType(r *compiler.Result, col *compiler.Column, settings config.CombinedSettings) (string, bool) { // TODO: Extend the engine interface to handle types switch settings.Package.Engine { - case config.EngineMySQL, config.EngineMySQLBeta: + case config.EngineMySQL: return mysqlType(r, col, settings) case config.EnginePostgreSQL: return postgresType(r, col, settings) diff --git a/internal/compiler/engine.go b/internal/compiler/engine.go index 6d579caaa0..2c90bc315b 100644 --- a/internal/compiler/engine.go +++ b/internal/compiler/engine.go @@ -25,7 +25,7 @@ func NewCompiler(conf config.SQL, combo config.CombinedSettings) *Compiler { case config.EngineXLemon: c.parser = sqlite.NewParser() c.catalog = catalog.New("main") - case config.EngineMySQL, config.EngineMySQLBeta: + case config.EngineMySQL: c.parser = dolphin.NewParser() c.catalog = dolphin.NewCatalog() case config.EnginePostgreSQL: diff --git a/internal/compiler/expand.go b/internal/compiler/expand.go index 787ccf45dd..75ab05c4ed 100644 --- a/internal/compiler/expand.go +++ b/internal/compiler/expand.go @@ -39,7 +39,7 @@ func (c *Compiler) expand(qc *QueryCatalog, raw *ast.RawStmt) ([]source.Edit, er func (c *Compiler) quoteIdent(ident string) string { if c.parser.IsReservedKeyword(ident) { switch c.conf.Engine { - case config.EngineMySQL, config.EngineMySQLBeta: + case config.EngineMySQL: return "`" + ident + "`" default: return "\"" + ident + "\"" diff --git a/internal/config/config.go b/internal/config/config.go index f3cef93c33..e4eeff91ca 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -70,7 +70,6 @@ func (p *Paths) UnmarshalYAML(unmarshal func(interface{}) error) error { const ( EngineMySQL Engine = "mysql" - EngineMySQLBeta Engine = "mysql:beta" EnginePostgreSQL Engine = "postgresql" // Experimental engines diff --git a/internal/sql/rewrite/parameters.go b/internal/sql/rewrite/parameters.go index fb460540ef..87a5fb07cb 100644 --- a/internal/sql/rewrite/parameters.go +++ b/internal/sql/rewrite/parameters.go @@ -78,7 +78,7 @@ func NamedParameters(engine config.Engine, raw *ast.RawStmt) (*ast.RawStmt, map[ } else { old = fmt.Sprintf("sqlc.arg(%s)", param) } - if engine == config.EngineMySQL || engine == config.EngineMySQLBeta { + if engine == config.EngineMySQL { replace = "?" } else { replace = fmt.Sprintf("$%d", args[param]) From b526612fb50981460f733fdfd29c831683a281c8 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 18 Nov 2020 18:04:25 -0800 Subject: [PATCH 2/3] tests: s/mysql:beta/mysql/g --- examples/authors/sqlc.json | 2 +- examples/booktest/sqlc.json | 2 +- examples/kotlin/sqlc.json | 6 +++--- examples/ondeck/sqlc.json | 2 +- internal/endtoend/testdata/alias/mysql/sqlc.json | 2 +- internal/endtoend/testdata/column_as/mysql/sqlc.json | 2 +- internal/endtoend/testdata/comment_syntax/mysql/sqlc.json | 2 +- .../endtoend/testdata/create_table_like/mysql/sqlc.json | 2 +- .../ddl_alter_table_column_drop_not_null/mysql/sqlc.json | 2 +- .../postgresql/sqlc.json | 2 +- .../testdata/ddl_alter_table_drop_column/mysql/sqlc.json | 2 +- .../ddl_alter_table_drop_column/postgresql/sqlc.json | 2 +- .../ddl_alter_table_drop_column_if_exists/mysql/sqlc.json | 2 +- .../postgresql/sqlc.json | 2 +- .../ddl_alter_table_drop_constraint/mysql/sqlc.json | 2 +- .../ddl_alter_table_drop_constraint/postgresql/sqlc.json | 2 +- .../testdata/ddl_alter_table_rename/mysql/sqlc.json | 2 +- .../testdata/ddl_alter_table_rename/postgresql/sqlc.json | 2 +- .../testdata/ddl_alter_table_rename_column/mysql/sqlc.json | 2 +- .../ddl_alter_table_rename_column/postgresql/sqlc.json | 2 +- .../testdata/ddl_alter_table_set_data_type/mysql/sqlc.json | 2 +- .../ddl_alter_table_set_data_type/postgresql/sqlc.json | 2 +- .../testdata/ddl_alter_table_set_not_null/mysql/sqlc.json | 2 +- .../ddl_alter_table_set_not_null/postgresql/sqlc.json | 2 +- .../ddl_alter_table_set_schema/postgresql/sqlc.json | 2 +- .../testdata/ddl_alter_type_add_value/postgresql/sqlc.json | 2 +- .../ddl_alter_type_rename_value/postgresql/sqlc.json | 2 +- internal/endtoend/testdata/ddl_comment/mysql/sqlc.json | 2 +- internal/endtoend/testdata/ddl_comment/postgresql/sqlc.json | 2 +- internal/endtoend/testdata/ddl_create_enum/mysql/sqlc.json | 2 +- .../endtoend/testdata/ddl_create_enum/postgresql/sqlc.json | 2 +- .../testdata/ddl_create_function/postgresql/sqlc.json | 2 +- .../testdata/ddl_create_function_args/postgresql/sqlc.json | 2 +- .../ddl_create_function_return/postgresql/sqlc.json | 2 +- .../testdata/ddl_create_function_types/postgresql/sqlc.json | 2 +- internal/endtoend/testdata/ddl_create_table/mysql/sqlc.json | 2 +- .../endtoend/testdata/ddl_create_table/postgresql/sqlc.json | 2 +- .../testdata/ddl_drop_function/postgresql/sqlc.json | 2 +- .../testdata/ddl_drop_function_args/postgresql/sqlc.json | 2 +- .../ddl_drop_function_if_exists/postgresql/sqlc.json | 2 +- internal/endtoend/testdata/ddl_drop_schema/mysql/sqlc.json | 2 +- .../endtoend/testdata/ddl_drop_schema/postgresql/sqlc.json | 2 +- .../testdata/ddl_drop_schema_if_exists/postgresql/sqlc.json | 2 +- .../endtoend/testdata/ddl_drop_table/postgresql/sqlc.json | 2 +- .../testdata/ddl_drop_table_if_exists/postgresql/sqlc.json | 2 +- .../testdata/ddl_drop_table_in_schema/postgresql/sqlc.json | 2 +- .../endtoend/testdata/ddl_drop_type/postgresql/sqlc.json | 2 +- .../testdata/ddl_drop_type_if_exists/postgresql/sqlc.json | 2 +- .../testdata/ddl_drop_type_in_schema/postgresql/sqlc.json | 2 +- internal/endtoend/testdata/ddl_pg_temp/postgresql/sqlc.json | 2 +- internal/endtoend/testdata/delete_from/mysql/sqlc.json | 2 +- internal/endtoend/testdata/emit_db_and_json_tags/sqlc.json | 2 +- internal/endtoend/testdata/emit_db_tags/sqlc.json | 2 +- internal/endtoend/testdata/identical_tables/mysql/sqlc.json | 2 +- internal/endtoend/testdata/inflection/mysql/sqlc.json | 2 +- internal/endtoend/testdata/insert_select/mysql/sqlc.json | 2 +- internal/endtoend/testdata/insert_values/mysql/sqlc.json | 2 +- internal/endtoend/testdata/join_alias/mysql/sqlc.json | 2 +- internal/endtoend/testdata/join_from/mysql/sqlc.json | 2 +- internal/endtoend/testdata/join_table_name/mysql/sqlc.json | 2 +- internal/endtoend/testdata/join_two_tables/mysql/sqlc.json | 2 +- .../endtoend/testdata/join_where_clause/mysql/sqlc.json | 2 +- internal/endtoend/testdata/json/mysql/sqlc.json | 2 +- internal/endtoend/testdata/overrides/mysql/sqlc.json | 2 +- .../endtoend/testdata/overrides_go_types/mysql/sqlc.json | 2 +- internal/endtoend/testdata/params_duplicate/mysql/sqlc.json | 2 +- internal/endtoend/testdata/params_location/mysql/sqlc.json | 2 +- internal/endtoend/testdata/params_two/mysql/sqlc.json | 2 +- .../endtoend/testdata/schema_scoped_create/mysql/sqlc.json | 2 +- .../endtoend/testdata/schema_scoped_delete/mysql/sqlc.json | 2 +- .../endtoend/testdata/schema_scoped_filter/mysql/sqlc.json | 2 +- .../endtoend/testdata/schema_scoped_list/mysql/sqlc.json | 2 +- .../endtoend/testdata/schema_scoped_update/mysql/sqlc.json | 2 +- internal/endtoend/testdata/select_limit/mysql/sqlc.json | 2 +- internal/endtoend/testdata/select_star/mysql/sqlc.json | 2 +- internal/endtoend/testdata/sqlc_arg/mysql/sqlc.json | 2 +- internal/endtoend/testdata/sqlc_arg_invalid/mysql/sqlc.json | 2 +- internal/endtoend/testdata/star_expansion/mysql/sqlc.json | 2 +- .../endtoend/testdata/star_expansion_join/mysql/sqlc.json | 2 +- .../testdata/star_expansion_reserved/mysql/sqlc.json | 2 +- .../testdata/star_expansion_subquery/mysql/sqlc.json | 2 +- .../testdata/subquery_calculated_column/mysql/sqlc.json | 2 +- internal/endtoend/testdata/syntax_errors/mysql/sqlc.json | 2 +- internal/endtoend/testdata/truncate/mysql/sqlc.json | 2 +- internal/endtoend/testdata/update_set/myql/sqlc.json | 2 +- .../endtoend/testdata/update_set_multiple/mysql/sqlc.json | 2 +- 86 files changed, 88 insertions(+), 88 deletions(-) diff --git a/examples/authors/sqlc.json b/examples/authors/sqlc.json index 2c54060e1c..58feec2d4c 100644 --- a/examples/authors/sqlc.json +++ b/examples/authors/sqlc.json @@ -15,7 +15,7 @@ { "schema": "mysql/schema.sql", "queries": "mysql/query.sql", - "engine": "mysql:beta", + "engine": "mysql", "gen": { "go": { "package": "authors", diff --git a/examples/booktest/sqlc.json b/examples/booktest/sqlc.json index a2137f4b8b..419a759f19 100644 --- a/examples/booktest/sqlc.json +++ b/examples/booktest/sqlc.json @@ -13,7 +13,7 @@ "path": "mysql", "schema": "mysql/schema.sql", "queries": "mysql/query.sql", - "engine": "mysql:beta" + "engine": "mysql" } ] } diff --git a/examples/kotlin/sqlc.json b/examples/kotlin/sqlc.json index a03ef85b2c..f7f8f0b61d 100644 --- a/examples/kotlin/sqlc.json +++ b/examples/kotlin/sqlc.json @@ -48,7 +48,7 @@ { "schema": "src/main/resources/authors/mysql/schema.sql", "queries": "src/main/resources/authors/mysql/query.sql", - "engine": "mysql:beta", + "engine": "mysql", "gen": { "kotlin": { "out": "src/main/kotlin/com/example/authors/mysql", @@ -59,7 +59,7 @@ { "schema": "src/main/resources/booktest/mysql/schema.sql", "queries": "src/main/resources/booktest/mysql/query.sql", - "engine": "mysql:beta", + "engine": "mysql", "gen": { "kotlin": { "out": "src/main/kotlin/com/example/booktest/mysql", @@ -70,7 +70,7 @@ { "schema": "src/main/resources/ondeck/mysql/schema", "queries": "src/main/resources/ondeck/mysql/query", - "engine": "mysql:beta", + "engine": "mysql", "gen": { "kotlin": { "out": "src/main/kotlin/com/example/ondeck/mysql", diff --git a/examples/ondeck/sqlc.json b/examples/ondeck/sqlc.json index c6abb748d4..31f8e821b0 100644 --- a/examples/ondeck/sqlc.json +++ b/examples/ondeck/sqlc.json @@ -16,7 +16,7 @@ "name": "ondeck", "schema": "mysql/schema", "queries": "mysql/query", - "engine": "mysql:beta", + "engine": "mysql", "emit_json_tags": true, "emit_prepared_queries": true, "emit_interface": true diff --git a/internal/endtoend/testdata/alias/mysql/sqlc.json b/internal/endtoend/testdata/alias/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/alias/mysql/sqlc.json +++ b/internal/endtoend/testdata/alias/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/column_as/mysql/sqlc.json b/internal/endtoend/testdata/column_as/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/column_as/mysql/sqlc.json +++ b/internal/endtoend/testdata/column_as/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/comment_syntax/mysql/sqlc.json b/internal/endtoend/testdata/comment_syntax/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/comment_syntax/mysql/sqlc.json +++ b/internal/endtoend/testdata/comment_syntax/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/create_table_like/mysql/sqlc.json b/internal/endtoend/testdata/create_table_like/mysql/sqlc.json index 7db2873f5c..a9e7b055a4 100644 --- a/internal/endtoend/testdata/create_table_like/mysql/sqlc.json +++ b/internal/endtoend/testdata/create_table_like/mysql/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "schema.sql", "queries": "query.sql", - "engine": "mysql:beta" + "engine": "mysql" } ] } diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_column_drop_not_null/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_drop_column/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_column/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_drop_column/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_column/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_drop_column_if_exists/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_constraint/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_drop_constraint/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_constraint/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_drop_constraint/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_constraint/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_drop_constraint/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_drop_constraint/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_drop_constraint/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_rename/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_rename/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename_column/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename_column/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_rename_column/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_rename_column/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_set_data_type/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_set_data_type/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_set_data_type/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_set_data_type/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_set_data_type/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_set_data_type/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_set_data_type/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_set_data_type/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_set_not_null/mysql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_set_not_null/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_alter_table_set_not_null/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_set_not_null/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_alter_table_set_not_null/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_set_not_null/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_set_not_null/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_set_not_null/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_table_set_schema/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_table_set_schema/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_table_set_schema/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_table_set_schema/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_type_add_value/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_type_add_value/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_type_add_value/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_type_add_value/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_alter_type_rename_value/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_alter_type_rename_value/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_alter_type_rename_value/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_alter_type_rename_value/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_comment/mysql/sqlc.json b/internal/endtoend/testdata/ddl_comment/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_comment/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_comment/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_comment/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_comment/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_comment/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_comment/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_create_enum/mysql/sqlc.json b/internal/endtoend/testdata/ddl_create_enum/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_create_enum/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_enum/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_create_enum/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_create_enum/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_create_enum/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_enum/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_create_function/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_create_function/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_create_function/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_function/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_create_function_args/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_create_function_args/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_create_function_args/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_function_args/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_create_function_return/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_create_function_return/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_create_function_return/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_function_return/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_create_function_types/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_create_function_types/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_create_function_types/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_function_types/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_create_table/mysql/sqlc.json b/internal/endtoend/testdata/ddl_create_table/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_create_table/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_table/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_create_table/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_create_table/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_create_table/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_create_table/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_function/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_function/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_function/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_function/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_function_args/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_function_args/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_function_args/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_function_args/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_function_if_exists/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_function_if_exists/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_function_if_exists/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_function_if_exists/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_schema/mysql/sqlc.json b/internal/endtoend/testdata/ddl_drop_schema/mysql/sqlc.json index 60ef946c26..e41c39e8b3 100644 --- a/internal/endtoend/testdata/ddl_drop_schema/mysql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_schema/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "schema.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/ddl_drop_schema/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_schema/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_schema/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_schema/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_schema_if_exists/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_schema_if_exists/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_schema_if_exists/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_schema_if_exists/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_table/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_table/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_table/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_table/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_table_if_exists/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_table_if_exists/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_table_if_exists/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_table_if_exists/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_table_in_schema/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_table_in_schema/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_table_in_schema/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_table_in_schema/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_type/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_type/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_type/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_type/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_type_if_exists/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_type_if_exists/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_type_if_exists/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_type_if_exists/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_drop_type_in_schema/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_drop_type_in_schema/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_drop_type_in_schema/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_drop_type_in_schema/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/ddl_pg_temp/postgresql/sqlc.json b/internal/endtoend/testdata/ddl_pg_temp/postgresql/sqlc.json index 27183c38bb..f717ca2e66 100644 --- a/internal/endtoend/testdata/ddl_pg_temp/postgresql/sqlc.json +++ b/internal/endtoend/testdata/ddl_pg_temp/postgresql/sqlc.json @@ -9,4 +9,4 @@ "queries": "query.sql" } ] -} \ No newline at end of file +} diff --git a/internal/endtoend/testdata/delete_from/mysql/sqlc.json b/internal/endtoend/testdata/delete_from/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/delete_from/mysql/sqlc.json +++ b/internal/endtoend/testdata/delete_from/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/emit_db_and_json_tags/sqlc.json b/internal/endtoend/testdata/emit_db_and_json_tags/sqlc.json index 3a42e54ee5..5eba7ce6d7 100644 --- a/internal/endtoend/testdata/emit_db_and_json_tags/sqlc.json +++ b/internal/endtoend/testdata/emit_db_and_json_tags/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "schema.sql", "queries": "query.sql", - "engine": "mysql:beta", + "engine": "mysql", "emit_json_tags": true, "emit_db_tags": true } diff --git a/internal/endtoend/testdata/emit_db_tags/sqlc.json b/internal/endtoend/testdata/emit_db_tags/sqlc.json index f495fd59af..bf24f260a5 100644 --- a/internal/endtoend/testdata/emit_db_tags/sqlc.json +++ b/internal/endtoend/testdata/emit_db_tags/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "schema.sql", "queries": "query.sql", - "engine": "mysql:beta", + "engine": "mysql", "emit_db_tags": true } ] diff --git a/internal/endtoend/testdata/identical_tables/mysql/sqlc.json b/internal/endtoend/testdata/identical_tables/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/identical_tables/mysql/sqlc.json +++ b/internal/endtoend/testdata/identical_tables/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/inflection/mysql/sqlc.json b/internal/endtoend/testdata/inflection/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/inflection/mysql/sqlc.json +++ b/internal/endtoend/testdata/inflection/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/insert_select/mysql/sqlc.json b/internal/endtoend/testdata/insert_select/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/insert_select/mysql/sqlc.json +++ b/internal/endtoend/testdata/insert_select/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/insert_values/mysql/sqlc.json b/internal/endtoend/testdata/insert_values/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/insert_values/mysql/sqlc.json +++ b/internal/endtoend/testdata/insert_values/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/join_alias/mysql/sqlc.json b/internal/endtoend/testdata/join_alias/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/join_alias/mysql/sqlc.json +++ b/internal/endtoend/testdata/join_alias/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/join_from/mysql/sqlc.json b/internal/endtoend/testdata/join_from/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/join_from/mysql/sqlc.json +++ b/internal/endtoend/testdata/join_from/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/join_table_name/mysql/sqlc.json b/internal/endtoend/testdata/join_table_name/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/join_table_name/mysql/sqlc.json +++ b/internal/endtoend/testdata/join_table_name/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/join_two_tables/mysql/sqlc.json b/internal/endtoend/testdata/join_two_tables/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/join_two_tables/mysql/sqlc.json +++ b/internal/endtoend/testdata/join_two_tables/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/join_where_clause/mysql/sqlc.json b/internal/endtoend/testdata/join_where_clause/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/join_where_clause/mysql/sqlc.json +++ b/internal/endtoend/testdata/join_where_clause/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/json/mysql/sqlc.json b/internal/endtoend/testdata/json/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/json/mysql/sqlc.json +++ b/internal/endtoend/testdata/json/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/overrides/mysql/sqlc.json b/internal/endtoend/testdata/overrides/mysql/sqlc.json index 23cd7caffd..592fb072a0 100644 --- a/internal/endtoend/testdata/overrides/mysql/sqlc.json +++ b/internal/endtoend/testdata/overrides/mysql/sqlc.json @@ -4,7 +4,7 @@ { "path": "go", "name": "override", - "engine": "mysql:beta", + "engine": "mysql", "schema": "schema.sql", "queries": "query.sql", "overrides": [ diff --git a/internal/endtoend/testdata/overrides_go_types/mysql/sqlc.json b/internal/endtoend/testdata/overrides_go_types/mysql/sqlc.json index 23cd7caffd..592fb072a0 100644 --- a/internal/endtoend/testdata/overrides_go_types/mysql/sqlc.json +++ b/internal/endtoend/testdata/overrides_go_types/mysql/sqlc.json @@ -4,7 +4,7 @@ { "path": "go", "name": "override", - "engine": "mysql:beta", + "engine": "mysql", "schema": "schema.sql", "queries": "query.sql", "overrides": [ diff --git a/internal/endtoend/testdata/params_duplicate/mysql/sqlc.json b/internal/endtoend/testdata/params_duplicate/mysql/sqlc.json index 7db2873f5c..a9e7b055a4 100644 --- a/internal/endtoend/testdata/params_duplicate/mysql/sqlc.json +++ b/internal/endtoend/testdata/params_duplicate/mysql/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "schema.sql", "queries": "query.sql", - "engine": "mysql:beta" + "engine": "mysql" } ] } diff --git a/internal/endtoend/testdata/params_location/mysql/sqlc.json b/internal/endtoend/testdata/params_location/mysql/sqlc.json index af79ac2a3e..bfbd23e211 100644 --- a/internal/endtoend/testdata/params_location/mysql/sqlc.json +++ b/internal/endtoend/testdata/params_location/mysql/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "query.sql", "queries": "query.sql", - "engine": "mysql:beta" + "engine": "mysql" } ] } diff --git a/internal/endtoend/testdata/params_two/mysql/sqlc.json b/internal/endtoend/testdata/params_two/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/params_two/mysql/sqlc.json +++ b/internal/endtoend/testdata/params_two/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/schema_scoped_create/mysql/sqlc.json b/internal/endtoend/testdata/schema_scoped_create/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/schema_scoped_create/mysql/sqlc.json +++ b/internal/endtoend/testdata/schema_scoped_create/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/schema_scoped_delete/mysql/sqlc.json b/internal/endtoend/testdata/schema_scoped_delete/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/schema_scoped_delete/mysql/sqlc.json +++ b/internal/endtoend/testdata/schema_scoped_delete/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/schema_scoped_filter/mysql/sqlc.json b/internal/endtoend/testdata/schema_scoped_filter/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/schema_scoped_filter/mysql/sqlc.json +++ b/internal/endtoend/testdata/schema_scoped_filter/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/schema_scoped_list/mysql/sqlc.json b/internal/endtoend/testdata/schema_scoped_list/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/schema_scoped_list/mysql/sqlc.json +++ b/internal/endtoend/testdata/schema_scoped_list/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/schema_scoped_update/mysql/sqlc.json b/internal/endtoend/testdata/schema_scoped_update/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/schema_scoped_update/mysql/sqlc.json +++ b/internal/endtoend/testdata/schema_scoped_update/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/select_limit/mysql/sqlc.json b/internal/endtoend/testdata/select_limit/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/select_limit/mysql/sqlc.json +++ b/internal/endtoend/testdata/select_limit/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/select_star/mysql/sqlc.json b/internal/endtoend/testdata/select_star/mysql/sqlc.json index 7db2873f5c..a9e7b055a4 100644 --- a/internal/endtoend/testdata/select_star/mysql/sqlc.json +++ b/internal/endtoend/testdata/select_star/mysql/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "schema.sql", "queries": "query.sql", - "engine": "mysql:beta" + "engine": "mysql" } ] } diff --git a/internal/endtoend/testdata/sqlc_arg/mysql/sqlc.json b/internal/endtoend/testdata/sqlc_arg/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/sqlc_arg/mysql/sqlc.json +++ b/internal/endtoend/testdata/sqlc_arg/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/sqlc_arg_invalid/mysql/sqlc.json b/internal/endtoend/testdata/sqlc_arg_invalid/mysql/sqlc.json index af79ac2a3e..bfbd23e211 100644 --- a/internal/endtoend/testdata/sqlc_arg_invalid/mysql/sqlc.json +++ b/internal/endtoend/testdata/sqlc_arg_invalid/mysql/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "query.sql", "queries": "query.sql", - "engine": "mysql:beta" + "engine": "mysql" } ] } diff --git a/internal/endtoend/testdata/star_expansion/mysql/sqlc.json b/internal/endtoend/testdata/star_expansion/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/star_expansion/mysql/sqlc.json +++ b/internal/endtoend/testdata/star_expansion/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/star_expansion_join/mysql/sqlc.json b/internal/endtoend/testdata/star_expansion_join/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/star_expansion_join/mysql/sqlc.json +++ b/internal/endtoend/testdata/star_expansion_join/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/star_expansion_reserved/mysql/sqlc.json b/internal/endtoend/testdata/star_expansion_reserved/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/star_expansion_reserved/mysql/sqlc.json +++ b/internal/endtoend/testdata/star_expansion_reserved/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/star_expansion_subquery/mysql/sqlc.json b/internal/endtoend/testdata/star_expansion_subquery/mysql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/star_expansion_subquery/mysql/sqlc.json +++ b/internal/endtoend/testdata/star_expansion_subquery/mysql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/subquery_calculated_column/mysql/sqlc.json b/internal/endtoend/testdata/subquery_calculated_column/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/subquery_calculated_column/mysql/sqlc.json +++ b/internal/endtoend/testdata/subquery_calculated_column/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/syntax_errors/mysql/sqlc.json b/internal/endtoend/testdata/syntax_errors/mysql/sqlc.json index 2e508b2963..0bfa8b4a59 100644 --- a/internal/endtoend/testdata/syntax_errors/mysql/sqlc.json +++ b/internal/endtoend/testdata/syntax_errors/mysql/sqlc.json @@ -6,7 +6,7 @@ "path": "go", "schema": "schema.sql", "queries": "query", - "engine": "mysql:beta" + "engine": "mysql" } ] } diff --git a/internal/endtoend/testdata/truncate/mysql/sqlc.json b/internal/endtoend/testdata/truncate/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/truncate/mysql/sqlc.json +++ b/internal/endtoend/testdata/truncate/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" diff --git a/internal/endtoend/testdata/update_set/myql/sqlc.json b/internal/endtoend/testdata/update_set/myql/sqlc.json index 334c441eec..0657f4db83 100644 --- a/internal/endtoend/testdata/update_set/myql/sqlc.json +++ b/internal/endtoend/testdata/update_set/myql/sqlc.json @@ -2,7 +2,7 @@ "version": "1", "packages": [ { - "engine": "mysql:beta", + "engine": "mysql", "path": "go", "name": "querytest", "schema": "query.sql", diff --git a/internal/endtoend/testdata/update_set_multiple/mysql/sqlc.json b/internal/endtoend/testdata/update_set_multiple/mysql/sqlc.json index 20b7096718..445bbd1589 100644 --- a/internal/endtoend/testdata/update_set_multiple/mysql/sqlc.json +++ b/internal/endtoend/testdata/update_set_multiple/mysql/sqlc.json @@ -3,7 +3,7 @@ "packages": [ { "path": "go", - "engine": "mysql:beta", + "engine": "mysql", "name": "querytest", "schema": "query.sql", "queries": "query.sql" From 1190fd62b49cc8f697f144674e17015fecb8da5b Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Wed, 18 Nov 2020 18:05:49 -0800 Subject: [PATCH 3/3] Remove the deprecated MySQL package --- internal/mysql/README.md | 5 - internal/mysql/functions.go | 32 --- internal/mysql/gen.go | 327 ------------------------ internal/mysql/gen_test.go | 34 --- internal/mysql/param.go | 224 ----------------- internal/mysql/parse.go | 482 ------------------------------------ internal/mysql/schema.go | 95 ------- 7 files changed, 1199 deletions(-) delete mode 100644 internal/mysql/README.md delete mode 100644 internal/mysql/functions.go delete mode 100644 internal/mysql/gen.go delete mode 100644 internal/mysql/gen_test.go delete mode 100644 internal/mysql/param.go delete mode 100644 internal/mysql/parse.go delete mode 100644 internal/mysql/schema.go diff --git a/internal/mysql/README.md b/internal/mysql/README.md deleted file mode 100644 index b2607db849..0000000000 --- a/internal/mysql/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Experimental MySQL Support - -## Missing Features - -- missing many MySQL types and function returns types diff --git a/internal/mysql/functions.go b/internal/mysql/functions.go deleted file mode 100644 index 3da2ed942a..0000000000 --- a/internal/mysql/functions.go +++ /dev/null @@ -1,32 +0,0 @@ -package mysql - -import ( - "fmt" -) - -// converts MySQL function name to MySQL return type -func functionReturnType(f string) string { - switch f { - case "avg", "count", "instr", "sum", "min", "max", "length", "char_length", - "ceil", "floor", "mod", "isnull": - return "int" - case "concat", "left", "replace", "substring", "trim", "find_in_set", "format", "group_concat": - return "varchar" - case "abs", "round", "truncate": - return "decimal" - default: - panic(fmt.Sprintf("unknown mysql function type \"%v\"", f)) - } -} - -// returns true if MySQL function can return null. -// See: https://dev.mysql.com/doc/refman/8.0/en/function-reference.html -func functionIsNullable(f string) bool { - switch f { - case "avg", "sum", "min", "max", "mod", - "concat", "left", "find_in_set", "group_concat": - return true - default: - return false - } -} diff --git a/internal/mysql/gen.go b/internal/mysql/gen.go deleted file mode 100644 index f627f2531d..0000000000 --- a/internal/mysql/gen.go +++ /dev/null @@ -1,327 +0,0 @@ -package mysql - -import ( - "fmt" - "sort" - "strings" - - "github.com/jinzhu/inflection" - "vitess.io/vitess/go/vt/sqlparser" - - "github.com/kyleconroy/sqlc/internal/codegen" - "github.com/kyleconroy/sqlc/internal/codegen/golang" - "github.com/kyleconroy/sqlc/internal/config" - "github.com/kyleconroy/sqlc/internal/core" -) - -type PackageGenerator struct { - *Schema - config.CombinedSettings - packageName string -} - -type Result struct { - PackageGenerator - Queries []*Query -} - -// Enums generates parser-agnostic GoEnum types -func (r *Result) Enums(settings config.CombinedSettings) []golang.Enum { - var enums []golang.Enum - for _, table := range r.Schema.tables { - for _, col := range table { - if strings.ToLower(col.Type.Type) == "enum" { - constants := []golang.Constant{} - enumName := r.enumNameFromColDef(col) - for _, c := range col.Type.EnumValues { - stripped := stripInnerQuotes(c) - constants = append(constants, golang.Constant{ - // TODO: maybe add the struct name call to capitalize the name here - Name: stripped, - Value: stripped, - Type: enumName, - }) - } - - goEnum := golang.Enum{ - Name: enumName, - Comment: "", - Constants: constants, - } - enums = append(enums, goEnum) - } - } - } - return enums -} - -func stripInnerQuotes(identifier string) string { - return strings.Replace(identifier, "'", "", 2) -} - -func (pGen PackageGenerator) enumNameFromColDef(col *sqlparser.ColumnDefinition) string { - return fmt.Sprintf("%sType", - golang.StructName(col.Name.String(), pGen.CombinedSettings)) -} - -// Structs marshels each query into a go struct for generation -func (r *Result) Structs(settings config.CombinedSettings) []golang.Struct { - var structs []golang.Struct - for tableName, cols := range r.Schema.tables { - structName := golang.StructName(tableName, settings) - if !(settings.Go.EmitExactTableNames || settings.Kotlin.EmitExactTableNames) { - structName = inflection.Singular(structName) - } - s := golang.Struct{ - Name: structName, - Table: core.FQN{tableName, "", ""}, // TODO: Complete hack. Only need for equality check to see if struct can be reused between queries - } - - for _, col := range cols { - tags := map[string]string{} - if settings.Go.EmitDBTags { - tags["db:"] = col.Name.String() - } - if settings.Go.EmitJSONTags { - tags["json:"] = col.Name.String() - } - s.Fields = append(s.Fields, golang.Field{ - Name: golang.StructName(col.Name.String(), settings), - Type: r.goTypeCol(Column{col, tableName}), - Tags: tags, - Comment: "", - }) - } - structs = append(structs, s) - } - sort.Slice(structs, func(i, j int) bool { return structs[i].Name < structs[j].Name }) - return structs -} - -// GoQueries generates parser-agnostic query information for code generation -func (r *Result) GoQueries(settings config.CombinedSettings) []golang.Query { - structs := r.Structs(settings) - - qs := make([]golang.Query, 0, len(r.Queries)) - for ix, query := range r.Queries { - if query == nil { - panic(fmt.Sprintf("query is nil on index: %v, len: %v", ix, len(r.Queries))) - } - if query.Name == "" { - continue - } - if query.Cmd == "" { - continue - } - - gq := golang.Query{ - Cmd: query.Cmd, - ConstantName: codegen.LowerTitle(query.Name), - FieldName: codegen.LowerTitle(query.Name) + "Stmt", - MethodName: query.Name, - SourceName: query.Filename, - SQL: query.SQL, - // Comments: query.Comments, - } - - if len(query.Params) == 1 { - p := query.Params[0] - gq.Arg = golang.QueryValue{ - Name: p.Name, - Typ: p.Typ, - } - } else if len(query.Params) > 1 { - - structInfo := make([]structParams, len(query.Params)) - for i := range query.Params { - qp := query.Params[i] - if qp.Typ == "" { - // if the param doesn't have a type, check to see if there is - // another param with the same name that does have a type. - // Because of the way params are parsed and named this only works for sqlc.arg(x) named params, not :x or ? - func(ps []*Param) { - for j := range ps { - if ps[j].OriginalName == qp.OriginalName && - ps[j].Typ != "" { - query.Params[i].Typ = ps[j].Typ - } - } - }(query.Params) - } - structInfo[i] = structParams{ - originalName: query.Params[i].Name, - goType: query.Params[i].Typ, - } - } - - gq.Arg = golang.QueryValue{ - Emit: true, - Name: "arg", - Struct: r.columnsToStruct(gq.MethodName+"Params", structInfo, settings), - } - } - - if len(query.Columns) == 1 { - c := query.Columns[0] - gq.Ret = golang.QueryValue{ - Name: columnName(c.ColumnDefinition, 0), - Typ: r.goTypeCol(c), - } - } else if len(query.Columns) > 1 { - var gs *golang.Struct - var emit bool - - for _, s := range structs { - if len(s.Fields) != len(query.Columns) { - continue - } - same := true - for i, f := range s.Fields { - c := query.Columns[i] - sameName := f.Name == golang.StructName(columnName(c.ColumnDefinition, i), settings) - sameType := f.Type == r.goTypeCol(c) - - hackedFQN := core.FQN{c.Table, "", ""} // TODO: only check needed here is equality to see if struct can be reused, this type should be removed or properly used - sameTable := s.Table.Catalog == hackedFQN.Catalog && s.Table.Schema == hackedFQN.Schema && s.Table.Rel == hackedFQN.Rel - - if !sameName || !sameType || !sameTable { - same = false - } - } - if same { - gs = &s - break - } - } - - if gs == nil { - structInfo := make([]structParams, len(query.Columns)) - for i := range query.Columns { - structInfo[i] = structParams{ - originalName: query.Columns[i].Name.String(), - goType: r.goTypeCol(query.Columns[i]), - } - } - gs = r.columnsToStruct(gq.MethodName+"Row", structInfo, settings) - emit = true - } - gq.Ret = golang.QueryValue{ - Emit: emit, - Name: "i", - Struct: gs, - } - } - - qs = append(qs, gq) - } - sort.Slice(qs, func(i, j int) bool { return qs[i].MethodName < qs[j].MethodName }) - return qs -} - -type structParams struct { - originalName string - goType string -} - -func (r *Result) columnsToStruct(name string, items []structParams, settings config.CombinedSettings) *golang.Struct { - gs := golang.Struct{ - Name: name, - } - seen := map[string]int{} - for _, item := range items { - name := item.originalName - typ := item.goType - tagName := name - fieldName := golang.StructName(name, settings) - if v := seen[name]; v > 0 { - tagName = fmt.Sprintf("%s_%d", tagName, v+1) - fieldName = fmt.Sprintf("%s_%d", fieldName, v+1) - } - tags := map[string]string{} - if settings.Go.EmitDBTags { - tags["db:"] = tagName - } - if settings.Go.EmitJSONTags { - tags["json:"] = tagName - } - gs.Fields = append(gs.Fields, golang.Field{ - Name: fieldName, - Type: typ, - Tags: tags, - }) - seen[name]++ - } - return &gs -} - -func (pGen PackageGenerator) goTypeCol(col Column) string { - mySQLType := strings.ToLower(col.ColumnDefinition.Type.Type) - notNull := bool(col.Type.NotNull) - colName := col.Name.String() - - for _, oride := range pGen.Overrides { - shouldOverride := (oride.DBType != "" && oride.DBType == mySQLType && oride.Nullable != notNull) || - (oride.ColumnName != "" && oride.ColumnName == colName && oride.Table.Rel == col.Table) - if shouldOverride { - return oride.GoTypeName - } - } - switch t := mySQLType; { - case "varchar" == t, "text" == t, "char" == t, - "tinytext" == t, "mediumtext" == t, "longtext" == t: - if col.Type.NotNull { - return "string" - } - return "sql.NullString" - case "int" == t, "integer" == t, t == "smallint", - "mediumint" == t, "bigint" == t, "year" == t: - if col.Type.NotNull { - return "int" - } - return "sql.NullInt64" - case "blob" == t, "binary" == t, "varbinary" == t, "tinyblob" == t, - "mediumblob" == t, "longblob" == t: - return "[]byte" - case "float" == t, strings.HasPrefix(strings.ToLower(t), "decimal"): - if col.Type.NotNull { - return "float64" - } - return "sql.NullFloat64" - case "enum" == t: - return pGen.enumNameFromColDef(col.ColumnDefinition) - case "date" == t, "timestamp" == t, "datetime" == t, "time" == t: - if col.Type.NotNull { - return "time.Time" - } - return "sql.NullTime" - case "boolean" == t, "bool" == t, "tinyint" == t: - if col.Type.NotNull { - return "bool" - } - return "sql.NullBool" - default: - fmt.Printf("unknown MySQL type: %s\n", t) - return "interface{}" - } -} - -func columnName(c *sqlparser.ColumnDefinition, pos int) string { - if !c.Name.IsEmpty() { - return c.Name.String() - } - return fmt.Sprintf("column_%d", pos+1) -} - -func argName(name string) string { - out := "" - for i, p := range strings.Split(name, "_") { - if i == 0 { - out += strings.ToLower(p) - } else if p == "id" { - out += "ID" - } else { - out += strings.Title(p) - } - } - return out -} diff --git a/internal/mysql/gen_test.go b/internal/mysql/gen_test.go deleted file mode 100644 index 1d00b4c155..0000000000 --- a/internal/mysql/gen_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package mysql - -import ( - "testing" - - "github.com/google/go-cmp/cmp" -) - -func TestArgName(t *testing.T) { - tcase := [...]struct { - input string - output string - }{ - { - input: "get_users", - output: "getUsers", - }, - { - input: "get_users_by_id", - output: "getUsersByID", - }, - { - input: "get_all_", - output: "getAll", - }, - } - - for _, tc := range tcase { - name := argName(tc.input) - if diff := cmp.Diff(name, tc.output); diff != "" { - t.Errorf(diff) - } - } -} diff --git a/internal/mysql/param.go b/internal/mysql/param.go deleted file mode 100644 index 112cb4d40c..0000000000 --- a/internal/mysql/param.go +++ /dev/null @@ -1,224 +0,0 @@ -package mysql - -import ( - "fmt" - "regexp" - "sort" - "strings" - - "vitess.io/vitess/go/vt/sqlparser" -) - -// Param describes a runtime query parameter with its -// associated type. Example: "SELECT name FROM users id = ?" -type Param struct { - OriginalName string - Name string - Typ string -} - -func (pGen PackageGenerator) paramsInLimitExpr(limit *sqlparser.Limit, tableAliasMap FromTables) ([]*Param, error) { - params := []*Param{} - if limit == nil { - return params, nil - } - - parseLimitSubExp := func(node sqlparser.Expr) error { - switch v := node.(type) { - case *sqlparser.SQLVal: - if v.Type == sqlparser.ValArg { - params = append(params, &Param{ - OriginalName: string(v.Val), - Name: "limit", - Typ: "uint32", - }) - } - case *sqlparser.FuncExpr: - name, raw, err := matchFuncExpr(v) - if err != nil { - return err - } - if name != "" && raw != "" { - params = append(params, &Param{ - OriginalName: raw, - Name: name, - Typ: "uint32", - }) - } - } - return nil - } - - err := parseLimitSubExp(limit.Offset) - if err != nil { - return nil, err - } - err = parseLimitSubExp(limit.Rowcount) - if err != nil { - return nil, err - } - - return params, nil -} - -func (pGen PackageGenerator) paramsInWhereExpr(e sqlparser.SQLNode, tableAliasMap FromTables, defaultTable string) ([]*Param, error) { - params := []*Param{} - if e == nil { - return params, nil - } else if expr, ok := e.(*sqlparser.Where); ok { - if expr == nil { - return params, nil - } - e = expr.Expr - } - switch v := e.(type) { - case *sqlparser.Where: - if v == nil { - return params, nil - } - return pGen.paramsInWhereExpr(v, tableAliasMap, defaultTable) - case *sqlparser.ComparisonExpr: - p, found, err := pGen.paramInComparison(v, tableAliasMap, defaultTable) - if err != nil { - return nil, err - } - if found { - params = append(params, p) - } - case *sqlparser.AndExpr: - left, err := pGen.paramsInWhereExpr(v.Left, tableAliasMap, defaultTable) - if err != nil { - return nil, err - } - params = append(params, left...) - right, err := pGen.paramsInWhereExpr(v.Right, tableAliasMap, defaultTable) - if err != nil { - return nil, err - } - params = append(params, right...) - case *sqlparser.OrExpr: - left, err := pGen.paramsInWhereExpr(v.Left, tableAliasMap, defaultTable) - if err != nil { - return nil, err - } - params = append(params, left...) - right, err := pGen.paramsInWhereExpr(v.Right, tableAliasMap, defaultTable) - if err != nil { - return nil, err - } - params = append(params, right...) - case *sqlparser.IsExpr: - // TODO: see if there is a use case for params in IS expressions - return []*Param{}, nil - default: - panic(fmt.Sprintf("Failed to handle %T in where", v)) - } - - return params, nil -} - -func (pGen PackageGenerator) paramInComparison(cond *sqlparser.ComparisonExpr, tableAliasMap FromTables, defaultTable string) (*Param, bool, error) { - param := &Param{} - var colIdent sqlparser.ColIdent - walker := func(node sqlparser.SQLNode) (bool, error) { - switch v := node.(type) { - case *sqlparser.ColName: - col, err := pGen.getColType(v, tableAliasMap, defaultTable) - if err != nil { - return false, err - } - param.Typ = pGen.goTypeCol(*col) - colIdent = col.Name - - case *sqlparser.SQLVal: - if v.Type == sqlparser.ValArg { - param.OriginalName = string(v.Val) - } - case *sqlparser.FuncExpr: - name, raw, err := matchFuncExpr(v) - if err != nil { - return false, err - } - if name != "" && raw != "" { - param.OriginalName = raw - param.Name = name - } - return false, nil - } - return true, nil - } - err := sqlparser.Walk(walker, cond) - if err != nil { - return nil, false, err - } - if param.Name != "" { - return param, true, nil - } - if param.OriginalName != "" && param.Typ != "" { - param.Name = paramName(colIdent, param.OriginalName) - return param, true, nil - } - return nil, false, nil -} - -func paramName(col sqlparser.ColIdent, originalName string) string { - str := col.String() - if !strings.HasPrefix(originalName, ":v") { - return originalName[1:] - } - if str != "" { - return str - } - num := originalName[2] - return fmt.Sprintf("param%v", num) -} - -func replaceParamStrs(query string, params []*Param) (string, error) { - /* - To ensure that ":v1" does not replace ":v12", we need to sort - the params in decending order by length of the string. - But, the original order of the params must be preserved. - */ - paramsCopy := make([]*Param, len(params)) - copy(paramsCopy, params) - sort.Slice(paramsCopy, func(i, j int) bool { - return len(paramsCopy[i].OriginalName) > len(paramsCopy[j].OriginalName) - }) - - for _, p := range paramsCopy { - re, err := regexp.Compile(fmt.Sprintf("(%v)", regexp.QuoteMeta(p.OriginalName))) - if err != nil { - return "", err - } - query = re.ReplaceAllString(query, "?") - } - return query, nil -} - -func matchFuncExpr(v *sqlparser.FuncExpr) (name string, raw string, err error) { - namespace := "sqlc" - fakeFunc := "arg" - if v.Qualifier.String() == namespace { - if v.Name.String() == fakeFunc { - if expr, ok := v.Exprs[0].(*sqlparser.AliasedExpr); ok { - if colName, ok := expr.Expr.(*sqlparser.ColName); ok { - customName := colName.Name.String() - return customName, fmt.Sprintf("%s.%s(%s)", namespace, fakeFunc, customName), nil - } - return "", "", fmt.Errorf("invalid custom argument value \"%s.%s(%s)\"", namespace, fakeFunc, replaceVParamExprs(sqlparser.String(v.Exprs[0]))) - } - return "", "", fmt.Errorf("invalid custom argument value \"%s.%s(%s)\"", namespace, fakeFunc, replaceVParamExprs(sqlparser.String(v.Exprs[0]))) - } - return "", "", fmt.Errorf("invalid function call \"%s.%s\", did you mean \"%s.%s\"?", namespace, v.Name.String(), namespace, fakeFunc) - } - return "", "", nil -} - -func replaceVParamExprs(sql string) string { - /* - the sqlparser replaces "?" with ":v1" - to display a helpful error message, these should be replaced back to "?" - */ - matcher := regexp.MustCompile(":v[0-9]*") - return matcher.ReplaceAllString(sql, "?") -} diff --git a/internal/mysql/parse.go b/internal/mysql/parse.go deleted file mode 100644 index 955afd935f..0000000000 --- a/internal/mysql/parse.go +++ /dev/null @@ -1,482 +0,0 @@ -package mysql - -import ( - "fmt" - "io" - "io/ioutil" - "path/filepath" - - "vitess.io/vitess/go/vt/sqlparser" - - "github.com/kyleconroy/sqlc/internal/config" - "github.com/kyleconroy/sqlc/internal/metadata" - "github.com/kyleconroy/sqlc/internal/migrations" - "github.com/kyleconroy/sqlc/internal/multierr" - "github.com/kyleconroy/sqlc/internal/sql/sqlpath" -) - -// Query holds the data for walking and validating mysql querys -type Query struct { - SQL string // the string representation of the parsed query - Columns []Column - Params []*Param // "?" params in the query string - Name string // the Go function name - Cmd string // TODO: Pick a better name. One of: one, many, exec, execrows - DefaultTableName string // for columns that are not qualified - - Filename string -} - -type Column struct { - *sqlparser.ColumnDefinition - Table string -} - -func parsePath(sqlPath []string, generator PackageGenerator) (*Result, error) { - files, err := sqlpath.Glob(sqlPath) - if err != nil { - return nil, err - } - - parseErrors := multierr.New() - parsedQueries := []*Query{} - for _, filename := range files { - blob, err := ioutil.ReadFile(filename) - if err != nil { - parseErrors.Add(filename, "", 0, err) - } - contents := migrations.RemoveRollbackStatements(string(blob)) - if err != nil { - parseErrors.Add(filename, "", 0, err) - continue - } - - t := sqlparser.NewStringTokenizer(contents) - var start int - for { - q, err := sqlparser.ParseNextStrictDDL(t) - if err == io.EOF { - break - } else if err != nil { - if posErr, ok := err.(sqlparser.PositionedErr); ok { - message := fmt.Errorf(posErr.Err) - if posErr.Near != nil { - message = fmt.Errorf("%s at or near \"%s\"", posErr.Err, posErr.Near) - } - parseErrors.Add(filename, contents, posErr.Pos, message) - } else { - parseErrors.Add(filename, contents, start, err) - } - continue - } - query := contents[start : t.Position-1] - result, err := generator.parseQueryString(q, query) - if err != nil { - parseErrors.Add(filename, contents, start, err) - start = t.Position - continue - } - start = t.Position - if result == nil { - continue - } - result.Filename = filepath.Base(filename) - parsedQueries = append(parsedQueries, result) - } - } - - if len(parseErrors.Errs()) > 0 { - return nil, parseErrors - } - - return &Result{ - Queries: parsedQueries, - PackageGenerator: generator, - }, nil -} - -func (pGen PackageGenerator) parseQueryString(tree sqlparser.Statement, query string) (*Query, error) { - var parsedQuery *Query - switch tree := tree.(type) { - case *sqlparser.Select: - selectQuery, err := pGen.parseSelect(tree, query) - if err != nil { - return nil, err - } - parsedQuery = selectQuery - case *sqlparser.Insert: - insert, err := pGen.parseInsert(tree, query) - if err != nil { - return nil, err - } - parsedQuery = insert - case *sqlparser.Update: - update, err := pGen.parseUpdate(tree, query) - if err != nil { - return nil, err - } - parsedQuery = update - case *sqlparser.Delete: - delete, err := pGen.parseDelete(tree, query) - if err != nil { - return nil, err - } - parsedQuery = delete - case *sqlparser.DDL: - return nil, pGen.Schema.Add(tree) - default: - // panic("Unsupported SQL statement type") - return nil, nil - } - paramsReplacedQuery, err := replaceParamStrs(sqlparser.String(tree), parsedQuery.Params) - if err != nil { - return nil, fmt.Errorf("failed to replace param variables in query string: %w", err) - } - parsedQuery.SQL = paramsReplacedQuery - return parsedQuery, nil -} - -func (q *Query) parseNameAndCmd() error { - if q == nil { - return fmt.Errorf("cannot parse name and cmd from null query") - } - _, comments := sqlparser.SplitMarginComments(q.SQL) - name, cmd, err := metadata.Parse(comments.Leading, metadata.CommentSyntax{SlashStar: true}) - if err != nil { - return err - } else if name == "" || cmd == "" { - return fmt.Errorf("failed to parse query leading comment") - } - q.Name = name - q.Cmd = cmd - return nil -} - -func (pGen PackageGenerator) parseSelect(tree *sqlparser.Select, query string) (*Query, error) { - tableAliasMap, defaultTableName, err := parseFrom(tree.From, false) - if err != nil { - return nil, fmt.Errorf("failed to parse table name alias's: %w", err) - } - - // handle * expressions first by expanding all columns of the default table - _, ok := tree.SelectExprs[0].(*sqlparser.StarExpr) - if ok { - colNames := []sqlparser.SelectExpr{} - colDfns := pGen.Schema.tables[defaultTableName] - for _, col := range colDfns { - colNames = append(colNames, &sqlparser.AliasedExpr{ - Expr: &sqlparser.ColName{ - Name: col.Name, - }}, - ) - } - tree.SelectExprs = colNames - } - - parsedQuery := Query{ - SQL: query, - DefaultTableName: defaultTableName, - } - cols, err := pGen.parseSelectAliasExpr(tree.SelectExprs, tableAliasMap, defaultTableName) - if err != nil { - return nil, err - } - parsedQuery.Columns = cols - - whereParams, err := pGen.paramsInWhereExpr(tree.Where, tableAliasMap, defaultTableName) - if err != nil { - return nil, err - } - - limitParams, err := pGen.paramsInLimitExpr(tree.Limit, tableAliasMap) - if err != nil { - return nil, err - } - parsedQuery.Params = append(whereParams, limitParams...) - - err = parsedQuery.parseNameAndCmd() - if err != nil { - return nil, err - } - - return &parsedQuery, nil -} - -// FromTable describes a table reference in the "FROM" clause of a query. -type FromTable struct { - TrueName string // the true table name as described in the schema - IsLeftJoined bool // which could result in null columns -} - -// FromTables describes a map between table alias expressions and the -// proper table name -type FromTables map[string]FromTable - -func parseFrom(from sqlparser.TableExprs, isLeftJoined bool) (FromTables, string, error) { - tables := make(map[string]FromTable) - var defaultTableName string - for _, expr := range from { - switch v := expr.(type) { - case *sqlparser.AliasedTableExpr: - name, ok := v.Expr.(sqlparser.TableName) - if !ok { - return nil, "", fmt.Errorf("failed to parse AliasedTableExpr name: %v", v) - } - t := FromTable{ - TrueName: name.Name.String(), - IsLeftJoined: isLeftJoined, - } - if v.As.String() != "" { - tables[v.As.String()] = t - } else { - tables[name.Name.String()] = t - } - defaultTableName = name.Name.String() - case *sqlparser.JoinTableExpr: - isLeftJoin := v.Join == "left join" - left, leftMostTableName, err := parseFrom([]sqlparser.TableExpr{v.LeftExpr}, false) - if err != nil { - return nil, "", err - } - right, _, err := parseFrom([]sqlparser.TableExpr{v.RightExpr}, isLeftJoin) - if err != nil { - return nil, "", err - } - // merge the left and right maps - for k, v := range left { - right[k] = v - } - return right, leftMostTableName, nil - default: - return nil, "", fmt.Errorf("failed to parse table expr: %v", v) - } - } - return tables, defaultTableName, nil -} - -func (pGen PackageGenerator) parseUpdate(node *sqlparser.Update, query string) (*Query, error) { - tableAliasMap, defaultTable, err := parseFrom(node.TableExprs, false) - if err != nil { - return nil, fmt.Errorf("failed to parse table name alias's: %w", err) - } - - params := []*Param{} - for _, updateExpr := range node.Exprs { - newValue, isValue := updateExpr.Expr.(*sqlparser.SQLVal) - if !isValue { - continue - } else if isParam := newValue.Type == sqlparser.ValArg; !isParam { - continue - } - col, err := pGen.getColType(updateExpr.Name, tableAliasMap, defaultTable) - if err != nil { - return nil, fmt.Errorf("failed to determine type of a parameter's column: %w", err) - } - originalParamName := string(newValue.Val) - param := Param{ - OriginalName: originalParamName, - Name: paramName(col.Name, originalParamName), - Typ: pGen.goTypeCol(*col), - } - params = append(params, ¶m) - } - - whereParams, err := pGen.paramsInWhereExpr(node.Where, tableAliasMap, defaultTable) - if err != nil { - return nil, fmt.Errorf("failed to parse params from WHERE expression: %w", err) - } - - parsedQuery := Query{ - SQL: query, - Columns: nil, - Params: append(params, whereParams...), - DefaultTableName: defaultTable, - } - err = parsedQuery.parseNameAndCmd() - if err != nil { - return nil, err - } - - return &parsedQuery, nil -} - -func (pGen PackageGenerator) parseInsert(node *sqlparser.Insert, query string) (*Query, error) { - params := []*Param{} - cols := node.Columns - tableName := node.Table.Name.String() - - switch rows := node.Rows.(type) { - case *sqlparser.Select: - selectQuery, err := pGen.parseSelect(rows, query) - if err != nil { - return nil, err - } - params = append(params, selectQuery.Params...) - case sqlparser.Values: - for _, row := range rows { - for colIx, item := range row { - switch v := item.(type) { - case *sqlparser.SQLVal: - if v.Type == sqlparser.ValArg { - colName := cols[colIx].String() - col, err := pGen.schemaLookup(tableName, colName) - varName := string(v.Val) - param := &Param{OriginalName: varName} - if err == nil { - param.Name = paramName(col.Name, varName) - param.Typ = pGen.goTypeCol(*col) - } else { - param.Name = "Unknown" - param.Typ = "interface{}" - } - params = append(params, param) - } - case *sqlparser.FuncExpr: - name, raw, err := matchFuncExpr(v) - - if err != nil { - return nil, err - } - if name == "" || raw == "" { - continue - } - colName := cols[colIx].String() - col, err := pGen.schemaLookup(tableName, colName) - param := &Param{ - OriginalName: raw, - } - if err == nil { - param.Name = name - param.Typ = pGen.goTypeCol(*col) - } else { - param.Name = "Unknown" - param.Typ = "interface{}" - } - params = append(params, param) - default: - return nil, fmt.Errorf("failed to parse insert query value") - } - } - } - default: - return nil, fmt.Errorf("Unknown insert row type of %T", node.Rows) - } - - parsedQuery := &Query{ - SQL: query, - Params: params, - Columns: nil, - DefaultTableName: tableName, - } - - err := parsedQuery.parseNameAndCmd() - if err != nil { - return nil, err - } - return parsedQuery, nil -} - -func (pGen PackageGenerator) parseDelete(node *sqlparser.Delete, query string) (*Query, error) { - tableAliasMap, defaultTableName, err := parseFrom(node.TableExprs, false) - if err != nil { - return nil, fmt.Errorf("failed to parse table name alias's: %w", err) - } - - whereParams, err := pGen.paramsInWhereExpr(node.Where, tableAliasMap, defaultTableName) - if err != nil { - return nil, err - } - - limitParams, err := pGen.paramsInLimitExpr(node.Limit, tableAliasMap) - if err != nil { - return nil, err - } - parsedQuery := &Query{ - SQL: query, - Params: append(whereParams, limitParams...), - Columns: nil, - DefaultTableName: defaultTableName, - } - err = parsedQuery.parseNameAndCmd() - if err != nil { - return nil, err - } - - return parsedQuery, nil -} - -func (pGen PackageGenerator) parseSelectAliasExpr(exprs sqlparser.SelectExprs, tableAliasMap FromTables, defaultTable string) ([]Column, error) { - cols := []Column{} - for _, col := range exprs { - switch expr := col.(type) { - case *sqlparser.AliasedExpr: - hasAlias := !expr.As.IsEmpty() - - switch v := expr.Expr.(type) { - case *sqlparser.ColName: - res, err := pGen.getColType(v, tableAliasMap, defaultTable) - if err != nil { - return nil, err - } - if hasAlias { - res.Name = expr.As // applys the alias - } - - cols = append(cols, *res) - case *sqlparser.GroupConcatExpr: - cols = append(cols, Column{ - ColumnDefinition: &sqlparser.ColumnDefinition{ - Name: sqlparser.NewColIdent(expr.As.String()), - Type: sqlparser.ColumnType{ - Type: "varchar", - NotNull: true, - }, - }, - Table: "", // group concat expressions don't originate from a table schema - }, - ) - case *sqlparser.FuncExpr: - funcName := v.Name.Lowered() - funcType := functionReturnType(funcName) - - var returnVal sqlparser.ColIdent - if hasAlias { - returnVal = expr.As - } else { - returnVal = sqlparser.NewColIdent(funcName) - } - - colDfn := &sqlparser.ColumnDefinition{ - Name: returnVal, - Type: sqlparser.ColumnType{ - Type: funcType, - NotNull: sqlparser.BoolVal(!functionIsNullable(funcName)), - }, - } - cols = append(cols, Column{colDfn, ""}) // func returns types don't originate from a table schema - } - default: - return nil, fmt.Errorf("Failed to handle select expr of type : %T", expr) - } - } - return cols, nil -} - -// GeneratePkg is the main entry to mysql generator package -func GeneratePkg(pkgName string, schemaPath, querysPath []string, settings config.CombinedSettings) (*Result, error) { - s := NewSchema() - generator := PackageGenerator{ - Schema: s, - CombinedSettings: settings, - packageName: pkgName, - } - _, err := parsePath(schemaPath, generator) - if err != nil { - return nil, err - } - result, err := parsePath(querysPath, generator) - if err != nil { - return nil, err - } - return result, nil -} diff --git a/internal/mysql/schema.go b/internal/mysql/schema.go deleted file mode 100644 index c93208701b..0000000000 --- a/internal/mysql/schema.go +++ /dev/null @@ -1,95 +0,0 @@ -package mysql - -import ( - "fmt" - - "vitess.io/vitess/go/vt/sqlparser" -) - -// NewSchema gives a newly instantiated MySQL schema map -func NewSchema() *Schema { - return &Schema{ - tables: make(map[string]([]*sqlparser.ColumnDefinition)), - } -} - -// Schema proves that information for mapping columns in queries to their respective table definitions -// and validating that they are correct so as to map to the correct Go type -type Schema struct { - tables map[string]([]*sqlparser.ColumnDefinition) -} - -// returns a deep copy of the column definition for using as a query return type or param type -func (s *Schema) getColType(col *sqlparser.ColName, tableAliasMap FromTables, defaultTableName string) (*Column, error) { - realTable, err := tableColReferences(col, defaultTableName, tableAliasMap) - if err != nil { - return nil, err - } - - colDfn, err := s.schemaLookup(realTable.TrueName, col.Name.String()) - if err != nil { - return nil, err - } - colDfnCopy := *colDfn.ColumnDefinition - if realTable.IsLeftJoined { - colDfnCopy.Type.NotNull = false - } - return &Column{&colDfnCopy, realTable.TrueName}, nil -} - -func tableColReferences(col *sqlparser.ColName, defaultTable string, tableAliasMap FromTables) (FromTable, error) { - var table FromTable - if col.Qualifier.IsEmpty() { - if defaultTable == "" { - return FromTable{}, fmt.Errorf("column reference \"%s\" is ambiguous, add a qualifier", col.Name.String()) - } - table = FromTable{defaultTable, false} - } else { - fromTable, ok := tableAliasMap[col.Qualifier.Name.String()] - if !ok { - return FromTable{}, fmt.Errorf("column qualifier \"%s\" is not in schema or is an invalid alias", col.Qualifier.Name.String()) - } - return fromTable, nil - } - return table, nil -} - -// Add add a MySQL table definition to the schema map -func (s *Schema) Add(ddl *sqlparser.DDL) error { - switch ddl.Action { - case "create": - name := ddl.Table.Name.String() - if ddl.TableSpec == nil { - return fmt.Errorf("failed to parse table \"%s\" schema", name) - } - s.tables[name] = ddl.TableSpec.Columns - case "rename": - if len(ddl.FromTables) != 1 || len(ddl.ToTables) != 1 { - return fmt.Errorf("rename without one 'from' table and one 'to' table: %#v", ddl) - } - from := ddl.FromTables[0].Name.String() - to := ddl.ToTables[0].Name.String() - cols, ok := s.tables[from] - if !ok { - return fmt.Errorf("unknown existing table %q", from) - } - delete(s.tables, from) - s.tables[to] = cols - } - return nil -} - -func (s *Schema) schemaLookup(table string, col string) (*Column, error) { - cols, ok := s.tables[table] - if !ok { - return nil, fmt.Errorf("table \"%s\" not found in schema", table) - } - - for _, colDef := range cols { - if colDef.Name.EqualString(col) { - return &Column{colDef, table}, nil - } - } - - return nil, fmt.Errorf("column \"%s\" not found in table \"%s\"", col, table) -}