/octosql-rs

WIP PoC rewrite of OctoSQL in Rust

Primary LanguageRustApache License 2.0Apache-2.0

This is a work in progress experiment PoC of rewriting OctoSQL in Rust, as I've been seeing 10-100x performance improvements using a more optimized design.

Development has moved to: https://github.com/cube2222/octosql/tree/rust-rewrite

Roadmap

The current roadmap is to achieve feature parity with the Go version of OctoSQL. When this is done, we'll decide which one gets to stay.

  • Projection
  • Filter
  • GroupBy
    • Support all types
    • More aggregates
    • Wildcard
  • Triggers
    • Counting
    • Delay
  • Retractions
    • Add retractions to Projection (don't allow the user to remove the retraction column)
  • Stream join
    • Float support (currently not tested and possibly wacky)
  • Expressions
    • Evaluation in record context.
    • Evaluation in execution context of variables (if we're in a subquery, we need to understand both the current record, and variables stemming from record flows above us)
    • Common functions / arithmetics. (Currently only comparison operators)
  • Map (evaluate expressions, this is the only place where expressions are evaluated in OctoSQL, everything else gets evaluated expressions passed from here by name)
    • Wildcard
  • Watermarks
    • Metadata Message and Handling
    • Watermark trigger
    • Watermark generators
      • Start with Max difference
  • Shuffle
  • Subqueries
    • Handle all primitive types
    • Handle multiple columns/rows (Tuple values)
  • Lookup join
  • Physical Plan (fit for pattern matching)
    • Basic optimiser
    • Pushing down projections
    • Pushing down filters
  • Logical Plan
  • SQL
    • Temporal Extensions
    • Join
  • Nice output printing
    • CSV
    • JSON
    • Live Table
  • Data Sources
    • CSV
    • MySQL
    • PostgreSQL
    • JSON
    • Parquet
    • Excel
    • Kafka
  • Table Valued Functions
    • Range
    • Tumble
  • Durations and Dates support
    • SQL interval

Contributing

Contributions are welcome!

Please open an issue or contact me personally when you want to try to contribute, so that no work gets duplicated or thrown away.