def process_query( self, query: Query, request_settings: RequestSettings, ) -> None: from_clause = query.get_data_source() if not isinstance(from_clause, JoinClause): return referenced_columns = query.get_all_referenced_columns() referenced_aliases = set() for qualified_column in referenced_columns: # This will be much better when we will represent columns # with a more structured data type than strings. match = QUALIFIED_COLUMN_REGEX.match(qualified_column) if match: # match[1] is the first parenthesized group in the regex, thus # the table alias. table_alias = match[1] referenced_aliases.add(table_alias) assert (len(referenced_aliases) > 0), "Trying to otpimize a join query without aliases" if len(referenced_aliases) > 1: return from_tables = from_clause.get_tables() table = from_tables[referenced_aliases.pop()] query.set_data_source(table)
def process_query(self, query: Query, request_settings: RequestSettings) -> None: readonly_enabled = state.get_config("enable_events_readonly_table", False) if not readonly_enabled: return if request_settings.get_consistent(): return data_source = query.get_data_source() if data_source.format_from() != self.__table_to_replace: return new_source = TableSource( table_name=self.__read_only_table, columns=data_source.get_columns(), mandatory_conditions=data_source.get_mandatory_conditions(), prewhere_candidates=data_source.get_prewhere_candidates(), ) query.set_data_source(new_source)