Panic on duplicate field names (#1647)

fixes #1601
This commit is contained in:
PSeitz
2022-10-26 15:17:33 +08:00
committed by GitHub
parent a5e59ab598
commit 0c2bd36fe3
3 changed files with 20 additions and 46 deletions

View File

@@ -819,7 +819,7 @@ pub mod tests {
fn test_indexedfield_not_in_documents() -> crate::Result<()> {
let mut schema_builder = Schema::builder();
let text_field = schema_builder.add_text_field("text", TEXT);
let absent_field = schema_builder.add_text_field("text", TEXT);
let absent_field = schema_builder.add_text_field("absent_text", TEXT);
let schema = schema_builder.build();
let index = Index::create_in_ram(schema);
let mut index_writer = index.writer_for_tests()?;
@@ -1001,7 +1001,7 @@ pub mod tests {
let fast_field_signed = schema_builder.add_i64_field("signed", FAST);
let fast_field_float = schema_builder.add_f64_field("float", FAST);
let text_field = schema_builder.add_text_field("text", TEXT);
let stored_int_field = schema_builder.add_u64_field("text", STORED);
let stored_int_field = schema_builder.add_u64_field("stored_int", STORED);
let schema = schema_builder.build();
let index = Index::create_in_ram(schema);

View File

@@ -115,7 +115,7 @@ mod tests {
pub fn test_term_set_query() -> crate::Result<()> {
let mut schema_builder = Schema::builder();
let field1 = schema_builder.add_text_field("field1", TEXT);
let field2 = schema_builder.add_text_field("field1", TEXT);
let field2 = schema_builder.add_text_field("field2", TEXT);
let schema = schema_builder.build();
let index = Index::create_in_ram(schema);
{

View File

@@ -46,13 +46,9 @@ impl SchemaBuilder {
/// Adds a new u64 field.
/// Returns the associated field handle
///
/// # Caution
/// # Panics
///
/// Appending two fields with the same name
/// will result in the shadowing of the first
/// by the second one.
/// The first field will get a field id
/// but only the second one will be indexed
/// Panics when field already exists.
pub fn add_u64_field<T: Into<NumericOptions>>(
&mut self,
field_name_str: &str,
@@ -66,13 +62,9 @@ impl SchemaBuilder {
/// Adds a new i64 field.
/// Returns the associated field handle
///
/// # Caution
/// # Panics
///
/// Appending two fields with the same name
/// will result in the shadowing of the first
/// by the second one.
/// The first field will get a field id
/// but only the second one will be indexed
/// Panics when field already exists.
pub fn add_i64_field<T: Into<NumericOptions>>(
&mut self,
field_name_str: &str,
@@ -86,13 +78,9 @@ impl SchemaBuilder {
/// Adds a new f64 field.
/// Returns the associated field handle
///
/// # Caution
/// # Panics
///
/// Appending two fields with the same name
/// will result in the shadowing of the first
/// by the second one.
/// The first field will get a field id
/// but only the second one will be indexed
/// Panics when field already exists.
pub fn add_f64_field<T: Into<NumericOptions>>(
&mut self,
field_name_str: &str,
@@ -106,13 +94,9 @@ impl SchemaBuilder {
/// Adds a new bool field.
/// Returns the associated field handle
///
/// # Caution
/// # Panics
///
/// Appending two fields with the same name
/// will result in the shadowing of the first
/// by the second one.
/// The first field will get a field id
/// but only the second one will be indexed
/// Panics when field already exists.
pub fn add_bool_field<T: Into<NumericOptions>>(
&mut self,
field_name_str: &str,
@@ -128,13 +112,9 @@ impl SchemaBuilder {
/// Internally, Tantivy simply stores dates as i64 UTC timestamps,
/// while the user supplies DateTime values for convenience.
///
/// # Caution
/// # Panics
///
/// Appending two fields with the same name
/// will result in the shadowing of the first
/// by the second one.
/// The first field will get a field id
/// but only the second one will be indexed
/// Panics when field already exists.
pub fn add_date_field<T: Into<DateOptions>>(
&mut self,
field_name_str: &str,
@@ -148,13 +128,9 @@ impl SchemaBuilder {
/// Adds a ip field.
/// Returns the associated field handle.
///
/// # Caution
/// # Panics
///
/// Appending two fields with the same name
/// will result in the shadowing of the first
/// by the second one.
/// The first field will get a field id
/// but only the second one will be indexed
/// Panics when field already exists.
pub fn add_ip_addr_field<T: Into<IpAddrOptions>>(
&mut self,
field_name_str: &str,
@@ -168,13 +144,9 @@ impl SchemaBuilder {
/// Adds a new text field.
/// Returns the associated field handle
///
/// # Caution
/// # Panics
///
/// Appending two fields with the same name
/// will result in the shadowing of the first
/// by the second one.
/// The first field will get a field id
/// but only the second one will be indexed
/// Panics when field already exists.
pub fn add_text_field<T: Into<TextOptions>>(
&mut self,
field_name_str: &str,
@@ -228,8 +200,10 @@ impl SchemaBuilder {
pub fn add_field(&mut self, field_entry: FieldEntry) -> Field {
let field = Field::from_field_id(self.fields.len() as u32);
let field_name = field_entry.name().to_string();
if let Some(_previous_value) = self.fields_map.insert(field_name, field) {
panic!("Field already exists in schema {}", field_entry.name());
};
self.fields.push(field_entry);
self.fields_map.insert(field_name, field);
field
}