v1.24.0 #3003
kyleconroy
announced in
Announce
v1.24.0
#3003
Replies: 1 comment
-
Hyped to try |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
What's new
Verifying database schema changes
Schema updates and poorly-written queries often bring down production databases. That’s bad.
Out of the box,
sqlc generate
catches some of these issues. Runningsqlc vet
with thesqlc/db-prepare
rule catches more subtle problems. But there is a large class of issues that sqlc can’t prevent by looking at current schema and queries alone.For instance, when a schema change is proposed, existing queries and code running in production might fail when the schema change is applied. Enter
sqlc verify
, which analyzes existing queries against new schema changes and errors if there are any issues.Let's look at an example. Assume you have these two tables in production.
Your application contains the following query to join user actions against the users table.
So far, so good. Then assume you propose this schema change:
Running
sqlc generate
fails with this change, returning acolumn reference "created_at" is ambiguous
error. You update your query to fix the issue.While that change fixes the issue, there's a production outage waiting to happen. When the schema change is applied, the existing
GetUserActions
query will begin to fail. The correct way to fix this is to deploy the updated query before applying the schema migration.It ensures migrations are safe to deploy by sending your current schema and queries to sqlc cloud. There, we run the queries for your latest push against your new schema changes. This check catches backwards incompatible schema changes for existing queries.
Here
sqlc verify
alerts you to the fact that ORDER BY "created_at" is ambiguous.$ sqlc verify FAIL: app query.sql === Failed === FAIL: app query.sql GetUserActions ERROR: column reference "created_at" is ambiguous (SQLSTATE 42702)
By the way, this scenario isn't made up! It happened to us a few weeks ago. We've been happily testing early versions of
verify
for the last two weeks and haven't had any issues since.This type of verification is only the start. If your application is deployed on-prem by your customers,
verify
could tell you if it's safe for your customers to rollback to an older version of your app, even after schema migrations have been run.Rename
upload
command topush
We've renamed the
upload
sub-command topush
. We changed the data sent along in a push request. Upload used to include the configuration file, migrations, queries, and all generated code. Push drops the generated code in favor of including the plugin.GenerateRequest, which is the protocol buffer message we pass to codegen plugins.We also add annotations to each push. By default, we include these environment variables if they are present:
Like upload,
push
should be run when you tag a release of your application. We run it on every push to main, as we continuously deploy those commits.MySQL support in
createdb
The
createdb
command, added in the last release, now supports MySQL. If you have a cloud project configured, you can usesqlc createdb
to spin up a new ephemeral database with your schema and print its connection string to standard output. This is useful for integrating with other tools. Read more in the managed databases documentation.Plugin interface refactor
This release includes a refactored plugin interface to better support future functionality. Plugins now support different methods via a gRPC service interface, allowing plugins to support different functionality in a backwards-compatible way.
By using gRPC interfaces, we can even (theoretically) support remote plugins, but that's something for another day.
New Contributors
sqlpath.Glob
to actually support glob wildcard #2955Full Changelog: v1.23.0...v1.24.0
This discussion was created from the release v1.24.0.
Beta Was this translation helpful? Give feedback.
All reactions