diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2bae5a0..848ffc2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,3 +28,4 @@ jobs: uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} + files: engine/target/site/jacoco/jacoco.xml diff --git a/.gitignore b/.gitignore index 5d5d7a6..1d2829f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,18 @@ target/ *.iml + +# Eclipse / JDT.LS metadata +.classpath +.project +.settings/ .DS_Store *.class .omo/ -src/test/resources/test_integration_output/ -src/test/resources/test_sample_output/ -src/test/resources/test_integration_queries/ +engine/src/test/resources/test_integration_output/ +engine/src/test/resources/test_sample_output/ +engine/src/test/resources/test_integration_queries/ # local working files dev/ CLAUDE.md +REPORT_*.md diff --git a/AGENTS.md b/AGENTS.md index 841656b..18d8bd9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,142 +6,77 @@ ## OVERVIEW -BlazeDB (artifactId: `java-query-engine`) is an in-memory relational query engine built on the Volcano/iterator model. It parses SQL via JSqlParser, builds an operator tree, and executes tuple-at-a-time over CSV data. The project targets Java 17 and uses JUnit Jupiter 5.10.2, JSqlParser 4.7, and JaCoCo 0.8.12. +CuckooDB (engine module artifactId: `cuckoodb-engine`; parent: `cuckoodb-parent`) is an in-memory relational query engine built on the Volcano/iterator model. It parses SQL via JSqlParser, builds an operator tree, and executes tuple-at-a-time over CSV data. The project targets Java 17 and uses JUnit Jupiter 5.10.2, JSqlParser 4.7, and JaCoCo 0.8.12. ## STRUCTURE ``` -java-query-engine/ -├── pom.xml # Java 17, JSqlParser 4.7, commons-csv 1.14.1, JUnit 5.10.2, JMH 1.37 (test-scope), exec-maven-plugin -├── .gitignore # ignores target/, *.class, .iml, .DS_Store, test output dirs -├── .github/ -│ └── workflows/ -│ └── ci.yml # push/PR to main: build + test + Codecov upload -├── samples/ -│ ├── db/ -│ │ └── data/ # CSV data files (header row + data rows) -│ ├── input/ -│ │ └── query[1-20].sql # 20 sample queries -│ └── expected_output/ -│ └── query[1-20].csv # expected results -└── src/ - ├── main/java/com/github/jinba1/blazedb/ # 35 core files - │ ├── BlazeDB.java - │ ├── QueryPlanner.java - │ ├── QueryPlanOptimizer.java - │ ├── QueryBudget.java - │ ├── QueryBudgetExceededException.java - │ ├── PlannedQuery.java - │ ├── PlanPrinter.java - │ ├── DBCatalog.java - │ ├── ExpressionEvaluator.java - │ ├── ExpressionPreprocessor.java - │ ├── ConditionSplitter.java - │ ├── ColumnExtractor.java - │ ├── ColumnIdentity.java - │ ├── Tuple.java - │ ├── TupleComparator.java - │ ├── SchemaTransformationType.java - │ ├── Constants.java - │ ├── SampleQueryRunner.java - │ ├── Value.java - │ ├── IntValue.java - │ ├── StringValue.java - │ ├── ColumnType.java - │ ├── QueryExecutionException.java - │ ├── AggregateFunction.java - │ ├── AggregateCall.java - │ └── operator/ # 11 operator files (1 abstract base + 10 concrete) - │ ├── Operator.java - │ ├── ScanOperator.java - │ ├── SelectOperator.java - │ ├── ProjectOperator.java - │ ├── JoinOperator.java - │ ├── HashJoinOperator.java - │ ├── SortOperator.java - │ ├── AggregateOperator.java - │ ├── LimitOperator.java - │ ├── Accumulator.java - │ └── DuplicateEliminationOperator.java - └── test/java/com/github/jinba1/blazedb/ # 33 test files (339 tests) - ├── BlazeDBTest.java - ├── ColumnExtractorTest.java - ├── ConditionSplitterTest.java - ├── DBCatalogTest.java - ├── DuplicateEliminationOperatorTest.java - ├── ExplainEndToEndTest.java - ├── ExpressionEvaluatorTest.java - ├── ExpressionPreprocessorTest.java - ├── HashJoinEndToEndTest.java - ├── JoinOperatorTest.java - ├── PlanPrinterTest.java - ├── ProjectOperatorTest.java - ├── QueryBudgetEnforcementTest.java - ├── QueryBudgetTest.java - ├── QueryOptimizationBenchmarkTest.java - ├── QueryPlanOptimizerTest.java - ├── ScanOperatorTest.java - ├── SelectOperatorTest.java - ├── SortOperatorTest.java - ├── AggregateFunctionTest.java - ├── AggregateOperatorTest.java - ├── AggregateLimitEndToEndTest.java - ├── TupleComparatorTest.java - ├── TupleTest.java - ├── TestTuples.java - ├── StringEndToEndTest.java - ├── ValueTest.java - ├── operator/AccumulatorTest.java - ├── operator/BudgetAttachmentTest.java - ├── operator/CachedOperator.java # test utility (not a test class) - ├── operator/CachedOperatorTest.java - ├── operator/HashJoinOperatorTest.java - ├── operator/LimitOperatorTest.java - └── bench/ # JMH benchmarks (compiled in CI, never run in CI) - ├── EndToEndJoinBenchmark.java - └── JoinAlgorithmBenchmark.java +cuckoodb-parent/ # repo root (git slug: java-query-engine) +├── pom.xml # Parent POM: packaging=pom, modules engine+server, dependency/plugin management (Java 17) +├── .gitignore # ignores target/, *.class, .iml, IDE metadata, engine/ test-output dirs +├── .github/workflows/ci.yml # push/PR to main: ./mvnw clean compile + test + Codecov (engine/target/site/jacoco/jacoco.xml) +├── mvnw / mvnw.cmd / .mvn/ # Maven Wrapper (shared, at root) +├── engine/ # cuckoodb-engine — pure query engine, ZERO Spring deps +│ ├── pom.xml # JSqlParser 4.7, commons-csv 1.14.1, JUnit 5.10.2, JMH 1.37 (test); exec + assembly + jacoco +│ ├── samples/ # 20-query golden dataset (moved here from repo root in the module split) +│ │ ├── db/data/ # CSV data files (header row + data rows) +│ │ ├── input/query[1-20].sql # 20 sample queries +│ │ └── expected_output/query[1-20].csv # expected results +│ └── src/ +│ ├── main/java/com/github/jinba1/cuckoodb/ # 35 core files (CuckooDB entry, planner, optimizer, catalog, budgets, Value/Tuple) +│ │ └── operator/ # 11 Volcano operators (base + Scan/Select/Project/Join/HashJoin/Sort/Aggregate/Limit/DuplicateElimination + Accumulator) +│ └── test/java/com/github/jinba1/cuckoodb/ # 33 test files (339 tests) +│ ├── CuckooDBTest.java # incl. testAllSampleQueries — the 20-sample byte-identical gate +│ ├── ConcurrentQueryExecutionTest.java, DBCatalogTest.java, ... # planner / optimizer / budget / EXPLAIN / end-to-end +│ ├── operator/ # operator-level tests + CachedOperator test utility +│ └── bench/ # JMH benchmarks (compiled in CI, never run there): EndToEndJoinBenchmark, JoinAlgorithmBenchmark +└── server/ # cuckoodb-server — REST gateway skeleton; Spring Boot REST gateway planned + ├── pom.xml # depends on cuckoodb-engine (${project.version}); NO Spring yet + └── src/main/java/com/github/jinba1/cuckoodb/server/ServerPlaceholder.java # compile-links an engine type to prove reactor wiring ``` +Per-file responsibilities are in the WHERE TO LOOK table below. + ## WHERE TO LOOK | File | Package | Notes | |------|---------|-------| -| `BlazeDB.java` | `com.github.jinba1.blazedb` | Entry point. `public static void main(String[] args)` takes db-dir, input SQL file, output CSV path, and optional `--max-tuples=N` / `--timeout-ms=N` flags. `static int run(String[] args)` is main minus System.exit (used in tests). Parses via `QueryPlanner.planQuery`, attaches a `QueryBudget` when flags are present, executes via `execute()`, and writes RFC 4180 output (LF line endings). On budget exceeded: deletes partial output, writes `Error: ` to stderr, exits 1. | -| `QueryPlanner.java` | `com.github.jinba1.blazedb` | Translates a SQL file into a `PlannedQuery` via `planQuery(filename)`. For EXPLAIN-prefixed queries, renders before/after operator trees via `PlanPrinter`; returned root is a no-op for EXPLAIN. Builds the scan/join/select/project/group-by/sort/distinct/limit pipeline. Auto-selects `HashJoinOperator` when `Constants.useHashJoin` is true and the join condition contains a column=column equality conjunct; falls back to `JoinOperator` otherwise. | -| `QueryBudget.java` | `com.github.jinba1.blazedb` | Holds per-query kill limits: `QueryBudget(Long maxTuples, Long timeoutMs)` — both nullable (no limit on that axis). `charge()` increments the tuple counter and checks the wall-clock timeout (lazy start at first call); throws `QueryBudgetExceededException` when either limit is exceeded. `processed()` returns the total tuple count so far. | -| `QueryBudgetExceededException.java` | `com.github.jinba1.blazedb` | Unchecked exception thrown by `QueryBudget.charge()` when either the tuple limit or timeout is exceeded. Carries a human-readable message stating which limit was hit. | -| `PlannedQuery.java` | `com.github.jinba1.blazedb` | Record: `PlannedQuery(Operator root, String explainText)`. `explainText` is non-null only for EXPLAIN queries; `root` is a no-op for EXPLAIN queries. | -| `PlanPrinter.java` | `com.github.jinba1.blazedb` | Utility: `static String print(Operator root)` walks the operator tree depth-first and renders it as an indented text plan using each operator's `describe()` line. | -| `QueryPlanOptimizer.java` | `com.github.jinba1.blazedb` | Optimization passes: selection pushdown, trivial project/select removal, consecutive-select merging, projection pushdown. Toggled by Constants.useQueryOptimization. | -| `DBCatalog.java` | `com.github.jinba1.blazedb` | Mutable singleton: CSV-header table discovery + INT/STRING type inference at init. Table-to-path map (dbLocations), table schemas (dbSchemata), column types (dbColumnTypes). initDBCatalog(dir) / resetDBCatalog(); getColumnTypes(), getOrderedColumnNames(). No schema.txt. | -| `ExpressionEvaluator.java` | `com.github.jinba1.blazedb` | JSqlParser visitor evaluating WHERE/HAVING expressions against a Tuple (boolean and Value evaluation). Type-checked comparisons; string literals via StringValue. | -| `ExpressionPreprocessor.java` | `com.github.jinba1.blazedb` | JSqlParser visitor that separates two-table join predicates from single-table selection predicates during planning. | -| `ConditionSplitter.java` | `com.github.jinba1.blazedb` | Splits a join condition into outer-only, inner-only, and true join predicate parts (used by optimizer pushdown). Uses Constants.INTERMEDIATE_SCHEMA_PREFIX. | -| `ColumnExtractor.java` | `com.github.jinba1.blazedb` | Visitor that collects Column references from an expression. | -| `ColumnIdentity.java` | `com.github.jinba1.blazedb` | Value object wrapping a Column with equality/hashCode by table+column name; includes a column-deduplication utility. | -| `Tuple.java` | `com.github.jinba1.blazedb` | Row of typed values: wraps List; getAttribute(i) returns Value, toString() (comma-space separated), equals/hashCode. | -| `TupleComparator.java` | `com.github.jinba1.blazedb` | Comparator for multi-column lexicographic sorting by column indices. | -| `SchemaTransformationType.java` | `com.github.jinba1.blazedb` | Enum marking the kind of schema transformation an operator performs. | -| `Constants.java` | `com.github.jinba1.blazedb` | App constants: useQueryOptimization (boolean, default true), useHashJoin (boolean, default true — set false to force nested-loop for all joins), INTERMEDIATE_SCHEMA_PREFIX = "temp_", DATA_DIRECTORY_NAME = "data". | -| `AggregateFunction.java` | `com.github.jinba1.blazedb` | Enum of supported aggregate functions: SUM, COUNT, AVG, MIN, MAX. `fromFunctionName(String)` maps SQL function names (case-insensitive) to enum values; returns null for unrecognised names. | -| `AggregateCall.java` | `com.github.jinba1.blazedb` | Record holding one parsed aggregate call from the SELECT list: `function` (AggregateFunction), `argument` (JSqlParser Expression; null for COUNT(*)), and `schemaKey` (the output column name as registered). | -| `SampleQueryRunner.java` | `com.github.jinba1.blazedb` | Standalone main that runs all 20 sample queries against samples/db and diffs each output against samples/expected_output/, reporting pass/fail. | -| `Value.java` | `com.github.jinba1.blazedb` | Sealed interface for typed tuple values; permits IntValue, StringValue; extends Comparable; declares typeName(). | -| `IntValue.java` | `com.github.jinba1.blazedb` | Record implementing Value; wraps int v(); compareTo orders numerically. | -| `StringValue.java` | `com.github.jinba1.blazedb` | Record implementing Value; wraps String v(); compareTo orders lexicographically. | -| `ColumnType.java` | `com.github.jinba1.blazedb` | Enum: INT, STRING. Used by DBCatalog and ScanOperator. | -| `QueryExecutionException.java` | `com.github.jinba1.blazedb` | Unchecked exception for data/type errors at runtime; messages state operation, column/literal, and both types for agent-legible diagnostics. | -| `Operator.java` | `com.github.jinba1.blazedb.operator` | Abstract base for all Volcano operators. Defines `getNextTuple()`, `reset()`, `describe()`, schema methods (`propagateSchemaId`, `registerSchema`, `ensureSchemaRegistered`, `updateSchema`). Holds `protected Operator child`, a schemaRegistered flag, `protected long tupleCounter` (benchmarking via `getTupleCount()`/`resetTupleCount()`). Budget methods: `attachBudget(QueryBudget)` propagates the budget to the whole subtree; `protected final void countTuple()` must be called by each concrete operator's `getNextTuple()` on every non-null tuple — this is what enforces total-work semantics. Abstract `describe()` returns a one-line description for `PlanPrinter`. | -| `ScanOperator.java` | `com.github.jinba1.blazedb.operator` | Leaf operator; reads CSV via commons-csv RFC 4180, skips header row, emits typed tuples using column types from DBCatalog. | -| `SelectOperator.java` | `com.github.jinba1.blazedb.operator` | Unary filter; applies a WHERE Expression via ExpressionEvaluator, passing through matching tuples. | -| `ProjectOperator.java` | `com.github.jinba1.blazedb.operator` | Unary; projects a subset of columns, rewriting the schema. | -| `JoinOperator.java` | `com.github.jinba1.blazedb.operator` | Binary nested-loop join; has outerChild and child (inner); optional join condition; propagates merged schema. Used for cross products and pure non-equi joins. | -| `HashJoinOperator.java` | `com.github.jinba1.blazedb.operator` | Extends `JoinOperator`. Build phase drains the inner child into a `HashMap` keyed by equality-conjunct column values; probe phase streams the outer child and probes the map. Re-evaluates the full original condition on every candidate to handle residual non-equi conjuncts. Output order and EXPLAIN label (`HashJoin[...]`) differ from `JoinOperator` (`Join[...]`); auto-selected by `QueryPlanner` for equi-joins when `Constants.useHashJoin` is true. | -| `SortOperator.java` | `com.github.jinba1.blazedb.operator` | Unary; materializes child tuples then sorts via TupleComparator by ORDER BY columns. | -| `AggregateOperator.java` | `com.github.jinba1.blazedb.operator` | Blocking operator for GROUP BY + SUM/COUNT/AVG/MIN/MAX. Groups tuples by key columns, creates one Accumulator per aggregate call per group, then emits one output tuple per group. | -| `Accumulator.java` | `com.github.jinba1.blazedb.operator` | Package-private interface for per-group, per-call aggregate state. `add(Value)` folds one row's argument; `result()` returns the final Value. Static factory `create(AggregateCall)` dispatches to IntSumAccumulator (SUM/AVG), CountAccumulator, or MinMaxAccumulator. | -| `LimitOperator.java` | `com.github.jinba1.blazedb.operator` | Unary; emits at most `limit` tuples from its child then signals EOF. Placed at the top of the plan by the planner. | -| `DuplicateEliminationOperator.java` | `com.github.jinba1.blazedb.operator` | DISTINCT; materializes child tuples into a LinkedHashSet to drop duplicates while preserving first-seen order. | +| `CuckooDB.java` | `com.github.jinba1.cuckoodb` | Entry point. `public static void main(String[] args)` takes db-dir, input SQL file, output CSV path, and optional `--max-tuples=N` / `--timeout-ms=N` flags. `static int run(String[] args)` is main minus System.exit (used in tests). Parses via `QueryPlanner.planQuery`, attaches a `QueryBudget` when flags are present, executes via `execute()`, and writes RFC 4180 output (LF line endings). On budget exceeded: deletes partial output, writes `Error: ` to stderr, exits 1. | +| `QueryPlanner.java` | `com.github.jinba1.cuckoodb` | Translates a SQL file into a `PlannedQuery` via `planQuery(filename)`. For EXPLAIN-prefixed queries, renders before/after operator trees via `PlanPrinter`; returned root is a no-op for EXPLAIN. Builds the scan/join/select/project/group-by/sort/distinct/limit pipeline. Auto-selects `HashJoinOperator` when `Constants.useHashJoin` is true and the join condition contains a column=column equality conjunct; falls back to `JoinOperator` otherwise. | +| `QueryBudget.java` | `com.github.jinba1.cuckoodb` | Holds per-query kill limits: `QueryBudget(Long maxTuples, Long timeoutMs)` — both nullable (no limit on that axis). `charge()` increments the tuple counter and checks the wall-clock timeout (lazy start at first call); throws `QueryBudgetExceededException` when either limit is exceeded. `processed()` returns the total tuple count so far. | +| `QueryBudgetExceededException.java` | `com.github.jinba1.cuckoodb` | Unchecked exception thrown by `QueryBudget.charge()` when either the tuple limit or timeout is exceeded. Carries a human-readable message stating which limit was hit. | +| `PlannedQuery.java` | `com.github.jinba1.cuckoodb` | Record: `PlannedQuery(Operator root, String explainText)`. `explainText` is non-null only for EXPLAIN queries; `root` is a no-op for EXPLAIN queries. | +| `PlanPrinter.java` | `com.github.jinba1.cuckoodb` | Utility: `static String print(Operator root)` walks the operator tree depth-first and renders it as an indented text plan using each operator's `describe()` line. | +| `QueryPlanOptimizer.java` | `com.github.jinba1.cuckoodb` | Optimization passes: selection pushdown, trivial project/select removal, consecutive-select merging, projection pushdown. Toggled by Constants.useQueryOptimization. | +| `DBCatalog.java` | `com.github.jinba1.cuckoodb` | Mutable singleton: CSV-header table discovery + INT/STRING type inference at init. Table-to-path map (dbLocations), table schemas (dbSchemata), column types (dbColumnTypes). initDBCatalog(dir) / resetDBCatalog(); getColumnTypes(), getOrderedColumnNames(). No schema.txt. | +| `ExpressionEvaluator.java` | `com.github.jinba1.cuckoodb` | JSqlParser visitor evaluating WHERE/HAVING expressions against a Tuple (boolean and Value evaluation). Type-checked comparisons; string literals via StringValue. | +| `ExpressionPreprocessor.java` | `com.github.jinba1.cuckoodb` | JSqlParser visitor that separates two-table join predicates from single-table selection predicates during planning. | +| `ConditionSplitter.java` | `com.github.jinba1.cuckoodb` | Splits a join condition into outer-only, inner-only, and true join predicate parts (used by optimizer pushdown). Uses Constants.INTERMEDIATE_SCHEMA_PREFIX. | +| `ColumnExtractor.java` | `com.github.jinba1.cuckoodb` | Visitor that collects Column references from an expression. | +| `ColumnIdentity.java` | `com.github.jinba1.cuckoodb` | Value object wrapping a Column with equality/hashCode by table+column name; includes a column-deduplication utility. | +| `Tuple.java` | `com.github.jinba1.cuckoodb` | Row of typed values: wraps List; getAttribute(i) returns Value, toString() (comma-space separated), equals/hashCode. | +| `TupleComparator.java` | `com.github.jinba1.cuckoodb` | Comparator for multi-column lexicographic sorting by column indices. | +| `SchemaTransformationType.java` | `com.github.jinba1.cuckoodb` | Enum marking the kind of schema transformation an operator performs. | +| `Constants.java` | `com.github.jinba1.cuckoodb` | App constants: useQueryOptimization (boolean, default true), useHashJoin (boolean, default true — set false to force nested-loop for all joins), INTERMEDIATE_SCHEMA_PREFIX = "temp_", DATA_DIRECTORY_NAME = "data". | +| `AggregateFunction.java` | `com.github.jinba1.cuckoodb` | Enum of supported aggregate functions: SUM, COUNT, AVG, MIN, MAX. `fromFunctionName(String)` maps SQL function names (case-insensitive) to enum values; returns null for unrecognised names. | +| `AggregateCall.java` | `com.github.jinba1.cuckoodb` | Record holding one parsed aggregate call from the SELECT list: `function` (AggregateFunction), `argument` (JSqlParser Expression; null for COUNT(*)), and `schemaKey` (the output column name as registered). | +| `SampleQueryRunner.java` | `com.github.jinba1.cuckoodb` | Standalone main that runs all 20 sample queries against samples/db and diffs each output against samples/expected_output/, reporting pass/fail. | +| `Value.java` | `com.github.jinba1.cuckoodb` | Sealed interface for typed tuple values; permits IntValue, StringValue; extends Comparable; declares typeName(). | +| `IntValue.java` | `com.github.jinba1.cuckoodb` | Record implementing Value; wraps int v(); compareTo orders numerically. | +| `StringValue.java` | `com.github.jinba1.cuckoodb` | Record implementing Value; wraps String v(); compareTo orders lexicographically. | +| `ColumnType.java` | `com.github.jinba1.cuckoodb` | Enum: INT, STRING. Used by DBCatalog and ScanOperator. | +| `QueryExecutionException.java` | `com.github.jinba1.cuckoodb` | Unchecked exception for data/type errors at runtime; messages state operation, column/literal, and both types for agent-legible diagnostics. | +| `Operator.java` | `com.github.jinba1.cuckoodb.operator` | Abstract base for all Volcano operators. Defines `getNextTuple()`, `reset()`, `describe()`, schema methods (`propagateSchemaId`, `registerSchema`, `ensureSchemaRegistered`, `updateSchema`). Holds `protected Operator child`, a schemaRegistered flag, `protected long tupleCounter` (benchmarking via `getTupleCount()`/`resetTupleCount()`). Budget methods: `attachBudget(QueryBudget)` propagates the budget to the whole subtree; `protected final void countTuple()` must be called by each concrete operator's `getNextTuple()` on every non-null tuple — this is what enforces total-work semantics. Abstract `describe()` returns a one-line description for `PlanPrinter`. | +| `ScanOperator.java` | `com.github.jinba1.cuckoodb.operator` | Leaf operator; reads CSV via commons-csv RFC 4180, skips header row, emits typed tuples using column types from DBCatalog. | +| `SelectOperator.java` | `com.github.jinba1.cuckoodb.operator` | Unary filter; applies a WHERE Expression via ExpressionEvaluator, passing through matching tuples. | +| `ProjectOperator.java` | `com.github.jinba1.cuckoodb.operator` | Unary; projects a subset of columns, rewriting the schema. | +| `JoinOperator.java` | `com.github.jinba1.cuckoodb.operator` | Binary nested-loop join; has outerChild and child (inner); optional join condition; propagates merged schema. Used for cross products and pure non-equi joins. | +| `HashJoinOperator.java` | `com.github.jinba1.cuckoodb.operator` | Extends `JoinOperator`. Build phase drains the inner child into a `HashMap` keyed by equality-conjunct column values; probe phase streams the outer child and probes the map. Re-evaluates the full original condition on every candidate to handle residual non-equi conjuncts. Output order and EXPLAIN label (`HashJoin[...]`) differ from `JoinOperator` (`Join[...]`); auto-selected by `QueryPlanner` for equi-joins when `Constants.useHashJoin` is true. | +| `SortOperator.java` | `com.github.jinba1.cuckoodb.operator` | Unary; materializes child tuples then sorts via TupleComparator by ORDER BY columns. | +| `AggregateOperator.java` | `com.github.jinba1.cuckoodb.operator` | Blocking operator for GROUP BY + SUM/COUNT/AVG/MIN/MAX. Groups tuples by key columns, creates one Accumulator per aggregate call per group, then emits one output tuple per group. | +| `Accumulator.java` | `com.github.jinba1.cuckoodb.operator` | Package-private interface for per-group, per-call aggregate state. `add(Value)` folds one row's argument; `result()` returns the final Value. Static factory `create(AggregateCall)` dispatches to IntSumAccumulator (SUM/AVG), CountAccumulator, or MinMaxAccumulator. | +| `LimitOperator.java` | `com.github.jinba1.cuckoodb.operator` | Unary; emits at most `limit` tuples from its child then signals EOF. Placed at the top of the plan by the planner. | +| `DuplicateEliminationOperator.java` | `com.github.jinba1.cuckoodb.operator` | DISTINCT; materializes child tuples into a LinkedHashSet to drop duplicates while preserving first-seen order. | ## CONVENTIONS @@ -158,37 +93,41 @@ java-query-engine/ # Run the full test suite (339 tests) ./mvnw test -# Build the fat JAR explicitly -./mvnw clean compile assembly:single +# Build the fat JAR (engine module; assembly is bound to the package phase) +./mvnw -pl engine -DskipTests clean package -# Build the fat JAR via the package phase (assembly plugin is bound to package phase — also works) +# Or build the whole reactor (engine fat JAR + server skeleton), running tests ./mvnw clean package # The fat JAR is always produced at: -# target/java-query-engine-1.0.0-jar-with-dependencies.jar +# engine/target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar # Run a query (example: query1.sql) -java -cp target/java-query-engine-1.0.0-jar-with-dependencies.jar \ - com.github.jinba1.blazedb.BlazeDB \ - samples/db \ - samples/input/query1.sql \ +java -cp engine/target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar \ + com.github.jinba1.cuckoodb.CuckooDB \ + engine/samples/db \ + engine/samples/input/query1.sql \ output.csv # Run a query with budget flags (both optional, independent) -java -cp target/java-query-engine-1.0.0-jar-with-dependencies.jar \ - com.github.jinba1.blazedb.BlazeDB \ - samples/db \ - samples/input/query1.sql \ +java -cp engine/target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar \ + com.github.jinba1.cuckoodb.CuckooDB \ + engine/samples/db \ + engine/samples/input/query1.sql \ output.csv \ --max-tuples=50000 \ --timeout-ms=10000 -# Run all 20 sample queries via the automated runner -java -cp target/java-query-engine-1.0.0-jar-with-dependencies.jar \ - com.github.jinba1.blazedb.SampleQueryRunner +# Run all 20 sample queries via the automated runner. +# SampleQueryRunner.main resolves samples/ against the CWD, so it MUST run with +# CWD = engine/. exec:java keeps CWD at the reactor root (would not find samples/); +# exec:exec forks with workingDirectory = engine/ basedir, so use this form +# (or: cd engine && java -cp target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar com.github.jinba1.cuckoodb.SampleQueryRunner). +./mvnw -pl engine -q test-compile exec:exec -Dexec.executable=java -Dexec.classpathScope=test \ + "-Dexec.args=-cp %classpath com.github.jinba1.cuckoodb.SampleQueryRunner" # Run the JMH benchmark suite (exec:java breaks JMH forking; use this exact form) -./mvnw -q test-compile exec:exec -Dexec.executable=java -Dexec.classpathScope=test \ +./mvnw -pl engine -q test-compile exec:exec -Dexec.executable=java -Dexec.classpathScope=test \ "-Dexec.args=-cp %classpath org.openjdk.jmh.Main .*Benchmark" ``` @@ -209,8 +148,8 @@ The README displays CI, Coverage (Codecov), and Dependencies badges at the top. - The benchmarking/tuple-counter infrastructure was introduced in commit `ef92ca1` ("feat: add query optimization benchmark suite with tuple counters"): `Operator` gained `protected long tupleCounter` with `getTupleCount()` / `resetTupleCount()`, and `QueryOptimizationBenchmarkTest` was added as one of the test files. - Budget enforcement reuses the tuple-counter slot: `countTuple()` (called per emitted tuple) increments `tupleCounter` and delegates to `QueryBudget.charge()` when a budget is attached. This means every operator in the tree counts — total-work semantics. - `SampleQueryRunner.java` provides an automated 20-query diff runner: it runs all queries in `samples/input/` against `samples/db/` and diffs each result against `samples/expected_output/`, reporting pass/fail. There is no need to diff manually. -- A `.gitignore` exists at the repository root. It ignores `target/`, `*.iml`, `.DS_Store`, `*.class`, `.omo/`, and the test-resource output directories (`src/test/resources/test_integration_output/`, `src/test/resources/test_sample_output/`, `src/test/resources/test_integration_queries/`). +- A `.gitignore` exists at the repository root. It ignores `target/`, `*.iml`, `.DS_Store`, `*.class`, `.omo/`, and the engine-module test-resource output directories (`engine/src/test/resources/test_integration_output/`, `engine/src/test/resources/test_sample_output/`, `engine/src/test/resources/test_integration_queries/`). - Query output includes a header row (column names, plain commas) followed by data rows (plain comma-separated, LF). Output is RFC 4180 and is round-trippable as input to this engine. -- EXPLAIN queries write the two-section plan text to the output file and do not execute the query. The plan root returned by `QueryPlanner.planQuery` for EXPLAIN is a no-op; `BlazeDB.run` short-circuits before operator iteration when `explainText` is non-null. +- EXPLAIN queries write the two-section plan text to the output file and do not execute the query. The plan root returned by `QueryPlanner.planQuery` for EXPLAIN is a no-op; `CuckooDB.run` short-circuits before operator iteration when `explainText` is non-null. - Hash join is the default for equi-joins (`Constants.useHashJoin = true`). Set it to `false` in tests (via `@BeforeEach`/`@AfterEach`) to exercise the nested-loop path. `HashJoinOperator.hasEquiConjunct(Expression)` is the planner's check for at least one cross-side column=column equality in the condition. -- The JMH 1.37 benchmark suite lives in `src/test/java/com/github/jinba1/blazedb/bench/`. It is compiled as part of `test-compile` in CI but never executed there. `CachedOperator` (in `src/test/java/.../operator/`) is a test utility operator that replays a fixed in-memory tuple list — used by `JoinAlgorithmBenchmark` to isolate join algorithm cost from CSV I/O. The `bench/` package classes are JMH benchmarks and do not contain JUnit tests. +- The JMH 1.37 benchmark suite lives in `engine/src/test/java/com/github/jinba1/cuckoodb/bench/`. It is compiled as part of `test-compile` in CI but never executed there. `CachedOperator` (in `engine/src/test/java/.../operator/`) is a test utility operator that replays a fixed in-memory tuple list — used by `JoinAlgorithmBenchmark` to isolate join algorithm cost from CSV I/O. The `bench/` package classes are JMH benchmarks and do not contain JUnit tests. diff --git a/BENCHMARK_RESULTS.md b/BENCHMARK_RESULTS.md index 6ab200d..8570e2b 100644 --- a/BENCHMARK_RESULTS.md +++ b/BENCHMARK_RESULTS.md @@ -2,7 +2,7 @@ ## Overview -This document contains quantifiable performance results from the query optimization benchmark suite added to BlazeDB. The benchmarks measure tuple processing reduction achieved by rule-based query optimizations. +This document contains quantifiable performance results from the query optimization benchmark suite added to CuckooDB. The benchmarks measure tuple processing reduction achieved by rule-based query optimizations. ## Benchmark Methodology diff --git a/README.md b/README.md index fa198d9..20e4041 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Java Query Engine +# cuckooDB ![CI](https://github.com/JinBa1/java-query-engine/actions/workflows/ci.yml/badge.svg) ![Coverage](https://codecov.io/gh/JinBa1/java-query-engine/branch/main/graph/badge.svg) @@ -83,15 +83,15 @@ The focus is on demonstrating query planning, optimisation, and the Volcano iter git clone https://github.com/JinBa1/java-query-engine.git cd java-query-engine -# Build fat JAR -./mvnw clean compile assembly:single +# Build fat JAR (engine module) +./mvnw -pl engine -DskipTests clean package ``` **Run a query:** ```bash -java -cp target/java-query-engine-1.0.0-jar-with-dependencies.jar \ - com.github.jinba1.blazedb.BlazeDB \ +java -cp engine/target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar \ + com.github.jinba1.cuckoodb.CuckooDB \ database_dir input_file output_file [--max-tuples=N] [--timeout-ms=N] ``` @@ -159,10 +159,10 @@ The engine supports two join algorithms; the planner selects between them automa ### Benchmarks -Performance was measured with a JMH 1.37 benchmark suite in the `bench/` package (`src/test/java/com/github/jinba1/blazedb/bench/`). The suite is compiled in CI but never run there; run it locally with: +Performance was measured with a JMH 1.37 benchmark suite in the `bench/` package (`engine/src/test/java/com/github/jinba1/cuckoodb/bench/`). The suite is compiled in CI but never run there; run it locally with: ```bash -./mvnw -q test-compile exec:exec -Dexec.executable=java -Dexec.classpathScope=test \ +./mvnw -pl engine -q test-compile exec:exec -Dexec.executable=java -Dexec.classpathScope=test \ "-Dexec.args=-cp %classpath org.openjdk.jmh.Main .*Benchmark" ``` @@ -187,7 +187,7 @@ Benchmarks are compiled in CI but never executed there. ## Demo -**Input table** (`samples/db/data/Student.csv`): +**Input table** (`engine/samples/db/data/Student.csv`): ``` A, B, C, D @@ -199,7 +199,7 @@ A, B, C, D 6, 300, 400, 11 ``` -**Query** (`samples/input/query4.sql`): +**Query** (`engine/samples/input/query4.sql`): ```sql SELECT * FROM Student WHERE Student.A < 3; @@ -208,17 +208,17 @@ SELECT * FROM Student WHERE Student.A < 3; **Command:** ```bash -java -cp target/java-query-engine-1.0.0-jar-with-dependencies.jar \ - com.github.jinba1.blazedb.BlazeDB \ - samples/db samples/input/query4.sql output.csv +java -cp engine/target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar \ + com.github.jinba1.cuckoodb.CuckooDB \ + engine/samples/db engine/samples/input/query4.sql output.csv ``` To limit resource usage, add optional budget flags: ```bash -java -cp target/java-query-engine-1.0.0-jar-with-dependencies.jar \ - com.github.jinba1.blazedb.BlazeDB \ - samples/db samples/input/query4.sql output.csv --max-tuples=10000 --timeout-ms=5000 +java -cp engine/target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar \ + com.github.jinba1.cuckoodb.CuckooDB \ + engine/samples/db engine/samples/input/query4.sql output.csv --max-tuples=10000 --timeout-ms=5000 ``` **Output** (`output.csv`): @@ -231,15 +231,24 @@ a,b,c,d ## Running Examples -The `samples/` directory ships with 20 queries and a small dataset (Student, Course, Enrolled, Staff tables). Expected output lives in `samples/expected_output/`. +The `engine/samples/` directory ships with 20 queries and a small dataset (Student, Course, Enrolled, Staff tables). Expected output lives in `engine/samples/expected_output/`. + +Run all 20 through the bundled runner, which diffs each result against the expected output and reports pass/fail. It is launched via `exec:exec` (not `exec:java`) so it runs with the engine module as the working directory — `exec:java` would keep the working directory at the reactor root and fail to find `samples/`: + +```bash +./mvnw -pl engine -q test-compile exec:exec -Dexec.executable=java -Dexec.classpathScope=test \ + "-Dexec.args=-cp %classpath com.github.jinba1.cuckoodb.SampleQueryRunner" +``` + +Or run each query through the CLI and diff manually: ```bash # Run all sample queries and diff against expected output for i in $(seq 1 20); do - java -cp target/java-query-engine-1.0.0-jar-with-dependencies.jar \ - com.github.jinba1.blazedb.BlazeDB \ - samples/db "samples/input/query${i}.sql" "/tmp/out${i}.csv" - diff "samples/expected_output/query${i}.csv" "/tmp/out${i}.csv" && echo "query${i}: OK" + java -cp engine/target/cuckoodb-engine-1.0.0-jar-with-dependencies.jar \ + com.github.jinba1.cuckoodb.CuckooDB \ + engine/samples/db "engine/samples/input/query${i}.sql" "/tmp/out${i}.csv" + diff "engine/samples/expected_output/query${i}.csv" "/tmp/out${i}.csv" && echo "query${i}: OK" done ``` @@ -254,15 +263,20 @@ The test suite covers individual operators, the query planner, the optimiser, ex ## Project Structure ``` -├── src/main/java/com/github/jinba1/blazedb/ # Core engine (35 files) -│ └── operator/ # Volcano operators (11 files, incl. HashJoinOperator) -├── src/test/java/com/github/jinba1/blazedb/ # JUnit 5 tests (339 tests across 33 files) -├── samples/ -│ ├── db/data/ # CSV data files (header row + data rows) -│ ├── input/query[1-20].sql # Sample queries -│ └── expected_output/query[1-20].csv # Expected results -├── pom.xml # Maven config (Java 17, JSqlParser 4.7, commons-csv 1.14.1, JMH 1.37 test-scope) -├── mvnw / mvnw.cmd # Maven Wrapper +├── pom.xml # Parent POM (aggregator: engine + server; Java 17, dep/plugin management) +├── engine/ # Pure query engine — zero Spring dependencies +│ ├── pom.xml # cuckoodb-engine (JSqlParser 4.7, commons-csv 1.14.1, JMH 1.37 test-scope) +│ ├── src/main/java/com/github/jinba1/cuckoodb/ # Core engine (35 files) +│ │ └── operator/ # Volcano operators (11 files, incl. HashJoinOperator) +│ ├── src/test/java/com/github/jinba1/cuckoodb/ # JUnit 5 tests (339 tests across 33 files) +│ └── samples/ +│ ├── db/data/ # CSV data files (header row + data rows) +│ ├── input/query[1-20].sql # Sample queries +│ └── expected_output/query[1-20].csv # Expected results +├── server/ # REST gateway skeleton — Spring Boot REST gateway planned +│ ├── pom.xml # cuckoodb-server (depends on cuckoodb-engine; no Spring yet) +│ └── src/main/java/com/github/jinba1/cuckoodb/server/ +├── mvnw / mvnw.cmd # Maven Wrapper └── LICENSE ``` diff --git a/engine/pom.xml b/engine/pom.xml new file mode 100644 index 0000000..dc1745d --- /dev/null +++ b/engine/pom.xml @@ -0,0 +1,123 @@ + + + + 4.0.0 + + + com.github.jinba1 + cuckoodb-parent + 1.0.0 + ../pom.xml + + + cuckoodb-engine + jar + + cuckooDB Engine + + + + com.github.jsqlparser + jsqlparser + + + org.apache.commons + commons-csv + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.openjdk.jmh + jmh-core + test + + + org.openjdk.jmh + jmh-generator-annprocess + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + + + org.codehaus.mojo + exec-maven-plugin + + + run-cuckoodb + + java + + + com.github.jinba1.cuckoodb.CuckooDB + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + com.github.jinba1.cuckoodb.CuckooDB + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + org.jacoco + jacoco-maven-plugin + + + + prepare-agent + + + + report + test + + report + + + + + + + diff --git a/samples/db/data/Course.csv b/engine/samples/db/data/Course.csv similarity index 100% rename from samples/db/data/Course.csv rename to engine/samples/db/data/Course.csv diff --git a/samples/db/data/Enrolled.csv b/engine/samples/db/data/Enrolled.csv similarity index 100% rename from samples/db/data/Enrolled.csv rename to engine/samples/db/data/Enrolled.csv diff --git a/samples/db/data/Staff.csv b/engine/samples/db/data/Staff.csv similarity index 100% rename from samples/db/data/Staff.csv rename to engine/samples/db/data/Staff.csv diff --git a/samples/db/data/Student.csv b/engine/samples/db/data/Student.csv similarity index 100% rename from samples/db/data/Student.csv rename to engine/samples/db/data/Student.csv diff --git a/samples/expected_output/query1.csv b/engine/samples/expected_output/query1.csv similarity index 100% rename from samples/expected_output/query1.csv rename to engine/samples/expected_output/query1.csv diff --git a/samples/expected_output/query10.csv b/engine/samples/expected_output/query10.csv similarity index 100% rename from samples/expected_output/query10.csv rename to engine/samples/expected_output/query10.csv diff --git a/samples/expected_output/query11.csv b/engine/samples/expected_output/query11.csv similarity index 100% rename from samples/expected_output/query11.csv rename to engine/samples/expected_output/query11.csv diff --git a/samples/expected_output/query12.csv b/engine/samples/expected_output/query12.csv similarity index 100% rename from samples/expected_output/query12.csv rename to engine/samples/expected_output/query12.csv diff --git a/samples/expected_output/query13.csv b/engine/samples/expected_output/query13.csv similarity index 100% rename from samples/expected_output/query13.csv rename to engine/samples/expected_output/query13.csv diff --git a/samples/expected_output/query14.csv b/engine/samples/expected_output/query14.csv similarity index 100% rename from samples/expected_output/query14.csv rename to engine/samples/expected_output/query14.csv diff --git a/samples/expected_output/query15.csv b/engine/samples/expected_output/query15.csv similarity index 100% rename from samples/expected_output/query15.csv rename to engine/samples/expected_output/query15.csv diff --git a/samples/expected_output/query16.csv b/engine/samples/expected_output/query16.csv similarity index 100% rename from samples/expected_output/query16.csv rename to engine/samples/expected_output/query16.csv diff --git a/samples/expected_output/query17.csv b/engine/samples/expected_output/query17.csv similarity index 100% rename from samples/expected_output/query17.csv rename to engine/samples/expected_output/query17.csv diff --git a/samples/expected_output/query18.csv b/engine/samples/expected_output/query18.csv similarity index 100% rename from samples/expected_output/query18.csv rename to engine/samples/expected_output/query18.csv diff --git a/samples/expected_output/query19.csv b/engine/samples/expected_output/query19.csv similarity index 100% rename from samples/expected_output/query19.csv rename to engine/samples/expected_output/query19.csv diff --git a/samples/expected_output/query2.csv b/engine/samples/expected_output/query2.csv similarity index 100% rename from samples/expected_output/query2.csv rename to engine/samples/expected_output/query2.csv diff --git a/samples/expected_output/query20.csv b/engine/samples/expected_output/query20.csv similarity index 100% rename from samples/expected_output/query20.csv rename to engine/samples/expected_output/query20.csv diff --git a/samples/expected_output/query3.csv b/engine/samples/expected_output/query3.csv similarity index 100% rename from samples/expected_output/query3.csv rename to engine/samples/expected_output/query3.csv diff --git a/samples/expected_output/query4.csv b/engine/samples/expected_output/query4.csv similarity index 100% rename from samples/expected_output/query4.csv rename to engine/samples/expected_output/query4.csv diff --git a/samples/expected_output/query5.csv b/engine/samples/expected_output/query5.csv similarity index 100% rename from samples/expected_output/query5.csv rename to engine/samples/expected_output/query5.csv diff --git a/samples/expected_output/query6.csv b/engine/samples/expected_output/query6.csv similarity index 100% rename from samples/expected_output/query6.csv rename to engine/samples/expected_output/query6.csv diff --git a/samples/expected_output/query7.csv b/engine/samples/expected_output/query7.csv similarity index 100% rename from samples/expected_output/query7.csv rename to engine/samples/expected_output/query7.csv diff --git a/samples/expected_output/query8.csv b/engine/samples/expected_output/query8.csv similarity index 100% rename from samples/expected_output/query8.csv rename to engine/samples/expected_output/query8.csv diff --git a/samples/expected_output/query9.csv b/engine/samples/expected_output/query9.csv similarity index 100% rename from samples/expected_output/query9.csv rename to engine/samples/expected_output/query9.csv diff --git a/samples/input/query1.sql b/engine/samples/input/query1.sql similarity index 100% rename from samples/input/query1.sql rename to engine/samples/input/query1.sql diff --git a/samples/input/query10.sql b/engine/samples/input/query10.sql similarity index 100% rename from samples/input/query10.sql rename to engine/samples/input/query10.sql diff --git a/samples/input/query11.sql b/engine/samples/input/query11.sql similarity index 100% rename from samples/input/query11.sql rename to engine/samples/input/query11.sql diff --git a/samples/input/query12.sql b/engine/samples/input/query12.sql similarity index 100% rename from samples/input/query12.sql rename to engine/samples/input/query12.sql diff --git a/samples/input/query13.sql b/engine/samples/input/query13.sql similarity index 100% rename from samples/input/query13.sql rename to engine/samples/input/query13.sql diff --git a/samples/input/query14.sql b/engine/samples/input/query14.sql similarity index 100% rename from samples/input/query14.sql rename to engine/samples/input/query14.sql diff --git a/samples/input/query15.sql b/engine/samples/input/query15.sql similarity index 100% rename from samples/input/query15.sql rename to engine/samples/input/query15.sql diff --git a/samples/input/query16.sql b/engine/samples/input/query16.sql similarity index 100% rename from samples/input/query16.sql rename to engine/samples/input/query16.sql diff --git a/samples/input/query17.sql b/engine/samples/input/query17.sql similarity index 100% rename from samples/input/query17.sql rename to engine/samples/input/query17.sql diff --git a/samples/input/query18.sql b/engine/samples/input/query18.sql similarity index 100% rename from samples/input/query18.sql rename to engine/samples/input/query18.sql diff --git a/samples/input/query19.sql b/engine/samples/input/query19.sql similarity index 100% rename from samples/input/query19.sql rename to engine/samples/input/query19.sql diff --git a/samples/input/query2.sql b/engine/samples/input/query2.sql similarity index 100% rename from samples/input/query2.sql rename to engine/samples/input/query2.sql diff --git a/samples/input/query20.sql b/engine/samples/input/query20.sql similarity index 100% rename from samples/input/query20.sql rename to engine/samples/input/query20.sql diff --git a/samples/input/query3.sql b/engine/samples/input/query3.sql similarity index 100% rename from samples/input/query3.sql rename to engine/samples/input/query3.sql diff --git a/samples/input/query4.sql b/engine/samples/input/query4.sql similarity index 100% rename from samples/input/query4.sql rename to engine/samples/input/query4.sql diff --git a/samples/input/query5.sql b/engine/samples/input/query5.sql similarity index 100% rename from samples/input/query5.sql rename to engine/samples/input/query5.sql diff --git a/samples/input/query6.sql b/engine/samples/input/query6.sql similarity index 100% rename from samples/input/query6.sql rename to engine/samples/input/query6.sql diff --git a/samples/input/query7.sql b/engine/samples/input/query7.sql similarity index 100% rename from samples/input/query7.sql rename to engine/samples/input/query7.sql diff --git a/samples/input/query8.sql b/engine/samples/input/query8.sql similarity index 100% rename from samples/input/query8.sql rename to engine/samples/input/query8.sql diff --git a/samples/input/query9.sql b/engine/samples/input/query9.sql similarity index 100% rename from samples/input/query9.sql rename to engine/samples/input/query9.sql diff --git a/src/main/java/com/github/jinba1/blazedb/AggregateCall.java b/engine/src/main/java/com/github/jinba1/cuckoodb/AggregateCall.java similarity index 93% rename from src/main/java/com/github/jinba1/blazedb/AggregateCall.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/AggregateCall.java index 76bf1bb..f2e513b 100644 --- a/src/main/java/com/github/jinba1/blazedb/AggregateCall.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/AggregateCall.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import net.sf.jsqlparser.expression.Expression; diff --git a/src/main/java/com/github/jinba1/blazedb/AggregateFunction.java b/engine/src/main/java/com/github/jinba1/cuckoodb/AggregateFunction.java similarity index 94% rename from src/main/java/com/github/jinba1/blazedb/AggregateFunction.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/AggregateFunction.java index 3364e21..9893a04 100644 --- a/src/main/java/com/github/jinba1/blazedb/AggregateFunction.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/AggregateFunction.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * The aggregate functions supported in SELECT lists. diff --git a/src/main/java/com/github/jinba1/blazedb/ColumnExtractor.java b/engine/src/main/java/com/github/jinba1/cuckoodb/ColumnExtractor.java similarity index 97% rename from src/main/java/com/github/jinba1/blazedb/ColumnExtractor.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/ColumnExtractor.java index d9a7a77..8d7c971 100644 --- a/src/main/java/com/github/jinba1/blazedb/ColumnExtractor.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/ColumnExtractor.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import net.sf.jsqlparser.expression.ExpressionVisitorAdapter; import net.sf.jsqlparser.schema.Column; diff --git a/src/main/java/com/github/jinba1/blazedb/ColumnIdentity.java b/engine/src/main/java/com/github/jinba1/cuckoodb/ColumnIdentity.java similarity index 98% rename from src/main/java/com/github/jinba1/blazedb/ColumnIdentity.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/ColumnIdentity.java index 86a0342..8f0e480 100644 --- a/src/main/java/com/github/jinba1/blazedb/ColumnIdentity.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/ColumnIdentity.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import net.sf.jsqlparser.schema.Column; diff --git a/src/main/java/com/github/jinba1/blazedb/ColumnType.java b/engine/src/main/java/com/github/jinba1/cuckoodb/ColumnType.java similarity index 68% rename from src/main/java/com/github/jinba1/blazedb/ColumnType.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/ColumnType.java index 234be87..9827ed0 100644 --- a/src/main/java/com/github/jinba1/blazedb/ColumnType.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/ColumnType.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** The data type of a table column. */ public enum ColumnType { INT, STRING } diff --git a/src/main/java/com/github/jinba1/blazedb/ConditionSplitter.java b/engine/src/main/java/com/github/jinba1/cuckoodb/ConditionSplitter.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/ConditionSplitter.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/ConditionSplitter.java index 29442cf..d574c60 100644 --- a/src/main/java/com/github/jinba1/blazedb/ConditionSplitter.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/ConditionSplitter.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import net.sf.jsqlparser.expression.BinaryExpression; import net.sf.jsqlparser.expression.Expression; diff --git a/src/main/java/com/github/jinba1/blazedb/Constants.java b/engine/src/main/java/com/github/jinba1/cuckoodb/Constants.java similarity index 84% rename from src/main/java/com/github/jinba1/blazedb/Constants.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/Constants.java index ac20d3a..48f703e 100644 --- a/src/main/java/com/github/jinba1/blazedb/Constants.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/Constants.java @@ -1,7 +1,7 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** - * Defines global constants used throughout the BlazeDB system. + * Defines global constants used throughout the CuckooDB system. * This class contains application-wide constants to ensure consistency * and reduce duplication across the codebase. These include file and directory names, * schema prefixes, and other string literals used for database operations. diff --git a/src/main/java/com/github/jinba1/blazedb/BlazeDB.java b/engine/src/main/java/com/github/jinba1/cuckoodb/CuckooDB.java similarity index 95% rename from src/main/java/com/github/jinba1/blazedb/BlazeDB.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/CuckooDB.java index 1ad901a..511a421 100644 --- a/src/main/java/com/github/jinba1/blazedb/BlazeDB.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/CuckooDB.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import java.io.*; import java.nio.file.Files; @@ -9,14 +9,14 @@ import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; -import com.github.jinba1.blazedb.operator.LimitOperator; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.LimitOperator; +import com.github.jinba1.cuckoodb.operator.Operator; /** * Lightweight in-memory relational query engine. * CLI interface: database_dir input_file output_file [--max-tuples=N] [--timeout-ms=N] */ -public class BlazeDB { +public class CuckooDB { public static void main(String[] args) { int code = run(args); if (code != 0) { @@ -99,7 +99,7 @@ static int run(String[] args) { private static void usage() { System.err.println( - "Usage: BlazeDB database_dir input_file output_file [--max-tuples=N] [--timeout-ms=N]"); + "Usage: CuckooDB database_dir input_file output_file [--max-tuples=N] [--timeout-ms=N]"); } /** diff --git a/src/main/java/com/github/jinba1/blazedb/DBCatalog.java b/engine/src/main/java/com/github/jinba1/cuckoodb/DBCatalog.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/DBCatalog.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/DBCatalog.java index c30c553..0360d24 100644 --- a/src/main/java/com/github/jinba1/blazedb/DBCatalog.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/DBCatalog.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; @@ -13,7 +13,7 @@ import java.util.stream.Stream; /** - * The DBCatalog class serves as a central repository for durable database metadata in BlazeDB. + * The DBCatalog class serves as a central repository for durable database metadata in CuckooDB. * It implements the singleton pattern to ensure a single, consistent view of database structure * across all components of the system. * This class maintains information about: diff --git a/src/main/java/com/github/jinba1/blazedb/ErrorCode.java b/engine/src/main/java/com/github/jinba1/cuckoodb/ErrorCode.java similarity index 96% rename from src/main/java/com/github/jinba1/blazedb/ErrorCode.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/ErrorCode.java index 509aec9..57eda50 100644 --- a/src/main/java/com/github/jinba1/blazedb/ErrorCode.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/ErrorCode.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * Machine-readable category for a {@link QueryExecutionException}. Downstream surfaces diff --git a/src/main/java/com/github/jinba1/blazedb/ExpressionEvaluator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/ExpressionEvaluator.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/ExpressionEvaluator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/ExpressionEvaluator.java index ece34f4..815d569 100644 --- a/src/main/java/com/github/jinba1/blazedb/ExpressionEvaluator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/ExpressionEvaluator.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import net.sf.jsqlparser.expression.BinaryExpression; import net.sf.jsqlparser.expression.Expression; diff --git a/src/main/java/com/github/jinba1/blazedb/ExpressionPreprocessor.java b/engine/src/main/java/com/github/jinba1/cuckoodb/ExpressionPreprocessor.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/ExpressionPreprocessor.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/ExpressionPreprocessor.java index 5e68606..6f50844 100644 --- a/src/main/java/com/github/jinba1/blazedb/ExpressionPreprocessor.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/ExpressionPreprocessor.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import net.sf.jsqlparser.expression.BinaryExpression; import net.sf.jsqlparser.expression.Expression; diff --git a/src/main/java/com/github/jinba1/blazedb/IntValue.java b/engine/src/main/java/com/github/jinba1/cuckoodb/IntValue.java similarity index 94% rename from src/main/java/com/github/jinba1/blazedb/IntValue.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/IntValue.java index ca4a22d..4308699 100644 --- a/src/main/java/com/github/jinba1/blazedb/IntValue.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/IntValue.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** An integer attribute value. */ public record IntValue(int v) implements Value { diff --git a/src/main/java/com/github/jinba1/blazedb/PlanContext.java b/engine/src/main/java/com/github/jinba1/cuckoodb/PlanContext.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/PlanContext.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/PlanContext.java index 1317527..2f7ab62 100644 --- a/src/main/java/com/github/jinba1/blazedb/PlanContext.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/PlanContext.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import java.util.*; diff --git a/src/main/java/com/github/jinba1/blazedb/PlanPrinter.java b/engine/src/main/java/com/github/jinba1/cuckoodb/PlanPrinter.java similarity index 86% rename from src/main/java/com/github/jinba1/blazedb/PlanPrinter.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/PlanPrinter.java index 2b20692..ef8f44f 100644 --- a/src/main/java/com/github/jinba1/blazedb/PlanPrinter.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/PlanPrinter.java @@ -1,7 +1,7 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; -import com.github.jinba1.blazedb.operator.JoinOperator; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.JoinOperator; +import com.github.jinba1.cuckoodb.operator.Operator; /** * Renders an operator tree as an indented, human-readable plan: one operator per line diff --git a/src/main/java/com/github/jinba1/blazedb/PlannedQuery.java b/engine/src/main/java/com/github/jinba1/cuckoodb/PlannedQuery.java similarity index 77% rename from src/main/java/com/github/jinba1/blazedb/PlannedQuery.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/PlannedQuery.java index f2b4e67..0e8e8e2 100644 --- a/src/main/java/com/github/jinba1/blazedb/PlannedQuery.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/PlannedQuery.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.Operator; /** * Result of planning one query file. diff --git a/src/main/java/com/github/jinba1/blazedb/QueryBudget.java b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryBudget.java similarity index 98% rename from src/main/java/com/github/jinba1/blazedb/QueryBudget.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/QueryBudget.java index 6c51950..24c9413 100644 --- a/src/main/java/com/github/jinba1/blazedb/QueryBudget.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryBudget.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * Per-query execution budget: caps total tuples processed across all operators and/or diff --git a/src/main/java/com/github/jinba1/blazedb/QueryBudgetExceededException.java b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryBudgetExceededException.java similarity index 93% rename from src/main/java/com/github/jinba1/blazedb/QueryBudgetExceededException.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/QueryBudgetExceededException.java index c43035d..c2dfa08 100644 --- a/src/main/java/com/github/jinba1/blazedb/QueryBudgetExceededException.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryBudgetExceededException.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * Thrown when a query exceeds its {@link QueryBudget} (tuples processed or wall-clock time). diff --git a/src/main/java/com/github/jinba1/blazedb/QueryConfig.java b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryConfig.java similarity index 94% rename from src/main/java/com/github/jinba1/blazedb/QueryConfig.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/QueryConfig.java index 5265d45..eca5781 100644 --- a/src/main/java/com/github/jinba1/blazedb/QueryConfig.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryConfig.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * Per-query planner configuration. Replaces the former mutable static flags in diff --git a/src/main/java/com/github/jinba1/blazedb/QueryExecutionException.java b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryExecutionException.java similarity index 96% rename from src/main/java/com/github/jinba1/blazedb/QueryExecutionException.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/QueryExecutionException.java index 47fbe4c..326dd62 100644 --- a/src/main/java/com/github/jinba1/blazedb/QueryExecutionException.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryExecutionException.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * Thrown when a query fails for a reason the caller can act on. Messages state the diff --git a/src/main/java/com/github/jinba1/blazedb/QueryPlanOptimizer.java b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryPlanOptimizer.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/QueryPlanOptimizer.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/QueryPlanOptimizer.java index 32cc3c8..420dfb7 100644 --- a/src/main/java/com/github/jinba1/blazedb/QueryPlanOptimizer.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryPlanOptimizer.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; -import com.github.jinba1.blazedb.operator.*; +import com.github.jinba1.cuckoodb.operator.*; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.ExpressionVisitorAdapter; import net.sf.jsqlparser.expression.LongValue; diff --git a/src/main/java/com/github/jinba1/blazedb/QueryPlanner.java b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryPlanner.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/QueryPlanner.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/QueryPlanner.java index 643a03e..fdf51f8 100644 --- a/src/main/java/com/github/jinba1/blazedb/QueryPlanner.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryPlanner.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; -import com.github.jinba1.blazedb.operator.*; +import com.github.jinba1.cuckoodb.operator.*; import net.sf.jsqlparser.expression.BinaryExpression; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Function; diff --git a/src/main/java/com/github/jinba1/blazedb/QueryResult.java b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryResult.java similarity index 96% rename from src/main/java/com/github/jinba1/blazedb/QueryResult.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/QueryResult.java index c22d1d4..c627c95 100644 --- a/src/main/java/com/github/jinba1/blazedb/QueryResult.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/QueryResult.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * Execution metadata for one completed query: rows written, whether a LIMIT cut the diff --git a/src/main/java/com/github/jinba1/blazedb/SampleQueryRunner.java b/engine/src/main/java/com/github/jinba1/cuckoodb/SampleQueryRunner.java similarity index 95% rename from src/main/java/com/github/jinba1/blazedb/SampleQueryRunner.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/SampleQueryRunner.java index 45ba4d1..5689797 100644 --- a/src/main/java/com/github/jinba1/blazedb/SampleQueryRunner.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/SampleQueryRunner.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import java.io.*; import java.nio.file.*; @@ -18,7 +18,7 @@ public static void main(String[] args) throws Exception { Path dbDir = projectRoot.resolve("samples/db"); Path inputDir = projectRoot.resolve("samples/input"); Path expectedDir = projectRoot.resolve("samples/expected_output"); - Path tempDir = Files.createTempDirectory("blazedb-test-"); + Path tempDir = Files.createTempDirectory("cuckoodb-test-"); int passed = 0; List failures = new ArrayList<>(); @@ -38,7 +38,7 @@ public static void main(String[] args) throws Exception { if (planned.explainText() != null) { Files.writeString(outputFile, planned.explainText()); } else { - BlazeDB.execute(planned.root(), outputFile.toString()); + CuckooDB.execute(planned.root(), outputFile.toString()); } String actual = normalize(readFile(outputFile)); diff --git a/src/main/java/com/github/jinba1/blazedb/SchemaTransformationType.java b/engine/src/main/java/com/github/jinba1/cuckoodb/SchemaTransformationType.java similarity index 94% rename from src/main/java/com/github/jinba1/blazedb/SchemaTransformationType.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/SchemaTransformationType.java index 2f05c5c..2b2a693 100644 --- a/src/main/java/com/github/jinba1/blazedb/SchemaTransformationType.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/SchemaTransformationType.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * Enum representing the types of schema transformations that can occur during query processing. diff --git a/src/main/java/com/github/jinba1/blazedb/StringValue.java b/engine/src/main/java/com/github/jinba1/cuckoodb/StringValue.java similarity index 94% rename from src/main/java/com/github/jinba1/blazedb/StringValue.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/StringValue.java index e32c795..2b9eac7 100644 --- a/src/main/java/com/github/jinba1/blazedb/StringValue.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/StringValue.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** A string attribute value. CSV quoting is the writer's job, not this class's. */ public record StringValue(String v) implements Value { diff --git a/src/main/java/com/github/jinba1/blazedb/Tuple.java b/engine/src/main/java/com/github/jinba1/cuckoodb/Tuple.java similarity index 93% rename from src/main/java/com/github/jinba1/blazedb/Tuple.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/Tuple.java index 27c7fa2..6c7ce27 100644 --- a/src/main/java/com/github/jinba1/blazedb/Tuple.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/Tuple.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import java.util.List; import java.util.Objects; @@ -41,7 +41,7 @@ public Value getAttribute(int i) { /** * Converts the tuple to a comma-separated string. - * @see BlazeDB used for writing tuples to output file. + * @see CuckooDB used for writing tuples to output file. * @return A string representation of the row of attributes. */ @Override @@ -88,7 +88,7 @@ public boolean equals(Object o) { * Return a hash code for this tuple. * The hash code is computed based on attribute values * so that equal tuples have equal hash codes. - * @see com.github.jinba1.blazedb.operator.DuplicateEliminationOperator used by hash-based distinct, etc + * @see com.github.jinba1.cuckoodb.operator.DuplicateEliminationOperator used by hash-based distinct, etc * @return A hash code value for this tuple. */ @Override diff --git a/src/main/java/com/github/jinba1/blazedb/TupleComparator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/TupleComparator.java similarity index 95% rename from src/main/java/com/github/jinba1/blazedb/TupleComparator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/TupleComparator.java index 44bcb6e..f97037a 100644 --- a/src/main/java/com/github/jinba1/blazedb/TupleComparator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/TupleComparator.java @@ -1,11 +1,11 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import java.util.Comparator; import java.util.List; /** * A custom comparator class for the tuples. - * @see com.github.jinba1.blazedb.operator.SortOperator + * @see com.github.jinba1.cuckoodb.operator.SortOperator * Used to sort tuples based on specified sort columns. * Assume only ascending order. */ diff --git a/src/main/java/com/github/jinba1/blazedb/Value.java b/engine/src/main/java/com/github/jinba1/cuckoodb/Value.java similarity index 90% rename from src/main/java/com/github/jinba1/blazedb/Value.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/Value.java index 6f31dbb..bc58dd3 100644 --- a/src/main/java/com/github/jinba1/blazedb/Value.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/Value.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; /** * A typed attribute value inside a Tuple. Sealed so every consumer diff --git a/src/main/java/com/github/jinba1/blazedb/operator/Accumulator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/Accumulator.java similarity index 93% rename from src/main/java/com/github/jinba1/blazedb/operator/Accumulator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/Accumulator.java index 97ce115..b033fbf 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/Accumulator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/Accumulator.java @@ -1,10 +1,10 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.AggregateCall; -import com.github.jinba1.blazedb.ErrorCode; -import com.github.jinba1.blazedb.IntValue; -import com.github.jinba1.blazedb.QueryExecutionException; -import com.github.jinba1.blazedb.Value; +import com.github.jinba1.cuckoodb.AggregateCall; +import com.github.jinba1.cuckoodb.ErrorCode; +import com.github.jinba1.cuckoodb.IntValue; +import com.github.jinba1.cuckoodb.QueryExecutionException; +import com.github.jinba1.cuckoodb.Value; /** * Per-group, per-call aggregate accumulator: one instance folds the values of a single diff --git a/src/main/java/com/github/jinba1/blazedb/operator/AggregateOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/AggregateOperator.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/operator/AggregateOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/AggregateOperator.java index b256d0d..a6d1fa7 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/AggregateOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/AggregateOperator.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.*; +import com.github.jinba1.cuckoodb.*; import net.sf.jsqlparser.schema.Column; import java.util.*; diff --git a/src/main/java/com/github/jinba1/blazedb/operator/DuplicateEliminationOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/DuplicateEliminationOperator.java similarity index 96% rename from src/main/java/com/github/jinba1/blazedb/operator/DuplicateEliminationOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/DuplicateEliminationOperator.java index d21a951..13d22ee 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/DuplicateEliminationOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/DuplicateEliminationOperator.java @@ -1,7 +1,7 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.Tuple; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.Tuple; import java.util.*; diff --git a/src/main/java/com/github/jinba1/blazedb/operator/HashJoinOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/HashJoinOperator.java similarity index 96% rename from src/main/java/com/github/jinba1/blazedb/operator/HashJoinOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/HashJoinOperator.java index 7ffc8ad..9cd8659 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/HashJoinOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/HashJoinOperator.java @@ -1,11 +1,11 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.ErrorCode; -import com.github.jinba1.blazedb.ExpressionEvaluator; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryExecutionException; -import com.github.jinba1.blazedb.Tuple; -import com.github.jinba1.blazedb.Value; +import com.github.jinba1.cuckoodb.ErrorCode; +import com.github.jinba1.cuckoodb.ExpressionEvaluator; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryExecutionException; +import com.github.jinba1.cuckoodb.Tuple; +import com.github.jinba1.cuckoodb.Value; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.expression.operators.relational.EqualsTo; diff --git a/src/main/java/com/github/jinba1/blazedb/operator/JoinOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/JoinOperator.java similarity index 99% rename from src/main/java/com/github/jinba1/blazedb/operator/JoinOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/JoinOperator.java index c1c79f0..b994d0e 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/JoinOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/JoinOperator.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.*; +import com.github.jinba1.cuckoodb.*; import net.sf.jsqlparser.expression.Expression; import java.util.ArrayList; diff --git a/src/main/java/com/github/jinba1/blazedb/operator/LimitOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/LimitOperator.java similarity index 93% rename from src/main/java/com/github/jinba1/blazedb/operator/LimitOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/LimitOperator.java index 99d5668..68d8fe9 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/LimitOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/LimitOperator.java @@ -1,9 +1,9 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.ErrorCode; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryExecutionException; -import com.github.jinba1.blazedb.Tuple; +import com.github.jinba1.cuckoodb.ErrorCode; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryExecutionException; +import com.github.jinba1.cuckoodb.Tuple; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/github/jinba1/blazedb/operator/Operator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/Operator.java similarity index 92% rename from src/main/java/com/github/jinba1/blazedb/operator/Operator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/Operator.java index ee0c73b..00a328d 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/Operator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/Operator.java @@ -1,10 +1,10 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryBudget; -import com.github.jinba1.blazedb.QueryExecutionException; -import com.github.jinba1.blazedb.SchemaTransformationType; -import com.github.jinba1.blazedb.Tuple; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryBudget; +import com.github.jinba1.cuckoodb.QueryExecutionException; +import com.github.jinba1.cuckoodb.SchemaTransformationType; +import com.github.jinba1.cuckoodb.Tuple; import net.sf.jsqlparser.schema.Column; import java.util.ArrayList; @@ -14,7 +14,7 @@ import java.util.Objects; /** - * Abstract class representing a relational operator in BlazeDB, following the iterator model. + * Abstract class representing a relational operator in CuckooDB, following the iterator model. * This class defines the core functionality every operator must provide. * Every specific relational operator (e.g., Scan, Select, Project, Join, Sort, Aggregate) * extends this abstract class and implements the methods defined here. The relational operators @@ -142,7 +142,7 @@ public final boolean hasChild() { /** * Set the child of this operator. - * @see com.github.jinba1.blazedb.QueryPlanOptimizer used during optimisations. + * @see com.github.jinba1.cuckoodb.QueryPlanOptimizer used during optimisations. * @param child An operator instance to be the new child of this operator. */ public void setChild(Operator child) { @@ -151,7 +151,7 @@ public void setChild(Operator child) { /** * Register this operator's schema transformation. - * @see com.github.jinba1.blazedb.PlanContext the per-query registry this updates. + * @see com.github.jinba1.cuckoodb.PlanContext the per-query registry this updates. */ protected abstract void registerSchema() ; /** @@ -166,7 +166,7 @@ public final void ensureSchemaRegistered() { /** * Recursively update the Schema from bottom up for the query plan. * To match the changes in query plan after optimisations like projection push down. - * @see com.github.jinba1.blazedb.QueryPlanOptimizer used for query optimisations. + * @see com.github.jinba1.cuckoodb.QueryPlanOptimizer used for query optimisations. */ public void updateSchema() { // Base implementation: re-register schema and propagate to child diff --git a/src/main/java/com/github/jinba1/blazedb/operator/ProjectOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/ProjectOperator.java similarity index 93% rename from src/main/java/com/github/jinba1/blazedb/operator/ProjectOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/ProjectOperator.java index 2d48dcb..102201a 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/ProjectOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/ProjectOperator.java @@ -1,10 +1,10 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.ExpressionEvaluator; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.SchemaTransformationType; -import com.github.jinba1.blazedb.Tuple; -import com.github.jinba1.blazedb.Value; +import com.github.jinba1.cuckoodb.ExpressionEvaluator; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.SchemaTransformationType; +import com.github.jinba1.cuckoodb.Tuple; +import com.github.jinba1.cuckoodb.Value; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.schema.Column; @@ -97,7 +97,7 @@ private void resolveColumnIndices() { /** * Update the projection's schema transformation mapping * Help the optimiser to make decisions and other operators to locate the columns. - * @see com.github.jinba1.blazedb.PlanContext for details on schema tracking. + * @see com.github.jinba1.cuckoodb.PlanContext for details on schema tracking. */ @Override protected void registerSchema() { diff --git a/src/main/java/com/github/jinba1/blazedb/operator/ScanOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/ScanOperator.java similarity index 90% rename from src/main/java/com/github/jinba1/blazedb/operator/ScanOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/ScanOperator.java index aecb7dc..e727594 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/ScanOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/ScanOperator.java @@ -1,14 +1,14 @@ -package com.github.jinba1.blazedb.operator; - -import com.github.jinba1.blazedb.ColumnType; -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.ErrorCode; -import com.github.jinba1.blazedb.IntValue; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryExecutionException; -import com.github.jinba1.blazedb.StringValue; -import com.github.jinba1.blazedb.Tuple; -import com.github.jinba1.blazedb.Value; +package com.github.jinba1.cuckoodb.operator; + +import com.github.jinba1.cuckoodb.ColumnType; +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.ErrorCode; +import com.github.jinba1.cuckoodb.IntValue; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryExecutionException; +import com.github.jinba1.cuckoodb.StringValue; +import com.github.jinba1.cuckoodb.Tuple; +import com.github.jinba1.cuckoodb.Value; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; @@ -22,7 +22,7 @@ import java.util.List; /** - * The ScanOperator class is a leaf-level operator within the BlazeDB query execution plan. + * The ScanOperator class is a leaf-level operator within the CuckooDB query execution plan. * It performs a full table scan by sequentially reading tuples directly from a database file, * following the iterator (Volcano) model. * The ScanOperator has no child operators, as it directly interacts with stored database tables. diff --git a/src/main/java/com/github/jinba1/blazedb/operator/SelectOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/SelectOperator.java similarity index 95% rename from src/main/java/com/github/jinba1/blazedb/operator/SelectOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/SelectOperator.java index 507b422..5ef10dc 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/SelectOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/SelectOperator.java @@ -1,8 +1,8 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.ExpressionEvaluator; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.Tuple; +import com.github.jinba1.cuckoodb.ExpressionEvaluator; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.Tuple; import net.sf.jsqlparser.expression.Expression; import java.util.HashMap; diff --git a/src/main/java/com/github/jinba1/blazedb/operator/SortOperator.java b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/SortOperator.java similarity index 97% rename from src/main/java/com/github/jinba1/blazedb/operator/SortOperator.java rename to engine/src/main/java/com/github/jinba1/cuckoodb/operator/SortOperator.java index 0b0489e..a8aa2a3 100644 --- a/src/main/java/com/github/jinba1/blazedb/operator/SortOperator.java +++ b/engine/src/main/java/com/github/jinba1/cuckoodb/operator/SortOperator.java @@ -1,8 +1,8 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.Tuple; -import com.github.jinba1.blazedb.TupleComparator; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.Tuple; +import com.github.jinba1.cuckoodb.TupleComparator; import net.sf.jsqlparser.schema.Column; import java.util.ArrayList; diff --git a/src/test/java/com/github/jinba1/blazedb/AgentLegibleErrorsTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/AgentLegibleErrorsTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/AgentLegibleErrorsTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/AgentLegibleErrorsTest.java index b159c91..1de5ac3 100644 --- a/src/test/java/com/github/jinba1/blazedb/AgentLegibleErrorsTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/AgentLegibleErrorsTest.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.Operator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -223,7 +223,7 @@ public void cliReturnsOneInsteadOfCrashingOnRuntimeColumnMiss() throws IOExcepti // Pre-change this path threw a bare RuntimeException straight through run() Path queryFile = query("SELECT * FROM Student ORDER BY Student.nam"); Path out = tempDir.resolve("out.csv"); - int code = BlazeDB.run(new String[]{db.toString(), queryFile.toString(), out.toString()}); + int code = CuckooDB.run(new String[]{db.toString(), queryFile.toString(), out.toString()}); assertEquals(1, code); assertFalse(Files.exists(out), "partial output must be deleted"); } @@ -231,7 +231,7 @@ public void cliReturnsOneInsteadOfCrashingOnRuntimeColumnMiss() throws IOExcepti @Test public void cliReportsUnreadableQueryFile() { Path out = tempDir.resolve("out.csv"); - int code = BlazeDB.run(new String[]{ + int code = CuckooDB.run(new String[]{ db.toString(), tempDir.resolve("missing.sql").toString(), out.toString()}); assertEquals(1, code); assertFalse(Files.exists(out)); diff --git a/src/test/java/com/github/jinba1/blazedb/AggregateFunctionTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/AggregateFunctionTest.java similarity index 96% rename from src/test/java/com/github/jinba1/blazedb/AggregateFunctionTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/AggregateFunctionTest.java index f9fb695..07e0921 100644 --- a/src/test/java/com/github/jinba1/blazedb/AggregateFunctionTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/AggregateFunctionTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/AggregateLimitEndToEndTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/AggregateLimitEndToEndTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/AggregateLimitEndToEndTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/AggregateLimitEndToEndTest.java index c55c64e..ba727d6 100644 --- a/src/test/java/com/github/jinba1/blazedb/AggregateLimitEndToEndTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/AggregateLimitEndToEndTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -12,7 +12,7 @@ /** * End-to-end tests for the SQL-surface slice: COUNT/AVG/MIN/MAX aggregates and LIMIT. - * Drives the engine via QueryPlanner.parseStatement + BlazeDB.execute so that both + * Drives the engine via QueryPlanner.parseStatement + CuckooDB.execute so that both * planner-time and runtime QueryExecutionExceptions are observable. */ public class AggregateLimitEndToEndTest { @@ -48,7 +48,7 @@ private List run(String sql) throws IOException { DBCatalog.resetDBCatalog(); DBCatalog.initDBCatalog(tempDb.toString()); var root = QueryPlanner.parseStatement(query.toString()); - BlazeDB.execute(root, out.toString()); + CuckooDB.execute(root, out.toString()); return Files.readAllLines(out); } diff --git a/src/test/java/com/github/jinba1/blazedb/AggregateOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/AggregateOperatorTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/AggregateOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/AggregateOperatorTest.java index f5e1e6e..af8f494 100644 --- a/src/test/java/com/github/jinba1/blazedb/AggregateOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/AggregateOperatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -13,8 +13,8 @@ import java.util.List; import java.util.Set; -import com.github.jinba1.blazedb.operator.ScanOperator; -import com.github.jinba1.blazedb.operator.AggregateOperator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.AggregateOperator; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Function; import net.sf.jsqlparser.expression.LongValue; diff --git a/src/test/java/com/github/jinba1/blazedb/ColumnExtractorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ColumnExtractorTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/ColumnExtractorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ColumnExtractorTest.java index f1eacdc..d210519 100644 --- a/src/test/java/com/github/jinba1/blazedb/ColumnExtractorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ColumnExtractorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/ConcurrentQueryExecutionTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ConcurrentQueryExecutionTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/ConcurrentQueryExecutionTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ConcurrentQueryExecutionTest.java index ec66b77..1505daf 100644 --- a/src/test/java/com/github/jinba1/blazedb/ConcurrentQueryExecutionTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ConcurrentQueryExecutionTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -82,7 +82,7 @@ private String runOne(int threadId, int iter, int queryNum) { return "query" + queryNum + ": planning failed"; } Path out = tempOut.resolve("t" + threadId + "_i" + iter + "_q" + queryNum + ".csv"); - BlazeDB.execute(planned.root(), out.toString()); + CuckooDB.execute(planned.root(), out.toString()); Path expected = Path.of("samples/expected_output/query" + queryNum + ".csv"); String actualText = normalize(Files.readString(out)); diff --git a/src/test/java/com/github/jinba1/blazedb/ConditionSplitterTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ConditionSplitterTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/ConditionSplitterTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ConditionSplitterTest.java index 876f297..9e63d43 100644 --- a/src/test/java/com/github/jinba1/blazedb/ConditionSplitterTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ConditionSplitterTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/BlazeDBTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/CuckooDBTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/BlazeDBTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/CuckooDBTest.java index ed70056..b7e548e 100644 --- a/src/test/java/com/github/jinba1/blazedb/BlazeDBTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/CuckooDBTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -11,10 +11,10 @@ import java.util.*; /** - * Integration tests for BlazeDB. + * Integration tests for CuckooDB. * Tests the program as a whole using the command-line interface. * - * These tests cover all the query types supported by BlazeDB as per the project requirements: + * These tests cover all the query types supported by CuckooDB as per the project requirements: * - Simple SELECT-FROM-WHERE queries * - Joins * - DISTINCT @@ -32,7 +32,7 @@ * Department: L M N (where L is department ID, M is department name code, N is building code) * Faculty: O P Q (where O is faculty ID, P is name code, Q is department ID) */ -public class BlazeDBTest { +public class CuckooDBTest { @org.junit.jupiter.api.io.TempDir Path tempDb; @@ -49,7 +49,7 @@ public void outputHasHeaderAndRfcCommas() throws Exception { Path query = tempDb.resolve("q.sql"); Files.writeString(query, "SELECT * FROM People;"); Path out = tempDb.resolve("out.csv"); - BlazeDB.main(new String[]{tempDb.toString(), query.toString(), out.toString()}); + CuckooDB.main(new String[]{tempDb.toString(), query.toString(), out.toString()}); List lines = Files.readAllLines(out); assertEquals(List.of("id,name", "1,alice", "2,\"smith, bob\""), lines); } @@ -692,8 +692,8 @@ public void testAllSampleQueries() throws IOException { continue; } - // Run BlazeDB - BlazeDB.main(new String[] { dbDir, queryPath, outputPath }); + // Run CuckooDB + CuckooDB.main(new String[] { dbDir, queryPath, outputPath }); // Verify the output verifyOutputFiles(expectedOutputPath, outputPath, queryName, inputDir); @@ -752,7 +752,7 @@ private void verifyOutputFiles(String expectedFilePath, String actualFilePath, /** * Runs a test with the given query name, query content, and expected output. - * Creates the query file, runs BlazeDB, and verifies the output. + * Creates the query file, runs CuckooDB, and verifies the output. */ protected void runTest(String queryName, String queryContent, String expectedOutput) throws IOException { runTest(queryName, queryContent, expectedOutput, true); @@ -773,9 +773,9 @@ protected void runTest(String queryName, String queryContent, String expectedOut String expectedFilePath = Paths.get(EXPECTED_OUTPUT_DIR, queryName + ".csv").toString(); Files.write(Paths.get(expectedFilePath), expectedOutput.getBytes(StandardCharsets.UTF_8)); - // Run BlazeDB + // Run CuckooDB String outputFilePath = Paths.get(TEST_OUTPUT_DIR, queryName + ".csv").toString(); - BlazeDB.main(new String[] { TEST_DB_DIR, queryFilePath, outputFilePath }); + CuckooDB.main(new String[] { TEST_DB_DIR, queryFilePath, outputFilePath }); // Verify output if (strictOrder) { diff --git a/src/test/java/com/github/jinba1/blazedb/DBCatalogTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/DBCatalogTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/DBCatalogTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/DBCatalogTest.java index 67ff1b9..f6bb940 100644 --- a/src/test/java/com/github/jinba1/blazedb/DBCatalogTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/DBCatalogTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/DuplicateEliminationOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/DuplicateEliminationOperatorTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/DuplicateEliminationOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/DuplicateEliminationOperatorTest.java index c02654f..f6d9347 100644 --- a/src/test/java/com/github/jinba1/blazedb/DuplicateEliminationOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/DuplicateEliminationOperatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -10,9 +10,9 @@ import java.util.ArrayList; import java.util.List; -import com.github.jinba1.blazedb.operator.DuplicateEliminationOperator; -import com.github.jinba1.blazedb.operator.ProjectOperator; -import com.github.jinba1.blazedb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.DuplicateEliminationOperator; +import com.github.jinba1.cuckoodb.operator.ProjectOperator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Table; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/github/jinba1/blazedb/ExplainEndToEndTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ExplainEndToEndTest.java similarity index 94% rename from src/test/java/com/github/jinba1/blazedb/ExplainEndToEndTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ExplainEndToEndTest.java index 042b86f..ed5b44c 100644 --- a/src/test/java/com/github/jinba1/blazedb/ExplainEndToEndTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ExplainEndToEndTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -83,7 +83,7 @@ public void cliWritesExplainTextToOutputFile() throws IOException { Files.writeString(q, "EXPLAIN SELECT * FROM Sales WHERE Sales.qty > 5;"); Path out = tempDb.resolve("explain-out.txt"); - int code = BlazeDB.run(new String[]{tempDb.toString(), q.toString(), out.toString()}); + int code = CuckooDB.run(new String[]{tempDb.toString(), q.toString(), out.toString()}); assertEquals(0, code); String text = Files.readString(out); @@ -99,7 +99,7 @@ public void cliCreatesMissingOutputDirectoryForExplain() throws IOException { Files.writeString(q, "EXPLAIN SELECT * FROM Sales WHERE Sales.qty > 5;"); Path out = tempDb.resolve("nested").resolve("dir").resolve("explain-out.txt"); - int code = BlazeDB.run(new String[]{tempDb.toString(), q.toString(), out.toString()}); + int code = CuckooDB.run(new String[]{tempDb.toString(), q.toString(), out.toString()}); assertEquals(0, code); assertTrue(Files.readString(out).contains("Scan[Sales]")); diff --git a/src/test/java/com/github/jinba1/blazedb/ExpressionEvaluatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ExpressionEvaluatorTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/ExpressionEvaluatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ExpressionEvaluatorTest.java index ec77430..d7e944b 100644 --- a/src/test/java/com/github/jinba1/blazedb/ExpressionEvaluatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ExpressionEvaluatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -11,8 +11,8 @@ import java.util.ArrayList; import java.util.List; -import com.github.jinba1.blazedb.operator.ScanOperator; -import com.github.jinba1.blazedb.operator.SelectOperator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.SelectOperator; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; import net.sf.jsqlparser.expression.operators.conditional.AndExpression; diff --git a/src/test/java/com/github/jinba1/blazedb/ExpressionPreprocessorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ExpressionPreprocessorTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/ExpressionPreprocessorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ExpressionPreprocessorTest.java index f7e0607..bd5be1d 100644 --- a/src/test/java/com/github/jinba1/blazedb/ExpressionPreprocessorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ExpressionPreprocessorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/HashJoinEndToEndTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/HashJoinEndToEndTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/HashJoinEndToEndTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/HashJoinEndToEndTest.java index 0ebb7c4..422ffd1 100644 --- a/src/test/java/com/github/jinba1/blazedb/HashJoinEndToEndTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/HashJoinEndToEndTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -65,7 +65,7 @@ public void equiPlusResidualQueryReturnsCorrectRows() throws IOException { + "WHERE Sales.region = Reps.region AND Sales.qty > 5;"); Path out = tempDb.resolve("res-out.csv"); var root = QueryPlanner.parseStatement(q.toString()); - BlazeDB.execute(root, out.toString()); + CuckooDB.execute(root, out.toString()); List lines = null; try { lines = Files.readAllLines(out); diff --git a/src/test/java/com/github/jinba1/blazedb/JoinOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/JoinOperatorTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/JoinOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/JoinOperatorTest.java index 6a51dc5..039f686 100644 --- a/src/test/java/com/github/jinba1/blazedb/JoinOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/JoinOperatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -10,10 +10,10 @@ import java.util.ArrayList; import java.util.List; -import com.github.jinba1.blazedb.operator.JoinOperator; -import com.github.jinba1.blazedb.operator.Operator; -import com.github.jinba1.blazedb.operator.ScanOperator; -import com.github.jinba1.blazedb.operator.SelectOperator; +import com.github.jinba1.cuckoodb.operator.JoinOperator; +import com.github.jinba1.cuckoodb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.SelectOperator; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/github/jinba1/blazedb/PlanContextTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/PlanContextTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/PlanContextTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/PlanContextTest.java index 3f2dd1b..166210a 100644 --- a/src/test/java/com/github/jinba1/blazedb/PlanContextTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/PlanContextTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/jinba1/blazedb/PlanPrinterTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/PlanPrinterTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/PlanPrinterTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/PlanPrinterTest.java index 32c822a..ff60cab 100644 --- a/src/test/java/com/github/jinba1/blazedb/PlanPrinterTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/PlanPrinterTest.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.Operator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/test/java/com/github/jinba1/blazedb/ProjectOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ProjectOperatorTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/ProjectOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ProjectOperatorTest.java index 09e07d7..91ee4a4 100644 --- a/src/test/java/com/github/jinba1/blazedb/ProjectOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ProjectOperatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -10,9 +10,9 @@ import java.util.ArrayList; import java.util.List; -import com.github.jinba1.blazedb.operator.ProjectOperator; -import com.github.jinba1.blazedb.operator.ScanOperator; -import com.github.jinba1.blazedb.operator.SelectOperator; +import com.github.jinba1.cuckoodb.operator.ProjectOperator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.SelectOperator; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.schema.Column; diff --git a/src/test/java/com/github/jinba1/blazedb/QueryBudgetEnforcementTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryBudgetEnforcementTest.java similarity index 82% rename from src/test/java/com/github/jinba1/blazedb/QueryBudgetEnforcementTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/QueryBudgetEnforcementTest.java index 64dd3c7..1933a68 100644 --- a/src/test/java/com/github/jinba1/blazedb/QueryBudgetEnforcementTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryBudgetEnforcementTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -11,7 +11,7 @@ import java.util.List; /** - * End-to-end budget enforcement through the CLI entry (BlazeDB.run — main minus System.exit). + * End-to-end budget enforcement through the CLI entry (CuckooDB.run — main minus System.exit). */ public class QueryBudgetEnforcementTest { @@ -38,7 +38,7 @@ public void budgetKillDeletesPartialOutputAndReturnsNonZero() throws IOException Path query = writeQuery("SELECT * FROM L, R;"); Path out = tempDb.resolve("out.csv"); - int code = BlazeDB.run(new String[]{ + int code = CuckooDB.run(new String[]{ tempDb.toString(), query.toString(), out.toString(), "--max-tuples=10"}); assertEquals(1, code); @@ -50,7 +50,7 @@ public void timeBudgetKills() throws IOException { Path query = writeQuery("SELECT * FROM L, R;"); Path out = tempDb.resolve("out-t.csv"); - int code = BlazeDB.run(new String[]{ + int code = CuckooDB.run(new String[]{ tempDb.toString(), query.toString(), out.toString(), "--timeout-ms=0"}); assertEquals(1, code); @@ -62,7 +62,7 @@ public void generousBudgetLetsQueryComplete() throws IOException { Path query = writeQuery("SELECT * FROM L, R;"); Path out = tempDb.resolve("out-ok.csv"); - int code = BlazeDB.run(new String[]{ + int code = CuckooDB.run(new String[]{ tempDb.toString(), query.toString(), out.toString(), "--max-tuples=1000", "--timeout-ms=60000"}); @@ -75,7 +75,7 @@ public void noFlagsMeansUnlimited() throws IOException { Path query = writeQuery("SELECT * FROM L, R;"); Path out = tempDb.resolve("out-free.csv"); - int code = BlazeDB.run(new String[]{tempDb.toString(), query.toString(), out.toString()}); + int code = CuckooDB.run(new String[]{tempDb.toString(), query.toString(), out.toString()}); assertEquals(0, code); assertEquals(26, Files.readAllLines(out).size()); @@ -86,11 +86,11 @@ public void malformedFlagFailsBeforeExecution() throws IOException { Path query = writeQuery("SELECT * FROM L;"); Path out = tempDb.resolve("out-bad.csv"); - assertEquals(1, BlazeDB.run(new String[]{ + assertEquals(1, CuckooDB.run(new String[]{ tempDb.toString(), query.toString(), out.toString(), "--max-tuples=abc"})); - assertEquals(1, BlazeDB.run(new String[]{ + assertEquals(1, CuckooDB.run(new String[]{ tempDb.toString(), query.toString(), out.toString(), "--frobnicate=1"})); - assertEquals(1, BlazeDB.run(new String[]{ + assertEquals(1, CuckooDB.run(new String[]{ tempDb.toString(), query.toString(), out.toString(), "--max-tuples=-5"})); assertFalse(Files.exists(out)); } @@ -101,7 +101,7 @@ public void ioFailureDuringWriteReturnsNonZero() throws IOException { Path out = tempDb.resolve("out-collide.csv"); Files.createDirectory(out); // output path is a directory: FileWriter must fail - int code = BlazeDB.run(new String[]{tempDb.toString(), query.toString(), out.toString()}); + int code = CuckooDB.run(new String[]{tempDb.toString(), query.toString(), out.toString()}); assertEquals(1, code, "IO failure during write must not look like success"); } @@ -111,7 +111,7 @@ public void unparseableQueryFailsGracefully() throws IOException { Path query = writeQuery("THIS IS NOT SQL;"); Path out = tempDb.resolve("out-garbage.csv"); - int code = BlazeDB.run(new String[]{tempDb.toString(), query.toString(), out.toString()}); + int code = CuckooDB.run(new String[]{tempDb.toString(), query.toString(), out.toString()}); assertEquals(1, code); assertFalse(Files.exists(out)); diff --git a/src/test/java/com/github/jinba1/blazedb/QueryBudgetTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryBudgetTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/QueryBudgetTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/QueryBudgetTest.java index 55b4a86..4444b61 100644 --- a/src/test/java/com/github/jinba1/blazedb/QueryBudgetTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryBudgetTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/QueryConfigTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryConfigTest.java similarity index 93% rename from src/test/java/com/github/jinba1/blazedb/QueryConfigTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/QueryConfigTest.java index 70fc620..c4da5ef 100644 --- a/src/test/java/com/github/jinba1/blazedb/QueryConfigTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryConfigTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/jinba1/blazedb/QueryOptimizationBenchmarkTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryOptimizationBenchmarkTest.java similarity index 94% rename from src/test/java/com/github/jinba1/blazedb/QueryOptimizationBenchmarkTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/QueryOptimizationBenchmarkTest.java index b43b463..fe7c8da 100644 --- a/src/test/java/com/github/jinba1/blazedb/QueryOptimizationBenchmarkTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryOptimizationBenchmarkTest.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.Operator; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -19,7 +19,7 @@ * counting tuples processed by each operator to demonstrate the impact * of selection pushdown, projection pushdown, and trivial operator removal. */ -public class QueryOptimizationBenchmarkTest extends BlazeDBTest { +public class QueryOptimizationBenchmarkTest extends CuckooDBTest { private static final String TEST_DB_DIR = "src/test/resources/test_integration_db"; private static final String TEST_QUERIES_DIR = "src/test/resources/test_integration_queries"; @@ -216,7 +216,7 @@ private long runQueryWithTupleCount(String queryName, String queryContent, boole // Execute query (write to output to consume all tuples) String outputFilePath = Paths.get(TEST_OUTPUT_DIR, queryName + ".csv").toString(); - BlazeDB.execute(rootOp, outputFilePath); + CuckooDB.execute(rootOp, outputFilePath); // Collect scan tuple count (measures actual data read from disk) return collectScanTupleCount(rootOp); @@ -234,8 +234,8 @@ private void resetAllTupleCounters(Operator op) { resetAllTupleCounters(op.getChild()); } - if (op instanceof com.github.jinba1.blazedb.operator.JoinOperator) { - resetAllTupleCounters(((com.github.jinba1.blazedb.operator.JoinOperator) op).getOuterChild()); + if (op instanceof com.github.jinba1.cuckoodb.operator.JoinOperator) { + resetAllTupleCounters(((com.github.jinba1.cuckoodb.operator.JoinOperator) op).getOuterChild()); } } @@ -249,7 +249,7 @@ private long collectScanTupleCount(Operator op) { long count = 0; // Only count tuples from ScanOperators (leaf nodes that read from disk) - if (op instanceof com.github.jinba1.blazedb.operator.ScanOperator) { + if (op instanceof com.github.jinba1.cuckoodb.operator.ScanOperator) { count = op.getTupleCount(); } @@ -257,8 +257,8 @@ private long collectScanTupleCount(Operator op) { count += collectScanTupleCount(op.getChild()); } - if (op instanceof com.github.jinba1.blazedb.operator.JoinOperator) { - count += collectScanTupleCount(((com.github.jinba1.blazedb.operator.JoinOperator) op).getOuterChild()); + if (op instanceof com.github.jinba1.cuckoodb.operator.JoinOperator) { + count += collectScanTupleCount(((com.github.jinba1.cuckoodb.operator.JoinOperator) op).getOuterChild()); } return count; diff --git a/src/test/java/com/github/jinba1/blazedb/QueryPlanOptimizerTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryPlanOptimizerTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/QueryPlanOptimizerTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/QueryPlanOptimizerTest.java index af520fa..11123f5 100644 --- a/src/test/java/com/github/jinba1/blazedb/QueryPlanOptimizerTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryPlanOptimizerTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; @@ -8,12 +8,12 @@ import java.util.List; /** - * This extension of BlazeDBTest focuses on testing query plan optimizations. + * This extension of CuckooDBTest focuses on testing query plan optimizations. * It adds new test methods specifically designed to verify the behavior of * QueryPlanOptimizer in removing unnecessary operators. * Has to run BlazseDBTest first!!! */ -public class QueryPlanOptimizerTest extends BlazeDBTest { +public class QueryPlanOptimizerTest extends CuckooDBTest { /** * Tests the removal of a trivial SELECT with an always-true condition. diff --git a/src/test/java/com/github/jinba1/blazedb/QueryResultTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryResultTest.java similarity index 92% rename from src/test/java/com/github/jinba1/blazedb/QueryResultTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/QueryResultTest.java index 35e810d..0fa70ee 100644 --- a/src/test/java/com/github/jinba1/blazedb/QueryResultTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/QueryResultTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -11,7 +11,7 @@ import java.util.List; /** - * BlazeDB.execute returns token-awareness metadata for the caller (CLI today, + * CuckooDB.execute returns token-awareness metadata for the caller (CLI today, * the REST gateway later): rows written, a trustworthy truncated flag, and a * refine hint when truncated. The output file itself stays pure data. */ @@ -36,7 +36,7 @@ private QueryResult execute(String sql) throws IOException { Path file = tempDir.resolve("q.sql"); Files.writeString(file, sql); PlannedQuery planned = QueryPlanner.planQuery(file.toString()); - return BlazeDB.execute(planned.root(), tempDir.resolve("out.csv").toString()); + return CuckooDB.execute(planned.root(), tempDir.resolve("out.csv").toString()); } @Test diff --git a/src/test/java/com/github/jinba1/blazedb/ScanOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ScanOperatorTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/ScanOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ScanOperatorTest.java index cea8452..1959b79 100644 --- a/src/test/java/com/github/jinba1/blazedb/ScanOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ScanOperatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -12,14 +12,14 @@ import java.util.Arrays; import java.util.List; -import com.github.jinba1.blazedb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.Tuple; +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.Tuple; public class ScanOperatorTest { diff --git a/src/test/java/com/github/jinba1/blazedb/SelectOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/SelectOperatorTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/SelectOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/SelectOperatorTest.java index b7c3dde..46ad70a 100644 --- a/src/test/java/com/github/jinba1/blazedb/SelectOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/SelectOperatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -10,8 +10,8 @@ import java.util.ArrayList; import java.util.List; -import com.github.jinba1.blazedb.operator.ScanOperator; -import com.github.jinba1.blazedb.operator.SelectOperator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.SelectOperator; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/github/jinba1/blazedb/SortOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/SortOperatorTest.java similarity index 98% rename from src/test/java/com/github/jinba1/blazedb/SortOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/SortOperatorTest.java index 493385e..60d5fe1 100644 --- a/src/test/java/com/github/jinba1/blazedb/SortOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/SortOperatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; @@ -10,9 +10,9 @@ import java.util.ArrayList; import java.util.List; -import com.github.jinba1.blazedb.operator.ScanOperator; -import com.github.jinba1.blazedb.operator.SortOperator; -import com.github.jinba1.blazedb.operator.SelectOperator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.operator.SortOperator; +import com.github.jinba1.cuckoodb.operator.SelectOperator; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.schema.Column; diff --git a/src/test/java/com/github/jinba1/blazedb/StringEndToEndTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/StringEndToEndTest.java similarity index 89% rename from src/test/java/com/github/jinba1/blazedb/StringEndToEndTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/StringEndToEndTest.java index d620a13..00c829c 100644 --- a/src/test/java/com/github/jinba1/blazedb/StringEndToEndTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/StringEndToEndTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -9,14 +9,14 @@ import java.nio.file.Path; import java.util.List; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.Operator; /** * End-to-end characterization tests for string-column support. * *

