fix: parameterize myscale query vector and add regression test

This commit is contained in:
-LAN- 2026-02-25 14:38:04 +08:00
parent e0436bf2db
commit b923090e47
No known key found for this signature in database
GPG Key ID: 6BA0D108DED011FF
2 changed files with 38 additions and 1 deletions

View File

@ -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(

View File

@ -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,
)