Table of Contents

Class BasicSqlOptimizer

Namespace
LinqToDB.Internal.SqlProvider
Assembly
linq2db.dll
public abstract class BasicSqlOptimizer : ISqlOptimizer
Inheritance
BasicSqlOptimizer
Implements
Derived
Inherited Members
Extension Methods

Constructors

BasicSqlOptimizer(SqlProviderFlags)

protected BasicSqlOptimizer(SqlProviderFlags sqlProviderFlags)

Parameters

sqlProviderFlags SqlProviderFlags

Properties

RequiresCastingParametersForSetOperations

public virtual bool RequiresCastingParametersForSetOperations { get; }

Property Value

bool

SqlProviderFlags

protected SqlProviderFlags SqlProviderFlags { get; }

Property Value

SqlProviderFlags

Methods

ApplyUpdateTableComparison(SelectQuery, SqlUpdateClause, SqlTable, DataOptions)

protected static void ApplyUpdateTableComparison(SelectQuery updateQuery, SqlUpdateClause updateClause, SqlTable inQueryTable, DataOptions dataOptions)

Parameters

updateQuery SelectQuery
updateClause SqlUpdateClause
inQueryTable SqlTable
dataOptions DataOptions

ApplyUpdateTableComparison(SqlSearchCondition, SqlUpdateClause, SqlTable, DataOptions)

protected static void ApplyUpdateTableComparison(SqlSearchCondition searchCondition, SqlUpdateClause updateClause, SqlTable inQueryTable, DataOptions dataOptions)

Parameters

searchCondition SqlSearchCondition
updateClause SqlUpdateClause
inQueryTable SqlTable
dataOptions DataOptions

BasicCorrectUpdate(SqlUpdateStatement, DataOptions, bool)

protected virtual SqlUpdateStatement BasicCorrectUpdate(SqlUpdateStatement statement, DataOptions dataOptions, bool wrapForOutput)

Parameters

statement SqlUpdateStatement
dataOptions DataOptions
wrapForOutput bool

Returns

SqlUpdateStatement

CloneTable(SqlTable, out Dictionary<IQueryElement, IQueryElement>)

protected static SqlTable CloneTable(SqlTable tableToClone, out Dictionary<IQueryElement, IQueryElement> replaceTree)

Parameters

tableToClone SqlTable
replaceTree Dictionary<IQueryElement, IQueryElement>

Returns

SqlTable

ConvertSkipTake(NullabilityContext, MappingSchema, DataOptions, SelectQuery, OptimizationContext, out ISqlExpression?, out ISqlExpression?)

Corrects skip/take for specific DataProvider

public virtual void ConvertSkipTake(NullabilityContext nullability, MappingSchema mappingSchema, DataOptions dataOptions, SelectQuery selectQuery, OptimizationContext optimizationContext, out ISqlExpression? takeExpr, out ISqlExpression? skipExpr)

Parameters

nullability NullabilityContext
mappingSchema MappingSchema
dataOptions DataOptions
selectQuery SelectQuery
optimizationContext OptimizationContext
takeExpr ISqlExpression
skipExpr ISqlExpression

CorrectMultiTableQueries(SqlStatement)

protected SqlStatement CorrectMultiTableQueries(SqlStatement statement)

Parameters

statement SqlStatement

Returns

SqlStatement

CorrectOutputTables(SqlStatement)

protected virtual void CorrectOutputTables(SqlStatement statement)

Parameters

statement SqlStatement

CorrectSetters(List<SqlSetExpression>, SelectQuery)

protected void CorrectSetters(List<SqlSetExpression> setters, SelectQuery query)

Parameters

setters List<SqlSetExpression>
query SelectQuery

CorrectUnionOrderBy(SqlStatement)

protected virtual SqlStatement CorrectUnionOrderBy(SqlStatement statement)

Parameters

statement SqlStatement

Returns

SqlStatement

CorrectUpdateSetters(SqlUpdateStatement)

protected void CorrectUpdateSetters(SqlUpdateStatement updateStatement)

Parameters

updateStatement SqlUpdateStatement

CorrectUpdateTable(SqlUpdateStatement, bool, DataOptions, MappingSchema)

Corrects situation when update table is located in JOIN clause. Usually it is generated by associations.

