HeliosDB Nano v3.4.0 Release Notes
HeliosDB Nano v3.4.0 Release Notes
Release Date: January 2026 Previous Version: v3.3.0
Overview
HeliosDB Nano v3.4.0 is an Advanced SQL Features Release that extends PostgreSQL compatibility with JSON aggregation, array operations, and enhanced type verification. This release also includes transaction system improvements and comprehensive documentation updates.
Highlights
- json_agg() Function: PostgreSQL-compatible JSON array aggregation for analytical queries
- Array Operations: 1-based subscript indexing and
||concatenation operator - Type Verification: Built-in validation for UUID, Boolean, and BYTEA types
- Transaction Improvements: Enhanced lock management with RAII pattern
- Documentation Sync: Fixed broken links and updated version references
- 100% Backward Compatible: No API changes, drop-in replacement for v3.3.0
New Features
Phase 1.10: JSON Aggregation
The json_agg() aggregate function allows building JSON arrays from query results:
-- Aggregate user data into JSON arraySELECT json_agg(name) AS user_names FROM users;-- Result: ["Alice", "Bob", "Charlie"]
-- With ORDER BY supportSELECT json_agg(product ORDER BY price DESC) AS products_by_priceFROM products;
-- Integration with GROUP BYSELECT department, json_agg(name) AS employeesFROM staffGROUP BY department;
-- Works with materialized viewsCREATE MATERIALIZED VIEW customer_orders ASSELECT customer_id, json_agg(order_id) AS order_idsFROM ordersGROUP BY customer_id;Implementation Details:
- Full PostgreSQL compatibility for NULL handling
- Type-safe JSONB output
- ORDER BY support within aggregation
- Seamless materialized view integration
Phase 2: Array Operations
Array Subscript Operator
Access array elements using 1-based indexing (PostgreSQL compatible):
-- 1-based indexingSELECT ARRAY[10, 20, 30, 40, 50][1] AS first_element;-- Result: 10
SELECT ARRAY[10, 20, 30, 40, 50][3] AS third_element;-- Result: 30
-- Out-of-bounds returns NULL (safe indexing)SELECT ARRAY[10, 20, 30][10] AS out_of_bounds;-- Result: NULL
-- Use in WHERE clausesSELECT * FROM products WHERE tags[1] = 'featured';Array Concatenation
Combine arrays using the || operator:
-- Concatenate arraysSELECT ARRAY[1, 2, 3] || ARRAY[4, 5, 6] AS combined;-- Result: [1, 2, 3, 4, 5, 6]
-- Type coercionSELECT ARRAY[1, 2] || ARRAY[3.5, 4.5] AS mixed;-- Result: [1.0, 2.0, 3.5, 4.5]
-- Dynamic array buildingSELECT user_id, favorite_items || recent_items AS all_itemsFROM user_preferences;Phase 3: Type Verification
Enhanced type system validation for:
- UUID: Format validation for 128-bit identifiers
- Boolean: Strict true/false validation
- BYTEA: Binary data type support
Improvements
Transaction System Enhancements
- RAII Lock Guards: Automatic lock release on transaction commit/rollback
- Lock Manager Integration: Session-aware locking with deadlock detection
- DashMap Optimization: Lock-free concurrent access to write sets
// Example: RAII pattern ensures locks are releasedpub struct LockGuard { lock_manager: Arc<LockManager>, resource: String, txn_id: u64,}
impl Drop for LockGuard { fn drop(&mut self) { // Automatic lock release self.lock_manager.release_lock(&self.resource, self.txn_id); }}Documentation Updates
- Fixed 8 broken documentation links in README.md
- Updated version references from v3.0 to v3.4.0
- Synchronized architecture documentation with implementation
- Added feature status alignment document
Known Issues
Transaction Isolation in Concurrent Scenarios
Issue: The concurrent banking test (test_10_concurrent_users_5_transactions_each) is currently ignored due to a known limitation with transaction isolation in concurrent read-modify-write scenarios.
Root Cause: Lost update anomaly in concurrent UPDATE statements. When multiple transactions perform read-modify-write operations on the same row:
- Transaction A reads balance = 1000
- Transaction B reads balance = 1000 (before A commits)
- Transaction A writes balance = 900
- Transaction B writes balance = 900 (overwrites A’s result)
Current Status: The test is marked with #[ignore] for investigation. For applications requiring strict serializable isolation in concurrent updates:
Workarounds:
- Use application-level optimistic locking with version checks
- Use
SELECT ... FOR UPDATEsemantics (planned for future release) - Serialize updates at the application level
Tracking: See tests/integration/multi_user_scenarios.rs for details.
Test Suite Status
| Category | Count | Status |
|---|---|---|
| Unit Tests | 883 | All Passing |
| Integration Tests | 34 | Passing |
| Ignored Tests | 1 | Known Issue (documented) |
Upgrade Guide
From v3.3.0
No action required. v3.4.0 is a drop-in replacement:
# Update Cargo.toml[dependencies]heliosdb-nano = "3.4"
# Or install CLIcargo install heliosdb-nanoBreaking Changes
None. This release maintains full backward compatibility.
Build Information
- Binary Size: ~20MB (release build)
- Rust Version: 1.75+
- Target: x86_64-unknown-linux-gnu
- Dependencies: RocksDB 8.10, Arrow 52.2
What’s Next (v3.5.0)
- CDC Persistence Layer
- Automatic Change Capture hooks
- RETURNING Tuple Capture optimization
- Background Replication Tasks
- SELECT FOR UPDATE support
Contributors
- HeliosDB Team