A functional, in-memory relational database engine and custom Query Domain-Specific Language (DSL) built entirely in Scala.
This project simulates core SQL-like operations using pure functional programming paradigms (immutability, higher-order functions, and algebraic data types). It allows for complex tabular data manipulation, multi-table database management, and advanced filtering logic.
- Core relational algebra operations:
selectfilterinsertdeleteupdate
- Advanced operations:
join(handles overlapping columns and data merging)cartesianProduct
- Sorting capabilities
- Dynamic CSV parsing
- Composable filtering system using Algebraic Data Types (ADTs)
- Supports:
- Predicates (
Field) - Logical operators (
And,Or,Not,Equal) - Collection evaluators (
Any,All)
- Predicates (
- Manages collections of tables
- Supports:
insert(create table)delete(drop table)- update operations
- table selection
- Demonstrates chaining operations:
- filtering with compound conditions
- selecting columns
- sorting results
- Enables extracting meaningful insights from tabular data
src/main/scala/-- Core database engine and DSL implementation\src/test/scala/-- Test suite:TestDatabaseTestFilterTestQueriesTestTable
build.sbt-- Scala Build Tool configuration
The project uses sbt (Scala Build Tool).
# Start sbt shell
sbt
# Run tests
testOr directly:
sbt test- No mutable state (
var) - Uses immutable collections:
ListMap
- Relies on transformations:
mapflatMapfoldLeft
- Extensive use of
Option[T] - Avoids runtime exceptions
- Handles missing or invalid data safely