Merge pull request #13566 from taosdata/feature/TD-13041
fix:return false in is ture operator if result is null
This commit is contained in:
commit
f335ffe835
|
@ -373,9 +373,6 @@ static FORCE_INLINE void ncharToVar(char* buf, SScalarParam* pOut, int32_t rowIn
|
||||||
|
|
||||||
//TODO opt performance, tmp is not needed.
|
//TODO opt performance, tmp is not needed.
|
||||||
int32_t vectorConvertFromVarData(const SScalarParam* pIn, SScalarParam* pOut, int32_t inType, int32_t outType) {
|
int32_t vectorConvertFromVarData(const SScalarParam* pIn, SScalarParam* pOut, int32_t inType, int32_t outType) {
|
||||||
int32_t bufSize = pIn->columnData->info.bytes;
|
|
||||||
char *tmp = taosMemoryMalloc(bufSize + VARSTR_HEADER_SIZE);
|
|
||||||
|
|
||||||
bool vton = false;
|
bool vton = false;
|
||||||
|
|
||||||
_bufConverteFunc func = NULL;
|
_bufConverteFunc func = NULL;
|
||||||
|
@ -423,6 +420,12 @@ int32_t vectorConvertFromVarData(const SScalarParam* pIn, SScalarParam* pOut, in
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int32_t bufSize = pIn->columnData->info.bytes;
|
||||||
|
char *tmp = taosMemoryMalloc(varDataTLen(data));
|
||||||
|
if(!tmp){
|
||||||
|
sclError("out of memory in vectorConvertFromVarData");
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
if (vton) {
|
if (vton) {
|
||||||
memcpy(tmp, data, varDataTLen(data));
|
memcpy(tmp, data, varDataTLen(data));
|
||||||
} else {
|
} else {
|
||||||
|
@ -444,9 +447,9 @@ int32_t vectorConvertFromVarData(const SScalarParam* pIn, SScalarParam* pOut, in
|
||||||
}
|
}
|
||||||
|
|
||||||
(*func)(tmp, pOut, i);
|
(*func)(tmp, pOut, i);
|
||||||
|
taosMemoryFreeClear(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMemoryFreeClear(tmp);
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1674,6 +1677,14 @@ void vectorNotNull(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut
|
||||||
|
|
||||||
void vectorIsTrue(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t _ord) {
|
void vectorIsTrue(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t _ord) {
|
||||||
vectorConvertImpl(pLeft, pOut);
|
vectorConvertImpl(pLeft, pOut);
|
||||||
|
for(int32_t i = 0; i < pOut->numOfRows; ++i) {
|
||||||
|
if(colDataIsNull_s(pOut->columnData, i)) {
|
||||||
|
int8_t v = 0;
|
||||||
|
colDataAppendInt8(pOut->columnData, i, &v);
|
||||||
|
colDataSetNotNull_f(pOut->columnData->nullbitmap, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pOut->columnData->hasNull = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
STagVal getJsonValue(char *json, char *key, bool *isExist) {
|
STagVal getJsonValue(char *json, char *key, bool *isExist) {
|
||||||
|
|
|
@ -1328,7 +1328,7 @@ TEST(columnTest, json_column_logic_op) {
|
||||||
printf("--------------------json null---null {1, 8, 2, 2, 3, 0, 0, 0, 0}------------------\n");
|
printf("--------------------json null---null {1, 8, 2, 2, 3, 0, 0, 0, 0}------------------\n");
|
||||||
|
|
||||||
key = "k3"; // (null is true) return NULL, so use DBL_MAX represent NULL
|
key = "k3"; // (null is true) return NULL, so use DBL_MAX represent NULL
|
||||||
double eRes2[len+len1] = {false, false, false, false, false, false, true, false, DBL_MAX, false, false, false, false};
|
bool eRes2[len+len1] = {false, false, false, false, false, false, true, false, false, false, false, false, false};
|
||||||
for(int i = 0; i < len; i++){
|
for(int i = 0; i < len; i++){
|
||||||
makeCalculate(row, key, TSDB_DATA_TYPE_INT, &input[i], eRes2[i], op[i], false);
|
makeCalculate(row, key, TSDB_DATA_TYPE_INT, &input[i], eRes2[i], op[i], false);
|
||||||
}
|
}
|
||||||
|
@ -1456,7 +1456,7 @@ TEST(columnTest, json_column_logic_op) {
|
||||||
printf("---------------------json not exist-- NULL {1, 8, 2, 2, 3, 0, 0, 0, 0}------------------\n");
|
printf("---------------------json not exist-- NULL {1, 8, 2, 2, 3, 0, 0, 0, 0}------------------\n");
|
||||||
|
|
||||||
key = "k10"; // (NULL is true) return NULL, so use DBL_MAX represent NULL
|
key = "k10"; // (NULL is true) return NULL, so use DBL_MAX represent NULL
|
||||||
double eRes9[len+len1] = {false, false, false, false, false, false, true, false, DBL_MAX, false, false, false, false};
|
bool eRes9[len+len1] = {false, false, false, false, false, false, true, false, false, false, false, false, false};
|
||||||
for(int i = 0; i < len; i++){
|
for(int i = 0; i < len; i++){
|
||||||
makeCalculate(row, key, TSDB_DATA_TYPE_INT, &input[i], eRes9[i], op[i], false);
|
makeCalculate(row, key, TSDB_DATA_TYPE_INT, &input[i], eRes9[i], op[i], false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,9 +109,6 @@ class TDTestCase:
|
||||||
# print("============== STEP 3 ===== query table")
|
# print("============== STEP 3 ===== query table")
|
||||||
# # test error syntax
|
# # test error syntax
|
||||||
tdSql.error("select * from jsons1 where jtag->tag1='beijing'")
|
tdSql.error("select * from jsons1 where jtag->tag1='beijing'")
|
||||||
#tdSql.error("select * from jsons1 where jtag->'location'")
|
|
||||||
#tdSql.error("select * from jsons1 where jtag->''")
|
|
||||||
#tdSql.error("select * from jsons1 where jtag->''=9")
|
|
||||||
tdSql.error("select -> from jsons1")
|
tdSql.error("select -> from jsons1")
|
||||||
tdSql.error("select * from jsons1 where contains")
|
tdSql.error("select * from jsons1 where contains")
|
||||||
tdSql.error("select * from jsons1 where jtag->")
|
tdSql.error("select * from jsons1 where jtag->")
|
||||||
|
@ -341,6 +338,13 @@ class TDTestCase:
|
||||||
# tdSql.checkRows(3)
|
# tdSql.checkRows(3)
|
||||||
# tdSql.query("select * from jsons1 where jtag->'tag1' between 'femail' and 'beijing'")
|
# tdSql.query("select * from jsons1 where jtag->'tag1' between 'femail' and 'beijing'")
|
||||||
# tdSql.checkRows(2)
|
# tdSql.checkRows(2)
|
||||||
|
|
||||||
|
# test is true
|
||||||
|
tdSql.query("select * from jsons1 where jtag->'location'")
|
||||||
|
tdSql.checkRows(0)
|
||||||
|
tdSql.query("select * from jsons1 where jtag->'tag1'")
|
||||||
|
tdSql.checkRows(3)
|
||||||
|
|
||||||
#
|
#
|
||||||
# # test with tbname/normal column
|
# # test with tbname/normal column
|
||||||
tdSql.query("select * from jsons1 where tbname = 'jsons1_1'")
|
tdSql.query("select * from jsons1 where tbname = 'jsons1_1'")
|
||||||
|
|
Loading…
Reference in New Issue