Skip to content

函数管理 ​

语法为 JS(默认 ECMAScript 5.1 标准,引擎为 Nashorn),可以在报表 SQL 中通过 ${xxx} 的方式调用 JS 函数,实现 SQL 与 JS 混编的能力,是动态 SQL 的重要组成部分。默认提供 and、like、In、range 等函数,也可以根据实际业务自由添加函数。

函数保存后即刻生效(内部缓存约 1.5 秒自动刷新)。

默认函数 ​

javascript
/**
 * 结果预览:and field = :code
 * @param field  字段名
 * @param code   维度编码
 * @returns {string}
 */
function and(field, code) {
    return eval(code) && ' and ' + field + '=:' + code
}

/**
 * 结果预览:and field like '%xxx%'
 * @param field  字段名
 * @param code   维度编码
 * @returns {string}
 */
function like(field, code) {
    return eval(code) && ' and ' + field + " like '%" + eval(code) + "%'"
}

/**
 * 结果预览:and field in (:code)
 * @param field  字段名
 * @param code   维度编码
 * @returns {string}
 */
function In(field, code) {
    var val = eval(code);
    return val && val.length > 0 && ' and ' + field + ' in (:' + code + ')' || null;
}

/**
 * 区间查询,支持只填写单边区间
 * 结果预览:and field between 'a' and 'b'
 * @param field  字段名
 * @param code   维度编码
 * @returns {string}
 */
function range(field, code) {
    var val = eval(code);
    if (val && val.length) {
        if (!val[0] && val[0] !== 0) {
            return " and " + field + " <= '" + val[1] + "'"
        } else if (!val[1] && val[1] !== 0) {
            return " and " + field + " >= '" + val[0] + "'"
        }
        return " and " + field + " between '" + val[0] + "' and " + "'" + val[1] + "'"
    }
}

使用示例 ​

sql
select * from xxx where 1=1 ${and('字段名','维度编码')}

select '${1+1}'

${} 内的表达式由 JS 引擎求值,求值结果替换回 SQL;查询维度的值同时以命名参数(:维度编码)的方式安全绑定到 JDBC,避免 SQL 注入。

贡献者

The avatar of contributor named as YuePeng YuePeng
The avatar of contributor named as Claude Fable 5.1 Claude Fable 5.1

页面历史

Released under the Apache-2.0 License.