uqa_sql/schema/
open_columns.rs1use super::{RowSchema, SchemaBuildMetadata};
10
11impl RowSchema {
12 pub fn with_open_columns(input: &Self, qualifier: Option<&str>) -> Self {
14 let mut open_qualifiers = input.index.cold.open_qualifiers.clone();
15 open_qualifiers.insert(qualifier.map(Box::<str>::from));
16 Self::from_typed_parts_with_aliases_and_exact_precedence(
17 input.columns().to_vec(),
18 input.identities().to_vec(),
19 input.column_types().to_vec(),
20 input.index.slots.to_vec(),
21 input.physical_width(),
22 SchemaBuildMetadata {
23 collations: input.index.cold.collations.clone(),
24 record_fields: input.index.cold.record_fields.clone(),
25 aliases: input.index.aliases.clone(),
26 alias_types: input.index.cold.aliases.clone(),
27 internal: input.index.executor_attributes.clone(),
28 internal_types: input.index.cold.executor_attribute_types.clone(),
29 score_sources: input.index.cold.score_sources.clone(),
30 wildcard_hidden: input.index.cold.wildcard_hidden.clone(),
31 binding_only: input.index.cold.binding_only.clone(),
32 row_types: input.index.cold.row_types.clone(),
33 open_qualifiers,
34 extra_ambiguous_unqualified: input.index.ambiguous_unqualified.clone(),
35 extra_ambiguous_qualified: input.index.ambiguous_qualified.clone(),
36 ..SchemaBuildMetadata::default()
37 },
38 )
39 }
40
41 #[must_use]
43 pub fn columns_are_open(&self, qualifier: Option<&str>) -> bool {
44 qualifier.map_or_else(
45 || !self.index.cold.open_qualifiers.is_empty(),
46 |qualifier| {
47 self.index
48 .cold
49 .open_qualifiers
50 .iter()
51 .any(|candidate| candidate.as_deref() == Some(qualifier))
52 },
53 )
54 }
55}