Java 类org.apache.commons.lang3.mutable.MutableObject 实例源码

项目:sponge    文件:GroovyKnowledgeBaseInterpreter.java   
/**
 * Result {@code null} means that there is no variable. Result other than {@code null} means that there is a variable (that may possibly
 * be {@code null}).
 *
 * @param name the name of the variable.
 * @return a holder for a variable.
 */
protected Mutable<Object> doGetVariable(String name) {
    List<Object> variables =
            scripts.stream().filter(script -> script.getMetaClass().hasProperty(script.getMetaClass().getTheClass(), name) != null)
                    .map(script -> script.getProperty(name)).collect(Collectors.toList());

    if (variables.isEmpty()) {
        try {
            return new MutableObject<>(binding.getProperty(name));
        } catch (MissingPropertyException e) {
            return null; // This means that no variable has been found!
        }
    }

    return new MutableObject<>(variables.get(0));
}
项目:flux    文件:LocalContextTest.java   
@Test
public void shouldAllowSameMethodRegistrationFromDifferentThreads() throws Exception {

    final MutableObject<StateMachineDefinition> definitionOne = new MutableObject<>(null);
    final MutableObject<StateMachineDefinition> definitionTwo = new MutableObject<>(null);

    final Thread thread1 = new Thread(() -> {
        localContext.registerNew("fooBar", 1, "someDescription","someContext");
        definitionOne.setValue(tlStateMachineDef.get());
    });
    final Thread thread2 = new Thread(() -> {
        localContext.registerNew("fooBar", 1, "someDescription","someContext");
        definitionTwo.setValue(tlStateMachineDef.get());
    });
    thread1.start();
    thread2.start();

    thread1.join();
    thread2.join();

    assertThat(definitionOne.getValue()).isNotNull().isEqualTo(definitionTwo.getValue()).isEqualTo(new StateMachineDefinition("someDescription", "fooBar", 1l, new HashSet<>(), new HashSet<>(), "someContext"));
}
项目:pungwecms    文件:TemplateFunctions.java   
@JtwigFunction(name = "render")
public <T extends RenderedElement> String render(HttpServletRequest request, @Parameter T input) throws FunctionException {
    try {
        if (input == null || !input.isVisible()) {
            return "";
        }
        RenderedElementService renderedElementService = applicationContext.getBean(RenderedElementService.class);
        HookService hookService = applicationContext.getBean(HookService.class);
        final MutableObject<RenderedElement> elementToRender = new MutableObject<>(input);
        if (!input.isWrapped()) {
            hookService.executeHook("element_wrapper", (c, o) -> {
                if (o != null && o instanceof RenderedElement && !input.isWrapped()) {
                    input.setWrapped(true);
                    elementToRender.setValue((RenderedElement) o);
                }
            }, input);
        }
        hookService.executeHook("element_alter", elementToRender.getValue());
        ModelAndView modelAndView = renderedElementService.convertToModelAndView(elementToRender.getValue());
        return render(request, modelAndView);
    } catch (Exception ex) {
        throw new FunctionException(ex);
    }
}
项目:vxquery    文件:ConvertAssignToAggregateRule.java   
private AggregateOperator getAggregateOperator(IFunctionInfo aggregateFunction,
        Mutable<ILogicalExpression> aggregateArgs, LogicalVariable aggregateVariable) {
    List<LogicalVariable> aggregateVariables = new ArrayList<LogicalVariable>();
    aggregateVariables.add(aggregateVariable);

    List<Mutable<ILogicalExpression>> aggregateSequenceArgs = new ArrayList<Mutable<ILogicalExpression>>();
    aggregateSequenceArgs.add(aggregateArgs);

    List<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
    ILogicalExpression aggregateExp = new AggregateFunctionCallExpression(aggregateFunction, false,
            aggregateSequenceArgs);
    Mutable<ILogicalExpression> aggregateExpRef = new MutableObject<ILogicalExpression>(aggregateExp);
    exprs.add(aggregateExpRef);

    return new AggregateOperator(aggregateVariables, exprs);
}
项目:vxquery    文件:PushAggregateIntoGroupbyRule.java   
private void rewriteGroupByAggregate(LogicalVariable oldAggVar, GroupByOperator gbyOp,
        AggregateFunctionCallExpression aggFun, LogicalVariable newAggVar, IOptimizationContext context)
                throws AlgebricksException {
    for (int j = 0; j < gbyOp.getNestedPlans().size(); j++) {
        AggregateOperator aggOp = (AggregateOperator) gbyOp.getNestedPlans().get(j).getRoots().get(0).getValue();
        int n = aggOp.getVariables().size();
        for (int i = 0; i < n; i++) {
            LogicalVariable v = aggOp.getVariables().get(i);
            if (v.equals(oldAggVar)) {
                AbstractFunctionCallExpression oldAggExpr = (AbstractFunctionCallExpression) aggOp.getExpressions()
                        .get(i).getValue();
                AggregateFunctionCallExpression newAggFun = new AggregateFunctionCallExpression(
                        aggFun.getFunctionInfo(), false, new ArrayList<Mutable<ILogicalExpression>>());
                for (Mutable<ILogicalExpression> arg : oldAggExpr.getArguments()) {
                    ILogicalExpression cloned = ((AbstractLogicalExpression) arg.getValue()).cloneExpression();
                    newAggFun.getArguments().add(new MutableObject<ILogicalExpression>(cloned));
                }
                aggOp.getVariables().add(newAggVar);
                aggOp.getExpressions().add(new MutableObject<ILogicalExpression>(newAggFun));
                context.computeAndSetTypeEnvironmentForOperator(aggOp);
                break;
            }
        }
    }
}
项目:vxquery    文件:ConvertAssignSortDistinctNodesToOperatorsRule.java   
private AggregateOperator getAggregateOperator(LogicalVariable unnestVariable, LogicalVariable aggregateVariable) {
    List<LogicalVariable> aggregateVariables = new ArrayList<LogicalVariable>();
    aggregateVariables.add(aggregateVariable);

    List<Mutable<ILogicalExpression>> aggregateSequenceArgs = new ArrayList<Mutable<ILogicalExpression>>();
    Mutable<ILogicalExpression> unnestVariableRef = new MutableObject<ILogicalExpression>(
            new VariableReferenceExpression(unnestVariable));
    aggregateSequenceArgs.add(unnestVariableRef);

    List<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
    ILogicalExpression aggregateExp = new AggregateFunctionCallExpression(BuiltinOperators.SEQUENCE, false,
            aggregateSequenceArgs);
    Mutable<ILogicalExpression> aggregateExpRef = new MutableObject<ILogicalExpression>(aggregateExp);
    exprs.add(aggregateExpRef);

    return new AggregateOperator(aggregateVariables, exprs);
}
项目:oap    文件:SchemaPath.java   
public static Result traverse( SchemaAST root, String path ) {
    SchemaAST schemaAST = root;
    val additionalProperties = new MutableObject<Boolean>( null );

    final Supplier<Result> empty = () -> new Result( Optional.empty(), Optional.ofNullable( additionalProperties.getValue() ) );

    for( val item : StringUtils.split( path, '.' ) ) {
        if( schemaAST instanceof ObjectSchemaAST ) {
            val objectSchemaAST = ( ObjectSchemaAST ) schemaAST;
            schemaAST = objectSchemaAST.properties.get( item );
            objectSchemaAST.additionalProperties.ifPresent( additionalProperties::setValue );
            if( schemaAST == null )
                return empty.get();
        } else if( schemaAST instanceof ArraySchemaAST ) {
            if( !"items".equals( item ) )
                return empty.get();
            schemaAST = ( ( ArraySchemaAST ) schemaAST ).items;
        } else {
            return empty.get();
        }
    }

    return new Result( Optional.of( schemaAST ), Optional.ofNullable( additionalProperties.getValue() ) );
}
项目:incubator-asterixdb-hyracks    文件:IntroduceGroupByForSubplanRule.java   
private Map<LogicalVariable, LogicalVariable> buildVarExprList(Collection<LogicalVariable> vars,
        IOptimizationContext context, GroupByOperator g,
        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> outVeList) throws AlgebricksException {
    Map<LogicalVariable, LogicalVariable> m = new HashMap<LogicalVariable, LogicalVariable>();
    for (LogicalVariable ov : vars) {
        LogicalVariable newVar = context.newVar();
        ILogicalExpression varExpr = new VariableReferenceExpression(newVar);
        outVeList.add(new Pair<LogicalVariable, Mutable<ILogicalExpression>>(ov,
                new MutableObject<ILogicalExpression>(varExpr)));
        for (ILogicalPlan p : g.getNestedPlans()) {
            for (Mutable<ILogicalOperator> r : p.getRoots()) {
                OperatorManipulationUtil.substituteVarRec((AbstractLogicalOperator) r.getValue(), ov, newVar, true,
                        context);
            }
        }
        AbstractLogicalOperator opUnder = (AbstractLogicalOperator) g.getInputs().get(0).getValue();
        OperatorManipulationUtil.substituteVarRec(opUnder, ov, newVar, true, context);
        m.put(ov, newVar);
    }
    return m;
}
项目:incubator-asterixdb-hyracks    文件:PushAssignBelowUnionAllRule.java   
private AssignOperator createAssignBelowUnionAllBranch(UnionAllOperator unionOp, int inputIndex,
        AssignOperator originalAssignOp, Set<LogicalVariable> assignUsedVars, IOptimizationContext context)
                throws AlgebricksException {
    AssignOperator newAssignOp = cloneAssignOperator(originalAssignOp, context);
    newAssignOp.getInputs()
            .add(new MutableObject<ILogicalOperator>(unionOp.getInputs().get(inputIndex).getValue()));
    unionOp.getInputs().get(inputIndex).setValue(newAssignOp);
    int numVarMappings = unionOp.getVariableMappings().size();
    for (int i = 0; i < numVarMappings; i++) {
        Triple<LogicalVariable, LogicalVariable, LogicalVariable> varMapping = unionOp.getVariableMappings().get(i);
        if (assignUsedVars.contains(varMapping.third)) {
            LogicalVariable replacementVar;
            if (inputIndex == 0) {
                replacementVar = varMapping.first;
            } else {
                replacementVar = varMapping.second;
            }
            VariableUtilities.substituteVariables(newAssignOp, varMapping.third, replacementVar, context);
        }
    }
    context.computeAndSetTypeEnvironmentForOperator(newAssignOp);
    return newAssignOp;
}
项目:incubator-asterixdb-hyracks    文件:ComplexUnnestToProductRule.java   
private ILogicalOperator buildOperatorChain(List<ILogicalOperator> ops, ILogicalOperator bottomOp,
        IOptimizationContext context) throws AlgebricksException {
    ILogicalOperator root = ops.get(0);
    ILogicalOperator prevOp = root;
    for (int i = 1; i < ops.size(); i++) {
        ILogicalOperator inputOp = ops.get(i);
        prevOp.getInputs().clear();
        prevOp.getInputs().add(new MutableObject<ILogicalOperator>(inputOp));
        prevOp = inputOp;
    }
    if (bottomOp != null) {
        context.computeAndSetTypeEnvironmentForOperator(bottomOp);
        prevOp.getInputs().clear();
        prevOp.getInputs().add(new MutableObject<ILogicalOperator>(bottomOp));
    }
    return root;
}
项目:incubator-asterixdb-hyracks    文件:EnforceStructuralPropertiesRule.java   
private Mutable<ILogicalOperator> enforceOrderProperties(List<LocalOrderProperty> oList,
        Mutable<ILogicalOperator> topOp, boolean isMicroOp, IOptimizationContext context)
                throws AlgebricksException {
    List<Pair<IOrder, Mutable<ILogicalExpression>>> oe = new LinkedList<Pair<IOrder, Mutable<ILogicalExpression>>>();
    for (LocalOrderProperty orderProperty : oList) {
        for (OrderColumn oc : orderProperty.getOrderColumns()) {
            IOrder ordType = (oc.getOrder() == OrderKind.ASC) ? OrderOperator.ASC_ORDER : OrderOperator.DESC_ORDER;
            Pair<IOrder, Mutable<ILogicalExpression>> pair = new Pair<IOrder, Mutable<ILogicalExpression>>(ordType,
                    new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oc.getColumn())));
            oe.add(pair);
        }
    }
    OrderOperator oo = new OrderOperator(oe);
    oo.setExecutionMode(AbstractLogicalOperator.ExecutionMode.LOCAL);
    if (isMicroOp) {
        oo.setPhysicalOperator(new InMemoryStableSortPOperator());
    } else {
        oo.setPhysicalOperator(new StableSortPOperator(physicalOptimizationConfig.getMaxFramesExternalSort()));
    }
    oo.getInputs().add(topOp);
    context.computeAndSetTypeEnvironmentForOperator(oo);
    if (AlgebricksConfig.DEBUG) {
        AlgebricksConfig.ALGEBRICKS_LOGGER.fine(">>>> Added sort enforcer " + oo.getPhysicalOperator() + ".\n");
    }
    return new MutableObject<ILogicalOperator>(oo);
}
项目:incubator-asterixdb-hyracks    文件:PushProjectDownRule.java   
private static boolean pushAllProjectionsOnTopOf(Collection<LogicalVariable> toPush,
        Mutable<ILogicalOperator> opRef, IOptimizationContext context, ILogicalOperator initialOp)
                throws AlgebricksException {
    if (toPush.isEmpty()) {
        return false;
    }
    AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();

    if (context.checkAndAddToAlreadyCompared(initialOp, op)) {
        return false;
    }

    if (op.getOperatorTag() == LogicalOperatorTag.PROJECT) {
        return false;
    }

    ProjectOperator pi2 = new ProjectOperator(new ArrayList<LogicalVariable>(toPush));
    pi2.getInputs().add(new MutableObject<ILogicalOperator>(op));
    opRef.setValue(pi2);
    pi2.setExecutionMode(op.getExecutionMode());
    context.computeAndSetTypeEnvironmentForOperator(pi2);
    return true;
}
项目:incubator-asterixdb-hyracks    文件:OperatorDeepCopyVisitor.java   
@Override
public ILogicalOperator visitIndexInsertDeleteUpsertOperator(IndexInsertDeleteUpsertOperator op, Void arg)
        throws AlgebricksException {
    List<Mutable<ILogicalExpression>> newPrimaryKeyExpressions = new ArrayList<Mutable<ILogicalExpression>>();
    deepCopyExpressionRefs(newPrimaryKeyExpressions, op.getPrimaryKeyExpressions());
    List<Mutable<ILogicalExpression>> newSecondaryKeyExpressions = new ArrayList<Mutable<ILogicalExpression>>();
    deepCopyExpressionRefs(newSecondaryKeyExpressions, op.getSecondaryKeyExpressions());
    Mutable<ILogicalExpression> newFilterExpression = new MutableObject<ILogicalExpression>(
            ((AbstractLogicalExpression) op.getFilterExpression()).cloneExpression());
    List<Mutable<ILogicalExpression>> newLSMComponentFilterExpressions = new ArrayList<Mutable<ILogicalExpression>>();
    deepCopyExpressionRefs(newLSMComponentFilterExpressions, op.getAdditionalFilteringExpressions());
    IndexInsertDeleteUpsertOperator indexInsertDeleteOp = new IndexInsertDeleteUpsertOperator(
            op.getDataSourceIndex(), newPrimaryKeyExpressions, newSecondaryKeyExpressions, newFilterExpression,
            op.getOperation(), op.isBulkload());
    indexInsertDeleteOp.setAdditionalFilteringExpressions(newLSMComponentFilterExpressions);
    return indexInsertDeleteOp;
}
项目:incubator-asterixdb-hyracks    文件:OperatorDeepCopyVisitor.java   
@Override
public ILogicalOperator visitTokenizeOperator(TokenizeOperator op, Void arg) throws AlgebricksException {
    List<Mutable<ILogicalExpression>> newPrimaryKeyExpressions = new ArrayList<Mutable<ILogicalExpression>>();
    deepCopyExpressionRefs(newPrimaryKeyExpressions, op.getPrimaryKeyExpressions());
    List<Mutable<ILogicalExpression>> newSecondaryKeyExpressions = new ArrayList<Mutable<ILogicalExpression>>();
    deepCopyExpressionRefs(newSecondaryKeyExpressions, op.getSecondaryKeyExpressions());
    List<LogicalVariable> newTokenizeVars = new ArrayList<LogicalVariable>();
    deepCopyVars(newTokenizeVars, op.getTokenizeVars());
    Mutable<ILogicalExpression> newFilterExpression = new MutableObject<ILogicalExpression>(
            ((AbstractLogicalExpression) op.getFilterExpression()).cloneExpression());
    List<Object> newTokenizeVarTypes = new ArrayList<Object>();
    deepCopyObjects(newTokenizeVarTypes, op.getTokenizeVarTypes());

    TokenizeOperator tokenizeOp = new TokenizeOperator(op.getDataSourceIndex(), newPrimaryKeyExpressions,
            newSecondaryKeyExpressions, newTokenizeVars, newFilterExpression, op.getOperation(), op.isBulkload(),
            op.isPartitioned(), newTokenizeVarTypes);
    return tokenizeOp;
}
项目:ISAAC    文件:RemoteSynchronizer.java   
/**
 * Request a remote synchronization. This call blocks until the operation is complete,
 * or the thread is interrupted.
 * 
 * @throws InterruptedException
 */
