diff --git a/go.mod b/go.mod index c640857aa6..b5260ccdc0 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/sqlc-dev/doubleclick v1.0.0 - github.com/sqlc-dev/marino v0.2.0 + github.com/sqlc-dev/marino v0.3.0 github.com/sqlc-dev/meyer v0.1.1 github.com/sqlc-dev/oliphant v0.1.0 github.com/sqlc-dev/teesql v1.1.0 diff --git a/go.sum b/go.sum index 066582c795..08c5675e81 100644 --- a/go.sum +++ b/go.sum @@ -67,8 +67,8 @@ github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/sqlc-dev/doubleclick v1.0.0 h1:2/OApfQ2eLgcfa/Fqs8WSMA6atH0G8j9hHbQIgMfAXI= github.com/sqlc-dev/doubleclick v1.0.0/go.mod h1:ODHRroSrk/rr5neRHlWMSRijqOak8YmNaO3VAZCNl5Y= -github.com/sqlc-dev/marino v0.2.0 h1:sPGDuaiO+NCY5Nf++u9+nCVTQ2/Euj8pE7Xmf/D4x64= -github.com/sqlc-dev/marino v0.2.0/go.mod h1:mQxC2dgDE0DWHMb2B5jZNk7KToJuS6wnxnffBfYnq08= +github.com/sqlc-dev/marino v0.3.0 h1:e9cinBXJFFa3yRpokYNNinWvkewgd6XVDgnlG0bOmTw= +github.com/sqlc-dev/marino v0.3.0/go.mod h1:mQxC2dgDE0DWHMb2B5jZNk7KToJuS6wnxnffBfYnq08= github.com/sqlc-dev/meyer v0.1.1 h1:BAeZcfgLyTnk9f90DyGEKXPrHxtgvVD/DTM6awq2kUY= github.com/sqlc-dev/meyer v0.1.1/go.mod h1:pS4USCRf/SLjWtaMcnTo4YrEEFKBj8CyyqlxcVUJQH8= github.com/sqlc-dev/oliphant v0.1.0 h1:RAsO6BMitIzB2+swx/qzUR5nf6w4cQ1abgHIu+Fgppo= diff --git a/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/db.go b/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/db.go new file mode 100644 index 0000000000..32faa9f2b8 --- /dev/null +++ b/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...any) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...any) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...any) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/models.go b/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/models.go new file mode 100644 index 0000000000..a058e12946 --- /dev/null +++ b/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/models.go @@ -0,0 +1,14 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package querytest + +import ( + "time" +) + +type Collection struct { + ID int64 + UpdatedAt time.Time +} diff --git a/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/query.sql.go b/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/query.sql.go new file mode 100644 index 0000000000..f23260b2b5 --- /dev/null +++ b/internal/endtoend/testdata/mysql_ddl_routines/mysql/go/query.sql.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getCollection = `-- name: GetCollection :one +SELECT id, updated_at FROM collections WHERE id = ? +` + +func (q *Queries) GetCollection(ctx context.Context, id int64) (Collection, error) { + row := q.db.QueryRowContext(ctx, getCollection, id) + var i Collection + err := row.Scan(&i.ID, &i.UpdatedAt) + return i, err +} diff --git a/internal/endtoend/testdata/mysql_ddl_routines/mysql/query.sql b/internal/endtoend/testdata/mysql_ddl_routines/mysql/query.sql new file mode 100644 index 0000000000..f75433b05a --- /dev/null +++ b/internal/endtoend/testdata/mysql_ddl_routines/mysql/query.sql @@ -0,0 +1,2 @@ +-- name: GetCollection :one +SELECT id, updated_at FROM collections WHERE id = ?; diff --git a/internal/endtoend/testdata/mysql_ddl_routines/mysql/schema.sql b/internal/endtoend/testdata/mysql_ddl_routines/mysql/schema.sql new file mode 100644 index 0000000000..3c614e5d81 --- /dev/null +++ b/internal/endtoend/testdata/mysql_ddl_routines/mysql/schema.sql @@ -0,0 +1,12 @@ +CREATE TABLE collections ( + id BIGINT PRIMARY KEY, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE TRIGGER update_timestamp_collections BEFORE UPDATE ON collections FOR EACH ROW SET NEW.updated_at = CURRENT_TIMESTAMP; + +CREATE FUNCTION uuidv4() RETURNS CHAR(36) NO SQL RETURN LOWER(HEX(RANDOM_BYTES(4))); + +CREATE PROCEDURE touch_collections() UPDATE collections SET updated_at = NOW(); + +CREATE EVENT clear_stale_collections ON SCHEDULE EVERY 1 HOUR DO DELETE FROM collections WHERE updated_at < CURRENT_TIMESTAMP - INTERVAL 30 DAY; diff --git a/internal/endtoend/testdata/mysql_ddl_routines/mysql/sqlc.json b/internal/endtoend/testdata/mysql_ddl_routines/mysql/sqlc.json new file mode 100644 index 0000000000..7dabfeef72 --- /dev/null +++ b/internal/endtoend/testdata/mysql_ddl_routines/mysql/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "sql_package": "database/sql", + "sql_driver": "github.com/go-sql-driver/mysql", + "engine": "mysql", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/mysql_default_expression/mysql/go/db.go b/internal/endtoend/testdata/mysql_default_expression/mysql/go/db.go new file mode 100644 index 0000000000..32faa9f2b8 --- /dev/null +++ b/internal/endtoend/testdata/mysql_default_expression/mysql/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...any) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...any) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...any) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/mysql_default_expression/mysql/go/models.go b/internal/endtoend/testdata/mysql_default_expression/mysql/go/models.go new file mode 100644 index 0000000000..87f791764e --- /dev/null +++ b/internal/endtoend/testdata/mysql_default_expression/mysql/go/models.go @@ -0,0 +1,15 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package querytest + +import ( + "time" +) + +type Expiration struct { + ID int32 + CreatedAt time.Time + Expiry time.Time +} diff --git a/internal/endtoend/testdata/mysql_default_expression/mysql/go/query.sql.go b/internal/endtoend/testdata/mysql_default_expression/mysql/go/query.sql.go new file mode 100644 index 0000000000..1f73628489 --- /dev/null +++ b/internal/endtoend/testdata/mysql_default_expression/mysql/go/query.sql.go @@ -0,0 +1,21 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getExpiration = `-- name: GetExpiration :one +SELECT id, created_at, expiry FROM expirations WHERE id = ? +` + +func (q *Queries) GetExpiration(ctx context.Context, id int32) (Expiration, error) { + row := q.db.QueryRowContext(ctx, getExpiration, id) + var i Expiration + err := row.Scan(&i.ID, &i.CreatedAt, &i.Expiry) + return i, err +} diff --git a/internal/endtoend/testdata/mysql_default_expression/mysql/query.sql b/internal/endtoend/testdata/mysql_default_expression/mysql/query.sql new file mode 100644 index 0000000000..62e0acdc8a --- /dev/null +++ b/internal/endtoend/testdata/mysql_default_expression/mysql/query.sql @@ -0,0 +1,2 @@ +-- name: GetExpiration :one +SELECT id, created_at, expiry FROM expirations WHERE id = ?; diff --git a/internal/endtoend/testdata/mysql_default_expression/mysql/schema.sql b/internal/endtoend/testdata/mysql_default_expression/mysql/schema.sql new file mode 100644 index 0000000000..09a7a35418 --- /dev/null +++ b/internal/endtoend/testdata/mysql_default_expression/mysql/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE expirations ( + id INT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT (UTC_TIMESTAMP()), + expiry TIMESTAMP NOT NULL DEFAULT (CURRENT_TIMESTAMP + INTERVAL 30 DAY), + PRIMARY KEY (id) +); diff --git a/internal/endtoend/testdata/mysql_default_expression/mysql/sqlc.json b/internal/endtoend/testdata/mysql_default_expression/mysql/sqlc.json new file mode 100644 index 0000000000..7dabfeef72 --- /dev/null +++ b/internal/endtoend/testdata/mysql_default_expression/mysql/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "sql_package": "database/sql", + "sql_driver": "github.com/go-sql-driver/mysql", + "engine": "mysql", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +} diff --git a/internal/endtoend/testdata/mysql_json_table/mysql/go/db.go b/internal/endtoend/testdata/mysql_json_table/mysql/go/db.go new file mode 100644 index 0000000000..32faa9f2b8 --- /dev/null +++ b/internal/endtoend/testdata/mysql_json_table/mysql/go/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package querytest + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...any) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...any) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...any) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/endtoend/testdata/mysql_json_table/mysql/go/models.go b/internal/endtoend/testdata/mysql_json_table/mysql/go/models.go new file mode 100644 index 0000000000..2e9aaebfd9 --- /dev/null +++ b/internal/endtoend/testdata/mysql_json_table/mysql/go/models.go @@ -0,0 +1,13 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 + +package querytest + +type Person struct { + Emails string +} + +type PersonEmail struct { + Email string +} diff --git a/internal/endtoend/testdata/mysql_json_table/mysql/go/query.sql.go b/internal/endtoend/testdata/mysql_json_table/mysql/go/query.sql.go new file mode 100644 index 0000000000..1089efbbea --- /dev/null +++ b/internal/endtoend/testdata/mysql_json_table/mysql/go/query.sql.go @@ -0,0 +1,37 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: query.sql + +package querytest + +import ( + "context" +) + +const getEmails = `-- name: GetEmails :many +SELECT email FROM person_email +` + +func (q *Queries) GetEmails(ctx context.Context) ([]string, error) { + rows, err := q.db.QueryContext(ctx, getEmails) + if err != nil { + return nil, err + } + defer rows.Close() + var items []string + for rows.Next() { + var email string + if err := rows.Scan(&email); err != nil { + return nil, err + } + items = append(items, email) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/internal/endtoend/testdata/mysql_json_table/mysql/query.sql b/internal/endtoend/testdata/mysql_json_table/mysql/query.sql new file mode 100644 index 0000000000..8b22b5225a --- /dev/null +++ b/internal/endtoend/testdata/mysql_json_table/mysql/query.sql @@ -0,0 +1,2 @@ +-- name: GetEmails :many +SELECT email FROM person_email; diff --git a/internal/endtoend/testdata/mysql_json_table/mysql/schema.sql b/internal/endtoend/testdata/mysql_json_table/mysql/schema.sql new file mode 100644 index 0000000000..7e4a730f32 --- /dev/null +++ b/internal/endtoend/testdata/mysql_json_table/mysql/schema.sql @@ -0,0 +1,12 @@ +CREATE TABLE person ( + emails TEXT NOT NULL +); + +CREATE TABLE person_email ( + email TEXT NOT NULL +); + +INSERT INTO person_email (`email`) + SELECT pe.email + FROM person AS p + JOIN JSON_TABLE(p.emails, '$[*]' COLUMNS(email TEXT PATH '$')) AS pe; diff --git a/internal/endtoend/testdata/mysql_json_table/mysql/sqlc.json b/internal/endtoend/testdata/mysql_json_table/mysql/sqlc.json new file mode 100644 index 0000000000..7dabfeef72 --- /dev/null +++ b/internal/endtoend/testdata/mysql_json_table/mysql/sqlc.json @@ -0,0 +1,14 @@ +{ + "version": "1", + "packages": [ + { + "path": "go", + "sql_package": "database/sql", + "sql_driver": "github.com/go-sql-driver/mysql", + "engine": "mysql", + "name": "querytest", + "schema": "schema.sql", + "queries": "query.sql" + } + ] +}