Skip to content

walterwanderley/sqlc-http

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LiberaPay receives patrons

sqlc-http

Create a net/http Server from the generated code by the awesome sqlc project. If you’re searching for a SQLC plugin, use sqlc-gen-go-server.

Requirements

  • Go 1.23 or superior
  • sqlc
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest

Installation

go install github.com/walterwanderley/sqlc-http@latest

Fullstack application example (HTMX)

If you want to generate a complete application (including htmx frontend), check this example.

Example

  1. Create a queries.sql file:
--queries.sql CREATE TABLE authors ( id BIGSERIAL PRIMARY KEY, name text NOT NULL, bio text, created_at TIMESTAMP ); -- name: GetAuthor :one -- http: GET /authors/{id} SELECT * FROM authors WHERE id = $1 LIMIT 1; -- name: ListAuthors :many -- http: GET /authors SELECT * FROM authors ORDER BY name; -- name: CreateAuthor :one -- http: POST /authors INSERT INTO authors ( name, bio, created_at ) VALUES ( $1, $2, $3 ) RETURNING *; -- name: DeleteAuthor :exec -- http: DELETE /authors/{id} DELETE FROM authors WHERE id = $1; -- name: UpdateAuthorBio :exec -- http: PATCH /authors/{id}/bio UPDATE authors SET bio = $1 WHERE id = $2;
  1. Create a sqlc.yaml file
version: "2" sql: - schema: "./queries.sql" queries: "./queries.sql" engine: "postgresql" gen: go: out: "internal/author"
  1. Execute sqlc
sqlc generate
  1. Execute sqlc-http
sqlc-http -m "mymodule"

If you want to generate the frontend (htmx):

sqlc-http -m "mymodule" -frontend
  1. Run the generated server
go run . -db [Database Connection URL] -dev
  1. Enjoy!

If you do not generate the frontend in step 4?

If you generate the frontend in step 4:

Customizing HTTP endpoints

You can customize the HTTP endpoints by adding comments to the queries.

-- http: Method Path

Here’s an example of a queries file that has a custom HTTP endpoint:

-- name: ListAuthors :many -- http: GET /authors SELECT * FROM authors ORDER BY name; -- name: UpdateAuthorBio :exec -- http: PATCH /authors/{id}/bio UPDATE authors SET bio = $1 WHERE id = $2;

Editing the generated code

  • It's safe to edit any generated code that doesn't have the DO NOT EDIT indication at the very first line.

  • After modify a SQL file, execute these commands below:

sqlc generate go generate

Similar Projects

About

Generate net/http go server from SQL

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

No packages published