/
krasninja
/
querycat
Обзор
Документация
Войти
/
krasninja
/
querycat
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/QueryCat.Backend/Functions/Aggregate/LastValueAggregateFunction.cs
37 строк
1 KB
Ivan Kozhin
Introduce safe functions concept
25 янв 2024, 09:56
25 янв 2024, 09:56
d7659d7
Код
Авторство
О чём код?
using System.ComponentModel; using QueryCat.Backend.Core.Functions; using QueryCat.Backend.Core.Types; namespace QueryCat.Backend.Functions.Aggregate; /// <summary> /// Implements "LAST_VALUE" aggregation function. /// </summary> [SafeFunction] [Description("Returns value evaluated at the row that is the last row of the window frame.")] [AggregateFunctionSignature("last_value(value: integer): integer")] [AggregateFunctionSignature("last_value(value: numeric): numeric")] [AggregateFunctionSignature("last_value(value: float): float")] [AggregateFunctionSignature("last_value(value: string): string")] [AggregateFunctionSignature("last_value(value: timestamp): timestamp")] [AggregateFunctionSignature("last_value(value: interval): interval")] [AggregateFunctionSignature("last_value(value: boolean): boolean")] // ReSharper disable once ClassNeverInstantiated.Global internal sealed class LastValueAggregateFunction : IAggregateFunction { /// <inheritdoc /> public VariantValue[] GetInitialState(DataType type) => [VariantValue.Null]; /// <inheritdoc /> public void Invoke(VariantValue[] state, FunctionCallInfo callInfo) { var value = callInfo.GetAt(0); if (!value.IsNull) { state[0] = value; } } /// <inheritdoc /> public VariantValue GetResult(VariantValue[] state) => state[0]; }