# Conflicts: # Directory.Build.props # build/azure-pipelines.yml # src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderAuthExtensions.cs # src/Umbraco.Cms.Api.Common/OpenApi/SwaggerRouteTemplatePipelineFilter.cs # src/Umbraco.Cms.Api.Common/Security/Paths.cs # src/Umbraco.Cms.Api.Delivery/Controllers/Security/MemberController.cs # src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs # src/Umbraco.Cms.Api.Delivery/Handlers/InitializeMemberApplicationNotificationHandler.cs # src/Umbraco.Cms.Api.Delivery/Handlers/RevokeMemberAuthenticationTokensNotificationHandler.cs # src/Umbraco.Cms.Api.Delivery/Security/MemberApplicationManager.cs # src/Umbraco.Cms.Api.Delivery/Services/RequestMemberAccessService.cs # src/Umbraco.Core/Constants-OAuthClaims.cs # src/Umbraco.Core/Constants-OAuthClientIds.cs # src/Umbraco.Core/DeliveryApi/IApiContentQueryProvider.cs # src/Umbraco.Core/DeliveryApi/IApiContentQueryService.cs # src/Umbraco.Core/DeliveryApi/IRequestMemberAccessService.cs # src/Umbraco.Core/DeliveryApi/NoopRequestMemberAccessService.cs # src/Umbraco.Core/Models/DeliveryApi/ProtectedAccess.cs # src/Umbraco.Core/Services/ITagService.cs # src/Umbraco.Core/Services/UserService.cs # src/Umbraco.Infrastructure/Security/IMemberApplicationManager.cs # src/Umbraco.Infrastructure/Security/OpenIdDictApplicationManagerBase.cs # src/Umbraco.Web.BackOffice/Controllers/MediaController.cs # tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/HelpPanel/systemInformation.spec.ts # version.json
85 lines
2.7 KiB
C#
85 lines
2.7 KiB
C#
using NPoco;
|
|
using Umbraco.Cms.Core.Persistence;
|
|
using Umbraco.Cms.Infrastructure.Persistence.Dtos;
|
|
using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax;
|
|
using Umbraco.Cms.Infrastructure.Runtime;
|
|
using Umbraco.Extensions;
|
|
|
|
namespace Umbraco.Cms.Infrastructure.Persistence;
|
|
|
|
internal static class UmbracoDatabaseExtensions
|
|
{
|
|
public static UmbracoDatabase AsUmbracoDatabase(this IUmbracoDatabase database)
|
|
{
|
|
if (database is not UmbracoDatabase asDatabase)
|
|
{
|
|
throw new Exception("oops: database.");
|
|
}
|
|
|
|
return asDatabase;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets a dictionary of key/values directly from the database, no scope, nothing.
|
|
/// </summary>
|
|
/// <remarks>Used by <see cref="RuntimeState" /> to determine the runtime state.</remarks>
|
|
public static IReadOnlyDictionary<string, string?>? GetFromKeyValueTable(
|
|
this IUmbracoDatabase? database,
|
|
string keyPrefix)
|
|
{
|
|
if (database is null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
// create the wildcard where clause
|
|
ISqlSyntaxProvider sqlSyntax = database.SqlContext.SqlSyntax;
|
|
var whereParam = sqlSyntax.GetStringColumnWildcardComparison(
|
|
sqlSyntax.GetQuotedColumnName("key"),
|
|
0,
|
|
TextColumnType.NVarchar);
|
|
|
|
Sql<ISqlContext>? sql = database.SqlContext.Sql()
|
|
.Select<KeyValueDto>()
|
|
.From<KeyValueDto>()
|
|
.Where(whereParam, keyPrefix + sqlSyntax.GetWildcardPlaceholder());
|
|
|
|
return database.Fetch<KeyValueDto>(sql)
|
|
.ToDictionary(x => x.Key, x => x.Value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns true if the database contains the specified table
|
|
/// </summary>
|
|
/// <param name="database"></param>
|
|
/// <param name="tableName"></param>
|
|
/// <returns></returns>
|
|
public static bool HasTable(this IUmbracoDatabase database, string tableName)
|
|
{
|
|
try
|
|
{
|
|
return database.SqlContext.SqlSyntax.GetTablesInSchema(database)
|
|
.Any(table => table.InvariantEquals(tableName));
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false; // will occur if the database cannot connect
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns true if the database contains no tables
|
|
/// </summary>
|
|
/// <param name="database"></param>
|
|
/// <returns></returns>
|
|
public static bool IsDatabaseEmpty(this IUmbracoDatabase database)
|
|
=> database.SqlContext.SqlSyntax.GetTablesInSchema(database).Any() == false;
|
|
|
|
public static long Count(this IUmbracoDatabase database, Sql sql)
|
|
{
|
|
var query = new Sql().Select("COUNT(*)").From().Append("(").Append(sql).Append(")");
|
|
|
|
return database.ExecuteScalar<long>(query);
|
|
}
|
|
}
|