Project

General

Profile

Bug #4367 » 0001-Fixed-enumeration-precalculation-for-non-arrays.patch

Radko Krkoš, 01/07/2019 04:00 PM

View differences:

lib/mentat/services/eventstorage.py
748 748
        for column_name in ENUM_TABLES:
749 749
            create_table_sqls.append(
750 750
                psycopg2.sql.SQL(
751
                    "CREATE TABLE IF NOT EXISTS {}(data text UNIQUE, last_seen TIMESTAMP WITHOUT TIME ZONE)"
751
                    "CREATE TABLE IF NOT EXISTS {} (data text UNIQUE NOT NULL, last_seen TIMESTAMP WITHOUT TIME ZONE NOT NULL)"
752 752
                ).format(
753 753
                    psycopg2.sql.Identifier(
754 754
                        "enum_{}".format(column_name)
......
1056 1056
        enum_table = "enum_{}".format(column)
1057 1057
        try:
1058 1058
            # Build and execute query for updating enumeration table.
1059
            enum_query = psycopg2.sql.SQL("INSERT INTO {} (").format(psycopg2.sql.Identifier(enum_table))
1059
            enum_query = psycopg2.sql.SQL("INSERT INTO {} (SELECT * FROM (").format(psycopg2.sql.Identifier(enum_table))
1060 1060
            if column not in ('cesnet_eventclass', 'cesnet_eventseverity'):
1061 1061
                enum_query += psycopg2.sql.SQL("SELECT unnest({})").format(psycopg2.sql.Identifier(column))
1062 1062
            else:
1063 1063
                enum_query += psycopg2.sql.SQL("SELECT {}").format(psycopg2.sql.Identifier(column))
1064
            enum_query += psycopg2.sql.SQL(' AS data, max(cesnet_storagetime) AS last_seen FROM events WHERE cesnet_storagetime >= COALESCE((SELECT max(last_seen) FROM {}), (SELECT min(cesnet_storagetime) FROM events)) GROUP BY data) ON CONFLICT (data) DO UPDATE SET last_seen = excluded.last_seen').format(psycopg2.sql.Identifier(enum_table))
1064
            enum_query += psycopg2.sql.SQL(' AS data, max(cesnet_storagetime) AS last_seen FROM events WHERE cesnet_storagetime >= COALESCE((SELECT max(last_seen) FROM {}), (SELECT min(cesnet_storagetime) FROM events)) GROUP BY data) AS enum WHERE data IS NOT NULL) ON CONFLICT (data) DO UPDATE SET last_seen = excluded.last_seen').format(psycopg2.sql.Identifier(enum_table))
1065 1065
            self.cursor.execute(enum_query)
1066 1066
            self.commit()
1067 1067

  
    (1-1/1)