def raw(self, query: Any, data: Any = None):
        """Runs raw query directly on the database and returns Entity objects

        Note that this method will raise an exception if the returned objects
            are not of the Entity type.

        `query` is not checked for correctness or validity, and any errors thrown by the plugin or
            database are passed as-is. Data passed will be transferred as-is to the plugin.

        All other query options like `order_by`, `offset` and `limit` are ignored for this action.
        """
        logger.debug(f'Query `{self.__class__.__name__}` objects with raw query {query}')

        # Destroy any cached results
        self._result_cache = None

        # Fetch Model class and connected repository from Repository Factory
        model_cls = repo_factory.get_model(self._entity_cls)
        repository = repo_factory.get_repository(self._entity_cls)

        try:
            # Call the raw method of the repository
            results = repository.raw(query, data)

            # Convert the returned results to entity and return it
            entity_items = []
            for item in results.items:
                entity = model_cls.to_entity(item)
                entity.state_.mark_retrieved()
                entity_items.append(entity)
            results.items = entity_items

            # Cache results
            self._result_cache = results
        except Exception:
            # FIXME Log Exception
            raise

        return results
def raw ( self , query : Any , data : Any = None ) : logger . debug ( f'Query `{self.__class__.__name__}` objects with raw query {query}' ) self . _result_cache = None model_cls = repo_factory . get_model ( self . _entity_cls ) repository = repo_factory . get_repository ( self . _entity_cls ) try : results = repository . raw ( query , data ) entity_items = [ ] for item in results . items : entity = model_cls . to_entity ( item ) entity . state_ . mark_retrieved ( ) entity_items . append ( entity ) results . items = entity_items self . _result_cache = results except Exception : raise return results
Runs raw query directly on the database and returns Entity objects

        Note that this method will raise an exception if the returned objects
            are not of the Entity type.

        `query` is not checked for correctness or validity, and any errors thrown by the plugin or
            database are passed as-is. Data passed will be transferred as-is to the plugin.

        All other query options like `order_by`, `offset` and `limit` are ignored for this action.