public SynchronizeResult blockingSynchronize() throws InterruptedException
{
    log.info("Queuing a blocking sync request");
    final MutableObject<SynchronizeResult> result = new MutableObject<SynchronizeResult>();
    final CountDownLatch cdl = new CountDownLatch(1);
    Consumer<SynchronizeResult> callback = new Consumer<SynchronizeResult>()
    {
        @Override
        public void accept(SynchronizeResult t)
        {
            result.setValue(t);
            cdl.countDown();
        }
    };

    synchronize(callback);
    cdl.await();
    return result.getValue();
}
项目:jtestplatform    文件:UDPClientServerTest.java   
private Callable<Object> createServer(final MutableObject<String> actualRequest) {
    return new Callable<Object>() {
        @Override
        public Object call() throws Exception {
            LOGGER.info("SERVER: receiving request");
            UDPTransport transport = new UDPTransport(SERVER_PORT);
            String request = transport.receive();
            actualRequest.setValue(request);

            LOGGER.info("SERVER: sending answer");
            transport.send(ANSWER);

            LOGGER.info("SERVER: finished");
            return null;
        }
    };
}
项目:jtestplatform    文件:UDPClientServerTest.java   
private Callable<Object> createClient(final MutableObject<String> actualAnswer) {
    return new Callable<Object>() {
        @Override
        public Object call() throws Exception {
            LOGGER.info("CLIENT: sending request");
            UDPTransport transport = new UDPTransport(InetAddress.getLocalHost(), SERVER_PORT, TIMEOUT);
            transport.send(REQUEST);

            LOGGER.info("CLIENT: receiving answer");
            String answer = transport.receive();
            actualAnswer.setValue(answer);

            LOGGER.info("CLIENT: finished");
            return null;
        }
    };
}
项目:statefulj    文件:StatefulFSMImpl.java   
@Override
public Object onEvent(T stateful, String event, Object... parms) throws TooBusyException {
    ArrayList<Object> parmList = new ArrayList<Object>(Arrays.asList(parms));

    // Create a Mutable Object and add it to the Parameter List - it will be used
    // to return the returned value from the Controller as the FSM returns the State
    //
    MutableObject<T> returnValue = new MutableObject<T>();
    ArrayList<Object> invokeParmlist = new ArrayList<Object>(parms.length + 1);
    invokeParmlist.add(returnValue);
    invokeParmlist.addAll(parmList);

    // Call the FSM
    // 
    fsm.onEvent(stateful, event, invokeParmlist.toArray());
    return returnValue.getValue();
}
项目:fitnesse-selenium-slim    文件:WebDriverHelper.java   
private void evaluate(WebDriver driver, WebElementSelector locator, BiFunction<WebDriver, WebElementSelector, String> callback, boolean disableValueCheck, MutableObject<String> resultHolder) {
    String result = StringUtils.stripToEmpty(callback.apply(driver, locator));
    resultHolder.setValue(result);
    String expectedValue = locator.getExpectedValue();
    if (disableValueCheck || StringUtils.isBlank(expectedValue) || this.fitnesseMarkup.compare(expectedValue, result)) {
        return;
    }
    throw new NoSuchElementException(MessageFormat.format("Element with unexpected value [Expected: {0}, Obtained: {1}]", expectedValue, result));
}
项目:owsi-core-parent    文件:TestTransactionSynchronization.java   
@Test
public void testBeforeCommitOrClearTask() throws ServiceException, SecurityServiceException {
    TestEntity entity = new TestEntity("entity");
    testEntityService.create(entity);
    final Long entityId = entity.getId();

    final MutableObject<TestUseEntityBeforeCommitOrClearTask> taskReference = new MutableObject<>();

    writeTransactionTemplate.execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status) {
            TestEntity reloadedEntity = testEntityService.getById(entityId);

            // This task will fail if executed when the entity is not in the session anymore
            TestUseEntityBeforeCommitOrClearTask task = new TestUseEntityBeforeCommitOrClearTask(reloadedEntity);
            taskReference.setValue(task);

            transactionSynchronizationTaskManagerService.push(task);

            // Should trigger the task's execution
            transactionSynchronizationTaskManagerService.beforeClear();

            entityManagerClear();
        }
    });

    entityManagerClear();

    assertEquals(1, taskReference.getValue().getExecutionCount());
}
项目:owsi-core-parent    文件:TestTransactionSynchronization.java   
@Test
public void testBeforeCommitOrClearTaskWithRollback() throws ServiceException, SecurityServiceException {
    TestEntity entity = new TestEntity("entity");
    testEntityService.create(entity);
    final Long entityId = entity.getId();

    final MutableObject<TestUseEntityBeforeCommitOrClearTask> taskReference = new MutableObject<>();

    writeTransactionTemplate.execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status) {
            TestEntity reloadedEntity = testEntityService.getById(entityId);

            // This task will fail if executed when the entity is not in the session anymore
            TestUseEntityBeforeCommitOrClearTask task = new TestUseEntityBeforeCommitOrClearTask(reloadedEntity);
            taskReference.setValue(task);

            transactionSynchronizationTaskManagerService.push(task);

            // Should trigger the task's execution
            transactionSynchronizationTaskManagerService.beforeClear();

            entityManagerClear();

            status.setRollbackOnly();
        }
    });

    entityManagerClear();

    assertEquals(1, taskReference.getValue().getExecutionCount());
    assertEquals(1, taskReference.getValue().getRollbackCount());
}
项目:lab-insurance    文件:MarketOrderGeneratorProcessor.java   
public Order process(Order order) {
    log.info("Processing order {}", order);
    if (order.getMarketOrders() == null) {
        order.setMarketOrders(new ArrayList<>());
    }
    Mutable<BigDecimal> buyGrossAmount = new MutableObject<BigDecimal>();
    Mutable<BigDecimal> buyNetAmount = new MutableObject<BigDecimal>();
    createSellMarketOrders(order, buyGrossAmount, buyNetAmount);
    createBuyMarketOrders(order, buyGrossAmount.getValue(), buyNetAmount.getValue());
    return order;
}
项目:triple-triad-ai    文件:ClientController.java   
private String getString(String name)
{
    int functionId = this.getNewId();
    this.sendString(String.format("GET %s %i\r\n\r\n", name, functionId));
    String pattern = String.format("RESP %i (.*)\r\n\r\n", functionId);
    MutableObject<String> result = new MutableObject<>(null);
    Consumer<String> callback = (input) ->
    {
        result.setValue(Pattern.compile(pattern).matcher(input).group(1));
    };
    this.awaitMessage("", callback);
    while(result.getValue() == null)
        this.getNextMessage();
    return result.getValue();
}
项目:vxquery    文件:ConvertAssignToAggregateRule.java   
private UnnestOperator getUnnestOperator(LogicalVariable inputVariable, LogicalVariable unnestVariable) {
    VariableReferenceExpression inputVre = new VariableReferenceExpression(inputVariable);

    List<Mutable<ILogicalExpression>> iterateArgs = new ArrayList<Mutable<ILogicalExpression>>();
    iterateArgs.add(new MutableObject<ILogicalExpression>(inputVre));

    ILogicalExpression unnestExp = new UnnestingFunctionCallExpression(BuiltinOperators.ITERATE, iterateArgs);
    Mutable<ILogicalExpression> unnestExpRef = new MutableObject<ILogicalExpression>(unnestExp);

    return new UnnestOperator(unnestVariable, unnestExpRef);
}
项目:vxquery    文件:ConvertFromAlgebricksExpressionsRule.java   
@SuppressWarnings("unchecked")
private boolean convertAlgebricksExpression(Mutable<ILogicalExpression> searchM, IFunctionInfo funcInfo,
        boolean isBoolean) {
    AbstractFunctionCallExpression searchFunction = (AbstractFunctionCallExpression) searchM.getValue();
    searchFunction.setFunctionInfo(funcInfo);

    if (isBoolean) {
        ScalarFunctionCallExpression functionCallExp = new ScalarFunctionCallExpression(
                BuiltinFunctions.FN_BOOLEAN_1, new MutableObject<ILogicalExpression>(searchM.getValue()));
        searchM.setValue(functionCallExp);
    }
    return true;
}
项目:vxquery    文件:ConvertAssignSortDistinctNodesToOperatorsRule.java   
private AssignOperator getAssignOperator(LogicalVariable unnestVariable, LogicalVariable outputVariable,
        IFunctionInfo inputFunction) {
    List<Mutable<ILogicalExpression>> nodeArgs = new ArrayList<Mutable<ILogicalExpression>>();
    nodeArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(unnestVariable)));
    ScalarFunctionCallExpression unctionExpression = new ScalarFunctionCallExpression(inputFunction, nodeArgs);
    Mutable<ILogicalExpression> nodeTreeIdExpression = new MutableObject<ILogicalExpression>(unctionExpression);
    return new AssignOperator(outputVariable, nodeTreeIdExpression);
}
项目:vxquery    文件:ConvertAssignSortDistinctNodesToOperatorsRule.java   
private UnnestOperator getUnnestOperator(LogicalVariable inputVariable, LogicalVariable unnestVariable) {
    VariableReferenceExpression inputVre = new VariableReferenceExpression(inputVariable);

    List<Mutable<ILogicalExpression>> iterateArgs = new ArrayList<Mutable<ILogicalExpression>>();
    iterateArgs.add(new MutableObject<ILogicalExpression>(inputVre));

    ILogicalExpression unnestExp = new UnnestingFunctionCallExpression(BuiltinOperators.ITERATE, iterateArgs);
    Mutable<ILogicalExpression> unnestExpRef = new MutableObject<ILogicalExpression>(unnestExp);

    return new UnnestOperator(unnestVariable, unnestExpRef);
}
项目:oap    文件:MutableObjectModule.java   
@Override
public JsonSerializer<?> findSerializer( SerializationConfig config, JavaType type, BeanDescription beanDesc ) {
    final Class<?> raw = type.getRawClass();
    if( MutableObject.class.isAssignableFrom( raw ) ) {
        return new MutableObjectSerializer( type );
    }

    return super.findSerializer( config, type, beanDesc );
}
项目:oap    文件:MutableObjectModule.java   
@Override
@SuppressWarnings( "unchecked" )
public MutableObject deserialize( JsonParser p,
                                  DeserializationContext ctxt ) throws IOException {

    try {
        final MutableObject vc = ( MutableObject ) _valueClass.newInstance();

        vc.setValue( ctxt.readValue( p, refType ) );

        return vc;
    } catch( InstantiationException | IllegalAccessException e ) {
        throw ctxt.instantiationException( _valueClass, e );
    }
}
项目:oap    文件:MutableObjectModule.java   
@Override
@SuppressWarnings( "unchecked" )
public MutableObject deserialize( JsonParser p, DeserializationContext ctxt, MutableObject intoValue ) throws IOException {
    intoValue.setValue( ctxt.readValue( p, refType ) );

    return intoValue;
}
项目:oap    文件:MutableObjectModule.java   
@Override
public JsonDeserializer<?> findBeanDeserializer( JavaType type, DeserializationConfig config,
                                                 BeanDescription beanDesc ) throws JsonMappingException {
    final Class<?> raw = type.getRawClass();
    if( MutableObject.class.isAssignableFrom( raw ) ) {
        final Type[] actualTypeArguments = ( ( ParameterizedType ) raw.getGenericSuperclass() ).getActualTypeArguments();
        final JavaType refType = config.constructType( ( Class ) actualTypeArguments[0] );
        return new MutableObjectDeserializer( type, refType );
    }

    return super.findBeanDeserializer( type.getReferencedType(), config, beanDesc );
}
项目:incubator-asterixdb-hyracks    文件:PushAssignBelowUnionAllRule.java   
/**
 * Clones the given assign operator changing the returned variables to be new ones.
 * Also, leaves the inputs of the clone clear.
 */
private AssignOperator cloneAssignOperator(AssignOperator assignOp, IOptimizationContext context) {
    List<LogicalVariable> vars = new ArrayList<LogicalVariable>();
    List<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
    int numVars = assignOp.getVariables().size();
    for (int i = 0; i < numVars; i++) {
        vars.add(context.newVar());
        exprs.add(new MutableObject<ILogicalExpression>(
                assignOp.getExpressions().get(i).getValue().cloneExpression()));
    }
    AssignOperator assignCloneOp = new AssignOperator(vars, exprs);
    assignCloneOp.setExecutionMode(assignOp.getExecutionMode());
    return assignCloneOp;
}
项目:incubator-asterixdb-hyracks    文件:IsolateHyracksOperatorsRule.java   
private final static void insertOneToOneExchange(Mutable<ILogicalOperator> i, IOptimizationContext context)
        throws AlgebricksException {
    ExchangeOperator e = new ExchangeOperator();
    e.setPhysicalOperator(new OneToOneExchangePOperator());
    ILogicalOperator inOp = i.getValue();

    e.getInputs().add(new MutableObject<ILogicalOperator>(inOp));
    i.setValue(e);
    // e.recomputeSchema();
    OperatorPropertiesUtil.computeSchemaAndPropertiesRecIfNull(e, context);
    ExecutionMode em = ((AbstractLogicalOperator) inOp).getExecutionMode();
    e.setExecutionMode(em);
    e.computeDeliveredPhysicalProperties(context);
    context.computeAndSetTypeEnvironmentForOperator(e);
}
项目:incubator-asterixdb-hyracks    文件:SetAlgebricksPhysicalOperatorsRule.java   
private static boolean generateMergeAggregationExpressions(GroupByOperator gby, IOptimizationContext context)
        throws AlgebricksException {
    if (gby.getNestedPlans().size() != 1) {
        //External/Sort group-by currently works only for one nested plan with one root containing
        //an aggregate and a nested-tuple-source.
        throw new AlgebricksException(
                "External group-by currently works only for one nested plan with one root containing"
                        + "an aggregate and a nested-tuple-source.");
    }
    ILogicalPlan p0 = gby.getNestedPlans().get(0);
    if (p0.getRoots().size() != 1) {
        //External/Sort group-by currently works only for one nested plan with one root containing
        //an aggregate and a nested-tuple-source.
        throw new AlgebricksException(
                "External group-by currently works only for one nested plan with one root containing"
                        + "an aggregate and a nested-tuple-source.");
    }
    IMergeAggregationExpressionFactory mergeAggregationExpressionFactory = context
            .getMergeAggregationExpressionFactory();
    Mutable<ILogicalOperator> r0 = p0.getRoots().get(0);
    AbstractLogicalOperator r0Logical = (AbstractLogicalOperator) r0.getValue();
    if (r0Logical.getOperatorTag() != LogicalOperatorTag.AGGREGATE) {
        return false;
    }
    AggregateOperator aggOp = (AggregateOperator) r0.getValue();
    List<Mutable<ILogicalExpression>> aggFuncRefs = aggOp.getExpressions();
    List<LogicalVariable> originalAggVars = aggOp.getVariables();
    int n = aggOp.getExpressions().size();
    List<Mutable<ILogicalExpression>> mergeExpressionRefs = new ArrayList<Mutable<ILogicalExpression>>();
    for (int i = 0; i < n; i++) {
        ILogicalExpression mergeExpr = mergeAggregationExpressionFactory
                .createMergeAggregation(originalAggVars.get(i), aggFuncRefs.get(i).getValue(), context);
        if (mergeExpr == null) {
            return false;
        }
        mergeExpressionRefs.add(new MutableObject<ILogicalExpression>(mergeExpr));
    }
    aggOp.setMergeExpressions(mergeExpressionRefs);
    return true;
}
项目:incubator-asterixdb-hyracks    文件:PushFunctionsBelowJoin.java   
private boolean pushDownFunctions(AbstractBinaryJoinOperator joinOp, int inputIndex,
        List<Mutable<ILogicalExpression>> funcExprs, IOptimizationContext context) throws AlgebricksException {
    ILogicalOperator joinInputOp = joinOp.getInputs().get(inputIndex).getValue();
    liveVars.clear();
    VariableUtilities.getLiveVariables(joinInputOp, liveVars);
    Iterator<Mutable<ILogicalExpression>> funcIter = funcExprs.iterator();
    List<LogicalVariable> assignVars = null;
    List<Mutable<ILogicalExpression>> assignExprs = null;
    while (funcIter.hasNext()) {
        Mutable<ILogicalExpression> funcExprRef = funcIter.next();
        ILogicalExpression funcExpr = funcExprRef.getValue();
        usedVars.clear();
        funcExpr.getUsedVariables(usedVars);
        // Check if we can push the function down this branch.
        if (liveVars.containsAll(usedVars)) {
            if (assignVars == null) {
                assignVars = new ArrayList<LogicalVariable>();
                assignExprs = new ArrayList<Mutable<ILogicalExpression>>();
            }
            // Replace the original expression with a variable reference expression.
            LogicalVariable replacementVar = context.newVar();
            assignVars.add(replacementVar);
            assignExprs.add(new MutableObject<ILogicalExpression>(funcExpr));
            funcExprRef.setValue(new VariableReferenceExpression(replacementVar));
            funcIter.remove();
        }
    }
    // Create new assign operator below the join if any functions can be pushed.
    if (assignVars != null) {
        AssignOperator newAssign = new AssignOperator(assignVars, assignExprs);
        newAssign.getInputs().add(new MutableObject<ILogicalOperator>(joinInputOp));
        newAssign.setExecutionMode(joinOp.getExecutionMode());
        joinOp.getInputs().get(inputIndex).setValue(newAssign);
        context.computeAndSetTypeEnvironmentForOperator(newAssign);
        return true;
    }
    return false;
}
项目:incubator-asterixdb-hyracks    文件:EnforceStructuralPropertiesRule.java   
private void setNewOp(Mutable<ILogicalOperator> opRef, AbstractLogicalOperator newOp, IOptimizationContext context)
        throws AlgebricksException {
    ILogicalOperator oldOp = opRef.getValue();
    opRef.setValue(newOp);
    newOp.getInputs().add(new MutableObject<ILogicalOperator>(oldOp));
    newOp.recomputeSchema();
    newOp.computeDeliveredPhysicalProperties(context);
    context.computeAndSetTypeEnvironmentForOperator(newOp);
    AlgebricksConfig.ALGEBRICKS_LOGGER.finest(">>>> Structural properties for " + newOp.getPhysicalOperator() + ": "
            + newOp.getDeliveredPhysicalProperties() + "\n");

    PhysicalOptimizationsUtil.computeFDsAndEquivalenceClasses(newOp, context);
}
项目:incubator-asterixdb-hyracks    文件:AbstractIntroduceCombinerRule.java   
/**
 * Replace the original aggregate functions with their corresponding global aggregate function.
 */
