具体实现有些费劲,因为子查询中的select语句参数中也不能支持大文本数据。但(insert + 绑定变量)可以。 于是在数据库建立global temporary table,是仅有一个ID字段的表,设置成on commit preserve rows;在testlink的database.inc.php新增一个wrap_list函数,内容是:先删除临时表;再用存储过程把逗号分隔的list参数分解成id,插入临时表,然后返回一个子查询语句“select id from temp_id_table”。这样,testlink的 in ({$idList})就可以改写成 in ({$this->db->wrap_list($idList)})。
另外,testlink的database类不支持绑定参数,稍微改造一下就可以了。
这两步做好以后,浏览和编写案例基本上就没问题了;但搜索案例仍有问题。继续改搜索:
1、搜索代码中有个逻辑,如果没填caseID,就在sql中加一个 and id in (项目中所有caseid)。这个地方唯一的作用就是把搜索限制在指定的项目中。我的思路是在案例上增加项目信息,就可以筛选了。具体做法有点取巧:在nodes_hierarchy的tcversion节点的name字段记录projectID(反正这个字段没有被TL使用)。为此需要修改create testcase version的方法(有两处)。