diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index f4c107199bb0556b4d9476b6fb435d7a471affc8..2743b173c73d4b627b3a5d05a8a8627668a66f4e 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -4472,7 +4472,7 @@ static int32_t validateMatchExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_ if(pLeft->tokenId == TK_ARROW && pSchema[index].type == TSDB_DATA_TYPE_JSON && !JSON_TYPE_BINARY){ return invalidOperationMsg(msgBuf, msg2); } - + if (!(pRight->type == SQL_NODE_VALUE && pRight->value.nType == TSDB_DATA_TYPE_BINARY)) { return invalidOperationMsg(msgBuf, msg3); } @@ -9230,6 +9230,9 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS colType = TSDB_DATA_TYPE_BIGINT; } else if (colType == TSDB_DATA_TYPE_FLOAT || colType == TSDB_DATA_TYPE_DOUBLE) { colType = TSDB_DATA_TYPE_DOUBLE; + } else if (colType == TSDB_DATA_TYPE_JSON){ + if (JSON_TYPE_NCHAR) colType = TSDB_DATA_TYPE_NCHAR; + else colType = TSDB_DATA_TYPE_BINARY; } STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, pQueryInfo->curTableIdx); STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta); diff --git a/tests/pytest/stable/json_tag.py b/tests/pytest/stable/json_tag.py index 3d239c62de8ea32d1166709bf351ff78d3e1ecea..977ba43e4340c6c3540de2fe15d9578f9b537aa8 100644 --- a/tests/pytest/stable/json_tag.py +++ b/tests/pytest/stable/json_tag.py @@ -37,7 +37,7 @@ class TDTestCase: tdSql.error("insert into db_json_tag_test.jsons1_4 using db_json_tag_test.jsons1 tags(3)") tdSql.execute("insert into db_json_tag_test.jsons1_1 values(now, 1, 'json1')") tdSql.execute("insert into db_json_tag_test.jsons1_3 using db_json_tag_test.jsons1 tags('{\"num\":34,\"location\":\"beijing\",\"level\":\"l1\"}') values (now, 3, 'json3')") - tdSql.execute("insert into db_json_tag_test.jsons1_4 using db_json_tag_test.jsons1 tags('{\"class\":55,\"location\":\"beijing\",\"name\":\"name4\"}') values (now, 4, 'json4')") + tdSql.execute("insert into db_json_tag_test.jsons1_4 using db_json_tag_test.jsons1 tags('{\"class\":55,\"location\":\"shanghai\",\"name\":\"name4\"}') values (now, 4, 'json4')") print("==============step2") tdLog.info("alter stable add tag") @@ -57,24 +57,43 @@ class TDTestCase: tdSql.query("select * from db_json_tag_test.jsons1") tdSql.checkRows(4) + # error test tdSql.error("select * from db_json_tag_test.jsons1 where jtag->'location'=4") - - tdSql.query("select * from db_json_tag_test.jsons1 where jtag->'location'='beijing'") - tdSql.checkRows(3) - + tdSql.error("select * from db_json_tag_test.jsons1 where jtag->location='beijing'") + tdSql.error("select * from db_json_tag_test.jsons1 where jtag->'location'") + tdSql.error("select jtag->location from db_json_tag_test.jsons1") + tdSql.error("select jtag?location from db_json_tag_test.jsons1") + tdSql.error("select * from db_json_tag_test.jsons1 where jtag?location") + tdSql.error("select * from db_json_tag_test.jsons1 where jtag?'location'='beijing'") + + # test select condition tdSql.query("select jtag->'location' from db_json_tag_test.jsons1_2") tdSql.checkData(0, 0, "beijing") + tdSql.query("select jtag->'location' from db_json_tag_test.jsons1") + tdSql.checkRows(4) + + tdSql.query("select jtag from db_json_tag_test.jsons1_1") + tdSql.checkRows(1) + + # test json string value + tdSql.query("select * from db_json_tag_test.jsons1 where jtag->'location'='beijing'") + tdSql.checkRows(2) + + tdSql.query("select * from db_json_tag_test.jsons1 where jtag->'location'!='beijing'") + tdSql.checkRows(1) tdSql.query("select jtag->'num' from db_json_tag_test.jsons1 where jtag->'level'='l1'") tdSql.checkData(0, 0, 34) - tdSql.query("select jtag->'location' from db_json_tag_test.jsons1") - tdSql.checkRows(4) + # test json number value + tdSql.query("select *,tbname from db_json_tag_test.jsons1 where jtag->'class'>5 and jtag->'class'<9") + tdSql.checkRows(0) - tdSql.query("select jtag from db_json_tag_test.jsons1_1") + tdSql.query("select *,tbname from db_json_tag_test.jsons1 where jtag->'class'>5 and jtag->'class'<92") tdSql.checkRows(1) + # test where condition tdSql.query("select * from db_json_tag_test.jsons1 where jtag?'sex' or jtag?'num'") tdSql.checkRows(3) @@ -107,6 +126,22 @@ class TDTestCase: tdSql.query("select * from db_json_tag_test.jsons1 where tbname = 'jsons1_1' or jtag->'num'=5") tdSql.checkRows(2) + # test where condition like + tdSql.query("select *,tbname from db_json_tag_test.jsons1 where jtag->'location' like 'bei%'") + tdSql.checkRows(2) + + tdSql.query("select *,tbname from db_json_tag_test.jsons1 where jtag->'location' like 'bei%' and jtag->'location'='beijin'") + tdSql.checkRows(0) + + tdSql.query("select *,tbname from db_json_tag_test.jsons1 where jtag->'location' like 'bei%' or jtag->'location'='beijin'") + tdSql.checkRows(2) + + tdSql.query("select *,tbname from db_json_tag_test.jsons1 where jtag->'location' like 'bei%' and jtag->'num'=34") + tdSql.checkRows(1) + + tdSql.query("select *,tbname from db_json_tag_test.jsons1 where (jtag->'location' like 'bei%' or jtag->'num'=34)) and jtag->'class'=55") + tdSql.checkRows(1) + def stop(self): tdSql.close()