Remove insertFields parameter

This commit is contained in:
Mubelotix
2025-07-21 16:29:38 +02:00
parent 381eddd1f8
commit 84990dc198
4 changed files with 5 additions and 101 deletions

View File

@ -423,7 +423,6 @@ InvalidRenderTemplateId , InvalidRequest , BAD_REQU
InvalidRenderTemplateInline , InvalidRequest , BAD_REQUEST ;
InvalidRenderInput , InvalidRequest , BAD_REQUEST ;
InvalidRenderInputDocumentId , InvalidRequest , BAD_REQUEST ;
InvalidRenderInputFields , InvalidRequest , BAD_REQUEST ;
InvalidRenderInputInline , InvalidRequest , BAD_REQUEST ;
RenderDocumentNotFound , InvalidRequest , NOT_FOUND ;
TemplateParsingError , InvalidRequest , BAD_REQUEST ;

View File

@ -8,9 +8,8 @@ use index_scheduler::IndexScheduler;
use liquid::ValueView;
use meilisearch_types::deserr::DeserrJsonError;
use meilisearch_types::error::deserr_codes::{
InvalidRenderInput, InvalidRenderInputDocumentId, InvalidRenderInputFields,
InvalidRenderInputInline, InvalidRenderTemplate, InvalidRenderTemplateId,
InvalidRenderTemplateInline,
InvalidRenderInput, InvalidRenderInputDocumentId, InvalidRenderInputInline,
InvalidRenderTemplate, InvalidRenderTemplateId, InvalidRenderTemplateInline,
};
use meilisearch_types::error::Code;
use meilisearch_types::error::ResponseError;
@ -180,11 +179,6 @@ enum RenderError {
BothInlineDocAndDocId,
TemplateParsing(json_template::Error),
TemplateRendering(json_template::Error),
FieldsUnavailable,
FieldsAlreadyPresent,
FieldsWithoutDocument,
CouldNotHandleInput,
}
@ -324,18 +318,6 @@ impl From<RenderError> for ResponseError {
format!("Error rendering template: {}", err.rendering_error("input")),
Code::TemplateRenderingError,
),
FieldsUnavailable => ResponseError::from_msg(
String::from("Fields are not available on fragments.\n Hint: Remove the `insertFields` parameter or set it to `false`."),
Code::InvalidRenderInputFields,
),
FieldsAlreadyPresent => ResponseError::from_msg(
String::from("Fields were provided in the inline input but `insertFields` is set to `true`.\n Hint: Remove the `insertFields` parameter or set it to `false`."),
Code::InvalidRenderInputFields,
),
FieldsWithoutDocument => ResponseError::from_msg(
String::from("Fields were requested but no document was provided.\n Hint: Provide a document ID or inline document."),
Code::InvalidRenderInputFields,
),
CouldNotHandleInput => ResponseError::from_msg(
String::from("Could not handle the input provided."),
Code::InvalidRenderInput,
@ -478,7 +460,6 @@ async fn render(index: Index, query: RenderQuery) -> Result<RenderResult, Render
(None, None) => return Err(MissingTemplate),
};
let fields_required = query.input.as_ref().and_then(|i| i.insert_fields);
let fields_already_present = query
.input
.as_ref()
@ -490,19 +471,8 @@ async fn render(index: Index, query: RenderQuery) -> Result<RenderResult, Render
.is_some_and(|i| i.inline.as_ref().is_some_and(|i| i.get("doc").is_some()));
let has_document_id = query.input.as_ref().is_some_and(|i| i.document_id.is_some());
let has_doc = has_inline_doc || has_document_id;
let insert_fields = match fields_required {
Some(insert_fields) => insert_fields,
None => fields_available && has_doc && fields_probably_used && !fields_already_present,
};
if insert_fields && !fields_available {
return Err(FieldsUnavailable);
}
if insert_fields && fields_already_present {
return Err(FieldsAlreadyPresent);
}
if insert_fields && !has_doc {
return Err(FieldsWithoutDocument);
}
let insert_fields =
fields_available && has_doc && fields_probably_used && !fields_already_present;
if has_inline_doc && has_document_id {
return Err(BothInlineDocAndDocId);
}
@ -561,8 +531,6 @@ pub struct RenderQueryTemplate {
pub struct RenderQueryInput {
#[deserr(default, error = DeserrJsonError<InvalidRenderInputDocumentId>)]
pub document_id: Option<String>,
#[deserr(default, error = DeserrJsonError<InvalidRenderInputFields>)]
pub insert_fields: Option<bool>,
#[deserr(default, error = DeserrJsonError<InvalidRenderInputInline>)]
pub inline: Option<BTreeMap<String, serde_json::Value>>,
}

View File

@ -15,8 +15,6 @@ pub struct RenderAggregator {
input_inline: bool,
input_id: bool,
input_omitted: bool,
fields_forced: bool,
fields_disabled: bool,
}
impl RenderAggregator {
@ -33,8 +31,6 @@ impl RenderAggregator {
ret.input_inline = input.as_ref().is_some_and(|i| i.inline.is_some());
ret.input_id = input.as_ref().is_some_and(|i| i.document_id.is_some());
ret.input_omitted = input.as_ref().is_none();
ret.fields_forced = input.as_ref().is_some_and(|i| i.insert_fields.is_some());
ret.fields_disabled = input.as_ref().is_some_and(|i| i.insert_fields.is_none());
ret
}
@ -58,8 +54,6 @@ impl Aggregate for RenderAggregator {
self.input_inline |= new.input_inline;
self.input_id |= new.input_id;
self.input_omitted |= new.input_omitted;
self.fields_forced |= new.fields_forced;
self.fields_disabled |= new.fields_disabled;
self
}
@ -73,8 +67,6 @@ impl Aggregate for RenderAggregator {
input_inline,
input_id,
input_omitted,
fields_forced,
fields_disabled,
} = *self;
json!({
@ -90,9 +82,7 @@ impl Aggregate for RenderAggregator {
"input": {
"inline": input_inline,
"id": input_id,
"omitted": input_omitted,
"fields_forced": fields_forced,
"fields_disabled": fields_disabled,
"omitted": input_omitted
},
})
}

View File

@ -501,59 +501,6 @@ async fn multiple_templates_or_docs() {
"#);
}
#[actix_rt::test]
async fn fields() {
let index = shared_index_for_fragments().await;
let (value, code) = index
.render(json! {{
"template": { "inline": "whatever" },
"input": { "insertFields": true }
}})
.await;
snapshot!(code, @"400 Bad Request");
snapshot!(value, @r#"
{
"message": "Fields were requested but no document was provided.\n Hint: Provide a document ID or inline document.",
"code": "invalid_render_input_fields",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_render_input_fields"
}
"#);
let (value, code) = index
.render(json! {{
"template": { "id": "embedders.rest.indexingFragments.basic" },
"input": { "documentId": "0", "insertFields": true }
}})
.await;
snapshot!(code, @"400 Bad Request");
snapshot!(value, @r#"
{
"message": "Fields are not available on fragments.\n Hint: Remove the `insertFields` parameter or set it to `false`.",
"code": "invalid_render_input_fields",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_render_input_fields"
}
"#);
let (value, code) = index
.render(json! {{
"template": { "inline": "whatever" },
"input": { "documentId": "0", "inline": { "fields": {} }, "insertFields": true }
}})
.await;
snapshot!(code, @"400 Bad Request");
snapshot!(value, @r#"
{
"message": "Fields were provided in the inline input but `insertFields` is set to `true`.\n Hint: Remove the `insertFields` parameter or set it to `false`.",
"code": "invalid_render_input_fields",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_render_input_fields"
}
"#);
}
#[actix_rt::test]
async fn document_not_found() {
let index = shared_index_for_fragments().await;