fmt: add support for comments inside sql db { ... } blocks (fix #22601) (#22602)

This commit is contained in:
Felipe Pena 2024-10-21 06:08:04 -03:00 committed by GitHub
parent 9579c1f68b
commit cf03ecd0de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 38 additions and 0 deletions

View file

@ -1824,6 +1824,8 @@ fn (t Tree) sql_stmt_line(node ast.SqlStmtLine) &Node {
obj.add_terse('updated_columns', t.array_node_string(node.updated_columns))
obj.add_terse('update_exprs', t.array_node_expr(node.update_exprs))
obj.add('pos', t.pos(node.pos))
obj.add('pre_comments', t.array_node_comment(node.pre_comments))
obj.add('end_comments', t.array_node_comment(node.end_comments))
sub_struct_map := new_object()
for key, val in node.sub_structs {

View file

@ -2082,6 +2082,8 @@ pub mut:
sub_structs map[int]SqlStmtLine
where_expr Expr
update_exprs []Expr // for `update`
pre_comments []Comment
end_comments []Comment
}
pub struct SqlExpr {

View file

@ -1612,7 +1612,9 @@ pub fn (mut f Fmt) sql_stmt(node ast.SqlStmt) {
f.writeln(' {')
for line in node.lines {
f.comments(line.pre_comments, level: .indent)
f.sql_stmt_line(line)
f.comments(line.end_comments, level: .indent)
}
f.write('}')
f.or_expr(node.or_expr)

View file

@ -0,0 +1,22 @@
import db.sqlite
fn main() {
dblite := sqlite.connect(':memory:')!
sql dblite {
// some comment
insert address into Address
// some comment2
}!
sql dblite {
// some comment
drop table Address
// some comment2
}!
sql dblite {
// some comment
create table Address
// some comment2
}!
}

View file

@ -199,6 +199,7 @@ fn (mut p Parser) parse_sql_or_block() ast.OrExpr {
}
fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine {
pre_comments := p.eat_comments()
mut n := p.check_name() // insert
pos := p.tok.pos()
mut kind := ast.SqlStmtKind.insert
@ -215,6 +216,7 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine {
}
typ := p.parse_type()
typ_pos := p.tok.pos()
end_comments := p.eat_comments()
return ast.SqlStmtLine{
kind: kind
pos: pos.extend(p.prev_tok.pos())
@ -224,6 +226,8 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine {
}
scope: p.scope
is_generated: false
pre_comments: pre_comments
end_comments: end_comments
}
} else if n == 'drop' {
kind = .drop
@ -234,6 +238,7 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine {
}
typ := p.parse_type()
typ_pos := p.tok.pos()
end_comments := p.eat_comments()
return ast.SqlStmtLine{
kind: kind
pos: pos.extend(p.prev_tok.pos())
@ -243,6 +248,8 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine {
}
is_generated: false
scope: p.scope
pre_comments: pre_comments
end_comments: end_comments
}
}
mut inserted_var := ''
@ -313,6 +320,7 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine {
return ast.SqlStmtLine{}
}
}
end_comments := p.eat_comments()
return ast.SqlStmtLine{
table_expr: ast.TypeNode{
typ: table_type
@ -326,6 +334,8 @@ fn (mut p Parser) parse_sql_stmt_line() ast.SqlStmtLine {
where_expr: where_expr
is_generated: false
scope: p.scope
pre_comments: pre_comments
end_comments: end_comments
}
}