Files
metabuilder/txt/sql_adapter_split_20260207-195134.md
2026-03-09 22:30:41 +00:00

3.0 KiB

SQL Adapter Header Split - 2026-02-07

Objective

Reduce sql_adapter_base.hpp from 157 lines to under 150 LOC while maintaining clear interface.

Solution

Extracted helper declarations and type definitions to separate headers using a three-file split:

File Structure

  1. sql_types.hpp (49 lines)

    • SqlParam - Parameter binding structure
    • SqlRow - Result row structure
    • SqlError - Error codes and message
    • Note: Dialect enum remains in sql_connection.hpp (already existed)
  2. sql_adapter_helpers.hpp (52 lines)

    • SqlQueryBuilder - SQL query construction (INSERT, SELECT, UPDATE, DELETE)
    • SqlDataConverter - JSON ↔ SQL row conversion
    • SqlUtils - String utilities (snake_case, placeholders, joins)
  3. sql_adapter_base.hpp (94 lines)

    • Main SqlAdapter class interface
    • Generic CRUD operations (11 methods)
    • Bulk operations (3 methods)
    • Query operations (3 methods)
    • Metadata operations (2 methods)
    • Protected methods (schema loading, query execution)

Changes Made

Extracted to sql_types.hpp

  • Moved SqlParam, SqlRow, SqlError structs
  • Removed duplicate Dialect enum (already in sql_connection.hpp)

Extracted to sql_adapter_helpers.hpp

  • Created static helper classes for SQL building, data conversion, utilities
  • Added sql_connection.hpp include for Dialect enum

Simplified sql_adapter_base.hpp

  • Reduced includes from 14 to 7
  • Removed inline implementations from protected methods
  • Condensed ConnectionGuard destructor to single line
  • Added helper includes: sql_types.hpp, sql_adapter_helpers.hpp

Results

Metric Before After Change
sql_adapter_base.hpp LOC 157 94 -63 (-40%)
Target met Under 150 LOC
Files created 1 3 +2 helpers
Total LOC 157 195 +38 (from extracted declarations)

Benefits

  1. Separation of Concerns: Type definitions, helpers, and main adapter now in separate files
  2. Reusability: Helper classes can be used by other SQL adapters (future SQLite, MySQL variants)
  3. Maintainability: Smaller files are easier to navigate and understand
  4. Compile Time: Can include only needed headers (sql_types.hpp vs full adapter)
  5. Testing: Helper classes can be unit tested independently

Impact

  • No breaking changes to public API
  • All includes properly updated
  • Dialect enum reused from sql_connection.hpp
  • Clean separation: types, helpers, adapter

Files Modified

  • src/adapters/sql/sql_adapter_base.hpp - Reduced from 157 to 94 lines
  • src/adapters/sql/sql_types.hpp - NEW (49 lines)
  • src/adapters/sql/sql_adapter_helpers.hpp - NEW (52 lines)

Implementation Pattern

This split follows the pattern:

  1. Types layer - Basic data structures (sql_types.hpp)
  2. Helpers layer - Static utility functions (sql_adapter_helpers.hpp)
  3. Adapter layer - Main business logic (sql_adapter_base.hpp)

Can be applied to other large headers in the codebase.