THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
We will first clarify the dimensions of functions.
System (can be used interchangeably with "builtin") | Catalog | |
---|---|---|
Non-Temporary | system functions | catalog functions |
Temporary | temporary system functions | temporary catalog functions |
1. Support Two Types of Temporary Functions
...
Code Block | ||
---|---|---|
| ||
private final Map<String, FunctionDefintion> tempSystemFunctions = new LinkedHashMap<>(); private final Map<FunctionIdentifier, FunctionDefinition> tempFunctions = new LinkedHashMap<>(); public void registerTemporarySystemScalarFunctionregisterTempSystemScalarFunction(String name, ScalarFunction function) { // put into tempSystemFunctions } public void registerTemporarySystemTableFunctionregisterTempSystemTableFunction(String name, TableFunction function) { // put into tempSystemFunctions } public void registerTemporarySystemAggregateFunctionregisterTempSystemAggregateFunction(String name, AggregateFunction function) { // put into tempSystemFunctions } public void registerTemporaryScalarFunctionregisterTempCatalogScalarFunction(ObjectIdentifier foi, ScalarFunction function) { // put into tempFunctions } public void registerTemporaryTableFunctionregisterTempCatalogTableFunction(ObjectIdentifier fi, TableFunction function) { // put into tempFunctions } public void registerTemporaryAggregateFunctionregisterTempCatalogAggregateFunction(ObjectIdentifier fi, AggregateFunction function) { // put into tempFunctions } public void dropTemporarySystemFunction(String name) {} public void dropTemporaryFunction(FunctionIdentifier fi) {} public Optional<FunctionLookup.Result> lookupFunction(FunctionIdentifier fi) { if (fi.getObjectIdentifier().isPresent()) { // resolvePreciseFunctionReference(fi.getObjectIdentifier()); } else { resolveAmbiguousFunctionReference(fi.getName()); } } private Optional<FunctionLookup.Result> resolvePreciseFunctionReference(FunctionIdentifier fi) { // resolve order: // 1. Temporary functions // 2. Catalog functions } private Optional<FunctionLookup.Result> resolveAmbiguousFunctionReference(String name); // resolve order: // 1. Temporary system functions // 2. Builtin functions // 3. Temporary functions, in the current catalog/db // 2. Catalog functions, in the current catalog/db } |
...