mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-11 14:39:00 +08:00
fix: empty delete bug (#12339)
Co-authored-by: huangzhuo <huangzhuo1@xiaomi.com>
This commit is contained in:
parent
6df17a334c
commit
70698024f5
@ -113,6 +113,8 @@ class BaiduVector(BaseVector):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
quoted_ids = [f"'{id}'" for id in ids]
|
quoted_ids = [f"'{id}'" for id in ids]
|
||||||
self._db.table(self._collection_name).delete(filter=f"id IN({', '.join(quoted_ids)})")
|
self._db.table(self._collection_name).delete(filter=f"id IN({', '.join(quoted_ids)})")
|
||||||
|
|
||||||
|
@ -83,6 +83,8 @@ class ChromaVector(BaseVector):
|
|||||||
self._client.delete_collection(self._collection_name)
|
self._client.delete_collection(self._collection_name)
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
collection = self._client.get_or_create_collection(self._collection_name)
|
collection = self._client.get_or_create_collection(self._collection_name)
|
||||||
collection.delete(ids=ids)
|
collection.delete(ids=ids)
|
||||||
|
|
||||||
|
@ -98,6 +98,8 @@ class ElasticSearchVector(BaseVector):
|
|||||||
return bool(self._client.exists(index=self._collection_name, id=id))
|
return bool(self._client.exists(index=self._collection_name, id=id))
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
for id in ids:
|
for id in ids:
|
||||||
self._client.delete(index=self._collection_name, id=id)
|
self._client.delete(index=self._collection_name, id=id)
|
||||||
|
|
||||||
|
@ -100,6 +100,8 @@ class MyScaleVector(BaseVector):
|
|||||||
return results.row_count > 0
|
return results.row_count > 0
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
self._client.command(
|
self._client.command(
|
||||||
f"DELETE FROM {self._config.database}.{self._collection_name} WHERE id IN {str(tuple(ids))}"
|
f"DELETE FROM {self._config.database}.{self._collection_name} WHERE id IN {str(tuple(ids))}"
|
||||||
)
|
)
|
||||||
|
@ -134,6 +134,8 @@ class OceanBaseVector(BaseVector):
|
|||||||
return bool(cur.rowcount != 0)
|
return bool(cur.rowcount != 0)
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
self._client.delete(table_name=self._collection_name, ids=ids)
|
self._client.delete(table_name=self._collection_name, ids=ids)
|
||||||
|
|
||||||
def get_ids_by_metadata_field(self, key: str, value: str) -> list[str]:
|
def get_ids_by_metadata_field(self, key: str, value: str) -> list[str]:
|
||||||
|
@ -167,6 +167,8 @@ class OracleVector(BaseVector):
|
|||||||
return docs
|
return docs
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
with self._get_cursor() as cur:
|
with self._get_cursor() as cur:
|
||||||
cur.execute(f"DELETE FROM {self.table_name} WHERE id IN %s" % (tuple(ids),))
|
cur.execute(f"DELETE FROM {self.table_name} WHERE id IN %s" % (tuple(ids),))
|
||||||
|
|
||||||
|
@ -129,6 +129,11 @@ class PGVector(BaseVector):
|
|||||||
return docs
|
return docs
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
# Avoiding crashes caused by performing delete operations on empty lists in certain scenarios
|
||||||
|
# Scenario 1: extract a document fails, resulting in a table not being created.
|
||||||
|
# Then clicking the retry button triggers a delete operation on an empty list.
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
with self._get_cursor() as cur:
|
with self._get_cursor() as cur:
|
||||||
cur.execute(f"DELETE FROM {self.table_name} WHERE id IN %s", (tuple(ids),))
|
cur.execute(f"DELETE FROM {self.table_name} WHERE id IN %s", (tuple(ids),))
|
||||||
|
|
||||||
|
@ -140,6 +140,8 @@ class TencentVector(BaseVector):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]) -> None:
|
def delete_by_ids(self, ids: list[str]) -> None:
|
||||||
|
if not ids:
|
||||||
|
return
|
||||||
self._db.collection(self._collection_name).delete(document_ids=ids)
|
self._db.collection(self._collection_name).delete(document_ids=ids)
|
||||||
|
|
||||||
def delete_by_metadata_field(self, key: str, value: str) -> None:
|
def delete_by_metadata_field(self, key: str, value: str) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user