| 166 | |
| 167 | @dataclass |
| 168 | class OracleKVStorage(BaseKVStorage): |
| 169 | # should pass db object to self.db |
| 170 | def __post_init__(self): |
| 171 | self._data = {} |
| 172 | self._max_batch_size = self.global_config["embedding_batch_num"] |
| 173 | |
| 174 | ################ QUERY METHODS ################ |
| 175 | |
| 176 | async def get_by_id(self, id: str) -> Union[dict, None]: |
| 177 | """根据 id 获取 doc_full 数据.""" |
| 178 | SQL = SQL_TEMPLATES["get_by_id_" + self.namespace] |
| 179 | params = {"workspace": self.db.workspace, "id": id} |
| 180 | # print("get_by_id:"+SQL) |
| 181 | res = await self.db.query(SQL, params) |
| 182 | if res: |
| 183 | data = res # {"data":res} |
| 184 | # print (data) |
| 185 | return data |
| 186 | else: |
| 187 | return None |
| 188 | |
| 189 | # Query by id |
| 190 | async def get_by_ids(self, ids: list[str], fields=None) -> Union[list[dict], None]: |
| 191 | """根据 id 获取 doc_chunks 数据""" |
| 192 | SQL = SQL_TEMPLATES["get_by_ids_" + self.namespace].format( |
| 193 | ids=",".join([f"'{id}'" for id in ids]) |
| 194 | ) |
| 195 | params = {"workspace": self.db.workspace} |
| 196 | # print("get_by_ids:"+SQL) |
| 197 | # print(params) |
| 198 | res = await self.db.query(SQL, params, multirows=True) |
| 199 | if res: |
| 200 | data = res # [{"data":i} for i in res] |
| 201 | # print(data) |
| 202 | return data |
| 203 | else: |
| 204 | return None |
| 205 | |
| 206 | async def filter_keys(self, keys: list[str]) -> set[str]: |
| 207 | """过滤掉重复内容""" |
| 208 | SQL = SQL_TEMPLATES["filter_keys"].format( |
| 209 | table_name=N_T[self.namespace], ids=",".join([f"'{id}'" for id in keys]) |
| 210 | ) |
| 211 | params = {"workspace": self.db.workspace} |
| 212 | try: |
| 213 | await self.db.query(SQL, params) |
| 214 | except Exception as e: |
| 215 | logger.error(f"Oracle database error: {e}") |
| 216 | print(SQL) |
| 217 | print(params) |
| 218 | res = await self.db.query(SQL, params, multirows=True) |
| 219 | data = None |
| 220 | if res: |
| 221 | exist_keys = [key["id"] for key in res] |
| 222 | data = set([s for s in keys if s not in exist_keys]) |
| 223 | else: |
| 224 | exist_keys = [] |
| 225 | data = set([s for s in keys if s not in exist_keys]) |
nothing calls this directly
no outgoing calls
no test coverage detected