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
def _query_with_database_and_expression( self, expression: str, ) -> ClientQuery: query = DatabaseQuery(self, SEARCH) query.utf(expression) return query
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