mousheng / lowcoder_CN

🔥🔥🔥开源Retool, Tooljet和Appsmith的替代方案,码匠的开源版
GNU Affero General Public License v3.0
177 stars 52 forks source link

[Bug]: <title>QUERY的数据传递问题 #62

Open wengad82 opened 1 year ago

wengad82 commented 1 year ago

Is there an existing issue for this?

Current Behavior

我的应用数据库是mariadb,在lowcoder的query中执行如下SQL: UPDATE ci_atom_tag SET UPDATED_BY='{{url.query.o_acct_id}}' , UPDATED_TIME=CURRENT_TIMESTAMP() , AT_FLAG_COD='1' WHERE TENANT_ID='{{url.query.o_tenant_id}}' AND ATOM_TAG_PID IN ({{sids}});

其中in子句的{{sids}}的取值如下: 1fea3aa679cd11eead980242ac110002','1fea3a8079cd11eead980242ac110002

然而通过搜集mariadb的mysql.log日志,发现执行的语句是: SET UPDATED_BY='cust009' , UPDATED_TIME=CURRENT_TIMESTAMP() , AT_FLAG_COD='1' WHERE TENANT_ID='787f23f8979f4ebb92d0c255a7b4ab6f' AND ATOM_TAG_PID IN ('1fea3aa679cd11eead980242ac110002'',''1fea3a8079cd11eead980242ac110002') 即lowcoder传数据给数据库的时候,默认给字符串首尾加了单引号,中间有引号的地方,也默认加了单引号

如果sids的内容是1fea3aa679cd11eead980242ac110002,1fea3a8079cd11eead980242ac110002 传给数据库的内容是: SET UPDATED_BY='cust009' , UPDATED_TIME=CURRENT_TIMESTAMP() , AT_FLAG_COD='1' WHERE TENANT_ID='787f23f8979f4ebb92d0c255a7b4ab6f' AND ATOM_TAG_PID IN ('1fea3aa679cd11eead980242ac110002,1fea3a8079cd11eead980242ac110002')

缺陷的场景总结,如果传进去是一个字符串,系统遇到引号就给加一个引号。如果直接给的是list,系统会自动给元素加双引号,逗号隔开各个元素,生成一个类似"aa","bb"的字符串。

Expected Behavior

使用字符串传递数据的时候,平台不要再对字符串进行处理。

Steps to reproduce

NONE

Environment

No response

Additional Information

No response