Tree-sitter extractor: extract shared dbscheme fragments into 'prefix.dbscheme'

This commit is contained in:
Arthur Baars
2023-04-20 20:00:20 +02:00
parent 2911a6cc30
commit 9f83dd5c7a
10 changed files with 226 additions and 346 deletions

View File

@@ -1,15 +1,26 @@
{
"files": [
"javascript/ql/lib/semmlecode.javascript.dbscheme",
"ruby/ql/lib/ruby.dbscheme",
"ql/ql/src/ql.dbscheme"
],
"fragments": [
"/*- External data -*/",
"/*- Files and folders -*/",
"/*- Diagnostic messages -*/",
"/*- Diagnostic messages: severity -*/",
"/*- Source location prefix -*/",
"/*- Lines of code -*/",
"/*- Configuration files with key value pairs -*/",
"/*- YAML -*/",
"/*- XML Files -*/",
"/*- JavaScript-specific part -*/"
"/*- JavaScript-specific part -*/",
"/*- Ruby dbscheme -*/",
"/*- Erb dbscheme -*/",
"/*- QL dbscheme -*/",
"/*- Dbscheme dbscheme -*/",
"/*- Yaml dbscheme -*/",
"/*- Blame dbscheme -*/",
"/*- JSON dbscheme -*/"
]
}

View File

