Class: Dbviewer::Datatable::QueryOperations

Inherits:
Object
  • Object
show all
Defined in:
lib/dbviewer/datatable/query_operations.rb

Overview

QueryOperations handles CRUD operations and data querying for database tables It provides methods to fetch, filter and manipulate data in tables

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection, dynamic_model_factory, table_metadata_manager) ⇒ QueryOperations

Initialize with dependencies

Parameters:



12
13
14
15
16
17
18
# File 'lib/dbviewer/datatable/query_operations.rb', line 12

def initialize(connection, dynamic_model_factory, )
  @connection = connection
  @adapter_name = connection.adapter_name.downcase
  @dynamic_model_factory = dynamic_model_factory
   = 
  @query_analyzer = ::Dbviewer::Query::Analyzer.new(connection)
end

Instance Attribute Details

#adapter_nameObject (readonly)

Returns the value of attribute adapter_name.



6
7
8
# File 'lib/dbviewer/datatable/query_operations.rb', line 6

def adapter_name
  @adapter_name
end

#connectionObject (readonly)

Returns the value of attribute connection.



6
7
8
# File 'lib/dbviewer/datatable/query_operations.rb', line 6

def connection
  @connection
end

Instance Method Details

#analyze_query(table_name, query_params) ⇒ Hash

Analyze query patterns and return performance recommendations

Parameters:

Returns:

  • (Hash)

    Analysis results



81
82
83
# File 'lib/dbviewer/datatable/query_operations.rb', line 81

def analyze_query(table_name, query_params)
  @query_analyzer.analyze_query(table_name, query_params)
end

#column_count(table_name) ⇒ Integer

Get the number of columns in a table

Parameters:

  • table_name (String)

    Name of the table

Returns:

  • (Integer)

    Number of columns



23
24
25
# File 'lib/dbviewer/datatable/query_operations.rb', line 23

def column_count(table_name)
  table_columns(table_name).size
end

#table_count(table_name) ⇒ Integer

Get the total count of records in a table

Parameters:

  • table_name (String)

    Name of the table

Returns:

  • (Integer)

    Number of records



56
57
58
# File 'lib/dbviewer/datatable/query_operations.rb', line 56

def table_count(table_name)
  get_model_for(table_name).count
end

#table_record_count(table_name, column_filters = {}) ⇒ Integer

Get the number of records in a table with filters applied

Parameters:

  • table_name (String)

    Name of the table

  • column_filters (Hash) (defaults to: {})

    Hash of column_name => filter_value for filtering

Returns:

  • (Integer)

    Number of filtered records



64
65
66
67
68
69
70
71
72
73
# File 'lib/dbviewer/datatable/query_operations.rb', line 64

def table_record_count(table_name, column_filters = {})
  return table_count(table_name) unless column_filters.present?

  model = get_model_for(table_name)
  query = model.all

  # Apply filters in the same way as table_records
  query = apply_column_filters(query, table_name, column_filters)
  query.count
end

#table_records(table_name, params) ⇒ ActiveRecord::Result

Get records from a table with pagination and sorting

Parameters:

Returns:

  • (ActiveRecord::Result)

    Result set with columns and rows



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/dbviewer/datatable/query_operations.rb', line 31

def table_records(table_name, params)
  model = get_model_for(table_name)
  query = model.all

  # Apply column filters if provided
  query = apply_column_filters(query, table_name, params.column_filters)

  # Apply sorting if provided
  if params.order_by.present? && column_exists?(table_name, params.order_by)
    query = query.order("#{connection.quote_column_name(params.order_by)} #{params.direction}")
  end

  # Apply pagination
  records = query.limit(params.per_page).offset((params.page - 1) * params.per_page)

  # Get column names for consistent ordering
  column_names = table_columns(table_name).map { |c| c[:name] }

  # Format results
  to_result_set(records, column_names)
end