using System; using System.Collections.Generic; using System.Data; using System.Diagnostics.CodeAnalysis; using System.Text.RegularExpressions; using NPoco; using Umbraco.Cms.Core.Persistence; using Umbraco.Cms.Infrastructure.Persistence.DatabaseAnnotations; using Umbraco.Cms.Infrastructure.Persistence.DatabaseModelDefinitions; using Umbraco.Cms.Infrastructure.Persistence.Querying; namespace Umbraco.Cms.Infrastructure.Persistence.SqlSyntax { /// /// Defines an SqlSyntaxProvider /// public interface ISqlSyntaxProvider { string ProviderName { get; } string EscapeString(string val); string GetWildcardPlaceholder(); string GetStringColumnEqualComparison(string column, int paramIndex, TextColumnType columnType); string GetStringColumnWildcardComparison(string column, int paramIndex, TextColumnType columnType); string GetConcat(params string[] args); string GetQuotedTableName(string? tableName); string GetQuotedColumnName(string? columnName); string GetQuotedName(string? name); bool DoesTableExist(IDatabase db, string tableName); string GetIndexType(IndexTypes indexTypes); string GetSpecialDbType(SpecialDbType dbType); string CreateTable { get; } string DropTable { get; } string AddColumn { get; } string DropColumn { get; } string AlterColumn { get; } string RenameColumn { get; } string RenameTable { get; } string CreateSchema { get; } string AlterSchema { get; } string DropSchema { get; } string CreateIndex { get; } string DropIndex { get; } string InsertData { get; } string UpdateData { get; } string DeleteData { get; } string TruncateTable { get; } string CreateConstraint { get; } string DeleteConstraint { get; } string DeleteDefaultConstraint { get; } string FormatDateTime(DateTime date, bool includeTime = true); string Format(TableDefinition table); string Format(IEnumerable columns); List Format(IEnumerable indexes); List Format(IEnumerable foreignKeys); string FormatPrimaryKey(TableDefinition table); string GetQuotedValue(string value); string Format(ColumnDefinition column); string Format(ColumnDefinition column, string tableName, out IEnumerable sqls); string Format(IndexDefinition index); string Format(ForeignKeyDefinition foreignKey); string FormatColumnRename(string? tableName, string? oldName, string? newName); string FormatTableRename(string? oldName, string? newName); /// /// Gets a regex matching aliased fields. /// /// /// Matches "(table.column) AS (alias)" where table, column and alias are properly escaped. /// Regex AliasRegex { get; } Sql SelectTop(Sql sql, int top); bool SupportsClustered(); bool SupportsIdentityInsert(); string ConvertIntegerToOrderableString { get; } string ConvertDateToOrderableString { get; } string ConvertDecimalToOrderableString { get; } /// /// Returns the default isolation level for the database /// IsolationLevel DefaultIsolationLevel { get; } string DbProvider { get; } IEnumerable GetTablesInSchema(IDatabase db); IEnumerable GetColumnsInSchema(IDatabase db); /// /// Returns all constraints defined in the database (Primary keys, foreign keys, unique constraints...) (does not include indexes) /// /// /// /// A Tuple containing: TableName, ConstraintName /// IEnumerable> GetConstraintsPerTable(IDatabase db); /// /// Returns all constraints defined in the database (Primary keys, foreign keys, unique constraints...) (does not include indexes) /// /// /// /// A Tuple containing: TableName, ColumnName, ConstraintName /// IEnumerable> GetConstraintsPerColumn(IDatabase db); /// /// Returns all defined Indexes in the database excluding primary keys /// /// /// /// A Tuple containing: TableName, IndexName, ColumnName, IsUnique /// IEnumerable> GetDefinedIndexes(IDatabase db); /// /// Tries to gets the name of the default constraint on a column. /// /// The database. /// The table name. /// The column name. /// The constraint name. /// A value indicating whether a default constraint was found. /// /// Some database engines (e.g. SqlCe) may not have names for default constraints, /// in which case the function may return true, but is /// unspecified. /// bool TryGetDefaultConstraint(IDatabase db, string? tableName, string columnName, [MaybeNullWhen(false)] out string constraintName); void ReadLock(IDatabase db, TimeSpan timeout, int lockId); void WriteLock(IDatabase db, TimeSpan timeout, int lockId); void ReadLock(IDatabase db, params int[] lockIds); void WriteLock(IDatabase db, params int[] lockIds); } }