From f26d7e9d0258550eacc1933a251e9193b71ff061 Mon Sep 17 00:00:00 2001 From: Huliiiii <134658521+Huliiiiii@users.noreply.github.com> Date: Sat, 11 Oct 2025 11:32:38 +0800 Subject: [PATCH] Fix --- src/backend/table_builder.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/backend/table_builder.rs b/src/backend/table_builder.rs index 9baebfe70..3f266ead1 100644 --- a/src/backend/table_builder.rs +++ b/src/backend/table_builder.rs @@ -112,8 +112,25 @@ pub trait TableBuilder: } if let Some(default) = default { - write!(sql, " DEFAULT ").unwrap(); - QueryBuilder::prepare_expr(self, default, sql); + sql.write_str(" DEFAULT ").unwrap(); + // Wrap expressions in parentheses. + // Most of database backends support this syntax. + // + // In MySQL 5.7, the DEFAULT clause doesn't accept any expressions, + // so it will be invalid SQL in any case. + // + // References: + // https://sqlite.org/lang_createtable.html + match default { + Expr::Value(_) | Expr::Constant(_) | Expr::Keyword(_) => { + self.prepare_expr(default, sql) + } + _ => { + sql.write_str("(").unwrap(); + self.prepare_expr(default, sql); + sql.write_str(")").unwrap() + } + } } if let Some(generated) = generated {