Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,27 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
16,384-column limits are checked before writing (an over-limit export is
refused up front), and the workbook is committed through the atomic-save
pipeline, so a failed or cancelled export never touches an existing file.
- **Local database browser** (F35): open a SQLite database file (palette →
"Open database…", or by opening a `.db` / `.sqlite` / `.sqlite3` file) to
browse its tables and views — columns with declared type, NOT NULL, defaults
and primary keys, plus indexes, foreign keys, WITHOUT ROWID flags, row-count
estimates and bounded preview rows. Open any table or view as an indexed,
read-only document (paged straight out of the database — a large table is
never copied into memory) or import it into a fully editable document
(guarded by a memory check, with an explicit "import anyway"). A changed
database is detected (rows via `PRAGMA data_version`, schema via a hash) and
offers a reload. Export the active document back to a database (palette →
"Export to database…"): create a new table, append to a compatible existing
one, or replace one after explicit confirmation. Before writing, a preview
shows the resolved document-column → SQL-type mapping (from the F31 declared
schema, TEXT by default; per-column name/type/primary-key overrides) and a
bounded scan of the cells that would fail to convert; the write runs in one
transaction that rolls back completely on any failure, with an explicit
primary-key conflict policy (abort / skip / replace). Every database read
goes through a read-only, authorizer-guarded connection restricted to the
files the user explicitly opened. _SQLite only this cycle — DuckDB support is
deliberately out of scope (its bundled C++ library cannot be built on the
low-memory MinGW development machine)._
- **Row bookmarks, tags & notes** (F40): mark and annotate records without
touching the source data. Star or flag a row, apply multiple named tags
(a per-document tag namespace with usage counts), and attach a row note or
Expand Down
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@ and faithful on large, real-world delimited files.**
1900 leap-year quirk preserved) and leading-zero text stays text. Every
import creates a new document — there is no in-place `.xlsx` save, so the
original workbook is never modified.
- **Open a SQLite database** — browse a `.db` / `.sqlite` file's tables and
views (columns with type / NOT NULL / defaults / primary keys, plus
indexes, foreign keys, row-count estimates, and bounded preview rows), then
open any table or view as a read-only indexed document (paged straight out
of the database, never copied into memory) or import it into a fully
editable document (guarded by a memory check). A database changed outside
CEESVEE is detected — rows and schema — and offers a reload, and every read
goes through a read-only, authorizer-guarded connection restricted to the
files you explicitly open. _Database support is SQLite only this cycle —
DuckDB is deliberately out of scope._
- Auto-detect the **delimiter** (comma, tab, semicolon, pipe) with a manual /
custom override — plus an **advanced import** for preambles, comment
lines, custom quoting/escaping, multi-row headers, and footers.
Expand Down Expand Up @@ -140,6 +150,15 @@ and faithful on large, real-world delimited files.**
back to text). Excel's 1,048,576-row × 16,384-column limits are checked
before anything is written, and the workbook commits through the same atomic
save pipeline, so a failed or cancelled export never touches an existing file.
- **Export to a database** — write the active document into a SQLite table:
create a new table, append to a compatible existing one, or replace one
after explicit confirmation. A preview shows the resolved document-column →
SQL-type mapping (from the declared schema, TEXT by default, with per-column
name / type / primary-key overrides) and a bounded scan of the cells that
would fail to convert before anything is written; the write runs in one
transaction that rolls back completely on any failure, under an explicit
primary-key conflict policy (abort / skip / replace) and never altering an
existing table's schema.

**Reliability**

Expand Down
88 changes: 88 additions & 0 deletions src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ parquet = { version = "59", default-features = false, features = ["arrow", "snap
# no extra chrono feature is needed on the writer).
calamine = { version = "0.36", features = ["dates"] }
rust_xlsxwriter = "0.96"
# Local database browser (F35) + SafeQueryEngine (F36): SQLite ONLY this
# cycle — DuckDB is out of scope (the bundled libduckdb C++ build does not
# fit the 6 GB dev machine). `vtab` exposes open documents as read-only
# virtual tables; `hooks` provides the authorizer + progress handler the
# SafeQueryEngine is built on.
rusqlite = { version = "0.40", features = ["bundled", "vtab", "hooks"] }

# Single-instance is desktop-only: it forwards a second "Open with" launch
# (and its file argument) to the already-running window instead of spawning a
Expand Down
Loading
Loading