All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alibaba.qlexpress4.runtime.QvmGlobalScope Maven / Gradle / Ivy

package com.alibaba.qlexpress4.runtime;

import com.alibaba.qlexpress4.QLOptions;
import com.alibaba.qlexpress4.runtime.context.ExpressContext;
import com.alibaba.qlexpress4.runtime.data.AssignableDataValue;
import com.alibaba.qlexpress4.runtime.function.CustomFunction;
import com.alibaba.qlexpress4.runtime.scope.QScope;

import java.util.HashMap;
import java.util.Map;

/**
 * global scope
 *
 * Author: DQinYuan
 */
public class QvmGlobalScope implements QScope {

    private final ExpressContext externalVariable;

    private final Map newVariables;

    private final Map externalFunction;

    private final QLOptions qlOptions;

    public QvmGlobalScope(ExpressContext externalVariable, Map externalFunction,
                          QLOptions qlOptions) {
        this.externalVariable = externalVariable;
        this.newVariables = new HashMap<>();
        this.externalFunction = externalFunction;
        this.qlOptions = qlOptions;
    }

    @Override
    public Value getSymbol(String varName) {
        LeftValue newVariable = newVariables.get(varName);
        if (newVariable != null) {
            return newVariable;
        }
        Value externalValue = externalVariable.get(qlOptions.getAttachments(), varName);
        if (externalValue != null && qlOptions.isPolluteUserContext()) {
            return externalValue;
        }
        newVariable = new AssignableDataValue(varName, externalValue == null? null: externalValue.get());
        newVariables.put(varName, newVariable);
        return newVariable;
    }

    @Override
    public Object getSymbolValue(String varName) {
        return QScope.super.getSymbolValue(varName);
    }

    @Override
    public void defineLocalSymbol(String varName, Class varClz, Object value) {
        throw new UnsupportedOperationException();
    }

    @Override
    public void defineFunction(String functionName, CustomFunction function) {
        throw new UnsupportedOperationException();
    }

    @Override
    public CustomFunction getFunction(String functionName) {
        return externalFunction.get(functionName);
    }

    @Override
    public void push(Value value) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Parameters pop(int number) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Value pop() {
        throw new UnsupportedOperationException();
    }

    @Override
    public Value peek() {
        throw new UnsupportedOperationException();
    }

    @Override
    public QScope getParent() {
        throw new UnsupportedOperationException();
    }

    @Override
    public QScope newScope() {
        throw new UnsupportedOperationException();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy