input; /** * 结果 */ private int output; public Context(String input){...; String input = context.getInput(); int in = Integer.valueOf(input); context.setOutput...(in-1); } @Override public String toString() { return "--"+context.getInput()+"...context) { this.context = context; String input = context.getInput(); int in...() { return "++"+context.getInput()+"="+context.getOutput(); } } 测试,使用 public class Client
{ this.input = input; } public String getInput() { return this.input; } public void...实现抽象表达式中所要求的接口,主要是一个 Interprete()方法。 文法中的每一个终结符都有一个具体终结表达式与之对应。...) { context.setOutput("终端" + context.getInput()); System.out.println(context.getInput...对文法中的每一条规则R1,R2......Rn都需要一个具体的非终结符表达式类。通过实现抽象表达式的 Interpret 方法实现解释操作。... context) { context.setOutput("非终端" + context.getInput()); System.out.println(context.getInput
1)操作符TableScan的非重复值数NDV估算 首先从GroupBy指定访问列的位图表示信息,转换为Project投影(类似Select 选择字段的信息)每列的列索引序数词(从0开始,依次类推)列表...public static Double getDistinctRowCount(RelNode r, RelMetadataQuery mq, int indx) { ImmutableBitSet...其中,ExChange在不改变其内容的情况下对输入施加特定的分布的关系表达式。...对子RelNode谓词信息AND拼接,并将基于Project投影输出字段的谓词表达式转换为Project输入字段上的等价谓词表达式形成新的谓词信息modifiedPred。...Project输入字段上的等价表达式。
RexOver继承关系如下: public class RexOver extends RexCall Call to an aggregate function over a window....其他默认返回true public boolean matches(RelOptRuleCall call) { //当前投影合并,不支持窗口函数 final Project topProject...for (int pos : positions) {//顶Project中相应字段对应的位置来查找在底部Project投影中到行表达式,判读是否为窗口函数 if (bottomProject.getChildExps...product = topPermutation.product(bottomPermutation); relBuilder.push(bottomProject.getInput...force) { if (RexUtil.isIdentity(topProject.getProjects(), topProject.getInput().getRowType
@Override public boolean matches(RelOptRuleCall call) { final Filter filterRel = call.rel(0); RexNode...RelDataTypeField> origFields = aggRel.getRowType().getFieldList();//获取Aggregate对象引用的字段列表 final int...[] adjustments = new int[origFields.size()]; int j = 0; for (int i : aggRel.getGroupSet()) {//遍历GroupBy...final RelBuilder builder = call.builder(); RelNode rel = builder.push(aggRel.getInput()).filter(pushedConditions...).build();//把谓词下推到AGG的子输入INPUT if (rel == aggRel.getInput(0)) {//如果rel和原AGG的输入相同,退出优化。
基于成本优化器会根据RelSet(等价关系表达式集合,其中元素每个RelNode关系表达式又是SQL中如Select、From、Where、Group的以代数表达式的表现形式)选出综合成本最低的关系表达式...final Double avgRowSize = mq.getAverageRowSize(aggregate.getInput()); final Double rowCount = mq.getRowCount...(aggregate.getInput()); if (avgRowSize == null || rowCount == null) { return null; } return...()); //平均行大小 final Double rowCount = mq.getRowCount(sort.getInput()); //行记录数 if (avgRowSize =...= null) { final int leftCount = left.getRowType().getFieldCount(); for (int i = 0; i < rights.size
把等值常量谓词的结果存放到constants映射(字段表达式,常量表达式)中。...final RelNode parent = call.rel(0);//根Root不是SortLimit final Sort sort = call.rel(1); final int...rexBuilder, predicates);//再从所有谓词集合中,把常量谓词提取 Map constants = new HashMap(); for (int...ArrayList(); List topChildExprsFields = new ArrayList(); for (int i = 0; i (); for (RelFieldCollation fc : sort.getCollation().getFieldCollations()) {//排序字段 final int
public Double getRowCount(Project rel, RelMetadataQuery mq) { return mq.getRowCount(rel.getInput(...public Double getRowCount(Sort rel, RelMetadataQuery mq) { Double rowCount = mq.getRowCount(rel.getInput...计算computeSemiJoinSelectivity的选择率,然后用选择率创建一个常量表达式RexNode作为谓词,使用左RelNode关系表达式和Predicte求出选择率。...public Double getRowCount(Sort rel, RelMetadataQuery mq) { final Double rowCount = mq.getRowCount(rel.getInput...= null) { final int offset = rel.offset == null ?
public Sort(RelOptCluster cluster, RelTraitSet traits, RelNode child,...public boolean matches(RelOptRuleCall call) { final HiveSortLimit sort = call.rel(1); // If sort...谓词下推主要分两个步骤: 使用sort的输入sort.getInput()创建新Filter对象newFilter,意味着在Sort的子输入上创建过滤器,完成了Fitler下推到TableScan上。...public void onMatch(RelOptRuleCall call) { final HiveFilter filter = call.rel(0);//根 RelNode final...HiveSortLimit sort = call.rel(1); final RelNode newFilter = filter.copy(sort.getInput().getTraitSet
阅读Java文件,找到出问题的case代码: case 30021: GetInput getinput21 = new GetInput("Enter 67#*+.digits, SMS default...",4,8); getinput21.digitsOnly(); getinput21.noEcho(); getinput21.textString().packed();...switch (mState) { case STATE_TEXT: int maxLen = mStkInput.maxLen; int minLen = mStkInput.minLen...{ @Override protected char[] getAcceptedChars() { return CHARACTERS; } public...int getInputType() { return EditorInfo.TYPE_CLASS_PHONE; } public static StkDigitsKeyListener
一旦知道所需的映射类型,就调用mappings.create(mapping type,int,int)来创建该映射的有效实现。...is {@code n} if * field {@code i} projects input field {@code n}, -1 if it is an * expression. */ public...public class Ord extends java.lang.Object implements java.util.Map.Entry Pair...//创建Ord对象 static Ord of(int n, E e) Creates an Ord....of(sort.getInput())); final HiveSortLimit newSort = sort.copy(newProject.getTraitSet(),
public boolean matches(RelOptRuleCall call) { return true; } 2)onMatch方法逻辑详解 接收有关一条规则匹配的通知。...冗余Cast转换还有如cast( 10 as int),这种就取第一个操作数10取掉cast转换。 如果Ruduce可能以创建一个NULL类型表达式而结束。...if (newConditionExp.isAlwaysTrue()) {//如果此Filter的谓词条件表达式恒为true call.transformTo( filter.getInput...push(filter.getInput()).filter(newConditionExp).build()); } else {//没有减少的情况下 if (newConditionExp instanceof...isNullable()) {//判断其数据类型及元数据是为非空字段 if (alwaysTrue) {//恒为真 call.transformTo(filter.getInput
判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。...public boolean matches(RelOptRuleCall call) { final HiveSortLimit topSortLimit = call.rel(0); //顶SortLimit...合并fetch = 顶层fetch 之后再使用顶部SortLimit相关的参数和上述新计算的合并offse和合并fetch生成,生成合并后的新SortLimit,注册到优化器 public...); int bottomOffset = bottomSortLimit.offset == null ?...(newSort); } 代码最后的newSort的生成,用底部SortLimit的TraitSet特征集合(是否是分布式,是否排序等物理特性的集合),bottomSortLimit.getInput
Sort RelNode的关键属性: RelCollation collation对象,是对一个RelNode关系表达式物理顺序的描述,排序信息有排序字段的序数词(从0开始,依次类推)和排序方向(升序或降序...emp_name FROM employe SORT BY id,emp_name DESC LIMIT 100; 说明如下: RelCollation collation对象为字段序数次从0开始为...ImmutableList.builder(); for (RelFieldCollation field : collation.getFieldCollations()) { int...public void onMatch(RelOptRuleCall call) { final HiveSortLimit sortLimit = call.rel(0);//根关系表达式 /.../ We remove the limit operator call.transformTo(sortLimit.getInput());//转换并注册,传递的是HiveSortLimit输入跳过了根
UniqueKeys唯一键 1)RelNode查找TableScan操作符 传递一个RelNode树,并指定是否遍历Project投影关系表达式。...(); //返回此表达式输入的列表 } else { r = null; } } return r == null ?...public Set getUniqueKeys(Project rel, RelMetadataQuery mq, boolean ignoreNulls) {...HiveTableScan tScan = getTableScan(rel.getInput(), false); if (tScan == null) { /*** *...构建列的输入位置和输出位置的映射关系 for (int i = 0; i 表达式RexNode RexNode projExpr
HiveIntersect是对Calcite框架中一操作RelNode关系表达式Intersect操作继承实现,Hive 2.3开始SQL中支持Intersect语法和操作。...判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。...public boolean matches(RelOptRuleCall call) { return true; } 2)onMatch方法逻辑详解 接收有关一条规则匹配的通知...RelNode列表中,针对操作树形状不同,又分两种情况,如下: 对应上述情况一,即根RelNode右侧分支call.rel(2)为HiveIntersect对象,把topHiveIntersect.getInput...inputs = new ArrayList(); if (call.rel(2) instanceof HiveIntersect) { inputs.add(topHiveIntersect.getInput
判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。...@Override public boolean matches(RelOptRuleCall call) { final HiveSortLimit sortLimit = call.rel(0)...| -> | Project Sort public...Mappings.TargetMapping map = RelOptUtil.permutation( project.getProjects(), project.getInput...final HiveSortLimit newSort = sort.copy(sort.getTraitSet().replace(newCollation), project.getInput
(非法空间) 例: # include # include int main() { int *ptr; ptr = (void *)malloc(sizeof...宏定义的作用域是从定义的位置开始到整个程序结束。...\n'); printf("请输入第二本书的信息:\n"); b2 = getInput(b2); printf("\n\n现在信息已录入完毕,开始打印验证\n\n"); printf(...('\n'); printf("请输入第二本书的信息:\n"); getInput(&b2); printf("\n\n现在信息已录入完毕,开始打印验证\n\n"); printf("打印第一本书的信息...:\n"); getInput(b2); printf("\n\n现在信息已录入完毕,开始打印验证\n\n"); printf("打印第一本书的信息:\n"); printBook(b1
判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。...同时此方法被调用,call.rels保存了与规则Rule的操作数Operands匹配上的关系表达式RelNode集合;call.rels[0]是根表达式。...接下来开始onMatcch方法实现逻辑讲解。 首先,用call.rel(0)获取顶层Project投影操作,其次,call.rel(1)获取子输入Join操作。...开始判断Project投影字段的置换topPermutation不为null,则说明它仅仅是输入字段的置换;值为null,则不做任何优化。同样,该字段索引的置换如果为恒等置换,也不做任何优化。...bottomProject.getInput(0)移除底部Project投影操作,产生新Join注册到优化器。 // 5.
public int Speed = 250; private Vector2 _velocity = new Vector2(); public void GetInput(...{ private PackedScene _bullet = (PackedScene)GD.Load("res://Bullet.tscn"); public int Speed =...200; private Vector2 _velocity = new Vector2(); public void GetInput() { // add...int RunSpeed = 100; [Export] public int JumpSpeed = -400; [Export] public int Gravity = 1200...; Vector2 velocity = new Vector2(); bool jumping = false; public void GetInput() {
领取专属 10元无门槛券
手把手带您无忧上云