From aff681ac64a948c5f5e2b8f8e5b150724992680f Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 2 Apr 2024 10:43:38 +0800 Subject: [PATCH] fix(tsdb):set correct varchar type compare function. --- source/dnode/vnode/src/tsdb/tsdbRead2.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 5469eae1cd..2e6a0a43e9 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -107,7 +107,21 @@ int32_t pkCompEx(__compar_fn_t comparFn, SRowKey* p1, SRowKey* p2) { if (p1->numOfPKs == 0) { return 0; } else { - return comparFn(&p1->pks[0].val, &p2->pks[0].val); + if (IS_VAR_DATA_TYPE(p1->pks[0].type)) { + int32_t len = TMIN(p1->pks[0].nData, p2->pks[0].nData); + int32_t ret = strncmp((char*)p1->pks[0].pData, (char*)p2->pks[0].pData, len); + if (ret == 0) { + if (p1->pks[0].nData == p2->pks[0].nData) { + return 0; + } else { + return p1->pks[0].nData > p2->pks[0].nData?1:-1; + } + } else { + return ret > 0? 1:-1; + } + } else { + return comparFn(&p1->pks[0].val, &p2->pks[0].val); + } } }