diff --git a/internal/endtoend/testdata/mysql_reference_manual/README.md b/internal/endtoend/testdata/mysql_reference_manual/README.md new file mode 100644 index 0000000000..95a4cbfc24 --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/README.md @@ -0,0 +1,2 @@ +All queries and examples in this directory come from the [MySQL Reference +Manual](https://dev.mysql.com/doc/refman/8.0/en/). diff --git a/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/date_add.sql b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/date_add.sql new file mode 100644 index 0000000000..299f20d80d --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/date_add.sql @@ -0,0 +1,24 @@ +-- https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-add + +-- name: DateAddOneDay :one +SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY); + +-- name: DateAddOneSecond :one +SELECT DATE_ADD('2020-12-31 23:59:59', + INTERVAL 1 SECOND); + +-- name: DateAddTimestampOneSecond :one +SELECT DATE_ADD('2018-12-31 23:59:59', + INTERVAL 1 DAY); + +-- name: DateAddMinuteSecond :one +SELECT DATE_ADD('2100-12-31 23:59:59', + INTERVAL '1:1' MINUTE_SECOND); + +-- name: DateAddDayHour :one +SELECT DATE_ADD('1900-01-01 00:00:00', + INTERVAL '-1 10' DAY_HOUR); + +-- name: DateAddSecondMicrosecond :one +SELECT DATE_ADD('1992-12-31 23:59:59.000002', + INTERVAL '1.999999' SECOND_MICROSECOND); diff --git a/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/date_sub.sql b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/date_sub.sql new file mode 100644 index 0000000000..0e1af3f38b --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/date_sub.sql @@ -0,0 +1,9 @@ +-- name: DateSubOneYear :one +SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR); + +-- name: DateSubDaySecond :one +SELECT DATE_SUB('2025-01-01 00:00:00', + INTERVAL '1 1:1:1' DAY_SECOND); + +-- name: DateSub31Days :one +SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); diff --git a/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/date_add.sql.go b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/date_add.sql.go new file mode 100644 index 0000000000..051c7808b5 --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/date_add.sql.go @@ -0,0 +1,82 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: date_add.sql + +package date_and_time_functions + +import ( + "context" + "time" +) + +const dateAddDayHour = `-- name: DateAddDayHour :one +SELECT DATE_ADD('1900-01-01 00:00:00', + INTERVAL '-1 10' DAY_HOUR) +` + +func (q *Queries) DateAddDayHour(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateAddDayHour) + var date_add time.Time + err := row.Scan(&date_add) + return date_add, err +} + +const dateAddMinuteSecond = `-- name: DateAddMinuteSecond :one +SELECT DATE_ADD('2100-12-31 23:59:59', + INTERVAL '1:1' MINUTE_SECOND) +` + +func (q *Queries) DateAddMinuteSecond(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateAddMinuteSecond) + var date_add time.Time + err := row.Scan(&date_add) + return date_add, err +} + +const dateAddOneDay = `-- name: DateAddOneDay :one + +SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY) +` + +// https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-add +func (q *Queries) DateAddOneDay(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateAddOneDay) + var date_add time.Time + err := row.Scan(&date_add) + return date_add, err +} + +const dateAddOneSecond = `-- name: DateAddOneSecond :one +SELECT DATE_ADD('2020-12-31 23:59:59', + INTERVAL 1 SECOND) +` + +func (q *Queries) DateAddOneSecond(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateAddOneSecond) + var date_add time.Time + err := row.Scan(&date_add) + return date_add, err +} + +const dateAddSecondMicrosecond = `-- name: DateAddSecondMicrosecond :one +SELECT DATE_ADD('1992-12-31 23:59:59.000002', + INTERVAL '1.999999' SECOND_MICROSECOND) +` + +func (q *Queries) DateAddSecondMicrosecond(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateAddSecondMicrosecond) + var date_add time.Time + err := row.Scan(&date_add) + return date_add, err +} + +const dateAddTimestampOneSecond = `-- name: DateAddTimestampOneSecond :one +SELECT DATE_ADD('2018-12-31 23:59:59', + INTERVAL 1 DAY) +` + +func (q *Queries) DateAddTimestampOneSecond(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateAddTimestampOneSecond) + var date_add time.Time + err := row.Scan(&date_add) + return date_add, err +} diff --git a/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/date_sub.sql.go b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/date_sub.sql.go new file mode 100644 index 0000000000..00c8381932 --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/date_sub.sql.go @@ -0,0 +1,43 @@ +// Code generated by sqlc. DO NOT EDIT. +// source: date_sub.sql + +package date_and_time_functions + +import ( + "context" + "time" +) + +const dateSub31Days = `-- name: DateSub31Days :one +SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY) +` + +func (q *Queries) DateSub31Days(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateSub31Days) + var date_sub time.Time + err := row.Scan(&date_sub) + return date_sub, err +} + +const dateSubDaySecond = `-- name: DateSubDaySecond :one +SELECT DATE_SUB('2025-01-01 00:00:00', + INTERVAL '1 1:1:1' DAY_SECOND) +` + +func (q *Queries) DateSubDaySecond(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateSubDaySecond) + var date_sub time.Time + err := row.Scan(&date_sub) + return date_sub, err +} + +const dateSubOneYear = `-- name: DateSubOneYear :one +SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR) +` + +func (q *Queries) DateSubOneYear(ctx context.Context) (time.Time, error) { + row := q.db.QueryRowContext(ctx, dateSubOneYear) + var date_sub time.Time + err := row.Scan(&date_sub) + return date_sub, err +} diff --git a/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/db.go b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/db.go new file mode 100644 index 0000000000..71d119f9fc --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/db.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. + +package date_and_time_functions + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *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_reference_manual/date_and_time_functions/go/models.go b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/models.go new file mode 100644 index 0000000000..97643eb3a2 --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/date_and_time_functions/go/models.go @@ -0,0 +1,5 @@ +// Code generated by sqlc. DO NOT EDIT. + +package date_and_time_functions + +import () diff --git a/internal/endtoend/testdata/mysql_reference_manual/sqlc.json b/internal/endtoend/testdata/mysql_reference_manual/sqlc.json new file mode 100644 index 0000000000..31e209605f --- /dev/null +++ b/internal/endtoend/testdata/mysql_reference_manual/sqlc.json @@ -0,0 +1,12 @@ +{ + "version": "1", + "packages": [ + { + "name": "date_and_time_functions", + "path": "date_and_time_functions/go", + "schema": "date_and_time_functions", + "queries": "date_and_time_functions", + "engine": "mysql" + } + ] +} diff --git a/internal/engine/dolphin/stdlib.go b/internal/engine/dolphin/stdlib.go index 1add891874..9744fea435 100644 --- a/internal/engine/dolphin/stdlib.go +++ b/internal/engine/dolphin/stdlib.go @@ -630,6 +630,9 @@ func defaultSchema(name string) *catalog.Schema { { Type: &ast.TypeName{Name: "any"}, }, + { + Type: &ast.TypeName{Name: "any"}, + }, }, ReturnType: &ast.TypeName{Name: "date"}, }, @@ -666,6 +669,9 @@ func defaultSchema(name string) *catalog.Schema { { Type: &ast.TypeName{Name: "any"}, }, + { + Type: &ast.TypeName{Name: "any"}, + }, }, ReturnType: &ast.TypeName{Name: "date"}, },