Module: ActiveRecord::Trino::Config

Defined in:
lib/active_record/trino/config.rb

Constant Summary collapse

DEFAULT_QUERY_TIMEOUT =
150
DEFAULT_PLAN_TIMEOUT =
30
DEFAULT_SLOW_QUERY_THRESHOLD_SECONDS =
20
DEFAULT_HTTP_PORT =
8080
DEFAULT_HTTPS_PORT =
443
REQUIRED_KEYS =
%i[host user catalog schema].freeze

Class Method Summary collapse

Class Method Details

.client_options(config) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/active_record/trino/config.rb', line 16

def client_options(config)
  symbolized = symbolize(config)
  validate!(symbolized)
  ssl = symbolized.fetch(:ssl, false)
  port = symbolized.fetch(:port, default_port(ssl))
  {
    server: "#{symbolized[:host]}:#{port}",
    user: symbolized[:user],
    password: symbolized[:password],
    catalog: symbolized[:catalog],
    schema: symbolized[:schema],
    ssl: ssl,
    http_proxy: symbolized[:http_proxy],
    time_zone: symbolized[:time_zone],
    query_timeout: symbolized.fetch(:query_timeout, DEFAULT_QUERY_TIMEOUT),
    plan_timeout: symbolized.fetch(:plan_timeout, DEFAULT_PLAN_TIMEOUT),
  }.compact
end

.default_port(ssl) ⇒ Object



35
36
37
# File 'lib/active_record/trino/config.rb', line 35

def default_port(ssl)
  ssl ? DEFAULT_HTTPS_PORT : DEFAULT_HTTP_PORT
end

.slow_query_threshold(config) ⇒ Object



39
40
41
42
# File 'lib/active_record/trino/config.rb', line 39

def slow_query_threshold(config)
  symbolized = symbolize(config)
  symbolized.fetch(:slow_query_threshold_seconds, DEFAULT_SLOW_QUERY_THRESHOLD_SECONDS).to_f
end

.symbolize(config) ⇒ Object



53
54
55
# File 'lib/active_record/trino/config.rb', line 53

def symbolize(config)
  config.to_h.transform_keys(&:to_sym)
end

.validate!(config) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/active_record/trino/config.rb', line 44

def validate!(config)
  symbolized = symbolize(config)
  missing = REQUIRED_KEYS.reject { |k| symbolized[k] && !symbolized[k].to_s.empty? }
  return if missing.empty?

  raise ActiveRecord::Trino::ConfigurationError,
        "activerecord-trino-adapter: missing required config keys: #{missing.join(', ')}"
end