Skip to content

Commit 9485eea

Browse files
committed
Remove unused methods
1 parent 13a4005 commit 9485eea

11 files changed

Lines changed: 2 additions & 563 deletions

‎lib/aggregate_evaluator.rb‎

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,6 @@ def validate_aggregate_types(expression, row_data = {})
7171
end
7272
end
7373

74-
def get_aggregate_type(expression, row_data = {})
75-
case expression[:type]
76-
when :aggregate_function
77-
get_aggregate_function_type(expression, row_data)
78-
else
79-
@evaluator.get_expression_type(expression, row_data)
80-
end
81-
end
82-
8374
private
8475

8576
def evaluate_expression_with_aggregates(expression, group_rows)

‎lib/aggregate_function_registry.rb‎

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@ def initialize(name:, requires_argument:, argument_type: nil, return_type:, defa
99
@return_type = return_type
1010
@default_value = default_value
1111
end
12-
13-
def validate_argument(arg_type)
14-
return true unless @requires_argument
15-
return true if @argument_type.nil?
16-
17-
arg_type == @argument_type
18-
end
1912
end
2013

2114
def self.instance
@@ -39,28 +32,6 @@ def exists?(name)
3932
@functions.key?(name)
4033
end
4134

42-
def validate_function(name, arg_type = nil)
43-
function = get(name)
44-
return false unless function
45-
46-
function.validate_argument(arg_type)
47-
end
48-
49-
def get_return_type(name)
50-
function = get(name)
51-
function&.return_type
52-
end
53-
54-
def get_default_value(name)
55-
function = get(name)
56-
function&.default_value
57-
end
58-
59-
def requires_argument?(name)
60-
function = get(name)
61-
function&.requires_argument
62-
end
63-
6435
private
6536

6637
def register_default_functions

‎lib/expression_visitor.rb‎

Lines changed: 0 additions & 193 deletions
Original file line numberDiff line numberDiff line change
@@ -105,197 +105,4 @@ def visit_column(expr)
105105
def visit_qualified_column(expr)
106106
@columns << expr
107107
end
108-
end
109-
110-
class ExpressionValidatorVisitor < ExpressionVisitor
111-
def initialize(table_context, evaluator)
112-
@table_context = table_context
113-
@evaluator = evaluator
114-
@errors = []
115-
end
116-
117-
def errors
118-
@errors
119-
end
120-
121-
def valid?
122-
@errors.empty?
123-
end
124-
125-
protected
126-
127-
def visit_column(expr)
128-
column_name = expr[:name]
129-
found = false
130-
count = 0
131-
132-
table_context_hash = @table_context.is_a?(Hash) ? @table_context : @table_context.to_hash
133-
134-
table_context_hash[:aliases].each do |alias_name, table_name|
135-
table_info = table_context_hash[:tables][table_name]
136-
if table_info[:columns].any? { |col| col[:name] == column_name }
137-
found = true
138-
count += 1
139-
end
140-
end
141-
142-
unless found
143-
@errors << "Unknown column: #{column_name}"
144-
end
145-
146-
if count > 1
147-
@errors << "Ambiguous column: #{column_name}"
148-
end
149-
end
150-
151-
def visit_qualified_column(expr)
152-
table_ref = expr[:table]
153-
column_name = expr[:column]
154-
155-
table_context_hash = @table_context.is_a?(Hash) ? @table_context : @table_context.to_hash
156-
157-
actual_table = table_context_hash[:aliases][table_ref]
158-
unless actual_table
159-
@errors << "Unknown table: #{table_ref}"
160-
return
161-
end
162-
163-
table_info = table_context_hash[:tables][actual_table]
164-
unless table_info[:columns].any? { |col| col[:name] == column_name }
165-
@errors << "Unknown column: #{table_ref}.#{column_name}"
166-
end
167-
end
168-
169-
def visit_binary_op(expr)
170-
super
171-
172-
# Type validation for comparison operators
173-
if expr[:operator] == :equal || expr[:operator] == :not_equal
174-
left_type = get_expression_type(expr[:left])
175-
right_type = get_expression_type(expr[:right])
176-
177-
if (left_type == :integer && right_type == :boolean) ||
178-
(left_type == :boolean && right_type == :integer)
179-
@errors << "Type mismatch in comparison"
180-
end
181-
end
182-
end
183-
184-
private
185-
186-
def get_expression_type(expr)
187-
# Simplified type inference
188-
case expr[:type]
189-
when :literal
190-
if expr[:value].nil?
191-
nil
192-
elsif expr[:value] == true || expr[:value] == false
193-
:boolean
194-
else
195-
:integer
196-
end
197-
when :column, :qualified_column
198-
# Would need to look up column type in table context
199-
:unknown
200-
when :binary_op
201-
case expr[:operator]
202-
when :plus, :minus, :star, :slash
203-
:integer
204-
when :lt, :gt, :lte, :gte, :equal, :not_equal, :and, :or
205-
:boolean
206-
end
207-
else
208-
:unknown
209-
end
210-
end
211-
end
212-
213-
class ExpressionTransformVisitor < ExpressionVisitor
214-
def visit(expression)
215-
return nil unless expression
216-
217-
case expression[:type]
218-
when :literal
219-
transform_literal(expression)
220-
when :column
221-
transform_column(expression)
222-
when :qualified_column
223-
transform_qualified_column(expression)
224-
when :binary_op
225-
transform_binary_op(expression)
226-
when :unary_op
227-
transform_unary_op(expression)
228-
when :function
229-
transform_function(expression)
230-
when :aggregate_function
231-
transform_aggregate_function(expression)
232-
when :is_null
233-
transform_is_null(expression)
234-
when :is_not_null
235-
transform_is_not_null(expression)
236-
else
237-
expression
238-
end
239-
end
240-
241-
protected
242-
243-
def transform_literal(expr)
244-
expr
245-
end
246-
247-
def transform_column(expr)
248-
expr
249-
end
250-
251-
def transform_qualified_column(expr)
252-
expr
253-
end
254-
255-
def transform_binary_op(expr)
256-
{
257-
type: :binary_op,
258-
operator: expr[:operator],
259-
left: visit(expr[:left]),
260-
right: visit(expr[:right])
261-
}
262-
end
263-
264-
def transform_unary_op(expr)
265-
{
266-
type: :unary_op,
267-
operator: expr[:operator],
268-
operand: visit(expr[:operand])
269-
}
270-
end
271-
272-
def transform_function(expr)
273-
{
274-
type: :function,
275-
name: expr[:name],
276-
args: expr[:args]&.map { |arg| visit(arg) }
277-
}
278-
end
279-
280-
def transform_aggregate_function(expr)
281-
{
282-
type: :aggregate_function,
283-
name: expr[:name],
284-
args: expr[:args]&.map { |arg| visit(arg) }
285-
}
286-
end
287-
288-
def transform_is_null(expr)
289-
{
290-
type: :is_null,
291-
operand: visit(expr[:operand])
292-
}
293-
end
294-
295-
def transform_is_not_null(expr)
296-
{
297-
type: :is_not_null,
298-
operand: visit(expr[:operand])
299-
}
300-
end
301108
end

‎lib/query_planner.rb‎

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,6 @@ def initialize(validator, evaluator)
44
@evaluator = evaluator
55
end
66

7-
def validate_query(parsed_sql, table_info, alias_mapping)
8-
table_name = parsed_sql[:table_name]
9-
expressions = parsed_sql[:expressions]
10-
where_clause = parsed_sql[:where]
11-
order_by = parsed_sql[:order_by]
12-
limit = parsed_sql[:limit]
13-
offset = parsed_sql[:offset]
14-
15-
# Create a dummy row with appropriate types for validation
16-
dummy_row_data = create_dummy_row_data(table_info[:columns])
17-
18-
# Validate SELECT expressions
19-
@validator.validate_select_expressions(expressions, dummy_row_data, table_name)
20-
21-
# Validate WHERE clause if present
22-
if where_clause
23-
@validator.validate_qualified_columns(where_clause, table_name)
24-
return false unless @validator.validate_where_clause(where_clause, dummy_row_data)
25-
end
26-
27-
# Validate ORDER BY if present
28-
if order_by
29-
unless validate_order_by(order_by, alias_mapping, table_name, dummy_row_data)
30-
return false
31-
end
32-
end
33-
34-
# Validate LIMIT if present
35-
if limit
36-
return false unless @validator.validate_limit_offset_expression(limit)
37-
end
38-
39-
# Validate OFFSET if present
40-
if offset
41-
return false unless @validator.validate_limit_offset_expression(offset)
42-
end
43-
44-
true
45-
end
46-
477
def build_alias_mapping(expressions)
488
mapping = {}
499
expressions.each do |expr_info|
@@ -67,38 +27,4 @@ def extract_column_names(expressions)
6727
end
6828
end
6929
end
70-
71-
private
72-
73-
def validate_order_by(order_by, alias_mapping, table_name, dummy_row_data)
74-
# First check if it's a simple alias reference
75-
if order_by[:expression][:type] == :column && alias_mapping[order_by[:expression][:name]]
76-
# It's an alias - this is allowed for simple references
77-
true
78-
else
79-
# For expressions containing aliases, they're not allowed
80-
if @validator.contains_alias_in_expression?(order_by[:expression], alias_mapping)
81-
return false
82-
end
83-
# Validate the ORDER BY expression normally
84-
@validator.validate_qualified_columns(order_by[:expression], table_name)
85-
@evaluator.validate_types(order_by[:expression], dummy_row_data)
86-
true
87-
end
88-
end
89-
90-
def create_dummy_row_data(columns)
91-
dummy_row_data = {}
92-
columns.each do |col|
93-
case col[:type]
94-
when 'BOOLEAN'
95-
dummy_row_data[col[:name]] = true
96-
when 'INTEGER'
97-
dummy_row_data[col[:name]] = 0
98-
else
99-
dummy_row_data[col[:name]] = nil
100-
end
101-
end
102-
dummy_row_data
103-
end
10430
end

‎lib/row_context_builder.rb‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,4 @@ def build_join_context(left_context, join_row, join_table_info, join_table_name,
3030

3131
context
3232
end
33-
34-
def extract_row_data(row_context, table_info)
35-
row_data = {}
36-
table_info[:columns].each do |col|
37-
row_data[col[:name]] = row_context[col[:name]]
38-
end
39-
row_data
40-
end
4133
end

0 commit comments

Comments
 (0)