querygen

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 8, 2024 License: Apache-2.0

README

querygen: CLI + tiny library for readable SQL queries

querygen enables writing parameterized SQL queries using string interpolation-like syntax. Since Go lacks features like macros, quasiquotes or native string interpolation, we resort to heinous crimes codegen.

Usage

Write a SQL query in your Go code using interpolation-like syntax:

package cakes // cakes.go

const partyAttendeesQuery = `
SELECT person_name
FROM party_attendees
WHERE party = {{partyId : int}}
`

const bestChoiceCakeQuery = `
WITH attendees AS (` + partyAttendeesQuery + `)

SELECT fave_cakes.cake_type
FROM attendees JOIN fave_cakes ON attendees.person_name = fave_cakes.person_name
-- Need to allow host to exclude one cake they don't like
WHERE fave_cake.cake_type != {{excludedCakeType : string}}
GROUP BY fave_cake.cake_type 
ORDER BY COUNT(fave_cake.cake_type) DESC
LIMIT 1
`

Run the querygen CLI on the package.

This will generate a file next to the original file:

// Code generated by querygen.
// You may only edit import statements.
package cakes // cakes_query_gen.go

import (
	"github.com/sourcegraph/querygen/lib/interpolate"
)

type partyAttendeesQueryParams struct {
	partyId int
}

var _ interpolate.QueryParams = &partyAttendeesQueryParams{}

// methods omitted...

type bestChoiceCakeQueryParams struct {
	partyId          int
	excludedCakeType string
}

var _ interpolate.QueryParams = &bestChoiceCakeQueryParams{}

// methods omitted...

You can use these structs with interpolate.Do(myQuery, &myQueryParams{...}) function to generate a *sqlf.Query which can then be executed. The interpolate.Do function replaces the sqlf.Sprintf function.

For more complex usage, see Reference.md.

Contributing

See Development.md for build instructions etc.

At the moment, this is made primarily for Sourcegraph's internal use. So any form of support will be on a best-effort basis.

Directories

Path Synopsis
cmd
lib
tests
simple
Code generated by querygen.
Code generated by querygen.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL