优先级: 最低到最高
or
and
|| (字符串连接)
+ -
* / %
Term
以下子类的optimize方法可以忽视
org.h2.expression.Parameter
org.h2.expression.Rownum
org.h2.expression.SequenceValue
org.h2.expression.ValueExpression
org.h2.expression.Variable
org.h2.expression.Wildcard
Expression类的主要方法调用顺序:
mapColumns => optimize => updateAggregate => getValue
只有updateAggregate是可选的
用于聚合、分组中
在org.h2.command.dml.Select.queryGroup(int, LocalResult)
和org.h2.command.dml.Select.queryGroupSorted(int, ResultTarget)有用到
在遍历记录的过程中执行,在getValue之前调用
mapColumns方法主要是针对org.h2.expression.ExpressionColumn的,
主要目的是把表的列关联到它的Column column字段,并记住这个ExpressionColumn的ColumnResolver,
从ColumnResolver可获得列值,见org.h2.table.TableFilter.getValue(Column)
TableFilter类实现了ColumnResolver接口
optimize方法主要是做一些优化,比如看看是否是常量等等很多小的细节优化点,具体见每个Expression子类的不同实现
getValue得到表达式的值