- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MOQL--操作数(Operand)
MOQL--操作数(Operand)
Operand 是MOQL 语法结构的重要组成部分,语法结构中那些需要被分析处理
的数据列或数据值都被称之为Operand 。如select 后跟的数据列,where 条件中描
述的条件字段以及需要匹配的常数值等都被称之为Operand 。如下面语句中的红色
字体部分,均表示是一个Operand 。通过对其计算,我们可以获得数据结果,并形
成最终我们求解的数据结果集。
select count(a.id) cnt, sum(a.num) sum, a.num%500 mod from BeanA a group by
3 having mod 10 order by 1
在MOQL 中,Operand 不仅能在完整的语法结构中使用,还可以单独使用。MOQL
提供了方法可以直接创建一个操作数,并利用此操作数完成数据的求解。如下:
EntityMap entityMap = new EntityMapImpl();
entityMap.putEntity(num, 12);
entityMap.putEntity(num1, 3);
entityMap.putEntity(num2, 4);
try {
Operand arithmetic = MoqlUtils.createOperand((num * num1) / num2 * 2.2
+ 2 - 1);
System.out .println(arithmetic.operate(entityMap));
} catch (MoqlException e) {
e.printStackTrace();
}
该例中为表达式(num * num1) / num2 * 2.2 + 2 - 1创建了一个操作数,该操作数
利用传入的实体Map 对表达式进行了求解,并输出了执行结果,结果为20.8 。
MoqlUtils 的createOperand 方法可以创建一个操作数,传给该方法的参数为一个操
作数表达式字符串,返回的对象为一个Operand 接口,该接口位于org.moql 的包
路径下,定义如下:
public interface Operand {
/*获得操作数的类型*/
OperandType getOperandType();
/*返回操作数的名字*/
String getName();
/*返回操作数在文本串中的位置,返回对象类型为org.antlr.runtime.Token */
Object getSource();
/*根据给定的实体Map传入的值,计算操作数的值*/
Object operate(EntityMap entityMap);
/*根据给定的实体Map传入的值,计算操作数的布尔值。*/
boolean booleanOperate(EntityMap entityMap);
/*操作数的返回值是否为一固定常量。*/
boolean isConstantReturn();
/*重置操作数,将操作数状态置为初始状态。*/
void reset();
}
getOperandType()方法用于返回Operand 的类型OperandType 。OperandType 为
枚举类型,也位于org.moql 的包路径下,定义格式如下:
public enum OperandType {
UNKNOWN,
CONSTANT,
VARIABLE,
FUNCTION,
EXPRESSION,
COLUMNSELECTOR
}
其包括的Operand 类型有常量(CONSTANT)、变量(VARIABLE)、函数(FUNCTION)、表
达式(EXPRESSION)及列筛选器(COLUMNSELECTOR)五类(注:Operand 的类型将在后面详细
介绍),当Operand 不属于以上任何一类时用UNKNOWN 未知表示。
getName()方法用于获得Operand 的名字。除了函数类型的Operand 的名字为
函数名外,其它类型的Operand 的名字就是生成Operand 的字符串本身。如:
“sum(a.num)”整体被解析为一个函数Operand,其名字
您可能关注的文档
- 计算机组成原理之CPU原理.pdf
- 计算机组成与结构-习题.pdf
- Université Catholique de Louvain A Mathematical Model of CPU Yatsuka Nakamura.pdf
- A survey on Discriminatory Processor Sharing. Queueing Systems 53, 53–63. Special Issue on.pdf
- CPU的门牌号码核心步进编号揭秘.pdf
- 三菱电力测量模块.pdf
- NCP6132MNR2G,NCP6132MNR2G, 规格书,Datasheet 资料.pdf
- 西门子位控模块EM253快速入门.pdf
- 我们懂得安徒生了么_李红叶.pdf
- 单片机原理及应用 第03章 指令系统.pdf
文档评论(0)