diff --git a/internal/cmd/fmt.go b/internal/cmd/fmt.go
index 3c77dbc22e..ffa5833e7f 100644
--- a/internal/cmd/fmt.go
+++ b/internal/cmd/fmt.go
@@ -188,12 +188,12 @@ func Format(ctx context.Context, dir, filename string, o *Options) (map[string]s
continue
}
// File-level belt for the reprinter path: no formatting result may
- // change the file's comments. A violation is a formatter bug; keep
- // the file as written and say so.
+ // change the file's comments or its statement count. A violation is
+ // a formatter bug; keep the file as written and say so.
before, err1 := f.ParseFile(strings.NewReader(string(contents)))
after, err2 := f.ParseFile(strings.NewReader(formatted))
- if err1 == nil && (err2 != nil || !sameComments(before.Comments, after.Comments)) {
- fmt.Fprintf(stderr, "%s: skipped: formatting would alter comments (this is a bug in sqlc fmt)\n", rel)
+ if err1 == nil && (err2 != nil || len(before.Stmts) != len(after.Stmts) || !sameComments(before.Comments, after.Comments)) {
+ fmt.Fprintf(stderr, "%s: skipped: formatting would alter the file (this is a bug in sqlc fmt)\n", rel)
continue
}
output[file] = formatted
diff --git a/internal/compiler/output_columns.go b/internal/compiler/output_columns.go
index 76b63eb365..557fb7d575 100644
--- a/internal/compiler/output_columns.go
+++ b/internal/compiler/output_columns.go
@@ -453,7 +453,7 @@ func isTableRequired(n ast.Node, col *Column, prior int) int {
return helper(tableOptional, tableRequired)
case ast.JoinTypeFull:
return helper(tableOptional, tableOptional)
- case ast.JoinTypeInner:
+ case ast.JoinTypeInner, ast.JoinTypeCross, ast.JoinTypeComma:
return helper(tableRequired, tableRequired)
}
case *ast.List:
diff --git a/internal/endtoend/testdata/between_args/sqlite/go/query.sql.go b/internal/endtoend/testdata/between_args/sqlite/go/query.sql.go
index 6ee3292017..2083abf243 100644
--- a/internal/endtoend/testdata/between_args/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/between_args/sqlite/go/query.sql.go
@@ -10,9 +10,9 @@ import (
)
const getBetweenPrices = `-- name: GetBetweenPrices :many
-SELECT name, price
-FROM products
-WHERE price BETWEEN ? AND ?
+SELECT name, price
+FROM products
+WHERE price BETWEEN ? AND ?
`
type GetBetweenPricesParams struct {
@@ -44,9 +44,9 @@ func (q *Queries) GetBetweenPrices(ctx context.Context, arg GetBetweenPricesPara
}
const getBetweenPricesTable = `-- name: GetBetweenPricesTable :many
-SELECT name, price
-FROM products
-WHERE products.price BETWEEN ? AND ?
+SELECT name, price
+FROM products
+WHERE products.price BETWEEN ? AND ?
`
type GetBetweenPricesTableParams struct {
@@ -78,9 +78,9 @@ func (q *Queries) GetBetweenPricesTable(ctx context.Context, arg GetBetweenPrice
}
const getBetweenPricesTableAlias = `-- name: GetBetweenPricesTableAlias :many
-SELECT name, price
-FROM products as p
-WHERE p.price BETWEEN ? AND ?
+SELECT name, price
+FROM products AS p
+WHERE p.price BETWEEN ? AND ?
`
type GetBetweenPricesTableAliasParams struct {
diff --git a/internal/endtoend/testdata/between_args/sqlite/query.sql b/internal/endtoend/testdata/between_args/sqlite/query.sql
index a7648ca582..14dd15f06f 100644
--- a/internal/endtoend/testdata/between_args/sqlite/query.sql
+++ b/internal/endtoend/testdata/between_args/sqlite/query.sql
@@ -1,14 +1,14 @@
-- name: GetBetweenPrices :many
-SELECT *
-FROM products
-WHERE price BETWEEN ? AND ?;
+SELECT *
+FROM products
+WHERE price BETWEEN ? AND ?;
-- name: GetBetweenPricesTable :many
-SELECT *
-FROM products
-WHERE products.price BETWEEN ? AND ?;
+SELECT *
+FROM products
+WHERE products.price BETWEEN ? AND ?;
-- name: GetBetweenPricesTableAlias :many
-SELECT *
-FROM products as p
-WHERE p.price BETWEEN ? AND ?;
+SELECT *
+FROM products AS p
+WHERE p.price BETWEEN ? AND ?;
diff --git a/internal/endtoend/testdata/builtins/sqlite/go/mathfunc.sql.go b/internal/endtoend/testdata/builtins/sqlite/go/mathfunc.sql.go
index f366b19836..30ae799ce5 100644
--- a/internal/endtoend/testdata/builtins/sqlite/go/mathfunc.sql.go
+++ b/internal/endtoend/testdata/builtins/sqlite/go/mathfunc.sql.go
@@ -10,7 +10,7 @@ import (
)
const getAcos = `-- name: GetAcos :one
-select acos(1.0)
+SELECT acos(1.0)
`
func (q *Queries) GetAcos(ctx context.Context) (float64, error) {
@@ -21,7 +21,7 @@ func (q *Queries) GetAcos(ctx context.Context) (float64, error) {
}
const getAcosh = `-- name: GetAcosh :one
-select acosh(1.0)
+SELECT acosh(1.0)
`
func (q *Queries) GetAcosh(ctx context.Context) (float64, error) {
@@ -32,7 +32,7 @@ func (q *Queries) GetAcosh(ctx context.Context) (float64, error) {
}
const getAsin = `-- name: GetAsin :one
-select asin(1.0)
+SELECT asin(1.0)
`
func (q *Queries) GetAsin(ctx context.Context) (float64, error) {
@@ -43,7 +43,7 @@ func (q *Queries) GetAsin(ctx context.Context) (float64, error) {
}
const getAsinh = `-- name: GetAsinh :one
-select asinh(1.0)
+SELECT asinh(1.0)
`
func (q *Queries) GetAsinh(ctx context.Context) (float64, error) {
@@ -54,7 +54,7 @@ func (q *Queries) GetAsinh(ctx context.Context) (float64, error) {
}
const getAtan = `-- name: GetAtan :one
-select atan(1.0)
+SELECT atan(1.0)
`
func (q *Queries) GetAtan(ctx context.Context) (float64, error) {
@@ -65,7 +65,7 @@ func (q *Queries) GetAtan(ctx context.Context) (float64, error) {
}
const getAtan2 = `-- name: GetAtan2 :one
-select atan2(1.0, 0.5)
+SELECT atan2(1.0, 0.5)
`
func (q *Queries) GetAtan2(ctx context.Context) (float64, error) {
@@ -76,7 +76,7 @@ func (q *Queries) GetAtan2(ctx context.Context) (float64, error) {
}
const getAtanh = `-- name: GetAtanh :one
-select atanh(1.0)
+SELECT atanh(1.0)
`
func (q *Queries) GetAtanh(ctx context.Context) (float64, error) {
@@ -87,7 +87,7 @@ func (q *Queries) GetAtanh(ctx context.Context) (float64, error) {
}
const getCeil = `-- name: GetCeil :one
-select ceil(1.0)
+SELECT ceil(1.0)
`
func (q *Queries) GetCeil(ctx context.Context) (int64, error) {
@@ -98,7 +98,7 @@ func (q *Queries) GetCeil(ctx context.Context) (int64, error) {
}
const getCeilin = `-- name: GetCeilin :one
-select ceiling(1.0)
+SELECT ceiling(1.0)
`
func (q *Queries) GetCeilin(ctx context.Context) (int64, error) {
@@ -109,7 +109,7 @@ func (q *Queries) GetCeilin(ctx context.Context) (int64, error) {
}
const getCos = `-- name: GetCos :one
-select cos(1.0)
+SELECT cos(1.0)
`
func (q *Queries) GetCos(ctx context.Context) (float64, error) {
@@ -120,7 +120,7 @@ func (q *Queries) GetCos(ctx context.Context) (float64, error) {
}
const getCosh = `-- name: GetCosh :one
-select cosh(1.0)
+SELECT cosh(1.0)
`
func (q *Queries) GetCosh(ctx context.Context) (float64, error) {
@@ -131,7 +131,7 @@ func (q *Queries) GetCosh(ctx context.Context) (float64, error) {
}
const getDegrees = `-- name: GetDegrees :one
-select degrees(1.0)
+SELECT degrees(1.0)
`
func (q *Queries) GetDegrees(ctx context.Context) (float64, error) {
@@ -142,7 +142,7 @@ func (q *Queries) GetDegrees(ctx context.Context) (float64, error) {
}
const getExp = `-- name: GetExp :one
-select exp(1.0)
+SELECT exp(1.0)
`
func (q *Queries) GetExp(ctx context.Context) (float64, error) {
@@ -153,7 +153,7 @@ func (q *Queries) GetExp(ctx context.Context) (float64, error) {
}
const getFloor = `-- name: GetFloor :one
-select floor(1.0)
+SELECT floor(1.0)
`
func (q *Queries) GetFloor(ctx context.Context) (int64, error) {
@@ -164,7 +164,7 @@ func (q *Queries) GetFloor(ctx context.Context) (int64, error) {
}
const getLn = `-- name: GetLn :one
-select ln(1.0)
+SELECT ln(1.0)
`
func (q *Queries) GetLn(ctx context.Context) (float64, error) {
@@ -175,7 +175,7 @@ func (q *Queries) GetLn(ctx context.Context) (float64, error) {
}
const getLog = `-- name: GetLog :one
-select log(1.0)
+SELECT log(1.0)
`
func (q *Queries) GetLog(ctx context.Context) (float64, error) {
@@ -186,7 +186,7 @@ func (q *Queries) GetLog(ctx context.Context) (float64, error) {
}
const getLog10 = `-- name: GetLog10 :one
-select log10(1.0)
+SELECT log10(1.0)
`
func (q *Queries) GetLog10(ctx context.Context) (float64, error) {
@@ -197,7 +197,7 @@ func (q *Queries) GetLog10(ctx context.Context) (float64, error) {
}
const getLog2 = `-- name: GetLog2 :one
-select log2(1.0)
+SELECT log2(1.0)
`
func (q *Queries) GetLog2(ctx context.Context) (float64, error) {
@@ -208,7 +208,7 @@ func (q *Queries) GetLog2(ctx context.Context) (float64, error) {
}
const getLogBase = `-- name: GetLogBase :one
-select log(1.0, 2.0)
+SELECT log(1.0, 2.0)
`
func (q *Queries) GetLogBase(ctx context.Context) (float64, error) {
@@ -219,7 +219,7 @@ func (q *Queries) GetLogBase(ctx context.Context) (float64, error) {
}
const getMod = `-- name: GetMod :one
-select mod(1, 2)
+SELECT mod(1, 2)
`
func (q *Queries) GetMod(ctx context.Context) (float64, error) {
@@ -230,7 +230,7 @@ func (q *Queries) GetMod(ctx context.Context) (float64, error) {
}
const getPi = `-- name: GetPi :one
-select pi()
+SELECT pi()
`
func (q *Queries) GetPi(ctx context.Context) (float64, error) {
@@ -241,7 +241,7 @@ func (q *Queries) GetPi(ctx context.Context) (float64, error) {
}
const getPow = `-- name: GetPow :one
-select pow(1, 2)
+SELECT pow(1, 2)
`
func (q *Queries) GetPow(ctx context.Context) (float64, error) {
@@ -252,7 +252,7 @@ func (q *Queries) GetPow(ctx context.Context) (float64, error) {
}
const getPower = `-- name: GetPower :one
-select power(1, 2)
+SELECT power(1, 2)
`
func (q *Queries) GetPower(ctx context.Context) (float64, error) {
@@ -263,7 +263,7 @@ func (q *Queries) GetPower(ctx context.Context) (float64, error) {
}
const getRadians = `-- name: GetRadians :one
-select radians(1)
+SELECT radians(1)
`
func (q *Queries) GetRadians(ctx context.Context) (float64, error) {
@@ -274,7 +274,7 @@ func (q *Queries) GetRadians(ctx context.Context) (float64, error) {
}
const getSin = `-- name: GetSin :one
-select sin(1.0)
+SELECT sin(1.0)
`
func (q *Queries) GetSin(ctx context.Context) (float64, error) {
@@ -285,7 +285,7 @@ func (q *Queries) GetSin(ctx context.Context) (float64, error) {
}
const getSinh = `-- name: GetSinh :one
-select sinh(1.0)
+SELECT sinh(1.0)
`
func (q *Queries) GetSinh(ctx context.Context) (float64, error) {
@@ -296,7 +296,7 @@ func (q *Queries) GetSinh(ctx context.Context) (float64, error) {
}
const getSqrt = `-- name: GetSqrt :one
-select sqrt(1.0)
+SELECT sqrt(1.0)
`
func (q *Queries) GetSqrt(ctx context.Context) (float64, error) {
@@ -307,7 +307,7 @@ func (q *Queries) GetSqrt(ctx context.Context) (float64, error) {
}
const getTan = `-- name: GetTan :one
-select tan(1.0)
+SELECT tan(1.0)
`
func (q *Queries) GetTan(ctx context.Context) (float64, error) {
@@ -318,7 +318,7 @@ func (q *Queries) GetTan(ctx context.Context) (float64, error) {
}
const getTrunc = `-- name: GetTrunc :one
-select trunc(1.0)
+SELECT trunc(1.0)
`
func (q *Queries) GetTrunc(ctx context.Context) (int64, error) {
diff --git a/internal/endtoend/testdata/builtins/sqlite/queries/mathfunc.sql b/internal/endtoend/testdata/builtins/sqlite/queries/mathfunc.sql
index d62c2b6521..cf3e2f5c44 100644
--- a/internal/endtoend/testdata/builtins/sqlite/queries/mathfunc.sql
+++ b/internal/endtoend/testdata/builtins/sqlite/queries/mathfunc.sql
@@ -1,86 +1,86 @@
-- name: GetAcos :one
-select acos(1.0);
+SELECT acos(1.0);
-- name: GetAcosh :one
-select acosh(1.0);
+SELECT acosh(1.0);
-- name: GetAsin :one
-select asin(1.0);
+SELECT asin(1.0);
-- name: GetAsinh :one
-select asinh(1.0);
+SELECT asinh(1.0);
-- name: GetAtan :one
-select atan(1.0);
+SELECT atan(1.0);
-- name: GetAtan2 :one
-select atan2(1.0, 0.5);
+SELECT atan2(1.0, 0.5);
-- name: GetAtanh :one
-select atanh(1.0);
+SELECT atanh(1.0);
-- name: GetCeil :one
-select ceil(1.0);
+SELECT ceil(1.0);
-- name: GetCeilin :one
-select ceiling(1.0);
+SELECT ceiling(1.0);
-- name: GetCos :one
-select cos(1.0);
+SELECT cos(1.0);
-- name: GetCosh :one
-select cosh(1.0);
+SELECT cosh(1.0);
-- name: GetDegrees :one
-select degrees(1.0);
+SELECT degrees(1.0);
-- name: GetExp :one
-select exp(1.0);
+SELECT exp(1.0);
-- name: GetFloor :one
-select floor(1.0);
+SELECT floor(1.0);
-- name: GetLn :one
-select ln(1.0);
+SELECT ln(1.0);
-- name: GetLog :one
-select log(1.0);
+SELECT log(1.0);
-- name: GetLog10 :one
-select log10(1.0);
+SELECT log10(1.0);
-- name: GetLogBase :one
-select log(1.0, 2.0);
+SELECT log(1.0, 2.0);
-- name: GetLog2 :one
-select log2(1.0);
+SELECT log2(1.0);
-- name: GetMod :one
-select mod(1, 2);
+SELECT mod(1, 2);
-- name: GetPi :one
-select pi();
+SELECT pi();
-- name: GetPow :one
-select pow(1, 2);
+SELECT pow(1, 2);
-- name: GetPower :one
-select power(1, 2);
+SELECT power(1, 2);
-- name: GetRadians :one
-select radians(1);
+SELECT radians(1);
-- name: GetSin :one
-select sin(1.0);
+SELECT sin(1.0);
-- name: GetSinh :one
-select sinh(1.0);
+SELECT sinh(1.0);
-- name: GetSqrt :one
-select sqrt(1.0);
+SELECT sqrt(1.0);
-- name: GetTan :one
-select tan(1.0);
+SELECT tan(1.0);
-- name: GetTrunc :one
-select trunc(1.0);
+SELECT trunc(1.0);
diff --git a/internal/endtoend/testdata/case_sensitive/sqlite/go/query.sql.go b/internal/endtoend/testdata/case_sensitive/sqlite/go/query.sql.go
index 434a9ef40e..a1c5a532e4 100644
--- a/internal/endtoend/testdata/case_sensitive/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/case_sensitive/sqlite/go/query.sql.go
@@ -12,10 +12,10 @@ import (
const insertContact = `-- name: InsertContact :exec
INSERT INTO contacts (
- pid,
- CustomerName
+ pid,
+ customername
)
-VALUES (?,?)
+VALUES (?, ?)
`
type InsertContactParams struct {
diff --git a/internal/endtoend/testdata/case_sensitive/sqlite/query.sql b/internal/endtoend/testdata/case_sensitive/sqlite/query.sql
index 0c05277ef4..20dafb2fc3 100644
--- a/internal/endtoend/testdata/case_sensitive/sqlite/query.sql
+++ b/internal/endtoend/testdata/case_sensitive/sqlite/query.sql
@@ -1,7 +1,6 @@
-- name: InsertContact :exec
INSERT INTO contacts (
- pid,
- CustomerName
+ pid,
+ customername
)
-VALUES (?,?)
-;
+VALUES (?, ?);
diff --git a/internal/endtoend/testdata/coalesce/sqlite/go/query.sql.go b/internal/endtoend/testdata/coalesce/sqlite/go/query.sql.go
index c98120bf50..4324a035ac 100644
--- a/internal/endtoend/testdata/coalesce/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/coalesce/sqlite/go/query.sql.go
@@ -11,7 +11,7 @@ import (
)
const coalesce = `-- name: Coalesce :many
-SELECT coalesce(bar, '') as login
+SELECT coalesce(bar, '') AS login
FROM foo
`
diff --git a/internal/endtoend/testdata/coalesce/sqlite/query.sql b/internal/endtoend/testdata/coalesce/sqlite/query.sql
index 4cc0de9e29..f7b1c92a05 100644
--- a/internal/endtoend/testdata/coalesce/sqlite/query.sql
+++ b/internal/endtoend/testdata/coalesce/sqlite/query.sql
@@ -1,5 +1,5 @@
-- name: Coalesce :many
-SELECT coalesce(bar, '') as login
+SELECT coalesce(bar, '') AS login
FROM foo;
-- name: CoalesceColumns :many
diff --git a/internal/endtoend/testdata/coalesce_as/sqlite/go/query.sql.go b/internal/endtoend/testdata/coalesce_as/sqlite/go/query.sql.go
index 8ce06bb097..556c5b5955 100644
--- a/internal/endtoend/testdata/coalesce_as/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/coalesce_as/sqlite/go/query.sql.go
@@ -11,7 +11,7 @@ import (
)
const sumBaz = `-- name: SumBaz :many
-SELECT bar, coalesce(sum(baz), 0) as quantity
+SELECT bar, coalesce(sum(baz), 0) AS quantity
FROM foo
GROUP BY 1
`
diff --git a/internal/endtoend/testdata/coalesce_as/sqlite/query.sql b/internal/endtoend/testdata/coalesce_as/sqlite/query.sql
index 3f51061f8b..d092958fb9 100644
--- a/internal/endtoend/testdata/coalesce_as/sqlite/query.sql
+++ b/internal/endtoend/testdata/coalesce_as/sqlite/query.sql
@@ -1,4 +1,4 @@
-- name: SumBaz :many
-SELECT bar, coalesce(sum(baz), 0) as quantity
+SELECT bar, coalesce(sum(baz), 0) AS quantity
FROM foo
GROUP BY 1;
diff --git a/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go b/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go
index 6530033ee7..66d96ac3d9 100644
--- a/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/column_as/sqlite/go/query.sql.go
@@ -26,7 +26,7 @@ func (q *Queries) WithAs(ctx context.Context) (WithAsRow, error) {
}
const withoutAs = `-- name: WithoutAs :one
-SELECT 1 x, 2 y
+SELECT 1 AS x, 2 AS y
`
type WithoutAsRow struct {
diff --git a/internal/endtoend/testdata/column_as/sqlite/query.sql b/internal/endtoend/testdata/column_as/sqlite/query.sql
index c7282d88ef..e783582d56 100644
--- a/internal/endtoend/testdata/column_as/sqlite/query.sql
+++ b/internal/endtoend/testdata/column_as/sqlite/query.sql
@@ -2,4 +2,4 @@
SELECT 1 AS x, 2 AS y;
-- name: WithoutAs :one
-SELECT 1 x, 2 y;
+SELECT 1 AS x, 2 AS y;
diff --git a/internal/endtoend/testdata/comparisons/sqlite/query.sql b/internal/endtoend/testdata/comparisons/sqlite/query.sql
index 8763edaa62..41ea9ab1a7 100644
--- a/internal/endtoend/testdata/comparisons/sqlite/query.sql
+++ b/internal/endtoend/testdata/comparisons/sqlite/query.sql
@@ -18,9 +18,3 @@ SELECT count(*) <> 0 FROM bar;
-- name: Equal :many
SELECT count(*) = 0 FROM bar;
-
-
-
-
-
-
diff --git a/internal/endtoend/testdata/count_star/sqlite/go/query.sql.go b/internal/endtoend/testdata/count_star/sqlite/go/query.sql.go
index 817ad88789..155bfc114a 100644
--- a/internal/endtoend/testdata/count_star/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/count_star/sqlite/go/query.sql.go
@@ -21,7 +21,7 @@ func (q *Queries) CountStarLower(ctx context.Context) (int64, error) {
}
const countStarUpper = `-- name: CountStarUpper :one
-SELECT COUNT(*) FROM bar
+SELECT count(*) FROM bar
`
func (q *Queries) CountStarUpper(ctx context.Context) (int64, error) {
diff --git a/internal/endtoend/testdata/count_star/sqlite/query.sql b/internal/endtoend/testdata/count_star/sqlite/query.sql
index 6cba4363c5..4fbc6599a8 100644
--- a/internal/endtoend/testdata/count_star/sqlite/query.sql
+++ b/internal/endtoend/testdata/count_star/sqlite/query.sql
@@ -2,4 +2,4 @@
SELECT count(*) FROM bar;
-- name: CountStarUpper :one
-SELECT COUNT(*) FROM bar;
+SELECT count(*) FROM bar;
diff --git a/internal/endtoend/testdata/datatype/sqlite/sql/character.sql b/internal/endtoend/testdata/datatype/sqlite/sql/character.sql
index d4b728bdab..8c5a6ea95c 100644
--- a/internal/endtoend/testdata/datatype/sqlite/sql/character.sql
+++ b/internal/endtoend/testdata/datatype/sqlite/sql/character.sql
@@ -1,23 +1,23 @@
-- Character Types
-- https://www.sqlite.org/datatype3.html
CREATE TABLE dt_character (
- a CHARACTER(32),
- b VARCHAR(32),
- c VARYING CHARACTER(32),
- d NCHAR(32),
- e NATIVE CHARACTER(32),
- f NVARCHAR(32),
- g TEXT,
- h CLOB
+ a CHARACTER(32),
+ b VARCHAR(32),
+ c VARYING CHARACTER(32),
+ d NCHAR(32),
+ e NATIVE CHARACTER(32),
+ f NVARCHAR(32),
+ g TEXT,
+ h CLOB
);
CREATE TABLE dt_character_not_null (
- a CHARACTER(32) NOT NULL,
- b VARCHAR(32) NOT NULL,
- c VARYING CHARACTER(32) NOT NULL,
- d NCHAR(32) NOT NULL,
- e NATIVE CHARACTER(32) NOT NULL,
- f NVARCHAR(32) NOT NULL,
- g TEXT NOT NULL,
- h CLOB NOT NULL
+ a CHARACTER(32) NOT NULL,
+ b VARCHAR(32) NOT NULL,
+ c VARYING CHARACTER(32) NOT NULL,
+ d NCHAR(32) NOT NULL,
+ e NATIVE CHARACTER(32) NOT NULL,
+ f NVARCHAR(32) NOT NULL,
+ g TEXT NOT NULL,
+ h CLOB NOT NULL
);
diff --git a/internal/endtoend/testdata/datatype/sqlite/sql/datetime.sql b/internal/endtoend/testdata/datatype/sqlite/sql/datetime.sql
index 6008cf6ae6..a1f91e513d 100644
--- a/internal/endtoend/testdata/datatype/sqlite/sql/datetime.sql
+++ b/internal/endtoend/testdata/datatype/sqlite/sql/datetime.sql
@@ -1,13 +1,13 @@
-- Date/Time Types
-- https://www.sqlite.org/datatype3.html
CREATE TABLE dt_datetime (
- a DATE,
- b DATETIME,
- c TIMESTAMP
+ a DATE,
+ b DATETIME,
+ c TIMESTAMP
);
CREATE TABLE dt_datetime_not_null (
- a DATE NOT NULL,
- b DATETIME NOT NULL,
- c TIMESTAMP NOT NULL
+ a DATE NOT NULL,
+ b DATETIME NOT NULL,
+ c TIMESTAMP NOT NULL
);
diff --git a/internal/endtoend/testdata/datatype/sqlite/sql/numeric.sql b/internal/endtoend/testdata/datatype/sqlite/sql/numeric.sql
index a85b4f295b..1662cb6ce0 100644
--- a/internal/endtoend/testdata/datatype/sqlite/sql/numeric.sql
+++ b/internal/endtoend/testdata/datatype/sqlite/sql/numeric.sql
@@ -1,37 +1,37 @@
-- Numeric Types
-- https://www.sqlite.org/datatype3.html
CREATE TABLE dt_numeric (
- a INT,
- b INTEGER,
- c TINYINT,
- d SMALLINT,
- e MEDIUMINT,
- f BIGINT,
- g UNSIGNED BIG INT,
- h INT2,
- i INT8,
- j REAL,
- k DOUBLE,
- l DOUBLE PRECISION,
- m FLOAT,
- n NUMERIC,
- o DECIMAL(10,5)
+ a INT,
+ b INTEGER,
+ c TINYINT,
+ d SMALLINT,
+ e MEDIUMINT,
+ f BIGINT,
+ g UNSIGNED BIG INT,
+ h INT2,
+ i INT8,
+ j REAL,
+ k DOUBLE,
+ l DOUBLE PRECISION,
+ m FLOAT,
+ n NUMERIC,
+ o DECIMAL(10,5)
);
CREATE TABLE dt_numeric_not_null (
- a INT NOT NULL,
- b INTEGER NOT NULL,
- c TINYINT NOT NULL,
- d SMALLINT NOT NULL,
- e MEDIUMINT NOT NULL,
- f BIGINT NOT NULL,
- g UNSIGNED BIG INT NOT NULL,
- h INT2 NOT NULL,
- i INT8 NOT NULL,
- j REAL NOT NULL,
- k DOUBLE NOT NULL,
- l DOUBLE PRECISION NOT NULL,
- m FLOAT NOT NULL,
- n NUMERIC NOT NULL,
- o DECIMAL(10,5) NOT NULL
+ a INT NOT NULL,
+ b INTEGER NOT NULL,
+ c TINYINT NOT NULL,
+ d SMALLINT NOT NULL,
+ e MEDIUMINT NOT NULL,
+ f BIGINT NOT NULL,
+ g UNSIGNED BIG INT NOT NULL,
+ h INT2 NOT NULL,
+ i INT8 NOT NULL,
+ j REAL NOT NULL,
+ k DOUBLE NOT NULL,
+ l DOUBLE PRECISION NOT NULL,
+ m FLOAT NOT NULL,
+ n NUMERIC NOT NULL,
+ o DECIMAL(10,5) NOT NULL
);
diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go
index e704e1da87..f6fb2a4b5b 100644
--- a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/go/query.sql.go
@@ -10,7 +10,7 @@ import (
)
const placeholder = `-- name: Placeholder :many
-SELECT name, location, size from venues
+SELECT name, location, size FROM venues
`
func (q *Queries) Placeholder(ctx context.Context) ([]Venue, error) {
diff --git a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql
index 1dbfac7154..c05c2203cd 100644
--- a/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql
+++ b/internal/endtoend/testdata/ddl_alter_table_add_column/sqlite/query.sql
@@ -1,2 +1,2 @@
/* name: Placeholder :many */
-SELECT * from venues;
+SELECT * FROM venues;
diff --git a/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/go/query.sql.go
index 003d857f66..43e0007167 100644
--- a/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/go/query.sql.go
@@ -11,7 +11,7 @@ import (
)
const insertUser = `-- name: InsertUser :exec
-INSERT INTO Users (full_name, "EmailAddress", created_at)
+INSERT INTO users (full_name, "EmailAddress", created_at)
VALUES (?, ?, ?)
`
@@ -28,7 +28,7 @@ func (q *Queries) InsertUser(ctx context.Context, arg InsertUserParams) error {
const selectUsers = `-- name: SelectUsers :many
SELECT id, full_name, "EmailAddress", created_at
-FROM Users
+FROM users
`
func (q *Queries) SelectUsers(ctx context.Context) ([]User, error) {
diff --git a/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/query.sql
index 79989697e8..d960ab1f07 100644
--- a/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/query.sql
+++ b/internal/endtoend/testdata/ddl_alter_table_case_sensitivity/sqlite/query.sql
@@ -1,7 +1,7 @@
-- name: InsertUser :exec
-INSERT INTO Users (full_name, "EmailAddress", created_at)
+INSERT INTO users (full_name, "EmailAddress", created_at)
VALUES (?, ?, ?);
-- name: SelectUsers :many
SELECT id, full_name, "EmailAddress", created_at
-FROM Users;
+FROM users;
diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go
index c40977d573..a0b6155ece 100644
--- a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/go/query.sql.go
@@ -10,7 +10,7 @@ import (
)
const placeholder = `-- name: Placeholder :exec
-SELECT baz from foo
+SELECT baz FROM foo
`
func (q *Queries) Placeholder(ctx context.Context) error {
diff --git a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql
index 198b08bb8d..92dc72524c 100644
--- a/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql
+++ b/internal/endtoend/testdata/ddl_alter_table_drop_column/sqlite/query.sql
@@ -1,2 +1,2 @@
-- name: Placeholder :exec
-SELECT * from foo;
+SELECT * FROM foo;
diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go
index 980754a73a..e52ada4441 100644
--- a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/go/query.sql.go
@@ -11,7 +11,7 @@ import (
)
const placeholder = `-- name: Placeholder :many
-SELECT name from arenas
+SELECT name FROM arenas
`
func (q *Queries) Placeholder(ctx context.Context) ([]sql.NullString, error) {
diff --git a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql
index 3cb2745388..bf777e0cb6 100644
--- a/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql
+++ b/internal/endtoend/testdata/ddl_alter_table_rename/sqlite/query.sql
@@ -1,2 +1,2 @@
/* name: Placeholder :many */
-SELECT * from arenas;
+SELECT * FROM arenas;
diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go
index 1e373c56fa..d8317bd784 100644
--- a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/go/query.sql.go
@@ -11,7 +11,7 @@ import (
)
const placeholder = `-- name: Placeholder :many
-SELECT boo from foo
+SELECT boo FROM foo
`
func (q *Queries) Placeholder(ctx context.Context) ([]sql.NullString, error) {
diff --git a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql
index 43794d52b5..4b98a8146c 100644
--- a/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql
+++ b/internal/endtoend/testdata/ddl_alter_table_rename_column/sqlite/query.sql
@@ -1,2 +1,2 @@
/* name: Placeholder :many */
-SELECT * from foo;
+SELECT * FROM foo;
diff --git a/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/go/query.sql.go b/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/go/query.sql.go
index cc56c0a7d5..d26dc4d217 100644
--- a/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/go/query.sql.go
@@ -40,7 +40,8 @@ func (q *Queries) DeleteAuthor(ctx context.Context, id int64) error {
}
const getAuthor = `-- name: GetAuthor :one
-SELECT id, name, bio FROM authors
+SELECT id, name, bio
+FROM authors
WHERE id = ?
`
@@ -52,7 +53,8 @@ func (q *Queries) GetAuthor(ctx context.Context, id int64) (Author, error) {
}
const listAuthors = `-- name: ListAuthors :many
-SELECT id, name FROM authors
+SELECT id, name
+FROM authors
ORDER BY name
`
diff --git a/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/query.sql b/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/query.sql
index f8efb619a7..00f0bd0746 100644
--- a/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/query.sql
+++ b/internal/endtoend/testdata/experiment_coreanalyzer/sqlite/query.sql
@@ -1,9 +1,11 @@
-- name: GetAuthor :one
-SELECT * FROM authors
+SELECT *
+FROM authors
WHERE id = ?;
-- name: ListAuthors :many
-SELECT id, name FROM authors
+SELECT id, name
+FROM authors
ORDER BY name;
-- name: CreateAuthor :one
diff --git a/internal/endtoend/testdata/fmt/sqlite/query.sql b/internal/endtoend/testdata/fmt/sqlite/query.sql
index eac3f3997f..2856ca935b 100644
--- a/internal/endtoend/testdata/fmt/sqlite/query.sql
+++ b/internal/endtoend/testdata/fmt/sqlite/query.sql
@@ -65,3 +65,43 @@ CREATE VIRTUAL TABLE recipes_fts USING fts5(
name,
ingredients
);
+
+-- name: LoginName :one
+SELECT COALESCE(bio, '') AS login FROM authors WHERE id = ? LIMIT 1;
+
+-- name: SpelledJoins :many
+SELECT a.id
+FROM authors AS a
+INNER JOIN authors AS b ON a.id = b.id
+LEFT OUTER JOIN authors AS c ON a.id = c.id
+WHERE a.id != ? AND b.id == ? AND c.id <> ?;
+
+-- name: CommaJoin :one
+SELECT count(*) FROM authors AS a, authors AS b WHERE a.id = b.id;
+
+-- name: PlannerHint :many
+SELECT a.id FROM authors AS a CROSS JOIN authors AS b;
+
+-- name: NumberedParams :many
+SELECT id FROM authors WHERE name = ?2 AND bio = ?1;
+
+-- name: NewestAndOldest :many
+SELECT id FROM authors
+UNION
+SELECT id FROM authors;
+
+-- name: QuickUnion :many
+SELECT id FROM authors UNION ALL SELECT id FROM authors;
+
+-- name: EnableForeignKeys :exec
+PRAGMA foreign_keys = 1;
+
+-- name: UpsertAuthor :exec
+INSERT INTO authors (id, name)
+VALUES (?, ?)
+ON CONFLICT (id) DO UPDATE SET
+ name = excluded.name
+WHERE excluded.name <> '';
+
+-- name: QuickUpsert :exec
+INSERT INTO authors (id, name) VALUES (?, ?) ON CONFLICT (id) DO UPDATE SET name = excluded.name;
diff --git a/internal/endtoend/testdata/fmt/sqlite/stdout.txt b/internal/endtoend/testdata/fmt/sqlite/stdout.txt
index d7572ead96..b9201e3620 100644
--- a/internal/endtoend/testdata/fmt/sqlite/stdout.txt
+++ b/internal/endtoend/testdata/fmt/sqlite/stdout.txt
@@ -64,3 +64,21 @@
-- name: MakeRecipeIndex :exec
CREATE VIRTUAL TABLE recipes_fts USING fts5(
+@@ -67,7 +74,7 @@
+ );
+
+ -- name: LoginName :one
++SELECT coalesce(bio, '') AS login FROM authors WHERE id = ? LIMIT 1;
+-SELECT COALESCE(bio, '') AS login FROM authors WHERE id = ? LIMIT 1;
+
+ -- name: SpelledJoins :many
+ SELECT a.id
+@@ -74,6 +81,6 @@
+ FROM authors AS a
++JOIN authors AS b ON a.id = b.id
++LEFT JOIN authors AS c ON a.id = c.id
+-INNER JOIN authors AS b ON a.id = b.id
+-LEFT OUTER JOIN authors AS c ON a.id = c.id
+ WHERE a.id != ? AND b.id == ? AND c.id <> ?;
+
+ -- name: CommaJoin :one
diff --git a/internal/endtoend/testdata/full_outer_join/sqlite/go/query.sql.go b/internal/endtoend/testdata/full_outer_join/sqlite/go/query.sql.go
index 129a6d9118..5f514710d8 100644
--- a/internal/endtoend/testdata/full_outer_join/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/full_outer_join/sqlite/go/query.sql.go
@@ -11,10 +11,11 @@ import (
)
const getAuthor = `-- name: GetAuthor :one
-SELECT a.id, name, b.id, title FROM authors AS a
-FULL OUTER JOIN books AS b
- ON a.id = b.id
-WHERE a.id = ? LIMIT 1
+SELECT a.id, name, b.id, title
+FROM authors AS a
+FULL JOIN books AS b ON a.id = b.id
+WHERE a.id = ?
+LIMIT 1
`
type GetAuthorRow struct {
diff --git a/internal/endtoend/testdata/full_outer_join/sqlite/query.sql b/internal/endtoend/testdata/full_outer_join/sqlite/query.sql
index b9feaba655..979d2557d3 100644
--- a/internal/endtoend/testdata/full_outer_join/sqlite/query.sql
+++ b/internal/endtoend/testdata/full_outer_join/sqlite/query.sql
@@ -1,5 +1,6 @@
-- name: GetAuthor :one
-SELECT * FROM authors AS a
-FULL OUTER JOIN books AS b
- ON a.id = b.id
-WHERE a.id = ? LIMIT 1;
\ No newline at end of file
+SELECT *
+FROM authors AS a
+FULL JOIN books AS b ON a.id = b.id
+WHERE a.id = ?
+LIMIT 1;
diff --git a/internal/endtoend/testdata/func_call_cast/sqlite/go/query.sql.go b/internal/endtoend/testdata/func_call_cast/sqlite/go/query.sql.go
index 6d0dbef2df..5d39885531 100644
--- a/internal/endtoend/testdata/func_call_cast/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/func_call_cast/sqlite/go/query.sql.go
@@ -10,7 +10,7 @@ import (
)
const demo = `-- name: Demo :one
-SELECT CAST(CHAR(1,2,3,4,5) AS BLOB) AS col1
+SELECT CAST(char(1, 2, 3, 4, 5) AS BLOB) AS col1
`
func (q *Queries) Demo(ctx context.Context) ([]byte, error) {
diff --git a/internal/endtoend/testdata/func_call_cast/sqlite/query.sql b/internal/endtoend/testdata/func_call_cast/sqlite/query.sql
index eb18aad656..2f27801ac5 100644
--- a/internal/endtoend/testdata/func_call_cast/sqlite/query.sql
+++ b/internal/endtoend/testdata/func_call_cast/sqlite/query.sql
@@ -1,2 +1,2 @@
-- name: Demo :one
-SELECT CAST(CHAR(1,2,3,4,5) AS BLOB) AS col1
+SELECT CAST(char(1, 2, 3, 4, 5) AS BLOB) AS col1;
diff --git a/internal/endtoend/testdata/func_match_types/sqlite/go/query.sql.go b/internal/endtoend/testdata/func_match_types/sqlite/go/query.sql.go
index b6493050f0..8e56ea38b6 100644
--- a/internal/endtoend/testdata/func_match_types/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/func_match_types/sqlite/go/query.sql.go
@@ -11,9 +11,9 @@ import (
)
const authorPages = `-- name: AuthorPages :many
-select author, count(title) as num_books, sum(pages) as total_pages
-from books
-group by author
+SELECT author, count(title) AS num_books, sum(pages) AS total_pages
+FROM books
+GROUP BY author
`
type AuthorPagesRow struct {
diff --git a/internal/endtoend/testdata/func_match_types/sqlite/query.sql b/internal/endtoend/testdata/func_match_types/sqlite/query.sql
index 3452aebe01..fb20ace7c3 100644
--- a/internal/endtoend/testdata/func_match_types/sqlite/query.sql
+++ b/internal/endtoend/testdata/func_match_types/sqlite/query.sql
@@ -1,4 +1,4 @@
-- name: AuthorPages :many
-select author, count(title) as num_books, sum(pages) as total_pages
-from books
-group by author;
+SELECT author, count(title) AS num_books, sum(pages) AS total_pages
+FROM books
+GROUP BY author;
diff --git a/internal/endtoend/testdata/inflection/sqlite/query.sql b/internal/endtoend/testdata/inflection/sqlite/query.sql
index 74e1aaf8c3..26fe295aba 100644
--- a/internal/endtoend/testdata/inflection/sqlite/query.sql
+++ b/internal/endtoend/testdata/inflection/sqlite/query.sql
@@ -11,4 +11,4 @@ SELECT * FROM product_meta;
SELECT * FROM calories;
/* name: GetProductMetadata :many */
-SELECT * FROM product_metadata;
\ No newline at end of file
+SELECT * FROM product_metadata;
diff --git a/internal/endtoend/testdata/insert_default_values/sqlite/query.sql b/internal/endtoend/testdata/insert_default_values/sqlite/query.sql
index 107afbe8b5..89d593c9c0 100644
--- a/internal/endtoend/testdata/insert_default_values/sqlite/query.sql
+++ b/internal/endtoend/testdata/insert_default_values/sqlite/query.sql
@@ -1,2 +1,2 @@
-- name: InsertWorkspace :exec
-INSERT INTO workspace DEFAULT VALUES;
\ No newline at end of file
+INSERT INTO workspace DEFAULT VALUES;
diff --git a/internal/endtoend/testdata/insert_select/sqlite/go/query.sql.go b/internal/endtoend/testdata/insert_select/sqlite/go/query.sql.go
index 7b7d191166..b158e67cff 100644
--- a/internal/endtoend/testdata/insert_select/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/insert_select/sqlite/go/query.sql.go
@@ -12,7 +12,8 @@ import (
const insertSelect = `-- name: InsertSelect :exec
INSERT INTO foo (name, meta)
SELECT name, ?
-FROM bar WHERE ready = ?
+FROM bar
+WHERE ready = ?
`
type InsertSelectParams struct {
diff --git a/internal/endtoend/testdata/insert_select/sqlite/query.sql b/internal/endtoend/testdata/insert_select/sqlite/query.sql
index 880f083f9e..7707a6a32a 100644
--- a/internal/endtoend/testdata/insert_select/sqlite/query.sql
+++ b/internal/endtoend/testdata/insert_select/sqlite/query.sql
@@ -1,4 +1,5 @@
/* name: InsertSelect :exec */
INSERT INTO foo (name, meta)
SELECT name, ?
-FROM bar WHERE ready = ?;
+FROM bar
+WHERE ready = ?;
diff --git a/internal/endtoend/testdata/insert_values/sqlite/query.sql b/internal/endtoend/testdata/insert_values/sqlite/query.sql
index 774165baa8..03f37d30d9 100644
--- a/internal/endtoend/testdata/insert_values/sqlite/query.sql
+++ b/internal/endtoend/testdata/insert_values/sqlite/query.sql
@@ -2,4 +2,4 @@
INSERT INTO foo (a, b) VALUES (?, ?);
/* name: InsertMultipleValues :exec */
-INSERT INTO foo (a, b) VALUES (?, ?), (?, ?);
\ No newline at end of file
+INSERT INTO foo (a, b) VALUES (?, ?), (?, ?);
diff --git a/internal/endtoend/testdata/invalid_group_by_reference/sqlite/query.sql b/internal/endtoend/testdata/invalid_group_by_reference/sqlite/query.sql
index b036fba240..2fc4c35be3 100644
--- a/internal/endtoend/testdata/invalid_group_by_reference/sqlite/query.sql
+++ b/internal/endtoend/testdata/invalid_group_by_reference/sqlite/query.sql
@@ -1,4 +1,4 @@
-- name: ListAuthors :many
-SELECT *
-FROM authors
+SELECT *
+FROM authors
GROUP BY invalid_reference;
diff --git a/internal/endtoend/testdata/invalid_table_alias/sqlite/query.sql b/internal/endtoend/testdata/invalid_table_alias/sqlite/query.sql
index 52f5aae051..658a966e20 100644
--- a/internal/endtoend/testdata/invalid_table_alias/sqlite/query.sql
+++ b/internal/endtoend/testdata/invalid_table_alias/sqlite/query.sql
@@ -1,5 +1,5 @@
-- name: GetAuthor :one
-SELECT *
-FROM authors a
-WHERE p.id = ?
-LIMIT 1;
+SELECT *
+FROM authors AS a
+WHERE p.id = ?
+LIMIT 1;
diff --git a/internal/endtoend/testdata/join_alias/sqlite/go/query.sql.go b/internal/endtoend/testdata/join_alias/sqlite/go/query.sql.go
index 79c04bf91b..c7ef880555 100644
--- a/internal/endtoend/testdata/join_alias/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/join_alias/sqlite/go/query.sql.go
@@ -12,8 +12,8 @@ import (
const aliasExpand = `-- name: AliasExpand :many
SELECT f.id, b.id, title
-FROM foo f
-JOIN bar b ON b.id = f.id
+FROM foo AS f
+JOIN bar AS b ON b.id = f.id
WHERE f.id = ?
`
@@ -48,8 +48,8 @@ func (q *Queries) AliasExpand(ctx context.Context, id int64) ([]AliasExpandRow,
const aliasJoin = `-- name: AliasJoin :many
SELECT f.id, b.title
-FROM foo f
-JOIN bar b ON b.id = f.id
+FROM foo AS f
+JOIN bar AS b ON b.id = f.id
WHERE f.id = ?
`
diff --git a/internal/endtoend/testdata/join_alias/sqlite/query.sql b/internal/endtoend/testdata/join_alias/sqlite/query.sql
index 9b087bcae7..cfb69f01dd 100644
--- a/internal/endtoend/testdata/join_alias/sqlite/query.sql
+++ b/internal/endtoend/testdata/join_alias/sqlite/query.sql
@@ -1,11 +1,11 @@
-- name: AliasJoin :many
SELECT f.id, b.title
-FROM foo f
-JOIN bar b ON b.id = f.id
+FROM foo AS f
+JOIN bar AS b ON b.id = f.id
WHERE f.id = ?;
-- name: AliasExpand :many
SELECT *
-FROM foo f
-JOIN bar b ON b.id = f.id
+FROM foo AS f
+JOIN bar AS b ON b.id = f.id
WHERE f.id = ?;
diff --git a/internal/endtoend/testdata/join_left/sqlite/go/query.sql.go b/internal/endtoend/testdata/join_left/sqlite/go/query.sql.go
index e3c0ff7d8f..4037bc4718 100644
--- a/internal/endtoend/testdata/join_left/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/join_left/sqlite/go/query.sql.go
@@ -12,10 +12,9 @@ import (
)
const allAuthors = `-- name: AllAuthors :many
-SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id
-FROM authors AS a
- LEFT JOIN authors AS p
- ON a.parent_id = p.id
+SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id
`
type AllAuthorsRow struct {
@@ -58,10 +57,9 @@ func (q *Queries) AllAuthors(ctx context.Context) ([]AllAuthorsRow, error) {
}
const allAuthorsAliases = `-- name: AllAuthorsAliases :many
-SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id
-FROM authors AS a
- LEFT JOIN authors AS p
- ON a.parent_id = p.id
+SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id
`
type AllAuthorsAliasesRow struct {
@@ -104,10 +102,9 @@ func (q *Queries) AllAuthorsAliases(ctx context.Context) ([]AllAuthorsAliasesRow
}
const allAuthorsAliases2 = `-- name: AllAuthorsAliases2 :many
-SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id
-FROM authors AS a
- LEFT JOIN authors AS p
- ON a.parent_id = p.id
+SELECT a.id, a.name, a.parent_id, p.id, p.name, p.parent_id
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id
`
type AllAuthorsAliases2Row struct {
@@ -150,10 +147,9 @@ func (q *Queries) AllAuthorsAliases2(ctx context.Context) ([]AllAuthorsAliases2R
}
const allSuperAuthors = `-- name: AllSuperAuthors :many
-SELECT id, name, parent_id, super_id, super_name, super_parent_id
-FROM authors
- LEFT JOIN super_authors
- ON authors.parent_id = super_authors.super_id
+SELECT id, name, parent_id, super_id, super_name, super_parent_id
+FROM authors
+LEFT JOIN super_authors ON authors.parent_id = super_authors.super_id
`
type AllSuperAuthorsRow struct {
@@ -196,10 +192,9 @@ func (q *Queries) AllSuperAuthors(ctx context.Context) ([]AllSuperAuthorsRow, er
}
const allSuperAuthorsAliases = `-- name: AllSuperAuthorsAliases :many
-SELECT id, name, parent_id, super_id, super_name, super_parent_id
-FROM authors AS a
- LEFT JOIN super_authors AS sa
- ON a.parent_id = sa.super_id
+SELECT id, name, parent_id, super_id, super_name, super_parent_id
+FROM authors AS a
+LEFT JOIN super_authors AS sa ON a.parent_id = sa.super_id
`
type AllSuperAuthorsAliasesRow struct {
@@ -242,10 +237,9 @@ func (q *Queries) AllSuperAuthorsAliases(ctx context.Context) ([]AllSuperAuthors
}
const allSuperAuthorsAliases2 = `-- name: AllSuperAuthorsAliases2 :many
-SELECT a.id, a.name, a.parent_id, sa.super_id, sa.super_name, sa.super_parent_id
-FROM authors AS a
- LEFT JOIN super_authors AS sa
- ON a.parent_id = sa.super_id
+SELECT a.id, a.name, a.parent_id, sa.super_id, sa.super_name, sa.super_parent_id
+FROM authors AS a
+LEFT JOIN super_authors AS sa ON a.parent_id = sa.super_id
`
type AllSuperAuthorsAliases2Row struct {
@@ -289,11 +283,11 @@ func (q *Queries) AllSuperAuthorsAliases2(ctx context.Context) ([]AllSuperAuthor
const getMayors = `-- name: GetMayors :many
SELECT
- user_id,
- mayors.full_name
+ user_id,
+ mayors.full_name
FROM users
LEFT JOIN cities USING (city_id)
-INNER JOIN mayors USING (mayor_id)
+JOIN mayors USING (mayor_id)
`
type GetMayorsRow struct {
@@ -326,9 +320,9 @@ func (q *Queries) GetMayors(ctx context.Context) ([]GetMayorsRow, error) {
const getMayorsOptional = `-- name: GetMayorsOptional :many
SELECT
- user_id,
- cities.city_id,
- mayors.full_name
+ user_id,
+ cities.city_id,
+ mayors.full_name
FROM users
LEFT JOIN cities USING (city_id)
LEFT JOIN mayors USING (mayor_id)
@@ -364,11 +358,10 @@ func (q *Queries) GetMayorsOptional(ctx context.Context) ([]GetMayorsOptionalRow
}
const getSuggestedUsersByID = `-- name: GetSuggestedUsersByID :many
-SELECT DISTINCT u.user_id, u.user_nickname, u.user_email, u.user_display_name, u.user_password, u.user_google_id, u.user_apple_id, u.user_bio, u.user_created_at, u.user_avatar_id, m.media_id, m.media_created_at, m.media_hash, m.media_directory, m.media_author_id, m.media_width, m.media_height
-FROM users_2 AS u
- LEFT JOIN media AS m
- ON u.user_avatar_id = m.media_id
-WHERE u.user_id != ?1
+SELECT DISTINCT u.user_id, u.user_nickname, u.user_email, u.user_display_name, u.user_password, u.user_google_id, u.user_apple_id, u.user_bio, u.user_created_at, u.user_avatar_id, m.media_id, m.media_created_at, m.media_hash, m.media_directory, m.media_author_id, m.media_width, m.media_height
+FROM users_2 AS u
+LEFT JOIN media AS m ON u.user_avatar_id = m.media_id
+WHERE u.user_id != ?1
`
type GetSuggestedUsersByIDRow struct {
@@ -433,11 +426,10 @@ func (q *Queries) GetSuggestedUsersByID(ctx context.Context, userID int64) ([]Ge
}
const getSuggestedUsersByID2 = `-- name: GetSuggestedUsersByID2 :many
-SELECT users_2.user_id
-FROM users_2
- LEFT JOIN media AS m
- ON user_avatar_id = m.media_id
-WHERE user_id != ?1
+SELECT users_2.user_id
+FROM users_2
+LEFT JOIN media AS m ON user_avatar_id = m.media_id
+WHERE user_id != ?1
`
func (q *Queries) GetSuggestedUsersByID2(ctx context.Context, userID int64) ([]int64, error) {
diff --git a/internal/endtoend/testdata/join_left/sqlite/query.sql b/internal/endtoend/testdata/join_left/sqlite/query.sql
index d9ccaede83..863f0d294d 100644
--- a/internal/endtoend/testdata/join_left/sqlite/query.sql
+++ b/internal/endtoend/testdata/join_left/sqlite/query.sql
@@ -1,66 +1,58 @@
-- name: GetMayors :many
SELECT
- user_id,
- mayors.full_name
+ user_id,
+ mayors.full_name
FROM users
LEFT JOIN cities USING (city_id)
-INNER JOIN mayors USING (mayor_id);
+JOIN mayors USING (mayor_id);
-- name: GetMayorsOptional :many
SELECT
- user_id,
- cities.city_id,
- mayors.full_name
+ user_id,
+ cities.city_id,
+ mayors.full_name
FROM users
LEFT JOIN cities USING (city_id)
LEFT JOIN mayors USING (mayor_id);
-- name: AllAuthors :many
-SELECT *
-FROM authors AS a
- LEFT JOIN authors AS p
- ON a.parent_id = p.id;
+SELECT *
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id;
-- name: AllAuthorsAliases :many
-SELECT *
-FROM authors AS a
- LEFT JOIN authors AS p
- ON a.parent_id = p.id;
+SELECT *
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id;
-- name: AllSuperAuthors :many
-SELECT *
-FROM authors
- LEFT JOIN super_authors
- ON authors.parent_id = super_authors.super_id;
+SELECT *
+FROM authors
+LEFT JOIN super_authors ON authors.parent_id = super_authors.super_id;
-- name: AllAuthorsAliases2 :many
-SELECT a.*, p.*
-FROM authors AS a
- LEFT JOIN authors AS p
- ON a.parent_id = p.id;
+SELECT a.*, p.*
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id;
-- name: AllSuperAuthorsAliases :many
-SELECT *
-FROM authors AS a
- LEFT JOIN super_authors AS sa
- ON a.parent_id = sa.super_id;
+SELECT *
+FROM authors AS a
+LEFT JOIN super_authors AS sa ON a.parent_id = sa.super_id;
-- name: AllSuperAuthorsAliases2 :many
-SELECT a.*, sa.*
-FROM authors AS a
- LEFT JOIN super_authors AS sa
- ON a.parent_id = sa.super_id;
+SELECT a.*, sa.*
+FROM authors AS a
+LEFT JOIN super_authors AS sa ON a.parent_id = sa.super_id;
-- name: GetSuggestedUsersByID :many
-SELECT DISTINCT u.*, m.*
-FROM users_2 AS u
- LEFT JOIN media AS m
- ON u.user_avatar_id = m.media_id
-WHERE u.user_id != @user_id;
+SELECT DISTINCT u.*, m.*
+FROM users_2 AS u
+LEFT JOIN media AS m ON u.user_avatar_id = m.media_id
+WHERE u.user_id != @user_id;
-- name: GetSuggestedUsersByID2 :many
-SELECT users_2.user_id
-FROM users_2
- LEFT JOIN media AS m
- ON user_avatar_id = m.media_id
-WHERE user_id != @user_id;
+SELECT users_2.user_id
+FROM users_2
+LEFT JOIN media AS m ON user_avatar_id = m.media_id
+WHERE user_id != @user_id;
diff --git a/internal/endtoend/testdata/join_left_same_table/sqlite/go/query.sql.go b/internal/endtoend/testdata/join_left_same_table/sqlite/go/query.sql.go
index 2caf8e4aea..1e566df2da 100644
--- a/internal/endtoend/testdata/join_left_same_table/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/join_left_same_table/sqlite/go/query.sql.go
@@ -11,13 +11,13 @@ import (
)
const allAuthors = `-- name: AllAuthors :many
-SELECT a.id,
- a.name,
- p.id as alias_id,
- p.name as alias_name
-FROM authors AS a
- LEFT JOIN authors AS p
- ON (a.parent_id = p.id)
+SELECT
+ a.id,
+ a.name,
+ p.id AS alias_id,
+ p.name AS alias_name
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id
`
type AllAuthorsRow struct {
diff --git a/internal/endtoend/testdata/join_left_same_table/sqlite/query.sql b/internal/endtoend/testdata/join_left_same_table/sqlite/query.sql
index 79daa2dfd5..6430a52086 100644
--- a/internal/endtoend/testdata/join_left_same_table/sqlite/query.sql
+++ b/internal/endtoend/testdata/join_left_same_table/sqlite/query.sql
@@ -1,8 +1,8 @@
-- name: AllAuthors :many
-SELECT a.id,
- a.name,
- p.id as alias_id,
- p.name as alias_name
-FROM authors AS a
- LEFT JOIN authors AS p
- ON (a.parent_id = p.id);
+SELECT
+ a.id,
+ a.name,
+ p.id AS alias_id,
+ p.name AS alias_name
+FROM authors AS a
+LEFT JOIN authors AS p ON a.parent_id = p.id;
diff --git a/internal/endtoend/testdata/join_where_clause/sqlite/query.sql b/internal/endtoend/testdata/join_where_clause/sqlite/query.sql
index 2b5ae53b00..bdff39a5ba 100644
--- a/internal/endtoend/testdata/join_where_clause/sqlite/query.sql
+++ b/internal/endtoend/testdata/join_where_clause/sqlite/query.sql
@@ -14,4 +14,4 @@ WHERE owner = ?;
SELECT foo.*
FROM foo
CROSS JOIN bar
-WHERE bar.id = ? AND owner = ?;
\ No newline at end of file
+WHERE bar.id = ? AND owner = ?;
diff --git a/internal/endtoend/testdata/jsonb/sqlite/go/query.sql.go b/internal/endtoend/testdata/jsonb/sqlite/go/query.sql.go
index a864448e87..655f57af7f 100644
--- a/internal/endtoend/testdata/jsonb/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/jsonb/sqlite/go/query.sql.go
@@ -12,24 +12,26 @@ import (
const insertFoo = `-- name: InsertFoo :exec
INSERT INTO foo (
- a,
- b,
- c,
- d,
- e,
- f,
- g,
- h
-) VALUES (
- ?1,
- ?2,
- ?3,
- ?4,
- ?5,
- ?6,
- ?7,
- ?8
-) RETURNING a, json(b), c, json(d), e, json(f), g, json(h)
+ a,
+ b,
+ c,
+ d,
+ e,
+ f,
+ g,
+ h
+)
+VALUES (
+ ?1,
+ ?2,
+ ?3,
+ ?4,
+ ?5,
+ ?6,
+ ?7,
+ ?8
+)
+RETURNING a, json(b), c, json(d), e, json(f), g, json(h)
`
type InsertFooParams struct {
diff --git a/internal/endtoend/testdata/jsonb/sqlite/query.sql b/internal/endtoend/testdata/jsonb/sqlite/query.sql
index baca24c120..0fe40ee2e2 100644
--- a/internal/endtoend/testdata/jsonb/sqlite/query.sql
+++ b/internal/endtoend/testdata/jsonb/sqlite/query.sql
@@ -1,23 +1,25 @@
-- name: InsertFoo :exec
INSERT INTO foo (
- a,
- b,
- c,
- d,
- e,
- f,
- g,
- h
-) VALUES (
- @a,
- @b,
- @c,
- @d,
- @e,
- @f,
- @g,
- @h
-) RETURNING *;
+ a,
+ b,
+ c,
+ d,
+ e,
+ f,
+ g,
+ h
+)
+VALUES (
+ @a,
+ @b,
+ @c,
+ @d,
+ @e,
+ @f,
+ @g,
+ @h
+)
+RETURNING *;
-- name: SelectFoo :exec
SELECT * FROM foo;
diff --git a/internal/endtoend/testdata/multibyte_comment/sqlite/go/query.sql.go b/internal/endtoend/testdata/multibyte_comment/sqlite/go/query.sql.go
index af8e925bb7..0ff9f72028 100644
--- a/internal/endtoend/testdata/multibyte_comment/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/multibyte_comment/sqlite/go/query.sql.go
@@ -39,7 +39,9 @@ func (q *Queries) DeleteItem(ctx context.Context, id int64) (Item, error) {
const listItems = `-- name: ListItems :many
SELECT id, name, cap_read
-FROM items WHERE cap_read = 'anonymous' ORDER BY name
+FROM items
+WHERE cap_read = 'anonymous'
+ORDER BY name
`
// Multi-byte UTF-8 in comments must not shift the byte offsets used to slice
diff --git a/internal/endtoend/testdata/multibyte_comment/sqlite/query.sql b/internal/endtoend/testdata/multibyte_comment/sqlite/query.sql
index 6a191d9b57..527d3900ca 100644
--- a/internal/endtoend/testdata/multibyte_comment/sqlite/query.sql
+++ b/internal/endtoend/testdata/multibyte_comment/sqlite/query.sql
@@ -4,7 +4,9 @@
-- name: ListItems :many
-- an em dash right here — must not truncate the ORDER BY below
SELECT id, name, cap_read
-FROM items WHERE cap_read = 'anonymous' ORDER BY name;
+FROM items
+WHERE cap_read = 'anonymous'
+ORDER BY name;
-- section — divider between queries
diff --git a/internal/endtoend/testdata/quoted_colname/sqlite/go/query.sql.go b/internal/endtoend/testdata/quoted_colname/sqlite/go/query.sql.go
index cef85ab2ab..1e5ad1ed36 100644
--- a/internal/endtoend/testdata/quoted_colname/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/quoted_colname/sqlite/go/query.sql.go
@@ -10,7 +10,7 @@ import (
)
const testList = `-- name: TestList :many
-SELECT id FROM "test"
+SELECT id FROM test
`
func (q *Queries) TestList(ctx context.Context) ([]string, error) {
diff --git a/internal/endtoend/testdata/quoted_colname/sqlite/query.sql b/internal/endtoend/testdata/quoted_colname/sqlite/query.sql
index 8b8ae15e9a..10a35f0464 100644
--- a/internal/endtoend/testdata/quoted_colname/sqlite/query.sql
+++ b/internal/endtoend/testdata/quoted_colname/sqlite/query.sql
@@ -1,2 +1,2 @@
-- name: TestList :many
-SELECT * FROM "test";
\ No newline at end of file
+SELECT * FROM test;
diff --git a/internal/endtoend/testdata/returning/sqlite/go/query.sql.go b/internal/endtoend/testdata/returning/sqlite/go/query.sql.go
index 258aedc44d..c081f1c29f 100644
--- a/internal/endtoend/testdata/returning/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/returning/sqlite/go/query.sql.go
@@ -12,8 +12,8 @@ import (
const deleteUserAndReturnID = `-- name: DeleteUserAndReturnID :one
DELETE FROM users
- WHERE name = ?1
- RETURNING id
+WHERE name = ?1
+RETURNING id
`
func (q *Queries) DeleteUserAndReturnID(ctx context.Context, name sql.NullString) (int64, error) {
@@ -25,8 +25,8 @@ func (q *Queries) DeleteUserAndReturnID(ctx context.Context, name sql.NullString
const deleteUserAndReturnUser = `-- name: DeleteUserAndReturnUser :one
DELETE FROM users
- WHERE name = ?1
- RETURNING name, id
+WHERE name = ?1
+RETURNING name, id
`
func (q *Queries) DeleteUserAndReturnUser(ctx context.Context, name sql.NullString) (User, error) {
@@ -37,8 +37,9 @@ func (q *Queries) DeleteUserAndReturnUser(ctx context.Context, name sql.NullStri
}
const insertUserAndReturnID = `-- name: InsertUserAndReturnID :one
-INSERT INTO users (name) VALUES (?1)
- RETURNING id
+INSERT INTO users (name)
+VALUES (?1)
+RETURNING id
`
func (q *Queries) InsertUserAndReturnID(ctx context.Context, name sql.NullString) (int64, error) {
@@ -49,8 +50,9 @@ func (q *Queries) InsertUserAndReturnID(ctx context.Context, name sql.NullString
}
const insertUserAndReturnUser = `-- name: InsertUserAndReturnUser :one
-INSERT INTO users (name) VALUES (?1)
- RETURNING name, id
+INSERT INTO users (name)
+VALUES (?1)
+RETURNING name, id
`
func (q *Queries) InsertUserAndReturnUser(ctx context.Context, name sql.NullString) (User, error) {
@@ -61,9 +63,10 @@ func (q *Queries) InsertUserAndReturnUser(ctx context.Context, name sql.NullStri
}
const updateUserAndReturnID = `-- name: UpdateUserAndReturnID :one
-UPDATE users SET name = ?1
- WHERE name = ?2
- RETURNING id
+UPDATE users
+SET name = ?1
+WHERE name = ?2
+RETURNING id
`
type UpdateUserAndReturnIDParams struct {
@@ -79,9 +82,10 @@ func (q *Queries) UpdateUserAndReturnID(ctx context.Context, arg UpdateUserAndRe
}
const updateUserAndReturnUser = `-- name: UpdateUserAndReturnUser :one
-UPDATE users SET name = ?1
- WHERE name = ?2
- RETURNING name, id
+UPDATE users
+SET name = ?1
+WHERE name = ?2
+RETURNING name, id
`
type UpdateUserAndReturnUserParams struct {
diff --git a/internal/endtoend/testdata/returning/sqlite/query.sql b/internal/endtoend/testdata/returning/sqlite/query.sql
index ded7c9e810..974f37e3bf 100644
--- a/internal/endtoend/testdata/returning/sqlite/query.sql
+++ b/internal/endtoend/testdata/returning/sqlite/query.sql
@@ -1,27 +1,31 @@
-- name: InsertUserAndReturnID :one
-INSERT INTO users (name) VALUES (?1)
- RETURNING id;
+INSERT INTO users (name)
+VALUES (?1)
+RETURNING id;
-- name: InsertUserAndReturnUser :one
-INSERT INTO users (name) VALUES (?1)
- RETURNING *;
+INSERT INTO users (name)
+VALUES (?1)
+RETURNING *;
-- name: UpdateUserAndReturnID :one
-UPDATE users SET name = ?1
- WHERE name = ?2
- RETURNING id;
+UPDATE users
+SET name = ?1
+WHERE name = ?2
+RETURNING id;
-- name: UpdateUserAndReturnUser :one
-UPDATE users SET name = ?1
- WHERE name = ?2
- RETURNING *;
+UPDATE users
+SET name = ?1
+WHERE name = ?2
+RETURNING *;
-- name: DeleteUserAndReturnID :one
DELETE FROM users
- WHERE name = ?1
- RETURNING id;
+WHERE name = ?1
+RETURNING id;
-- name: DeleteUserAndReturnUser :one
DELETE FROM users
- WHERE name = ?1
- RETURNING *;
+WHERE name = ?1
+RETURNING *;
diff --git a/internal/endtoend/testdata/select_exists/sqlite/go/query.sql.go b/internal/endtoend/testdata/select_exists/sqlite/go/query.sql.go
index 8af010d08c..d0d680408d 100644
--- a/internal/endtoend/testdata/select_exists/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/select_exists/sqlite/go/query.sql.go
@@ -11,14 +11,11 @@ import (
const barExists = `-- name: BarExists :one
SELECT
- EXISTS (
- SELECT
- 1
- FROM
- bar
- where
- id = ?
- )
+ EXISTS (
+ SELECT 1
+ FROM bar
+ WHERE id = ?
+ )
`
func (q *Queries) BarExists(ctx context.Context, id int64) (bool, error) {
diff --git a/internal/endtoend/testdata/select_exists/sqlite/query.sql b/internal/endtoend/testdata/select_exists/sqlite/query.sql
index 5173a4418f..15ef7be358 100644
--- a/internal/endtoend/testdata/select_exists/sqlite/query.sql
+++ b/internal/endtoend/testdata/select_exists/sqlite/query.sql
@@ -1,10 +1,7 @@
-- name: BarExists :one
SELECT
- EXISTS (
- SELECT
- 1
- FROM
- bar
- where
- id = ?
- );
+ EXISTS (
+ SELECT 1
+ FROM bar
+ WHERE id = ?
+ );
diff --git a/internal/endtoend/testdata/select_in_and/sqlite/go/query.sql.go b/internal/endtoend/testdata/select_in_and/sqlite/go/query.sql.go
index 11694d1671..3a97dad1de 100644
--- a/internal/endtoend/testdata/select_in_and/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/select_in_and/sqlite/go/query.sql.go
@@ -11,24 +11,16 @@ import (
)
const deleteAuthor = `-- name: DeleteAuthor :exec
-DELETE FROM
- books AS b
-WHERE
- b.author NOT IN (
- SELECT
- a.name
- FROM
- authors a
- WHERE
- a.age >= ?
+DELETE FROM books AS b
+WHERE NOT b.author IN (
+ SELECT a.name
+ FROM authors AS a
+ WHERE a.age >= ?
)
- AND b.translator NOT IN (
- SELECT
- t.name
- FROM
- translators t
- WHERE
- t.age >= ?
+ AND NOT b.translator IN (
+ SELECT t.name
+ FROM translators AS t
+ WHERE t.age >= ?
)
AND b.year <= ?
`
diff --git a/internal/endtoend/testdata/select_in_and/sqlite/query.sql b/internal/endtoend/testdata/select_in_and/sqlite/query.sql
index 4bad135e3d..a4e760f508 100644
--- a/internal/endtoend/testdata/select_in_and/sqlite/query.sql
+++ b/internal/endtoend/testdata/select_in_and/sqlite/query.sql
@@ -1,21 +1,13 @@
-- name: DeleteAuthor :exec
-DELETE FROM
- books AS b
-WHERE
- b.author NOT IN (
- SELECT
- a.name
- FROM
- authors a
- WHERE
- a.age >= ?
+DELETE FROM books AS b
+WHERE NOT b.author IN (
+ SELECT a.name
+ FROM authors AS a
+ WHERE a.age >= ?
)
- AND b.translator NOT IN (
- SELECT
- t.name
- FROM
- translators t
- WHERE
- t.age >= ?
+ AND NOT b.translator IN (
+ SELECT t.name
+ FROM translators AS t
+ WHERE t.age >= ?
)
- AND b.year <= ?;
\ No newline at end of file
+ AND b.year <= ?;
diff --git a/internal/endtoend/testdata/select_limit/sqlite/go/query.sql.go b/internal/endtoend/testdata/select_limit/sqlite/go/query.sql.go
index 029c3950df..8eba03c574 100644
--- a/internal/endtoend/testdata/select_limit/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/select_limit/sqlite/go/query.sql.go
@@ -11,7 +11,8 @@ import (
)
const fooLimit = `-- name: FooLimit :many
-SELECT a FROM foo
+SELECT a
+FROM foo
LIMIT ?
`
@@ -39,8 +40,10 @@ func (q *Queries) FooLimit(ctx context.Context, limit int64) ([]sql.NullString,
}
const fooLimitOffset = `-- name: FooLimitOffset :many
-SELECT a FROM foo
-LIMIT ? OFFSET ?
+SELECT a
+FROM foo
+LIMIT ?
+OFFSET ?
`
type FooLimitOffsetParams struct {
diff --git a/internal/endtoend/testdata/select_limit/sqlite/query.sql b/internal/endtoend/testdata/select_limit/sqlite/query.sql
index 1fea17c583..c2e9c39c83 100644
--- a/internal/endtoend/testdata/select_limit/sqlite/query.sql
+++ b/internal/endtoend/testdata/select_limit/sqlite/query.sql
@@ -1,7 +1,10 @@
/* name: FooLimit :many */
-SELECT a FROM foo
+SELECT a
+FROM foo
LIMIT ?;
/* name: FooLimitOffset :many */
-SELECT a FROM foo
-LIMIT ? OFFSET ?;
+SELECT a
+FROM foo
+LIMIT ?
+OFFSET ?;
diff --git a/internal/endtoend/testdata/select_nested_count/sqlite/go/query.sql.go b/internal/endtoend/testdata/select_nested_count/sqlite/go/query.sql.go
index ca978554b3..0b610a9c83 100644
--- a/internal/endtoend/testdata/select_nested_count/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/select_nested_count/sqlite/go/query.sql.go
@@ -11,10 +11,13 @@ import (
)
const getAuthorsWithBooksCount = `-- name: GetAuthorsWithBooksCount :many
-SELECT id, name, bio, (
- SELECT COUNT(id) FROM books
- WHERE books.author_id = id
-) AS books_count
+SELECT
+ id, name, bio,
+ (
+ SELECT count(id)
+ FROM books
+ WHERE books.author_id = id
+ ) AS books_count
FROM authors
`
diff --git a/internal/endtoend/testdata/select_nested_count/sqlite/query.sql b/internal/endtoend/testdata/select_nested_count/sqlite/query.sql
index 3fe51959c3..90069960a4 100644
--- a/internal/endtoend/testdata/select_nested_count/sqlite/query.sql
+++ b/internal/endtoend/testdata/select_nested_count/sqlite/query.sql
@@ -1,6 +1,9 @@
-- name: GetAuthorsWithBooksCount :many
-SELECT *, (
- SELECT COUNT(id) FROM books
- WHERE books.author_id = id
-) AS books_count
+SELECT
+ *,
+ (
+ SELECT count(id)
+ FROM books
+ WHERE books.author_id = id
+ ) AS books_count
FROM authors;
diff --git a/internal/endtoend/testdata/select_not_exists/sqlite/go/query.sql.go b/internal/endtoend/testdata/select_not_exists/sqlite/go/query.sql.go
index e62a636a67..dfa8dcedcc 100644
--- a/internal/endtoend/testdata/select_not_exists/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/select_not_exists/sqlite/go/query.sql.go
@@ -11,14 +11,11 @@ import (
const barNotExists = `-- name: BarNotExists :one
SELECT
- NOT EXISTS (
- SELECT
- 1
- FROM
- bar
- WHERE
- id = ?
- )
+ NOT EXISTS (
+ SELECT 1
+ FROM bar
+ WHERE id = ?
+ )
`
func (q *Queries) BarNotExists(ctx context.Context, id int64) (bool, error) {
diff --git a/internal/endtoend/testdata/select_not_exists/sqlite/query.sql b/internal/endtoend/testdata/select_not_exists/sqlite/query.sql
index f7e76ae92c..f5dab6a174 100644
--- a/internal/endtoend/testdata/select_not_exists/sqlite/query.sql
+++ b/internal/endtoend/testdata/select_not_exists/sqlite/query.sql
@@ -1,11 +1,7 @@
-- name: BarNotExists :one
SELECT
- NOT EXISTS (
- SELECT
- 1
- FROM
- bar
- WHERE
- id = ?
- );
-
+ NOT EXISTS (
+ SELECT 1
+ FROM bar
+ WHERE id = ?
+ );
diff --git a/internal/endtoend/testdata/select_star/sqlite/go/query.sql.go b/internal/endtoend/testdata/select_star/sqlite/go/query.sql.go
index 03e2902046..e9e6c25fe5 100644
--- a/internal/endtoend/testdata/select_star/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/select_star/sqlite/go/query.sql.go
@@ -42,7 +42,7 @@ func (q *Queries) GetAll(ctx context.Context) ([]User, error) {
}
const getIDAll = `-- name: GetIDAll :many
-SELECT id FROM (SELECT id FROM users) t
+SELECT id FROM (SELECT id FROM users) AS t
`
func (q *Queries) GetIDAll(ctx context.Context) ([]int64, error) {
diff --git a/internal/endtoend/testdata/select_star/sqlite/query.sql b/internal/endtoend/testdata/select_star/sqlite/query.sql
index 0952880cac..ba7ed34469 100644
--- a/internal/endtoend/testdata/select_star/sqlite/query.sql
+++ b/internal/endtoend/testdata/select_star/sqlite/query.sql
@@ -2,4 +2,4 @@
SELECT * FROM users;
/* name: GetIDAll :many */
-SELECT * FROM (SELECT id FROM users) t;
\ No newline at end of file
+SELECT * FROM (SELECT id FROM users) AS t;
diff --git a/internal/endtoend/testdata/select_union/sqlite/go/query.sql.go b/internal/endtoend/testdata/select_union/sqlite/go/query.sql.go
index 576e74720e..42d9cde73d 100644
--- a/internal/endtoend/testdata/select_union/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/select_union/sqlite/go/query.sql.go
@@ -129,7 +129,8 @@ const selectUnionWithLimit = `-- name: SelectUnionWithLimit :many
SELECT a, b FROM foo
UNION
SELECT a, b FROM foo
-LIMIT ? OFFSET ?
+LIMIT ?
+OFFSET ?
`
type SelectUnionWithLimitParams struct {
diff --git a/internal/endtoend/testdata/select_union/sqlite/query.sql b/internal/endtoend/testdata/select_union/sqlite/query.sql
index 67d28d1824..1880a56d21 100644
--- a/internal/endtoend/testdata/select_union/sqlite/query.sql
+++ b/internal/endtoend/testdata/select_union/sqlite/query.sql
@@ -7,7 +7,8 @@ SELECT * FROM foo;
SELECT * FROM foo
UNION
SELECT * FROM foo
-LIMIT ? OFFSET ?;
+LIMIT ?
+OFFSET ?;
-- name: SelectExcept :many
SELECT * FROM foo
diff --git a/internal/endtoend/testdata/single_param_conflict/sqlite/go/query.sql.go b/internal/endtoend/testdata/single_param_conflict/sqlite/go/query.sql.go
index 71681b3ba8..0499ffb86d 100644
--- a/internal/endtoend/testdata/single_param_conflict/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/single_param_conflict/sqlite/go/query.sql.go
@@ -10,10 +10,10 @@ import (
)
const getAuthorByID = `-- name: GetAuthorByID :one
-SELECT id, name, bio
-FROM authors
-WHERE id = ?
-LIMIT 1
+SELECT id, name, bio
+FROM authors
+WHERE id = ?
+LIMIT 1
`
func (q *Queries) GetAuthorByID(ctx context.Context, id int64) (Author, error) {
@@ -24,10 +24,10 @@ func (q *Queries) GetAuthorByID(ctx context.Context, id int64) (Author, error) {
}
const getAuthorIDByID = `-- name: GetAuthorIDByID :one
-SELECT id
-FROM authors
-WHERE id = ?
-LIMIT 1
+SELECT id
+FROM authors
+WHERE id = ?
+LIMIT 1
`
func (q *Queries) GetAuthorIDByID(ctx context.Context, id int64) (int64, error) {
@@ -38,10 +38,10 @@ func (q *Queries) GetAuthorIDByID(ctx context.Context, id int64) (int64, error)
}
const getUser = `-- name: GetUser :one
-SELECT sub
-FROM users
-WHERE sub = ?
-LIMIT 1
+SELECT sub
+FROM users
+WHERE sub = ?
+LIMIT 1
`
func (q *Queries) GetUser(ctx context.Context, sub string) (string, error) {
diff --git a/internal/endtoend/testdata/single_param_conflict/sqlite/query.sql b/internal/endtoend/testdata/single_param_conflict/sqlite/query.sql
index 23b454dac0..504f77945f 100644
--- a/internal/endtoend/testdata/single_param_conflict/sqlite/query.sql
+++ b/internal/endtoend/testdata/single_param_conflict/sqlite/query.sql
@@ -1,17 +1,17 @@
-- name: GetAuthorIDByID :one
-SELECT id
-FROM authors
-WHERE id = ?
-LIMIT 1;
+SELECT id
+FROM authors
+WHERE id = ?
+LIMIT 1;
-- name: GetAuthorByID :one
-SELECT id, name, bio
-FROM authors
-WHERE id = ?
-LIMIT 1;
+SELECT id, name, bio
+FROM authors
+WHERE id = ?
+LIMIT 1;
-- name: GetUser :one
-SELECT sub
-FROM users
-WHERE sub = ?
-LIMIT 1;
+SELECT sub
+FROM users
+WHERE sub = ?
+LIMIT 1;
diff --git a/internal/endtoend/testdata/sqlite_skip_todo/db/query.sql.go b/internal/endtoend/testdata/sqlite_skip_todo/db/query.sql.go
index 97feda59d0..27211722b5 100644
--- a/internal/endtoend/testdata/sqlite_skip_todo/db/query.sql.go
+++ b/internal/endtoend/testdata/sqlite_skip_todo/db/query.sql.go
@@ -11,7 +11,8 @@ import (
)
const getFoo = `-- name: GetFoo :many
-SELECT bar FROM foo
+SELECT bar
+FROM foo
WHERE bar = ?
`
diff --git a/internal/endtoend/testdata/sqlite_skip_todo/query.sql b/internal/endtoend/testdata/sqlite_skip_todo/query.sql
index e51c45c8c1..5e055229fa 100644
--- a/internal/endtoend/testdata/sqlite_skip_todo/query.sql
+++ b/internal/endtoend/testdata/sqlite_skip_todo/query.sql
@@ -11,6 +11,6 @@ PRAGMA foreign_keys = 0;
PRAGMA foreign_keys;
-- name: GetFoo :many
-SELECT * FROM foo
+SELECT *
+FROM foo
WHERE bar = ?;
-
diff --git a/internal/endtoend/testdata/sqlite_table_options/sqlite/go/query.sql.go b/internal/endtoend/testdata/sqlite_table_options/sqlite/go/query.sql.go
index d563ef827e..6f1e81df90 100644
--- a/internal/endtoend/testdata/sqlite_table_options/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/sqlite_table_options/sqlite/go/query.sql.go
@@ -10,8 +10,10 @@ import (
)
const getAuthor = `-- name: GetAuthor :one
-SELECT id, name, bio FROM authors1
-WHERE id = ?1 LIMIT 1
+SELECT id, name, bio
+FROM authors1
+WHERE id = ?1
+LIMIT 1
`
func (q *Queries) GetAuthor(ctx context.Context, id int64) (Authors1, error) {
diff --git a/internal/endtoend/testdata/sqlite_table_options/sqlite/query.sql b/internal/endtoend/testdata/sqlite_table_options/sqlite/query.sql
index 749f91601d..2fe76dc099 100644
--- a/internal/endtoend/testdata/sqlite_table_options/sqlite/query.sql
+++ b/internal/endtoend/testdata/sqlite_table_options/sqlite/query.sql
@@ -1,3 +1,5 @@
-- name: GetAuthor :one
-SELECT * FROM authors1
-WHERE id = ?1 LIMIT 1;
+SELECT *
+FROM authors1
+WHERE id = ?1
+LIMIT 1;
diff --git a/internal/endtoend/testdata/star_expansion/sqlite/go/query.sql.go b/internal/endtoend/testdata/star_expansion/sqlite/go/query.sql.go
index b56411ca25..47308250ae 100644
--- a/internal/endtoend/testdata/star_expansion/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/star_expansion/sqlite/go/query.sql.go
@@ -54,7 +54,7 @@ func (q *Queries) StarExpansion(ctx context.Context) ([]StarExpansionRow, error)
}
const starQuotedExpansion = `-- name: StarQuotedExpansion :many
-SELECT t.a, t.b FROM foo "t"
+SELECT t.a, t.b FROM foo AS t
`
func (q *Queries) StarQuotedExpansion(ctx context.Context) ([]Foo, error) {
diff --git a/internal/endtoend/testdata/star_expansion/sqlite/query.sql b/internal/endtoend/testdata/star_expansion/sqlite/query.sql
index 6249bb48b7..1afa2b3996 100644
--- a/internal/endtoend/testdata/star_expansion/sqlite/query.sql
+++ b/internal/endtoend/testdata/star_expansion/sqlite/query.sql
@@ -2,4 +2,4 @@
SELECT *, *, foo.* FROM foo;
-- name: StarQuotedExpansion :many
-SELECT "t".* FROM foo "t";
+SELECT t.* FROM foo AS t;
diff --git a/internal/endtoend/testdata/star_expansion_core/sqlite/go/query.sql.go b/internal/endtoend/testdata/star_expansion_core/sqlite/go/query.sql.go
index 52a39ab75c..4ed292f831 100644
--- a/internal/endtoend/testdata/star_expansion_core/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/star_expansion_core/sqlite/go/query.sql.go
@@ -225,7 +225,7 @@ func (q *Queries) StarExpansionReturning(ctx context.Context, arg StarExpansionR
}
const starExpansionSubquery = `-- name: StarExpansionSubquery :many
-SELECT a, c FROM (SELECT a, c FROM bar) sub
+SELECT a, c FROM (SELECT a, c FROM bar) AS sub
`
func (q *Queries) StarExpansionSubquery(ctx context.Context) ([]Bar, error) {
@@ -252,7 +252,7 @@ func (q *Queries) StarExpansionSubquery(ctx context.Context) ([]Bar, error) {
}
const starQuotedExpansion = `-- name: StarQuotedExpansion :many
-SELECT t.a, t.b, t."group" FROM foo "t"
+SELECT t.a, t.b, t."group" FROM foo AS t
`
func (q *Queries) StarQuotedExpansion(ctx context.Context) ([]Foo, error) {
diff --git a/internal/endtoend/testdata/star_expansion_core/sqlite/query.sql b/internal/endtoend/testdata/star_expansion_core/sqlite/query.sql
index 0055fe7d5b..2fb7ec1b7f 100644
--- a/internal/endtoend/testdata/star_expansion_core/sqlite/query.sql
+++ b/internal/endtoend/testdata/star_expansion_core/sqlite/query.sql
@@ -2,13 +2,13 @@
SELECT *, *, foo.* FROM foo;
-- name: StarQuotedExpansion :many
-SELECT "t".* FROM foo "t";
+SELECT t.* FROM foo AS t;
-- name: StarExpansionJoin :many
SELECT * FROM foo, bar;
-- name: StarExpansionSubquery :many
-SELECT * FROM (SELECT * FROM bar) sub;
+SELECT * FROM (SELECT * FROM bar) AS sub;
-- name: StarExpansionCTE :many
WITH t AS (SELECT * FROM bar) SELECT * FROM t;
diff --git a/internal/endtoend/testdata/table_function/sqlite/go/query.sql.go b/internal/endtoend/testdata/table_function/sqlite/go/query.sql.go
index 4aa5bf18ab..2ee3387a50 100644
--- a/internal/endtoend/testdata/table_function/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/table_function/sqlite/go/query.sql.go
@@ -11,15 +11,12 @@ import (
const getTransaction = `-- name: GetTransaction :many
SELECT
- json_extract(transactions.data, '$.transaction.signatures[0]'),
- json_group_array(instructions.value)
-FROM
- transactions,
- json_each(json_extract(transactions.data, '$.transaction.message.instructions')) AS instructions
-WHERE
- transactions.program_id = ?
- AND json_extract(transactions.data, '$.transaction.signatures[0]') > ?
- AND json_extract(json_extract(transactions.data, '$.transaction.message.accountKeys'), '$[' || json_extract(instructions.value, '$.programIdIndex') || ']') = transactions.program_id
+ json_extract(transactions.data, '$.transaction.signatures[0]'),
+ json_group_array(instructions.value)
+FROM transactions, json_each(json_extract(transactions.data, '$.transaction.message.instructions')) AS instructions
+WHERE transactions.program_id = ?
+ AND json_extract(transactions.data, '$.transaction.signatures[0]') > ?
+ AND json_extract(json_extract(transactions.data, '$.transaction.message.accountKeys'), '$[' || json_extract(instructions.value, '$.programIdIndex') || ']') = transactions.program_id
GROUP BY transactions.rowid
LIMIT ?
`
diff --git a/internal/endtoend/testdata/table_function/sqlite/query.sql b/internal/endtoend/testdata/table_function/sqlite/query.sql
index 867e1114cb..6b79cdca84 100644
--- a/internal/endtoend/testdata/table_function/sqlite/query.sql
+++ b/internal/endtoend/testdata/table_function/sqlite/query.sql
@@ -1,13 +1,10 @@
/* name: GetTransaction :many */
SELECT
- json_extract(transactions.data, '$.transaction.signatures[0]'),
- json_group_array(instructions.value)
-FROM
- transactions,
- json_each(json_extract(transactions.data, '$.transaction.message.instructions')) AS instructions
-WHERE
- transactions.program_id = ?
- AND json_extract(transactions.data, '$.transaction.signatures[0]') > ?
- AND json_extract(json_extract(transactions.data, '$.transaction.message.accountKeys'), '$[' || json_extract(instructions.value, '$.programIdIndex') || ']') = transactions.program_id
+ json_extract(transactions.data, '$.transaction.signatures[0]'),
+ json_group_array(instructions.value)
+FROM transactions, json_each(json_extract(transactions.data, '$.transaction.message.instructions')) AS instructions
+WHERE transactions.program_id = ?
+ AND json_extract(transactions.data, '$.transaction.signatures[0]') > ?
+ AND json_extract(json_extract(transactions.data, '$.transaction.message.accountKeys'), '$[' || json_extract(instructions.value, '$.programIdIndex') || ']') = transactions.program_id
GROUP BY transactions.rowid
LIMIT ?;
diff --git a/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/go/query.sql.go b/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/go/query.sql.go
index b7969b21ef..6963209e6b 100644
--- a/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/go/query.sql.go
@@ -20,7 +20,7 @@ func (q *Queries) DeleteAuthor(ctx context.Context, id int64) error {
}
const deleteBook = `-- name: DeleteBook :exec
-DELETE FROM Books WHERE id = ?
+DELETE FROM books WHERE id = ?
`
func (q *Queries) DeleteBook(ctx context.Context, id int64) error {
@@ -58,7 +58,7 @@ func (q *Queries) GetAuthor(ctx context.Context, id int64) (Author, error) {
}
const getBook = `-- name: GetBook :one
-SELECT id, title FROM Books WHERE id = ?
+SELECT id, title FROM books WHERE id = ?
`
func (q *Queries) GetBook(ctx context.Context, id int64) (Book, error) {
@@ -100,7 +100,7 @@ func (q *Queries) InsertAuthor(ctx context.Context, name sql.NullString) error {
}
const insertBook = `-- name: InsertBook :exec
-INSERT INTO Books (title) VALUES (?)
+INSERT INTO books (title) VALUES (?)
`
func (q *Queries) InsertBook(ctx context.Context, title sql.NullString) error {
@@ -141,7 +141,7 @@ func (q *Queries) UpdateAuthor(ctx context.Context, arg UpdateAuthorParams) erro
}
const updateBook = `-- name: UpdateBook :exec
-UPDATE Books SET title = ? WHERE id = ?
+UPDATE books SET title = ? WHERE id = ?
`
type UpdateBookParams struct {
diff --git a/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/query.sql b/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/query.sql
index 6312be57a5..daaa164168 100644
--- a/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/query.sql
+++ b/internal/endtoend/testdata/table_name_case_sensitivity/sqlite/query.sql
@@ -8,7 +8,7 @@ INSERT INTO users (name) VALUES (?);
INSERT INTO "Authors" (name) VALUES (?);
-- name: InsertBook :exec
-INSERT INTO Books (title) VALUES (?);
+INSERT INTO books (title) VALUES (?);
-- name: UpdateUser :exec
UPDATE users SET name = ? WHERE id = ?;
@@ -20,7 +20,7 @@ UPDATE users SET name = ? WHERE id = ?;
UPDATE "Authors" SET name = ? WHERE id = ?;
-- name: UpdateBook :exec
-UPDATE Books SET title = ? WHERE id = ?;
+UPDATE books SET title = ? WHERE id = ?;
-- name: DeleteUser :exec
DELETE FROM users WHERE id = ?;
@@ -32,7 +32,7 @@ DELETE FROM users WHERE id = ?;
DELETE FROM "Authors" WHERE id = ?;
-- name: DeleteBook :exec
-DELETE FROM Books WHERE id = ?;
+DELETE FROM books WHERE id = ?;
-- name: GetUser :one
SELECT * FROM users WHERE id = ?;
@@ -44,4 +44,4 @@ SELECT * FROM users WHERE id = ?;
SELECT * FROM "Authors" WHERE id = ?;
-- name: GetBook :one
-SELECT * FROM Books WHERE id = ?;
+SELECT * FROM books WHERE id = ?;
diff --git a/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/db/query.sql.go b/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/db/query.sql.go
index 474372161d..faef31678f 100644
--- a/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/db/query.sql.go
+++ b/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/db/query.sql.go
@@ -10,7 +10,7 @@ import (
)
const getRepro = `-- name: GetRepro :one
-select id, name, seq from repro where id = ? limit 1
+SELECT id, name, seq FROM repro WHERE id = ? LIMIT 1
`
func (q *Queries) GetRepro(ctx context.Context, id any) (Repro, error) {
diff --git a/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/query.sql b/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/query.sql
index b90ec62481..b3923f261f 100644
--- a/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/query.sql
+++ b/internal/endtoend/testdata/untyped_columns/sqlite/stdlib/query.sql
@@ -1,2 +1,2 @@
-- name: GetRepro :one
-select * from repro where id = ? limit 1;
\ No newline at end of file
+SELECT * FROM repro WHERE id = ? LIMIT 1;
diff --git a/internal/endtoend/testdata/upsert/sqlite/go/query.sql.go b/internal/endtoend/testdata/upsert/sqlite/go/query.sql.go
index c43dbaf869..8a5227da4e 100644
--- a/internal/endtoend/testdata/upsert/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/upsert/sqlite/go/query.sql.go
@@ -11,19 +11,19 @@ import (
const upsertLocation = `-- name: UpsertLocation :exec
INSERT INTO locations (
- name,
- address,
- zip_code,
- latitude,
- longitude
+ name,
+ address,
+ zip_code,
+ latitude,
+ longitude
)
VALUES (?, ?, ?, ?, ?)
-ON CONFLICT(name) DO UPDATE SET
- name = excluded.name,
- address = excluded.address,
- zip_code = excluded.zip_code,
- latitude = excluded.latitude,
- longitude = excluded.longitude
+ON CONFLICT (name) DO UPDATE SET
+ name = excluded.name,
+ address = excluded.address,
+ zip_code = excluded.zip_code,
+ latitude = excluded.latitude,
+ longitude = excluded.longitude
`
type UpsertLocationParams struct {
diff --git a/internal/endtoend/testdata/upsert/sqlite/query.sql b/internal/endtoend/testdata/upsert/sqlite/query.sql
index c34d70b407..2bcc90219b 100644
--- a/internal/endtoend/testdata/upsert/sqlite/query.sql
+++ b/internal/endtoend/testdata/upsert/sqlite/query.sql
@@ -1,15 +1,15 @@
/* name: UpsertLocation :exec */
INSERT INTO locations (
- name,
- address,
- zip_code,
- latitude,
- longitude
+ name,
+ address,
+ zip_code,
+ latitude,
+ longitude
)
VALUES (?, ?, ?, ?, ?)
-ON CONFLICT(name) DO UPDATE SET
- name = excluded.name,
- address = excluded.address,
- zip_code = excluded.zip_code,
- latitude = excluded.latitude,
- longitude = excluded.longitude;
+ON CONFLICT (name) DO UPDATE SET
+ name = excluded.name,
+ address = excluded.address,
+ zip_code = excluded.zip_code,
+ latitude = excluded.latitude,
+ longitude = excluded.longitude;
diff --git a/internal/endtoend/testdata/virtual_table/sqlite/go/query.sql.go b/internal/endtoend/testdata/virtual_table/sqlite/go/query.sql.go
index 1ba464841d..b042473394 100644
--- a/internal/endtoend/testdata/virtual_table/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/virtual_table/sqlite/go/query.sql.go
@@ -19,7 +19,7 @@ func (q *Queries) DeleteTblFt(ctx context.Context, b string) error {
}
const insertTblFt = `-- name: InsertTblFt :exec
-INSERT INTO tbl_ft(b, c) VALUES(?, ?)
+INSERT INTO tbl_ft (b, c) VALUES (?, ?)
`
type InsertTblFtParams struct {
@@ -33,7 +33,8 @@ func (q *Queries) InsertTblFt(ctx context.Context, arg InsertTblFtParams) error
}
const selectAllColsFt = `-- name: SelectAllColsFt :many
-SELECT b FROM ft
+SELECT b
+FROM ft
WHERE b MATCH ?
`
@@ -61,7 +62,8 @@ func (q *Queries) SelectAllColsFt(ctx context.Context, b string) ([]string, erro
}
const selectAllColsTblFt = `-- name: SelectAllColsTblFt :many
-SELECT b, c FROM tbl_ft
+SELECT b, c
+FROM tbl_ft
WHERE b MATCH ?
`
@@ -89,8 +91,10 @@ func (q *Queries) SelectAllColsTblFt(ctx context.Context, b string) ([]TblFt, er
}
const selectBm25Func = `-- name: SelectBm25Func :many
-SELECT b, c, bm25(tbl_ft, 2.0) FROM tbl_ft
-WHERE b MATCH ? ORDER BY bm25(tbl_ft)
+SELECT b, c, bm25(tbl_ft, 2.0)
+FROM tbl_ft
+WHERE b MATCH ?
+ORDER BY bm25(tbl_ft)
`
type SelectBm25FuncRow struct {
@@ -123,7 +127,8 @@ func (q *Queries) SelectBm25Func(ctx context.Context, b string) ([]SelectBm25Fun
}
const selectHightlighFunc = `-- name: SelectHightlighFunc :many
-SELECT highlight(tbl_ft, 0, '', '') FROM tbl_ft
+SELECT highlight(tbl_ft, 0, '', '')
+FROM tbl_ft
WHERE b MATCH ?
`
@@ -151,7 +156,8 @@ func (q *Queries) SelectHightlighFunc(ctx context.Context, b string) ([]string,
}
const selectOneColFt = `-- name: SelectOneColFt :many
-SELECT b FROM ft
+SELECT b
+FROM ft
WHERE b = ?
`
@@ -179,7 +185,8 @@ func (q *Queries) SelectOneColFt(ctx context.Context, b string) ([]string, error
}
const selectOneColTblFt = `-- name: SelectOneColTblFt :many
-SELECT c FROM tbl_ft
+SELECT c
+FROM tbl_ft
WHERE b = ?
`
diff --git a/internal/endtoend/testdata/virtual_table/sqlite/query.sql b/internal/endtoend/testdata/virtual_table/sqlite/query.sql
index 5646d5034e..002e90f887 100644
--- a/internal/endtoend/testdata/virtual_table/sqlite/query.sql
+++ b/internal/endtoend/testdata/virtual_table/sqlite/query.sql
@@ -1,29 +1,36 @@
-- name: SelectAllColsFt :many
-SELECT b FROM ft
+SELECT b
+FROM ft
WHERE b MATCH ?;
-- name: SelectAllColsTblFt :many
-SELECT b, c FROM tbl_ft
+SELECT b, c
+FROM tbl_ft
WHERE b MATCH ?;
-- name: SelectOneColFt :many
-SELECT b FROM ft
+SELECT b
+FROM ft
WHERE b = ?;
-- name: SelectOneColTblFt :many
-SELECT c FROM tbl_ft
+SELECT c
+FROM tbl_ft
WHERE b = ?;
-- name: SelectHightlighFunc :many
-SELECT highlight(tbl_ft, 0, '', '') FROM tbl_ft
+SELECT highlight(tbl_ft, 0, '', '')
+FROM tbl_ft
WHERE b MATCH ?;
-- name: SelectSnippetFunc :many
SELECT snippet(tbl_ft, 0, '', '', 'aa', ?) FROM tbl_ft;
-- name: SelectBm25Func :many
-SELECT b, c, bm25(tbl_ft, 2.0) FROM tbl_ft
-WHERE b MATCH ? ORDER BY bm25(tbl_ft);
+SELECT b, c, bm25(tbl_ft, 2.0)
+FROM tbl_ft
+WHERE b MATCH ?
+ORDER BY bm25(tbl_ft);
-- name: UpdateTblFt :exec
UPDATE tbl_ft SET c = ? WHERE b = ?;
@@ -32,4 +39,4 @@ UPDATE tbl_ft SET c = ? WHERE b = ?;
DELETE FROM tbl_ft WHERE b = ?;
-- name: InsertTblFt :exec
-INSERT INTO tbl_ft(b, c) VALUES(?, ?);
+INSERT INTO tbl_ft (b, c) VALUES (?, ?);
diff --git a/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/go/query.sql.go b/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/go/query.sql.go
index d815d9999b..7fe6d32f15 100644
--- a/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/go/query.sql.go
@@ -11,7 +11,8 @@ import (
)
const searchRecipes = `-- name: SearchRecipes :many
-SELECT rowid, name FROM recipes_fts
+SELECT rowid, name
+FROM recipes_fts
WHERE recipes_fts MATCH ?
`
@@ -44,8 +45,10 @@ func (q *Queries) SearchRecipes(ctx context.Context, recipesFts string) ([]Searc
}
const searchRecipesRanked = `-- name: SearchRecipesRanked :many
-SELECT rowid, name, rank FROM recipes_fts
-WHERE recipes_fts MATCH ? ORDER BY rank
+SELECT rowid, name, rank
+FROM recipes_fts
+WHERE recipes_fts MATCH ?
+ORDER BY rank
`
type SearchRecipesRankedRow struct {
diff --git a/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/query.sql b/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/query.sql
index a539d26108..0b5785ac55 100644
--- a/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/query.sql
+++ b/internal/endtoend/testdata/virtual_table_fts5_hidden/sqlite/query.sql
@@ -1,7 +1,10 @@
-- name: SearchRecipes :many
-SELECT rowid, name FROM recipes_fts
+SELECT rowid, name
+FROM recipes_fts
WHERE recipes_fts MATCH ?;
-- name: SearchRecipesRanked :many
-SELECT rowid, name, rank FROM recipes_fts
-WHERE recipes_fts MATCH ? ORDER BY rank;
+SELECT rowid, name, rank
+FROM recipes_fts
+WHERE recipes_fts MATCH ?
+ORDER BY rank;
diff --git a/internal/endtoend/testdata/where_collate/sqlite/go/query.sql.go b/internal/endtoend/testdata/where_collate/sqlite/go/query.sql.go
index fdc20f7ddb..1f40224e16 100644
--- a/internal/endtoend/testdata/where_collate/sqlite/go/query.sql.go
+++ b/internal/endtoend/testdata/where_collate/sqlite/go/query.sql.go
@@ -10,8 +10,9 @@ import (
)
const getAccountByName = `-- name: GetAccountByName :one
-SELECT id, name FROM accounts
-WHERE name = ? COLLATE NOCASE
+SELECT id, name
+FROM accounts
+WHERE name = ? COLLATE nocase
LIMIT 1
`
diff --git a/internal/endtoend/testdata/where_collate/sqlite/query.sql b/internal/endtoend/testdata/where_collate/sqlite/query.sql
index 647c3ebc07..88568bf0b9 100644
--- a/internal/endtoend/testdata/where_collate/sqlite/query.sql
+++ b/internal/endtoend/testdata/where_collate/sqlite/query.sql
@@ -1,4 +1,5 @@
-- name: GetAccountByName :one
-SELECT * FROM accounts
-WHERE name = ? COLLATE NOCASE
-LIMIT 1;
\ No newline at end of file
+SELECT *
+FROM accounts
+WHERE name = ? COLLATE nocase
+LIMIT 1;
diff --git a/internal/engine/clickhouse/format.go b/internal/engine/clickhouse/format.go
index 997af7d418..5d3cf1090b 100644
--- a/internal/engine/clickhouse/format.go
+++ b/internal/engine/clickhouse/format.go
@@ -18,7 +18,7 @@ func (p *Parser) TypeName(ns, name string) string {
// Param returns the parameter placeholder for the given number.
// ClickHouse uses {name:Type} for named parameters, but for positional
// parameters we use ? which is supported by the clickhouse-go driver.
-func (p *Parser) Param(n int) string {
+func (p *Parser) Param(n int, numbered bool) string {
return "?"
}
diff --git a/internal/engine/dolphin/format.go b/internal/engine/dolphin/format.go
index 458ae02363..b9b6c40a09 100644
--- a/internal/engine/dolphin/format.go
+++ b/internal/engine/dolphin/format.go
@@ -25,7 +25,7 @@ func (p *Parser) TypeName(ns, name string) string {
// Param returns the parameter placeholder for the given number.
// MySQL uses ? for all parameters (positional).
-func (p *Parser) Param(n int) string {
+func (p *Parser) Param(n int, numbered bool) string {
return "?"
}
diff --git a/internal/engine/postgresql/convert.go b/internal/engine/postgresql/convert.go
index b1f746d193..6600ce2151 100644
--- a/internal/engine/postgresql/convert.go
+++ b/internal/engine/postgresql/convert.go
@@ -1868,8 +1868,16 @@ func convertJoinExpr(n *pg.JoinExpr) *ast.JoinExpr {
if n == nil {
return nil
}
+ jointype := ast.JoinType(n.Jointype)
+ // PostgreSQL parses CROSS JOIN as an inner join with no condition —
+ // the only inner join its grammar allows without one — so that shape
+ // is CROSS JOIN, and must print as it: a bare JOIN with no ON or
+ // USING is a syntax error in PostgreSQL.
+ if jointype == ast.JoinTypeInner && !n.IsNatural && n.Quals == nil && len(n.UsingClause) == 0 {
+ jointype = ast.JoinTypeCross
+ }
return &ast.JoinExpr{
- Jointype: ast.JoinType(n.Jointype),
+ Jointype: jointype,
IsNatural: n.IsNatural,
Larg: convertNode(n.Larg),
Rarg: convertNode(n.Rarg),
diff --git a/internal/engine/postgresql/reserved.go b/internal/engine/postgresql/reserved.go
index 8b826f3317..12522fea94 100644
--- a/internal/engine/postgresql/reserved.go
+++ b/internal/engine/postgresql/reserved.go
@@ -59,8 +59,8 @@ func (p *Parser) TypeName(ns, name string) string {
}
// Param returns the parameter placeholder for the given number.
-// PostgreSQL uses $1, $2, etc.
-func (p *Parser) Param(n int) string {
+// PostgreSQL numbers every parameter: $1, $2, etc.
+func (p *Parser) Param(n int, numbered bool) string {
return fmt.Sprintf("$%d", n)
}
diff --git a/internal/engine/sqlite/convert.go b/internal/engine/sqlite/convert.go
index a4e2364e89..dad36d4d1e 100644
--- a/internal/engine/sqlite/convert.go
+++ b/internal/engine/sqlite/convert.go
@@ -770,7 +770,11 @@ func (c *cc) convertFrom(refs []*meyer.TableRef) []ast.Node {
join.Jointype = ast.JoinTypeLeft
case right:
join.Jointype = ast.JoinTypeRight
- case op.Type&meyer.JoinComma == 0:
+ case op.Type&meyer.JoinComma != 0:
+ join.Jointype = ast.JoinTypeComma
+ case op.Type&meyer.JoinCross != 0:
+ join.Jointype = ast.JoinTypeCross
+ default:
join.Jointype = ast.JoinTypeInner
}
}
@@ -960,14 +964,38 @@ func (c *cc) convertBinaryExpr(n *meyer.BinaryExpr) ast.Node {
Location: n.Pos(),
}
}
+ // SQLite spells some operators two ways (<> and !=, = and ==) and the
+ // tree keeps only the kind, so read the author's choice back out of the
+ // source between the operands; the compiler recognizes every spelling.
+ op := n.Op.String()
+ switch n.Op {
+ case meyer.OpNe:
+ if strings.Contains(c.operatorText(n.X, n.Y), "!=") {
+ op = "!="
+ }
+ case meyer.OpEq:
+ if strings.Contains(c.operatorText(n.X, n.Y), "==") {
+ op = "=="
+ }
+ }
return &ast.A_Expr{
- Name: &ast.List{Items: []ast.Node{&ast.String{Str: n.Op.String()}}},
+ Name: &ast.List{Items: []ast.Node{&ast.String{Str: op}}},
Lexpr: c.convert(n.X),
Rexpr: c.convert(n.Y),
Location: n.Pos(),
}
}
+// operatorText returns the source text separating two adjacent operands,
+// where the operator token sits.
+func (c *cc) operatorText(x, y meyer.Expr) string {
+ start, end := x.End(), y.Pos()
+ if start < 0 || end > len(c.src) || start > end {
+ return ""
+ }
+ return c.src[start:end]
+}
+
func (c *cc) convertUnaryExpr(n *meyer.UnaryExpr) ast.Node {
expr := c.convert(n.X)
switch n.Op {
diff --git a/internal/engine/sqlite/format.go b/internal/engine/sqlite/format.go
index 374c23b189..d79e30d45e 100644
--- a/internal/engine/sqlite/format.go
+++ b/internal/engine/sqlite/format.go
@@ -1,6 +1,9 @@
package sqlite
-import "strings"
+import (
+ "strconv"
+ "strings"
+)
// QuoteIdent quotes an identifier when printing it bare would change what it
// names: the parser folds unquoted identifiers to lower case, so any name
@@ -38,9 +41,14 @@ func (p *Parser) TypeName(ns, name string) string {
return name
}
-// Param returns the parameter placeholder for the given number.
-// SQLite uses ? for positional parameters.
-func (p *Parser) Param(n int) string {
+// Param returns the parameter placeholder for the given number. SQLite
+// takes both a bare ? (the next index) and an explicit ?N, and they are
+// not interchangeable — reordered ?N parameters bind by their numbers —
+// so the one the author wrote is the one printed.
+func (p *Parser) Param(n int, numbered bool) string {
+ if numbered {
+ return "?" + strconv.Itoa(n)
+ }
return "?"
}
diff --git a/internal/engine/sqlite/parse.go b/internal/engine/sqlite/parse.go
index 325dab2cdd..ce0a729b4c 100644
--- a/internal/engine/sqlite/parse.go
+++ b/internal/engine/sqlite/parse.go
@@ -32,7 +32,17 @@ func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) {
if err != nil {
return nil, err
}
- return f.Stmts, nil
+ // The compiler skips statements sqlc has no node for (PRAGMA and
+ // friends); the formatter must see them, so the filter lives here,
+ // not in ParseFile.
+ var stmts []ast.Statement
+ for _, stmt := range f.Stmts {
+ if _, ok := stmt.Raw.Stmt.(*ast.TODO); ok {
+ continue
+ }
+ stmts = append(stmts, stmt)
+ }
+ return stmts, nil
}
// ParseFile parses like Parse and also carries the file's comments, taken
@@ -55,16 +65,16 @@ func (p *Parser) ParseFile(r io.Reader) (*ast.File, error) {
loc := 0
for _, raw := range parsed.Stmts {
converter := &cc{src: src}
- out := converter.convert(raw)
- if _, ok := out.(*ast.TODO); !ok {
- stmts = append(stmts, ast.Statement{
- Raw: &ast.RawStmt{
- Stmt: out,
- StmtLocation: loc,
- StmtLen: trimTerminator(src, raw) - loc,
- },
- })
- }
+ // A statement sqlc has no node for converts to a TODO and stays in
+ // the list: the formatter needs its extent to keep it as written,
+ // and Parse filters it out for the compiler.
+ stmts = append(stmts, ast.Statement{
+ Raw: &ast.RawStmt{
+ Stmt: converter.convert(raw),
+ StmtLocation: loc,
+ StmtLen: trimTerminator(src, raw) - loc,
+ },
+ })
loc = raw.End()
}
diff --git a/internal/sql/ast/a_expr.go b/internal/sql/ast/a_expr.go
index 2605db59d6..ea3242337c 100644
--- a/internal/sql/ast/a_expr.go
+++ b/internal/sql/ast/a_expr.go
@@ -7,7 +7,14 @@ import (
)
type A_Expr struct {
- Kind A_Expr_Kind
+ Kind A_Expr_Kind
+ // Name is the operator, as a list of String nodes: PostgreSQL's
+ // operator space is open (user-defined and schema-qualified operators),
+ // so the shared tree keeps pg_query's shape rather than an enum. Each
+ // engine's converter writes the operator as its parser saw it — for an
+ // engine that accepts more than one spelling of the same operator
+ // (SQLite's != for <>, == for =), that is the author's spelling, which
+ // is how the printer preserves it.
Name *List
Lexpr Node
Rexpr Node
diff --git a/internal/sql/ast/coalesce_expr.go b/internal/sql/ast/coalesce_expr.go
index 0faee5bf4c..6aadffd30c 100644
--- a/internal/sql/ast/coalesce_expr.go
+++ b/internal/sql/ast/coalesce_expr.go
@@ -18,7 +18,9 @@ func (n *CoalesceExpr) Format(buf *TrackedBuffer, d format.Dialect) {
if n == nil {
return
}
- buf.WriteString("COALESCE(")
+ // Lower case, like every other function name: the printer upper-cases
+ // keywords, and function names are identifiers, which fold lower.
+ buf.WriteString("coalesce(")
buf.astFormat(n.Args, d)
buf.WriteString(")")
}
diff --git a/internal/sql/ast/join_expr.go b/internal/sql/ast/join_expr.go
index c682356660..a6bd132d7c 100644
--- a/internal/sql/ast/join_expr.go
+++ b/internal/sql/ast/join_expr.go
@@ -22,27 +22,28 @@ func (n *JoinExpr) Format(buf *TrackedBuffer, d format.Dialect) {
return
}
buf.astFormat(n.Larg, d)
- buf.beforeClause(n.Rarg, d)
- buf.Line()
- if n.IsNatural {
- buf.WriteString("NATURAL ")
- }
- switch n.Jointype {
- case JoinTypeLeft:
- buf.WriteString("LEFT JOIN ")
- case JoinTypeRight:
- buf.WriteString("RIGHT JOIN ")
- case JoinTypeFull:
- buf.WriteString("FULL JOIN ")
- case JoinTypeInner:
- // CROSS JOIN has no ON or USING clause
- if !items(n.UsingClause) && !set(n.Quals) {
+ if n.Jointype == JoinTypeComma {
+ buf.WriteString(",")
+ buf.beforeClause(n.Rarg, d)
+ buf.Line()
+ } else {
+ buf.beforeClause(n.Rarg, d)
+ buf.Line()
+ if n.IsNatural {
+ buf.WriteString("NATURAL ")
+ }
+ switch n.Jointype {
+ case JoinTypeLeft:
+ buf.WriteString("LEFT JOIN ")
+ case JoinTypeRight:
+ buf.WriteString("RIGHT JOIN ")
+ case JoinTypeFull:
+ buf.WriteString("FULL JOIN ")
+ case JoinTypeCross:
buf.WriteString("CROSS JOIN ")
- } else {
+ default:
buf.WriteString("JOIN ")
}
- default:
- buf.WriteString("JOIN ")
}
buf.astFormat(n.Rarg, d)
if items(n.UsingClause) {
diff --git a/internal/sql/ast/join_type.go b/internal/sql/ast/join_type.go
index 824e0b357f..d4f5565b80 100644
--- a/internal/sql/ast/join_type.go
+++ b/internal/sql/ast/join_type.go
@@ -12,6 +12,13 @@ const (
JoinTypeAnti
JoinTypeUniqueOuter
JoinTypeUniqueInner
+ // Beyond the libpg_query set: joins SQLite spells (and treats)
+ // distinctly. Both behave as inner joins, but CROSS JOIN carries a
+ // planner hint — SQLite will not reorder the pair — and a
+ // comma-separated FROM item is its own syntax, so neither may be
+ // rewritten into the other.
+ JoinTypeCross
+ JoinTypeComma
)
type JoinType uint
diff --git a/internal/sql/ast/on_conflict_clause.go b/internal/sql/ast/on_conflict_clause.go
index a71bae0a23..7e04c7ff52 100644
--- a/internal/sql/ast/on_conflict_clause.go
+++ b/internal/sql/ast/on_conflict_clause.go
@@ -35,12 +35,20 @@ func (n *OnConflictClause) Format(buf *TrackedBuffer, d format.Dialect) {
case OnConflictActionNothing:
buf.WriteString("DO NOTHING")
case OnConflictActionUpdate:
- buf.WriteString("DO UPDATE SET ")
- // Format as assignment list: name = val
+ buf.WriteString("DO UPDATE SET")
+ buf.Group()
+ buf.Indent()
+ // Format as assignment list: name = val, one per line when the
+ // author broke the list (or a comment forces it open).
if n.TargetList != nil {
for i, item := range n.TargetList.Items {
- if i > 0 {
- buf.WriteString(", ")
+ if i == 0 {
+ buf.boundary(item)
+ buf.Line()
+ } else {
+ buf.WriteString(",")
+ buf.boundary(item)
+ buf.Line()
}
if rt, ok := item.(*ResTarget); ok {
if rt.Name != nil {
@@ -53,9 +61,13 @@ func (n *OnConflictClause) Format(buf *TrackedBuffer, d format.Dialect) {
}
}
}
+ buf.EndIndent()
if set(n.WhereClause) {
- buf.WriteString(" WHERE ")
- buf.astFormat(n.WhereClause, d)
+ buf.boundary(n.WhereClause)
+ buf.Line()
+ buf.WriteString("WHERE ")
+ buf.condition(n.WhereClause, d)
}
+ buf.EndGroup()
}
}
diff --git a/internal/sql/ast/param_ref.go b/internal/sql/ast/param_ref.go
index 7ebc897a95..02c98f3dfb 100644
--- a/internal/sql/ast/param_ref.go
+++ b/internal/sql/ast/param_ref.go
@@ -16,5 +16,5 @@ func (n *ParamRef) Format(buf *TrackedBuffer, d format.Dialect) {
if n == nil {
return
}
- buf.WriteString(d.Param(n.Number))
+ buf.WriteString(d.Param(n.Number, n.Dollar))
}
diff --git a/internal/sql/ast/select_stmt.go b/internal/sql/ast/select_stmt.go
index 2b41692bff..226c110734 100644
--- a/internal/sql/ast/select_stmt.go
+++ b/internal/sql/ast/select_stmt.go
@@ -78,6 +78,10 @@ func (n *SelectStmt) Format(buf *TrackedBuffer, d format.Dialect) {
if n.Larg != nil && n.Rarg != nil {
buf.astFormat(n.Larg, d)
+ // The seam between the compound halves: an author who broke the
+ // line around UNION / INTERSECT / EXCEPT keeps the operator on its
+ // own line, and a comment above it prints here.
+ buf.boundary(n.Rarg)
buf.Line()
switch n.Op {
case Union:
diff --git a/internal/sql/format/format.go b/internal/sql/format/format.go
index 1520cb2358..b61b9cf5e7 100644
--- a/internal/sql/format/format.go
+++ b/internal/sql/format/format.go
@@ -10,9 +10,12 @@ type Dialect interface {
// This handles dialect-specific type name mappings (e.g., pg_catalog.int4 -> integer)
TypeName(ns, name string) string
- // Param returns the parameter placeholder for the given parameter number.
+ // Param returns the placeholder for the parameter with this number.
+ // numbered reports that the author wrote the number out (SQLite's ?2,
+ // where a bare ? takes the next index), so engines with both forms can
+ // keep the one that was written.
// PostgreSQL uses $1, $2, etc. MySQL uses ?
- Param(n int) string
+ Param(n int, numbered bool) string
// Cast formats a type cast expression.
// PostgreSQL uses expr::type, MySQL uses CAST(expr AS type)