protected SqlUpdateStatement CorrectUpdateTable(SqlUpdateStatement statement, bool leaveUpdateTableInQuery, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

statement SqlUpdateStatement

Statement to examine.

leaveUpdateTableInQuery bool
dataOptions DataOptions
mappingSchema MappingSchema

Returns

SqlUpdateStatement

Corrected statement.

CreateConvertVisitor(bool)

public virtual SqlExpressionConvertVisitor CreateConvertVisitor(bool allowModify)

Parameters

allowModify bool

Returns

SqlExpressionConvertVisitor

CreateOptimizerVisitor(bool)

public virtual SqlExpressionOptimizerVisitor CreateOptimizerVisitor(bool allowModify)

Parameters

allowModify bool

Returns

SqlExpressionOptimizerVisitor

CreateSqlExpressionFactory(MappingSchema, DataOptions)

public virtual ISqlExpressionFactory CreateSqlExpressionFactory(MappingSchema mappingSchema, DataOptions dataOptions)

Parameters

mappingSchema MappingSchema
dataOptions DataOptions

Returns

ISqlExpressionFactory

DetachUpdateTableFromUpdateQuery(SqlUpdateStatement, DataOptions, bool, bool, out SqlTableSource)

protected static SqlUpdateStatement DetachUpdateTableFromUpdateQuery(SqlUpdateStatement updateStatement, DataOptions dataOptions, bool moveToJoin, bool addNewSource, out SqlTableSource newSource)

Parameters

updateStatement SqlUpdateStatement
dataOptions DataOptions
moveToJoin bool
addNewSource bool
newSource SqlTableSource

Returns

SqlUpdateStatement

Finalize(MappingSchema, SqlStatement, DataOptions)

Finalizes query.

public virtual SqlStatement Finalize(MappingSchema mappingSchema, SqlStatement statement, DataOptions dataOptions)

Parameters

mappingSchema MappingSchema
statement SqlStatement
dataOptions DataOptions

Returns

SqlStatement

Query which is ready for optimization.

FinalizeCte(SqlStatement)

protected void FinalizeCte(SqlStatement statement)

Parameters

statement SqlStatement

FinalizeInsert(SqlStatement)

protected virtual SqlStatement FinalizeInsert(SqlStatement statement)

Parameters

statement SqlStatement

Returns

SqlStatement

FinalizeInsertOrUpdate(SqlStatement, DataOptions, MappingSchema)

protected virtual SqlStatement FinalizeInsertOrUpdate(SqlStatement statement, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

statement SqlStatement
dataOptions DataOptions
mappingSchema MappingSchema

Returns

SqlStatement

FinalizeSelect(SqlStatement)

protected virtual SqlStatement FinalizeSelect(SqlStatement statement)

Parameters

statement SqlStatement

Returns

SqlStatement

FinalizeStatement(SqlStatement, EvaluationContext, DataOptions, MappingSchema)

public virtual SqlStatement FinalizeStatement(SqlStatement statement, EvaluationContext context, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

statement SqlStatement
context EvaluationContext
dataOptions DataOptions
mappingSchema MappingSchema

Returns

SqlStatement

FinalizeUpdate(SqlStatement, DataOptions, MappingSchema)

protected virtual SqlStatement FinalizeUpdate(SqlStatement statement, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

statement SqlStatement
dataOptions DataOptions
mappingSchema MappingSchema

Returns

SqlStatement

FixEmptySelect(SqlStatement)

protected virtual void FixEmptySelect(SqlStatement statement)

Parameters

statement SqlStatement

FixSetOperationValues(MappingSchema, SqlStatement)

protected virtual SqlStatement FixSetOperationValues(MappingSchema mappingSchema, SqlStatement statement)

Parameters

mappingSchema MappingSchema
statement SqlStatement

Returns

SqlStatement

GetAlternativeDelete(SqlDeleteStatement)

protected SqlDeleteStatement GetAlternativeDelete(SqlDeleteStatement deleteStatement)

Parameters

deleteStatement SqlDeleteStatement

Returns

SqlDeleteStatement

GetAlternativeUpdate(SqlUpdateStatement, DataOptions, MappingSchema)

protected SqlUpdateStatement GetAlternativeUpdate(SqlUpdateStatement updateStatement, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

updateStatement SqlUpdateStatement
dataOptions DataOptions
mappingSchema MappingSchema

Returns

SqlUpdateStatement

GetAlternativeUpdatePostgreSqlite(SqlUpdateStatement, DataOptions, MappingSchema)

protected SqlStatement GetAlternativeUpdatePostgreSqlite(SqlUpdateStatement statement, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

statement SqlUpdateStatement
dataOptions DataOptions
mappingSchema MappingSchema

Returns

SqlStatement

HasParameters(ISqlExpression)

protected static bool HasParameters(ISqlExpression expr)

Parameters

expr ISqlExpression

Returns

bool

IsCompatibleForUpdate(SelectQuery, SqlTable)

protected static bool IsCompatibleForUpdate(SelectQuery query, SqlTable updateTable)

Parameters

query SelectQuery
updateTable SqlTable

Returns

bool

IsParameterDependedElement(NullabilityContext, IQueryElement, DataOptions, MappingSchema)

public virtual bool IsParameterDependedElement(NullabilityContext nullability, IQueryElement element, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

nullability NullabilityContext
element IQueryElement
dataOptions DataOptions
mappingSchema MappingSchema

Returns

bool

IsParameterDependedQuery(SelectQuery)

public virtual bool IsParameterDependedQuery(SelectQuery query)

Parameters

query SelectQuery

Returns

bool

IsParameterDependent(NullabilityContext, MappingSchema, SqlStatement, DataOptions)

Examine query for parameter dependency.

public bool IsParameterDependent(NullabilityContext nullability, MappingSchema mappingSchema, SqlStatement statement, DataOptions dataOptions)

Parameters

nullability NullabilityContext
mappingSchema MappingSchema
statement SqlStatement
dataOptions DataOptions

Returns

bool

NeedsEnvelopingForUpdate(SelectQuery)

protected bool NeedsEnvelopingForUpdate(SelectQuery query)

Parameters

query SelectQuery

Returns

bool

OptimizeQueries(IQueryElement, IQueryElement, DataOptions, MappingSchema, EvaluationContext)

protected IQueryElement OptimizeQueries(IQueryElement startFrom, IQueryElement root, DataOptions dataOptions, MappingSchema mappingSchema, EvaluationContext evaluationContext)

Parameters

startFrom IQueryElement
root IQueryElement
dataOptions DataOptions
mappingSchema MappingSchema
evaluationContext EvaluationContext

Returns

IQueryElement

RemapCloned<TElement>(TElement, Dictionary<IQueryElement, IQueryElement>?, Dictionary<IQueryElement, IQueryElement>?, bool)

protected static TElement RemapCloned<TElement>(TElement element, Dictionary<IQueryElement, IQueryElement>? mainTree, Dictionary<IQueryElement, IQueryElement>? innerTree = null, bool insideColumns = true) where TElement : class, IQueryElement

Parameters

element TElement
mainTree Dictionary<IQueryElement, IQueryElement>
innerTree Dictionary<IQueryElement, IQueryElement>
insideColumns bool

Returns

TElement

Type Parameters

TElement

RemoveUpdateTableIfPossible(SelectQuery, SqlTable, out SqlTableSource?)

protected bool RemoveUpdateTableIfPossible(SelectQuery query, SqlTable table, out SqlTableSource? source)

Parameters

query SelectQuery
table SqlTable
source SqlTableSource

Returns

bool

ReplaceTakeSkipWithRowNumber<TContext>(TContext, SqlStatement, MappingSchema, Func<TContext, SelectQuery, bool>, bool)

Replaces pagination by Window function ROW_NUMBER().

protected SqlStatement ReplaceTakeSkipWithRowNumber<TContext>(TContext context, SqlStatement statement, MappingSchema mappingSchema, Func<TContext, SelectQuery, bool> predicate, bool supportsEmptyOrderBy)

Parameters

context TContext

predicate context object.

statement SqlStatement

Statement which may contain take/skip modifiers.

mappingSchema MappingSchema
predicate Func<TContext, SelectQuery, bool>

Indicates when the transformation is needed

supportsEmptyOrderBy bool

Indicates that database supports OVER () syntax.

Returns

SqlStatement

The same statement or modified statement when transformation has been performed.

Type Parameters

TContext

SeparateDistinctFromPagination(SqlStatement, Func<SelectQuery, bool>)

Moves Distinct query into another subquery. Useful when preserving ordering is required, because some providers do not support DISTINCT ORDER BY.

-- before
SELECT DISTINCT TAKE 10 c1, c2
FROM A
ORDER BY c1
-- after
SELECT TAKE 10 B.c1, B.c2
FROM
  (
    SELECT DISTINCT c1, c2
    FROM A
  ) B
ORDER BY B.c1
protected SqlStatement SeparateDistinctFromPagination(SqlStatement statement, Func<SelectQuery, bool> queryFilter)

Parameters

statement SqlStatement

Statement which may contain take/skip and Distinct modifiers.

queryFilter Func<SelectQuery, bool>

Query filter predicate to determine if query needs processing.

Returns

SqlStatement

The same statement or modified statement when transformation has been performed.

TransformStatement(SqlStatement, DataOptions, MappingSchema)

Used for correcting statement and should return new statement if changes were made.

public virtual SqlStatement TransformStatement(SqlStatement statement, DataOptions dataOptions, MappingSchema mappingSchema)

Parameters

statement SqlStatement
dataOptions DataOptions
mappingSchema MappingSchema

Returns

SqlStatement