Cursor in
ODBC and JDBC expose result sets through a current-row cursor. Block fetch and array binding reduce call count, but the abstraction remains a rowset cursor.
R. Anderson / Memeroot Ltd · working paper · June 2026
ETL, ELT, and the Driver Stratum
A rigorous, interactive account of why enterprise data integration processed one row at a time, what it cost, and what the set-based alternative looked like in dated artifacts.
The universal ODBC/JDBC connectivity contract was cursor-shaped; client ETL engines inherited that shape and made row motion the architecture.
01 · The claim
The usual story treats row-by-row ETL as a mapping-canvas style. This site frames it as an architectural consequence of the generic driver layer: the universal pipe was row-shaped, so the engine architecture became row-shaped.
ODBC and JDBC expose result sets through a current-row cursor. Block fetch and array binding reduce call count, but the abstraction remains a rowset cursor.
The DTM/plan engine reads, transforms, and writes records through the driver layer, paying marshalling, network, locking, and index maintenance repeatedly.
ELT lands once and executes SQL inside the database: INSERT…SELECT, MERGE, CTAS, partition exchange, parallel query, and direct-path writes.
This is not an attack on universality. It is an accounting of the physical cost of universality when it becomes the default execution model.
02 · The driver stratum
The public chain below is separated from the private artifact record. It is included to make the driver-lineage claim inspectable.
ODBC exposes fetch operations over a result-set cursor. SQLFetch advances to the next rowset; JDBC ResultSet similarly starts before the first row and uses next() to advance row by row. This is the contract that generic tools can rely on across databases.
SQLPrepare(stmt, sql)
SQLExecute(stmt)
while SQLFetch(stmt) == SQL_SUCCESS:
bind columns
transform current row
SQLExecute(insert_or_update)Oracle BI EE documentation still references required DataDirect 7.1.5 drivers under a path containing ODBC/Merant/7.1.5. Informatica documentation states that its installation includes DataDirect ODBC drivers. The driver layer is often present, but not architecturally visible.
$ORACLE_HOME/bi/common/ODBC/Merant/7.1.5/lib
ODBCHOME=/export/home/Informatica/10.0.0/ODBC7.103 · Interactive cost model
This calculator is illustrative. It does not claim universal benchmark accuracy; it makes the terms visible: row count, call count, per-row work, and set-engine replacement.
Array fetch/write reduces round-trips. It does not move transformation ownership into the database. The client engine still walks record buffers, still pays data movement, and still treats the set as a stream of rows.
04 · ETL versus ELT
Two diagrams show the same business logic in two execution locations. Use the controls to highlight crossings, execution engine, and failure surface.
CDC does not make row handling disappear by itself. It prevents the false workload: scanning and comparing unchanged rows nightly because the boundary did not provide change state.
05 · Dated artifacts
The cards below are generated from the evidence register supplied with the working paper. Private artifact claims are deliberately labelled as artifact evidence, not public corporate record.
Single-pass token resolution can turn a registry row into executable set SQL. Change the inputs and re-render the generated statement.
Registration rows create executable dispatch. This is the AFFIRM pattern: row inserts define run types/message tables/consumers, then the dispatcher builder resolves them.
OWNER_OWK’s Table_Where_Split pattern is represented here with synthetic extents. The point is not the literal ROWID values; it is physical-range splitting into deterministic work units.
06 · Economic reading
This section is interpretive. The factual chain is sourced; the causal weighting is the paper’s argument.
ETL licences monetised the client engine. Moving work to the database reduced the engine’s architectural centrality.
CDC and mainframe connectivity became separately licensed capability rather than default boundary discipline.
Mapping-canvas skills, certifications, and offshore delivery made row-wise estate maintenance reproducible.
When estates became unmovable, emulation monetised the refusal to regenerate formal structure.
The argument is not that legacy forms are unintelligible. A copybook is a formal declaration: level numbers define nesting, OCCURS defines repetition, PIC defines type/shape. That is generator input. The expensive decision is to treat it as executable fossil rather than resolvable structure.
01 CUSTOMER-REC.
05 CUSTOMER-ID PIC X(12).
05 BALANCES OCCURS 12.
10 MONTH-NO PIC 99.
10 BALANCE-AMT PIC S9(11)V99.
07 · Evidence register
The app distinguishes three kinds of support: supplied private artifacts, public corporate/documentation sources, and interpretive claims.
Public sources, supplied artifacts, and interpretive claims are kept as different node classes. This avoids mixing dated artifact evidence with public corporate history.
08 · Cloudflare pack
This pass removes the broken asset references and packages the site as a no-build Cloudflare Pages deployment. It also includes an optional _worker.js edge layer for health/manifest endpoints while preserving pure static fallback.
Works as a static site: index.html, styles.css, app.js, manifest.webmanifest, sw.js, _headers, and _redirects.
Use Wrangler when you want the included _worker.js edge endpoint active from the same root directory.
npx wrangler pages deploy . --project-name row-taxSet the build output directory to the repository root, or keep this folder as the output directory in a larger repo.
On Cloudflare, this button checks the optional Worker endpoint. Locally it will report static-only mode, which is expected.
Not tested yet._headerssecurity headers, cache policy, permissions policy_redirectsSPA fallback and clean route aliases_worker.jsoptional edge health/manifest endpointssw.jsoffline cache for the app shellmanifest.webmanifestinstallable PWA metadatawrangler.tomlPages project metadata and compatibility date