feat(tableview): helpers fase 2 (issue 0011)
- TableMetadata struct + tableview_get_metadata: lee la metadata de un nodo Table (path, table, row_type, columns, label_column, expanded...). - tableview_set_expanded: persiste el flag expanded usando json_set. - tableview_set_columns: sobrescribe metadata.columns. - tableview_promote_row: idempotente — si ya existe entidad con metadata.source.row_id == row_id la devuelve; si no, lee fila completa desde DuckDB e inserta entity con id 'prom_<type>_<row_id>' y metadata incluyendo source + columnas. - tableview_demote_row: DELETE FROM entities (la fila DuckDB no se toca). - tableview_ingest_file: CREATE TABLE AS SELECT * FROM read_csv_auto/ read_parquet/read_json_auto segun extension del input. - tableview_list_columns: SELECT * FROM tabla LIMIT 0 -> nombres.
This commit is contained in:
+78
@@ -76,4 +76,82 @@ struct TableCounts {
|
||||
bool tableview_refresh_counts(const char* ops_db,
|
||||
std::unordered_map<uint64_t, int64_t>* out);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Issue 0011 — UI fase 2 helpers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Snapshot de la metadata relevante de un nodo Table. Caller-owned strings.
|
||||
struct TableMetadata {
|
||||
std::string entity_id;
|
||||
std::string name;
|
||||
std::string duckdb_path; // tal como aparece en metadata (relativo o absoluto)
|
||||
std::string duckdb_path_abs; // resuelto con tableview_resolve_path
|
||||
std::string table_name;
|
||||
std::string row_type;
|
||||
std::string id_column;
|
||||
std::string label_column;
|
||||
std::vector<std::string> columns;
|
||||
std::string filter_sql;
|
||||
bool expanded = false;
|
||||
};
|
||||
|
||||
// Lee la metadata del nodo Table (entidad type_ref='Table' con id=`entity_id`).
|
||||
// Devuelve false si no existe o falla el JSON. Aplica defaults razonables a
|
||||
// los campos faltantes (id_column='id', label_column='name').
|
||||
bool tableview_get_metadata(const char* ops_db, const char* entity_id,
|
||||
TableMetadata* out);
|
||||
|
||||
// Persiste el flag `expanded` en la metadata. Idempotente. Devuelve false
|
||||
// en error de IO/SQL.
|
||||
bool tableview_set_expanded(const char* ops_db, const char* entity_id,
|
||||
bool expanded);
|
||||
|
||||
// Sobrescribe el array `columns` en la metadata. Llamar tras editar columnas
|
||||
// desde la UI o tras tableview_create cuando se descubren columnas.
|
||||
bool tableview_set_columns(const char* ops_db, const char* entity_id,
|
||||
const std::vector<std::string>& columns);
|
||||
|
||||
// Promueve una fila de DuckDB a entidad del grafo. Idempotente: si ya existe
|
||||
// una entidad con metadata.source.row_id == row_id Y metadata.source.duckdb
|
||||
// == duckdb_path, devuelve esa misma id en out_id sin tocar nada.
|
||||
//
|
||||
// Si no existe, lee la fila de DuckDB con SELECT *, construye un id estable
|
||||
// "prom_<sanitize(row_type)>_<sanitize(row_id)>", e inserta en ops.entities
|
||||
// con type_ref=row_type, name = valor del label_column (o row_id si vacio),
|
||||
// metadata = { source: {duckdb, table, row_id}, <columnas> }.
|
||||
bool tableview_promote_row(const char* ops_db,
|
||||
const char* duckdb_path,
|
||||
const char* duck_table,
|
||||
const char* row_id,
|
||||
const char* row_type,
|
||||
const char* label_column,
|
||||
char* out_entity_id, std::size_t out_id_n);
|
||||
|
||||
// Borra la entidad. La fila DuckDB sigue intacta. Devuelve true si la fila
|
||||
// no existia (no-op idempotente).
|
||||
bool tableview_demote_row(const char* ops_db, const char* entity_id);
|
||||
|
||||
// Tipos de fichero soportados por tableview_ingest_file.
|
||||
enum IngestKind {
|
||||
INGEST_AUTO = 0, // detecta por extension
|
||||
INGEST_CSV = 1,
|
||||
INGEST_PARQUET = 2,
|
||||
INGEST_JSON = 3,
|
||||
};
|
||||
|
||||
// Importa un fichero CSV/Parquet/JSON al `.duckdb`. Crea el .duckdb si no
|
||||
// existe. Si la tabla destino existe, falla (no sobrescribe — explicit fail).
|
||||
// Por defecto INGEST_AUTO inspecciona la extension del path.
|
||||
bool tableview_ingest_file(const char* duckdb_path,
|
||||
const char* file_path,
|
||||
const char* dest_table,
|
||||
IngestKind kind,
|
||||
std::string* out_error);
|
||||
|
||||
// Lista los nombres de columna de la tabla DuckDB. Para popular la lista
|
||||
// `columns` por defecto en tableview_create.
|
||||
bool tableview_list_columns(const char* duckdb_path,
|
||||
const char* duck_table,
|
||||
std::vector<std::string>* out);
|
||||
|
||||
} // namespace ge
|
||||
|
||||
Reference in New Issue
Block a user