private static TypeSymbol SeriesDecomposeResult()

in src/Kusto.Language/Functions.cs [1983:2655]


        private static TypeSymbol SeriesDecomposeResult(TableSymbol table, IReadOnlyList<Syntax.Expression> args, Signature sig) =>
            MakePrefixedTuple(sig, "series", args,
                new TupleSymbol(
                    new ColumnSymbol("baseline", ScalarTypes.Dynamic),
                    new ColumnSymbol("seasonal", ScalarTypes.Dynamic),
                    new ColumnSymbol("trend", ScalarTypes.Dynamic),
                    new ColumnSymbol("residual", ScalarTypes.Dynamic)));

        private static TypeSymbol SeriesDecomposeAnomaliesResult(TableSymbol table, IReadOnlyList<Syntax.Expression> args, Signature sig) =>
            MakePrefixedTuple(sig, "series", args,
                new TupleSymbol(
                    new ColumnSymbol("ad_flag", ScalarTypes.Dynamic),
                    new ColumnSymbol("ad_score", ScalarTypes.Dynamic),
                    new ColumnSymbol("baseline", ScalarTypes.Dynamic)));

        public static readonly FunctionSymbol SeriesDecompose =
             new FunctionSymbol("series_decompose",
                new Signature(SeriesDecomposeResult, Tabularity.Scalar,
                    new Parameter("series", ScalarTypes.Dynamic),
                    new Parameter("period", ParameterTypeKind.Integer, minOccurring: 0),
                    new Parameter("trend", ScalarTypes.String, minOccurring: 0),
                    new Parameter("test_points", ParameterTypeKind.Integer, minOccurring: 0),
                    new Parameter("seasonality_threshold", ParameterTypeKind.Number, minOccurring: 0)));

        public static readonly FunctionSymbol SeriesDecomposeForecast =
             new FunctionSymbol("series_decompose_forecast",
                new Signature(SeriesDecomposeResult, Tabularity.Scalar,
                    new Parameter("series", ScalarTypes.Dynamic),
                    new Parameter("test_points", ParameterTypeKind.Integer),
                    new Parameter("period", ParameterTypeKind.Integer, minOccurring: 0),
                    new Parameter("trend", ScalarTypes.String, minOccurring: 0),
                    new Parameter("seasonality_threshold", ParameterTypeKind.Number, minOccurring: 0)));

        public static readonly FunctionSymbol SeriesDecomposeAnomalies =
             new FunctionSymbol("series_decompose_anomalies",
                new Signature(SeriesDecomposeAnomaliesResult, Tabularity.Scalar,
                    new Parameter("series", ScalarTypes.Dynamic),
                    new Parameter("threshold", ParameterTypeKind.Number, minOccurring: 0),
                    new Parameter("period", ParameterTypeKind.Integer, minOccurring: 0),
                    new Parameter("trend", ScalarTypes.String, minOccurring: 0),
                    new Parameter("test_points", ParameterTypeKind.Integer, minOccurring: 0),
                    new Parameter("method", ScalarTypes.String, minOccurring: 0),
                    new Parameter("seasonality_threshold", ParameterTypeKind.Number, minOccurring: 0)));

        public static readonly FunctionSymbol SeriesPearsonCorrelation =
            new FunctionSymbol("series_pearson_correlation", ScalarTypes.Real,
                new Parameter("series1", ScalarTypes.Dynamic),
                new Parameter("series2", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None);
        #endregion

        #region math functions
        public static readonly FunctionSymbol Round =
            new FunctionSymbol("round", ReturnTypeKind.Parameter0,
                new Parameter("number", ParameterTypeKind.Number),
                new Parameter("precision", ScalarTypes.Long, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Ceiling =
            new FunctionSymbol("ceiling", ReturnTypeKind.Parameter0,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Pow =
            new FunctionSymbol("pow", ScalarTypes.Real,
                new Parameter("base", ParameterTypeKind.Number),
                new Parameter("exponent", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Sqrt =
            new FunctionSymbol("sqrt", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Log =
            new FunctionSymbol("log", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Log2 =
            new FunctionSymbol("log2", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Log10 =
            new FunctionSymbol("log10", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Exp =
            new FunctionSymbol("exp", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Exp2 =
            new FunctionSymbol("exp2", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Exp10 =
            new FunctionSymbol("exp10", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol PI =
            new FunctionSymbol("pi", ScalarTypes.Real)
            .ConstantFoldable();

        public static readonly FunctionSymbol Cos =
            new FunctionSymbol("cos", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Sin =
            new FunctionSymbol("sin", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Tan =
            new FunctionSymbol("tan", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Acos =
            new FunctionSymbol("acos", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Asin =
            new FunctionSymbol("asin", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Atan =
            new FunctionSymbol("atan", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Atan2 =
            new FunctionSymbol("atan2", ScalarTypes.Real,
                new Parameter("y", ParameterTypeKind.Number),
                new Parameter("x", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Abs =
            new FunctionSymbol("abs",
                new Signature(ScalarTypes.Long,
                    new Parameter("number", ParameterTypeKind.Integer)),
                new Signature(ReturnTypeKind.Parameter0,
                    new Parameter("number", ParameterTypeKind.Number)),
                new Signature(ScalarTypes.TimeSpan,
                    new Parameter("number", ScalarTypes.TimeSpan)))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol Cot =
            new FunctionSymbol("cot", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol Degrees =
            new FunctionSymbol("degrees", ScalarTypes.Real,
                new Parameter("radians", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol Radians =
            new FunctionSymbol("radians", ScalarTypes.Real,
                new Parameter("degrees", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol Sign =
            new FunctionSymbol("sign", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol Rand =
            new FunctionSymbol("rand", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Integer, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol BetaCdf =
            new FunctionSymbol("beta_cdf", ScalarTypes.Real,
                new Parameter("x", ParameterTypeKind.Number),
                new Parameter("alpha", ParameterTypeKind.Number),
                new Parameter("beta", ParameterTypeKind.Number)).ConstantFoldable();

        public static readonly FunctionSymbol BetaInv =
            new FunctionSymbol("beta_inv", ScalarTypes.Real,
                new Parameter("probability", ParameterTypeKind.Number),
                new Parameter("alpha", ParameterTypeKind.Number),
                new Parameter("beta", ParameterTypeKind.Number)).ConstantFoldable();

        public static readonly FunctionSymbol BetaPdf =
            new FunctionSymbol("beta_pdf", ScalarTypes.Real,
                new Parameter("x", ParameterTypeKind.Number),
                new Parameter("alpha", ParameterTypeKind.Number),
                new Parameter("beta", ParameterTypeKind.Number)).ConstantFoldable();

        public static readonly FunctionSymbol Gamma =
            new FunctionSymbol("gamma", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol LogGamma =
            new FunctionSymbol("loggamma", ScalarTypes.Real,
                new Parameter("number", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.FirstArgument)
            .ConstantFoldable();

        public static readonly FunctionSymbol IsNan =
            new FunctionSymbol("isnan", ScalarTypes.Bool,
                new Parameter("number", ScalarTypes.Real))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol IsInf =
            new FunctionSymbol("isinf", ScalarTypes.Bool,
                new Parameter("number", ScalarTypes.Real))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol IsFinite =
            new FunctionSymbol("isfinite", ScalarTypes.Bool,
                new Parameter("number", ScalarTypes.Real))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol Coalesce =
            new FunctionSymbol("coalesce", ReturnTypeKind.Common,
                new Parameter("arg", ParameterTypeKind.CommonScalar, minOccurring: 2, maxOccurring: 64))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol MaxOf =
            new FunctionSymbol("max_of", ReturnTypeKind.Common,
                new Parameter("arg", ParameterTypeKind.CommonOrderable, minOccurring: 2, maxOccurring: 64))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol MinOf =
            new FunctionSymbol("min_of", ReturnTypeKind.Common,
                new Parameter("arg", ParameterTypeKind.CommonOrderable, minOccurring: 2, maxOccurring: 64))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol WelchTest =
            new FunctionSymbol("welch_test", ScalarTypes.Real,
                new Parameter("mean1", ParameterTypeKind.Number),
                new Parameter("variance1", ParameterTypeKind.Number),
                new Parameter("count1", ParameterTypeKind.Number),
                new Parameter("mean2", ParameterTypeKind.Number),
                new Parameter("variance2", ParameterTypeKind.Number),
                new Parameter("count2", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None);
        #endregion

        #region geospatial functions

        public static readonly FunctionSymbol GeoDistance2Points =
            new FunctionSymbol("geo_distance_2points", ScalarTypes.Real,
                new Parameter("p1_longitude", ParameterTypeKind.Number),
                new Parameter("p1_latitude", ParameterTypeKind.Number),
                new Parameter("p2_longitude", ParameterTypeKind.Number),
                new Parameter("p2_latitude", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoDistancePointToLine =
            new FunctionSymbol("geo_distance_point_to_line", ScalarTypes.Real,
                new Parameter("longitude", ParameterTypeKind.Number),
                new Parameter("latitude", ParameterTypeKind.Number),
                new Parameter("lineString", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoDistancePointToPolygon =
            new FunctionSymbol("geo_distance_point_to_polygon", ScalarTypes.Real,
                new Parameter("longitude", ParameterTypeKind.Number),
                new Parameter("latitude", ParameterTypeKind.Number),
                new Parameter("polygon", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPointInCircle =
            new FunctionSymbol("geo_point_in_circle", ScalarTypes.Bool,
                new Parameter("p_longitude", ParameterTypeKind.Number),
                new Parameter("p_latitude", ParameterTypeKind.Number),
                new Parameter("pc_longitude", ParameterTypeKind.Number),
                new Parameter("pc_latitude", ParameterTypeKind.Number),
                new Parameter("c_radius", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPointInPolygon =
            new FunctionSymbol("geo_point_in_polygon", ScalarTypes.Bool,
                new Parameter("longitude", ParameterTypeKind.Number),
                new Parameter("latitude", ParameterTypeKind.Number),
                new Parameter("polygon", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoLineIntersectsLine =
            new FunctionSymbol("geo_intersects_2lines", ScalarTypes.Bool,
                new Parameter("lineString1", ScalarTypes.Dynamic),
                new Parameter("lineString2", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoLineIntersectsPolygon =
            new FunctionSymbol("geo_intersects_line_with_polygon", ScalarTypes.Bool,
                new Parameter("lineString", ScalarTypes.Dynamic),
                new Parameter("polygon", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPolygonIntersectsPolygon =
            new FunctionSymbol("geo_intersects_2polygons", ScalarTypes.Bool,
                new Parameter("polygon1", ScalarTypes.Dynamic),
                new Parameter("polygon2", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPolygonsUnion =
            new FunctionSymbol("geo_union_polygons_array", ScalarTypes.Dynamic,
                new Parameter("polygons", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable()
            .Hide();

        public static readonly FunctionSymbol GeoPolygonToS2Cells =
            new FunctionSymbol("geo_polygon_to_s2cells", ScalarTypes.Dynamic,
                new Parameter("polygon", ScalarTypes.Dynamic),
                new Parameter("level", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPolygonDensify =
            new FunctionSymbol("geo_polygon_densify", ScalarTypes.Dynamic,
                new Parameter("polygon", ScalarTypes.Dynamic),
                new Parameter("tolerance", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPolygonArea =
            new FunctionSymbol("geo_polygon_area", ScalarTypes.Real,
                new Parameter("polygon", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPolygonCentroid =
            new FunctionSymbol("geo_polygon_centroid", ScalarTypes.Dynamic,
                new Parameter("polygon", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPolygonPerimeter =
            new FunctionSymbol("geo_polygon_perimeter", ScalarTypes.Real,
                new Parameter("polygon", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable()
            .Hide();

        public static readonly FunctionSymbol GeoLineLength =
            new FunctionSymbol("geo_line_length", ScalarTypes.Real,
                new Parameter("lineString", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable()
            .Hide();

        public static readonly FunctionSymbol GeoLineCentroid =
            new FunctionSymbol("geo_line_centroid", ScalarTypes.Dynamic,
                new Parameter("lineString", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable()
            .Hide();

        public static readonly FunctionSymbol GeoLineDensify =
            new FunctionSymbol("geo_line_densify", ScalarTypes.Dynamic,
                new Parameter("lineString", ScalarTypes.Dynamic),
                new Parameter("tolerance", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoLineValidate =
            new FunctionSymbol("__geo_line_validate", ScalarTypes.String,
                new Parameter("lineString", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable()
            .Hide();

        public static readonly FunctionSymbol GeoPolygonValidate =
            new FunctionSymbol("__geo_polygon_validate", ScalarTypes.String,
                new Parameter("polygon", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable()
            .Hide();

        public static readonly FunctionSymbol GeoPointToGeohash =
            new FunctionSymbol("geo_point_to_geohash", ScalarTypes.String,
                new Parameter("longitude", ParameterTypeKind.Number),
                new Parameter("latitude", ParameterTypeKind.Number),
                new Parameter("accuracy", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeohashToCentralPoint =
            new FunctionSymbol("geo_geohash_to_central_point", ScalarTypes.Dynamic,
                new Parameter("geohash", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeohashToPolygon =
            new FunctionSymbol("geo_geohash_to_polygon", ScalarTypes.Dynamic,
                new Parameter("geohash", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPointToS2Cell =
            new FunctionSymbol("geo_point_to_s2cell", ScalarTypes.String,
                new Parameter("longitude", ParameterTypeKind.Number),
                new Parameter("latitude", ParameterTypeKind.Number),
                new Parameter("level", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoS2CellToCentralPoint =
            new FunctionSymbol("geo_s2cell_to_central_point", ScalarTypes.Dynamic,
                new Parameter("s2cell", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoS2CellToPolygon =
            new FunctionSymbol("geo_s2cell_to_polygon", ScalarTypes.Dynamic,
                new Parameter("s2cell", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoPointToH3Cell =
            new FunctionSymbol("geo_point_to_h3cell", ScalarTypes.String,
                new Parameter("longitude", ParameterTypeKind.Number),
                new Parameter("latitude", ParameterTypeKind.Number),
                new Parameter("resolution", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoH3CellToCentralPoint =
            new FunctionSymbol("geo_h3cell_to_central_point", ScalarTypes.Dynamic,
                new Parameter("h3cell", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoH3CellToPolygon =
            new FunctionSymbol("geo_h3cell_to_polygon", ScalarTypes.Dynamic,
                new Parameter("h3cell", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoH3CellChildren =
            new FunctionSymbol("geo_h3cell_children", ScalarTypes.Dynamic,
                new Parameter("h3cell", ScalarTypes.String),
                new Parameter("resolution", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoH3CellParent =
            new FunctionSymbol("geo_h3cell_parent", ScalarTypes.String,
                new Parameter("h3cell", ScalarTypes.String),
                new Parameter("resolution", ParameterTypeKind.Number, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoH3CellRings =
            new FunctionSymbol("geo_h3cell_rings", ScalarTypes.Dynamic,
                new Parameter("h3cell", ScalarTypes.String),
                new Parameter("distance", ParameterTypeKind.Number))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();

        public static readonly FunctionSymbol GeoH3CellLevel =
            new FunctionSymbol("geo_h3cell_level", ScalarTypes.Int,
                new Parameter("h3cell", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None)
            .ConstantFoldable();
        #endregion

        #region other
        public static readonly FunctionSymbol CurrentClusterEndpoint =
            new FunctionSymbol("current_cluster_endpoint", ScalarTypes.String);

        public static readonly FunctionSymbol CurrentDatabase =
            new FunctionSymbol("current_database", ScalarTypes.String);

        public static readonly FunctionSymbol CurrentPrincipal =
            new FunctionSymbol("current_principal", ScalarTypes.String);
        // result column name is dependent on some guid?

        public static readonly FunctionSymbol CurrentPrincipalDetails =
            new FunctionSymbol("current_principal_details", ScalarTypes.Dynamic)
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol CurrentPrincipalIsMemberOf =
          new FunctionSymbol("current_principal_is_member_of", ScalarTypes.Bool,
              new Parameter("group", ParameterTypeKind.StringOrDynamic, minOccurring: 1, maxOccurring: 64))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol ExtentId =
            new FunctionSymbol("extent_id", ScalarTypes.Guid)
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol ExtentId2 =
            new FunctionSymbol("extentid", ScalarTypes.Guid)
            .Obsolete("extend_id")
            .Hide();

        public static readonly FunctionSymbol ExtentTags =
            new FunctionSymbol("extent_tags", ScalarTypes.Dynamic)
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol CurrentNodeId =
            new FunctionSymbol("current_node_id", ScalarTypes.String)
            .WithResultNameKind(ResultNameKind.None)
            .Hide();

        public static readonly FunctionSymbol IngestionTime =
            new FunctionSymbol("ingestion_time", ScalarTypes.DateTime)
            .WithResultNameKind(ResultNameKind.PrefixOnly)
            .WithResultNamePrefix("$IngestionTime");

        public static readonly FunctionSymbol CursorAfter =
            new FunctionSymbol("cursor_after", ScalarTypes.Bool,
                new Parameter("cursor", ScalarTypes.String));

        public static readonly FunctionSymbol CursorBeforeOrAt =
            new FunctionSymbol("cursor_before_or_at", ScalarTypes.Bool,
                new Parameter("cursor", ScalarTypes.String));

        public static readonly FunctionSymbol CursorCurrent =
            new FunctionSymbol("cursor_current", ScalarTypes.String);

        public static readonly FunctionSymbol CursorCurrent2 =
            new FunctionSymbol("current_cursor", ScalarTypes.String)
            .Obsolete("cursor_current")
            .Hide();

        public static readonly FunctionSymbol FormatBytes =
            new FunctionSymbol("format_bytes", ScalarTypes.String,
                new Parameter("size", ParameterTypeKind.Number),
                new Parameter("precision", ScalarTypes.Long, minOccurring: 0),
                new Parameter("format", ScalarTypes.String, ArgumentKind.LiteralNotEmpty, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.FirstArgument);

        public static readonly FunctionSymbol RowNumber =
            new FunctionSymbol("row_number", ScalarTypes.Long,
                new Parameter("startingIndex", ScalarTypes.Long, minOccurring: 0),
                new Parameter("restart", ScalarTypes.Bool, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol RowCumSum =
            new FunctionSymbol("row_cumsum", ReturnTypeKind.Parameter0,
                new Parameter("term", ParameterTypeKind.Number),
                new Parameter("restart", ScalarTypes.Bool, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol RowRank =
            new FunctionSymbol("row_rank", ScalarTypes.Long,
                new Parameter("column", ParameterTypeKind.NotDynamic))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol RowWindowSession =
            new FunctionSymbol("row_window_session", ReturnTypeKind.Parameter0,
                new Parameter("expr", ScalarTypes.DateTime),
                new Parameter("maxDistanceFromFirst", ScalarTypes.TimeSpan),
                new Parameter("minDistanceBetweenNeighbors", ScalarTypes.TimeSpan),
                new Parameter("restart", ScalarTypes.Bool, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol Prev =
            new FunctionSymbol("prev", ReturnTypeKind.Parameter0,
                new Parameter("column", ParameterTypeKind.Scalar, ArgumentKind.Column),
                new Parameter("offset", ScalarTypes.Long, minOccurring: 0),
                new Parameter("default_value", ParameterTypeKind.Scalar, ArgumentKind.Constant, minOccurring: 0))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol Next =
            new FunctionSymbol("next", ReturnTypeKind.Parameter0,
                new Parameter("column", ParameterTypeKind.Scalar, ArgumentKind.Column),
                new Parameter("offset", ScalarTypes.Long, minOccurring: 0),
                new Parameter("default_value", ParameterTypeKind.Scalar, ArgumentKind.Constant, minOccurring: 0))
           .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol RowstoreOrdinalRange =
            new FunctionSymbol("rowstore_ordinal_range", ScalarTypes.Dynamic)
            .WithResultNameKind(ResultNameKind.None)
            .Hide();

        public static readonly FunctionSymbol EstimateDataSize =
            new FunctionSymbol("estimate_data_size",
                new Signature(ScalarTypes.Long,
                    new Parameter("column", ParameterTypeKind.Scalar, ArgumentKind.Column, minOccurring: 1, maxOccurring: MaxRepeat)),
                new Signature(ScalarTypes.Long,
                    new Parameter("column", ParameterTypeKind.Scalar, ArgumentKind.StarOnly)))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol NewGuid = new FunctionSymbol("new_guid", ScalarTypes.Guid)
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol InternalFunnelCompletion =
            new FunctionSymbol("__funnel_completion", ScalarTypes.String,
                new Parameter("events", ScalarTypes.Dynamic),
                new Parameter("times", ScalarTypes.Dynamic),
                new Parameter("sequence", ScalarTypes.Dynamic),
                new Parameter("periods", ScalarTypes.Dynamic))
            .WithResultNameKind(ResultNameKind.None)
            .Hide();

        public static readonly FunctionSymbol HasIpv4 =
            new FunctionSymbol("has_ipv4", ScalarTypes.Bool,
                new Parameter("source", ParameterTypeKind.StringOrDynamic),
                new Parameter("ip", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol HasIpv4Prefix =
            new FunctionSymbol("has_ipv4_prefix", ScalarTypes.Bool,
                new Parameter("source", ParameterTypeKind.StringOrDynamic),
                new Parameter("ip_prefix", ScalarTypes.String))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol HasAnyIpv4 =
            new FunctionSymbol("has_any_ipv4",
                new Signature(ScalarTypes.Bool,
                    new Parameter("source", ParameterTypeKind.StringOrDynamic),
                    new Parameter("ips", ScalarTypes.String, maxOccurring: MaxRepeat)),
                new Signature(ScalarTypes.Bool,
                    new Parameter("source", ParameterTypeKind.StringOrDynamic),
                    new Parameter("ips", ScalarTypes.Dynamic)))
            .WithResultNameKind(ResultNameKind.None);

        public static readonly FunctionSymbol HasAnyIpv4Prefix =
            new FunctionSymbol("has_any_ipv4_prefix",
                new Signature(ScalarTypes.Bool,
                    new Parameter("source", ParameterTypeKind.StringOrDynamic),
                    new Parameter("ip_prefixes", ScalarTypes.String, maxOccurring: MaxRepeat)),
                new Signature(ScalarTypes.Bool,
                    new Parameter("source", ParameterTypeKind.StringOrDynamic),
                    new Parameter("ip_prefixes", ScalarTypes.Dynamic)))
            .WithResultNameKind(ResultNameKind.None);
        #endregion

        #region All
        public static IReadOnlyList<FunctionSymbol> All { get; } = new FunctionSymbol[]