diff --git a/src/Umbraco.Compat7/Core/DatabaseContext.cs b/src/Umbraco.Compat7/Core/DatabaseContext.cs
index 9c02cbac1d..96cba04a53 100644
--- a/src/Umbraco.Compat7/Core/DatabaseContext.cs
+++ b/src/Umbraco.Compat7/Core/DatabaseContext.cs
@@ -27,22 +27,22 @@ namespace Umbraco.Core
///
/// Gets the database Sql syntax.
///
- public ISqlSyntaxProvider SqlSyntax => _databaseFactory.SqlSyntax;
+ public ISqlSyntaxProvider SqlSyntax => _databaseFactory.SqlContext.SqlSyntax;
///
/// Creates a Sql statement.
///
- public Sql Sql() => _databaseFactory.Sql();
+ public Sql Sql() => _databaseFactory.SqlContext.Sql();
///
/// Creates a Sql statement.
///
- public Sql Sql(string sql, params object[] args) => _databaseFactory.Sql(sql, args);
+ public Sql Sql(string sql, params object[] args) => _databaseFactory.SqlContext.Sql(sql, args);
///
/// Creates a Query expression.
///
- public IQuery Query() => _databaseFactory.Query();
+ public IQuery Query() => _databaseFactory.SqlContext.Query();
///
/// Gets an ambient database for doing CRUD operations against custom tables that resides in the Umbraco database.
diff --git a/src/Umbraco.Core/Composing/Current.cs b/src/Umbraco.Core/Composing/Current.cs
index dfbc81ee9d..31b3ed6831 100644
--- a/src/Umbraco.Core/Composing/Current.cs
+++ b/src/Umbraco.Core/Composing/Current.cs
@@ -144,8 +144,8 @@ namespace Umbraco.Core.Composing
public static IScopeProvider ScopeProvider
=> Container.GetInstance();
- public static IDatabaseContext DatabaseContext
- => Container.GetInstance();
+ public static ISqlContext SqlContext
+ => Container.GetInstance();
#endregion
}
diff --git a/src/Umbraco.Core/CoreRuntime.cs b/src/Umbraco.Core/CoreRuntime.cs
index 4d0a09f946..5e9827e856 100644
--- a/src/Umbraco.Core/CoreRuntime.cs
+++ b/src/Umbraco.Core/CoreRuntime.cs
@@ -217,7 +217,7 @@ namespace Umbraco.Core
// from the default connection string name, if possible, else will remain non-configured
// until properly configured (eg when installing)
container.RegisterSingleton();
- container.RegisterSingleton(f => f.GetInstance());
+ container.RegisterSingleton(f => f.GetInstance().SqlContext);
// register the scope provider
container.RegisterSingleton();
@@ -330,7 +330,7 @@ namespace Umbraco.Core
using (var database = databaseFactory.CreateDatabase()) // no scope - just the database
{
var codeVersionString = codeVersion.ToString();
- var sql = databaseFactory.Sql()
+ var sql = databaseFactory.SqlContext.Sql()
.Select()
.From()
.Where(x => x.Name.InvariantEquals(Constants.System.UmbracoMigrationName) && x.Version == codeVersionString);
diff --git a/src/Umbraco.Core/CoreRuntimeComponent.cs b/src/Umbraco.Core/CoreRuntimeComponent.cs
index 074f961f1e..ba87b49c50 100644
--- a/src/Umbraco.Core/CoreRuntimeComponent.cs
+++ b/src/Umbraco.Core/CoreRuntimeComponent.cs
@@ -95,7 +95,7 @@ namespace Umbraco.Core
=> new DatabaseServerMessenger(
factory.GetInstance(),
factory.GetInstance(),
- factory.GetInstance(),
+ factory.GetInstance(),
factory.GetInstance(),
factory.GetInstance(),
true, new DatabaseServerMessengerOptions()));
diff --git a/src/Umbraco.Core/DatabaseBuilder.cs b/src/Umbraco.Core/DatabaseBuilder.cs
index 0694e5c7eb..9f4c864b22 100644
--- a/src/Umbraco.Core/DatabaseBuilder.cs
+++ b/src/Umbraco.Core/DatabaseBuilder.cs
@@ -406,7 +406,7 @@ namespace Umbraco.Core
private DatabaseSchemaResult ValidateDatabaseSchema(IScope scope)
{
if (_databaseFactory.Configured == false)
- return new DatabaseSchemaResult(_databaseFactory.SqlSyntax);
+ return new DatabaseSchemaResult(_databaseFactory.SqlContext.SqlSyntax);
if (_databaseSchemaValidationResult != null)
return _databaseSchemaValidationResult;
diff --git a/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs b/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs
index 6201ab9244..80ffb82cc9 100644
--- a/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs
+++ b/src/Umbraco.Core/Persistence/DatabaseSchemaHelper.cs
@@ -23,7 +23,7 @@ namespace Umbraco.Core.Persistence
_baseDataCreation = new BaseDataCreation(database, logger);
}
- private ISqlSyntaxProvider SqlSyntax => _database.SqlSyntax;
+ private ISqlSyntaxProvider SqlSyntax => _database.SqlContext.SqlSyntax;
public bool TableExist(string tableName)
{
diff --git a/src/Umbraco.Core/Persistence/IDatabaseContext.cs b/src/Umbraco.Core/Persistence/IDatabaseContext.cs
deleted file mode 100644
index 9d1370d8f5..0000000000
--- a/src/Umbraco.Core/Persistence/IDatabaseContext.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using NPoco;
-using Umbraco.Core.Persistence.Querying;
-using Umbraco.Core.Persistence.SqlSyntax;
-
-namespace Umbraco.Core.Persistence
-{
- // the main implementation of IDatabaseContext is IUmbracoDatabaseFactory
- // it is registered as a singleton and can be injected
- //
- // then for convenience,
- // fixme - IScopeProvider exposes .DatabaseContext
- // fixme - IScope : IDatabaseContext
- // IUnitOfWorkProvider exposes .DatabaseContext
- // IScopeUnitOfWork : IDatabaseContext
- // IMigrationContext : IDatabaseContext
- // NPocoRepositoryBase : IDatabaseContext
-
- public interface IDatabaseContext
- {
- ///
- /// Gets the database Sql syntax.
- ///
- ISqlSyntaxProvider SqlSyntax { get; }
-
- ///
- /// Creates a new Sql expression.
- ///
- Sql Sql();
-
- ///
- /// Creates a new Sql expression.
- ///
- Sql Sql(string sql, params object[] args);
-
- ///
- /// Creates a new query expression.
- ///
- IQuery Query();
- }
-}
diff --git a/src/Umbraco.Core/Persistence/ISqlContext.cs b/src/Umbraco.Core/Persistence/ISqlContext.cs
new file mode 100644
index 0000000000..45b3da40b2
--- /dev/null
+++ b/src/Umbraco.Core/Persistence/ISqlContext.cs
@@ -0,0 +1,53 @@
+using NPoco;
+using Umbraco.Core.Persistence.Mappers;
+using Umbraco.Core.Persistence.Querying;
+using Umbraco.Core.Persistence.SqlSyntax;
+
+namespace Umbraco.Core.Persistence
+{
+ ///
+ /// Specifies the Sql context.
+ ///
+ public interface ISqlContext
+ {
+ ///
+ /// Gets the Sql syntax provider.
+ ///
+ ISqlSyntaxProvider SqlSyntax { get; }
+
+ ///
+ /// Gets the database type.
+ ///
+ DatabaseType DatabaseType { get; }
+
+ ///
+ /// Creates a new Sql expression.
+ ///
+ Sql Sql();
+
+ ///
+ /// Creates a new Sql expression.
+ ///
+ Sql Sql(string sql, params object[] args);
+
+ ///
+ /// Creates a new query expression.
+ ///
+ IQuery Query();
+
+ ///
+ /// Gets the Sql templates.
+ ///
+ SqlTemplates Templates { get; }
+
+ ///
+ /// Gets the Poco data factory.
+ ///
+ IPocoDataFactory PocoDataFactory { get; }
+
+ ///
+ /// Gets the mappers.
+ ///
+ IMapperCollection Mappers { get; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/IUmbracoDatabase.cs b/src/Umbraco.Core/Persistence/IUmbracoDatabase.cs
index 7603c43541..feef6a23bd 100644
--- a/src/Umbraco.Core/Persistence/IUmbracoDatabase.cs
+++ b/src/Umbraco.Core/Persistence/IUmbracoDatabase.cs
@@ -1,15 +1,9 @@
using NPoco;
-using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence
{
public interface IUmbracoDatabase : IDatabase
{
- ///
- /// Gets the database Sql syntax.
- ///
- ISqlSyntaxProvider SqlSyntax { get; } // fixme - kill
-
///
/// Gets the Sql context.
///
diff --git a/src/Umbraco.Core/Persistence/IUmbracoDatabaseFactory.cs b/src/Umbraco.Core/Persistence/IUmbracoDatabaseFactory.cs
index 6a8b0121f3..c02d956a61 100644
--- a/src/Umbraco.Core/Persistence/IUmbracoDatabaseFactory.cs
+++ b/src/Umbraco.Core/Persistence/IUmbracoDatabaseFactory.cs
@@ -5,7 +5,7 @@ namespace Umbraco.Core.Persistence
///
/// Creates and manages the "ambient" database.
///
- public interface IUmbracoDatabaseFactory : IDatabaseContext, IDisposable
+ public interface IUmbracoDatabaseFactory : IDisposable
{
///
/// Creates a new database.
@@ -27,5 +27,10 @@ namespace Umbraco.Core.Persistence
/// Configures the database factory.
///
void Configure(string connectionString, string providerName);
+
+ ///
+ /// Gets the Sql context.
+ ///
+ ISqlContext SqlContext { get; }
}
}
diff --git a/src/Umbraco.Core/Persistence/Migrations/IMigrationContext.cs b/src/Umbraco.Core/Persistence/Migrations/IMigrationContext.cs
index ceb64f2e39..858eb3f1c7 100644
--- a/src/Umbraco.Core/Persistence/Migrations/IMigrationContext.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/IMigrationContext.cs
@@ -3,7 +3,7 @@ using Umbraco.Core.Logging;
namespace Umbraco.Core.Persistence.Migrations
{
- public interface IMigrationContext : IDatabaseContext
+ public interface IMigrationContext
{
IUmbracoDatabase Database { get; }
@@ -11,6 +11,8 @@ namespace Umbraco.Core.Persistence.Migrations
ILogger Logger { get; }
- ILocalMigration GetLocalMigration();
+ ILocalMigration GetLocalMigration();
+
+ ISqlContext SqlContext { get; }
}
}
diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs
index e5f476772c..000d80b957 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs
@@ -31,7 +31,7 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_schemaHelper = new DatabaseSchemaHelper(database, logger);
}
- private ISqlSyntaxProvider SqlSyntax => _database.SqlSyntax;
+ private ISqlSyntaxProvider SqlSyntax => _database.SqlContext.SqlSyntax;
#region All Ordered Tables
diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs b/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs
index 5135b4f3ac..b370cc0c00 100644
--- a/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs
@@ -15,7 +15,7 @@ namespace Umbraco.Core.Persistence.Migrations
{
public abstract class MigrationBase : IMigration
{
- public ISqlSyntaxProvider SqlSyntax => Context.SqlSyntax;
+ public ISqlSyntaxProvider SqlSyntax => Context.SqlContext.SqlSyntax;
public DatabaseType DatabaseType => Context.Database.DatabaseType;
@@ -52,9 +52,9 @@ namespace Umbraco.Core.Persistence.Migrations
public IUpdateBuilder Update => new UpdateBuilder(Context);
- protected Sql Sql() => Context.Sql();
+ protected Sql Sql() => Context.SqlContext.Sql();
- protected Sql Sql(string sql, params object[] args) => Context.Sql(sql, args);
+ protected Sql Sql(string sql, params object[] args) => Context.SqlContext.Sql(sql, args);
public IIfDatabaseBuilder IfDatabase(params DatabaseType[] supportedDatabaseTypes)
{
diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationContext.cs b/src/Umbraco.Core/Persistence/Migrations/MigrationContext.cs
index 762b0e78c6..ed4f5d533e 100644
--- a/src/Umbraco.Core/Persistence/Migrations/MigrationContext.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/MigrationContext.cs
@@ -1,10 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
-using NPoco;
using Umbraco.Core.Logging;
-using Umbraco.Core.Persistence.Querying;
-using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations
{
@@ -21,15 +18,7 @@ namespace Umbraco.Core.Persistence.Migrations
public IUmbracoDatabase Database { get; }
- public ISqlSyntaxProvider SqlSyntax => Database.SqlSyntax;
-
- public Sql Sql() => new Sql(Database.SqlContext);
-
- public Sql Sql(string sql, params object[] args) => new Sql(Database.SqlContext, sql, args);
-
- public IQuery Query() => new Query(Database.SqlContext);
-
- public DatabaseType DatabaseType => Database.DatabaseType;
+ public ISqlContext SqlContext => Database.SqlContext;
public ILogger Logger { get; }
diff --git a/src/Umbraco.Core/Persistence/Migrations/MigrationExpressionBase.cs b/src/Umbraco.Core/Persistence/Migrations/MigrationExpressionBase.cs
index 632486d0a3..1f195be126 100644
--- a/src/Umbraco.Core/Persistence/Migrations/MigrationExpressionBase.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/MigrationExpressionBase.cs
@@ -18,7 +18,7 @@ namespace Umbraco.Core.Persistence.Migrations
public virtual DatabaseType[] SupportedDatabaseTypes { get; }
- public ISqlSyntaxProvider SqlSyntax => _context.Database.SqlSyntax;
+ public ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax;
public virtual DatabaseType CurrentDatabaseType => _context.Database.DatabaseType;
diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/CreateBuilder.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/CreateBuilder.cs
index a719f79197..15f7ee43f2 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/CreateBuilder.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Create/CreateBuilder.cs
@@ -24,7 +24,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Create
_supportedDatabaseTypes = supportedDatabaseTypes;
}
- private ISqlSyntaxProvider SqlSyntax => _context.Database.SqlSyntax;
+ private ISqlSyntaxProvider SqlSyntax => _context.Database.SqlContext.SqlSyntax;
public void Table()
{
diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFourZero/EnsureContentTypeUniqueIdsAreConsistent.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFourZero/EnsureContentTypeUniqueIdsAreConsistent.cs
index eb0089aa5d..00e048cfb6 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFourZero/EnsureContentTypeUniqueIdsAreConsistent.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenFourZero/EnsureContentTypeUniqueIdsAreConsistent.cs
@@ -28,7 +28,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFourZer
Constants.ObjectTypes.MemberType
};
- var sql = Context.Sql()
+ var sql = Context.SqlContext.Sql()
.Select("umbracoNode.id,cmsContentType.alias,umbracoNode.nodeObjectType")
.From()
.InnerJoin()
diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs
index fa953e87e6..f20dbecd60 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/EnsureContentTemplatePermissions.cs
@@ -19,7 +19,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZe
Execute.Code(database =>
{
var userGroups = database.Fetch(
- Context.Sql().Select("*")
+ Context.SqlContext.Sql().Select("*")
.From()
.Where(x => x.Alias == "admin" || x.Alias == "editor"));
diff --git a/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs b/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs
index b9b9e6c28a..77b412ef2b 100644
--- a/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs
+++ b/src/Umbraco.Core/Persistence/NPocoDatabaseExtensions-Bulk.cs
@@ -233,7 +233,7 @@ namespace Umbraco.Core.Persistence
var tTransaction = GetTypedTransaction(command.Transaction);
var tableName = pocoData.TableInfo.TableName;
- var syntax = database.SqlSyntax as SqlServerSyntaxProvider;
+ var syntax = database.SqlContext.SqlSyntax as SqlServerSyntaxProvider;
if (syntax == null) throw new NotSupportedException("SqlSyntax must be SqlServerSyntaxProvider.");
using (var copy = new SqlBulkCopy(tConnection, SqlBulkCopyOptions.Default, tTransaction) { BulkCopyTimeout = 10000, DestinationTableName = tableName })
diff --git a/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs b/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs
index 0bad55721a..849fe8ca45 100644
--- a/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs
@@ -4,7 +4,6 @@ using System.Linq;
using LightInject;
using NPoco;
using Umbraco.Core.Cache;
-using Umbraco.Core.Composing;
using Umbraco.Core.Composing.CompositionRoots;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
@@ -18,8 +17,7 @@ namespace Umbraco.Core.Persistence.Repositories
{
public AuditRepository(IScopeUnitOfWork work, [Inject(RepositoryCompositionRoot.DisabledCache)] CacheHelper cache, ILogger logger)
: base(work, cache, logger)
- {
- }
+ { }
protected override void PersistNewItem(AuditItem entity)
{
@@ -68,7 +66,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override Sql GetBaseQuery(bool isCount)
{
- var sql = Sql();
+ var sql = SqlContext.Sql();
sql = isCount
? sql.SelectCount()
diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
index 6e7ca7cd27..89e865eece 100644
--- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
@@ -38,7 +38,7 @@ namespace Umbraco.Core.Persistence.Repositories
_tagRepository = tagRepository ?? throw new ArgumentNullException(nameof(tagRepository));
_cacheHelper = cacheHelper;
- _publishedQuery = work.Query().Where(x => x.Published); // fixme not used?
+ _publishedQuery = work.SqlContext.Query().Where(x => x.Published); // fixme not used?
_contentByGuidReadRepository = new ContentByGuidReadRepository(this, work, cacheHelper, logger);
EnsureUniqueNaming = settings.EnsureUniqueNaming;
@@ -113,7 +113,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override Sql GetBaseQuery(QueryType queryType)
{
- var sql = Sql();
+ var sql = SqlContext.Sql();
switch (queryType)
{
@@ -238,7 +238,7 @@ namespace Umbraco.Core.Persistence.Repositories
public override void DeleteVersion(Guid versionId)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.SelectAll()
.From()
.InnerJoin().On(left => left.VersionId, right => right.VersionId)
@@ -253,7 +253,7 @@ namespace Umbraco.Core.Persistence.Repositories
public override void DeleteVersions(int id, DateTime versionDate)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.SelectAll()
.From()
.InnerJoin().On(left => left.VersionId, right => right.VersionId)
@@ -290,13 +290,13 @@ namespace Umbraco.Core.Persistence.Repositories
//We need to clear out all access rules but we need to do this in a manual way since
// nothing in that table is joined to a content id
- var subQuery = Sql()
+ var subQuery = SqlContext.Sql()
.Select("umbracoAccessRule.accessId")
.From()
.InnerJoin()
.On(left => left.AccessId, right => right.Id)
.Where(dto => dto.NodeId == entity.Id);
- Database.Execute(SqlSyntax.GetDeleteSubquery("umbracoAccessRule", "accessId", subQuery));
+ Database.Execute(SqlContext.SqlSyntax.GetDeleteSubquery("umbracoAccessRule", "accessId", subQuery));
//now let the normal delete clauses take care of everything else
base.PersistDeletedItem(entity);
@@ -640,7 +640,7 @@ namespace Umbraco.Core.Persistence.Repositories
public int CountPublished(string contentTypeAlias = null)
{
- var sql = Sql();
+ var sql = SqlContext.Sql();
if (contentTypeAlias.IsNullOrWhiteSpace())
{
sql.SelectCount()
@@ -725,7 +725,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable GetPagedResultsByQuery(IQuery query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, bool orderBySystemField, IQuery filter = null, bool newest = true)
{
- var filterSql = Sql();
+ var filterSql = SqlContext.Sql();
if (newest)
filterSql.Append("AND (cmsDocument.newest = 1)");
@@ -745,20 +745,20 @@ namespace Umbraco.Core.Persistence.Repositories
{
// fail fast
if (content.Path.StartsWith("-1,-20,"))
- return false;
+ return false;
// succeed fast
if (content.ParentId == -1)
return content.HasPublishedVersion;
var ids = content.Path.Split(',').Skip(1).Select(int.Parse);
-
- var sql = Sql()
- .SelectCount(x => x.NodeId)
- .From()
- .InnerJoin().On((n, d) => n.NodeId == d.NodeId && d.Published)
- .WhereIn(x => x.NodeId, ids);
-
+
+ var sql = SqlContext.Sql()
+ .SelectCount(x => x.NodeId)
+ .From()
+ .InnerJoin().On((n, d) => n.NodeId == d.NodeId && d.Published)
+ .WhereIn(x => x.NodeId, ids);
+
var count = Database.ExecuteScalar(sql);
return count == content.Level;
}
@@ -919,19 +919,19 @@ namespace Umbraco.Core.Persistence.Repositories
else
{
newest[dto.NodeId] = dto;
- if (allVersions) newestDto.Newest = false;
+ if (allVersions) newestDto.Newest = false;
else remove.Add(newestDto);
}
- }
+ }
if (remove != null)
foreach (var removeDto in remove)
- dtos.Remove(removeDto);
-
+ dtos.Remove(removeDto);
+
// populate published data - in case of 'many' it's not there yet
if (many)
{
var roDtos = Database.FetchByGroups(dtos.Select(x => x.NodeId), 2000, batch
- => Sql()
+ => SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.NodeId, batch)
@@ -954,7 +954,7 @@ namespace Umbraco.Core.Persistence.Repositories
}
}
- var content = new IContent[dtos.Count];
+ var content = new IContent[dtos.Count];
for (var i = 0; i < dtos.Count; i++)
{
@@ -1005,7 +1005,7 @@ namespace Umbraco.Core.Persistence.Repositories
// assign
foreach (var temp in temps)
{
- // complete the item
+ // complete the item
if (temp.TemplateId.HasValue && templates.TryGetValue(temp.TemplateId.Value, out var template))
((Content) temp.Content).Template = template;
temp.Content.Properties = propertyData[temp.Version];
diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs
index b4b0468913..a5c48b06b2 100644
--- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs
@@ -73,14 +73,14 @@ namespace Umbraco.Core.Persistence.Repositories
{
// use the underlying GetAll which will force cache all content types
return ids.Any() ? GetAll().Where(x => ids.Contains(x.Key)) : GetAll();
- }
+ }
protected override IEnumerable PerformGetByQuery(IQuery query)
{
var sqlClause = GetBaseQuery(false);
var translator = new SqlTranslator(sqlClause, query);
var sql = translator.Translate();
-
+
// fixme - insane! GetBaseQuery does not even return a proper??? oh well...
var dtos = Database.Fetch(sql);
@@ -159,7 +159,7 @@ namespace Umbraco.Core.Persistence.Repositories
sql = isCount
? sql.SelectCount()
- : sql.Select(r => r.Select(x => x.ContentTypeDto, r1 => r1.Select(x => x.NodeDto)));
+ : sql.Select(r => r.Select(x => x.ContentTypeDto, r1 => r1.Select(x => x.NodeDto)));
sql
.From()
@@ -197,7 +197,7 @@ namespace Umbraco.Core.Persistence.Repositories
///
protected override void PersistDeletedItem(IContentType entity)
{
- var query = QueryT.Where(x => x.ParentId == entity.Id);
+ var query = Query().Where(x => x.ParentId == entity.Id);
var children = GetByQuery(query);
foreach (var child in children)
{
diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs
index 693bed8b0f..0d20ab22ff 100644
--- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs
@@ -66,7 +66,7 @@ namespace Umbraco.Core.Persistence.Repositories
AddOrUpdate(moving);
//update all descendants, update in order of level
- var descendants = GetByQuery(QueryT.Where(type => type.Path.StartsWith(movingPath)));
+ var descendants = GetByQuery(Query().Where(type => type.Path.StartsWith(movingPath)));
var paths = new Dictionary();
paths[moving.Id] = moving.Path;
diff --git a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs
index 9564c69937..ee129cb2e9 100644
--- a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs
@@ -353,8 +353,7 @@ AND umbracoNode.id <> @id",
AddOrUpdate(toMove);
//update all descendants from the original path, update in order of level
- var descendants = this.GetByQuery(
- QueryT.Where(type => type.Path.StartsWith(origPath + ",")));
+ var descendants = GetByQuery(Query().Where(type => type.Path.StartsWith(origPath + ",")));
var lastParent = toMove;
foreach (var descendant in descendants.OrderBy(x => x.Level))
diff --git a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs
index 6fa3649d2e..4adb11601f 100644
--- a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs
@@ -245,14 +245,14 @@ namespace Umbraco.Core.Persistence.Repositories
private IEnumerable GetRootDictionaryItems()
{
- var query = QueryT.Where(x => x.ParentId == null);
+ var query = Query().Where(x => x.ParentId == null);
return GetByQuery(query);
}
public Dictionary GetDictionaryItemKeyMap()
{
var columns = new[] { "key", "id" }.Select(x => (object) SqlSyntax.GetQuotedColumnName(x)).ToArray();
- var sql = UnitOfWork.Sql().Select(columns).From();
+ var sql = Sql().Select(columns).From();
return Database.Fetch(sql).ToDictionary(x => x.Key, x => x.Id);
}
@@ -277,7 +277,7 @@ namespace Umbraco.Core.Persistence.Repositories
.Where(x => x.Parent != null)
.Where($"{SqlSyntax.GetQuotedColumnName("parent")} IN (@parentIds)", new { parentIds = @group });
- var translator = new SqlTranslator(sqlClause, QueryT);
+ var translator = new SqlTranslator(sqlClause, Query());
var sql = translator.Translate();
sql.OrderBy(x => x.UniqueId);
diff --git a/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs b/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs
index f08feb682a..e4d2c12a81 100644
--- a/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs
@@ -31,12 +31,10 @@ namespace Umbraco.Core.Persistence.Repositories
///
protected internal IScopeUnitOfWork UnitOfWork { get; }
+ protected Sql Sql() => UnitOfWork.SqlContext.Sql();
+
#region Query Methods
- public IQuery Query => UnitOfWork.Query();
-
- public Sql Sql() => UnitOfWork.Sql();
-
// fixme need to review that ... one
public IEnumerable GetPagedResultsByQuery(IQuery query, Guid objectTypeId, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, IQuery filter = null)
diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IEntityRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IEntityRepository.cs
index 1de535486e..5893ce1c35 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IEntityRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IEntityRepository.cs
@@ -9,8 +9,6 @@ namespace Umbraco.Core.Persistence.Repositories
{
public interface IEntityRepository : IRepository
{
- IQuery Query { get; }
-
IUmbracoEntity GetByKey(Guid key);
IUmbracoEntity GetByKey(Guid key, Guid objectTypeId);
IUmbracoEntity Get(int id);
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs
index 1384751a91..3b7665f6a8 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs
@@ -122,7 +122,7 @@ namespace Umbraco.Core.Persistence.Repositories
typeof (IMemberGroup).FullName + "." + name,
() =>
{
- var qry = QueryT.Where(group => group.Name.Equals(name));
+ var qry = Query().Where(group => group.Name.Equals(name));
var result = GetByQuery(qry);
return result.FirstOrDefault();
},
@@ -134,7 +134,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IMemberGroup CreateIfNotExists(string roleName)
{
- var qry = QueryT.Where(group => group.Name.Equals(roleName));
+ var qry = Query().Where(group => group.Name.Equals(roleName));
var result = GetByQuery(qry);
if (result.Any()) return null;
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
index 7f6f4cc02b..501e04344c 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
@@ -120,9 +120,9 @@ namespace Umbraco.Core.Persistence.Repositories
break;
case QueryType.Many:
case QueryType.Single:
- sql = sql.Select(r =>
- r.Select(x => x.ContentVersionDto, r1 =>
- r1.Select(x => x.ContentDto, r2 =>
+ sql = sql.Select(r =>
+ r.Select(x => x.ContentVersionDto, r1 =>
+ r1.Select(x => x.ContentDto, r2 =>
r2.Select(x => x.NodeDto))));
break;
}
@@ -464,7 +464,7 @@ namespace Umbraco.Core.Persistence.Repositories
if (memberGroup == null) return Enumerable.Empty();
// get the members by username
- var query = QueryT;
+ var query = Query();
switch (matchType)
{
case StringPropertyMatchType.Exact:
diff --git a/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs
index 10bc21eb70..089f64c79c 100644
--- a/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs
@@ -15,7 +15,7 @@ namespace Umbraco.Core.Persistence.Repositories
///
///
///
- internal abstract class NPocoRepositoryBase : RepositoryBase, IDatabaseContext
+ internal abstract class NPocoRepositoryBase : RepositoryBase
where TEntity : class, IAggregateRoot
{
///
@@ -39,26 +39,14 @@ namespace Umbraco.Core.Persistence.Repositories
protected IUmbracoDatabase Database => UnitOfWork.Database;
///
- /// Gets the repository's database sql syntax.
+ /// Gets the Sql context.
///
- public ISqlSyntaxProvider SqlSyntax => UnitOfWork.SqlSyntax;
+ protected ISqlContext SqlContext=> UnitOfWork.SqlContext;
- ///
- /// Creates a new query.
- ///
- public override IQuery Query() => UnitOfWork.Query();
-
- ///
- /// Creates a new Sql statement.
- ///
- /// A new Sql statement.
- public Sql Sql() => UnitOfWork.Sql();
-
- ///
- /// Creates a new Sql statement.
- ///
- /// A new Sql statement.
- public Sql Sql(string sql, params object[] args) => UnitOfWork.Sql(sql, args);
+ protected Sql Sql() => SqlContext.Sql();
+ protected Sql Sql(string sql, params object[] args) => SqlContext.Sql(sql, args);
+ protected ISqlSyntaxProvider SqlSyntax => SqlContext.SqlSyntax;
+ protected IQuery Query() => SqlContext.Query();
#region Abstract Methods
diff --git a/src/Umbraco.Core/Persistence/Repositories/NotificationsRepository.cs b/src/Umbraco.Core/Persistence/Repositories/NotificationsRepository.cs
index 66005f0de7..edda5477f8 100644
--- a/src/Umbraco.Core/Persistence/Repositories/NotificationsRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/NotificationsRepository.cs
@@ -1,12 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using NPoco;
using Umbraco.Core.Models;
using Umbraco.Core.Models.EntityBase;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Models.Rdbms;
-using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Persistence.UnitOfWork;
namespace Umbraco.Core.Persistence.Repositories
@@ -23,7 +21,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable GetUsersNotifications(IEnumerable userIds, string action, IEnumerable nodeIds, Guid objectType)
{
var nodeIdsA = nodeIds.ToArray();
- var sql = _unitOfWork.Sql()
+ var sql = _unitOfWork.SqlContext.Sql()
.Select("DISTINCT umbracoNode.id nodeId, umbracoUser.id userId, umbracoNode.nodeObjectType, umbracoUser2NodeNotify.action")
.From()
.InnerJoin().On(left => left.NodeId, right => right.NodeId)
@@ -42,7 +40,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable GetUserNotifications(IUser user)
{
- var sql = _unitOfWork.Sql()
+ var sql = _unitOfWork.SqlContext.Sql()
.Select("DISTINCT umbracoNode.id, umbracoUser2NodeNotify.userId, umbracoNode.nodeObjectType, umbracoUser2NodeNotify.action")
.From()
.InnerJoin()
@@ -63,7 +61,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable GetEntityNotifications(IEntity entity)
{
- var sql = _unitOfWork.Sql()
+ var sql = _unitOfWork.SqlContext.Sql()
.Select("DISTINCT umbracoNode.id, umbracoUser2NodeNotify.userId, umbracoNode.nodeObjectType, umbracoUser2NodeNotify.action")
.From()
.InnerJoin()
@@ -94,7 +92,7 @@ namespace Umbraco.Core.Persistence.Repositories
public Notification CreateNotification(IUser user, IEntity entity, string action)
{
- var sql = _unitOfWork.Sql()
+ var sql = _unitOfWork.SqlContext.Sql()
.Select("DISTINCT nodeObjectType")
.From()
.Where(nodeDto => nodeDto.NodeId == entity.Id);
diff --git a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs
index 36920b306e..97c422cb2b 100644
--- a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs
@@ -19,7 +19,7 @@ namespace Umbraco.Core.Persistence.Repositories
public virtual IEnumerable GetEntitiesInRecycleBin()
{
- return GetByQuery(QueryT.Where(entity => entity.Trashed));
+ return GetByQuery(Query().Where(entity => entity.Trashed));
}
}
}
diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBaseOfTIdTEntity.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBaseOfTIdTEntity.cs
index 6be2ceabf2..ef4ea02d18 100644
--- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBaseOfTIdTEntity.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBaseOfTIdTEntity.cs
@@ -24,16 +24,6 @@ namespace Umbraco.Core.Persistence.Repositories
: base(work, cache, logger)
{ }
- ///
- /// Creates a new query.
- ///
- public virtual IQuery QueryT => Query();
-
- ///
- /// Creates a new query.
- ///
- public abstract IQuery Query();
-
#region Static Queries
private IQuery _hasIdQuery;
@@ -106,7 +96,7 @@ namespace Umbraco.Core.Persistence.Repositories
{
// get count of all entities of current type (TEntity) to ensure cached result is correct
// create query once if it is needed (no need for locking here) - query is static!
- var query = _hasIdQuery ?? (_hasIdQuery = QueryT.Where(x => x.Id != 0));
+ var query = _hasIdQuery ?? (_hasIdQuery = UnitOfWork.SqlContext.Query().Where(x => x.Id != 0));
return PerformCount(query);
});
}
diff --git a/src/Umbraco.Core/Persistence/Repositories/TaskRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TaskRepository.cs
index 4fdbbd86c6..537a73fab7 100644
--- a/src/Umbraco.Core/Persistence/Repositories/TaskRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/TaskRepository.cs
@@ -4,7 +4,6 @@ using System.Linq;
using LightInject;
using NPoco;
using Umbraco.Core.Cache;
-using Umbraco.Core.Composing;
using Umbraco.Core.Composing.CompositionRoots;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
@@ -19,15 +18,14 @@ namespace Umbraco.Core.Persistence.Repositories
{
public TaskRepository(IScopeUnitOfWork work, [Inject(RepositoryCompositionRoot.DisabledCache)] CacheHelper cache, ILogger logger)
: base(work, cache, logger)
- {
- }
+ { }
protected override Task PerformGet(int id)
{
var sql = GetBaseQuery(false);
sql.Where(GetBaseWhereClause(), new { Id = id });
- var taskDto = Database.Fetch(SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
+ var taskDto = Database.Fetch(SqlContext.SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
if (taskDto == null)
return null;
@@ -63,13 +61,13 @@ namespace Umbraco.Core.Persistence.Repositories
protected override Sql GetBaseQuery(bool isCount)
{
- return isCount ? Sql().SelectCount().From() : GetBaseQuery();
+ return isCount ? SqlContext.Sql().SelectCount().From() : GetBaseQuery();
}
private Sql GetBaseQuery()
{
- return Sql()
- .Select("cmsTask.closed,cmsTask.id,cmsTask.taskTypeId,cmsTask.nodeId,cmsTask.parentUserId,cmsTask.userId,cmsTask." + SqlSyntax.GetQuotedColumnName("DateTime") + ",cmsTask.Comment,cmsTaskType.id, cmsTaskType.alias")
+ return SqlContext.Sql()
+ .Select("cmsTask.closed,cmsTask.id,cmsTask.taskTypeId,cmsTask.nodeId,cmsTask.parentUserId,cmsTask.userId,cmsTask." + SqlContext.SqlSyntax.GetQuotedColumnName("DateTime") + ",cmsTask.Comment,cmsTaskType.id, cmsTaskType.alias")
.From()
.InnerJoin()
.On(left => left.TaskTypeId, right => right.Id)
diff --git a/src/Umbraco.Core/Persistence/Repositories/TaskTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TaskTypeRepository.cs
index b2a38f9731..75c745709b 100644
--- a/src/Umbraco.Core/Persistence/Repositories/TaskTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/TaskTypeRepository.cs
@@ -4,7 +4,6 @@ using System.Linq;
using LightInject;
using NPoco;
using Umbraco.Core.Cache;
-using Umbraco.Core.Composing;
using Umbraco.Core.Composing.CompositionRoots;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
@@ -27,7 +26,7 @@ namespace Umbraco.Core.Persistence.Repositories
var sql = GetBaseQuery(false);
sql.Where(GetBaseWhereClause(), new { Id = id });
- var taskDto = Database.Fetch(SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
+ var taskDto = Database.Fetch(SqlContext.SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
if (taskDto == null)
return null;
@@ -42,7 +41,7 @@ namespace Umbraco.Core.Persistence.Repositories
if (ids.Any())
{
- sql.Where("cmsTaskType.id IN (@ids)", new { ids = ids });
+ sql.Where("cmsTaskType.id IN (@ids)", new { ids });
}
var factory = new TaskTypeFactory();
@@ -63,7 +62,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override Sql GetBaseQuery(bool isCount)
{
- return Sql().SelectAll().From();
+ return SqlContext.Sql().SelectAll().From();
}
protected override string GetBaseWhereClause()
@@ -81,10 +80,7 @@ namespace Umbraco.Core.Persistence.Repositories
return list;
}
- protected override Guid NodeObjectTypeId
- {
- get { throw new NotImplementedException(); }
- }
+ protected override Guid NodeObjectTypeId => throw new NotImplementedException();
protected override void PersistNewItem(TaskType entity)
{
diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs
index 72a1ccc7d7..8a4ecf3264 100644
--- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs
@@ -107,7 +107,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override Sql GetBaseQuery(bool isCount)
{
- var sql = Sql();
+ var sql = SqlContext.Sql();
sql = isCount
? sql.SelectCount()
@@ -324,13 +324,13 @@ namespace Umbraco.Core.Persistence.Repositories
{
//look up the simple template definitions that have a master template assigned, this is used
// later to populate the template item's properties
- var childIdsSql = Sql()
+ var childIdsSql = SqlContext.Sql()
.Select("nodeId,alias,parentID")
.From()
.InnerJoin()
.On(dto => dto.NodeId, dto => dto.NodeId)
//lookup axis's
- .Where("umbracoNode." + SqlSyntax.GetQuotedColumnName("id") + " IN (@parentIds) OR umbracoNode.parentID IN (@childIds)",
+ .Where("umbracoNode." + SqlContext.SqlSyntax.GetQuotedColumnName("id") + " IN (@parentIds) OR umbracoNode.parentID IN (@childIds)",
new {parentIds = templates.Select(x => x.NodeDto.ParentId), childIds = templates.Select(x => x.NodeId)});
var childIds = Database.Fetch(childIdsSql)
diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
index c90fa9a630..079a658766 100644
--- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
@@ -62,7 +62,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override IUser PerformGet(int id)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.Select()
.From()
.Where(x => x.Id == id);
@@ -182,7 +182,7 @@ ORDER BY colName";
private List GetDtosWith(Action> with, bool includeReferences)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.Select()
.From();
@@ -209,7 +209,7 @@ ORDER BY colName";
// get users2groups
- var sql = Sql()
+ var sql = SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.UserId, userIds);
@@ -219,7 +219,7 @@ ORDER BY colName";
// get groups
- sql = Sql()
+ sql = SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.Id, groupIds);
@@ -229,7 +229,7 @@ ORDER BY colName";
// get groups2apps
- sql = Sql()
+ sql = SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.UserGroupId, groupIds);
@@ -240,7 +240,7 @@ ORDER BY colName";
// get start nodes
- sql = Sql()
+ sql = SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.UserId, userIds);
@@ -282,11 +282,11 @@ ORDER BY colName";
protected override Sql GetBaseQuery(bool isCount)
{
if (isCount)
- return Sql()
+ return SqlContext.Sql()
.SelectCount()
.From();
- return Sql()
+ return SqlContext.Sql()
.Select()
.From();
}
@@ -306,7 +306,7 @@ ORDER BY colName";
private Sql GetBaseQuery(string columns)
{
- return Sql()
+ return SqlContext.Sql()
.Select(columns)
.From();
}
@@ -534,7 +534,7 @@ ORDER BY colName";
public bool Exists(string username)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.SelectCount()
.From()
.Where(x => x.UserName == username);
@@ -562,11 +562,11 @@ ORDER BY colName";
private IEnumerable GetAllInOrNotInGroup(int groupId, bool include)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.Select()
.From();
- var inSql = Sql()
+ var inSql = SqlContext.Sql()
.Select(x => x.UserId)
.From()
.Where(x => x.UserGroupId == groupId);
@@ -609,7 +609,7 @@ ORDER BY colName";
// get the referenced column name and find the corresp mapped column name
var expressionMember = ExpressionHelper.GetMemberInfo(orderBy);
var mapper = _mapperCollection[typeof(IUser)];
- var mappedField = mapper.Map(SqlSyntax, expressionMember.Name);
+ var mappedField = mapper.Map(SqlContext.SqlSyntax, expressionMember.Name);
if (mappedField.IsNullOrWhiteSpace())
throw new ArgumentException("Could not find a mapping for the column specified in the orderBy clause");
@@ -630,7 +630,7 @@ ORDER BY colName";
|| includeUserGroups != null && includeUserGroups.Length > 0
|| excludeUserGroups != null && excludeUserGroups.Length > 0
|| userState != null && userState.Length > 0 && userState.Contains(UserState.All) == false)
- filterSql = Sql();
+ filterSql = SqlContext.Sql();
if (hasCustomFilter)
{
@@ -697,7 +697,7 @@ ORDER BY colName";
}
// create base query
- var sql = Sql()
+ var sql = SqlContext.Sql()
.Select()
.From();
@@ -721,7 +721,7 @@ ORDER BY colName";
{
if (filterSql == null) return sql;
- sql.Append(Sql(" WHERE " + filterSql.SQL.TrimStart("AND "), filterSql.Arguments));
+ sql.Append(SqlContext.Sql(" WHERE " + filterSql.SQL.TrimStart("AND "), filterSql.Arguments));
return sql;
}
@@ -740,7 +740,7 @@ ORDER BY colName";
internal IEnumerable GetNextUsers(int id, int count)
{
- var idsQuery = Sql()
+ var idsQuery = SqlContext.Sql()
.Select(x => x.Id)
.From()
.Where(x => x.Id >= id)
diff --git a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs
index 4571246e14..65d764c0f8 100644
--- a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs
@@ -60,7 +60,7 @@ namespace Umbraco.Core.Persistence.Repositories
///
public virtual IEnumerable GetVersionIds(int id, int maxRows)
{
- var sql = Sql();
+ var sql = SqlContext.Sql();
sql.Select("cmsDocument.versionId")
.From()
.InnerJoin()
@@ -71,7 +71,7 @@ namespace Umbraco.Core.Persistence.Repositories
.Where(x => x.NodeId == id)
.OrderByDescending(x => x.UpdateDate);
- return Database.Fetch(SqlSyntax.SelectTop(sql, maxRows));
+ return Database.Fetch(SqlContext.SqlSyntax.SelectTop(sql, maxRows));
}
public virtual void DeleteVersion(Guid versionId)
@@ -120,7 +120,7 @@ namespace Umbraco.Core.Persistence.Repositories
? "-1,"
: "," + parentId + ",";
- var sql = Sql()
+ var sql = SqlContext.Sql()
.SelectCount()
.From();
@@ -147,7 +147,7 @@ namespace Umbraco.Core.Persistence.Repositories
public int CountChildren(int parentId, string contentTypeAlias = null)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.SelectCount()
.From();
@@ -179,7 +179,7 @@ namespace Umbraco.Core.Persistence.Repositories
///
public int Count(string contentTypeAlias = null)
{
- var sql = Sql()
+ var sql = SqlContext.Sql()
.SelectCount()
.From();
@@ -280,7 +280,7 @@ namespace Umbraco.Core.Persistence.Repositories
dbfield = GetDatabaseFieldNameForOrderBy("umbracoNode", "id");
if (orderBySystemField == false || orderBy.InvariantEquals(dbfield) == false)
{
- var matches = VersionableRepositoryBaseAliasRegex.For(SqlSyntax).Matches(sql.SQL);
+ var matches = VersionableRepositoryBaseAliasRegex.For(SqlContext.SqlSyntax).Matches(sql.SQL);
var match = matches.Cast().FirstOrDefault(m => m.Groups[1].Value.InvariantEquals(dbfield));
if (match != null)
dbfield = match.Groups[2].Value;
@@ -310,7 +310,7 @@ namespace Umbraco.Core.Persistence.Repositories
// note: ContentTypeAlias is not properly managed because it's not part of the query to begin with!
- var matches = VersionableRepositoryBaseAliasRegex.For(SqlSyntax).Matches(sql.SQL);
+ var matches = VersionableRepositoryBaseAliasRegex.For(SqlContext.SqlSyntax).Matches(sql.SQL);
var match = matches.Cast().FirstOrDefault(m => m.Groups[1].Value.InvariantEquals(dbfield));
if (match != null)
dbfield = match.Groups[2].Value;
@@ -322,10 +322,10 @@ namespace Umbraco.Core.Persistence.Repositories
{
// Sorting by a custom field, so set-up sub-query for ORDER BY clause to pull through value
// from most recent content version for the given order by field
- var sortedInt = string.Format(SqlSyntax.ConvertIntegerToOrderableString, "dataInt");
- var sortedDate = string.Format(SqlSyntax.ConvertDateToOrderableString, "dataDate");
+ var sortedInt = string.Format(SqlContext.SqlSyntax.ConvertIntegerToOrderableString, "dataInt");
+ var sortedDate = string.Format(SqlContext.SqlSyntax.ConvertDateToOrderableString, "dataDate");
var sortedString = "COALESCE(dataNvarchar,'')"; // assuming COALESCE is ok for all syntaxes
- var sortedDecimal = string.Format(SqlSyntax.ConvertDecimalToOrderableString, "dataDecimal");
+ var sortedDecimal = string.Format(SqlContext.SqlSyntax.ConvertDecimalToOrderableString, "dataDecimal");
// variable query fragments that depend on what we are querying
string andVersion, andNewest, idField;
@@ -416,7 +416,7 @@ namespace Umbraco.Core.Persistence.Repositories
if (orderBy == null) throw new ArgumentNullException(nameof(orderBy));
// start with base query, and apply the supplied IQuery
- if (query == null) query = QueryT;
+ if (query == null) query = UnitOfWork.SqlContext.Query();
var sqlNodeIds = new SqlTranslator(GetBaseQuery(QueryType.Many), query).Translate();
// sort and filter
@@ -437,7 +437,7 @@ namespace Umbraco.Core.Persistence.Repositories
// get all PropertyDataDto for all definitions / versions
var allPropertyDataDtos = Database.FetchByGroups(versions, 2000, batch =>
- Sql()
+ SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.VersionId, batch))
@@ -446,7 +446,7 @@ namespace Umbraco.Core.Persistence.Repositories
// get PropertyDataDto distinct PropertyTypeDto
var allPropertyTypeIds = allPropertyDataDtos.Select(x => x.PropertyTypeId).Distinct().ToList();
var allPropertyTypeDtos = Database.FetchByGroups(allPropertyTypeIds, 2000, batch =>
- Sql()
+ SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.Id, batch));
@@ -460,7 +460,7 @@ namespace Umbraco.Core.Persistence.Repositories
var pre = new Lazy>(() =>
{
return Database.FetchByGroups(allPropertyTypeIds, 2000, batch =>
- Sql()
+ SqlContext.Sql()
.Select()
.From()
.WhereIn(x => x.DataTypeNodeId, batch));
@@ -876,7 +876,7 @@ ORDER BY contentNodeId, versionId, propertytypeid
protected string GetDatabaseFieldNameForOrderBy(string tableName, string fieldName)
{
- return SqlSyntax.GetQuotedTableName(tableName) + "." + SqlSyntax.GetQuotedColumnName(fieldName);
+ return SqlContext.SqlSyntax.GetQuotedTableName(tableName) + "." + SqlContext.SqlSyntax.GetQuotedColumnName(fieldName);
}
#region UnitOfWork Events
diff --git a/src/Umbraco.Core/Persistence/SqlContext.cs b/src/Umbraco.Core/Persistence/SqlContext.cs
index d7628576dc..f3b21a33a7 100644
--- a/src/Umbraco.Core/Persistence/SqlContext.cs
+++ b/src/Umbraco.Core/Persistence/SqlContext.cs
@@ -2,29 +2,56 @@
using System.Linq;
using NPoco;
using Umbraco.Core.Persistence.Mappers;
+using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence
{
- public class SqlContext
+ ///
+ /// Implements .
+ ///
+ public class SqlContext : ISqlContext
{
- public SqlContext(ISqlSyntaxProvider sqlSyntax, IPocoDataFactory pocoDataFactory, DatabaseType databaseType, IMapperCollection mappers = null)
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The sql syntax provider.
+ /// The Poco data factory.
+ /// The database type.
+ /// The mappers.
+ public SqlContext(ISqlSyntaxProvider sqlSyntax, DatabaseType databaseType, IPocoDataFactory pocoDataFactory, IMapperCollection mappers = null)
{
// for tests
- if (mappers == null) mappers = new Mappers.MapperCollection(Enumerable.Empty());
- Mappers = mappers;
+ Mappers = mappers ?? new Mappers.MapperCollection(Enumerable.Empty());
SqlSyntax = sqlSyntax ?? throw new ArgumentNullException(nameof(sqlSyntax));
PocoDataFactory = pocoDataFactory ?? throw new ArgumentNullException(nameof(pocoDataFactory));
DatabaseType = databaseType ?? throw new ArgumentNullException(nameof(databaseType));
+ Templates = new SqlTemplates(this);
}
+ ///
public ISqlSyntaxProvider SqlSyntax { get; }
- public IPocoDataFactory PocoDataFactory { get; }
-
+ ///
public DatabaseType DatabaseType { get; }
+ ///
+ public Sql Sql() => NPoco.Sql.BuilderFor(this);
+
+ ///
+ public Sql Sql(string sql, params object[] args) => Sql().Append(sql, args);
+
+ ///
+ public IQuery Query() => new Query(this);
+
+ ///
+ public SqlTemplates Templates { get; }
+
+ ///
+ public IPocoDataFactory PocoDataFactory { get; }
+
+ ///
public IMapperCollection Mappers { get; }
}
}
diff --git a/src/Umbraco.Tests/Persistence/NPocoTests/SqlTemplate.cs b/src/Umbraco.Core/Persistence/SqlTemplate.cs
similarity index 55%
rename from src/Umbraco.Tests/Persistence/NPocoTests/SqlTemplate.cs
rename to src/Umbraco.Core/Persistence/SqlTemplate.cs
index 7c630ed395..1e4f429fc5 100644
--- a/src/Umbraco.Tests/Persistence/NPocoTests/SqlTemplate.cs
+++ b/src/Umbraco.Core/Persistence/SqlTemplate.cs
@@ -2,20 +2,18 @@
using System.Collections.Generic;
using System.Linq;
using NPoco;
-using Umbraco.Core.Persistence;
-namespace Umbraco.Tests.Persistence.NPocoTests
+namespace Umbraco.Core.Persistence
{
public class SqlTemplate
{
- private static readonly Dictionary Templates = new Dictionary();
- public static SqlContext SqlContext; // FIXME must initialize somehow? OR have an easy access to templates through DatabaseContext?
-
+ private readonly SqlContext _sqlContext;
private readonly string _sql;
private readonly Dictionary _args;
- public SqlTemplate(string sql, object[] args)
+ internal SqlTemplate(SqlContext sqlContext, string sql, object[] args)
{
+ _sqlContext = sqlContext;
_sql = sql;
if (args.Length > 0)
_args = new Dictionary();
@@ -23,28 +21,15 @@ namespace Umbraco.Tests.Persistence.NPocoTests
_args[i] = args[i].ToString();
}
- // for tests
- internal static void Clear()
- {
- Templates.Clear();
- }
-
- public static SqlTemplate Get(string key, Func, Sql> sqlBuilder)
- {
- if (Templates.TryGetValue(key, out var template)) return template;
- var sql = sqlBuilder(new Sql(SqlContext));
- return Templates[key] = new SqlTemplate(sql.SQL, sql.Arguments);
- }
-
public Sql Sql()
{
- return new Sql(SqlContext, _sql);
+ return new Sql(_sqlContext, _sql);
}
// must pass the args in the proper order, faster
public Sql Sql(params object[] args)
{
- return new Sql(SqlContext, _sql, args);
+ return new Sql(_sqlContext, _sql, args);
}
// can pass named args, slower
@@ -59,7 +44,7 @@ namespace Umbraco.Tests.Persistence.NPocoTests
throw new InvalidOperationException($"Invalid argument name \"{_args[i]}\".");
args[i] = value;
}
- return new Sql(SqlContext, _sql, args);
+ return new Sql(_sqlContext, _sql, args);
}
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/SqlTemplates.cs b/src/Umbraco.Core/Persistence/SqlTemplates.cs
new file mode 100644
index 0000000000..d1b2b9ac82
--- /dev/null
+++ b/src/Umbraco.Core/Persistence/SqlTemplates.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using NPoco;
+
+namespace Umbraco.Core.Persistence
+{
+ public class SqlTemplates
+ {
+ private readonly Dictionary _templates = new Dictionary();
+ private readonly SqlContext _sqlContext;
+
+ public SqlTemplates(SqlContext sqlContext)
+ {
+ _sqlContext = sqlContext;
+ }
+
+ // for tests
+ internal void Clear()
+ {
+ _templates.Clear();
+ }
+
+ public SqlTemplate Get(string key, Func, Sql> sqlBuilder)
+ {
+ if (_templates.TryGetValue(key, out var template)) return template;
+ var sql = sqlBuilder(new Sql(_sqlContext));
+ return _templates[key] = new SqlTemplate(_sqlContext, sql.SQL, sql.Arguments);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/UmbracoDatabase.cs b/src/Umbraco.Core/Persistence/UmbracoDatabase.cs
index f5a87a8f72..acfba9f1a2 100644
--- a/src/Umbraco.Core/Persistence/UmbracoDatabase.cs
+++ b/src/Umbraco.Core/Persistence/UmbracoDatabase.cs
@@ -70,9 +70,6 @@ namespace Umbraco.Core.Persistence
///
public SqlContext SqlContext { get; }
- ///
- public ISqlSyntaxProvider SqlSyntax => SqlContext.SqlSyntax;
-
#region Testing, Debugging and Troubleshooting
private bool _enableCount;
diff --git a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
index 0728d06636..afb83b3169 100644
--- a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
+++ b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
@@ -6,12 +6,10 @@ using System.Linq;
using System.Threading;
using NPoco;
using NPoco.FluentMappings;
-using Umbraco.Core.Configuration;
using Umbraco.Core.Exceptions;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.FaultHandling;
using Umbraco.Core.Persistence.Mappers;
-using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence
@@ -116,34 +114,15 @@ namespace Umbraco.Core.Persistence
#region IDatabaseContext
///
- public ISqlSyntaxProvider SqlSyntax
+ public ISqlContext SqlContext
{
get
{
EnsureConfigured();
- return _sqlSyntax;
+ return _sqlContext;
}
}
- public IQuery Query()
- {
- EnsureConfigured();
- return new Query(_sqlContext);
- }
-
- ///
- public Sql Sql()
- {
- EnsureConfigured();
- return NPoco.Sql.BuilderFor(_sqlContext);
- }
-
- ///
- public Sql Sql(string sql, params object[] args)
- {
- return Sql().Append(sql, args);
- }
-
#endregion
///
@@ -192,7 +171,7 @@ namespace Umbraco.Core.Persistence
// these are created here because it is the UmbracoDatabaseFactory that determines
// the sql syntax, poco data factory, and database type - so it "owns" the context
// and the query factory
- _sqlContext = new SqlContext(_sqlSyntax, _pocoDataFactory, _databaseType, _mappers);
+ _sqlContext = new SqlContext(_sqlSyntax, _databaseType, _pocoDataFactory, _mappers);
_logger.Debug("Configured.");
Configured = true;
diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWork.cs b/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWork.cs
index 9a76bca4b3..7e537c3093 100644
--- a/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWork.cs
+++ b/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWork.cs
@@ -3,7 +3,7 @@ using Umbraco.Core.Scoping;
namespace Umbraco.Core.Persistence.UnitOfWork
{
- public interface IScopeUnitOfWork : IUnitOfWork, IDatabaseContext
+ public interface IScopeUnitOfWork : IUnitOfWork
{
///
/// Gets the scope.
@@ -25,6 +25,11 @@ namespace Umbraco.Core.Persistence.UnitOfWork
///
IUmbracoDatabase Database { get; }
+ ///
+ /// Gets the Sql context.
+ ///
+ ISqlContext SqlContext { get; }
+
///
/// Read-locks some lock objects.
///
diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWorkProvider.cs b/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWorkProvider.cs
index 4c7110d174..32ca81b8d3 100644
--- a/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWorkProvider.cs
+++ b/src/Umbraco.Core/Persistence/UnitOfWork/IScopeUnitOfWorkProvider.cs
@@ -14,9 +14,9 @@ namespace Umbraco.Core.Persistence.UnitOfWork
IScopeProvider ScopeProvider { get; }
///
- /// Gets the database context.
+ /// Gets the sql context.
///
- IDatabaseContext DatabaseContext { get; }
+ ISqlContext SqlContext { get; }
///
/// Creates a unit of work.
diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWork.cs b/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWork.cs
index f9722d7516..3dc7470e25 100644
--- a/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWork.cs
+++ b/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWork.cs
@@ -1,9 +1,6 @@
using System;
using System.Data;
-using NPoco;
using Umbraco.Core.Events;
-using Umbraco.Core.Persistence.Querying;
-using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Scoping;
namespace Umbraco.Core.Persistence.UnitOfWork
@@ -15,7 +12,6 @@ namespace Umbraco.Core.Persistence.UnitOfWork
{
private readonly IsolationLevel _isolationLevel;
private readonly IScopeProvider _scopeProvider;
- private readonly IDatabaseContext _databaseContext;
private bool _completeScope;
private IScope _scope;
private Guid _key;
@@ -37,11 +33,11 @@ namespace Umbraco.Core.Persistence.UnitOfWork
///
/// This should normally not be used directly and should be created with the UnitOfWorkProvider
///
- internal ScopeUnitOfWork(IScopeProvider scopeProvider, IDatabaseContext databaseContext, RepositoryFactory repositoryFactory, IsolationLevel isolationLevel = IsolationLevel.Unspecified, bool readOnly = false, bool immediate = false)
+ internal ScopeUnitOfWork(IScopeProvider scopeProvider, ISqlContext sqlContext, RepositoryFactory repositoryFactory, IsolationLevel isolationLevel = IsolationLevel.Unspecified, bool readOnly = false, bool immediate = false)
: base(repositoryFactory, readOnly, immediate)
{
_scopeProvider = scopeProvider;
- _databaseContext = databaseContext;
+ SqlContext = sqlContext;
_isolationLevel = isolationLevel;
// fixme only 1!
@@ -57,16 +53,7 @@ namespace Umbraco.Core.Persistence.UnitOfWork
#region IDatabaseContext
///
- public ISqlSyntaxProvider SqlSyntax => _databaseContext.SqlSyntax;
-
- ///
- public Sql Sql() => _databaseContext.Sql();
-
- ///
- public Sql Sql(string sql, params object[] args) => _databaseContext.Sql(sql, args);
-
- ///
- public IQuery Query() => _databaseContext.Query();
+ public ISqlContext SqlContext { get; }
#endregion
diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWorkProvider.cs b/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWorkProvider.cs
index c159d16704..54b7309ed9 100644
--- a/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWorkProvider.cs
+++ b/src/Umbraco.Core/Persistence/UnitOfWork/ScopeUnitOfWorkProvider.cs
@@ -11,10 +11,10 @@ namespace Umbraco.Core.Persistence.UnitOfWork
///
/// Initializes a new instance of the class.
///
- public ScopeUnitOfWorkProvider(IScopeProvider scopeProvider, IDatabaseContext databaseContext, RepositoryFactory repositoryFactory)
+ public ScopeUnitOfWorkProvider(IScopeProvider scopeProvider, ISqlContext sqlContext, RepositoryFactory repositoryFactory)
{
ScopeProvider = scopeProvider ?? throw new ArgumentNullException(nameof(scopeProvider));
- DatabaseContext = databaseContext ?? throw new ArgumentNullException(nameof(databaseContext));
+ SqlContext = sqlContext ?? throw new ArgumentNullException(nameof(sqlContext));
_repositoryFactory = repositoryFactory ?? throw new ArgumentNullException(nameof(repositoryFactory));
}
@@ -22,12 +22,12 @@ namespace Umbraco.Core.Persistence.UnitOfWork
public IScopeProvider ScopeProvider { get; }
///
- public IDatabaseContext DatabaseContext { get; }
+ public ISqlContext SqlContext { get; }
///
public IScopeUnitOfWork CreateUnitOfWork(IsolationLevel isolationLevel = IsolationLevel.Unspecified, bool readOnly = false, bool immediate = false)
{
- return new ScopeUnitOfWork(ScopeProvider, DatabaseContext, _repositoryFactory, isolationLevel, readOnly, immediate);
+ return new ScopeUnitOfWork(ScopeProvider, SqlContext, _repositoryFactory, isolationLevel, readOnly, immediate);
}
}
}
diff --git a/src/Umbraco.Core/Scoping/IScope.cs b/src/Umbraco.Core/Scoping/IScope.cs
index 82cdc71b4f..eefc964965 100644
--- a/src/Umbraco.Core/Scoping/IScope.cs
+++ b/src/Umbraco.Core/Scoping/IScope.cs
@@ -16,9 +16,9 @@ namespace Umbraco.Core.Scoping
IUmbracoDatabase Database { get; }
///
- /// Gets the database context.
+ /// Gets the Sql context.
///
- IDatabaseContext DatabaseContext { get; }
+ ISqlContext SqlContext { get; }
///
/// Gets the scope event messages.
diff --git a/src/Umbraco.Core/Scoping/IScopeProvider.cs b/src/Umbraco.Core/Scoping/IScopeProvider.cs
index cc35790588..0b34c74df4 100644
--- a/src/Umbraco.Core/Scoping/IScopeProvider.cs
+++ b/src/Umbraco.Core/Scoping/IScopeProvider.cs
@@ -79,9 +79,9 @@ namespace Umbraco.Core.Scoping
IScopeContext Context { get; }
///
- /// Gets the database context.
+ /// Gets the sql context.
///
- IDatabaseContext DatabaseContext { get; }
+ ISqlContext SqlContext { get; }
#if DEBUG_SCOPES
Dictionary CallContextObjects { get; }
diff --git a/src/Umbraco.Core/Scoping/Scope.cs b/src/Umbraco.Core/Scoping/Scope.cs
index 1c3a774450..ccdec6fe45 100644
--- a/src/Umbraco.Core/Scoping/Scope.cs
+++ b/src/Umbraco.Core/Scoping/Scope.cs
@@ -136,7 +136,7 @@ namespace Umbraco.Core.Scoping
public Guid InstanceId { get; } = Guid.NewGuid();
- public IDatabaseContext DatabaseContext => _scopeProvider.DatabaseContext;
+ public ISqlContext SqlContext => _scopeProvider.SqlContext;
// a value indicating whether to force call-context
public bool CallContext
diff --git a/src/Umbraco.Core/Scoping/ScopeProvider.cs b/src/Umbraco.Core/Scoping/ScopeProvider.cs
index dc4f7f7152..8234f652f2 100644
--- a/src/Umbraco.Core/Scoping/ScopeProvider.cs
+++ b/src/Umbraco.Core/Scoping/ScopeProvider.cs
@@ -63,7 +63,7 @@ namespace Umbraco.Core.Scoping
public IUmbracoDatabaseFactory DatabaseFactory { get; }
- public IDatabaseContext DatabaseContext => DatabaseFactory;
+ public ISqlContext SqlContext => DatabaseFactory.SqlContext;
#region Context
diff --git a/src/Umbraco.Core/Services/AuditService.cs b/src/Umbraco.Core/Services/AuditService.cs
index 1af79276b7..2ac8e4b37e 100644
--- a/src/Umbraco.Core/Services/AuditService.cs
+++ b/src/Umbraco.Core/Services/AuditService.cs
@@ -29,7 +29,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repo = uow.CreateRepository();
- var result = repo.GetByQuery(uow.Query().Where(x => x.Id == objectId));
+ var result = repo.GetByQuery(Query().Where(x => x.Id == objectId));
uow.Complete();
return result;
}
@@ -41,8 +41,8 @@ namespace Umbraco.Core.Services
{
var repo = uow.CreateRepository();
var result = sinceDate.HasValue == false
- ? repo.GetByQuery(uow.Query().Where(x => x.UserId == userId && x.AuditType == type))
- : repo.GetByQuery(uow.Query().Where(x => x.UserId == userId && x.AuditType == type && x.CreateDate >= sinceDate.Value));
+ ? repo.GetByQuery(Query().Where(x => x.UserId == userId && x.AuditType == type))
+ : repo.GetByQuery(Query().Where(x => x.UserId == userId && x.AuditType == type && x.CreateDate >= sinceDate.Value));
uow.Complete();
return result;
}
@@ -54,8 +54,8 @@ namespace Umbraco.Core.Services
{
var repo = uow.CreateRepository();
var result = sinceDate.HasValue == false
- ? repo.GetByQuery(uow.Query().Where(x => x.AuditType == type))
- : repo.GetByQuery(uow.Query().Where(x => x.AuditType == type && x.CreateDate >= sinceDate.Value));
+ ? repo.GetByQuery(Query().Where(x => x.AuditType == type))
+ : repo.GetByQuery(Query().Where(x => x.AuditType == type && x.CreateDate >= sinceDate.Value));
uow.Complete();
return result;
}
diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs
index c311d9a614..799677ba3d 100644
--- a/src/Umbraco.Core/Services/ContentService.cs
+++ b/src/Umbraco.Core/Services/ContentService.cs
@@ -39,7 +39,7 @@ namespace Umbraco.Core.Services
// lazy-constructed because when the ctor runs, the query factory may not be ready
- private IQuery QueryNotTrashed => _queryNotTrashed ?? (_queryNotTrashed = UowProvider.DatabaseContext.Query().Where(x => x.Trashed == false));
+ private IQuery QueryNotTrashed => _queryNotTrashed ?? (_queryNotTrashed = Query().Where(x => x.Trashed == false));
#endregion
@@ -448,7 +448,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.ContentTypeId == id);
+ var query = Query().Where(x => x.ContentTypeId == id);
return repository.GetByQuery(query);
}
}
@@ -459,7 +459,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.ContentTypeId == id);
+ var query = Query().Where(x => x.ContentTypeId == id);
return repository.GetByPublishedVersion(query);
}
}
@@ -476,7 +476,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.Level == level && x.Trashed == false);
+ var query = Query().Where(x => x.Level == level && x.Trashed == false);
return repository.GetByQuery(query);
}
}
@@ -573,7 +573,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.ParentId == id);
+ var query = Query().Where(x => x.ParentId == id);
return repository.GetByQuery(query).OrderBy(x => x.SortOrder);
}
}
@@ -589,7 +589,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.ParentId == id && x.Published);
+ var query = Query().Where(x => x.ParentId == id && x.Published);
return repository.GetByQuery(query).OrderBy(x => x.SortOrder);
}
}
@@ -614,7 +614,7 @@ namespace Umbraco.Core.Services
var repository = uow.CreateRepository();
var filterQuery = filter.IsNullOrWhiteSpace()
? null
- : uow.Query().Where(x => x.Name.Contains(filter));
+ : Query().Where(x => x.Name.Contains(filter));
// fixme nesting uow?!
return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
}
@@ -643,7 +643,7 @@ namespace Umbraco.Core.Services
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query();
+ var query = Query();
//if the id is System Root, then just get all - NO! does not make sense!
//if (id != Constants.System.Root)
query.Where(x => x.ParentId == id);
@@ -669,7 +669,7 @@ namespace Umbraco.Core.Services
uow.ReadLock(Constants.Locks.ContentTree);
var filterQuery = filter.IsNullOrWhiteSpace()
? null
- : uow.Query().Where(x => x.Name.Contains(filter));
+ : Query().Where(x => x.Name.Contains(filter));
// fixme nesting uow?
return GetPagedDescendants(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery);
}
@@ -697,7 +697,7 @@ namespace Umbraco.Core.Services
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query();
+ var query = Query();
//if the id is System Root, then just get all
if (id != Constants.System.Root)
{
@@ -726,7 +726,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.ParentId == parentId && x.Name.Contains(name));
+ var query = Query().Where(x => x.ParentId == parentId && x.Name.Contains(name));
return repository.GetByQuery(query);
}
}
@@ -749,7 +749,7 @@ namespace Umbraco.Core.Services
return Enumerable.Empty();
}
var pathMatch = content.Path + ",";
- var query = uow.Query().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch));
+ var query = Query().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch));
return repository.GetByQuery(query);
}
}
@@ -766,7 +766,7 @@ namespace Umbraco.Core.Services
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
var pathMatch = content.Path + ",";
- var query = uow.Query().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch));
+ var query = Query().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch));
return repository.GetByQuery(query);
}
}
@@ -830,7 +830,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.ParentId == Constants.System.Root);
+ var query = Query().Where(x => x.ParentId == Constants.System.Root);
return repository.GetByQuery(query);
}
}
@@ -865,7 +865,7 @@ namespace Umbraco.Core.Services
private IEnumerable GetContentForExpiration(IScopeUnitOfWork uow)
{
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.Published && x.ExpireDate <= DateTime.Now);
+ var query = Query().Where(x => x.Published && x.ExpireDate <= DateTime.Now);
return repository.GetByQuery(query);
}
@@ -885,7 +885,7 @@ namespace Umbraco.Core.Services
private IEnumerable GetContentForRelease(IScopeUnitOfWork uow)
{
var repository = uow.CreateRepository();
- var query = uow.Query().Where(x => x.Published == false && x.ReleaseDate <= DateTime.Now);
+ var query = Query().Where(x => x.Published == false && x.ReleaseDate <= DateTime.Now);
return repository.GetByQuery(query);
}
@@ -900,7 +900,7 @@ namespace Umbraco.Core.Services
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
var bin = $"{Constants.System.Root},{Constants.System.RecycleBinContent},";
- var query = uow.Query().Where(x => x.Path.StartsWith(bin));
+ var query = Query().Where(x => x.Path.StartsWith(bin));
return repository.GetByQuery(query);
}
}
@@ -926,7 +926,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository();
- var query = uow.Query