Class QueryHelper
public static class QueryHelper
- Inheritance
-
QueryHelper
- Inherited Members
Methods
CalcCanBeNull(Type?, bool?, ParametersNullabilityType, IEnumerable<bool>)
public static bool CalcCanBeNull(Type? type, bool? canBeNull, ParametersNullabilityType isNullable, IEnumerable<bool> nullInfo)
Parameters
typeTypecanBeNullbool?isNullableParametersNullabilityTypenullInfoIEnumerable<bool>
Returns
CanBeEvaluated(IQueryElement, EvaluationContext)
public static bool CanBeEvaluated(this IQueryElement expr, EvaluationContext context)
Parameters
exprIQueryElementcontextEvaluationContext
Returns
CanBeEvaluated(IQueryElement, bool)
public static bool CanBeEvaluated(this IQueryElement expr, bool withParameters)
Parameters
exprIQueryElementwithParametersbool
Returns
CanBeNullableOrUnknown(ISqlExpression, NullabilityContext, bool)
public static bool CanBeNullableOrUnknown(this ISqlExpression expr, NullabilityContext nullabilityContext, bool withoutUnknownErased)
Parameters
exprISqlExpressionnullabilityContextNullabilityContextwithoutUnknownErasedbool
Returns
CollectDependencies(IQueryElement, IEnumerable<ISqlTableSource>, HashSet<ISqlExpression>, IEnumerable<IQueryElement>?, bool)
public static void CollectDependencies(IQueryElement root, IEnumerable<ISqlTableSource> sources, HashSet<ISqlExpression> found, IEnumerable<IQueryElement>? ignore = null, bool singleColumnLevel = false)
Parameters
rootIQueryElementsourcesIEnumerable<ISqlTableSource>foundHashSet<ISqlExpression>ignoreIEnumerable<IQueryElement>singleColumnLevelbool
CollectParametersAndValues(IQueryElement, ICollection<SqlParameter>, ICollection<SqlValue>)
public static void CollectParametersAndValues(IQueryElement root, ICollection<SqlParameter> parameters, ICollection<SqlValue> values)
Parameters
rootIQueryElementparametersICollection<SqlParameter>valuesICollection<SqlValue>
CollectUniqueKeys(ISqlTableSource, bool, List<IList<ISqlExpression>>)
Collects unique keys from different sources.
public static void CollectUniqueKeys(ISqlTableSource tableSource, bool includeDistinct, List<IList<ISqlExpression>> knownKeys)
Parameters
tableSourceISqlTableSourceincludeDistinctboolFlag to include Distinct as unique key.
knownKeysList<IList<ISqlExpression>>List with found keys.
CollectUniqueKeys(SqlTableSource, List<IList<ISqlExpression>>)
Collects unique keys from different sources.
public static void CollectUniqueKeys(SqlTableSource tableSource, List<IList<ISqlExpression>> knownKeys)
Parameters
tableSourceSqlTableSourceknownKeysList<IList<ISqlExpression>>List with found keys.
CollectUsedSources(IQueryElement, HashSet<ISqlTableSource>, IEnumerable<IQueryElement>?)
public static void CollectUsedSources(IQueryElement root, HashSet<ISqlTableSource> found, IEnumerable<IQueryElement>? ignore = null)
Parameters
rootIQueryElementfoundHashSet<ISqlTableSource>ignoreIEnumerable<IQueryElement>
ConcatSearchCondition(SqlHavingClause, SqlSearchCondition)
public static void ConcatSearchCondition(this SqlHavingClause where, SqlSearchCondition search)
Parameters
whereSqlHavingClausesearchSqlSearchCondition
ConcatSearchCondition(SqlWhereClause, SqlSearchCondition)
public static void ConcatSearchCondition(this SqlWhereClause where, SqlSearchCondition search)
Parameters
whereSqlWhereClausesearchSqlSearchCondition
ContainsAggregationFunction(IQueryElement)
public static bool ContainsAggregationFunction(IQueryElement expr)
Parameters
exprIQueryElement
Returns
ContainsAggregationOrWindowFunction(IQueryElement)
public static bool ContainsAggregationOrWindowFunction(IQueryElement expr)
Parameters
exprIQueryElement
Returns
ContainsWindowFunction(IQueryElement)
public static bool ContainsWindowFunction(IQueryElement expr)
Parameters
exprIQueryElement
Returns
ConvertFormatToConcatenation(string, IReadOnlyList<ISqlExpression>)
public static ISqlExpression ConvertFormatToConcatenation(string format, IReadOnlyList<ISqlExpression> parameters)
Parameters
formatstringparametersIReadOnlyList<ISqlExpression>
Returns
CorrectComparisonForJoin(SqlSearchCondition)
Disables null checks for equality operations.
public static SqlSearchCondition CorrectComparisonForJoin(SqlSearchCondition sc)
Parameters
Returns
CreateSqlValue(object?, DbDataType, params ISqlExpression[])
public static ISqlExpression CreateSqlValue(object? value, DbDataType dbDataType, params ISqlExpression[] basedOn)
Parameters
valueobjectdbDataTypeDbDataTypebasedOnISqlExpression[]
Returns
CreateSqlValue(object?, SqlBinaryExpression, MappingSchema)
public static ISqlExpression CreateSqlValue(object? value, SqlBinaryExpression be, MappingSchema mappingSchema)
Parameters
valueobjectbeSqlBinaryExpressionmappingSchemaMappingSchema
Returns
EnsureConjunction(SqlWhereClause)
Ensures that expression is not A OR B but (A OR B) Function makes all needed manipulations for that
public static SqlSearchCondition EnsureConjunction(this SqlWhereClause whereClause)
Parameters
whereClauseSqlWhereClause
Returns
EnumerateAccessibleSources(SelectQuery)
Enumerates table sources recursively based on joins
public static IEnumerable<ISqlTableSource> EnumerateAccessibleSources(SelectQuery selectQuery)
Parameters
selectQuerySelectQuery
Returns
EnumerateAccessibleSources(SqlTableSource)
public static IEnumerable<ISqlTableSource> EnumerateAccessibleSources(SqlTableSource tableSource)
Parameters
tableSourceSqlTableSource
Returns
EnumerateAccessibleTableSources(SelectQuery)
Enumerates table sources recursively based on joins
public static IEnumerable<SqlTableSource> EnumerateAccessibleTableSources(SelectQuery selectQuery)
Parameters
selectQuerySelectQuery
Returns
EnumerateAccessibleTables(SelectQuery)
public static IEnumerable<SqlTable> EnumerateAccessibleTables(SelectQuery selectQuery)
Parameters
selectQuerySelectQuery
Returns
EnumerateJoins(SelectQuery)
public static IEnumerable<SqlJoinedTable> EnumerateJoins(SelectQuery selectQuery)
Parameters
selectQuerySelectQuery
Returns
EnumerateLevelSources(SelectQuery)
public static IEnumerable<SqlTableSource> EnumerateLevelSources(SelectQuery selectQuery)
Parameters
selectQuerySelectQuery
Returns
EvaluateBoolExpression(IQueryElement, EvaluationContext, bool?)
public static bool? EvaluateBoolExpression(this IQueryElement expr, EvaluationContext context, bool? defaultValue = null)
Parameters
exprIQueryElementcontextEvaluationContextdefaultValuebool?
Returns
- bool?
EvaluateExpression(IQueryElement, EvaluationContext)
public static object? EvaluateExpression(this IQueryElement expr, EvaluationContext context)
Parameters
exprIQueryElementcontextEvaluationContext
Returns
ExtractField(ISqlExpression)
Returns SqlField from specific expression. Usually from SqlColumn. Conversion is ignored.
public static SqlField? ExtractField(ISqlExpression expression)
Parameters
expressionISqlExpression
Returns
- SqlField
Field instance associated with expression
ExtractPredicate(ISqlPredicate, out ISqlPredicate, out bool)
public static void ExtractPredicate(ISqlPredicate predicate, out ISqlPredicate underlying, out bool isNot)
Parameters
predicateISqlPredicateunderlyingISqlPredicateisNotbool
ExtractSqlTable(ISqlExpression?)
Returns SqlTable from specific expression. Usually from SqlColumn. Conversion is ignored.
public static SqlTable? ExtractSqlTable(ISqlExpression? expression)
Parameters
expressionISqlExpression
Returns
- SqlTable
SqlTable instance associated with expression
GetBoolValue(IQueryElement, EvaluationContext)
public static bool? GetBoolValue(IQueryElement element, EvaluationContext evaluationContext)
Parameters
elementIQueryElementevaluationContextEvaluationContext
Returns
- bool?
GetColumnDescriptor(ISqlExpression?)
Returns ColumnDescriptor for expr.
public static ColumnDescriptor? GetColumnDescriptor(ISqlExpression? expr)
Parameters
exprISqlExpressionTested SQL Expression.
Returns
- ColumnDescriptor
Associated column descriptor or
null.
GetDbDataType(ISqlExpression, MappingSchema)
public static DbDataType GetDbDataType(ISqlExpression expr, MappingSchema mappingSchema)
Parameters
exprISqlExpressionmappingSchemaMappingSchema
Returns
GetDbDataTypeWithoutSchema(ISqlExpression)
public static DbDataType GetDbDataTypeWithoutSchema(ISqlExpression expr)
Parameters
exprISqlExpression
Returns
GetParameterValue(SqlParameter, IReadOnlyParameterValues?)
public static SqlParameterValue GetParameterValue(this SqlParameter parameter, IReadOnlyParameterValues? parameterValues)
Parameters
parameterSqlParameterparameterValuesIReadOnlyParameterValues
Returns
GetUnderlyingField(ISqlExpression)
Returns SqlField from specific expression. Usually from SqlColumn. Complex expressions ignored.
public static SqlField? GetUnderlyingField(ISqlExpression expression)
Parameters
expressionISqlExpression
Returns
- SqlField
Field instance associated with expression
GetUsedSources(ISqlExpression, HashSet<ISqlTableSource>)
Retrieves which sources are used in the rootexpression
public static void GetUsedSources(ISqlExpression root, HashSet<ISqlTableSource> foundSources)
Parameters
rootISqlExpressionExpression to analyze.
foundSourcesHashSet<ISqlTableSource>Output container for detected sources/
GetValueConverter(ISqlExpression?)
Returns IValueConverter for expr.
public static IValueConverter? GetValueConverter(ISqlExpression? expr)
Parameters
exprISqlExpressionTested SQL Expression.
Returns
- IValueConverter
Associated converter or
null.
HasCteClauseReference(IQueryElement, CteClause?)
public static bool HasCteClauseReference(IQueryElement element, CteClause? clause)
Parameters
elementIQueryElementclauseCteClause
Returns
HasElement(IQueryElement, IQueryElement)
public static bool HasElement(this IQueryElement root, IQueryElement element)
Parameters
rootIQueryElementelementIQueryElement
Returns
HasParameter(IQueryElement)
public static bool HasParameter(this IQueryElement root)
Parameters
rootIQueryElement
Returns
HasQueryParameter(IQueryElement)
public static bool HasQueryParameter(this IQueryElement root)
Parameters
rootIQueryElement
Returns
HasTableInQuery(SelectQuery, SqlTable)
public static bool HasTableInQuery(SelectQuery query, SqlTable table)
Parameters
querySelectQuerytableSqlTable
Returns
IsAggregationFunction(IQueryElement)
public static bool IsAggregationFunction(IQueryElement expr)
Parameters
exprIQueryElement
Returns
IsAggregationOrWindowFunction(IQueryElement)
public static bool IsAggregationOrWindowFunction(IQueryElement expr)
Parameters
exprIQueryElement
Returns
IsAggregationQuery(SelectQuery)
public static bool IsAggregationQuery(SelectQuery selectQuery)
Parameters
selectQuerySelectQuery
Returns
IsAggregationQuery(SelectQuery, out bool)
public static bool IsAggregationQuery(SelectQuery selectQuery, out bool needsOrderBy)
Parameters
selectQuerySelectQueryneedsOrderBybool
Returns
IsBoolean(ISqlExpression, bool)
Returns true if expression typed by predicate (returns SQL BOOLEAN-typed value).
public static bool IsBoolean(ISqlExpression expr, bool includeFields = false)
Parameters
exprISqlExpressionincludeFieldsbool
Returns
IsConstant(ISqlExpression)
Returns true if tested expression is constant during query execution (e.g. value or parameter).
public static bool IsConstant(ISqlExpression expr)
Parameters
exprISqlExpressionTested expression.
Returns
IsConstantFast(ISqlExpression)
public static bool IsConstantFast(ISqlExpression expr)
Parameters
exprISqlExpression
Returns
IsDependsOn(IQueryElement, IQueryElement, HashSet<IQueryElement>?)
public static bool IsDependsOn(IQueryElement testedRoot, IQueryElement onElement, HashSet<IQueryElement>? elementsToIgnore = null)
Parameters
testedRootIQueryElementonElementIQueryElementelementsToIgnoreHashSet<IQueryElement>
Returns
IsDependsOnOuterSources(IQueryElement, IReadOnlyCollection<IQueryElement>?, IReadOnlyCollection<ISqlTableSource>?)
public static bool IsDependsOnOuterSources(IQueryElement testedRoot, IReadOnlyCollection<IQueryElement>? elementsToIgnore = null, IReadOnlyCollection<ISqlTableSource>? currentSources = null)
Parameters
testedRootIQueryElementelementsToIgnoreIReadOnlyCollection<IQueryElement>currentSourcesIReadOnlyCollection<ISqlTableSource>
Returns
IsDependsOnSource(IQueryElement, ISqlTableSource, IReadOnlyCollection<IQueryElement>?)
public static bool IsDependsOnSource(IQueryElement testedRoot, ISqlTableSource onSource, IReadOnlyCollection<IQueryElement>? elementsToIgnore = null)
Parameters
testedRootIQueryElementonSourceISqlTableSourceelementsToIgnoreIReadOnlyCollection<IQueryElement>
Returns
IsDependsOnSources(IQueryElement, IReadOnlyCollection<ISqlTableSource>, IReadOnlyCollection<IQueryElement>?)
public static bool IsDependsOnSources(IQueryElement testedRoot, IReadOnlyCollection<ISqlTableSource> onSources, IReadOnlyCollection<IQueryElement>? elementsToIgnore = null)
Parameters
testedRootIQueryElementonSourcesIReadOnlyCollection<ISqlTableSource>elementsToIgnoreIReadOnlyCollection<IQueryElement>
Returns
IsEqualTables(SqlTable?, SqlTable?, bool)
public static bool IsEqualTables(SqlTable? table1, SqlTable? table2, bool withExtensions = true)
Parameters
Returns
IsMutable(IQueryElement)
public static bool IsMutable(this IQueryElement expr)
Parameters
exprIQueryElement
Returns
IsNullValue(ISqlExpression)
public static bool IsNullValue(this ISqlExpression expr)
Parameters
exprISqlExpression
Returns
IsPredicate(ISqlExpression)
public static bool IsPredicate(this ISqlExpression expr)
Parameters
exprISqlExpression
Returns
IsSingleTableInQuery(SelectQuery, SqlTable)
public static bool IsSingleTableInQuery(SelectQuery query, SqlTable table)
Parameters
querySelectQuerytableSqlTable
Returns
IsWindowFunction(IQueryElement)
public static bool IsWindowFunction(IQueryElement expr)
Parameters
exprIQueryElement
Returns
MarkAsNonQueryParameters(IQueryElement)
public static void MarkAsNonQueryParameters(IQueryElement root)
Parameters
rootIQueryElement
MoveOrderByUp(params SelectQuery[])
Helper function for moving Ordering up in select tree.
public static void MoveOrderByUp(params SelectQuery[] queries)
Parameters
queriesSelectQuery[]Array of queries
NeedParameterInlining(ISqlExpression)
public static bool NeedParameterInlining(ISqlExpression expression)
Parameters
expressionISqlExpression
Returns
SameWithoutNullablity(ISqlExpression, ISqlExpression)
public static bool SameWithoutNullablity(ISqlExpression expr1, ISqlExpression expr2)
Parameters
expr1ISqlExpressionexpr2ISqlExpression
Returns
ShouldCheckForNull(ISqlExpression, NullabilityContext)
public static bool ShouldCheckForNull(this ISqlExpression expr, NullabilityContext nullability)
Parameters
exprISqlExpressionnullabilityNullabilityContext
Returns
SimplifyColumnExpression(ISqlExpression?)
public static ISqlExpression? SimplifyColumnExpression(ISqlExpression? sqlExpression)
Parameters
sqlExpressionISqlExpression
Returns
SuggestDbDataType(ISqlExpression)
public static DbDataType? SuggestDbDataType(ISqlExpression expr)
Parameters
exprISqlExpression
Returns
SuggestTableSourceAlias(SelectQuery, string)
public static string SuggestTableSourceAlias(SelectQuery selectQuery, string alias)
Parameters
selectQuerySelectQueryaliasstring
Returns
TransformExpressionIndexes<TContext>(TContext, string, Func<TContext, int, int>)
public static string TransformExpressionIndexes<TContext>(TContext context, string expression, Func<TContext, int, int> transformFunc)
Parameters
Returns
Type Parameters
TContext
TryEvaluateExpression(IQueryElement, EvaluationContext, out object?)
public static bool TryEvaluateExpression(this IQueryElement expr, EvaluationContext context, out object? result)
Parameters
exprIQueryElementcontextEvaluationContextresultobject
Returns
TryEvaluateExpressionForServer(IQueryElement, EvaluationContext, out object?)
public static bool TryEvaluateExpressionForServer(this IQueryElement expr, EvaluationContext context, out object? result)
Parameters
exprIQueryElementcontextEvaluationContextresultobject
Returns
UnwrapCast(ISqlExpression)
public static ISqlExpression UnwrapCast(ISqlExpression expr)
Parameters
exprISqlExpression
Returns
UnwrapExpression(ISqlExpression, bool)
public static ISqlExpression UnwrapExpression(ISqlExpression expr, bool checkNullability)
Parameters
exprISqlExpressioncheckNullabilitybool
Returns
UnwrapNullablity(ISqlExpression)
public static ISqlExpression UnwrapNullablity(ISqlExpression expr)
Parameters
exprISqlExpression
Returns
WrapQuery<TStatement>(TStatement, SelectQuery, bool, bool)
Wraps queryToWrap by another select.
Keeps columns count the same. After modification statement is equivalent symantically.
--before
SELECT c1, c2
FROM A
-- after
SELECT B.c1, B.c2
FROM (
SELECT c1, c2
FROM A
) B
public static TStatement WrapQuery<TStatement>(TStatement statement, SelectQuery queryToWrap, bool allowMutation, bool doNotRemove = false) where TStatement : SqlStatement
Parameters
statementTStatementStatement which may contain tested query
queryToWrapSelectQueryTells which select query needs enveloping
allowMutationboolWrapped query can be not recreated for performance considerations.
doNotRemovebool
Returns
- TStatement
The same
statementor modified statement when wrapping has been performed.
Type Parameters
TStatement
WrapQuery<TStatement, TContext>(TContext, TStatement, Func<TContext, SelectQuery, IQueryElement?, bool>, Action<TContext, SelectQuery, SelectQuery>?, bool, bool)
Wraps queries by another select. Keeps columns count the same. After modification statement is equivalent symantically.
public static TStatement WrapQuery<TStatement, TContext>(TContext context, TStatement statement, Func<TContext, SelectQuery, IQueryElement?, bool> wrapTest, Action<TContext, SelectQuery, SelectQuery>? onWrap, bool allowMutation, bool doNotRemove = false) where TStatement : SqlStatement
Parameters
contextTContextonWrapandwrapTestcontext object.statementTStatementwrapTestFunc<TContext, SelectQuery, IQueryElement, bool>Delegate for testing when query needs to be wrapped.
onWrapAction<TContext, SelectQuery, SelectQuery>After enveloping query this function called for prcess needed optimizations.
allowMutationboolWrapped query can be not recreated for performance considerations.
doNotRemovebool
Returns
- TStatement
The same
statementor modified statement when wrapping has been performed.
Type Parameters
TStatementTContextType of
onWrapandwrapTestcontext object.
WrapQuery<TStatement, TContext>(TContext, TStatement, Func<TContext, SelectQuery, IQueryElement?, int>, Action<TContext, IReadOnlyList<SelectQuery>>, bool, bool)
Wraps tested query in subquery(s). Keeps columns count the same. After modification statement is equivalent semantically.
--before
SELECT c1, c2 -- QA
FROM A
-- after (with 2 subqueries)
SELECT C.c1, C.c2 -- QC
FROM (
SELECT B.c1, B.c2 -- QB
FROM (
SELECT c1, c2 -- QA
FROM A
) B
FROM
) C
public static TStatement WrapQuery<TStatement, TContext>(TContext context, TStatement statement, Func<TContext, SelectQuery, IQueryElement?, int> wrapTest, Action<TContext, IReadOnlyList<SelectQuery>> onWrap, bool allowMutation, bool doNotRemove = false) where TStatement : SqlStatement
Parameters
contextTContextonWrapandwrapTestcontext object.statementTStatementStatement which may contain tested query
wrapTestFunc<TContext, SelectQuery, IQueryElement, int>Delegate for testing which query needs to be enveloped. Result of delegate call tells how many subqueries needed. 0 - no changes 1 - one subquery N - N subqueries
onWrapAction<TContext, IReadOnlyList<SelectQuery>>After wrapping query this function called for prcess needed optimizations. Array of queries contains [QC, QB, QA]
allowMutationboolWrapped query can be not recreated for performance considerations.
doNotRemovebool
Returns
- TStatement
The same
statementor modified statement when wrapping has been performed.
Type Parameters
TStatementTContextType of
onWrapandwrapTestcontext object.