XiaoMi / soar

SQL Optimizer And Rewriter
Apache License 2.0
8.67k stars 1.32k forks source link

去除SQL中的注释问题 #261

Closed zyf-source closed 3 years ago

zyf-source commented 4 years ago

sql:

INSERT INTO action (action_params, action_expression) VALUES ('{\"params\":\"Map\"}', 'function() {\n var person_list = $api.getDataListByAuth(\'acv_ps_rept_list\', {\n \'sub_emplid\': $params.filter,\n \'#NEED_COUNT#\': false\n });\n var retArr = [];\n for (var i = 0; i < person_list.length; i++) {\n if (person_list[i].data != null && person_list[i].data.acv_ps_direct_rep != null) {\n var avatar = $api.getPhotoUrlByEmplid(person_list[i].data.acv_ps_direct_rep.emplid);\n if (!avatar) {\n avatar = $api.getXMPhotoUrlByEmplid(person_list[i].data.acv_ps_direct_rep.emplid)\n }\n retArr.push({\n mis: person_list[i].data.acv_ps_direct_rep.mis,\n name: person_list[i].data.acv_ps_direct_rep.name,\n emplid: person_list[i].data.acv_ps_direct_rep.emplid,\n deptNamePath: person_list[i].data.acv_ps_direct_rep.deptNamePath,\n dept_path: person_list[i].data.acv_ps_directrep.deptNamePath.startsWith(\'\') ? person_list[i].data.acv_ps_directrep.deptNamePath.substring(1).replaceAll(\'\', \'/\') : person_list[i].data.acv_ps_directrep.deptNamePath.replaceAll(\'\', \'/\'),\n avatar: avatar,\n supervis_empl_rcd: person_list[i].data.acv_ps_direct_rep.supervis_empl_rcd,\n empl_rcd: person_list[i].data.acv_ps_direct_rep.empl_rcd\n })\n }\n }\n return {\n dataList: retArr\n }\n}');

这样的sql语法和功能是正常的,在调用services/sql.go中RemoveSQLComments后,sql语句中的值被误去除,造成语法错误

zyf-source commented 4 years ago

上面的sql没有展示正确,'其实转义的,下面是真正的sql INSERT INTO action (action_params, action_expression) VALUES (\'{\"params\":\"Map\"}\', \'function() {\n var person_list = $api.getDataListByAuth(\'acv_ps_rept_list\', {\n \'sub_emplid\': $params.filter,\n \'#NEED_COUNT#\': false\n });\n var retArr = [];\n for (var i = 0; i < person_list.length; i++) {\n if (person_list[i].data != null && person_list[i].data.acv_ps_direct_rep != null) {\n var avatar = $api.getPhotoUrlByEmplid(person_list[i].data.acv_ps_direct_rep.emplid);\n if (!avatar) {\n avatar = $api.getXMPhotoUrlByEmplid(person_list[i].data.acv_ps_direct_rep.emplid)\n }\n retArr.push({\n mis: person_list[i].data.acv_ps_direct_rep.mis,\n name: person_list[i].data.acv_ps_direct_rep.name,\n emplid: person_list[i].data.acv_ps_direct_rep.emplid,\n deptNamePath: person_list[i].data.acv_ps_direct_rep.deptNamePath,\n dept_path: person_list[i].data.acv_ps_directrep.deptNamePath.startsWith(\'\') ? person_list[i].data.acv_ps_directrep.deptNamePath.substring(1).replaceAll(\'\', \'/\') : person_list[i].data.acv_ps_directrep.deptNamePath.replaceAll(\'\', \'/\'),\n avatar: avatar,\n supervis_empl_rcd: person_list[i].data.acv_ps_direct_rep.supervis_empl_rcd,\n empl_rcd: person_list[i].data.acv_ps_direct_rep.empl_rcd\n })\n }\n }\n return {\n dataList: retArr\n }\n}\');

zyf-source commented 4 years ago

问题可以简化为: insert into action(action_params, action_expression) values('a', 'c\'#aaa');