Class: SqlGenius::Core::Ai::IndexPlanner

Inherits:
Object
  • Object
show all
Defined in:
lib/sql_genius/core/ai/index_planner.rb

Instance Method Summary collapse

Constructor Details

#initialize(client, config, connection) ⇒ IndexPlanner

Returns a new instance of IndexPlanner.



7
8
9
10
11
# File 'lib/sql_genius/core/ai/index_planner.rb', line 7

def initialize(client, config, connection)
  @client = client
  @config = config
  @connection = connection
end

Instance Method Details

#call(tables = nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/sql_genius/core/ai/index_planner.rb', line 13

def call(tables = nil)
  target_tables = resolve_tables(tables)
  return { "plan" => "No tables found to analyze." } if target_tables.empty?

  unused = Analysis::UnusedIndexes.new(@connection).call.indexes
  duplicates = Analysis::DuplicateIndexes.new(@connection, blocked_tables: []).call
  schema = SchemaContextBuilder.new(@connection).call(target_tables, detail: :with_cardinality)

  index_map = target_tables.to_h do |table|
    [table, @connection.indexes_for(table).map do |idx|
      "#{"UNIQUE " if idx.unique}INDEX #{idx.name} (#{idx.columns.join(", ")})"
    end,]
  end

  messages = [
    { role: "system", content: system_prompt },
    { role: "user",   content: user_prompt(schema, unused, duplicates, index_map) },
  ]
  @client.chat(messages: messages)
end