These tests drive the real engine against a {@link org.junit.jupiter.api.io.TempDir} - * database, mostly through {@link BlazeDB#main}. The two error-path tests drive the engine - * via {@link QueryPlanner#parseStatement} plus {@link BlazeDB#execute} directly, because the + * database, mostly through {@link CuckooDB#main}. The two error-path tests drive the engine + * via {@link QueryPlanner#parseStatement} plus {@link CuckooDB#execute} directly, because the * relevant {@link QueryExecutionException}s are thrown at runtime inside {@code getNextTuple()} * and propagate cleanly through {@code execute} (which catches only {@code IOException}). * @@ -51,14 +51,14 @@ private void writeEmployees() throws IOException { } /** - * Runs a query string through {@link BlazeDB#main} against the given database directory + * Runs a query string through {@link CuckooDB#main} against the given database directory * and returns the output lines. */ private List runMain(Path dbDir, String sql) throws IOException { Path query = tempDb.resolve("q-" + System.nanoTime() + ".sql"); Files.writeString(query, sql); Path out = tempDb.resolve("out-" + System.nanoTime() + ".csv"); - BlazeDB.main(new String[]{dbDir.toString(), query.toString(), out.toString()}); + CuckooDB.main(new String[]{dbDir.toString(), query.toString(), out.toString()}); return Files.readAllLines(out); } @@ -128,7 +128,7 @@ public void roundTripOutputIsQueryable() throws IOException { Path query1 = tempDb.resolve("q1.sql"); Files.writeString(query1, "SELECT * FROM Employees WHERE Employees.salary > 85;"); Path out1 = tempDb.resolve("out1.csv"); - BlazeDB.main(new String[]{tempDb.toString(), query1.toString(), out1.toString()}); + CuckooDB.main(new String[]{tempDb.toString(), query1.toString(), out1.toString()}); List out1Lines = Files.readAllLines(out1); assertEquals(List.of( @@ -138,7 +138,7 @@ public void roundTripOutputIsQueryable() throws IOException { "\"smith, dan\",sales,90"), out1Lines); // (b) build a second database whose Result table IS the prior output - Path db2 = Files.createTempDirectory("blazedb-roundtrip"); + Path db2 = Files.createTempDirectory("cuckoodb-roundtrip"); Path db2Data = db2.resolve("data"); Files.createDirectories(db2Data); Files.copy(out1, db2Data.resolve("Result.csv")); @@ -148,7 +148,7 @@ public void roundTripOutputIsQueryable() throws IOException { Path query2 = tempDb.resolve("q2.sql"); Files.writeString(query2, "SELECT * FROM Result WHERE Result.salary > 100;"); Path out2 = tempDb.resolve("out2.csv"); - BlazeDB.main(new String[]{db2.toString(), query2.toString(), out2.toString()}); + CuckooDB.main(new String[]{db2.toString(), query2.toString(), out2.toString()}); List out2Lines = Files.readAllLines(out2); assertEquals(List.of( @@ -170,7 +170,7 @@ public void sumOnStringColumnFailsWithClearError() throws IOException { Operator root = QueryPlanner.parseStatement(query.toString()); QueryExecutionException ex = assertThrows(QueryExecutionException.class, - () -> BlazeDB.execute(root, out.toString())); + () -> CuckooDB.execute(root, out.toString())); assertTrue(ex.getMessage().contains("SUM requires int"), "Expected a SUM type error; got: " + ex.getMessage()); } @@ -189,7 +189,7 @@ public void crossTypeWhereFailsWithClearError() throws IOException { Operator root = QueryPlanner.parseStatement(query.toString()); QueryExecutionException ex = assertThrows(QueryExecutionException.class, - () -> BlazeDB.execute(root, out.toString())); + () -> CuckooDB.execute(root, out.toString())); assertTrue(ex.getMessage().contains("Type mismatch"), "Expected a type-mismatch error; got: " + ex.getMessage()); } diff --git a/src/test/java/com/github/jinba1/blazedb/TestTuples.java b/engine/src/test/java/com/github/jinba1/cuckoodb/TestTuples.java similarity index 92% rename from src/test/java/com/github/jinba1/blazedb/TestTuples.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/TestTuples.java index 0602fff..cf20237 100644 --- a/src/test/java/com/github/jinba1/blazedb/TestTuples.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/TestTuples.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import java.util.ArrayList; import java.util.List; diff --git a/src/test/java/com/github/jinba1/blazedb/TupleComparatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/TupleComparatorTest.java similarity index 99% rename from src/test/java/com/github/jinba1/blazedb/TupleComparatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/TupleComparatorTest.java index 52a2d88..c514cd8 100644 --- a/src/test/java/com/github/jinba1/blazedb/TupleComparatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/TupleComparatorTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/TupleTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/TupleTest.java similarity index 95% rename from src/test/java/com/github/jinba1/blazedb/TupleTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/TupleTest.java index b68ce7f..979a9cc 100644 --- a/src/test/java/com/github/jinba1/blazedb/TupleTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/TupleTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.Test; import java.util.List; diff --git a/src/test/java/com/github/jinba1/blazedb/ValueTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/ValueTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/ValueTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/ValueTest.java index 98f7d23..71dadce 100644 --- a/src/test/java/com/github/jinba1/blazedb/ValueTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/ValueTest.java @@ -1,4 +1,4 @@ -package com.github.jinba1.blazedb; +package com.github.jinba1.cuckoodb; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/bench/EndToEndJoinBenchmark.java b/engine/src/test/java/com/github/jinba1/cuckoodb/bench/EndToEndJoinBenchmark.java similarity index 91% rename from src/test/java/com/github/jinba1/blazedb/bench/EndToEndJoinBenchmark.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/bench/EndToEndJoinBenchmark.java index 5536198..d95eb4d 100644 --- a/src/test/java/com/github/jinba1/blazedb/bench/EndToEndJoinBenchmark.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/bench/EndToEndJoinBenchmark.java @@ -1,9 +1,9 @@ -package com.github.jinba1.blazedb.bench; +package com.github.jinba1.cuckoodb.bench; -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.QueryConfig; -import com.github.jinba1.blazedb.QueryPlanner; -import com.github.jinba1.blazedb.operator.Operator; +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.QueryConfig; +import com.github.jinba1.cuckoodb.QueryPlanner; +import com.github.jinba1.cuckoodb.operator.Operator; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole; diff --git a/src/test/java/com/github/jinba1/blazedb/bench/JoinAlgorithmBenchmark.java b/engine/src/test/java/com/github/jinba1/cuckoodb/bench/JoinAlgorithmBenchmark.java similarity index 88% rename from src/test/java/com/github/jinba1/blazedb/bench/JoinAlgorithmBenchmark.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/bench/JoinAlgorithmBenchmark.java index 340ee45..18a501a 100644 --- a/src/test/java/com/github/jinba1/blazedb/bench/JoinAlgorithmBenchmark.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/bench/JoinAlgorithmBenchmark.java @@ -1,13 +1,13 @@ -package com.github.jinba1.blazedb.bench; +package com.github.jinba1.cuckoodb.bench; -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryConfig; -import com.github.jinba1.blazedb.operator.CachedOperator; -import com.github.jinba1.blazedb.operator.HashJoinOperator; -import com.github.jinba1.blazedb.operator.JoinOperator; -import com.github.jinba1.blazedb.operator.Operator; -import com.github.jinba1.blazedb.operator.ScanOperator; +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryConfig; +import com.github.jinba1.cuckoodb.operator.CachedOperator; +import com.github.jinba1.cuckoodb.operator.HashJoinOperator; +import com.github.jinba1.cuckoodb.operator.JoinOperator; +import com.github.jinba1.cuckoodb.operator.Operator; +import com.github.jinba1.cuckoodb.operator.ScanOperator; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import org.openjdk.jmh.annotations.*; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/AccumulatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/AccumulatorTest.java similarity index 97% rename from src/test/java/com/github/jinba1/blazedb/operator/AccumulatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/AccumulatorTest.java index 915c16d..6a6d320 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/AccumulatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/AccumulatorTest.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.*; +import com.github.jinba1.cuckoodb.*; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/BlockingDrainTimeoutTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/BlockingDrainTimeoutTest.java similarity index 93% rename from src/test/java/com/github/jinba1/blazedb/operator/BlockingDrainTimeoutTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/BlockingDrainTimeoutTest.java index b8f3908..300e35f 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/BlockingDrainTimeoutTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/BlockingDrainTimeoutTest.java @@ -1,12 +1,12 @@ -package com.github.jinba1.blazedb.operator; - -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.IntValue; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryBudget; -import com.github.jinba1.blazedb.QueryBudgetExceededException; -import com.github.jinba1.blazedb.QueryConfig; -import com.github.jinba1.blazedb.Tuple; +package com.github.jinba1.cuckoodb.operator; + +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.IntValue; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryBudget; +import com.github.jinba1.cuckoodb.QueryBudgetExceededException; +import com.github.jinba1.cuckoodb.QueryConfig; +import com.github.jinba1.cuckoodb.Tuple; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Table; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/BudgetAttachmentTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/BudgetAttachmentTest.java similarity index 89% rename from src/test/java/com/github/jinba1/blazedb/operator/BudgetAttachmentTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/BudgetAttachmentTest.java index d9b321f..fe4698f 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/BudgetAttachmentTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/BudgetAttachmentTest.java @@ -1,10 +1,10 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryBudget; -import com.github.jinba1.blazedb.QueryBudgetExceededException; -import com.github.jinba1.blazedb.QueryConfig; +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryBudget; +import com.github.jinba1.cuckoodb.QueryBudgetExceededException; +import com.github.jinba1.cuckoodb.QueryConfig; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/CachedOperator.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/CachedOperator.java similarity index 93% rename from src/test/java/com/github/jinba1/blazedb/operator/CachedOperator.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/CachedOperator.java index f08fa2b..dc9622b 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/CachedOperator.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/CachedOperator.java @@ -1,6 +1,6 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.Tuple; +import com.github.jinba1.cuckoodb.Tuple; import java.util.ArrayList; import java.util.List; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/CachedOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/CachedOperatorTest.java similarity index 89% rename from src/test/java/com/github/jinba1/blazedb/operator/CachedOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/CachedOperatorTest.java index 559a469..70a5c7e 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/CachedOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/CachedOperatorTest.java @@ -1,8 +1,8 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryConfig; +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryConfig; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/HashJoinOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/HashJoinOperatorTest.java similarity index 95% rename from src/test/java/com/github/jinba1/blazedb/operator/HashJoinOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/HashJoinOperatorTest.java index 1d2fdda..8a78426 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/HashJoinOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/HashJoinOperatorTest.java @@ -1,11 +1,11 @@ -package com.github.jinba1.blazedb.operator; - -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryBudget; -import com.github.jinba1.blazedb.QueryConfig; -import com.github.jinba1.blazedb.QueryExecutionException; -import com.github.jinba1.blazedb.Tuple; +package com.github.jinba1.cuckoodb.operator; + +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryBudget; +import com.github.jinba1.cuckoodb.QueryConfig; +import com.github.jinba1.cuckoodb.QueryExecutionException; +import com.github.jinba1.cuckoodb.Tuple; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/LimitOperatorTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/LimitOperatorTest.java similarity index 89% rename from src/test/java/com/github/jinba1/blazedb/operator/LimitOperatorTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/LimitOperatorTest.java index bde205a..e4794e4 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/LimitOperatorTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/LimitOperatorTest.java @@ -1,9 +1,9 @@ -package com.github.jinba1.blazedb.operator; +package com.github.jinba1.cuckoodb.operator; -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryConfig; -import com.github.jinba1.blazedb.Tuple; +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryConfig; +import com.github.jinba1.cuckoodb.Tuple; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/test/java/com/github/jinba1/blazedb/operator/LimitTruncationTest.java b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/LimitTruncationTest.java similarity index 92% rename from src/test/java/com/github/jinba1/blazedb/operator/LimitTruncationTest.java rename to engine/src/test/java/com/github/jinba1/cuckoodb/operator/LimitTruncationTest.java index 84cb4d2..28bc532 100644 --- a/src/test/java/com/github/jinba1/blazedb/operator/LimitTruncationTest.java +++ b/engine/src/test/java/com/github/jinba1/cuckoodb/operator/LimitTruncationTest.java @@ -1,13 +1,13 @@ -package com.github.jinba1.blazedb.operator; - -import com.github.jinba1.blazedb.DBCatalog; -import com.github.jinba1.blazedb.ErrorCode; -import com.github.jinba1.blazedb.IntValue; -import com.github.jinba1.blazedb.PlanContext; -import com.github.jinba1.blazedb.QueryBudget; -import com.github.jinba1.blazedb.QueryConfig; -import com.github.jinba1.blazedb.QueryExecutionException; -import com.github.jinba1.blazedb.Tuple; +package com.github.jinba1.cuckoodb.operator; + +import com.github.jinba1.cuckoodb.DBCatalog; +import com.github.jinba1.cuckoodb.ErrorCode; +import com.github.jinba1.cuckoodb.IntValue; +import com.github.jinba1.cuckoodb.PlanContext; +import com.github.jinba1.cuckoodb.QueryBudget; +import com.github.jinba1.cuckoodb.QueryConfig; +import com.github.jinba1.cuckoodb.QueryExecutionException; +import com.github.jinba1.cuckoodb.Tuple; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/test/resources/test_integration_db/data/Course.csv b/engine/src/test/resources/test_integration_db/data/Course.csv similarity index 100% rename from src/test/resources/test_integration_db/data/Course.csv rename to engine/src/test/resources/test_integration_db/data/Course.csv diff --git a/src/test/resources/test_integration_db/data/Department.csv b/engine/src/test/resources/test_integration_db/data/Department.csv similarity index 100% rename from src/test/resources/test_integration_db/data/Department.csv rename to engine/src/test/resources/test_integration_db/data/Department.csv diff --git a/src/test/resources/test_integration_db/data/Enrolled.csv b/engine/src/test/resources/test_integration_db/data/Enrolled.csv similarity index 100% rename from src/test/resources/test_integration_db/data/Enrolled.csv rename to engine/src/test/resources/test_integration_db/data/Enrolled.csv diff --git a/src/test/resources/test_integration_db/data/Faculty.csv b/engine/src/test/resources/test_integration_db/data/Faculty.csv similarity index 100% rename from src/test/resources/test_integration_db/data/Faculty.csv rename to engine/src/test/resources/test_integration_db/data/Faculty.csv diff --git a/src/test/resources/test_integration_db/data/Student.csv b/engine/src/test/resources/test_integration_db/data/Student.csv similarity index 100% rename from src/test/resources/test_integration_db/data/Student.csv rename to engine/src/test/resources/test_integration_db/data/Student.csv diff --git a/src/test/resources/test_integration_expected/test_combine_selects.csv b/engine/src/test/resources/test_integration_expected/test_combine_selects.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_combine_selects.csv rename to engine/src/test/resources/test_integration_expected/test_combine_selects.csv diff --git a/src/test/resources/test_integration_expected/test_combined_optimizations.csv b/engine/src/test/resources/test_integration_expected/test_combined_optimizations.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_combined_optimizations.csv rename to engine/src/test/resources/test_integration_expected/test_combined_optimizations.csv diff --git a/src/test/resources/test_integration_expected/test_complex_join_condition.csv b/engine/src/test/resources/test_integration_expected/test_complex_join_condition.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_complex_join_condition.csv rename to engine/src/test/resources/test_integration_expected/test_complex_join_condition.csv diff --git a/src/test/resources/test_integration_expected/test_distinct_order_by.csv b/engine/src/test/resources/test_integration_expected/test_distinct_order_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_distinct_order_by.csv rename to engine/src/test/resources/test_integration_expected/test_distinct_order_by.csv diff --git a/src/test/resources/test_integration_expected/test_group_by_sum_order_by.csv b/engine/src/test/resources/test_integration_expected/test_group_by_sum_order_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_group_by_sum_order_by.csv rename to engine/src/test/resources/test_integration_expected/test_group_by_sum_order_by.csv diff --git a/src/test/resources/test_integration_expected/test_group_by_with_join.csv b/engine/src/test/resources/test_integration_expected/test_group_by_with_join.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_group_by_with_join.csv rename to engine/src/test/resources/test_integration_expected/test_group_by_with_join.csv diff --git a/src/test/resources/test_integration_expected/test_group_by_with_sum.csv b/engine/src/test/resources/test_integration_expected/test_group_by_with_sum.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_group_by_with_sum.csv rename to engine/src/test/resources/test_integration_expected/test_group_by_with_sum.csv diff --git a/src/test/resources/test_integration_expected/test_join_with_complex_where.csv b/engine/src/test/resources/test_integration_expected/test_join_with_complex_where.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_join_with_complex_where.csv rename to engine/src/test/resources/test_integration_expected/test_join_with_complex_where.csv diff --git a/src/test/resources/test_integration_expected/test_multi_join_optimizations.csv b/engine/src/test/resources/test_integration_expected/test_multi_join_optimizations.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_multi_join_optimizations.csv rename to engine/src/test/resources/test_integration_expected/test_multi_join_optimizations.csv diff --git a/src/test/resources/test_integration_expected/test_optimize_distinct.csv b/engine/src/test/resources/test_integration_expected/test_optimize_distinct.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_optimize_distinct.csv rename to engine/src/test/resources/test_integration_expected/test_optimize_distinct.csv diff --git a/src/test/resources/test_integration_expected/test_optimize_group_by.csv b/engine/src/test/resources/test_integration_expected/test_optimize_group_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_optimize_group_by.csv rename to engine/src/test/resources/test_integration_expected/test_optimize_group_by.csv diff --git a/src/test/resources/test_integration_expected/test_optimize_order_by.csv b/engine/src/test/resources/test_integration_expected/test_optimize_order_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_optimize_order_by.csv rename to engine/src/test/resources/test_integration_expected/test_optimize_order_by.csv diff --git a/src/test/resources/test_integration_expected/test_preserve_join_order.csv b/engine/src/test/resources/test_integration_expected/test_preserve_join_order.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_preserve_join_order.csv rename to engine/src/test/resources/test_integration_expected/test_preserve_join_order.csv diff --git a/src/test/resources/test_integration_expected/test_projection_pushdown.csv b/engine/src/test/resources/test_integration_expected/test_projection_pushdown.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_projection_pushdown.csv rename to engine/src/test/resources/test_integration_expected/test_projection_pushdown.csv diff --git a/src/test/resources/test_integration_expected/test_projection_pushdown_with_group_by.csv b/engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_group_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_projection_pushdown_with_group_by.csv rename to engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_group_by.csv diff --git a/src/test/resources/test_integration_expected/test_projection_pushdown_with_order_by.csv b/engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_order_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_projection_pushdown_with_order_by.csv rename to engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_order_by.csv diff --git a/src/test/resources/test_integration_expected/test_projection_pushdown_with_selection.csv b/engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_selection.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_projection_pushdown_with_selection.csv rename to engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_selection.csv diff --git a/src/test/resources/test_integration_expected/test_projection_pushdown_with_three_way_join.csv b/engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_three_way_join.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_projection_pushdown_with_three_way_join.csv rename to engine/src/test/resources/test_integration_expected/test_projection_pushdown_with_three_way_join.csv diff --git a/src/test/resources/test_integration_expected/test_push_preserves_selection.csv b/engine/src/test/resources/test_integration_expected/test_push_preserves_selection.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_push_preserves_selection.csv rename to engine/src/test/resources/test_integration_expected/test_push_preserves_selection.csv diff --git a/src/test/resources/test_integration_expected/test_push_with_expression_aggregation.csv b/engine/src/test/resources/test_integration_expected/test_push_with_expression_aggregation.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_push_with_expression_aggregation.csv rename to engine/src/test/resources/test_integration_expected/test_push_with_expression_aggregation.csv diff --git a/src/test/resources/test_integration_expected/test_push_with_select_star.csv b/engine/src/test/resources/test_integration_expected/test_push_with_select_star.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_push_with_select_star.csv rename to engine/src/test/resources/test_integration_expected/test_push_with_select_star.csv diff --git a/src/test/resources/test_integration_expected/test_select_distinct.csv b/engine/src/test/resources/test_integration_expected/test_select_distinct.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_select_distinct.csv rename to engine/src/test/resources/test_integration_expected/test_select_distinct.csv diff --git a/src/test/resources/test_integration_expected/test_select_pushdown_after_join.csv b/engine/src/test/resources/test_integration_expected/test_select_pushdown_after_join.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_select_pushdown_after_join.csv rename to engine/src/test/resources/test_integration_expected/test_select_pushdown_after_join.csv diff --git a/src/test/resources/test_integration_expected/test_select_with_complex_where.csv b/engine/src/test/resources/test_integration_expected/test_select_with_complex_where.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_select_with_complex_where.csv rename to engine/src/test/resources/test_integration_expected/test_select_with_complex_where.csv diff --git a/src/test/resources/test_integration_expected/test_select_with_multiple_order_by.csv b/engine/src/test/resources/test_integration_expected/test_select_with_multiple_order_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_select_with_multiple_order_by.csv rename to engine/src/test/resources/test_integration_expected/test_select_with_multiple_order_by.csv diff --git a/src/test/resources/test_integration_expected/test_select_with_order_by.csv b/engine/src/test/resources/test_integration_expected/test_select_with_order_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_select_with_order_by.csv rename to engine/src/test/resources/test_integration_expected/test_select_with_order_by.csv diff --git a/src/test/resources/test_integration_expected/test_select_with_where.csv b/engine/src/test/resources/test_integration_expected/test_select_with_where.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_select_with_where.csv rename to engine/src/test/resources/test_integration_expected/test_select_with_where.csv diff --git a/src/test/resources/test_integration_expected/test_selection_projection_reordering.csv b/engine/src/test/resources/test_integration_expected/test_selection_projection_reordering.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_selection_projection_reordering.csv rename to engine/src/test/resources/test_integration_expected/test_selection_projection_reordering.csv diff --git a/src/test/resources/test_integration_expected/test_selection_pushdown.csv b/engine/src/test/resources/test_integration_expected/test_selection_pushdown.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_selection_pushdown.csv rename to engine/src/test/resources/test_integration_expected/test_selection_pushdown.csv diff --git a/src/test/resources/test_integration_expected/test_selection_to_inner_join.csv b/engine/src/test/resources/test_integration_expected/test_selection_to_inner_join.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_selection_to_inner_join.csv rename to engine/src/test/resources/test_integration_expected/test_selection_to_inner_join.csv diff --git a/src/test/resources/test_integration_expected/test_selection_to_outer_join.csv b/engine/src/test/resources/test_integration_expected/test_selection_to_outer_join.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_selection_to_outer_join.csv rename to engine/src/test/resources/test_integration_expected/test_selection_to_outer_join.csv diff --git a/src/test/resources/test_integration_expected/test_simple_join.csv b/engine/src/test/resources/test_integration_expected/test_simple_join.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_simple_join.csv rename to engine/src/test/resources/test_integration_expected/test_simple_join.csv diff --git a/src/test/resources/test_integration_expected/test_simple_select_all.csv b/engine/src/test/resources/test_integration_expected/test_simple_select_all.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_simple_select_all.csv rename to engine/src/test/resources/test_integration_expected/test_simple_select_all.csv diff --git a/src/test/resources/test_integration_expected/test_simple_select_columns.csv b/engine/src/test/resources/test_integration_expected/test_simple_select_columns.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_simple_select_columns.csv rename to engine/src/test/resources/test_integration_expected/test_simple_select_columns.csv diff --git a/src/test/resources/test_integration_expected/test_sum_count.csv b/engine/src/test/resources/test_integration_expected/test_sum_count.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_sum_count.csv rename to engine/src/test/resources/test_integration_expected/test_sum_count.csv diff --git a/src/test/resources/test_integration_expected/test_sum_product.csv b/engine/src/test/resources/test_integration_expected/test_sum_product.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_sum_product.csv rename to engine/src/test/resources/test_integration_expected/test_sum_product.csv diff --git a/src/test/resources/test_integration_expected/test_sum_without_group_by.csv b/engine/src/test/resources/test_integration_expected/test_sum_without_group_by.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_sum_without_group_by.csv rename to engine/src/test/resources/test_integration_expected/test_sum_without_group_by.csv diff --git a/src/test/resources/test_integration_expected/test_three_way_join.csv b/engine/src/test/resources/test_integration_expected/test_three_way_join.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_three_way_join.csv rename to engine/src/test/resources/test_integration_expected/test_three_way_join.csv diff --git a/src/test/resources/test_integration_expected/test_unnecessary_project.csv b/engine/src/test/resources/test_integration_expected/test_unnecessary_project.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_unnecessary_project.csv rename to engine/src/test/resources/test_integration_expected/test_unnecessary_project.csv diff --git a/src/test/resources/test_integration_expected/test_unnecessary_select.csv b/engine/src/test/resources/test_integration_expected/test_unnecessary_select.csv similarity index 100% rename from src/test/resources/test_integration_expected/test_unnecessary_select.csv rename to engine/src/test/resources/test_integration_expected/test_unnecessary_select.csv diff --git a/src/test/resources/test_integration_queries/test_combine_selects.sql b/engine/src/test/resources/test_integration_queries/test_combine_selects.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_combine_selects.sql rename to engine/src/test/resources/test_integration_queries/test_combine_selects.sql diff --git a/src/test/resources/test_integration_queries/test_combined_optimizations.sql b/engine/src/test/resources/test_integration_queries/test_combined_optimizations.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_combined_optimizations.sql rename to engine/src/test/resources/test_integration_queries/test_combined_optimizations.sql diff --git a/src/test/resources/test_integration_queries/test_complex_join_condition.sql b/engine/src/test/resources/test_integration_queries/test_complex_join_condition.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_complex_join_condition.sql rename to engine/src/test/resources/test_integration_queries/test_complex_join_condition.sql diff --git a/src/test/resources/test_integration_queries/test_distinct_order_by.sql b/engine/src/test/resources/test_integration_queries/test_distinct_order_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_distinct_order_by.sql rename to engine/src/test/resources/test_integration_queries/test_distinct_order_by.sql diff --git a/src/test/resources/test_integration_queries/test_group_by_sum_order_by.sql b/engine/src/test/resources/test_integration_queries/test_group_by_sum_order_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_group_by_sum_order_by.sql rename to engine/src/test/resources/test_integration_queries/test_group_by_sum_order_by.sql diff --git a/src/test/resources/test_integration_queries/test_group_by_with_join.sql b/engine/src/test/resources/test_integration_queries/test_group_by_with_join.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_group_by_with_join.sql rename to engine/src/test/resources/test_integration_queries/test_group_by_with_join.sql diff --git a/src/test/resources/test_integration_queries/test_group_by_with_sum.sql b/engine/src/test/resources/test_integration_queries/test_group_by_with_sum.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_group_by_with_sum.sql rename to engine/src/test/resources/test_integration_queries/test_group_by_with_sum.sql diff --git a/src/test/resources/test_integration_queries/test_join_with_complex_where.sql b/engine/src/test/resources/test_integration_queries/test_join_with_complex_where.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_join_with_complex_where.sql rename to engine/src/test/resources/test_integration_queries/test_join_with_complex_where.sql diff --git a/src/test/resources/test_integration_queries/test_multi_join_optimizations.sql b/engine/src/test/resources/test_integration_queries/test_multi_join_optimizations.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_multi_join_optimizations.sql rename to engine/src/test/resources/test_integration_queries/test_multi_join_optimizations.sql diff --git a/src/test/resources/test_integration_queries/test_optimize_distinct.sql b/engine/src/test/resources/test_integration_queries/test_optimize_distinct.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_optimize_distinct.sql rename to engine/src/test/resources/test_integration_queries/test_optimize_distinct.sql diff --git a/src/test/resources/test_integration_queries/test_optimize_group_by.sql b/engine/src/test/resources/test_integration_queries/test_optimize_group_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_optimize_group_by.sql rename to engine/src/test/resources/test_integration_queries/test_optimize_group_by.sql diff --git a/src/test/resources/test_integration_queries/test_optimize_order_by.sql b/engine/src/test/resources/test_integration_queries/test_optimize_order_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_optimize_order_by.sql rename to engine/src/test/resources/test_integration_queries/test_optimize_order_by.sql diff --git a/src/test/resources/test_integration_queries/test_preserve_join_order.sql b/engine/src/test/resources/test_integration_queries/test_preserve_join_order.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_preserve_join_order.sql rename to engine/src/test/resources/test_integration_queries/test_preserve_join_order.sql diff --git a/src/test/resources/test_integration_queries/test_projection_pushdown.sql b/engine/src/test/resources/test_integration_queries/test_projection_pushdown.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_projection_pushdown.sql rename to engine/src/test/resources/test_integration_queries/test_projection_pushdown.sql diff --git a/src/test/resources/test_integration_queries/test_projection_pushdown_with_group_by.sql b/engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_group_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_projection_pushdown_with_group_by.sql rename to engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_group_by.sql diff --git a/src/test/resources/test_integration_queries/test_projection_pushdown_with_order_by.sql b/engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_order_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_projection_pushdown_with_order_by.sql rename to engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_order_by.sql diff --git a/src/test/resources/test_integration_queries/test_projection_pushdown_with_selection.sql b/engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_selection.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_projection_pushdown_with_selection.sql rename to engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_selection.sql diff --git a/src/test/resources/test_integration_queries/test_projection_pushdown_with_three_way_join.sql b/engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_three_way_join.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_projection_pushdown_with_three_way_join.sql rename to engine/src/test/resources/test_integration_queries/test_projection_pushdown_with_three_way_join.sql diff --git a/src/test/resources/test_integration_queries/test_push_preserves_selection.sql b/engine/src/test/resources/test_integration_queries/test_push_preserves_selection.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_push_preserves_selection.sql rename to engine/src/test/resources/test_integration_queries/test_push_preserves_selection.sql diff --git a/src/test/resources/test_integration_queries/test_push_with_expression_aggregation.sql b/engine/src/test/resources/test_integration_queries/test_push_with_expression_aggregation.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_push_with_expression_aggregation.sql rename to engine/src/test/resources/test_integration_queries/test_push_with_expression_aggregation.sql diff --git a/src/test/resources/test_integration_queries/test_push_with_select_star.sql b/engine/src/test/resources/test_integration_queries/test_push_with_select_star.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_push_with_select_star.sql rename to engine/src/test/resources/test_integration_queries/test_push_with_select_star.sql diff --git a/src/test/resources/test_integration_queries/test_select_distinct.sql b/engine/src/test/resources/test_integration_queries/test_select_distinct.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_select_distinct.sql rename to engine/src/test/resources/test_integration_queries/test_select_distinct.sql diff --git a/src/test/resources/test_integration_queries/test_select_pushdown_after_join.sql b/engine/src/test/resources/test_integration_queries/test_select_pushdown_after_join.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_select_pushdown_after_join.sql rename to engine/src/test/resources/test_integration_queries/test_select_pushdown_after_join.sql diff --git a/src/test/resources/test_integration_queries/test_select_with_complex_where.sql b/engine/src/test/resources/test_integration_queries/test_select_with_complex_where.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_select_with_complex_where.sql rename to engine/src/test/resources/test_integration_queries/test_select_with_complex_where.sql diff --git a/src/test/resources/test_integration_queries/test_select_with_multiple_order_by.sql b/engine/src/test/resources/test_integration_queries/test_select_with_multiple_order_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_select_with_multiple_order_by.sql rename to engine/src/test/resources/test_integration_queries/test_select_with_multiple_order_by.sql diff --git a/src/test/resources/test_integration_queries/test_select_with_order_by.sql b/engine/src/test/resources/test_integration_queries/test_select_with_order_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_select_with_order_by.sql rename to engine/src/test/resources/test_integration_queries/test_select_with_order_by.sql diff --git a/src/test/resources/test_integration_queries/test_select_with_where.sql b/engine/src/test/resources/test_integration_queries/test_select_with_where.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_select_with_where.sql rename to engine/src/test/resources/test_integration_queries/test_select_with_where.sql diff --git a/src/test/resources/test_integration_queries/test_selection_projection_reordering.sql b/engine/src/test/resources/test_integration_queries/test_selection_projection_reordering.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_selection_projection_reordering.sql rename to engine/src/test/resources/test_integration_queries/test_selection_projection_reordering.sql diff --git a/src/test/resources/test_integration_queries/test_selection_pushdown.sql b/engine/src/test/resources/test_integration_queries/test_selection_pushdown.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_selection_pushdown.sql rename to engine/src/test/resources/test_integration_queries/test_selection_pushdown.sql diff --git a/src/test/resources/test_integration_queries/test_selection_to_inner_join.sql b/engine/src/test/resources/test_integration_queries/test_selection_to_inner_join.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_selection_to_inner_join.sql rename to engine/src/test/resources/test_integration_queries/test_selection_to_inner_join.sql diff --git a/src/test/resources/test_integration_queries/test_selection_to_outer_join.sql b/engine/src/test/resources/test_integration_queries/test_selection_to_outer_join.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_selection_to_outer_join.sql rename to engine/src/test/resources/test_integration_queries/test_selection_to_outer_join.sql diff --git a/src/test/resources/test_integration_queries/test_simple_join.sql b/engine/src/test/resources/test_integration_queries/test_simple_join.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_simple_join.sql rename to engine/src/test/resources/test_integration_queries/test_simple_join.sql diff --git a/src/test/resources/test_integration_queries/test_simple_select_all.sql b/engine/src/test/resources/test_integration_queries/test_simple_select_all.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_simple_select_all.sql rename to engine/src/test/resources/test_integration_queries/test_simple_select_all.sql diff --git a/src/test/resources/test_integration_queries/test_simple_select_columns.sql b/engine/src/test/resources/test_integration_queries/test_simple_select_columns.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_simple_select_columns.sql rename to engine/src/test/resources/test_integration_queries/test_simple_select_columns.sql diff --git a/src/test/resources/test_integration_queries/test_sum_count.sql b/engine/src/test/resources/test_integration_queries/test_sum_count.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_sum_count.sql rename to engine/src/test/resources/test_integration_queries/test_sum_count.sql diff --git a/src/test/resources/test_integration_queries/test_sum_product.sql b/engine/src/test/resources/test_integration_queries/test_sum_product.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_sum_product.sql rename to engine/src/test/resources/test_integration_queries/test_sum_product.sql diff --git a/src/test/resources/test_integration_queries/test_sum_without_group_by.sql b/engine/src/test/resources/test_integration_queries/test_sum_without_group_by.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_sum_without_group_by.sql rename to engine/src/test/resources/test_integration_queries/test_sum_without_group_by.sql diff --git a/src/test/resources/test_integration_queries/test_three_way_join.sql b/engine/src/test/resources/test_integration_queries/test_three_way_join.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_three_way_join.sql rename to engine/src/test/resources/test_integration_queries/test_three_way_join.sql diff --git a/src/test/resources/test_integration_queries/test_unnecessary_project.sql b/engine/src/test/resources/test_integration_queries/test_unnecessary_project.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_unnecessary_project.sql rename to engine/src/test/resources/test_integration_queries/test_unnecessary_project.sql diff --git a/src/test/resources/test_integration_queries/test_unnecessary_select.sql b/engine/src/test/resources/test_integration_queries/test_unnecessary_select.sql similarity index 100% rename from src/test/resources/test_integration_queries/test_unnecessary_select.sql rename to engine/src/test/resources/test_integration_queries/test_unnecessary_select.sql diff --git a/pom.xml b/pom.xml index 707a2be..2cb4f92 100644 --- a/pom.xml +++ b/pom.xml @@ -5,55 +5,59 @@ 4.0.0 com.github.jinba1 - java-query-engine - jar + cuckoodb-parent + pom 1.0.0 - Java Query Engine + cuckooDB https://github.com/JinBa1/java-query-engine + + engine + server + + UTF-8 17 17 + 1.37 - - - org.junit.jupiter - junit-jupiter-api - 5.10.2 - test - - - org.junit.jupiter - junit-jupiter-engine - 5.10.2 - test - - - com.github.jsqlparser - jsqlparser - 4.7 - - - org.apache.commons - commons-csv - 1.14.1 - - - org.openjdk.jmh - jmh-core - 1.37 - test - - - org.openjdk.jmh - jmh-generator-annprocess - 1.37 - test - - + + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + + + org.junit.jupiter + junit-jupiter-engine + 5.10.2 + + + com.github.jsqlparser + jsqlparser + 4.7 + + + org.apache.commons + commons-csv + 1.14.1 + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + @@ -82,80 +86,17 @@ maven-assembly-plugin 3.6.0 + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + - - - org.apache.maven.plugins - maven-compiler-plugin - - - - org.openjdk.jmh - jmh-generator-annprocess - 1.37 - - - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.0 - - - run-blazedb - - java - - - com.github.jinba1.blazedb.BlazeDB - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - - com.github.jinba1.blazedb.BlazeDB - - - - jar-with-dependencies - - - - - make-assembly - package - - single - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - - prepare-agent - - - - report - test - - report - - - - - diff --git a/server/pom.xml b/server/pom.xml new file mode 100644 index 0000000..2755430 --- /dev/null +++ b/server/pom.xml @@ -0,0 +1,31 @@ + + + + 4.0.0 + + + com.github.jinba1 + cuckoodb-parent + 1.0.0 + ../pom.xml + + + cuckoodb-server + jar + + cuckooDB Server + + + + + com.github.jinba1 + cuckoodb-engine + ${project.version} + + + diff --git a/server/src/main/java/com/github/jinba1/cuckoodb/server/ServerPlaceholder.java b/server/src/main/java/com/github/jinba1/cuckoodb/server/ServerPlaceholder.java new file mode 100644 index 0000000..d0e8f42 --- /dev/null +++ b/server/src/main/java/com/github/jinba1/cuckoodb/server/ServerPlaceholder.java @@ -0,0 +1,28 @@ +package com.github.jinba1.cuckoodb.server; + +import com.github.jinba1.cuckoodb.QueryResult; + +/** + * Placeholder for the cuckooDB server module. + * + *

The Spring Boot REST gateway is added in a later change. This class exists + * only so that the {@code cuckoodb-server} module compiles against an engine type, + * proving the {@code server -> engine} Maven dependency is wired correctly. A + * broken reactor dependency would fail compilation here rather than passing silently. + */ +public final class ServerPlaceholder { + + private ServerPlaceholder() { + } + + /** + * References an engine type ({@link QueryResult}) so the engine dependency is + * exercised at compile time, not merely declared in the POM. + * + * @return a short description naming the linked engine type + */ + public static String describe() { + return "cuckooDB server skeleton; REST gateway added later. Engine type linked: " + + QueryResult.class.getSimpleName(); + } +}