@@ -107,26 +107,59 @@ func (c *cc) convertAttach_stmtContext(n *parser.Attach_stmtContext) ast.Node {
107
107
}
108
108
109
109
func (c * cc ) convertCreate_table_stmtContext (n * parser.Create_table_stmtContext ) ast.Node {
110
+ tokenStream := n .GetParser ().GetTokenStream ().(* antlr.CommonTokenStream )
111
+
110
112
stmt := & ast.CreateTableStmt {
111
113
Name : parseTableName (n ),
112
114
IfNotExists : n .EXISTS_ () != nil ,
115
+ Comment : comment (tokenStream , n , false ),
113
116
}
117
+
114
118
for _ , idef := range n .AllColumn_def () {
115
119
if def , ok := idef .(* parser.Column_defContext ); ok {
116
120
typeName := "any"
117
121
if def .Type_name () != nil {
118
122
typeName = def .Type_name ().GetText ()
119
123
}
124
+
120
125
stmt .Cols = append (stmt .Cols , & ast.ColumnDef {
121
126
Colname : identifier (def .Column_name ().GetText ()),
122
127
IsNotNull : hasNotNullConstraint (def .AllColumn_constraint ()),
123
128
TypeName : & ast.TypeName {Name : typeName },
129
+ Comment : comment (tokenStream , def , true ),
124
130
})
131
+
125
132
}
126
133
}
127
134
return stmt
128
135
}
129
136
137
+ // comment returns the comment associated with the given context. The parameter right indicates whether the comment is
138
+ // to the right or to the left of the context.
139
+ func comment (tokenStream * antlr.CommonTokenStream , ctx antlr.ParserRuleContext , right bool ) string {
140
+ var (
141
+ hiddenTokens []antlr.Token
142
+ comment string
143
+ )
144
+
145
+ if right {
146
+ hiddenTokens = tokenStream .GetHiddenTokensToRight (ctx .GetStop ().GetTokenIndex ()+ 1 , antlr .TokenHiddenChannel )
147
+ } else {
148
+ hiddenTokens = tokenStream .GetHiddenTokensToLeft (ctx .GetStart ().GetTokenIndex (), antlr .TokenHiddenChannel )
149
+ }
150
+
151
+ for _ , token := range hiddenTokens {
152
+ // Filter for single-line comments
153
+ if token .GetTokenType () == parser .SQLiteLexerSINGLE_LINE_COMMENT {
154
+ // Remove "--" and leading/trailing whitespaces
155
+ comment = strings .TrimSpace (strings .TrimPrefix (token .GetText (), "--" ))
156
+ return comment
157
+ }
158
+ }
159
+
160
+ return ""
161
+ }
162
+
130
163
func (c * cc ) convertCreate_virtual_table_stmtContext (n * parser.Create_virtual_table_stmtContext ) ast.Node {
131
164
switch moduleName := n .Module_name ().GetText (); moduleName {
132
165
case "fts5" :
0 commit comments