Return a batch of state change records (identifier and data)

        The batch size can be tweaked with the `limit` and `offset` arguments.

        Additionally the returned state changes can be optionally filtered with
        the `filters` parameter to search for specific data in the state change data.

def _get_state_changes(
            self,
            limit: int = None,
            offset: int = None,
            filters: List[Tuple[str, Any]] = None,
            logical_and: bool = True,
    ) -> List[StateChangeRecord]:
        """ Return a batch of state change records (identifier and data)

        The batch size can be tweaked with the `limit` and `offset` arguments.

        Additionally the returned state changes can be optionally filtered with
        the `filters` parameter to search for specific data in the state change data.
        """
        cursor = self._form_and_execute_json_query(
            query='SELECT identifier, data FROM state_changes ',
            limit=limit,
            offset=offset,
            filters=filters,
            logical_and=logical_and,
        )
        result = [
            StateChangeRecord(
                state_change_identifier=row[0],
                data=row[1],
            )
            for row in cursor
        ]

        return result