Module: LlmCostTracker::Ledger::Schema::Adapter
- Defined in:
- lib/llm_cost_tracker/ledger/schema/adapter.rb
Constant Summary collapse
- MYSQL_ADAPTERS =
%w[ ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter ActiveRecord::ConnectionAdapters::Mysql2Adapter ActiveRecord::ConnectionAdapters::TrilogyAdapter ].freeze
- POSTGRESQL_ADAPTERS =
%w[ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter ].freeze
- MYSQL_PATTERN =
/mysql|trilogy|mariadb/i- POSTGRESQL_PATTERN =
/postgres/i
Class Method Summary collapse
- .ensure_supported!(value) ⇒ Object
- .mysql?(value) ⇒ Boolean
- .period_bucket_sql(connection, period, column) ⇒ Object
- .postgresql?(value) ⇒ Boolean
Class Method Details
.ensure_supported!(value) ⇒ Object
29 30 31 32 33 |
# File 'lib/llm_cost_tracker/ledger/schema/adapter.rb', line 29 def ensure_supported!(value) return if mysql?(value) || postgresql?(value) raise Error, "Unsupported database adapter: #{adapter_name(value)}. Use PostgreSQL or MySQL." end |
.mysql?(value) ⇒ Boolean
21 22 23 |
# File 'lib/llm_cost_tracker/ledger/schema/adapter.rb', line 21 def mysql?(value) adapter_instance?(value, MYSQL_ADAPTERS) || adapter_name(value).match?(MYSQL_PATTERN) end |
.period_bucket_sql(connection, period, column) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/llm_cost_tracker/ledger/schema/adapter.rb', line 39 def period_bucket_sql(connection, period, column) period = period.to_sym if postgresql?(connection) "TO_CHAR(DATE_TRUNC('#{period}', #{column}), '#{PG_PERIOD_FORMATS.fetch(period)}')" elsif mysql?(connection) "DATE_FORMAT(#{column}, '#{MYSQL_PERIOD_FORMATS.fetch(period)}')" else ensure_supported!(connection) end rescue KeyError raise ArgumentError, "invalid period: #{period.inspect}" end |
.postgresql?(value) ⇒ Boolean
25 26 27 |
# File 'lib/llm_cost_tracker/ledger/schema/adapter.rb', line 25 def postgresql?(value) adapter_instance?(value, POSTGRESQL_ADAPTERS) || adapter_name(value).match?(POSTGRESQL_PATTERN) end |