Skip to content

Query: SqlFunctionExpression API review #14882

@smitpatel

Description

@smitpatel

In new query pipeline, in order to facilitate creating different function, currently following variations are supported. (Also there niladic version)

Name(…)
dbo.Name(…)
Instance.Name(…)

Following are all the constructors. (You can ignore type, typeMapping, condition parameters, they are metadata)

public SqlFunctionExpression(
            string functionName,
            bool niladic,
            Type type,
            RelationalTypeMapping typeMapping,
            bool condition)
            : this(null, null, functionName, niladic, null, type, typeMapping, condition)
        {
        }

        public SqlFunctionExpression(
            string schema,
            string functionName,
            bool niladic,
            Type type,
            RelationalTypeMapping typeMapping,
            bool condition)
            : this(null, schema, functionName, niladic, null, type, typeMapping, condition)
        {
        }

        public SqlFunctionExpression(
            SqlExpression instance,
            string functionName,
            bool niladic,
            Type type,
            RelationalTypeMapping typeMapping,
            bool condition)
            : this(instance, null, functionName, niladic, null, type, typeMapping, condition)
        {
        }

        public SqlFunctionExpression(
            string functionName,
            IEnumerable<SqlExpression> arguments,
            Type type,
            RelationalTypeMapping typeMapping,
            bool condition)
            : this(null, null, functionName, false, arguments, type, typeMapping, condition)
        {
        }

        public SqlFunctionExpression(
            string schema,
            string functionName,
            IEnumerable<SqlExpression> arguments,
            Type type,
            RelationalTypeMapping typeMapping,
            bool condition)
            : this(null, schema, functionName, false, arguments, type, typeMapping, condition)
        {
        }

        public SqlFunctionExpression(
            SqlExpression instance,
            string functionName,
            IEnumerable<SqlExpression> arguments,
            Type type,
            RelationalTypeMapping typeMapping,
            bool condition)
            : this(instance, null, functionName, false, arguments, type, typeMapping, condition)
        {
        }

Is above is exhaustive? Do we need to support more variations? Is dbo.Name (niladic) or Instance.Name (niladic) is useful or possible or impossible?

cc: @bricelam due to SQLite & Spatial
cc: @roji due to Postgre
cc: @pmiddleton based on all the work with DbFunction + pivot + TVF.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions