multirow reference in the client

This commit is contained in:
Priec
2026-07-29 11:34:08 +02:00
parent 33a5f47b42
commit 76a5f76194
17 changed files with 105 additions and 90 deletions

View File

@@ -44,9 +44,9 @@ message SearchResponse {
float score = 2;
string content_json = 3;
string table_name = 4;
// Configured human-readable value for this row.
string row_display_value = 5;
string row_display_column = 6;
// Configured human-readable values for this row, in display order.
repeated string row_display_values = 5;
repeated string row_display_columns = 6;
optional uint64 position = 7;
}
repeated Hit hits = 1;

View File

@@ -40,8 +40,8 @@ message Search2Response {
int64 id = 1;
string content_json = 2; // No score - this is SQL-based
optional string match_info = 3; // Info about which columns matched
string row_display_value = 4; // Configured human-readable value for this row
string row_display_column = 5;
repeated string row_display_values = 4; // Configured human-readable values for this row
repeated string row_display_columns = 5;
}
repeated Hit hits = 1;
int32 total_count = 2; // Total matching records (for pagination)

View File

@@ -86,9 +86,10 @@ message PostTableDefinitionRequest {
// ISO-4217 base currency used by every MONEY column in this table.
string base_currency = 6;
// Column whose value identifies a row to users in pickers. "id" is always
// valid; otherwise this must name one of the user-defined columns above.
string row_display_column = 7;
// Columns whose values identify a row to users in pickers, in the order
// they are shown. Each must name one of the user-defined columns above.
// Empty means the row is identified by its id alone.
repeated string row_display_columns = 7;
// ISO-4217 currency the profile keeps its accounting in. A profile is one
// accounting entity and keeps one set of books, so this is required only when
@@ -117,7 +118,7 @@ message CreateInvoiceTemplateTableRequest {
string table_name = 2;
string typst_source = 3;
string base_currency = 4;
string row_display_column = 5;
repeated string row_display_columns = 5;
}
// One physical dynamic table created for an invoice template scope. The root
@@ -225,8 +226,8 @@ message ProfileTreeResponse {
// Other tables this one references (based on link definitions only).
repeated string depends_on = 3;
// Column whose value is used as the human-readable row label.
string row_display_column = 4;
// Columns whose values make up the human-readable row label, in order.
repeated string row_display_columns = 4;
// "dynamic" for user-defined tables, "system" for backend-managed tables.
string table_kind = 5;
@@ -304,7 +305,7 @@ message TableDetail {
repeated ColumnDefinition columns = 3;
repeated ScriptInfo scripts = 4;
string base_currency = 5;
string row_display_column = 6;
repeated string row_display_columns = 6;
map<string, ColumnBehavior> column_behaviors = 7;
string table_kind = 8;
}

View File

@@ -271,10 +271,11 @@ message GetTableDataResponse {
// (NULL becomes ""). The row is returned only if deleted = FALSE.
map<string, string> data = 1;
// Configured human-readable value for this row. Empty when that column is
// NULL/empty; clients should then visibly fall back to the row id.
string row_display_value = 2;
string row_display_column = 3;
// Configured human-readable values for this row, in display order. A value
// is empty when its column is NULL/empty; an empty list means the row is
// identified by its id alone.
repeated string row_display_values = 2;
repeated string row_display_columns = 3;
}
// Count non-deleted rows.

Binary file not shown.

View File

@@ -50,11 +50,13 @@ pub mod search_response {
pub content_json: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub table_name: ::prost::alloc::string::String,
/// Configured human-readable value for this row.
#[prost(string, tag = "5")]
pub row_display_value: ::prost::alloc::string::String,
#[prost(string, tag = "6")]
pub row_display_column: ::prost::alloc::string::String,
/// Configured human-readable values for this row, in display order.
#[prost(string, repeated, tag = "5")]
pub row_display_values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
#[prost(string, repeated, tag = "6")]
pub row_display_columns: ::prost::alloc::vec::Vec<
::prost::alloc::string::String,
>,
#[prost(uint64, optional, tag = "7")]
pub position: ::core::option::Option<u64>,
}

View File

@@ -49,11 +49,13 @@ pub mod search2_response {
/// Info about which columns matched
#[prost(string, optional, tag = "3")]
pub match_info: ::core::option::Option<::prost::alloc::string::String>,
/// Configured human-readable value for this row
#[prost(string, tag = "4")]
pub row_display_value: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
pub row_display_column: ::prost::alloc::string::String,
/// Configured human-readable values for this row
#[prost(string, repeated, tag = "4")]
pub row_display_values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
#[prost(string, repeated, tag = "5")]
pub row_display_columns: ::prost::alloc::vec::Vec<
::prost::alloc::string::String,
>,
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]

View File

@@ -45,10 +45,11 @@ pub struct PostTableDefinitionRequest {
/// ISO-4217 base currency used by every MONEY column in this table.
#[prost(string, tag = "6")]
pub base_currency: ::prost::alloc::string::String,
/// Column whose value identifies a row to users in pickers. "id" is always
/// valid; otherwise this must name one of the user-defined columns above.
#[prost(string, tag = "7")]
pub row_display_column: ::prost::alloc::string::String,
/// Columns whose values identify a row to users in pickers, in the order
/// they are shown. Each must name one of the user-defined columns above.
/// Empty means the row is identified by its id alone.
#[prost(string, repeated, tag = "7")]
pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
/// ISO-4217 currency the profile keeps its accounting in. A profile is one
/// accounting entity and keeps one set of books, so this is required only when
/// the request creates the profile, and is ignored afterwards. It is unrelated
@@ -82,8 +83,8 @@ pub struct CreateInvoiceTemplateTableRequest {
pub typst_source: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
pub base_currency: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
pub row_display_column: ::prost::alloc::string::String,
#[prost(string, repeated, tag = "5")]
pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// One physical dynamic table created for an invoice template scope. The root
/// has an empty collection_path and parent_table_name. Each \[\] scope names its
@@ -205,9 +206,11 @@ pub mod profile_tree_response {
/// Other tables this one references (based on link definitions only).
#[prost(string, repeated, tag = "3")]
pub depends_on: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
/// Column whose value is used as the human-readable row label.
#[prost(string, tag = "4")]
pub row_display_column: ::prost::alloc::string::String,
/// Columns whose values make up the human-readable row label, in order.
#[prost(string, repeated, tag = "4")]
pub row_display_columns: ::prost::alloc::vec::Vec<
::prost::alloc::string::String,
>,
/// "dynamic" for user-defined tables, "system" for backend-managed tables.
#[prost(string, tag = "5")]
pub table_kind: ::prost::alloc::string::String,
@@ -313,8 +316,8 @@ pub struct TableDetail {
pub scripts: ::prost::alloc::vec::Vec<ScriptInfo>,
#[prost(string, tag = "5")]
pub base_currency: ::prost::alloc::string::String,
#[prost(string, tag = "6")]
pub row_display_column: ::prost::alloc::string::String,
#[prost(string, repeated, tag = "6")]
pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
#[prost(map = "string, message", tag = "7")]
pub column_behaviors: ::std::collections::HashMap<
::prost::alloc::string::String,

View File

@@ -216,12 +216,13 @@ pub struct GetTableDataResponse {
::prost::alloc::string::String,
::prost::alloc::string::String,
>,
/// Configured human-readable value for this row. Empty when that column is
/// NULL/empty; clients should then visibly fall back to the row id.
#[prost(string, tag = "2")]
pub row_display_value: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
pub row_display_column: ::prost::alloc::string::String,
/// Configured human-readable values for this row, in display order. A value
/// is empty when its column is NULL/empty; an empty list means the row is
/// identified by its id alone.
#[prost(string, repeated, tag = "2")]
pub row_display_values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
#[prost(string, repeated, tag = "3")]
pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
}
/// Count non-deleted rows.
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]