Skip to content

ladder: rung 1 -- pastebin - #89

Draft
Yaraslaut wants to merge 1 commit into
ladder-foundationfrom
ladder-pastebin
Draft

ladder: rung 1 -- pastebin#89
Yaraslaut wants to merge 1 commit into
ladder-foundationfrom
ladder-pastebin

Conversation

@Yaraslaut

Copy link
Copy Markdown
Member

What

Rung 1 of the application ladder: pastebin, anchored on MicroBin. Split out of #41 into its own PR, targeting #88's ladder-foundation branch since it depends on the shared testkit/CMake infra there.

Draft until #88 merges — retarget to master and un-draft once it does.

Contents

examples/pastebin/ in full: model, DTOs, entity, schema migration, server, Qt/QML GUI (forms controller, presenter, bridges), and tests — 29 files.

Includes two fixes folded in during review of the combined branch:

  • PasteModel acquires connections from Lightweight::GlobalDataMapperPool() per execute() call rather than holding one for its own lifetime (WithMapper removed) — see the framework-wide rationale in Application ladder: rungs 0-3 (pastebin, bookmarks, polls) + shared infrastructure #41's discussion.
  • content is Light::SqlMaxDynamicWideString, not std::string/SqlText — both of those are char-based and render as VARCHAR(MAX) (a single-byte-collation column) on the SQL Server backend this same test suite can target via ODBC_CONNECTION_STRING. SqlMaxDynamicWideString's wchar_t-based storage self-declares NVarchar, giving real Unicode columns on every backend.

Verification

Configured and built standalone against the ladder-foundation base with -DMORPH_LADDER_RUNGS=pastebin (no other rung present). Full suite passes: 834 assertions in 51 test cases (SQLite default). Spec-citation and test-type-name lints clean.

Split out of application-ladder (originally bundled with bookmarks/polls
and the shared foundation in #41) into its own PR against the rung-0
foundation (#88). Includes the pool-migration and Unicode-content fixes
folded in during review of the combined branch:

- PasteModel acquires connections from Lightweight::GlobalDataMapperPool()
  per execute() call rather than holding one for its own lifetime
  (WithMapper removed).
- content is Light::SqlMaxDynamicWideString, not std::string/SqlText --
  both of those are char-based and would render as VARCHAR(MAX) (a
  single-byte-collation column) on the SQL Server backend this same test
  suite can target via ODBC_CONNECTION_STRING; SqlMaxDynamicWideString's
  wchar_t-based storage self-declares NVarchar, giving real Unicode
  columns on every backend.

Verified standalone against the ladder-foundation base: configures and
builds with -DMORPH_LADDER_RUNGS=pastebin and no other rung present.
Full suite passes: 834 assertions in 51 test cases (SQLite default).
Spec-citation and test-type-name lints clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@codecov

codecov Bot commented Aug 14, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant