Skip to content

Commit d6a65d2

Browse files
committed
Refactor expression module to modular architecture and remove optimized components for improved maintainability
1 parent 80ae5a1 commit d6a65d2

File tree

8 files changed

+25
-551
lines changed

8 files changed

+25
-551
lines changed

src/active_record/query_builder.cr

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,38 +41,14 @@ module CQL
4141
# - **@return** [QueryBuilder(T)] A new query builder instance
4242
def with_query(&block : CQL::Query -> CQL::Query)
4343
# Create a new query by applying the block to a copy of the current query
44-
new_query = block.call(clone_query(@query))
44+
new_query = block.call(@query.clone)
4545
QueryBuilder(T).new(new_query, @model_class)
4646
end
4747

4848
# Clone the current QueryBuilder and apply modifications
4949
# - **@return** [QueryBuilder(T)] A new query builder instance
5050
private def clone_builder : QueryBuilder(T)
51-
QueryBuilder(T).new(clone_query(@query), @model_class)
52-
end
53-
54-
# Clone a CQL::Query object since it doesn't have a built-in clone method
55-
private def clone_query(original_query : CQL::Query) : CQL::Query
56-
# Create a new query with the same schema
57-
new_query = CQL::Query.new(original_query.schema)
58-
59-
# Copy properties that have setters
60-
new_query.where = original_query.where
61-
new_query.having = original_query.having
62-
new_query.limit = original_query.limit
63-
new_query.offset = original_query.offset
64-
new_query.distinct = original_query.distinct?
65-
66-
# Copy collections by adding elements one by one
67-
original_query.columns.each { |col| new_query.columns << col }
68-
original_query.query_tables.each { |key, value| new_query.query_tables[key] = value }
69-
original_query.group_by.each { |col| new_query.group_by << col }
70-
original_query.order_by.each { |key, value| new_query.order_by[key] = value }
71-
original_query.joins.each { |join| new_query.joins << join }
72-
original_query.aggr_columns.each { |aggr| new_query.aggr_columns << aggr }
73-
original_query.column_aliases.each { |key, value| new_query.column_aliases[key] = value }
74-
75-
new_query
51+
QueryBuilder(T).new(@query.clone, @model_class)
7652
end
7753

7854
# Add columns to select

src/expression/expressions.cr

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,24 @@
1-
# Optimized expressions module - now uses modular architecture
2-
# This replaces the original monolithic expressions.cr file
1+
# Expression module - main entry point for the expression system
2+
# This file coordinates all expression-related components
33

4-
require "./expressions_optimized"
4+
require "./base_expression"
5+
require "./logical_operators"
6+
require "./comparison_operators"
7+
require "./columns"
8+
require "./aggregate_functions"
9+
require "./query_structure"
10+
require "./data_manipulation"
11+
require "./schema_operations"
12+
13+
# Import all the visitor components
14+
require "./visitor"
15+
require "./generator"
16+
require "./condition_builder"
17+
require "./aggregator_builder"
18+
require "./filter_builder"
19+
require "./having_builder"
20+
21+
module Expression
22+
# All types and constants are defined in the imported modules
23+
# This file serves as the main coordinator for the expression system
24+
end

src/expression/expressions_optimized.cr

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/expression/optimized_aggregator_builder.cr

Lines changed: 0 additions & 48 deletions
This file was deleted.

src/expression/optimized_condition_builder.cr

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/expression/optimized_filter_builder.cr

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)