class DateQueries::Adapter::OracleEnhancedAdapter

Public Class Methods

condition_string_for_current_time(field, date, *skip_args) click to toggle source
# File lib/date_queries/adapters/oracle_enhanced_adapter.rb, line 74
      def self.condition_string_for_current_time(field, date, *skip_args)

        if skip_args.include?(:year)
          if skip_args.include?(:month)
            # condition for date only
            <<-QUERY
              to_char(#{field}, 'DD') = '#{date.in_time_zone.strftime('%d')}'
            QUERY
          elsif skip_args.include?(:date)
            # condition for month only
            <<-QUERY
              to_char(#{field}, 'MM') = '#{date.in_time_zone.strftime('%m')}'
            QUERY
          else
            # condition for month and day only
            <<-QUERY
              to_char(#{field}, 'MMDD') = '#{date.in_time_zone.strftime('%m%d')}'
            QUERY
          end
        elsif skip_args.include?(:month)
          if skip_args.include?(:date)
            # condition for year only
            <<-QUERY
              to_char(#{field}, 'YYYY') = '#{date.in_time_zone.strftime('%Y')}'
            QUERY
          else
            # condition for year and date only
            <<-QUERY
              to_char(#{field}, 'YYYYDD') = '#{date.in_time_zone.strftime('%Y%d')}'
            QUERY
          end
        elsif skip_args.include?(:date)
          # condition for month and year only.
          <<-QUERY
            to_char(#{field}, 'YYYYMM') = '#{date.in_time_zone.strftime('%Y%m')}'
          QUERY
        else
          # condition for checking current date without time
          <<-QUERY
            to_char(#{field}, 'YYYYMMDD') = '#{date.in_time_zone.strftime('%Y%m%d')}'
          QUERY
        end

      end
condition_string_for_range(field, start_date, end_date, *skip_args) click to toggle source
# File lib/date_queries/adapters/oracle_enhanced_adapter.rb, line 5
      def self.condition_string_for_range(field, start_date, end_date, *skip_args)
        # Oracle related conditions string with skipped arguments

        if skip_args.present?
          if skip_args.include?(:year)
            if skip_args.include?(:month)
              # condition with month and year skipped
              if start_date.strftime('%d') > end_date.strftime('%d')
                <<-QUERY
                  to_char(#{field}, 'DD') BETWEEN ('#{start_date.in_time_zone.strftime('%d')}' AND '31')
                  OR to_char(#{field}, 'DD') BETWEEN ('01' AND '#{end_date.in_time_zone.strftime('%d')}')
                QUERY
              else
                <<-QUERY
                  to_char(#{field}, 'DD') BETWEEN
                    '#{start_date.in_time_zone.strftime('%d')}' AND '#{end_date.in_time_zone.strftime('%d')}'
                QUERY
              end
            elsif skip_args.include?(:date)
              # condition with year and date skipped
              if start_date.strftime('%m') > end_date.strftime('%m')
                <<-QUERY
                  to_char(#{field}, 'MM') BETWEEN ('#{start_date.in_time_zone.strftime('%m')}' AND '12')
                  OR to_char(#{field}, 'MM') BETWEEN ('01' AND '#{end_date.in_time_zone.strftime('%m')}')
                QUERY
              else
                <<-QUERY
                  to_char(#{field}, 'MM') BETWEEN
                    '#{start_date.in_time_zone.strftime('%m')}' AND '#{end_date.in_time_zone.strftime('%m')}'
                QUERY
              end
            else
              # condition with only year skipped
              if start_date.strftime('%m%d') > end_date.strftime('%m%d')
                <<-QUERY
                  to_char(#{field}, 'MMDD') BETWEEN ('#{start_date.in_time_zone.strftime('%m%d')}' AND '1231')
                  OR to_char(#{field}, 'MMDD') BETWEEN ('0101' AND '#{end_date.in_time_zone.strftime('%m%d')}')
                QUERY
              else
                <<-QUERY
                  to_char(#{field}, 'MMDD') BETWEEN
                    '#{start_date.in_time_zone.strftime('%m%d')}' AND '#{end_date.in_time_zone.strftime('%m%d')}'
                QUERY
              end
            end
          elsif skip_args.include?(:month)
            if skip_args.include?(:date)
              # condition with month and date skipped
              <<-QUERY
                to_char(#{field}, 'YYYY') BETWEEN
                  '#{start_date.in_time_zone.strftime('%Y')}' AND '#{end_date.in_time_zone.strftime('%Y')}'
              QUERY
            else
              # condition with only month skipped
              <<-QUERY
                to_char(#{field}, 'YYYYDD') BETWEEN
                  '#{start_date.in_time_zone.strftime('%Y%d')}' AND '#{end_date.in_time_zone.strftime('%Y%d')}'
              QUERY
            end
          elsif skip_args.include?(:date)
            # condition with only date skipped
            <<-QUERY
              to_char(#{field}, 'YYYYMM') BETWEEN
                '#{start_date.in_time_zone.strftime('%Y%m')}' AND '#{end_date.in_time_zone.strftime('%Y%m')}'
            QUERY
          end
        end
      end