From b923090e47f5391344727e6ca176efd915003d89 Mon Sep 17 00:00:00 2001 From: -LAN- Date: Wed, 25 Feb 2026 14:38:04 +0800 Subject: [PATCH] fix: parameterize myscale query vector and add regression test --- .../datasource/vdb/myscale/myscale_vector.py | 7 +++- .../vdb/myscale/test_myscale_vector.py | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 api/tests/unit_tests/core/rag/datasource/vdb/myscale/test_myscale_vector.py diff --git a/api/core/rag/datasource/vdb/myscale/myscale_vector.py b/api/core/rag/datasource/vdb/myscale/myscale_vector.py index 3b8c562aaf..e2fbc29567 100644 --- a/api/core/rag/datasource/vdb/myscale/myscale_vector.py +++ b/api/core/rag/datasource/vdb/myscale/myscale_vector.py @@ -142,7 +142,12 @@ class MyScaleVector(BaseVector): ) def search_by_vector(self, query_vector: list[float], **kwargs: Any) -> list[Document]: - return self._search(f"distance(vector, {str(query_vector)})", self._vec_order, **kwargs) + return self._search( + "distance(vector, %(query_vector)s)", + self._vec_order, + parameters={"query_vector": query_vector}, + **kwargs, + ) def search_by_full_text(self, query: str, **kwargs: Any) -> list[Document]: return self._search( diff --git a/api/tests/unit_tests/core/rag/datasource/vdb/myscale/test_myscale_vector.py b/api/tests/unit_tests/core/rag/datasource/vdb/myscale/test_myscale_vector.py new file mode 100644 index 0000000000..82e17c1190 --- /dev/null +++ b/api/tests/unit_tests/core/rag/datasource/vdb/myscale/test_myscale_vector.py @@ -0,0 +1,32 @@ +from unittest.mock import MagicMock, patch + +from core.rag.datasource.vdb.myscale.myscale_vector import MyScaleConfig, MyScaleVector + + +@patch("core.rag.datasource.vdb.myscale.myscale_vector.get_client") +def test_search_by_vector_uses_parameterized_query(mock_get_client): + mock_client = MagicMock() + mock_get_client.return_value = mock_client + + vector = MyScaleVector( + collection_name="test_collection", + config=MyScaleConfig( + host="localhost", + port=8123, + user="default", + password="", + database="dify", + fts_params="", + ), + ) + vector._search = MagicMock(return_value=[]) + + query_vector = [0.1, 0.2, 0.3] + vector.search_by_vector(query_vector, top_k=5) + + vector._search.assert_called_once_with( + "distance(vector, %(query_vector)s)", + vector._vec_order, + parameters={"query_vector": query_vector}, + top_k=5, + )