如何使用 Math.js 解析器测试 MySQL 语法
How to test a MySQL syntax using Math.js parser
我允许用户在Web表单字段中指定MySQL计算字段,该字段可能如下所示:
(bldgFuelCostElectricity * assetMotorSize) * if(bldgField1>bldgField2,bldgField1-bldgField2,0) * 24
在运行时,我将用其他表列替换驼峰参数,但在让用户将此表达式保存为报告模板的一部分之前,我想使用 Math 测试函数的有效性.js但它不喜欢 IF() 构造。Math.js 确实允许函数名称覆盖,但我无法使其适用于 IF 的特定情况,因为这是一个保留字。
当MySQL具有某些已经具有JavaScript等效项的函数时.js如何使用Math测试MySQL函数是否有效?
你需要用math.js的解析器仔细测试MySQL语法,因为它们的语法不同。您必须仔细定义您支持的语法并显式测试它。
你可以用数学.js将表达式解析为表达式树并对其进行分析。通过遍历树,可以验证语法。例如:
var node = math.parse('3 * x + 2');
node.traverse(function (node, path, parent) {
switch (node.type) {
case 'OperatorNode': console.log(node.type, node.op); break;
case 'ConstantNode': console.log(node.type, node.value); break;
case 'SymbolNode': console.log(node.type, node.name); break;
default: console.log(node.type);
}
});
// outputs:
// OperatorNode +
// OperatorNode *
// ConstantNode 3
// SymbolNode x
// ConstantNode 2
因此,在您的情况下,您可以只解析表达式,然后分析返回的树:
var node = math.parse('(bldgFuelCostElectricity * assetMotorSize) * if(bldgField1>bldgField2,bldgField1-bldgField2,0) * 24');
// node.traverse(...)
有关详细信息,请参阅文档:http://mathjs.org/docs/expressions/expression_trees.html
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 使用jquery将mysql数据获取到新的表行中
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 将地理编码结果转换为php变量以发布到mysql数据库
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- 使用 PHP /MySQL JavaScript 创建一个简单的 Web 开发测试,但不起作用
- 使用sinon mocks设置摩卡测试,并带有mysql和bluebird承诺
- 如何使用 Math.js 解析器测试 MySQL 语法
- 在nodejs中导入MySQL数据库进行集成测试的最简单方法
- PHP/MySQL大数据测试应用