def fetch_ids(self, tree_node): key = tree_node.get_right_node().get_value() try: key = int(key) except: pass var, name = tree_node.get_left_node().get_value().split(".") operator = Operator.get_operator(tree_node.get_value()) find = FindAllIndex(name, key, self._name_type[var], operator, "id") res = [] for client in self._communication_service.get_client_list(): self.send(client.get_name(), 'IndexService', find) for client in self._communication_service.get_client_list(): source_name, source_service, results = self._queue.get() res += results return res
def fetch_query_results(self, expression_node): left_value = expression_node.get_left_node().get_value() right_value = expression_node.get_right_node().get_value() results_ids = [] if self.is_variable(left_value) and self.is_variable(right_value): variable, attribute = right_value.split(".") find_all_index = FindAllIndex(attribute, None, self._name_type[variable], None, "id") results = [] if self._name_type[variable] not in self._ids_list.keys(): for client in self._communication_service.get_client_list(): self.send(client.get_name(), 'IndexService', find_all_index) for client in self._communication_service.get_client_list(): s_name, s_service, res = self._queue.get() results += res self._ids_list[self._name_type[variable]] = results else: results = self._ids_list[self._name_type[variable]] for value, id in results: new_node = ExpressionTreeNode(expression_node.get_value(), expression_node.get_left_node(), ExpressionTreeNode(value)) node_ids = self.fetch_ids(new_node) key = id if variable == self._node_name['node1']: index_name = 'node_id1-id2' else: index_name = 'node_id2-id1' edge_type = self._name_type[self._node_name['edge']] edge_ids = self.get_edge_end_ids(index_name, key, edge_type) ids = self.intersection(node_ids, edge_ids) for i in ids: if variable == self._node_name['node2']: results_ids.append((i, id)) else: results_ids.append((id, i)) result_set = ResultSet("n1n2", results_ids) return result_set elif self.is_variable(left_value): ids = self.fetch_ids(expression_node) variable, attribute = left_value.split(".") if variable == self._node_name['node1']: type = 'n1' else: type = 'n2' result_set = ResultSet(type, ids) return result_set elif self.is_variable(right_value): new_node = ExpressionTreeNode(Operator.get_opposite(expression_node.get_value()), expression_node.get_right_node(), expression_node.get_left_node()) ids = self.fetch_ids(new_node) variable, attribute = right_value.split(".") if variable == self._node_name['node1']: type = 'n1' else: type = 'n2' result_set = ResultSet(type, ids) return result_set
def fetch_results(self, tree_node): results_ids = [] if self.is_variable(tree_node.get_left_node().get_value()) and self.is_variable(tree_node.get_right_node().get_value()): name, var = tree_node.get_right_node().get_value().split(".") find = FindAllIndex(var, None, self._name_type[name], None, "id") results = [] if self._name_type[name] not in self._ids_list.keys(): for client in self._communication_service.get_client_list(): self.send(client.get_name(), 'IndexService', find) for client in self._communication_service.get_client_list(): source_name, source_service, res = self._queue.get() results += res self._ids_list[self._name_type[name]] = results else: results = self._ids_list[self._name_type[name]] for r, id in results: new_node = ExpressionTreeNode(tree_node.get_value(), tree_node.get_left_node(), ExpressionTreeNode(r)) ids = self.fetch_ids(new_node) for i in ids: if tree_node.get_right_node().get_value().split(".")[0] == self._node_name['node2']: results_ids.append((i, id)) else: results_ids.append((id, i)) results_ids = list(set(results_ids)) elif self.is_variable(tree_node.get_left_node().get_value()): ids = self.fetch_ids(tree_node) for name in self._name_type.keys(): if name != tree_node.get_left_node().get_value().split(".")[0]: if self._name_type[name] not in self._ids_list.keys(): find = FindAllIndex('id', None, self._name_type[name], None, "id") results = [] for client in self._communication_service.get_client_list(): self.send(client.get_name(), 'IndexService', find) for client in self._communication_service.get_client_list(): source_name, source_service, res = self._queue.get() results += res self._ids_list[self._name_type[name]] = results else: results = self._ids_list[self._name_type[name]] for id in ids: for r, x in results: if tree_node.get_left_node().get_value().split(".")[0] == self._node_name['node1']: results_ids.append((id, r)) else: results_ids.append((r, id)) elif self.is_variable(tree_node.get_right_node().get_value()): new_node = ExpressionTreeNode(Operator.get_opposite(tree_node.get_value()), tree_node.get_right_node(), tree_node.get_left_node()) ids = self.fetch_ids(new_node) for name in self._name_type.keys(): if name != tree_node.get_left_node().get_value().split(".")[0]: if self._name_type[name] not in self._ids_list.keys(): find = FindAllIndex('id', None, self._name_type[name], None, "id") results = [] for client in self._communication_service.get_client_list(): self.send(client.get_name(), 'IndexService', find) for client in self._communication_service.get_client_list(): source_name, source_service, res = self._queue.get() results += res self._ids_list[self._name_type[name]] = results else: results = self._ids_list[self.self._name_type[name]] for id in ids: for r, x in results: if tree_node.get_right_node().get_value().split(".")[0] == self._node_name['node1']: results_ids.append((id, r)) else: results_ids.append((r, id)) return results_ids