Add limit to bulk record creations.

This commit is contained in:
Sebastian Jeltsch
2025-02-07 21:00:12 +01:00
parent c2fc8b1223
commit 912dd4d359
2 changed files with 32 additions and 30 deletions

View File

@@ -35,26 +35,30 @@ fn extract_record(value: serde_json::Value) -> Result<JsonRow, RecordError> {
#[inline]
fn extract_records(value: serde_json::Value) -> Result<Vec<JsonRow>, RecordError> {
return Ok(match value {
serde_json::Value::Object(record) => vec![record],
return match value {
serde_json::Value::Object(record) => Ok(vec![record]),
serde_json::Value::Array(records) => {
let mut record_rows = Vec::<JsonRow>::with_capacity(records.len());
for record in records {
let serde_json::Value::Object(record) = record else {
return Err(RecordError::BadRequest(
"Expected record or array of records",
));
};
record_rows.push(record);
if records.len() > 1024 {
return Err(RecordError::BadRequest("Bulk creation exceeds limit: 1024"));
}
record_rows
records
.into_iter()
.map(|record| {
let serde_json::Value::Object(record) = record else {
return Err(RecordError::BadRequest(
"Expected record or array of records",
));
};
Ok(record)
})
.collect()
}
_ => {
return Err(RecordError::BadRequest(
"Expected record or array of records",
));
}
});
_ => Err(RecordError::BadRequest(
"Expected record or array of records",
)),
};
}
#[inline]

View File

@@ -243,20 +243,18 @@ impl Params {
metadata: &TableMetadata,
multipart_files: Vec<FileUploadInput>,
) -> Result<(), ParamsError> {
let mut files: Vec<(String, FileUpload, Vec<u8>)> = vec![];
for file in multipart_files {
let (col_name, metadata, content) = file.consume()?;
match col_name {
None => {
return Err(ParamsError::Column(
let files: Vec<(String, FileUpload, Vec<u8>)> = multipart_files
.into_iter()
.map(|file| {
let (col_name, metadata, content) = file.consume()?;
return match col_name {
Some(col_name) => Ok((col_name, metadata, content)),
None => Err(ParamsError::Column(
"Multipart form upload missing name property",
));
}
Some(col_name) => {
files.push((col_name, metadata, content));
}
}
}
)),
};
})
.collect::<Result<_, ParamsError>>()?;
// Validate and organize by type;
let mut uploaded_files = HashSet::<&'static str>::new();