snapshot of https://github.com/sqlc-dev/sqlc.git (main, 2026-09-16; blobs > 131072B omitted)
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled

This commit is contained in:
upstream-mirror
2026-09-16 02:17:34 +05:00
commit 0f4df23290
7340 changed files with 238743 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
{
"dialect": "duckdb",
"default_schema": "main",
"const": {
"integer": "integer",
"float": "double",
"string": "varchar",
"bool": "boolean"
},
"bool": "boolean",
"comparison": ["=", "==", "<>", "!=", "<", "<=", ">", ">=", "IS DISTINCT FROM", "IS NOT DISTINCT FROM"],
"comparison_categories": "BNSDU",
"arithmetic": ["+", "-", "*", "/", "//", "%", "**", "^"],
"arithmetic_categories": "N",
"cast_categories": "NSD",
"rewrites": [
{
"from": "varchar($1)",
"to": "varchar"
},
{
"from": "decimal",
"to": "decimal(18, 3)"
}
]
}

View File

@@ -0,0 +1,157 @@
{"name":"!~~","left":"varchar","right":"varchar","result":"boolean"}
{"name":"!~~*","left":"varchar","right":"varchar","result":"boolean"}
{"name":"%","left":"bigint","right":"bigint","result":"bigint"}
{"name":"%","left":"decimal","right":"decimal","result":"decimal"}
{"name":"%","left":"double","right":"double","result":"double"}
{"name":"%","left":"float","right":"float","result":"float"}
{"name":"%","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"%","left":"integer","right":"integer","result":"integer"}
{"name":"%","left":"smallint","right":"smallint","result":"smallint"}
{"name":"%","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"%","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"%","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"%","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"%","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"%","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"\u0026","left":"bigint","right":"bigint","result":"bigint"}
{"name":"\u0026","left":"bit","right":"bit","result":"bit"}
{"name":"\u0026","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"\u0026","left":"integer","right":"integer","result":"integer"}
{"name":"\u0026","left":"smallint","right":"smallint","result":"smallint"}
{"name":"\u0026","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"\u0026","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"\u0026","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"\u0026","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"\u0026","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"\u0026","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"\u0026\u0026","left":"geometry","right":"geometry","result":"boolean"}
{"name":"*","left":"bigint","right":"bigint","result":"bigint"}
{"name":"*","left":"bigint","right":"interval","result":"interval"}
{"name":"*","left":"decimal","right":"decimal","result":"decimal"}
{"name":"*","left":"double","right":"double","result":"double"}
{"name":"*","left":"double","right":"interval","result":"interval"}
{"name":"*","left":"float","right":"float","result":"float"}
{"name":"*","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"*","left":"integer","right":"integer","result":"integer"}
{"name":"*","left":"interval","right":"bigint","result":"interval"}
{"name":"*","left":"interval","right":"double","result":"interval"}
{"name":"*","left":"smallint","right":"smallint","result":"smallint"}
{"name":"*","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"*","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"*","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"*","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"*","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"*","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"**","left":"double","right":"double","result":"double"}
{"name":"+","left":"bigint","right":"bigint","result":"bigint"}
{"name":"+","left":"bignum","right":"bignum","result":"bignum"}
{"name":"+","left":"date","right":"integer","result":"date"}
{"name":"+","left":"date","right":"interval","result":"timestamp"}
{"name":"+","left":"date","right":"time with time zone","result":"timestamp with time zone"}
{"name":"+","left":"date","right":"time","result":"timestamp"}
{"name":"+","left":"decimal","right":"decimal","result":"decimal"}
{"name":"+","left":"double","right":"double","result":"double"}
{"name":"+","left":"float","right":"float","result":"float"}
{"name":"+","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"+","left":"integer","right":"date","result":"date"}
{"name":"+","left":"integer","right":"integer","result":"integer"}
{"name":"+","left":"interval","right":"date","result":"timestamp"}
{"name":"+","left":"interval","right":"interval","result":"interval"}
{"name":"+","left":"interval","right":"time with time zone","result":"time with time zone"}
{"name":"+","left":"interval","right":"timestamp with time zone","result":"timestamp with time zone"}
{"name":"+","left":"interval","right":"timestamp","result":"timestamp"}
{"name":"+","left":"interval","right":"time","result":"time"}
{"name":"+","left":"smallint","right":"smallint","result":"smallint"}
{"name":"+","left":"time with time zone","right":"date","result":"timestamp with time zone"}
{"name":"+","left":"time with time zone","right":"interval","result":"time with time zone"}
{"name":"+","left":"time","right":"date","result":"timestamp"}
{"name":"+","left":"time","right":"interval","result":"time"}
{"name":"+","left":"timestamp with time zone","right":"interval","result":"timestamp with time zone"}
{"name":"+","left":"timestamp","right":"interval","result":"timestamp"}
{"name":"+","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"+","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"+","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"+","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"+","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"+","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"-","left":"bigint","right":"bigint","result":"bigint"}
{"name":"-","left":"bignum","right":"bignum","result":"bignum"}
{"name":"-","left":"date","right":"date","result":"bigint"}
{"name":"-","left":"date","right":"integer","result":"date"}
{"name":"-","left":"date","right":"interval","result":"timestamp"}
{"name":"-","left":"decimal","right":"decimal","result":"decimal"}
{"name":"-","left":"double","right":"double","result":"double"}
{"name":"-","left":"float","right":"float","result":"float"}
{"name":"-","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"-","left":"integer","right":"integer","result":"integer"}
{"name":"-","left":"interval","right":"interval","result":"interval"}
{"name":"-","left":"smallint","right":"smallint","result":"smallint"}
{"name":"-","left":"time with time zone","right":"interval","result":"time with time zone"}
{"name":"-","left":"time","right":"interval","result":"time"}
{"name":"-","left":"timestamp with time zone","right":"interval","result":"timestamp with time zone"}
{"name":"-","left":"timestamp with time zone","right":"timestamp with time zone","result":"interval"}
{"name":"-","left":"timestamp","right":"interval","result":"timestamp"}
{"name":"-","left":"timestamp","right":"timestamp","result":"interval"}
{"name":"-","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"-","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"-","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"-","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"-","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"-","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"-\u003e\u003e","left":"json","right":"bigint","result":"varchar"}
{"name":"-\u003e\u003e","left":"json","right":"varchar","result":"varchar"}
{"name":"-\u003e\u003e","left":"varchar","right":"bigint","result":"varchar"}
{"name":"-\u003e\u003e","left":"varchar","right":"varchar","result":"varchar"}
{"name":"/","left":"double","right":"double","result":"double"}
{"name":"/","left":"float","right":"float","result":"float"}
{"name":"/","left":"interval","right":"double","result":"interval"}
{"name":"//","left":"bigint","right":"bigint","result":"bigint"}
{"name":"//","left":"double","right":"double","result":"double"}
{"name":"//","left":"float","right":"float","result":"float"}
{"name":"//","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"//","left":"integer","right":"integer","result":"integer"}
{"name":"//","left":"smallint","right":"smallint","result":"smallint"}
{"name":"//","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"//","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"//","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"//","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"//","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"//","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"\u003c\u003c","left":"bigint","right":"bigint","result":"bigint"}
{"name":"\u003c\u003c","left":"bit","right":"integer","result":"bit"}
{"name":"\u003c\u003c","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"\u003c\u003c","left":"integer","right":"integer","result":"integer"}
{"name":"\u003c\u003c","left":"smallint","right":"smallint","result":"smallint"}
{"name":"\u003c\u003c","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"\u003c\u003c","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"\u003c\u003c","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"\u003c\u003c","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"\u003c\u003c","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"\u003c\u003c","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"\u003e\u003e","left":"bigint","right":"bigint","result":"bigint"}
{"name":"\u003e\u003e","left":"bit","right":"integer","result":"bit"}
{"name":"\u003e\u003e","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"\u003e\u003e","left":"integer","right":"integer","result":"integer"}
{"name":"\u003e\u003e","left":"smallint","right":"smallint","result":"smallint"}
{"name":"\u003e\u003e","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"\u003e\u003e","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"\u003e\u003e","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"\u003e\u003e","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"\u003e\u003e","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"\u003e\u003e","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"^","left":"double","right":"double","result":"double"}
{"name":"^@","left":"varchar","right":"varchar","result":"boolean"}
{"name":"|","left":"bigint","right":"bigint","result":"bigint"}
{"name":"|","left":"bit","right":"bit","result":"bit"}
{"name":"|","left":"hugeint","right":"hugeint","result":"hugeint"}
{"name":"|","left":"integer","right":"integer","result":"integer"}
{"name":"|","left":"smallint","right":"smallint","result":"smallint"}
{"name":"|","left":"tinyint","right":"tinyint","result":"tinyint"}
{"name":"|","left":"ubigint","right":"ubigint","result":"ubigint"}
{"name":"|","left":"uhugeint","right":"uhugeint","result":"uhugeint"}
{"name":"|","left":"uinteger","right":"uinteger","result":"uinteger"}
{"name":"|","left":"usmallint","right":"usmallint","result":"usmallint"}
{"name":"|","left":"utinyint","right":"utinyint","result":"utinyint"}
{"name":"~~","left":"varchar","right":"varchar","result":"boolean"}
{"name":"~~*","left":"varchar","right":"varchar","result":"boolean"}
{"name":"~~~","left":"varchar","right":"varchar","result":"boolean"}

View File

@@ -0,0 +1,40 @@
{"name":"any","category":"U"}
{"name":"array","category":"C"}
{"name":"bigint","category":"N","aliases":["int64","int8","long","oid"]}
{"name":"bignum","category":"U","aliases":["varint"]}
{"name":"bit","category":"U","aliases":["bitstring"]}
{"name":"blob","category":"U","aliases":["binary","bytea","varbinary"]}
{"name":"boolean","category":"B","aliases":["bool","logical"]}
{"name":"date","category":"D"}
{"name":"decimal","category":"N","aliases":["dec","numeric"]}
{"name":"double","category":"N","aliases":["float8"]}
{"name":"enum","category":"U"}
{"name":"float","category":"N","aliases":["float4","real"]}
{"name":"geometry","category":"U"}
{"name":"hugeint","category":"N","aliases":["int128"]}
{"name":"integer","category":"N","aliases":["int","int32","int4","integral","signed"]}
{"name":"interval","category":"D"}
{"name":"list","category":"C"}
{"name":"map","category":"C"}
{"name":"smallint","category":"N","aliases":["int16","int2","short"]}
{"name":"struct","category":"C","aliases":["row"]}
{"name":"time","category":"D"}
{"name":"time with time zone","category":"D","aliases":["timetz"]}
{"name":"time_ns","category":"D"}
{"name":"timestamp","category":"D","aliases":["datetime","timestamp_us"]}
{"name":"timestamp with time zone","category":"D","aliases":["timestamptz"]}
{"name":"timestamp_ms","category":"D"}
{"name":"timestamp_ns","category":"D"}
{"name":"timestamp_s","category":"D"}
{"name":"timestamptz_ns","category":"D"}
{"name":"tinyint","category":"N","aliases":["int1"]}
{"name":"tuple","category":"U"}
{"name":"ubigint","category":"N","aliases":["uint64"]}
{"name":"uhugeint","category":"N","aliases":["uint128"]}
{"name":"uinteger","category":"N","aliases":["uint32"]}
{"name":"union","category":"C"}
{"name":"usmallint","category":"N","aliases":["uint16"]}
{"name":"utinyint","category":"N","aliases":["uint8"]}
{"name":"uuid","category":"U","aliases":["guid"]}
{"name":"varchar","category":"S","aliases":["json","bpchar","char","nvarchar","string","text"]}
{"name":"variant","category":"U"}

View File

@@ -0,0 +1,67 @@
package duckdb
import (
"context"
"errors"
"io"
"github.com/sqlc-dev/darkwing/parser"
"github.com/sqlc-dev/sqlc/internal/source"
"github.com/sqlc-dev/sqlc/internal/sql/ast"
"github.com/sqlc-dev/sqlc/internal/sql/sqlerr"
)
func NewParser() *Parser {
return &Parser{}
}
type Parser struct{}
// Parse converts DuckDB SQL into sqlc's AST. darkwing assigns every
// statement a byte span and the spans tile the input — each statement
// starts where the previous one ended — so a statement's span covers the
// comments before it, which is where the sqlc query annotation lives.
func (p *Parser) Parse(r io.Reader) ([]ast.Statement, error) {
stmts, err := parser.Parse(context.Background(), r)
if err != nil {
var perr *parser.Error
if errors.As(err, &perr) {
serr := &sqlerr.Error{
Message: err.Error(),
Line: perr.Line,
Column: perr.Column,
}
if perr.Offset >= 0 {
serr.Location = perr.Offset
}
return nil, serr
}
return nil, err
}
var out []ast.Statement
for _, stmt := range stmts {
converter := &cc{}
node := converter.convert(stmt)
if _, ok := node.(*ast.TODO); ok {
continue
}
out = append(out, ast.Statement{
Raw: &ast.RawStmt{
Stmt: node,
StmtLocation: stmt.Pos(),
StmtLen: stmt.End() - stmt.Pos(),
},
})
}
return out, nil
}
// https://duckdb.org/docs/stable/sql/introduction#comments
func (p *Parser) CommentSyntax() source.CommentSyntax {
return source.CommentSyntax{
Dash: true, // -- comment
SlashStar: true, // /* comment */
}
}

View File

@@ -0,0 +1,9 @@
package duckdb
import "github.com/sqlc-dev/darkwing/token"
// IsReservedKeyword reports whether s is a reserved keyword in DuckDB's
// grammar, per the keyword lists darkwing vendors from DuckDB.
func (p *Parser) IsReservedKeyword(s string) bool {
return token.Categories(s).Has(token.KeywordReserved)
}

View File

@@ -0,0 +1,23 @@
package duckdb
import (
"embed"
"github.com/sqlc-dev/sqlc/internal/core"
"github.com/sqlc-dev/sqlc/internal/core/seed"
)
// The dialect directory describes DuckDB's type system. types.jsonl,
// functions.jsonl and operators.jsonl are generated from a live DuckDB 2.0
// CLI by goldeneye (internal/goldeneye), which also checks them against one;
// dialect.json is authored by hand. Regenerate from internal/goldeneye with:
//
// DUCKDB=/path/to/duckdb go run ./cmd/goldeneye generate duckdb
//
//go:embed dialect
var dialectFS embed.FS
// Dialect returns the catalog option that seeds DuckDB's type system.
func Dialect() core.Option {
return seed.Dialect(dialectFS, "dialect")
}

View File

@@ -0,0 +1,47 @@
package duckdb
import (
"log"
"strings"
dw "github.com/sqlc-dev/darkwing/ast"
"github.com/sqlc-dev/sqlc/internal/debug"
"github.com/sqlc-dev/sqlc/internal/sql/ast"
)
func todo(n dw.Node) *ast.TODO {
if debug.Active {
log.Printf("duckdb.convert: Unknown node type %T\n", n)
}
return &ast.TODO{}
}
// identifier normalizes an identifier. DuckDB identifiers are
// case-insensitive (though case-preserving); the catalog matches them
// lowercased.
func identifier(id string) string {
return strings.ToLower(id)
}
func NewIdentifier(t string) *ast.String {
return &ast.String{Str: identifier(t)}
}
// schemaName normalizes a schema qualifier. DuckDB's default "main" schema
// maps to the catalog's default namespace, so it is treated as unqualified.
func schemaName(s string) string {
s = identifier(s)
if s == "main" {
return ""
}
return s
}
func parseTableName(catalog, schema, name string) *ast.TableName {
return &ast.TableName{
Catalog: identifier(catalog),
Schema: schemaName(schema),
Name: identifier(name),
}
}