@@ -233,15 +233,6 @@ fn convert_nodes(
233233 } ) ;
234234 }
235235
236- // Finally, the type's defining table also includes the location.
237- main_table. columns . push ( dbscheme:: Column {
238- unique : false ,
239- db_type : dbscheme:: DbColumnType :: Int ,
240- name : "loc" ,
241- ql_type : ql:: Type :: At ( "location" ) ,
242- ql_type_is_ref : true ,
243- } ) ;
244-
245236 entries. push ( dbscheme:: Entry :: Table ( main_table) ) ;
246237 }
247238 node_types:: EntryKind :: Token { .. } => { }
@@ -251,18 +242,24 @@ fn convert_nodes(
251242 ( entries, ast_node_members, token_kinds)
252243}
253244
254- /// Creates a dbscheme table entry representing the parent relation for AST nodes.
245+ /// Creates a dbscheme table specifying the parent node and location for each
246+ /// AST node.
255247///
256248/// # Arguments
257- /// - `name` - the name of both the table to create and the node parent type.
249+ /// - `name` - the name of the table to create.
250+ /// - `parent_name` - the name of the parent type.
258251/// - `ast_node_name` - the name of the node child type.
259- fn create_ast_node_parent_table < ' a > ( name : & ' a str , ast_node_name : & ' a str ) -> dbscheme:: Table < ' a > {
252+ fn create_ast_node_info_table < ' a > (
253+ name : & ' a str ,
254+ parent_name : & ' a str ,
255+ ast_node_name : & ' a str ,
256+ ) -> dbscheme:: Table < ' a > {
260257 dbscheme:: Table {
261258 name,
262259 columns : vec ! [
263260 dbscheme:: Column {
264261 db_type: dbscheme:: DbColumnType :: Int ,
265- name: "child " ,
262+ name: "node " ,
266263 unique: false ,
267264 ql_type: ql:: Type :: At ( ast_node_name) ,
268265 ql_type_is_ref: true ,
@@ -271,7 +268,7 @@ fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> db
271268 db_type: dbscheme:: DbColumnType :: Int ,
272269 name: "parent" ,
273270 unique: false ,
274- ql_type: ql:: Type :: At ( name ) ,
271+ ql_type: ql:: Type :: At ( parent_name ) ,
275272 ql_type_is_ref: true ,
276273 } ,
277274 dbscheme:: Column {
@@ -281,6 +278,13 @@ fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> db
281278 ql_type: ql:: Type :: Int ,
282279 ql_type_is_ref: true ,
283280 } ,
281+ dbscheme:: Column {
282+ unique: false ,
283+ db_type: dbscheme:: DbColumnType :: Int ,
284+ name: "loc" ,
285+ ql_type: ql:: Type :: At ( "location" ) ,
286+ ql_type_is_ref: true ,
287+ } ,
284288 ] ,
285289 keysets : Some ( vec ! [ "parent" , "parent_index" ] ) ,
286290 }
@@ -312,13 +316,6 @@ fn create_tokeninfo<'a>(name: &'a str, type_name: &'a str) -> dbscheme::Table<'a
312316 ql_type: ql:: Type :: String ,
313317 ql_type_is_ref: true ,
314318 } ,
315- dbscheme:: Column {
316- unique: false ,
317- db_type: dbscheme:: DbColumnType :: Int ,
318- name: "loc" ,
319- ql_type: ql:: Type :: At ( "location" ) ,
320- ql_type_is_ref: true ,
321- } ,
322319 ] ,
323320 }
324321}
@@ -619,6 +616,7 @@ fn main() -> std::io::Result<()> {
619616 for language in languages {
620617 let prefix = node_types:: to_snake_case ( & language. name ) ;
621618 let ast_node_name = format ! ( "{}_ast_node" , & prefix) ;
619+ let node_info_table_name = format ! ( "{}_ast_node_info" , & prefix) ;
622620 let ast_node_parent_name = format ! ( "{}_ast_node_parent" , & prefix) ;
623621 let token_name = format ! ( "{}_token" , & prefix) ;
624622 let tokeninfo_name = format ! ( "{}_tokeninfo" , & prefix) ;
@@ -641,7 +639,8 @@ fn main() -> std::io::Result<()> {
641639 name : & ast_node_parent_name,
642640 members : [ & ast_node_name, "file" ] . iter ( ) . cloned ( ) . collect ( ) ,
643641 } ) ,
644- dbscheme:: Entry :: Table ( create_ast_node_parent_table (
642+ dbscheme:: Entry :: Table ( create_ast_node_info_table (
643+ & node_info_table_name,
645644 & ast_node_parent_name,
646645 & ast_node_name,
647646 ) ) ,
@@ -651,7 +650,7 @@ fn main() -> std::io::Result<()> {
651650 let mut body = vec ! [
652651 ql:: TopLevel :: Class ( ql_gen:: create_ast_node_class(
653652 & ast_node_name,
654- & ast_node_parent_name ,
653+ & node_info_table_name ,
655654 ) ) ,
656655 ql:: TopLevel :: Class ( ql_gen:: create_token_class( & token_name, & tokeninfo_name) ) ,
657656 ql:: TopLevel :: Class ( ql_gen:: create_reserved_word_class( & reserved_word_name) ) ,
0 commit comments