@@ -8,7 +8,7 @@ import files.FileSystem
*
* For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
class Location extends @location {
class Location extends @location_default {
/** Gets the file for this location. */
File getFile() { locations_default(this, result, _, _, _, _) }

View File

@@ -1,15 +1,22 @@
// CodeQL database schema for QL
// Automatically generated from the tree-sitter grammar; do not edit
@location = @location_default
/*- Files and folders -*/
/**
* The location of an element.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `file`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
locations_default(
unique int id: @location_default,
int file: @file ref,
int start_line: int ref,
int start_column: int ref,
int end_line: int ref,
int end_column: int ref
int beginLine: int ref,
int beginColumn: int ref,
int endLine: int ref,
int endColumn: int ref
);
files(
@@ -29,9 +36,14 @@ containerparent(
unique int child: @container ref
);
sourceLocationPrefix(
string prefix: string ref
);
/*- Source location prefix -*/
/**
* The source location of the snapshot.
*/
sourceLocationPrefix(string prefix : string ref);
/*- Diagnostic messages -*/
diagnostics(
unique int id: @diagnostic,
@@ -42,14 +54,15 @@ diagnostics(
int location: @location_default ref
);
/*- Diagnostic messages: severity -*/
case @diagnostic.severity of
10 = @diagnostic_debug
| 20 = @diagnostic_info
| 30 = @diagnostic_warning
| 40 = @diagnostic_error
;
/*- QL dbscheme -*/
@ql_add_expr_left_type = @ql_add_expr | @ql_aggregate | @ql_call_or_unqual_agg_expr | @ql_comp_term | @ql_conjunction | @ql_disjunction | @ql_expr_annotation | @ql_if_term | @ql_implication | @ql_in_expr | @ql_instance_of | @ql_literal | @ql_mul_expr | @ql_negation | @ql_par_expr | @ql_prefix_cast | @ql_qualified_expr | @ql_quantified | @ql_range | @ql_set_literal | @ql_special_call | @ql_super_ref | @ql_unary_expr | @ql_variable
@ql_add_expr_right_type = @ql_add_expr | @ql_aggregate | @ql_call_or_unqual_agg_expr | @ql_comp_term | @ql_conjunction | @ql_disjunction | @ql_expr_annotation | @ql_if_term | @ql_implication | @ql_in_expr | @ql_instance_of | @ql_literal | @ql_mul_expr | @ql_negation | @ql_par_expr | @ql_prefix_cast | @ql_qualified_expr | @ql_quantified | @ql_range | @ql_set_literal | @ql_special_call | @ql_super_ref | @ql_unary_expr | @ql_variable
@@ -926,9 +939,10 @@ ql_ast_node_info(
unique int node: @ql_ast_node ref,
int parent: @ql_ast_node_parent ref,
int parent_index: int ref,
int loc: @location ref
int loc: @location_default ref
);
/*- Dbscheme dbscheme -*/
dbscheme_annotation_args_annotation(
unique int dbscheme_annotation: @dbscheme_annotation ref,
unique int args_annotation: @dbscheme_args_annotation ref
@@ -1112,9 +1126,10 @@ dbscheme_ast_node_info(
unique int node: @dbscheme_ast_node ref,
int parent: @dbscheme_ast_node_parent ref,
int parent_index: int ref,
int loc: @location ref
int loc: @location_default ref
);
/*- Yaml dbscheme -*/
yaml_comment_def(
unique int id: @yaml_comment,
int child: @yaml_token_value ref
@@ -1184,9 +1199,10 @@ yaml_ast_node_info(
unique int node: @yaml_ast_node ref,
int parent: @yaml_ast_node_parent ref,
int parent_index: int ref,
int loc: @location ref
int loc: @location_default ref
);
/*- Blame dbscheme -*/
#keyset[blame_blame_entry, index]
blame_blame_entry_line(
int blame_blame_entry: @blame_blame_entry ref,
@@ -1246,9 +1262,10 @@ blame_ast_node_info(
unique int node: @blame_ast_node ref,
int parent: @blame_ast_node_parent ref,
int parent_index: int ref,
int loc: @location ref
int loc: @location_default ref
);
/*- JSON dbscheme -*/
#keyset[json_array, index]
json_array_child(
int json_array: @json_array ref,
@@ -1327,6 +1344,6 @@ json_ast_node_info(
unique int node: @json_ast_node ref,
int parent: @json_ast_node_parent ref,
int parent_index: int ref,
int loc: @location ref
int loc: @location_default ref
);

View File

@@ -1060,19 +1060,19 @@
<v>8553</v>
</e>
<e>
<k>start_line</k>
<k>startLine</k>
<v>74697</v>
</e>
<e>
<k>start_column</k>
<k>startColumn</k>
<v>2236</v>
</e>
<e>
<k>end_line</k>
<k>endLine</k>
<v>74730</v>
</e>
<e>
<k>end_column</k>
<k>endColumn</k>
<v>2415</v>
</e>
</columnsizes>
@@ -1095,7 +1095,7 @@
</dep>
<dep>
<src>id</src>
<trg>start_line</trg>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -1111,7 +1111,7 @@
</dep>
<dep>
<src>id</src>
<trg>start_column</trg>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -1127,7 +1127,7 @@
</dep>
<dep>
<src>id</src>
<trg>end_line</trg>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -1143,7 +1143,7 @@
</dep>
<dep>
<src>id</src>
<trg>end_column</trg>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -1235,7 +1235,7 @@
</dep>
<dep>
<src>file</src>
<trg>start_line</trg>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -1316,7 +1316,7 @@
</dep>
<dep>
<src>file</src>
<trg>start_column</trg>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -1392,7 +1392,7 @@
</dep>
<dep>
<src>file</src>
<trg>end_line</trg>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -1473,7 +1473,7 @@
</dep>
<dep>
<src>file</src>
<trg>end_column</trg>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -1548,7 +1548,7 @@
</val>
</dep>
<dep>
<src>start_line</src>
<src>startLine</src>
<trg>id</trg>
<val>
<hist>
@@ -1624,7 +1624,7 @@
</val>
</dep>
<dep>
<src>start_line</src>
<src>startLine</src>
<trg>file</trg>
<val>
<hist>
@@ -1675,8 +1675,8 @@
</val>
</dep>
<dep>
<src>start_line</src>
<trg>start_column</trg>
<src>startLine</src>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -1751,8 +1751,8 @@
</val>
</dep>
<dep>
<src>start_line</src>
<trg>end_line</trg>
<src>startLine</src>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -1797,8 +1797,8 @@
</val>
</dep>
<dep>
<src>start_line</src>
<trg>end_column</trg>
<src>startLine</src>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -1873,7 +1873,7 @@
</val>
</dep>
<dep>
<src>start_column</src>
<src>startColumn</src>
<trg>id</trg>
<val>
<hist>
@@ -1949,7 +1949,7 @@
</val>
</dep>
<dep>
<src>start_column</src>
<src>startColumn</src>
<trg>file</trg>
<val>
<hist>
@@ -2025,8 +2025,8 @@
</val>
</dep>
<dep>
<src>start_column</src>
<trg>start_line</trg>
<src>startColumn</src>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -2101,8 +2101,8 @@
</val>
</dep>
<dep>
<src>start_column</src>
<trg>end_line</trg>
<src>startColumn</src>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -2177,8 +2177,8 @@
</val>
</dep>
<dep>
<src>start_column</src>
<trg>end_column</trg>
<src>startColumn</src>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -2248,7 +2248,7 @@
</val>
</dep>
<dep>
<src>end_line</src>
<src>endLine</src>
<trg>id</trg>
<val>
<hist>
@@ -2324,7 +2324,7 @@
</val>
</dep>
<dep>
<src>end_line</src>
<src>endLine</src>
<trg>file</trg>
<val>
<hist>
@@ -2375,8 +2375,8 @@
</val>
</dep>
<dep>
<src>end_line</src>
<trg>start_line</trg>
<src>endLine</src>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -2421,8 +2421,8 @@
</val>
</dep>
<dep>
<src>end_line</src>
<trg>start_column</trg>
<src>endLine</src>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -2497,8 +2497,8 @@
</val>
</dep>
<dep>
<src>end_line</src>
<trg>end_column</trg>
<src>endLine</src>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -2573,7 +2573,7 @@
</val>
</dep>
<dep>
<src>end_column</src>
<src>endColumn</src>
<trg>id</trg>
<val>
<hist>
@@ -2649,7 +2649,7 @@
</val>
</dep>
<dep>
<src>end_column</src>
<src>endColumn</src>
<trg>file</trg>
<val>
<hist>
@@ -2725,8 +2725,8 @@
</val>
</dep>
<dep>
<src>end_column</src>
<trg>start_line</trg>
<src>endColumn</src>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -2801,8 +2801,8 @@
</val>
</dep>
<dep>
<src>end_column</src>
<trg>start_column</trg>
<src>endColumn</src>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -2872,8 +2872,8 @@
</val>
</dep>
<dep>
<src>end_column</src>
<trg>end_line</trg>
<src>endColumn</src>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>

View File

@@ -4,7 +4,7 @@ predicate anotherPredicate(int i) { none() }
predicate yetAnotherPredicate(int i, int y) { none() }
predicate dbTypePredicate(@location l) { none() }
predicate dbTypePredicate(@location_default l) { none() }
string predicateWithResult(int i) { none() }
@@ -12,7 +12,7 @@ class SmallInt extends int {
SmallInt() { this = [0 .. 10] }
}
class Location extends @location {
class Location extends @location_default {
string toString() { result = "" }
}

View File

@@ -17,7 +17,7 @@ private string locationToString(Location loc) {
*
* For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
class Location extends @location {
class Location extends @location_default {
/** Gets the file for this location. */
File getFile() { locations_default(this, result, _, _, _, _) }

View File

@@ -1,15 +1,22 @@
// CodeQL database schema for Ruby
// Automatically generated from the tree-sitter grammar; do not edit
@location = @location_default
/*- Files and folders -*/
/**
* The location of an element.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `file`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
locations_default(
unique int id: @location_default,
int file: @file ref,
int start_line: int ref,
int start_column: int ref,
int end_line: int ref,
int end_column: int ref
int beginLine: int ref,
int beginColumn: int ref,
int endLine: int ref,
int endColumn: int ref
);
files(
@@ -29,9 +36,14 @@ containerparent(
unique int child: @container ref
);
sourceLocationPrefix(
string prefix: string ref
);
/*- Source location prefix -*/
/**
* The source location of the snapshot.
*/
sourceLocationPrefix(string prefix : string ref);
/*- Diagnostic messages -*/
diagnostics(
unique int id: @diagnostic,
@@ -42,14 +54,15 @@ diagnostics(
int location: @location_default ref
);
/*- Diagnostic messages: severity -*/
case @diagnostic.severity of
10 = @diagnostic_debug
| 20 = @diagnostic_info
| 30 = @diagnostic_warning
| 40 = @diagnostic_error
;
/*- Ruby dbscheme -*/
@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary
@ruby_underscore_call_operator = @ruby_reserved_word
@@ -1375,9 +1388,10 @@ ruby_ast_node_info(
unique int node: @ruby_ast_node ref,
int parent: @ruby_ast_node_parent ref,
int parent_index: int ref,
int loc: @location ref
int loc: @location_default ref
);
/*- Erb dbscheme -*/
erb_comment_directive_child(
unique int erb_comment_directive: @erb_comment_directive ref,
unique int child: @erb_token_comment ref
@@ -1450,6 +1464,6 @@ erb_ast_node_info(
unique int node: @erb_ast_node ref,
int parent: @erb_ast_node_parent ref,
int parent_index: int ref,
int loc: @location ref
int loc: @location_default ref
);

View File

@@ -2636,19 +2636,19 @@
<v>17807</v>
</e>
<e>
<k>start_line</k>
<k>startLine</k>
<v>30866</v>
</e>
<e>
<k>start_column</k>
<k>startColumn</k>
<v>5140</v>
</e>
<e>
<k>end_line</k>
<k>endLine</k>
<v>30866</v>
</e>
<e>
<k>end_column</k>
<k>endColumn</k>
<v>5244</v>
</e>
</columnsizes>
@@ -2671,7 +2671,7 @@
</dep>
<dep>
<src>id</src>
<trg>start_line</trg>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -2687,7 +2687,7 @@
</dep>
<dep>
<src>id</src>
<trg>start_column</trg>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -2703,7 +2703,7 @@
</dep>
<dep>
<src>id</src>
<trg>end_line</trg>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -2719,7 +2719,7 @@
</dep>
<dep>
<src>id</src>
<trg>end_column</trg>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -2811,7 +2811,7 @@
</dep>
<dep>
<src>file</src>
<trg>start_line</trg>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -2887,7 +2887,7 @@
</dep>
<dep>
<src>file</src>
<trg>start_column</trg>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -2963,7 +2963,7 @@
</dep>
<dep>
<src>file</src>
<trg>end_line</trg>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -3039,7 +3039,7 @@
</dep>
<dep>
<src>file</src>
<trg>end_column</trg>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -3114,7 +3114,7 @@
</val>
</dep>
<dep>
<src>start_line</src>
<src>startLine</src>
<trg>id</trg>
<val>
<hist>
@@ -3195,7 +3195,7 @@
</val>
</dep>
<dep>
<src>start_line</src>
<src>startLine</src>
<trg>file</trg>
<val>
<hist>
@@ -3251,8 +3251,8 @@
</val>
</dep>
<dep>
<src>start_line</src>
<trg>start_column</trg>
<src>startLine</src>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -3332,8 +3332,8 @@
</val>
</dep>
<dep>
<src>start_line</src>
<trg>end_line</trg>
<src>startLine</src>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -3383,8 +3383,8 @@
</val>
</dep>
<dep>
<src>start_line</src>
<trg>end_column</trg>
<src>startLine</src>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -3464,7 +3464,7 @@
</val>
</dep>
<dep>
<src>start_column</src>
<src>startColumn</src>
<trg>id</trg>
<val>
<hist>
@@ -3545,7 +3545,7 @@
</val>
</dep>
<dep>
<src>start_column</src>
<src>startColumn</src>
<trg>file</trg>
<val>
<hist>
@@ -3606,8 +3606,8 @@
</val>
</dep>
<dep>
<src>start_column</src>
<trg>start_line</trg>
<src>startColumn</src>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -3677,8 +3677,8 @@
</val>
</dep>
<dep>
<src>start_column</src>
<trg>end_line</trg>
<src>startColumn</src>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -3748,8 +3748,8 @@
</val>
</dep>
<dep>
<src>start_column</src>
<trg>end_column</trg>
<src>startColumn</src>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -3809,7 +3809,7 @@
</val>
</dep>
<dep>
<src>end_line</src>
<src>endLine</src>
<trg>id</trg>
<val>
<hist>
@@ -3890,7 +3890,7 @@
</val>
</dep>
<dep>
<src>end_line</src>
<src>endLine</src>
<trg>file</trg>
<val>
<hist>
@@ -3946,8 +3946,8 @@
</val>
</dep>
<dep>
<src>end_line</src>
<trg>start_line</trg>
<src>endLine</src>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -3997,8 +3997,8 @@
</val>
</dep>
<dep>
<src>end_line</src>
<trg>start_column</trg>
<src>endLine</src>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -4073,8 +4073,8 @@
</val>
</dep>
<dep>
<src>end_line</src>
<trg>end_column</trg>
<src>endLine</src>
<trg>endColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -4154,7 +4154,7 @@
</val>
</dep>
<dep>
<src>end_column</src>
<src>endColumn</src>
<trg>id</trg>
<val>
<hist>
@@ -4235,7 +4235,7 @@
</val>
</dep>
<dep>
<src>end_column</src>
<src>endColumn</src>
<trg>file</trg>
<val>
<hist>
@@ -4296,8 +4296,8 @@
</val>
</dep>
<dep>
<src>end_column</src>
<trg>start_line</trg>
<src>endColumn</src>
<trg>startLine</trg>
<val>
<hist>
<budget>12</budget>
@@ -4367,8 +4367,8 @@
</val>
</dep>
<dep>
<src>end_column</src>
<trg>start_column</trg>
<src>endColumn</src>
<trg>startColumn</trg>
<val>
<hist>
<budget>12</budget>
@@ -4438,8 +4438,8 @@
</val>
</dep>
<dep>
<src>end_column</src>
<trg>end_line</trg>
<src>endColumn</src>
<trg>endLine</trg>
<val>
<hist>
<budget>12</budget>

View File

@@ -30,21 +30,7 @@ pub fn generate(
languages[0].name
)?;
let (diagnostics_case, diagnostics_table) = create_diagnostics();
dbscheme::write(
&mut dbscheme_writer,
&[
create_location_union(),
create_locations_default_table(),
create_files_table(),
create_folders_table(),
create_container_union(),
create_containerparent_table(),
create_source_location_prefix_table(),
dbscheme::Entry::Table(diagnostics_table),
dbscheme::Entry::Case(diagnostics_case),
],
)?;
write!(dbscheme_writer, include_str!("prefix.dbscheme"))?;
let mut ql_writer = LineWriter::new(File::create(ql_library_path)?);
write!(
@@ -74,6 +60,7 @@ pub fn generate(
let nodes = node_types::read_node_types_str(&prefix, language.node_types)?;
let (dbscheme_entries, mut ast_node_members, token_kinds) = convert_nodes(&nodes);
ast_node_members.insert(&token_name);
write!(&mut dbscheme_writer, "/*- {} dbscheme -*/\n", language.name)?;
dbscheme::write(&mut dbscheme_writer, &dbscheme_entries)?;
let token_case = create_token_case(&token_name, token_kinds);
dbscheme::write(
@@ -388,7 +375,7 @@ fn create_ast_node_info_table<'a>(
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "loc",
ql_type: ql::Type::At("location"),
ql_type: ql::Type::At("location_default"),
ql_type_is_ref: true,
},
],
@@ -437,213 +424,3 @@ fn create_token_case<'a>(name: &'a str, token_kinds: Map<&'a str, usize>) -> dbs
branches,
}
}
fn create_location_union<'a>() -> dbscheme::Entry<'a> {
dbscheme::Entry::Union(dbscheme::Union {
name: "location",
members: vec!["location_default"].into_iter().collect(),
})
}
fn create_files_table<'a>() -> dbscheme::Entry<'a> {
dbscheme::Entry::Table(dbscheme::Table {
name: "files",
keysets: None,
columns: vec![
dbscheme::Column {
unique: true,
db_type: dbscheme::DbColumnType::Int,
name: "id",
ql_type: ql::Type::At("file"),
ql_type_is_ref: false,
},
dbscheme::Column {
db_type: dbscheme::DbColumnType::String,
name: "name",
unique: false,
ql_type: ql::Type::String,
ql_type_is_ref: true,
},
],
})
}
fn create_folders_table<'a>() -> dbscheme::Entry<'a> {
dbscheme::Entry::Table(dbscheme::Table {
name: "folders",
keysets: None,
columns: vec![
dbscheme::Column {
unique: true,
db_type: dbscheme::DbColumnType::Int,
name: "id",
ql_type: ql::Type::At("folder"),
ql_type_is_ref: false,
},
dbscheme::Column {
db_type: dbscheme::DbColumnType::String,
name: "name",
unique: false,
ql_type: ql::Type::String,
ql_type_is_ref: true,
},
],
})
}
fn create_locations_default_table<'a>() -> dbscheme::Entry<'a> {
dbscheme::Entry::Table(dbscheme::Table {
name: "locations_default",
keysets: None,
columns: vec![
dbscheme::Column {
unique: true,
db_type: dbscheme::DbColumnType::Int,
name: "id",
ql_type: ql::Type::At("location_default"),
ql_type_is_ref: false,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "file",
ql_type: ql::Type::At("file"),
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "start_line",
ql_type: ql::Type::Int,
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "start_column",
ql_type: ql::Type::Int,
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "end_line",
ql_type: ql::Type::Int,
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "end_column",
ql_type: ql::Type::Int,
ql_type_is_ref: true,
},
],
})
}
fn create_container_union<'a>() -> dbscheme::Entry<'a> {
dbscheme::Entry::Union(dbscheme::Union {
name: "container",
members: vec!["folder", "file"].into_iter().collect(),
})
}
fn create_containerparent_table<'a>() -> dbscheme::Entry<'a> {
dbscheme::Entry::Table(dbscheme::Table {
name: "containerparent",
columns: vec![
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "parent",
ql_type: ql::Type::At("container"),
ql_type_is_ref: true,
},
dbscheme::Column {
unique: true,
db_type: dbscheme::DbColumnType::Int,
name: "child",
ql_type: ql::Type::At("container"),
ql_type_is_ref: true,
},
],
keysets: None,
})
}
fn create_source_location_prefix_table<'a>() -> dbscheme::Entry<'a> {
dbscheme::Entry::Table(dbscheme::Table {
name: "sourceLocationPrefix",
keysets: None,
columns: vec![dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::String,
name: "prefix",
ql_type: ql::Type::String,
ql_type_is_ref: true,
}],
})
}
fn create_diagnostics<'a>() -> (dbscheme::Case<'a>, dbscheme::Table<'a>) {
let table = dbscheme::Table {
name: "diagnostics",
keysets: None,
columns: vec![
dbscheme::Column {
unique: true,
db_type: dbscheme::DbColumnType::Int,
name: "id",
ql_type: ql::Type::At("diagnostic"),
ql_type_is_ref: false,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "severity",
ql_type: ql::Type::Int,
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::String,
name: "error_tag",
ql_type: ql::Type::String,
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::String,
name: "error_message",
ql_type: ql::Type::String,
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::String,
name: "full_error_message",
ql_type: ql::Type::String,
ql_type_is_ref: true,
},
dbscheme::Column {
unique: false,
db_type: dbscheme::DbColumnType::Int,
name: "location",
ql_type: ql::Type::At("location_default"),
ql_type_is_ref: true,
},
],
};
let severities: Vec<(usize, &str)> = vec![
(10, "diagnostic_debug"),
(20, "diagnostic_info"),
(30, "diagnostic_warning"),
(40, "diagnostic_error"),
];
let case = dbscheme::Case {
name: "diagnostic",
column: "severity",
branches: severities,
};
(case, table)
}

View File

@@ -0,0 +1,61 @@
/*- Files and folders -*/
/**
* The location of an element.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `file`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
locations_default(
unique int id: @location_default,
int file: @file ref,
int beginLine: int ref,
int beginColumn: int ref,
int endLine: int ref,
int endColumn: int ref
);
files(
unique int id: @file,
string name: string ref
);
folders(
unique int id: @folder,
string name: string ref
);
@container = @file | @folder
containerparent(
int parent: @container ref,
unique int child: @container ref
);
/*- Source location prefix -*/
/**
* The source location of the snapshot.
*/
sourceLocationPrefix(string prefix : string ref);
/*- Diagnostic messages -*/
diagnostics(
unique int id: @diagnostic,
int severity: int ref,
string error_tag: string ref,
string error_message: string ref,
string full_error_message: string ref,
int location: @location_default ref
);
/*- Diagnostic messages: severity -*/
case @diagnostic.severity of
10 = @diagnostic_debug
| 20 = @diagnostic_info
| 30 = @diagnostic_warning
| 40 = @diagnostic_error
;