table revision number
This commit is contained in:
@@ -12,7 +12,7 @@ use axum_extra::extract::Form;
|
||||
use crate::{
|
||||
AppState,
|
||||
definitions::{
|
||||
table_structure::GetTableStructureRequest,
|
||||
table_structure::{GetTableImportDescriptorRequest, GetTableStructureRequest},
|
||||
tables_data::{
|
||||
AbortTableDataImportRequest, BeginTableDataImportRequest, CommitTableDataImportRequest,
|
||||
StageTableDataImportRequest, TableDataImportRow,
|
||||
@@ -52,6 +52,7 @@ const CHUNK_ROWS: usize = 1_000;
|
||||
/// a refusal on the next click instead of a value written somewhere else.
|
||||
struct Destination {
|
||||
table_name: String,
|
||||
table_revision: i64,
|
||||
columns: Vec<DestinationColumn>,
|
||||
types: HashMap<String, String>,
|
||||
}
|
||||
@@ -258,6 +259,7 @@ pub(crate) async fn import_csv(
|
||||
id: id.clone(),
|
||||
profile_name,
|
||||
table_name: destination.table_name.clone(),
|
||||
table_revision: destination.table_revision,
|
||||
rows: converted,
|
||||
}));
|
||||
|
||||
@@ -363,6 +365,7 @@ struct Running {
|
||||
id: String,
|
||||
profile_name: String,
|
||||
table_name: String,
|
||||
table_revision: i64,
|
||||
rows: Vec<TableDataImportRow>,
|
||||
}
|
||||
|
||||
@@ -390,6 +393,7 @@ async fn run_import(job: Running) {
|
||||
import_id: import_id.clone(),
|
||||
table_name: job.table_name.clone(),
|
||||
rows: chunk.to_vec(),
|
||||
expected_table_revision: job.table_revision,
|
||||
};
|
||||
let Ok(request) = authenticated_request(&job.headers, request) else {
|
||||
abort_import(&job, &import_id).await;
|
||||
@@ -522,11 +526,24 @@ async fn destination(
|
||||
));
|
||||
}
|
||||
|
||||
let descriptor_request = GetTableImportDescriptorRequest {
|
||||
profile_name: profile_name.clone(),
|
||||
table_name: table_name.clone(),
|
||||
};
|
||||
let mut structures = state.structures.clone();
|
||||
let descriptor = structures
|
||||
.get_table_import_descriptor(
|
||||
authenticated_request(headers, descriptor_request)
|
||||
.map_err(|_| Redirect::to("/login").into_response())?,
|
||||
)
|
||||
.await
|
||||
.map_err(|error| grpc_error(headers, &error))?
|
||||
.into_inner();
|
||||
|
||||
let request = GetTableStructureRequest {
|
||||
profile_name,
|
||||
table_names: vec![table_name.clone()],
|
||||
};
|
||||
let mut structures = state.structures.clone();
|
||||
let structure = structures
|
||||
.get_table_structure(
|
||||
authenticated_request(headers, request)
|
||||
@@ -552,6 +569,7 @@ async fn destination(
|
||||
}
|
||||
Ok(Destination {
|
||||
table_name,
|
||||
table_revision: descriptor.table_revision,
|
||||
types: column_types(&structure),
|
||||
columns,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user