diff --git a/internal/dbtest/query_test.go b/internal/dbtest/query_test.go index c8dca014..24cfd919 100644 --- a/internal/dbtest/query_test.go +++ b/internal/dbtest/query_test.go @@ -982,6 +982,10 @@ func TestQuery(t *testing.T) { // Set default VARCHAR length to 10 return db.NewCreateTable().Model((*Model)(nil)).Varchar(10) }, + func(db *bun.DB) schema.QueryAppender { + // Non-positive VARCHAR length is illegal + return db.NewCreateTable().Model((*Model)(nil)).Varchar(-20) + }, } timeRE := regexp.MustCompile(`'2\d{3}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d+)?(\+\d{2}:\d{2})?'`) diff --git a/internal/dbtest/testdata/snapshots/TestQuery-mariadb-157 b/internal/dbtest/testdata/snapshots/TestQuery-mariadb-157 new file mode 100644 index 00000000..7860dc22 --- /dev/null +++ b/internal/dbtest/testdata/snapshots/TestQuery-mariadb-157 @@ -0,0 +1 @@ +bun: illegal VARCHAR length: -20 diff --git a/internal/dbtest/testdata/snapshots/TestQuery-mssql2019-157 b/internal/dbtest/testdata/snapshots/TestQuery-mssql2019-157 new file mode 100644 index 00000000..7860dc22 --- /dev/null +++ b/internal/dbtest/testdata/snapshots/TestQuery-mssql2019-157 @@ -0,0 +1 @@ +bun: illegal VARCHAR length: -20 diff --git a/internal/dbtest/testdata/snapshots/TestQuery-mysql5-157 b/internal/dbtest/testdata/snapshots/TestQuery-mysql5-157 new file mode 100644 index 00000000..7860dc22 --- /dev/null +++ b/internal/dbtest/testdata/snapshots/TestQuery-mysql5-157 @@ -0,0 +1 @@ +bun: illegal VARCHAR length: -20 diff --git a/internal/dbtest/testdata/snapshots/TestQuery-mysql8-157 b/internal/dbtest/testdata/snapshots/TestQuery-mysql8-157 new file mode 100644 index 00000000..7860dc22 --- /dev/null +++ b/internal/dbtest/testdata/snapshots/TestQuery-mysql8-157 @@ -0,0 +1 @@ +bun: illegal VARCHAR length: -20 diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pg-157 b/internal/dbtest/testdata/snapshots/TestQuery-pg-157 new file mode 100644 index 00000000..7860dc22 --- /dev/null +++ b/internal/dbtest/testdata/snapshots/TestQuery-pg-157 @@ -0,0 +1 @@ +bun: illegal VARCHAR length: -20 diff --git a/internal/dbtest/testdata/snapshots/TestQuery-pgx-157 b/internal/dbtest/testdata/snapshots/TestQuery-pgx-157 new file mode 100644 index 00000000..7860dc22 --- /dev/null +++ b/internal/dbtest/testdata/snapshots/TestQuery-pgx-157 @@ -0,0 +1 @@ +bun: illegal VARCHAR length: -20 diff --git a/internal/dbtest/testdata/snapshots/TestQuery-sqlite-157 b/internal/dbtest/testdata/snapshots/TestQuery-sqlite-157 new file mode 100644 index 00000000..7860dc22 --- /dev/null +++ b/internal/dbtest/testdata/snapshots/TestQuery-sqlite-157 @@ -0,0 +1 @@ +bun: illegal VARCHAR length: -20 diff --git a/query_table_create.go b/query_table_create.go index 22b4e6de..0fe3013c 100644 --- a/query_table_create.go +++ b/query_table_create.go @@ -3,6 +3,7 @@ package bun import ( "context" "database/sql" + "fmt" "sort" "strconv" "strings" @@ -18,12 +19,12 @@ type CreateTableQuery struct { temp bool ifNotExists bool - + // varchar changes the default length for VARCHAR columns. // Because some dialects require that length is always specified for VARCHAR type, // we will use the exact user-defined type if length is set explicitly, as in `bun:",type:varchar(5)"`, // but assume the new default length when it's omitted, e.g. `bun:",type:varchar"`. - varchar int + varchar int fks []schema.QueryWithArgs partitionBy schema.QueryWithArgs @@ -91,6 +92,9 @@ func (q *CreateTableQuery) IfNotExists() *CreateTableQuery { // Varchar sets default length for VARCHAR columns. func (q *CreateTableQuery) Varchar(n int) *CreateTableQuery { + if n <= 0 { + q.setErr(fmt.Errorf("bun: illegal VARCHAR length: %d", n)) + } q.varchar = n return q }