protected void replaceOriginalAggFuncs(Set<SimilarAggregatesInfo> toReplaceSet) {
    for (SimilarAggregatesInfo sai : toReplaceSet) {
        for (AggregateExprInfo aei : sai.simAggs) {
            AbstractFunctionCallExpression afce = (AbstractFunctionCallExpression) aei.aggExprRef.getValue();
            afce.setFunctionInfo(aei.newFunInfo);
            afce.getArguments().clear();
            afce.getArguments().add(new MutableObject<ILogicalExpression>(sai.stepOneResult));
        }
    }
}
项目:incubator-asterixdb-hyracks    文件:ExtractCommonOperatorsRule.java   
@Override
public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
        throws AlgebricksException {
    AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
    if (op.getOperatorTag() != LogicalOperatorTag.WRITE && op.getOperatorTag() != LogicalOperatorTag.WRITE_RESULT
            && op.getOperatorTag() != LogicalOperatorTag.DISTRIBUTE_RESULT) {
        return false;
    }
    if (!roots.contains(op)) {
        roots.add(new MutableObject<ILogicalOperator>(op));
    }
    return false;
}
项目:incubator-asterixdb-hyracks    文件:AbstractExtractExprRule.java   
protected LogicalVariable extractExprIntoAssignOpRef(ILogicalExpression gExpr, Mutable<ILogicalOperator> opRef2,
        IOptimizationContext context) throws AlgebricksException {
    LogicalVariable v = context.newVar();
    AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(gExpr));
    a.getInputs().add(new MutableObject<ILogicalOperator>(opRef2.getValue()));
    opRef2.setValue(a);
    if (gExpr.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
        context.addNotToBeInlinedVar(v);
    }
    context.computeAndSetTypeEnvironmentForOperator(a);
    return v;
}
项目:incubator-asterixdb-hyracks    文件:FactorRedundantGroupAndDecorVarsRule.java   
private boolean factorRedundantRhsVars(List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> veList,
        Mutable<ILogicalOperator> opRef, Map<LogicalVariable, LogicalVariable> varRhsToLhs,
        IOptimizationContext context) throws AlgebricksException {
    varRhsToLhs.clear();
    ListIterator<Pair<LogicalVariable, Mutable<ILogicalExpression>>> iter = veList.listIterator();
    boolean changed = false;
    while (iter.hasNext()) {
        Pair<LogicalVariable, Mutable<ILogicalExpression>> p = iter.next();
        if (p.second.getValue().getExpressionTag() != LogicalExpressionTag.VARIABLE) {
            continue;
        }
        LogicalVariable v = GroupByOperator.getDecorVariable(p);
        LogicalVariable lhs = varRhsToLhs.get(v);
        if (lhs != null) {
            if (p.first != null) {
                AssignOperator assign = new AssignOperator(p.first, new MutableObject<ILogicalExpression>(
                        new VariableReferenceExpression(lhs)));
                ILogicalOperator op = opRef.getValue();
                assign.getInputs().add(new MutableObject<ILogicalOperator>(op));
                opRef.setValue(assign);
                context.computeAndSetTypeEnvironmentForOperator(assign);
            }
            iter.remove();
            changed = true;
        } else {
            varRhsToLhs.put(v, p.first);
        }
    }
    return changed;
}