@@ -232,15 +232,6 @@ fn convert_nodes(
232232 } ) ;
233233 }
234234
235- // Finally, the type's defining table also includes the location.
236- main_table. columns . push ( dbscheme:: Column {
237- unique : false ,
238- db_type : dbscheme:: DbColumnType :: Int ,
239- name : "loc" ,
240- ql_type : ql:: Type :: At ( "location" ) ,
241- ql_type_is_ref : true ,
242- } ) ;
243-
244235 entries. push ( dbscheme:: Entry :: Table ( main_table) ) ;
245236 }
246237 node_types:: EntryKind :: Token { .. } => { }
@@ -250,18 +241,24 @@ fn convert_nodes(
250241 ( entries, ast_node_members, token_kinds)
251242}
252243
253- /// Creates a dbscheme table entry representing the parent relation for AST nodes.
244+ /// Creates a dbscheme table specifying the parent node and location for each
245+ /// AST node.
254246///
255247/// # Arguments
256- /// - `name` - the name of both the table to create and the node parent type.
248+ /// - `name` - the name of the table to create.
249+ /// - `parent_name` - the name of the parent type.
257250/// - `ast_node_name` - the name of the node child type.
258- fn create_ast_node_parent_table < ' a > ( name : & ' a str , ast_node_name : & ' a str ) -> dbscheme:: Table < ' a > {
251+ fn create_ast_node_info_table < ' a > (
252+ name : & ' a str ,
253+ parent_name : & ' a str ,
254+ ast_node_name : & ' a str ,
255+ ) -> dbscheme:: Table < ' a > {
259256 dbscheme:: Table {
260257 name,
261258 columns : vec ! [
262259 dbscheme:: Column {
263260 db_type: dbscheme:: DbColumnType :: Int ,
264- name: "child " ,
261+ name: "node " ,
265262 unique: false ,
266263 ql_type: ql:: Type :: At ( ast_node_name) ,
267264 ql_type_is_ref: true ,
@@ -270,7 +267,7 @@ fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> db
270267 db_type: dbscheme:: DbColumnType :: Int ,
271268 name: "parent" ,
272269 unique: false ,
273- ql_type: ql:: Type :: At ( name ) ,
270+ ql_type: ql:: Type :: At ( parent_name ) ,
274271 ql_type_is_ref: true ,
275272 } ,
276273 dbscheme:: Column {
@@ -280,6 +277,13 @@ fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> db
280277 ql_type: ql:: Type :: Int ,
281278 ql_type_is_ref: true ,
282279 } ,
280+ dbscheme:: Column {
281+ unique: false ,
282+ db_type: dbscheme:: DbColumnType :: Int ,
283+ name: "loc" ,
284+ ql_type: ql:: Type :: At ( "location" ) ,
285+ ql_type_is_ref: true ,
286+ } ,
283287 ] ,
284288 keysets : Some ( vec ! [ "parent" , "parent_index" ] ) ,
285289 }
@@ -311,13 +315,6 @@ fn create_tokeninfo<'a>(name: &'a str, type_name: &'a str) -> dbscheme::Table<'a
311315 ql_type: ql:: Type :: String ,
312316 ql_type_is_ref: true ,
313317 } ,
314- dbscheme:: Column {
315- unique: false ,
316- db_type: dbscheme:: DbColumnType :: Int ,
317- name: "loc" ,
318- ql_type: ql:: Type :: At ( "location" ) ,
319- ql_type_is_ref: true ,
320- } ,
321318 ] ,
322319 }
323320}
@@ -605,15 +602,16 @@ fn main() -> std::io::Result<()> {
605602 ) ?;
606603 ql:: write (
607604 & mut ql_writer,
608- & [
609- ql :: TopLevel :: Import ( "codeql.files.FileSystem" ) ,
610- ql :: TopLevel :: Import ( "codeql.Locations ") ,
611- ] ,
605+ & [ ql :: TopLevel :: Import ( ql :: Import {
606+ module : "codeql.Locations" ,
607+ alias : Some ( "L ") ,
608+ } ) ] ,
612609 ) ?;
613610
614611 for language in languages {
615612 let prefix = node_types:: to_snake_case ( & language. name ) ;
616613 let ast_node_name = format ! ( "{}_ast_node" , & prefix) ;
614+ let node_info_table_name = format ! ( "{}_ast_node_info" , & prefix) ;
617615 let ast_node_parent_name = format ! ( "{}_ast_node_parent" , & prefix) ;
618616 let token_name = format ! ( "{}_token" , & prefix) ;
619617 let tokeninfo_name = format ! ( "{}_tokeninfo" , & prefix) ;
@@ -636,7 +634,8 @@ fn main() -> std::io::Result<()> {
636634 name : & ast_node_parent_name,
637635 members : [ & ast_node_name, "file" ] . iter ( ) . cloned ( ) . collect ( ) ,
638636 } ) ,
639- dbscheme:: Entry :: Table ( create_ast_node_parent_table (
637+ dbscheme:: Entry :: Table ( create_ast_node_info_table (
638+ & node_info_table_name,
640639 & ast_node_parent_name,
641640 & ast_node_name,
642641 ) ) ,
@@ -646,7 +645,7 @@ fn main() -> std::io::Result<()> {
646645 let mut body = vec ! [
647646 ql:: TopLevel :: Class ( ql_gen:: create_ast_node_class(
648647 & ast_node_name,
649- & ast_node_parent_name ,
648+ & node_info_table_name ,
650649 ) ) ,
651650 ql:: TopLevel :: Class ( ql_gen:: create_token_class( & token_name, & tokeninfo_name) ) ,
652651 ql:: TopLevel :: Class ( ql_gen:: create_reserved_word_class( & reserved_word_name) ) ,
0 commit comments