Skip to content

Commit 08dd947

Browse files
authored
QL: Merge pull request #35 from github/downstream-latest-generator
2 parents 22e4606 + 75a9593 commit 08dd947

6 files changed

Lines changed: 114 additions & 25 deletions

File tree

extractor/src/extractor.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ impl Visitor<'_> {
560560
Storage::Table {
561561
name: table_name,
562562
has_index,
563+
column_name: _,
563564
} => {
564565
for (index, child_value) in child_values.iter().enumerate() {
565566
if !*has_index && index > 0 {

generator/src/main.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ fn make_field_type<'a>(
6666
fn add_field_for_table_storage<'a>(
6767
field: &'a node_types::Field,
6868
table_name: &'a str,
69+
column_name: &'a str,
6970
has_index: bool,
7071
nodes: &'a node_types::NodeTypeMap,
7172
) -> (dbscheme::Table<'a>, Option<dbscheme::Entry<'a>>) {
@@ -90,10 +91,7 @@ fn add_field_for_table_storage<'a>(
9091
let field_column = dbscheme::Column {
9192
unique: true,
9293
db_type: dbscheme::DbColumnType::Int,
93-
name: match &field.name {
94-
None => "child",
95-
Some(name) => name,
96-
},
94+
name: column_name,
9795
ql_type: field_ql_type,
9896
ql_type_is_ref: true,
9997
};
@@ -205,9 +203,18 @@ fn convert_nodes<'a>(nodes: &'a node_types::NodeTypeMap) -> Vec<dbscheme::Entry<
205203
}
206204
main_table.columns.push(field_column);
207205
}
208-
node_types::Storage::Table { name, has_index } => {
209-
let (field_table, field_type_entry) =
210-
add_field_for_table_storage(field, name, *has_index, nodes);
206+
node_types::Storage::Table {
207+
name,
208+
has_index,
209+
column_name,
210+
} => {
211+
let (field_table, field_type_entry) = add_field_for_table_storage(
212+
field,
213+
name,
214+
column_name,
215+
*has_index,
216+
nodes,
217+
);
211218
if let Some(field_type_entry) = field_type_entry {
212219
entries.push(field_type_entry);
213220
}

generator/src/ql_gen.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ fn create_field_getters<'a>(
398398
node_types::Storage::Table {
399399
name: field_table_name,
400400
has_index,
401+
column_name: _,
401402
} => (
402403
create_get_field_expr_for_table_storage(
403404
get_value_result_var_name,
@@ -450,12 +451,21 @@ fn create_field_getters<'a>(
450451
(get_value, Some(get_value_any_index))
451452
}
452453
};
454+
let qldoc = match &field.name {
455+
Some(name) => {
456+
format!("Gets the node corresponding to the field `{}`.", name)
457+
}
458+
None => {
459+
if formal_parameters.len() == 0 {
460+
"Gets the child of this node.".to_owned()
461+
} else {
462+
"Gets the `i`th child of this node.".to_owned()
463+
}
464+
}
465+
};
453466
(
454467
ql::Predicate {
455-
qldoc: field
456-
.name
457-
.as_ref()
458-
.map(|name| format!("Gets the node corresponding to the field `{}`.", name)),
468+
qldoc: Some(qldoc),
459469
name: &field.getter_name,
460470
overridden: false,
461471
return_type,

node-types/src/lib.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,15 @@ fn name_for_field_or_child(name: &Option<String>) -> String {
7070
pub enum Storage {
7171
/// the field is stored as a column in the parent table
7272
Column { name: String },
73-
/// the field is stored in a link table, and may or may not have an
74-
/// associated index column
75-
Table { name: String, has_index: bool },
73+
/// the field is stored in a link table
74+
Table {
75+
/// the name of the table
76+
name: String,
77+
/// the name of the column for the field in the dbscheme
78+
column_name: String,
79+
/// does it have an associated index column?
80+
has_index: bool,
81+
},
7682
}
7783

7884
pub fn read_node_types(node_types_path: &Path) -> std::io::Result<NodeTypeMap> {
@@ -206,12 +212,11 @@ fn add_field(
206212
token_kinds: &Set<TypeName>,
207213
) {
208214
let parent_flattened_name = node_type_name(&parent_type_name.kind, parent_type_name.named);
215+
let column_name = escape_name(&name_for_field_or_child(&field_name));
209216
let storage = if !field_info.multiple && field_info.required {
210217
// This field must appear exactly once, so we add it as
211218
// a column to the main table for the node type.
212-
Storage::Column {
213-
name: escape_name(&name_for_field_or_child(&field_name)),
214-
}
219+
Storage::Column { name: column_name }
215220
} else {
216221
// Put the field in an auxiliary table.
217222
let has_index = field_info.multiple;
@@ -223,6 +228,7 @@ fn add_field(
223228
Storage::Table {
224229
has_index,
225230
name: field_table_name,
231+
column_name,
226232
}
227233
};
228234
let converted_types = convert_types(&field_info.types);

0 commit comments

Comments
 (0)