@@ -232,15 +232,6 @@ fn convert_nodes(
232
232
} ) ;
233
233
}
234
234
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
-
244
235
entries. push ( dbscheme:: Entry :: Table ( main_table) ) ;
245
236
}
246
237
node_types:: EntryKind :: Token { .. } => { }
@@ -250,18 +241,24 @@ fn convert_nodes(
250
241
( entries, ast_node_members, token_kinds)
251
242
}
252
243
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.
254
246
///
255
247
/// # 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.
257
250
/// - `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 > {
259
256
dbscheme:: Table {
260
257
name,
261
258
columns : vec ! [
262
259
dbscheme:: Column {
263
260
db_type: dbscheme:: DbColumnType :: Int ,
264
- name: "child " ,
261
+ name: "node " ,
265
262
unique: false ,
266
263
ql_type: ql:: Type :: At ( ast_node_name) ,
267
264
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
270
267
db_type: dbscheme:: DbColumnType :: Int ,
271
268
name: "parent" ,
272
269
unique: false ,
273
- ql_type: ql:: Type :: At ( name ) ,
270
+ ql_type: ql:: Type :: At ( parent_name ) ,
274
271
ql_type_is_ref: true ,
275
272
} ,
276
273
dbscheme:: Column {
@@ -280,6 +277,13 @@ fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> db
280
277
ql_type: ql:: Type :: Int ,
281
278
ql_type_is_ref: true ,
282
279
} ,
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
+ } ,
283
287
] ,
284
288
keysets : Some ( vec ! [ "parent" , "parent_index" ] ) ,
285
289
}
@@ -311,13 +315,6 @@ fn create_tokeninfo<'a>(name: &'a str, type_name: &'a str) -> dbscheme::Table<'a
311
315
ql_type: ql:: Type :: String ,
312
316
ql_type_is_ref: true ,
313
317
} ,
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
- } ,
321
318
] ,
322
319
}
323
320
}
@@ -605,15 +602,16 @@ fn main() -> std::io::Result<()> {
605
602
) ?;
606
603
ql:: write (
607
604
& 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
+ } ) ] ,
612
609
) ?;
613
610
614
611
for language in languages {
615
612
let prefix = node_types:: to_snake_case ( & language. name ) ;
616
613
let ast_node_name = format ! ( "{}_ast_node" , & prefix) ;
614
+ let node_info_table_name = format ! ( "{}_ast_node_info" , & prefix) ;
617
615
let ast_node_parent_name = format ! ( "{}_ast_node_parent" , & prefix) ;
618
616
let token_name = format ! ( "{}_token" , & prefix) ;
619
617
let tokeninfo_name = format ! ( "{}_tokeninfo" , & prefix) ;
@@ -636,7 +634,8 @@ fn main() -> std::io::Result<()> {
636
634
name : & ast_node_parent_name,
637
635
members : [ & ast_node_name, "file" ] . iter ( ) . cloned ( ) . collect ( ) ,
638
636
} ) ,
639
- dbscheme:: Entry :: Table ( create_ast_node_parent_table (
637
+ dbscheme:: Entry :: Table ( create_ast_node_info_table (
638
+ & node_info_table_name,
640
639
& ast_node_parent_name,
641
640
& ast_node_name,
642
641
) ) ,
@@ -646,7 +645,7 @@ fn main() -> std::io::Result<()> {
646
645
let mut body = vec ! [
647
646
ql:: TopLevel :: Class ( ql_gen:: create_ast_node_class(
648
647
& ast_node_name,
649
- & ast_node_parent_name ,
648
+ & node_info_table_name ,
650
649
) ) ,
651
650
ql:: TopLevel :: Class ( ql_gen:: create_token_class( & token_name, & tokeninfo_name) ) ,
652
651
ql:: TopLevel :: Class ( ql_gen:: create_reserved_word_class( & reserved_word_name) ) ,
0 commit comments