feat(codegen/golang): Allow exporting models to a different package #3874
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #835
This PR adds exporting models to a different package feature to Go code generator.
I also added a how-to page for this feature, you can check the
docs/howto/separate-models-file.mdfile.Main code changes made in this PR
output_models_package,models_package_import_pathandoutput_query_files_directoryoptions to gen/go configuration. (internal/codegen/golang/opts/options.go)Packagefield toStructtype to specify the correct type of the Struct since they can be in different package now. (internal/codegen/golang/struct.goandinternal/codegen/golang/result.go)Type()method ofQueryValuewill return{Package}.{Name}forStructtypes if thePackagefield of theStructis not empty. (internal/codegen/golang/query.go){Package}.prefix to enum types if configuration specifies separate models package. (changed onlyinternal/codegen/golang/postgresql_type.gosince only postgresql implementation supports typed enum values)internal/codegen/golang/imports.go)Note for sqlc users
You can simply try this feature using my sqlc-gen-go plugin fork. I will try to keep that plugin and this PR in sync. Surely sqlc-gen-go plugin configuration is not same as the sqlc gen configuration but the feature implementation code is the same as this PR.