put table definition2 - name change

This commit is contained in:
Filipriec
2026-08-24 09:58:49 +02:00
parent 5d6f53c96e
commit 77e409dce6
11 changed files with 51 additions and 7 deletions

View File

@@ -279,7 +279,9 @@ pub(crate) async fn load_page(
|| tables
.iter()
.any(|table| table.name == inputs.selection.table && table.global);
inputs.columns.table_name = inputs.selection.table.clone();
if inputs.columns.table_name.is_empty() {
inputs.columns.table_name = inputs.selection.table.clone();
}
Ok(TableDefinitionPageState {
nav: crate::ui::Nav::from_authorization(headers, "admin", &authorization),

View File

@@ -27,7 +27,7 @@ use crate::{
PutTableDefinitionRequest,
},
{i18n::Locale, tr},
schema::{ColumnForm, proto_columns},
schema::{ColumnForm, proto_columns, validate_table_name},
services::{authenticated_request, reject_cross_site},
};
@@ -189,6 +189,7 @@ pub(crate) async fn update_columns(
let mut inputs = PageInputs::for_selection(selection);
inputs.columns = form.to_draft(catalog, false);
inputs.columns.table_name = form.table_name_input.trim().to_string();
let index = form.index.unwrap_or(0);
let locale = Locale::from_headers(&headers);
@@ -239,6 +240,7 @@ pub(crate) async fn add_columns(
let mut inputs = PageInputs::for_selection(selection);
inputs.columns = form.to_draft(catalog.clone(), false);
inputs.columns.table_name = form.table_name_input.trim().to_string();
inputs.remove_column_ids = form.remove_column_ids.clone();
if !inputs.selection.has_table() {
@@ -255,7 +257,21 @@ pub(crate) async fn add_columns(
)
.await;
}
if inputs.columns.is_empty() && inputs.remove_column_ids.is_empty() {
let requested_table_name = if inputs.columns.table_name.is_empty() {
inputs.selection.table.clone()
} else {
inputs.columns.table_name.clone()
};
let renaming = requested_table_name != inputs.selection.table;
if renaming
&& let Some(message) = validate_table_name(
Locale::from_headers(&headers),
&requested_table_name,
)
{
return refuse(state, headers, inputs, Page::AddColumns, message).await;
}
if inputs.columns.is_empty() && inputs.remove_column_ids.is_empty() && !renaming {
let message = tr!(
Locale::from_headers(&headers),
"td-err-describe-change"
@@ -314,6 +330,7 @@ pub(crate) async fn add_columns(
add_indexes: inputs.columns.selected_index_names(),
generated_aliases: Vec::new(),
expected_row_version: form.expected_row_version,
new_table_name: requested_table_name.clone(),
};
let Ok(request) = authenticated_request(&headers, request) else {
return Redirect::to("/login").into_response();
@@ -330,9 +347,11 @@ pub(crate) async fn add_columns(
"td-definition-adjusted",
"added" => added as i64,
"removed" => removed as i64,
"table" => inputs.selection.table.clone(),
"table" => requested_table_name.clone(),
));
inputs.selection.table = requested_table_name.clone();
inputs.columns = crate::schema::ColumnDraft::for_append(catalog);
inputs.columns.table_name = requested_table_name;
inputs.remove_column_ids.clear();
respond(state, headers, inputs, Page::AddColumns, StatusCode::OK).await
}

View File

@@ -456,6 +456,7 @@ mod tests {
let add_html = render_add_columns_page(&page());
assert!(add_html.contains(r#"id="column-form""#), "{add_html}");
assert!(add_html.contains(r#"name="expected_row_version" value="1""#), "{add_html}");
assert!(add_html.contains(r#"name="table_name_input" value="invoice""#), "{add_html}");
assert!(add_html.contains(r#"name="remove_column_ids" value="1""#), "{add_html}");
assert!(add_html.contains("Adjust table"), "{add_html}");
assert!(!add_html.contains(r#"name="alias""#), "{add_html}");

View File

@@ -1422,6 +1422,10 @@ pub(crate) struct ColumnForm {
pub remove_column_ids: Vec<i64>,
#[serde(default)]
pub expected_row_version: i64,
/// The requested name of an existing empty table. The append-only form
/// does not render it, so populated tables decode this as empty.
#[serde(default)]
pub table_name_input: String,
#[serde(default)]
pub column_name_input: String,