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
sqlProviderFlagsSqlProviderFlags
Properties
RequiresCastingParametersForSetOperations
public virtual bool RequiresCastingParametersForSetOperations { get; }
Property Value
SqlProviderFlags
protected SqlProviderFlags SqlProviderFlags { get; }
Property Value
Methods
ApplyUpdateTableComparison(SelectQuery, SqlUpdateClause, SqlTable, DataOptions)
protected static void ApplyUpdateTableComparison(SelectQuery updateQuery, SqlUpdateClause updateClause, SqlTable inQueryTable, DataOptions dataOptions)
Parameters
updateQuerySelectQueryupdateClauseSqlUpdateClauseinQueryTableSqlTabledataOptionsDataOptions
ApplyUpdateTableComparison(SqlSearchCondition, SqlUpdateClause, SqlTable, DataOptions)
protected static void ApplyUpdateTableComparison(SqlSearchCondition searchCondition, SqlUpdateClause updateClause, SqlTable inQueryTable, DataOptions dataOptions)
Parameters
searchConditionSqlSearchConditionupdateClauseSqlUpdateClauseinQueryTableSqlTabledataOptionsDataOptions
BasicCorrectUpdate(SqlUpdateStatement, DataOptions, bool)
protected virtual SqlUpdateStatement BasicCorrectUpdate(SqlUpdateStatement statement, DataOptions dataOptions, bool wrapForOutput)
Parameters
statementSqlUpdateStatementdataOptionsDataOptionswrapForOutputbool
Returns
CloneTable(SqlTable, out Dictionary<IQueryElement, IQueryElement>)
protected static SqlTable CloneTable(SqlTable tableToClone, out Dictionary<IQueryElement, IQueryElement> replaceTree)
Parameters
tableToCloneSqlTablereplaceTreeDictionary<IQueryElement, IQueryElement>
Returns
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
nullabilityNullabilityContextmappingSchemaMappingSchemadataOptionsDataOptionsselectQuerySelectQueryoptimizationContextOptimizationContexttakeExprISqlExpressionskipExprISqlExpression
CorrectMultiTableQueries(SqlStatement)
protected SqlStatement CorrectMultiTableQueries(SqlStatement statement)
Parameters
statementSqlStatement
Returns
CorrectOutputTables(SqlStatement)
protected virtual void CorrectOutputTables(SqlStatement statement)
Parameters
statementSqlStatement
CorrectSetters(List<SqlSetExpression>, SelectQuery)
protected void CorrectSetters(List<SqlSetExpression> setters, SelectQuery query)
Parameters
settersList<SqlSetExpression>querySelectQuery
CorrectUnionOrderBy(SqlStatement)
protected virtual SqlStatement CorrectUnionOrderBy(SqlStatement statement)
Parameters
statementSqlStatement
Returns
CorrectUpdateSetters(SqlUpdateStatement)
protected void CorrectUpdateSetters(SqlUpdateStatement updateStatement)
Parameters
updateStatementSqlUpdateStatement
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
statementSqlUpdateStatementStatement to examine.
leaveUpdateTableInQuerybooldataOptionsDataOptionsmappingSchemaMappingSchema
Returns
- SqlUpdateStatement
Corrected statement.
CreateConvertVisitor(bool)
public virtual SqlExpressionConvertVisitor CreateConvertVisitor(bool allowModify)
Parameters
allowModifybool
Returns
CreateOptimizerVisitor(bool)
public virtual SqlExpressionOptimizerVisitor CreateOptimizerVisitor(bool allowModify)
Parameters
allowModifybool
Returns
CreateSqlExpressionFactory(MappingSchema, DataOptions)
public virtual ISqlExpressionFactory CreateSqlExpressionFactory(MappingSchema mappingSchema, DataOptions dataOptions)
Parameters
mappingSchemaMappingSchemadataOptionsDataOptions
Returns
DetachUpdateTableFromUpdateQuery(SqlUpdateStatement, DataOptions, bool, bool, out SqlTableSource)
protected static SqlUpdateStatement DetachUpdateTableFromUpdateQuery(SqlUpdateStatement updateStatement, DataOptions dataOptions, bool moveToJoin, bool addNewSource, out SqlTableSource newSource)
Parameters
updateStatementSqlUpdateStatementdataOptionsDataOptionsmoveToJoinbooladdNewSourceboolnewSourceSqlTableSource
Returns
Finalize(MappingSchema, SqlStatement, DataOptions)
Finalizes query.
public virtual SqlStatement Finalize(MappingSchema mappingSchema, SqlStatement statement, DataOptions dataOptions)
Parameters
mappingSchemaMappingSchemastatementSqlStatementdataOptionsDataOptions
Returns
- SqlStatement
Query which is ready for optimization.
FinalizeCte(SqlStatement)
protected void FinalizeCte(SqlStatement statement)
Parameters
statementSqlStatement
FinalizeInsert(SqlStatement)
protected virtual SqlStatement FinalizeInsert(SqlStatement statement)
Parameters
statementSqlStatement
Returns
FinalizeInsertOrUpdate(SqlStatement, DataOptions, MappingSchema)
protected virtual SqlStatement FinalizeInsertOrUpdate(SqlStatement statement, DataOptions dataOptions, MappingSchema mappingSchema)
Parameters
statementSqlStatementdataOptionsDataOptionsmappingSchemaMappingSchema
Returns
FinalizeSelect(SqlStatement)
protected virtual SqlStatement FinalizeSelect(SqlStatement statement)
Parameters
statementSqlStatement
Returns
FinalizeStatement(SqlStatement, EvaluationContext, DataOptions, MappingSchema)
public virtual SqlStatement FinalizeStatement(SqlStatement statement, EvaluationContext context, DataOptions dataOptions, MappingSchema mappingSchema)
Parameters
statementSqlStatementcontextEvaluationContextdataOptionsDataOptionsmappingSchemaMappingSchema
Returns
FinalizeUpdate(SqlStatement, DataOptions, MappingSchema)
protected virtual SqlStatement FinalizeUpdate(SqlStatement statement, DataOptions dataOptions, MappingSchema mappingSchema)
Parameters
statementSqlStatementdataOptionsDataOptionsmappingSchemaMappingSchema
Returns
FixEmptySelect(SqlStatement)
protected virtual void FixEmptySelect(SqlStatement statement)
Parameters
statementSqlStatement
FixSetOperationValues(MappingSchema, SqlStatement)
protected virtual SqlStatement FixSetOperationValues(MappingSchema mappingSchema, SqlStatement statement)
Parameters
mappingSchemaMappingSchemastatementSqlStatement
Returns
GetAlternativeDelete(SqlDeleteStatement)
protected SqlDeleteStatement GetAlternativeDelete(SqlDeleteStatement deleteStatement)
Parameters
deleteStatementSqlDeleteStatement
Returns
GetAlternativeUpdate(SqlUpdateStatement, DataOptions, MappingSchema)
protected SqlUpdateStatement GetAlternativeUpdate(SqlUpdateStatement updateStatement, DataOptions dataOptions, MappingSchema mappingSchema)
Parameters
updateStatementSqlUpdateStatementdataOptionsDataOptionsmappingSchemaMappingSchema
Returns
GetAlternativeUpdatePostgreSqlite(SqlUpdateStatement, DataOptions, MappingSchema)
protected SqlStatement GetAlternativeUpdatePostgreSqlite(SqlUpdateStatement statement, DataOptions dataOptions, MappingSchema mappingSchema)
Parameters
statementSqlUpdateStatementdataOptionsDataOptionsmappingSchemaMappingSchema
Returns
HasParameters(ISqlExpression)
protected static bool HasParameters(ISqlExpression expr)
Parameters
exprISqlExpression
Returns
IsCompatibleForUpdate(SelectQuery, SqlTable)
protected static bool IsCompatibleForUpdate(SelectQuery query, SqlTable updateTable)
Parameters
querySelectQueryupdateTableSqlTable
Returns
IsParameterDependedElement(NullabilityContext, IQueryElement, DataOptions, MappingSchema)
public virtual bool IsParameterDependedElement(NullabilityContext nullability, IQueryElement element, DataOptions dataOptions, MappingSchema mappingSchema)
Parameters
nullabilityNullabilityContextelementIQueryElementdataOptionsDataOptionsmappingSchemaMappingSchema
Returns
IsParameterDependedQuery(SelectQuery)
public virtual bool IsParameterDependedQuery(SelectQuery query)
Parameters
querySelectQuery
Returns
IsParameterDependent(NullabilityContext, MappingSchema, SqlStatement, DataOptions)
Examine query for parameter dependency.
public bool IsParameterDependent(NullabilityContext nullability, MappingSchema mappingSchema, SqlStatement statement, DataOptions dataOptions)
Parameters
nullabilityNullabilityContextmappingSchemaMappingSchemastatementSqlStatementdataOptionsDataOptions
Returns
NeedsEnvelopingForUpdate(SelectQuery)
protected bool NeedsEnvelopingForUpdate(SelectQuery query)
Parameters
querySelectQuery
Returns
OptimizeQueries(IQueryElement, IQueryElement, DataOptions, MappingSchema, EvaluationContext)
protected IQueryElement OptimizeQueries(IQueryElement startFrom, IQueryElement root, DataOptions dataOptions, MappingSchema mappingSchema, EvaluationContext evaluationContext)
Parameters
startFromIQueryElementrootIQueryElementdataOptionsDataOptionsmappingSchemaMappingSchemaevaluationContextEvaluationContext
Returns
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
elementTElementmainTreeDictionary<IQueryElement, IQueryElement>innerTreeDictionary<IQueryElement, IQueryElement>insideColumnsbool
Returns
- TElement
Type Parameters
TElement
RemoveUpdateTableIfPossible(SelectQuery, SqlTable, out SqlTableSource?)
protected bool RemoveUpdateTableIfPossible(SelectQuery query, SqlTable table, out SqlTableSource? source)
Parameters
querySelectQuerytableSqlTablesourceSqlTableSource
Returns
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
contextTContextpredicatecontext object.statementSqlStatementStatement which may contain take/skip modifiers.
mappingSchemaMappingSchemapredicateFunc<TContext, SelectQuery, bool>Indicates when the transformation is needed
supportsEmptyOrderByboolIndicates that database supports OVER () syntax.
Returns
- SqlStatement
The same
statementor 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
statementSqlStatementStatement which may contain take/skip and Distinct modifiers.
queryFilterFunc<SelectQuery, bool>Query filter predicate to determine if query needs processing.
Returns
- SqlStatement
The same
statementor 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
statementSqlStatementdataOptionsDataOptionsmappingSchemaMappingSchema