# Generated by Django 3.2.6 on 2021-11-11 10:18


from django.db import migrations


class Migration(migrations.Migration):
    dependencies = [
        ("database", "0046_add_lookup_field"),
    ]

    operations = [
        migrations.RunSQL(
            "DROP FUNCTION IF EXISTS date_diff(text, TIMESTAMP , TIMESTAMP );",
            (
                """
CREATE OR REPLACE FUNCTION date_diff (units TEXT, start_t TIMESTAMP, end_t TIMESTAMP)
     RETURNS NUMERIC(50, 0) AS $$
   DECLARE
     diff_interval INTERVAL;
     diff NUMERIC(50, 0) = 0;
     years_diff NUMERIC(50, 0) = 0;
   BEGIN
     IF units IN ('yy', 'yyyy', 'year', 'mm', 'm', 'month') THEN
       years_diff = DATE_PART('year', end_t) - DATE_PART('year', start_t);

       IF units IN ('yy', 'yyyy', 'year') THEN
         -- SQL Server does not count full years passed (only difference between year
         -- parts)
         RETURN years_diff;
       ELSE
         -- If end month is less than start month it will subtracted
         RETURN years_diff * 12 + (DATE_PART('month', end_t) - DATE_PART('month',
                start_t));
       END IF;
     END IF;

     -- Minus operator returns interval 'DDD days HH:MI:SS'
     diff_interval = end_t - start_t;

     diff = diff + DATE_PART('day', diff_interval);

     IF units IN ('wk', 'ww', 'week') THEN
       diff = diff/7;
       RETURN diff;
     END IF;

     IF units IN ('dd', 'd', 'day') THEN
       RETURN diff;
     END IF;

     diff = diff * 24 + DATE_PART('hour', diff_interval);

     IF units IN ('hh', 'hour') THEN
        RETURN diff;
     END IF;

     diff = diff * 60 + DATE_PART('minute', diff_interval);

     IF units IN ('mi', 'n', 'minute') THEN
        RETURN diff;
     END IF;

     IF units IN ('s', 'ss', 'second') THEN
        RETURN diff * 60 + DATE_PART('second', diff_interval);
     END IF;

     RETURN 'NaN';
   END;
   $$ LANGUAGE plpgsql;
"""
            ),
        ),
        migrations.RunSQL(
            (
                """
CREATE OR REPLACE FUNCTION date_diff (units TEXT, start_t TIMESTAMP with time zone,
end_t TIMESTAMP with time zone)
     RETURNS NUMERIC(50, 0) AS $$
   DECLARE
     diff_interval INTERVAL;
     diff NUMERIC(50, 0) = 0;
     years_diff NUMERIC(50, 0) = 0;
   BEGIN
     IF units IN ('yy', 'yyyy', 'year', 'mm', 'm', 'month') THEN
       years_diff = DATE_PART('year', end_t) - DATE_PART('year', start_t);

       IF units IN ('yy', 'yyyy', 'year') THEN
         -- SQL Server does not count full years passed (only difference between year
         -- parts)
         RETURN years_diff;
       ELSE
         -- If end month is less than start month it will subtracted
         RETURN years_diff * 12 + (DATE_PART('month', end_t) - DATE_PART('month',
                start_t));
       END IF;
     END IF;

     -- Minus operator returns interval 'DDD days HH:MI:SS'
     diff_interval = end_t - start_t;

     diff = diff + DATE_PART('day', diff_interval);

     IF units IN ('wk', 'ww', 'week') THEN
       diff = diff/7;
       RETURN diff;
     END IF;

     IF units IN ('dd', 'd', 'day') THEN
       RETURN diff;
     END IF;

     diff = diff * 24 + DATE_PART('hour', diff_interval);

     IF units IN ('hh', 'hour') THEN
        RETURN diff;
     END IF;

     diff = diff * 60 + DATE_PART('minute', diff_interval);

     IF units IN ('mi', 'n', 'minute') THEN
        RETURN diff;
     END IF;

     IF units IN ('s', 'ss', 'second') THEN
        RETURN diff * 60 + DATE_PART('second', diff_interval);
     END IF;

     RETURN 'NaN';
   END;
   $$ LANGUAGE plpgsql;
"""
            ),
            (
                """
DROP FUNCTION
IF EXISTS date_diff(text, TIMESTAMP with time zone, TIMESTAMP with time zone);
"""
            ),
        ),
    ]
