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

com.arcadedb.query.sql.executor.SQLFunction Maven / Gradle / Ivy

There is a newer version: 24.11.1
Show newest version
/*
 * Copyright © 2021-present Arcade Data Ltd ([email protected])
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-FileCopyrightText: 2021-present Arcade Data Ltd ([email protected])
 * SPDX-License-Identifier: Apache-2.0
 */
package com.arcadedb.query.sql.executor;/*
 *
 *  *  Copyright 2021 Arcade Data Ltd
 *  *
 *  *  Licensed under the Apache License, Version 2.0 (the "License");
 *  *  you may not use this file except in compliance with the License.
 *  *  You may obtain a copy of the License at
 *  *
 *  *       http://www.apache.org/licenses/LICENSE-2.0
 *  *
 *  *  Unless required by applicable law or agreed to in writing, software
 *  *  distributed under the License is distributed on an "AS IS" BASIS,
 *  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  *  See the License for the specific language governing permissions and
 *  *  limitations under the License.
 *  *
 *  * For more information: https://arcadedb.com
 *
 */

import com.arcadedb.database.Identifiable;

/**
 * Interface that defines a SQL Function. Functions can be state-less if registered as instance, or state-full when registered as
 * class. State-less function are reused across queries, so don't keep any run-time information inside of it. State-full function,
 * instead, stores Implement it and register it with: {@literal OSQLParser.getInstance().registerFunction()} to being used by the
 * SQL engine.
 * 

* ??? could it be possible to have a small piece of code here showing where to register a function using services ??? * * @author Luca Garulli (l.garulli--(at)--gmail.com) */ public interface SQLFunction { /** * Process a record. * * @param iThis * @param iCurrentRecord : current record * @param iCurrentResult TODO * @param iParams : function parameters, number is ensured to be within minParams and maxParams. * @param iContext : object calling this function * * @return function result, can be null. Special cases : can be null if function aggregate results, can be null if function filter * results : this mean result is excluded */ Object execute(Object iThis, Identifiable iCurrentRecord, Object iCurrentResult, Object[] iParams, CommandContext iContext); /** * Configure the function. * * @param configuredParameters */ SQLFunction config(Object[] configuredParameters); /** * A function can make calculation on several records before returning a result. *

* Example of such function : sum, count, max, min ... *

* The final result of the aggregation is obtained by calling {@link #getResult() } * * @return true if function aggregate results */ boolean aggregateResults(); /** * Function name, the name is used by the sql parser to identify a call this function. * * @return String , function name, never null or empty. */ String getName(); /** * Returns a convenient SQL String representation of the function. *

* Example : * *

   *  myFunction( param1, param2, [optionalParam3])
   * 
*

* This text will be used in exception messages. * * @return String , never null. */ String getSyntax(); /** * Only called when function aggregates results after all records have been passed to the function. * * @return Aggregation result */ Object getResult(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy