Version
1.30.0
What happened?
When sqlc generates Golang code for a MySQL query with DATEDIFF() comparison in it:
SELECT id
FROM wishlist_item
WHERE DATEDIFF(date_from, NOW()) >= sqlc.arg('min_days_to_date_from') AND
DATEDIFF(date_from, NOW()) <= sqlc.arg('max_days_to_date_from') AND
updated_at < sqlc.arg('updated_by');
resulting datetype for arguments min_days_to_date_from/max_days_to_date_from is time.Time, even though DATEDIFF itself outputs an integer
const getUpdateableWishlistItemIDs = `-- name: GetUpdateableWishlistItemIDs :many
SELECT id
FROM wishlist_item
WHERE DATEDIFF(date_from, NOW()) >= ? AND
DATEDIFF(date_from, NOW()) <= ? AND
updated_at < ?
`
type GetUpdateableWishlistItemIDsParams struct {
MinDaysToDateFrom time.Time
MaxDaysToDateFrom time.Time
UpdatedBy sql.NullTime
}
func (q *Queries) GetUpdateableWishlistItemIDs(ctx context.Context, arg GetUpdateableWishlistItemIDsParams) ([]uint32, error) {
rows, err := q.db.QueryContext(ctx, getUpdateableWishlistItemIDs, arg.MinDaysToDateFrom, arg.MaxDaysToDateFrom, arg.UpdatedBy)
if err != nil {
return nil, err
}
defer rows.Close()
var items []uint32
for rows.Next() {
var id uint32
if err := rows.Scan(&id); err != nil {
return nil, err
}
items = append(items, id)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
The generated type of MinDaysToDateFrom should be int32, not time.Time
Relevant log output
Database schema
CREATE TABLE `wishlist_item` (
`id` int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
.........unrelated fields
`date_from` date NOT NULL,
.........unrelated fields
`updated_at` timestamp NULL DEFAULT NULL,
.......unrelated fields
;
SQL queries
SELECT id
FROM wishlist_item
WHERE DATEDIFF(date_from, NOW()) >= sqlc.arg('min_days_to_date_from') AND
DATEDIFF(date_from, NOW()) <= sqlc.arg('max_days_to_date_from') AND
updated_at < sqlc.arg('updated_by');
Configuration
version: "2"
sql:
- engine: mysql
schema: migrations
queries: queries
gen:
go:
package: models
sql_package: "database/sql"
sql_driver: "github.com/go-sql-driver/mysql"
out: models
Playground URL
No response
What operating system are you using?
macOS
What database engines are you using?
MySQL
What type of code are you generating?
Go
Version
1.30.0
What happened?
When sqlc generates Golang code for a MySQL query with DATEDIFF() comparison in it:
resulting datetype for arguments
min_days_to_date_from/max_days_to_date_fromistime.Time, even though DATEDIFF itself outputs an integerThe generated type of MinDaysToDateFrom should be int32, not time.Time
Relevant log output
Database schema
SQL queries
Configuration
Playground URL
No response
What operating system are you using?
macOS
What database engines are you using?
MySQL
What type of code are you generating?
Go