tegdb 0.5.0

The name TegridyDB (short for TegDB) is inspired by the Tegridy Farm in South Park and tries to correct some of the wrong database implementations, such as null support, implicit conversion support, etc.
Documentation
//! Example demonstrating the streaming API concept for TegDB
//!
//! This example shows the architectural improvements that streaming API provides
//! even though the exact API integration may need refinement.

fn main() {
    println!("=== TegDB Streaming API Architecture Demo ===\n");

    println!("The streaming API provides several key benefits:\n");

    println!("1. MEMORY EFFICIENCY:");
    println!("   - Traditional: SELECT * FROM large_table loads ALL rows into Vec<Vec<SqlValue>>");
    println!("   - Streaming: Processes one row at a time, using O(1) memory instead of O(n)");
    println!("   - Critical for tables with millions of rows\n");

    println!("2. REDUCED LATENCY:");
    println!("   - Traditional: Wait for ALL rows to be processed before getting any results");
    println!("   - Streaming: Get first results immediately as they're found");
    println!("   - Better user experience for interactive queries\n");

    println!("3. EARLY TERMINATION:");
    println!("   - LIMIT clauses can stop processing as soon as enough rows are found");
    println!("   - Filtering happens during iteration, not after loading everything");
    println!("   - Massive performance gains for selective queries\n");

    println!("4. COMPOSABLE OPERATIONS:");
    println!("   - stream.take(10) - get first 10 rows");
    println!("   - stream.filter(|row| condition) - apply additional filtering");
    println!("   - stream.collect() - convert back to Vec for compatibility");
    println!("   - Lazy evaluation means only necessary work is done\n");

    println!("5. REAL-WORLD SCENARIOS:");
    println!("   - ETL processes: Stream data from source to destination");
    println!("   - Analytics: Calculate aggregates without loading full dataset");
    println!("   - Reporting: Generate reports with pagination");
    println!("   - Real-time processing: Handle data as it comes in\n");

    // Demonstrate the conceptual API structure
    demonstrate_streaming_concept();
}

fn demonstrate_streaming_concept() {
    println!("=== Conceptual API Usage ===\n");

    // This represents the structure of how the streaming API would work
    println!("// Example 1: Basic streaming usage");
    println!("let streaming_result = executor.execute_streaming_query(\"users\", None, None, Some(100))?;");
    println!("for row_result in streaming_result.rows {{");
    println!("    match row_result {{");
    println!("        Ok(row) => process_row(row),");
    println!("        Err(e) => handle_error(e),");
    println!("    }}");
    println!("}}\n");

    println!("// Example 2: Memory-efficient aggregation");
    println!("let stream = executor.execute_streaming_query(\"sales\", Some(&[\"amount\"]), None, None)?;");
    println!("let total: f64 = stream.rows");
    println!("    .filter_map(|row| row.ok()?.get(0)?.as_real())");
    println!("    .sum();");
    println!("// Processes millions of rows using constant memory!\n");

    println!("// Example 3: Pagination");
    println!("let stream = executor.execute_streaming_query(\"products\", None, None, None)?;");
    println!(
        "let page: Vec<_> = stream.rows.skip(page_size * page_num).take(page_size).collect();"
    );
    println!("// Only processes the rows actually needed\n");

    println!("// Example 4: Early termination");
    println!(
        "let stream = executor.execute_streaming_query(\"logs\", None, Some(error_filter), None)?;"
    );
    println!("if let Some(first_error) = stream.rows.next() {{");
    println!("    // Found the error immediately, no need to scan entire table");
    println!("    handle_first_error(first_error);");
    println!("}}\n");

    println!("=== Architecture Benefits ===\n");
    println!("1. The RowIterator struct implements lazy evaluation");
    println!("2. StorageFormat.deserialize_row() is called on-demand");
    println!("3. Transaction.scan() returns an iterator, not a Vec");
    println!("4. Filters are applied during iteration, not after");
    println!("5. LIMIT is enforced by the iterator, stopping early");
    println!("6. Memory usage is bounded by single row size, not result set size\n");

    println!("This architecture is especially important for:");
    println!("- IoT data processing (millions of sensor readings)");
    println!("- Log analysis (large log files)");
    println!("- ETL workflows (transforming large datasets)");
    println!("- Real-time analytics (processing data streams)");
    println!("- Large reporting queries (financial reports, etc.)");
}