提交 29f4cba3 编写于 作者: wmmhello's avatar wmmhello

add json compare function support

上级 7186767f
......@@ -722,8 +722,19 @@ int32_t tagValCompar(const void* p1, const void* p2) {
const STidTags* t2 = (const STidTags*) varDataVal(p2);
if (t1->padding == TSDB_DATA_TYPE_JSON){
__compar_fn_t func = getComparFunc(t1->tag[0], 0);
return func(t1->tag + CHAR_BYTES, t2->tag + CHAR_BYTES);
bool f1IsNull = (*t1->tag == TSDB_DATA_TYPE_NCHAR && isNull(t1->tag + CHAR_BYTES, TSDB_DATA_TYPE_JSON));
bool f2IsNull = (*t1->tag == TSDB_DATA_TYPE_NCHAR && isNull(t1->tag + CHAR_BYTES, TSDB_DATA_TYPE_JSON));
if(f1IsNull && f2IsNull){
return 0;
}else if(f1IsNull && !f2IsNull){
return -1;
}else if(!f1IsNull && f2IsNull){
return 1;
}else {
assert(*t1->tag == *t1->tag);
__compar_fn_t func = getComparFunc(t1->tag[0], 0);
return func(t1->tag + CHAR_BYTES, t2->tag + CHAR_BYTES);
}
}
__compar_fn_t func = getComparFunc(t1->padding, 0);
return func(t1->tag, t2->tag);
......
......@@ -368,10 +368,20 @@ static int32_t tsCompareFunc(TSKEY k1, TSKEY k2, int32_t order) {
int32_t columnValueAscendingComparator(char *f1, char *f2, int32_t type, int32_t bytes) {
if (type == TSDB_DATA_TYPE_JSON){
assert(*f1 == *f2);
type = *f1;
f1 = POINTER_SHIFT(f1, CHAR_BYTES);
f2 = POINTER_SHIFT(f2, CHAR_BYTES);
bool f1IsNull = (*f1 == TSDB_DATA_TYPE_NCHAR && isNull(f1 + CHAR_BYTES, TSDB_DATA_TYPE_JSON));
bool f2IsNull = (*f2 == TSDB_DATA_TYPE_NCHAR && isNull(f2 + CHAR_BYTES, TSDB_DATA_TYPE_JSON));
if(f1IsNull && f2IsNull){
return 0;
}else if(f1IsNull && !f2IsNull){
return -1;
}else if(!f1IsNull && f2IsNull){
return 1;
}else{
assert(*f1 == *f2);
type = *f1;
f1 += CHAR_BYTES;
f2 += CHAR_BYTES;
}
}
switch (type) {
case TSDB_DATA_TYPE_INT: DEFAULT_COMP(GET_INT32_VAL(f1), GET_INT32_VAL(f2));
......
......@@ -279,7 +279,7 @@ class TDTestCase:
tdSql.execute("INSERT INTO db_json_tag_test.jsons1_21 using db_json_tag_test.jsons1 tags('{\"tagint\":11}') values(now, 11, false, \"你就会\")")
tdSql.execute("INSERT INTO db_json_tag_test.jsons1_22 using db_json_tag_test.jsons1 tags('{\"tagint\":2}') values(now, 2, false, \"你就会\")")
tdSql.query("select avg(dataint),count(*) from db_json_tag_test.jsons1 group by jtag->'tagint' order by jtag->'tagint' desc")
//tdSql.checkData(1, 0, 2.5)
#tdSql.checkData(1, 0, 2.5)
# test json->'key'=null
tdSql.execute("insert into db_json_tag_test.jsons1_9 values('2020-04-17 15:20:00.000', 5, false, 'json19')")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册