diff --git a/app/services/solid_queue_monitor/chart_data_service.rb b/app/services/solid_queue_monitor/chart_data_service.rb index 6b9fce6..6384099 100644 --- a/app/services/solid_queue_monitor/chart_data_service.rb +++ b/app/services/solid_queue_monitor/chart_data_service.rb @@ -81,16 +81,19 @@ def fill_buckets(buckets, index_counts) # Cross-DB bucket index expression. # PostgreSQL: CAST((EXTRACT(EPOCH FROM col) - start) / interval AS INTEGER) # SQLite: CAST((CAST(strftime('%s', col) AS INTEGER) - start) / interval AS INTEGER) + # MySQL: CAST((UNIX_TIMESTAMP(col) - start) / interval AS SIGNED) def bucket_index_expr(column, start_epoch, interval_seconds) - if sqlite? + if adapter?('sqlite') "CAST((CAST(strftime('%s', #{column}) AS INTEGER) - #{start_epoch}) / #{interval_seconds} AS INTEGER)" + elsif adapter?('mysql') + "CAST((UNIX_TIMESTAMP(#{column}) - #{start_epoch}) / #{interval_seconds} AS SIGNED)" else "CAST((EXTRACT(EPOCH FROM #{column}) - #{start_epoch}) / #{interval_seconds} AS INTEGER)" end end - def sqlite? - ActiveRecord::Base.connection.adapter_name.downcase.include?('sqlite') + def adapter?(name) + ActiveRecord::Base.connection.adapter_name.downcase.include?(name) end end end