diff --git a/lib/reports_kit.rb b/lib/reports_kit.rb index a04c4c0..faec52f 100644 --- a/lib/reports_kit.rb +++ b/lib/reports_kit.rb @@ -21,6 +21,7 @@ require 'reports_kit/reports/adapters/mysql' require 'reports_kit/reports/adapters/postgresql' +require 'reports_kit/reports/adapters/mssql' require 'reports_kit/reports/data/add_table_aggregations' require 'reports_kit/reports/data/aggregate_composite' diff --git a/lib/reports_kit/reports/adapters/mssql.rb b/lib/reports_kit/reports/adapters/mssql.rb new file mode 100644 index 0000000..ae9b229 --- /dev/null +++ b/lib/reports_kit/reports/adapters/mssql.rb @@ -0,0 +1,26 @@ +module ReportsKit + module Reports + module Adapters + class Mssql + def self.truncate_to_day(column) + "CONVERT(date,#{column})" + end + + def self.truncate_to_week(column) + case ReportsKit.configuration.first_day_of_week + when :sunday + "DATEADD(day, 1 - DATEPART(weekday,#{column}), CONVERT(date,#{column}))" + when :monday + "DATEADD(day, - (DATEPART(weekday,#{column}) + 5 ) % 7, CONVERT(date,#{column}))" + else + raise ArgumentError.new("Unsupported first_day_of_week: #{ReportsKit.configuration.first_day_of_week}") + end + end + + def self.truncate_to_month(column) + "DATEADD(day, 1 - DATEPART(day,#{column}), CONVERT(date,#{column}))" + end + end + end + end +end diff --git a/lib/reports_kit/reports/dimension_with_series.rb b/lib/reports_kit/reports/dimension_with_series.rb index 4c87003..f27b3aa 100644 --- a/lib/reports_kit/reports/dimension_with_series.rb +++ b/lib/reports_kit/reports/dimension_with_series.rb @@ -5,7 +5,8 @@ class DimensionWithSeries VALID_GRANULARITIES = %w(day week month).freeze ADAPTER_NAMES_CLASSES = { 'mysql2' => Adapters::Mysql, - 'postgresql' => Adapters::Postgresql + 'postgresql' => Adapters::Postgresql, + 'sqlserver' => Adapters::Mssql }.freeze attr_accessor :dimension, :series, :configuration