def read_terms(self,
                   parameters: 'Union[TermParameters, str, Tuple[str, int]]') \
            -> 'List[TermInfo]':
        """
        Получение термов поискового словаря.

        :param parameters: Параметры термов или терм
            или кортеж "терм, количество"
        :return: Список термов
        """
        if not self.check_connection():
            return []

        if isinstance(parameters, tuple):
            parameters2 = TermParameters(parameters[0])
            parameters2.number = parameters[1]
            parameters = parameters2

        if isinstance(parameters, str):
            parameters = TermParameters(parameters)
            parameters.number = 10

        assert isinstance(parameters, TermParameters)

        command = READ_TERMS_REVERSE if parameters.reverse else READ_TERMS
        query = DatabaseQuery(self, command, parameters.database)
        query.utf(parameters.start)
        query.add(parameters.number)
        query.ansi(parameters.format)

        with self.execute(query) as response:
            response.check_return_code(READ_TERMS_CODES)
            lines = response.utf_remaining_lines()
            result = TermInfo.parse(lines)
            return result
    def read_record_postings(self, mfn: int, prefix: str) \
            -> 'List[TermPosting]':
        """
        Получение постингов для указанных записи и префикса.

        :param mfn: MFN записи.
        :param prefix: Префикс в виде "A=$".
        :return: Список постингов.
        """
        if not self.check_connection():
            return []

        assert mfn > 0

        query = DatabaseQuery(self, 'V')
        query.add(mfn)
        query.utf(prefix)

        lines = self._some_one_method(query)
        result = []
        for line in lines:
            one: TermPosting = TermPosting()
            one.parse(line)
            result.append(one)
        return result
    def read_postings(self,
                      parameters: 'Union[PostingParameters, str]',
                      fmt: 'Optional[str]' = None) -> 'List[TermPosting]':
        """
        Считывание постингов для указанных термов из поискового словаря.

        :param parameters: Параметры постингов или терм
        :param fmt: Опциональный формат
        :return: Список постингов
        """
        if not self.check_connection():
            return []

        if isinstance(parameters, str):
            parameters = PostingParameters(parameters)
            parameters.fmt = fmt

        query = DatabaseQuery(self, READ_POSTINGS, parameters.database)
        query.add(parameters.number)
        query.add(parameters.first).ansi(parameters.fmt)
        for term in parameters.terms:
            query.utf(term)
        with self.execute(query) as response:
            result: 'List[TermPosting]' = []
            if not response.check_return_code(READ_TERMS_CODES):
                return result

            while True:
                line = response.utf()
                if not line:
                    break
                posting = TermPosting()
                posting.parse(line)
                result.append(posting)
            return result
Exemple #4
0
 def _query_with_database_and_expression(
     self,
     expression: str,
 ) -> ClientQuery:
     query = DatabaseQuery(self, SEARCH)
     query.utf(expression)
     return query
Exemple #5
0
    def _write_record_begin(
        self,
        record: 'AbstractRecord',
        lock: bool,
        actualize: bool,
        record_type: 'Type[AbstractRecord]',
    ) -> 'Tuple[ClientQuery, str]':
        if not record:
            raise ValueError()

        assert isinstance(record, record_type)

        database = self._get_database(record.database)
        query = DatabaseQuery(self, UPDATE_RECORD, record.database)
        query.add(int(lock))
        query.add(int(actualize))
        query.utf(IRBIS_DELIMITER.join(record.encode()))
        return query, database
    def print_table(self, definition: TableDefinition) -> str:
        """
        Расформатирование таблицы.

        :param definition: Определение таблицы
        :return: Результат расформатирования
        """
        if not self.check_connection():
            return ''

        query = DatabaseQuery(self, PRINT, definition.database)
        query.ansi(definition.table)
        query.ansi('')  # instead of the headers
        query.ansi(definition.mode).utf(definition.search)
        query.add(definition.min_mfn).add(definition.max_mfn)
        query.utf(definition.sequential)
        query.ansi('')  # instead of the MFN list
        with self.execute(query) as response:
            result = response.utf_remaining_text()
            return result