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().Where(x => x.Published && x.Id == id && x.Trashed == false); + var query = Query().Where(x => x.Published && x.Id == id && x.Trashed == false); var count = repository.Count(query); return count > 0; } @@ -972,7 +972,7 @@ namespace Umbraco.Core.Services // fixme - move to repository? using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { - var sql = uow.Sql(@" + var sql = uow.SqlContext.Sql(@" SELECT id FROM umbracoNode JOIN cmsDocument ON umbracoNode.id=cmsDocument.nodeId AND cmsDocument.published=@0 @@ -1695,7 +1695,7 @@ namespace Umbraco.Core.Services } // emptying the recycle bin means deleting whetever is in there - do it properly! - var query = uow.Query().Where(x => x.ParentId == Constants.System.RecycleBinContent); + var query = Query().Where(x => x.ParentId == Constants.System.RecycleBinContent); var contents = repository.GetByQuery(query).ToArray(); foreach (var content in contents) { @@ -2013,7 +2013,7 @@ namespace Umbraco.Core.Services internal IEnumerable GetPublishedDescendantsLocked(IScopeUnitOfWork uow, IContentRepository repository, IContent content) { var pathMatch = content.Path + ","; - var query = uow.Query().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch) /*&& x.Trashed == false*/); + var query = Query().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch) /*&& x.Trashed == false*/); var contents = repository.GetByPublishedVersion(query); // beware! contents contains all published version below content @@ -2649,7 +2649,7 @@ namespace Umbraco.Core.Services uow.WriteLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = uow.Query().WhereIn(x => x.ContentTypeId, contentTypeIdsA); + var query = Query().WhereIn(x => x.ContentTypeId, contentTypeIdsA); var contents = repository.GetByQuery(query).ToArray(); if (uow.Events.DispatchCancelable(Deleting, this, new DeleteEventArgs(contents))) @@ -2670,7 +2670,7 @@ namespace Umbraco.Core.Services // if current content has children, move them to trash var c = content; - var childQuery = uow.Query().Where(x => x.ParentId == c.Id); + var childQuery = Query().Where(x => x.ParentId == c.Id); var children = repository.GetByQuery(childQuery); foreach (var child in children) { @@ -2717,7 +2717,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.ContentTypes); var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Alias == contentTypeAlias); + var query = Query().Where(x => x.Alias == contentTypeAlias); var contentType = repository.GetByQuery(query).FirstOrDefault(); if (contentType == null) @@ -2834,7 +2834,7 @@ namespace Umbraco.Core.Services { var repository = uow.CreateRepository(); - var query = uow.Query(); + var query = Query(); if (documentTypeIds.Length > 0) { query.Where(x => documentTypeIds.Contains(x.ContentTypeId)); diff --git a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs index d9991393f3..38bc1d695b 100644 --- a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs +++ b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs @@ -248,7 +248,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); uow.ReadLock(ReadLockIds); - var query = uow.Query().Where(x => x.ParentId == id); + var query = Query().Where(x => x.ParentId == id); return repo.GetByQuery(query); } } @@ -261,7 +261,7 @@ namespace Umbraco.Core.Services uow.ReadLock(ReadLockIds); var found = Get(id); if (found == null) return Enumerable.Empty(); - var query = uow.Query().Where(x => x.ParentId == found.Id); + var query = Query().Where(x => x.ParentId == found.Id); return repo.GetByQuery(query); } } @@ -272,7 +272,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); uow.ReadLock(ReadLockIds); - var query = uow.Query().Where(x => x.ParentId == id); + var query = Query().Where(x => x.ParentId == id); var count = repo.Count(query); return count > 0; } @@ -286,7 +286,7 @@ namespace Umbraco.Core.Services uow.ReadLock(ReadLockIds); var found = Get(id); if (found == null) return false; - var query = uow.Query().Where(x => x.ParentId == found.Id); + var query = Query().Where(x => x.ParentId == found.Id); var count = repo.Count(query); return count > 0; } @@ -322,7 +322,7 @@ namespace Umbraco.Core.Services while (ids.Count > 0) { var i = ids.Pop(); - var query = uow.Query().Where(x => x.ParentId == i); + var query = Query().Where(x => x.ParentId == i); var result = repo.GetByQuery(query).ToArray(); foreach (var c in result) @@ -373,7 +373,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); uow.ReadLock(ReadLockIds); - return repo.Count(uow.Query()); + return repo.Count(Query()); } } diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index 2035345961..dd18848d8a 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -218,7 +218,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - return repository.GetByQuery(uow.Query().Where(x => x.Name == name)).FirstOrDefault(); + return repository.GetByQuery(Query().Where(x => x.Name == name)).FirstOrDefault(); } } @@ -246,7 +246,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Key == id); + var query = Query().Where(x => x.Key == id); return repository.GetByQuery(query).FirstOrDefault(); } } @@ -261,7 +261,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.PropertyEditorAlias == propertyEditorAlias); + var query = Query().Where(x => x.PropertyEditorAlias == propertyEditorAlias); return repository.GetByQuery(query); } } diff --git a/src/Umbraco.Core/Services/EntityService.cs b/src/Umbraco.Core/Services/EntityService.cs index b2961deb27..aabfa83e4e 100644 --- a/src/Umbraco.Core/Services/EntityService.cs +++ b/src/Umbraco.Core/Services/EntityService.cs @@ -52,7 +52,7 @@ namespace Umbraco.Core.Services // lazy-constructed because when the ctor runs, the query factory may not be ready private IQuery QueryRootEntity => _queryRootEntity - ?? (_queryRootEntity = UowProvider.DatabaseContext.Query().Where(x => x.ParentId == -1)); + ?? (_queryRootEntity = Query().Where(x => x.ParentId == -1)); #endregion @@ -266,7 +266,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == parentId); + var query = Query().Where(x => x.ParentId == parentId); return repository.GetByQuery(query); } } @@ -283,7 +283,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == parentId); + var query = Query().Where(x => x.ParentId == parentId); return repository.GetByQuery(query, objectTypeId).ToList(); // run within using! } } @@ -300,7 +300,7 @@ namespace Umbraco.Core.Services var repository = uow.CreateRepository(); var entity = repository.Get(id); var pathMatch = entity.Path + ","; - var query = repository.Query.Where(x => x.Path.StartsWith(pathMatch) && x.Id != id); + var query = Query().Where(x => x.Path.StartsWith(pathMatch) && x.Id != id); return repository.GetByQuery(query); } } @@ -318,7 +318,7 @@ namespace Umbraco.Core.Services { var repository = uow.CreateRepository(); var entity = repository.Get(id); - var query = repository.Query.Where(x => x.Path.StartsWith(entity.Path) && x.Id != id); + var query = Query().Where(x => x.Path.StartsWith(entity.Path) && x.Id != id); return repository.GetByQuery(query, objectTypeId); } } @@ -342,12 +342,12 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == parentId && x.Trashed == false); + var query = Query().Where(x => x.ParentId == parentId && x.Trashed == false); IQuery filterQuery = null; if (filter.IsNullOrWhiteSpace() == false) { - filterQuery = repository.Query.Where(x => x.Name.Contains(filter)); + filterQuery = Query().Where(x => x.Name.Contains(filter)); } var contents = repository.GetPagedResultsByQuery(query, objectTypeId, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, filterQuery); @@ -374,8 +374,8 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - - var query = repository.Query; + + var query = Query(); //if the id is System Root, then just get all if (id != Constants.System.Root) { @@ -394,7 +394,7 @@ namespace Umbraco.Core.Services IQuery filterQuery = null; if (filter.IsNullOrWhiteSpace() == false) { - filterQuery = uow.Query().Where(x => x.Name.Contains(filter)); + filterQuery = Query().Where(x => x.Name.Contains(filter)); } var contents = repository.GetPagedResultsByQuery(query, objectTypeId, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, filterQuery); @@ -418,8 +418,8 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - - var query = uow.Query(); + + var query = Query(); if (idsA.All(x => x != Constants.System.Root)) { //lookup the paths so we can use it in the prefix query below @@ -441,7 +441,7 @@ namespace Umbraco.Core.Services var path = itemPath.Path; var qid = id; clauses.Add(x => x.Path.SqlStartsWith(path + ",", TextColumnType.NVarchar) || x.Path.SqlEndsWith("," + qid, TextColumnType.NVarchar)); - } + } } query.WhereAny(clauses); } @@ -449,7 +449,7 @@ namespace Umbraco.Core.Services IQuery filterQuery = null; if (filter.IsNullOrWhiteSpace() == false) { - filterQuery = uow.Query().Where(x => x.Name.Contains(filter)); + filterQuery = Query().Where(x => x.Name.Contains(filter)); } var contents = repository.GetPagedResultsByQuery(query, objectTypeId, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, filterQuery); @@ -477,7 +477,7 @@ namespace Umbraco.Core.Services { var repository = uow.CreateRepository(); - var query = repository.Query; + var query = Query(); //don't include trashed if specfied if (includeTrashed == false) { @@ -487,14 +487,14 @@ namespace Umbraco.Core.Services IQuery filterQuery = null; if (filter.IsNullOrWhiteSpace() == false) { - filterQuery = repository.Query.Where(x => x.Name.Contains(filter)); + filterQuery = Query().Where(x => x.Name.Contains(filter)); } var contents = repository.GetPagedResultsByQuery(query, objectTypeId, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, filterQuery); return contents; } } - + /// /// Gets a collection of the entities at the root, which corresponds to the entities with a Parent Id of -1. /// @@ -592,7 +592,7 @@ namespace Umbraco.Core.Services return repository.GetAllPaths(objectTypeId, keys); } } - + /// /// Gets a collection of /// @@ -624,7 +624,7 @@ namespace Umbraco.Core.Services { using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { - var sql = uow.Sql() + var sql = uow.SqlContext.Sql() .Select("nodeObjectType") .From() .Where(x => x.NodeId == id); @@ -643,7 +643,7 @@ namespace Umbraco.Core.Services { using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { - var sql = uow.Sql() + var sql = uow.SqlContext.Sql() .Select("nodeObjectType") .From() .Where(x => x.UniqueId == key); diff --git a/src/Umbraco.Core/Services/ExternalLoginService.cs b/src/Umbraco.Core/Services/ExternalLoginService.cs index 56b8946381..20f6fbe155 100644 --- a/src/Umbraco.Core/Services/ExternalLoginService.cs +++ b/src/Umbraco.Core/Services/ExternalLoginService.cs @@ -26,7 +26,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); return repo - .GetByQuery(uow.Query().Where(x => x.UserId == userId)) + .GetByQuery(Query().Where(x => x.UserId == userId)) .ToList(); // ToList is important here, must evaluate within uow! } } @@ -43,7 +43,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); return repo - .GetByQuery(uow.Query().Where(x => x.ProviderKey == login.ProviderKey && x.LoginProvider == login.LoginProvider)) + .GetByQuery(Query().Where(x => x.ProviderKey == login.ProviderKey && x.LoginProvider == login.LoginProvider)) .ToList(); // ToList is important here, must evaluate within uow! } } diff --git a/src/Umbraco.Core/Services/FileService.cs b/src/Umbraco.Core/Services/FileService.cs index 32b32fa401..4524af2de5 100644 --- a/src/Umbraco.Core/Services/FileService.cs +++ b/src/Umbraco.Core/Services/FileService.cs @@ -441,7 +441,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Key == id); + var query = Query().Where(x => x.Key == id); return repository.GetByQuery(query).SingleOrDefault(); } } diff --git a/src/Umbraco.Core/Services/LocalizationService.cs b/src/Umbraco.Core/Services/LocalizationService.cs index e7e836db0a..bde5dd7cc5 100644 --- a/src/Umbraco.Core/Services/LocalizationService.cs +++ b/src/Umbraco.Core/Services/LocalizationService.cs @@ -160,7 +160,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ParentId == parentId); + var query = Query().Where(x => x.ParentId == parentId); var items = repository.GetByQuery(query).ToArray(); //ensure the lazy Language callback is assigned foreach (var item in items) @@ -196,7 +196,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ParentId == null); + var query = Query().Where(x => x.ParentId == null); var items = repository.GetByQuery(query).ToArray(); //ensure the lazy Language callback is assigned foreach (var item in items) diff --git a/src/Umbraco.Core/Services/MacroService.cs b/src/Umbraco.Core/Services/MacroService.cs index c43c3388e0..e36483609a 100644 --- a/src/Umbraco.Core/Services/MacroService.cs +++ b/src/Umbraco.Core/Services/MacroService.cs @@ -46,7 +46,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var q = uow.Query().Where(x => x.Alias == alias); + var q = Query().Where(x => x.Alias == alias); return repository.GetByQuery(q).FirstOrDefault(); } } diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 82899a9639..6c92bdda99 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -61,7 +61,7 @@ namespace Umbraco.Core.Services } var repo = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Trashed == false); + var query = Query().Where(x => x.Trashed == false); if (mediaTypeId > 0) query = query.Where(x => x.ContentTypeId == mediaTypeId); return repo.Count(query); @@ -390,7 +390,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); 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); } } @@ -407,7 +407,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); 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); } } @@ -489,7 +489,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); 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); } } @@ -537,7 +537,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); 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); @@ -570,7 +570,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = uow.Query(); + var query = Query(); // always check for a parent - else it will also get decendants (and then you should use the GetPagedDescendants method) query.Where(x => x.ParentId == id); @@ -629,7 +629,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTree); 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) { @@ -662,7 +662,7 @@ namespace Umbraco.Core.Services return Enumerable.Empty(); var pathMatch = media.Path + ","; - var query = uow.Query().Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); + var query = Query().Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); return repository.GetByQuery(query); } } @@ -679,7 +679,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); var pathMatch = media.Path + ","; - var query = uow.Query().Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); + var query = Query().Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); return repository.GetByQuery(query); } } @@ -719,7 +719,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); 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); } } @@ -735,7 +735,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); var bin = $"{Constants.System.Root},{Constants.System.RecycleBinMedia},"; - var query = uow.Query().Where(x => x.Path.StartsWith(bin)); + var query = Query().Where(x => x.Path.StartsWith(bin)); return repository.GetByQuery(query); } } @@ -750,7 +750,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ParentId == id); + var query = Query().Where(x => x.ParentId == id); var count = repository.Count(query); return count > 0; } @@ -1254,7 +1254,7 @@ namespace Umbraco.Core.Services } // emptying the recycle bin means deleting whetever is in there - do it properly! - var query = uow.Query().Where(x => x.ParentId == Constants.System.RecycleBinMedia); + var query = Query().Where(x => x.ParentId == Constants.System.RecycleBinMedia); var medias = repository.GetByQuery(query).ToArray(); foreach (var media in medias) { @@ -1497,7 +1497,7 @@ namespace Umbraco.Core.Services uow.WriteLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = uow.Query().WhereIn(x => x.ContentTypeId, mediaTypeIdsA); + var query = Query().WhereIn(x => x.ContentTypeId, mediaTypeIdsA); var medias = repository.GetByQuery(query).ToArray(); if (uow.Events.DispatchCancelable(Deleting, this, new DeleteEventArgs(medias))) @@ -1512,7 +1512,7 @@ namespace Umbraco.Core.Services { // if current media has children, move them to trash var m = media; - var childQuery = uow.Query().Where(x => x.Path.StartsWith(m.Path)); + var childQuery = Query().Where(x => x.Path.StartsWith(m.Path)); var children = repository.GetByQuery(childQuery); foreach (var child in children.Where(x => mediaTypeIdsA.Contains(x.ContentTypeId) == false)) { @@ -1560,7 +1560,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTypes); var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Alias == mediaTypeAlias); + var query = Query().Where(x => x.Alias == mediaTypeAlias); var mediaType = repository.GetByQuery(query).FirstOrDefault(); if (mediaType == null) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 2b2a8d7cfa..6e83acecfb 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -26,7 +26,7 @@ namespace Umbraco.Core.Services private readonly MediaFileSystem _mediaFileSystem; //only for unit tests! - internal MembershipProviderBase MembershipProvider { get; set; } + internal MembershipProviderBase MembershipProvider { get; set; } #region Constructor @@ -62,21 +62,21 @@ namespace Umbraco.Core.Services switch (countType) { case MemberCountType.All: - query = uow.Query(); + query = Query(); break; case MemberCountType.Online: var fromDate = DateTime.Now.AddMinutes(-Membership.UserIsOnlineTimeWindow); - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.LastLoginDate && ((Member)x).DateTimePropertyValue > fromDate); break; case MemberCountType.LockedOut: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.IsLockedOut && ((Member)x).BoolPropertyValue); break; case MemberCountType.Approved: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.IsApproved && ((Member)x).BoolPropertyValue); break; @@ -372,7 +372,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Key == id); + var query = Query().Where(x => x.Key == id); return repository.GetByQuery(query).FirstOrDefault(); } } @@ -409,8 +409,8 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query1 = memberTypeAlias == null ? null : uow.Query().Where(x => x.ContentTypeAlias == memberTypeAlias); - var query2 = filter == null ? null : uow.Query().Where(x => x.Name.Contains(filter) || x.Username.Contains(filter)); + var query1 = memberTypeAlias == null ? null : Query().Where(x => x.ContentTypeAlias == memberTypeAlias); + var query2 = filter == null ? null : Query().Where(x => x.Name.Contains(filter) || x.Username.Contains(filter)); return repository.GetPagedResultsByQuery(query1, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, orderBySystemField, query2); } } @@ -444,7 +444,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Email.Equals(email)); + var query = Query().Where(x => x.Email.Equals(email)); return repository.GetByQuery(query).FirstOrDefault(); } } @@ -464,7 +464,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Username.Equals(username)); + var query = Query().Where(x => x.Username.Equals(username)); return repository.GetByQuery(query).FirstOrDefault(); } } @@ -480,7 +480,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ContentTypeAlias == memberTypeAlias); + var query = Query().Where(x => x.ContentTypeAlias == memberTypeAlias); return repository.GetByQuery(query); } } @@ -497,7 +497,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); repository.Get(memberTypeId); - var query = uow.Query().Where(x => x.ContentTypeId == memberTypeId); + var query = Query().Where(x => x.ContentTypeId == memberTypeId); return repository.GetByQuery(query); } } @@ -548,7 +548,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query(); + var query = Query(); switch (matchType) { @@ -590,7 +590,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query(); + var query = Query(); switch (matchType) { @@ -632,7 +632,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query(); + var query = Query(); switch (matchType) { @@ -677,25 +677,25 @@ namespace Umbraco.Core.Services switch (matchType) { case StringPropertyMatchType.Exact: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlEquals(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlEquals(value, TextColumnType.NVarchar))); break; case StringPropertyMatchType.Contains: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlContains(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlContains(value, TextColumnType.NVarchar))); break; case StringPropertyMatchType.StartsWith: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlStartsWith(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlStartsWith(value, TextColumnType.NVarchar))); break; case StringPropertyMatchType.EndsWith: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlEndsWith(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlEndsWith(value, TextColumnType.NVarchar))); @@ -726,27 +726,27 @@ namespace Umbraco.Core.Services switch (matchType) { case ValuePropertyMatchType.Exact: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue == value); break; case ValuePropertyMatchType.GreaterThan: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue > value); break; case ValuePropertyMatchType.LessThan: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue < value); break; case ValuePropertyMatchType.GreaterThanOrEqualTo: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue >= value); break; case ValuePropertyMatchType.LessThanOrEqualTo: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue <= value); break; @@ -770,7 +770,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => + var query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).BoolPropertyValue == value); @@ -796,27 +796,27 @@ namespace Umbraco.Core.Services switch (matchType) { case ValuePropertyMatchType.Exact: - query = uow.Query().Where( x => + query = Query().Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue == value); break; case ValuePropertyMatchType.GreaterThan: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue > value); break; case ValuePropertyMatchType.LessThan: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue < value); break; case ValuePropertyMatchType.GreaterThanOrEqualTo: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue >= value); break; case ValuePropertyMatchType.LessThanOrEqualTo: - query = uow.Query().Where(x => + query = Query().Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue <= value); break; @@ -967,9 +967,9 @@ namespace Umbraco.Core.Services private void DeleteLocked(IScopeUnitOfWork uow, IMemberRepository repository, IMember member, DeleteEventArgs args = null) { // a member has no descendants - repository.Delete(member); - if (args == null) - args = new DeleteEventArgs(member, false); // raise event & get flagged files + repository.Delete(member); + if (args == null) + args = new DeleteEventArgs(member, false); // raise event & get flagged files else args.CanCancel = false; uow.Events.Dispatch(Deleted, this, args); @@ -1063,7 +1063,7 @@ namespace Umbraco.Core.Services throw new InvalidOperationException("The role " + roleName + " is currently assigned to members"); } - var query = uow.Query().Where(g => g.Name == roleName); + var query = Query().Where(g => g.Name == roleName); var found = repository.GetByQuery(query).ToArray(); foreach (var memberGroup in found) @@ -1308,7 +1308,7 @@ namespace Umbraco.Core.Services var repository = uow.CreateRepository(); //TODO: What about content that has the contenttype as part of its composition? - var query = uow.Query().Where(x => x.ContentTypeId == memberTypeId); + var query = Query().Where(x => x.ContentTypeId == memberTypeId); var members = repository.GetByQuery(query).ToArray(); var deleteEventArgs = new DeleteEventArgs(members); diff --git a/src/Umbraco.Core/Services/MigrationEntryService.cs b/src/Umbraco.Core/Services/MigrationEntryService.cs index 49d6e635a1..2a4d99ea17 100644 --- a/src/Umbraco.Core/Services/MigrationEntryService.cs +++ b/src/Umbraco.Core/Services/MigrationEntryService.cs @@ -66,7 +66,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repo = uow.CreateRepository(); - var query = uow.Query() + var query = Query() .Where(x => x.MigrationName.ToUpper() == migrationName.ToUpper()); return repo.GetByQuery(query); } diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 6b001df4ed..854fac6889 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -6,13 +6,9 @@ using System.Linq; using System.Net.Http; using System.Text.RegularExpressions; using System.Web; -using System.Web.UI.WebControls; using System.Xml.Linq; -using System.Xml.XPath; -using Newtonsoft.Json; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.Composing; using Umbraco.Core.Events; using Umbraco.Core.Exceptions; using Umbraco.Core.IO; @@ -23,7 +19,6 @@ using Umbraco.Core.Models.Packaging; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Packaging; using Umbraco.Core.Packaging.Models; -using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -82,8 +77,10 @@ namespace Umbraco.Core.Services _importedContentTypes = new Dictionary(); } + protected IQuery Query() => _uowProvider.ScopeProvider.SqlContext.Query(); + #region Content - + /// /// Exports an item to xml as an /// @@ -790,7 +787,7 @@ namespace Umbraco.Core.Services using (var uow = _uowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Alias == contentTypeAlias); + var query = Query().Where(x => x.Alias == contentTypeAlias); var contentType = repository.GetByQuery(query).FirstOrDefault(); if (contentType == null) diff --git a/src/Umbraco.Core/Services/RelationService.cs b/src/Umbraco.Core/Services/RelationService.cs index fecd7242e6..83c97bd99f 100644 --- a/src/Umbraco.Core/Services/RelationService.cs +++ b/src/Umbraco.Core/Services/RelationService.cs @@ -72,7 +72,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Alias == alias); + var query = Query().Where(x => x.Alias == alias); return repository.GetByQuery(query).FirstOrDefault(); } } @@ -111,7 +111,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.RelationTypeId == relationTypeId); + var query = Query().Where(x => x.RelationTypeId == relationTypeId); return repository.GetByQuery(query); } } @@ -140,7 +140,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { 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); } } @@ -176,7 +176,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ChildId == id); + var query = Query().Where(x => x.ChildId == id); return repository.GetByQuery(query); } } @@ -213,7 +213,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ChildId == id || x.ParentId == id); + var query = Query().Where(x => x.ChildId == id || x.ParentId == id); return repository.GetByQuery(query); } } @@ -224,13 +224,13 @@ namespace Umbraco.Core.Services { var repository = uow.CreateRepository(); - var rtQuery = uow.Query().Where(x => x.Alias == relationTypeAlias); + var rtQuery = Query().Where(x => x.Alias == relationTypeAlias); var relationType = repository.GetByQuery(rtQuery).FirstOrDefault(); if (relationType == null) return Enumerable.Empty(); var relationRepo = uow.CreateRepository(); - var query = uow.Query().Where(x => (x.ChildId == id || x.ParentId == id) && x.RelationTypeId == relationType.Id); + var query = Query().Where(x => (x.ChildId == id || x.ParentId == id) && x.RelationTypeId == relationType.Id); return relationRepo.GetByQuery(query); } } @@ -246,7 +246,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Name == relationTypeName); + var query = Query().Where(x => x.Name == relationTypeName); var relationTypes = repository.GetByQuery(query); relationTypeIds = relationTypes.Select(x => x.Id).ToList(); } @@ -267,7 +267,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Alias == relationTypeAlias); + var query = Query().Where(x => x.Alias == relationTypeAlias); var relationTypes = repository.GetByQuery(query); relationTypeIds = relationTypes.Select(x => x.Id).ToList(); } @@ -287,7 +287,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.RelationTypeId == relationTypeId); + var query = Query().Where(x => x.RelationTypeId == relationTypeId); return repository.GetByQuery(query); } } @@ -461,7 +461,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.RelationTypeId == relationType.Id); + var query = Query().Where(x => x.RelationTypeId == relationType.Id); return repository.GetByQuery(query).Any(); } } @@ -476,7 +476,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ParentId == id || x.ChildId == id); + var query = Query().Where(x => x.ParentId == id || x.ChildId == id); return repository.GetByQuery(query).Any(); } } @@ -492,7 +492,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ParentId == parentId && x.ChildId == childId); + var query = Query().Where(x => x.ParentId == parentId && x.ChildId == childId); return repository.GetByQuery(query).Any(); } } @@ -526,7 +526,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.ParentId == parentId && x.ChildId == childId && x.RelationTypeId == relationType.Id); + var query = Query().Where(x => x.ParentId == parentId && x.ChildId == childId && x.RelationTypeId == relationType.Id); return repository.GetByQuery(query).Any(); } } @@ -657,7 +657,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.RelationTypeId == relationType.Id); + var query = Query().Where(x => x.RelationTypeId == relationType.Id); relations.AddRange(repository.GetByQuery(query).ToList()); foreach (var relation in relations) @@ -680,7 +680,7 @@ namespace Umbraco.Core.Services foreach (var relationTypeId in relationTypeIds) { var id = relationTypeId; - var query = uow.Query().Where(x => x.RelationTypeId == id); + var query = Query().Where(x => x.RelationTypeId == id); relations.AddRange(repository.GetByQuery(query)); } } diff --git a/src/Umbraco.Core/Services/RepositoryService.cs b/src/Umbraco.Core/Services/RepositoryService.cs index ab8b6ff475..40906eae88 100644 --- a/src/Umbraco.Core/Services/RepositoryService.cs +++ b/src/Umbraco.Core/Services/RepositoryService.cs @@ -22,6 +22,6 @@ namespace Umbraco.Core.Services UowProvider = provider ?? throw new ArgumentNullException(nameof(provider)); } - protected IQuery Query() => UowProvider.DatabaseContext.Query(); + protected IQuery Query() => UowProvider.ScopeProvider.SqlContext.Query(); } } diff --git a/src/Umbraco.Core/Services/TaskService.cs b/src/Umbraco.Core/Services/TaskService.cs index 481d5c07f7..c3d93acf38 100644 --- a/src/Umbraco.Core/Services/TaskService.cs +++ b/src/Umbraco.Core/Services/TaskService.cs @@ -20,7 +20,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repo = uow.CreateRepository(); - return repo.GetByQuery(uow.Query().Where(x => x.Alias == taskTypeAlias)).FirstOrDefault(); + return repo.GetByQuery(Query().Where(x => x.Alias == taskTypeAlias)).FirstOrDefault(); } } diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 72666c0ffa..309e9a5096 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -176,7 +176,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Email.Equals(email)); + var query = Query().Where(x => x.Email.Equals(email)); return repository.GetByQuery(query).FirstOrDefault(); } } @@ -428,7 +428,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query(); + var query = Query(); switch (matchType) { @@ -469,7 +469,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query(); + var query = Query(); switch (matchType) { @@ -516,7 +516,7 @@ namespace Umbraco.Core.Services switch (countType) { case MemberCountType.All: - query = uow.Query(); + query = Query(); break; case MemberCountType.Online: throw new NotImplementedException(); @@ -528,10 +528,10 @@ namespace Umbraco.Core.Services // ((Member)x).DateTimePropertyValue > fromDate); //return repository.GetCountByQuery(query); case MemberCountType.LockedOut: - query = uow.Query().Where(x => x.IsLockedOut); + query = Query().Where(x => x.IsLockedOut); break; case MemberCountType.Approved: - query = uow.Query().Where(x => x.IsApproved); + query = Query().Where(x => x.IsApproved); break; default: throw new ArgumentOutOfRangeException(nameof(countType)); @@ -559,7 +559,7 @@ namespace Umbraco.Core.Services IQuery filterQuery = null; if (filter.IsNullOrWhiteSpace() == false) { - filterQuery = UowProvider.DatabaseContext.Query().Where(x => x.Name.Contains(filter) || x.Username.Contains(filter)); + filterQuery = Query().Where(x => x.Name.Contains(filter) || x.Username.Contains(filter)); } return GetAll(pageIndex, pageSize, out totalRecords, orderBy, orderDirection, userState, userGroups, null, filterQuery); @@ -820,7 +820,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => aliases.SqlIn(x.Alias)); + var query = Query().Where(x => aliases.SqlIn(x.Alias)); var contents = repository.GetByQuery(query); return contents.WhereNotNull().ToArray(); } @@ -838,7 +838,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork(readOnly: true)) { var repository = uow.CreateRepository(); - var query = uow.Query().Where(x => x.Alias == alias); + var query = Query().Where(x => x.Alias == alias); var contents = repository.GetByQuery(query); return contents.FirstOrDefault(); } diff --git a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs index d974b68989..d6cfa70eb9 100644 --- a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs +++ b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs @@ -33,7 +33,7 @@ namespace Umbraco.Core.Sync private readonly ManualResetEvent _syncIdle; private readonly object _locko = new object(); private readonly ProfilingLogger _profilingLogger; - private readonly IDatabaseContext _databaseContext; + private readonly ISqlContext _sqlContext; private int _lastId = -1; private DateTime _lastSync; private DateTime _lastPruned; @@ -44,13 +44,13 @@ namespace Umbraco.Core.Sync protected DatabaseServerMessengerOptions Options { get; } public DatabaseServerMessenger( - IRuntimeState runtime, IScopeProvider scopeProvider, IDatabaseContext databaseContext, ILogger logger, ProfilingLogger proflog, + IRuntimeState runtime, IScopeProvider scopeProvider, ISqlContext sqlContext, ILogger logger, ProfilingLogger proflog, bool distributedEnabled, DatabaseServerMessengerOptions options) : base(distributedEnabled) { ScopeProvider = scopeProvider ?? throw new ArgumentNullException(nameof(scopeProvider)); Logger = logger ?? throw new ArgumentNullException(nameof(logger)); - _databaseContext = databaseContext; + _sqlContext = sqlContext; _runtime = runtime; _profilingLogger = proflog ?? throw new ArgumentNullException(nameof(proflog)); Options = options ?? throw new ArgumentNullException(nameof(options)); @@ -62,7 +62,7 @@ namespace Umbraco.Core.Sync protected IScopeProvider ScopeProvider { get; } - protected Sql Sql() => _databaseContext.Sql(); + protected Sql Sql() => _sqlContext.Sql(); #region Messenger diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 63e78348fd..a99dad0e5f 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -837,7 +837,6 @@ - @@ -1198,6 +1197,8 @@ + + diff --git a/src/Umbraco.Examine/UmbracoContentIndexer.cs b/src/Umbraco.Examine/UmbracoContentIndexer.cs index 26ba96121c..4af5335856 100644 --- a/src/Umbraco.Examine/UmbracoContentIndexer.cs +++ b/src/Umbraco.Examine/UmbracoContentIndexer.cs @@ -94,7 +94,7 @@ namespace Umbraco.Examine private void InitializeQueries() { if (_publishedQuery == null) - _publishedQuery = Current.DatabaseContext.Query().Where(x => x.Published); + _publishedQuery = Current.SqlContext.Query().Where(x => x.Published); } #endregion diff --git a/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs b/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs index c7bde15281..892ebba5ae 100644 --- a/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs +++ b/src/Umbraco.Tests/Migrations/AlterMigrationTests.cs @@ -28,7 +28,7 @@ namespace Umbraco.Tests.Migrations _sqlSyntax = new SqlCeSyntaxProvider(); var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.SqlServer); - var sqlContext = new SqlContext(_sqlSyntax, Mock.Of(), DatabaseType.SqlServer2008); + var sqlContext = new SqlContext(_sqlSyntax, DatabaseType.SqlServer2008, Mock.Of()); _database = new UmbracoDatabase("cstr", sqlContext, dbProviderFactory, _logger); } diff --git a/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs b/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs index ddb23e9c8c..2b2f21597f 100644 --- a/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs +++ b/src/Umbraco.Tests/Migrations/MigrationRunnerTests.cs @@ -30,7 +30,7 @@ namespace Umbraco.Tests.Migrations _sqlSyntax = new SqlCeSyntaxProvider(); var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.SqlCe); - var sqlContext = new SqlContext(_sqlSyntax, Mock.Of(), DatabaseType.SQLCe); + var sqlContext = new SqlContext(_sqlSyntax, DatabaseType.SQLCe, Mock.Of()); _database = new UmbracoDatabase("cstr", sqlContext, dbProviderFactory, _logger); _migrationContext = new MigrationContext(_database, _logger); } diff --git a/src/Umbraco.Tests/Migrations/Upgrades/MySqlUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/MySqlUpgradeTest.cs index 56baa9ed9f..a8fbb2f3fc 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/MySqlUpgradeTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/MySqlUpgradeTest.cs @@ -25,7 +25,7 @@ namespace Umbraco.Tests.Migrations.Upgrades public override IUmbracoDatabase GetConfiguredDatabase() { var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.MySql); - var sqlContext = new SqlContext(new MySqlSyntaxProvider(Mock.Of()), Mock.Of(), DatabaseType.MySQL); + var sqlContext = new SqlContext(new MySqlSyntaxProvider(Mock.Of()), DatabaseType.MySQL, Mock.Of()); return new UmbracoDatabase("Server = 169.254.120.3; Database = upgradetest; Uid = umbraco; Pwd = umbraco", sqlContext, dbProviderFactory, Mock.Of()); } diff --git a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs index 971b6b433e..be91ebca1f 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs @@ -64,7 +64,7 @@ namespace Umbraco.Tests.Migrations.Upgrades public override IUmbracoDatabase GetConfiguredDatabase() { var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.SqlCe); - var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), Mock.Of(), DatabaseType.SQLCe); + var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of()); return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoNPocoTests.sdf;Flush Interval=1;", sqlContext, dbProviderFactory, Mock.Of()); } diff --git a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs index ef467c241c..7cdd258c33 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs @@ -68,7 +68,7 @@ namespace Umbraco.Tests.Migrations.Upgrades public override IUmbracoDatabase GetConfiguredDatabase() { var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.SqlCe); - var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), Mock.Of(), DatabaseType.SQLCe); + var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of()); return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoNPocoTests.sdf;Flush Interval=1;", sqlContext, dbProviderFactory, Mock.Of()); } diff --git a/src/Umbraco.Tests/Migrations/Upgrades/SqlServerUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/SqlServerUpgradeTest.cs index 80307078aa..a6daf041c7 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/SqlServerUpgradeTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/SqlServerUpgradeTest.cs @@ -22,7 +22,7 @@ namespace Umbraco.Tests.Migrations.Upgrades public override IUmbracoDatabase GetConfiguredDatabase() { var dbProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient"); - var sqlContext = new SqlContext(new SqlServerSyntaxProvider(new Lazy(() => null)), Mock.Of(), DatabaseType.SqlServer2008); + var sqlContext = new SqlContext(new SqlServerSyntaxProvider(new Lazy(() => null)), DatabaseType.SqlServer2008, Mock.Of()); return new UmbracoDatabase(@"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco", sqlContext, dbProviderFactory, Mock.Of()); } diff --git a/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs index 1bc7c16236..17cf0c6d10 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs @@ -99,7 +99,7 @@ namespace Umbraco.Tests.Migrations.Upgrades public IUmbracoDatabase GetConfiguredDatabase() { var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.SqlCe); - var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), Mock.Of(), DatabaseType.SQLCe); + var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of()); return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoNPocoTests.sdf;Flush Interval=1;", sqlContext, dbProviderFactory, Mock.Of()); } diff --git a/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7UpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7UpgradeTest.cs index 2999e8d7eb..670ed3b58f 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7UpgradeTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7UpgradeTest.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.Migrations.Upgrades _sqlSyntax = new SqlCeSyntaxProvider(); var dbProviderFactory = DbProviderFactories.GetFactory(Constants.DbProviderNames.SqlCe); - var sqlContext = new SqlContext(_sqlSyntax, Mock.Of(), DatabaseType.SQLCe); + var sqlContext = new SqlContext(_sqlSyntax, DatabaseType.SQLCe, Mock.Of()); _database = new UmbracoDatabase("cstr", sqlContext, dbProviderFactory, _logger); } diff --git a/src/Umbraco.Tests/Persistence/NPocoTests/NPocoFetchTests.cs b/src/Umbraco.Tests/Persistence/NPocoTests/NPocoFetchTests.cs index e84c627692..5b8806bc39 100644 --- a/src/Umbraco.Tests/Persistence/NPocoTests/NPocoFetchTests.cs +++ b/src/Umbraco.Tests/Persistence/NPocoTests/NPocoFetchTests.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; -using LightInject; using NPoco; using NUnit.Framework; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Core.Scoping; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; @@ -137,9 +134,16 @@ namespace Umbraco.Tests.Persistence.NPocoTests using (var scope = ScopeProvider.CreateScope()) { - var dtos = scope.Database.Fetch(@" - SELECT zbThing1.id, zbThing1.name - FROM zbThing1"); + // this is the raw SQL, but it's better to use expressions and no magic strings! + //var sql = @" + // SELECT zbThing1.id, zbThing1.name + // FROM zbThing1"; + + var sql = scope.SqlContext.Sql() + .Select() + .From(); + + var dtos = scope.Database.Fetch(sql); Assert.AreEqual(2, dtos.Count); Assert.AreEqual("one", dtos.First(x => x.Id == 1).Name); } @@ -153,11 +157,19 @@ namespace Umbraco.Tests.Persistence.NPocoTests using (var scope = ScopeProvider.CreateScope()) { - var dtos = scope.Database.Fetch(@" - SELECT zbThing2.id, zbThing2.name, zbThing2.thingId, - zbThing1.id Thing__id, zbThing1.name Thing__name - FROM zbThing2 - JOIN zbThing1 ON zbThing2.thingId=zbThing1.id"); + // this is the raw SQL, but it's better to use expressions and no magic strings! + //var sql = @" + // SELECT zbThing2.id, zbThing2.name, zbThing2.thingId, + // zbThing1.id Thing__id, zbThing1.name Thing__name + // FROM zbThing2 + // JOIN zbThing1 ON zbThing2.thingId=zbThing1.id"; + + var sql = scope.SqlContext.Sql() + .Select(r => r.Select(x => x.Thing)) + .From() + .InnerJoin().On((t2, t1) => t2.ThingId == t1.Id); + + var dtos = scope.Database.Fetch(sql); Assert.AreEqual(3, dtos.Count); Assert.AreEqual("uno", dtos.First(x => x.Id == 1).Name); Assert.IsNotNull(dtos.First(x => x.Id == 1).Thing); @@ -183,7 +195,7 @@ namespace Umbraco.Tests.Persistence.NPocoTests // JOIN zbThing2 ON zbThing1.id=zbThing2.thingId // WHERE zbThing1.id=1"); - var sql = scope.DatabaseContext.Sql() + var sql = scope.SqlContext.Sql() .Select(r => r.Select(x => x.Things)) .From() .InnerJoin().On(left => left.Id, right => right.ThingId) @@ -225,15 +237,13 @@ namespace Umbraco.Tests.Persistence.NPocoTests // JOIN zbThing2 ON zbThing1.id=zbThing2.thingId // ORDER BY zbThing1.id"; - var sql = scope.DatabaseContext.Sql() + var sql = scope.SqlContext.Sql() .Select(r => r.Select(x => x.Things)) // select Thing3Dto, and Thing2Dto for Things .From() .InnerJoin().On(left => left.Id, right => right.ThingId) .OrderBy(x => x.Id); - // one-to-many on Things, using Id as the 'one' key - not needed since it's PK - //var dtos = scope.Database.FetchOneToMany(x => x.Things, x => x.Id, sql); - var dtos = scope.Database.FetchOneToMany(x => x.Things, sql); + var dtos = scope.Database.FetchOneToMany(x => x.Things, /*x => x.Id,*/ sql); Assert.AreEqual(2, dtos.Count); var dto1 = dtos.FirstOrDefault(x => x.Id == 1); @@ -250,25 +260,20 @@ namespace Umbraco.Tests.Persistence.NPocoTests [Test] public void TestOneToManyOnManyTemplate() { - // same as above with a template - SqlTemplate.Clear(); - using (var scope = ScopeProvider.CreateScope()) { - SqlTemplate.SqlContext = scope.DatabaseContext.Sql().SqlContext; // fixme + scope.SqlContext.Templates.Clear(); - var sql = SqlTemplate.Get("xxx", s => s + var sql = scope.SqlContext.Templates.Get("xxx", s => s .Select(r => r.Select(x => x.Things)) // select Thing3Dto, and Thing2Dto for Things .From() .InnerJoin().On(left => left.Id, right => right.ThingId) .OrderBy(x => x.Id)).Sql(); // cached - sql = SqlTemplate.Get("xxx", s => throw new InvalidOperationException()).Sql(); + sql = scope.SqlContext.Templates.Get("xxx", s => throw new InvalidOperationException()).Sql(); - // one-to-many on Things, using Id as the 'one' key - not needed since it's PK - //var dtos = scope.Database.FetchOneToMany(x => x.Things, x => x.Id, sql); - var dtos = scope.Database.FetchOneToMany(x => x.Things, sql); + var dtos = scope.Database.FetchOneToMany(x => x.Things, /*x => x.Id,*/ sql); Assert.AreEqual(2, dtos.Count); var dto1 = dtos.FirstOrDefault(x => x.Id == 1); @@ -294,12 +299,23 @@ namespace Umbraco.Tests.Persistence.NPocoTests using (var scope = ScopeProvider.CreateScope()) { - var dtos = scope.Database.FetchOneToMany(x => x.Groups, x => x.Id, @" - SELECT zbThing1.id, zbThing1.name, zbThingGroup.id, zbThingGroup.name - FROM zbThing1 - JOIN zbThing2Group ON zbThing1.id=zbThing2Group.thingId - JOIN zbThingGroup ON zbThing2Group.groupId=zbThingGroup.id - ORDER BY zbThing1.id"); + // this is the raw SQL, but it's better to use expressions and no magic strings! + //var sql = @" + // SELECT zbThing1.id, zbThing1.name, zbThingGroup.id, zbThingGroup.name + // FROM zbThing1 + // JOIN zbThing2Group ON zbThing1.id=zbThing2Group.thingId + // JOIN zbThingGroup ON zbThing2Group.groupId=zbThingGroup.id + // ORDER BY zbThing1.id"; + + var sql = scope.SqlContext.Sql() + .Select(r => r.Select(x => x.Groups)) + .From() + .InnerJoin().On((t, t2g) => t.Id == t2g.ThingId) + .InnerJoin().On((t2g, tg) => t2g.GroupId == tg.Id) + .OrderBy(x => x.Id); + + var dtos = scope.Database.FetchOneToMany(x => x.Groups, /*x => x.Id,*/ sql); + Assert.AreEqual(2, dtos.Count); var dto1 = dtos.FirstOrDefault(x => x.Id == 1); Assert.IsNotNull(dto1); @@ -320,11 +336,22 @@ namespace Umbraco.Tests.Persistence.NPocoTests using (var scope = ScopeProvider.CreateScope()) { - var dtos = scope.Database.Fetch(@" - SELECT zbThing1.id, zbThing1.name, COUNT(zbThing2Group.groupId) as groupCount - FROM zbThing1 - JOIN zbThing2Group ON zbThing1.id=zbThing2Group.thingId - GROUP BY zbThing1.id, zbThing1.name"); + // this is the raw SQL, but it's better to use expressions and no magic strings! + //var sql = @" + // SELECT zbThing1.id, zbThing1.name, COUNT(zbThing2Group.groupId) as groupCount + // FROM zbThing1 + // JOIN zbThing2Group ON zbThing1.id=zbThing2Group.thingId + // GROUP BY zbThing1.id, zbThing1.name"; + + var sql = scope.SqlContext.Sql() + .Select() + .Append(", COUNT(zbThing2Group.groupId) AS groupCount") // fixme + .From() + .InnerJoin().On((t, t2g) => t.Id == t2g.ThingId) + .GroupBy(x => x.Id, x => x.Name); + + var dtos = scope.Database.Fetch(sql); + Assert.AreEqual(2, dtos.Count); var dto1 = dtos.FirstOrDefault(x => x.Id == 1); Assert.IsNotNull(dto1); @@ -346,10 +373,11 @@ namespace Umbraco.Tests.Persistence.NPocoTests { using (var scope = ScopeProvider.CreateScope()) { - var sql = new Sql() - .Select("*") - .From("zbThing1") - .Where("id=@id", new { id = 1 }); + var sql = scope.SqlContext.Sql() + .SelectAll() + .From() + .Where(x => x.Id == 1); + sql.WriteToConsole(); var dto = scope.Database.Fetch(sql).FirstOrDefault(); Assert.IsNotNull(dto); diff --git a/src/Umbraco.Tests/Persistence/NPocoTests/NPocoExpressionsTests.cs b/src/Umbraco.Tests/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs similarity index 98% rename from src/Umbraco.Tests/Persistence/NPocoTests/NPocoExpressionsTests.cs rename to src/Umbraco.Tests/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs index aaddc46e9b..4132810d8e 100644 --- a/src/Umbraco.Tests/Persistence/NPocoTests/NPocoExpressionsTests.cs +++ b/src/Umbraco.Tests/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs @@ -8,7 +8,7 @@ using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Persistence.NPocoTests { [TestFixture] - public class NPocoExpressionsTests : BaseUsingSqlCeSyntax + public class NPocoSqlExtensionsTests : BaseUsingSqlCeSyntax { [Test] public void WhereInValueFieldTest() diff --git a/src/Umbraco.Tests/Persistence/NPocoTests/NPocoSqlTemplateTests.cs b/src/Umbraco.Tests/Persistence/NPocoTests/NPocoSqlTemplateTests.cs index d930684811..682dad65e3 100644 --- a/src/Umbraco.Tests/Persistence/NPocoTests/NPocoSqlTemplateTests.cs +++ b/src/Umbraco.Tests/Persistence/NPocoTests/NPocoSqlTemplateTests.cs @@ -13,25 +13,25 @@ namespace Umbraco.Tests.Persistence.NPocoTests [Test] public void TestSqlTemplates() { - SqlTemplate.Clear(); - SqlTemplate.SqlContext = new SqlContext(new SqlCeSyntaxProvider(), Mock.Of(), DatabaseType.SQLCe); + var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of()); + var sqlTemplates = new SqlTemplates(sqlContext); // this can be used for queries that we know we'll use a *lot* and // want to cache as a (static) template for ever, and ever - note // that using a MemoryCache would allow us to set a size limit, or // something equivalent, to reduce risk of memory explosion - var sql = SqlTemplate.Get("xxx", s => s - .Select("*") + var sql = sqlTemplates.Get("xxx", s => s + .SelectAll() .From("zbThing1") .Where("id=@id", new { id = "id" })).SqlNamed(new { id = 1 }); sql.WriteToConsole(); - var sql2 = SqlTemplate.Get("xxx", x => throw new InvalidOperationException("Should be cached.")).Sql(1); + var sql2 = sqlTemplates.Get("xxx", x => throw new InvalidOperationException("Should be cached.")).Sql(1); sql2.WriteToConsole(); - var sql3 = SqlTemplate.Get("xxx", x => throw new InvalidOperationException("Should be cached.")).SqlNamed(new { id = 1 }); + var sql3 = sqlTemplates.Get("xxx", x => throw new InvalidOperationException("Should be cached.")).SqlNamed(new { id = 1 }); sql3.WriteToConsole(); } diff --git a/src/Umbraco.Tests/Persistence/Querying/ExpressionTests.cs b/src/Umbraco.Tests/Persistence/Querying/ExpressionTests.cs index 2e7c3abcfd..7fc6201bb9 100644 --- a/src/Umbraco.Tests/Persistence/Querying/ExpressionTests.cs +++ b/src/Umbraco.Tests/Persistence/Querying/ExpressionTests.cs @@ -149,7 +149,7 @@ namespace Umbraco.Tests.Persistence.Querying { //mysql escapes backslashes, so we'll test with that var sqlSyntax = new MySqlSyntaxProvider(Mock.Of()); - var sqlContext = new SqlContext(sqlSyntax, SqlContext.PocoDataFactory, DatabaseType.MySQL); + var sqlContext = new SqlContext(sqlSyntax, DatabaseType.MySQL, SqlContext.PocoDataFactory); Expression> predicate = user => user.Username.Equals("mydomain\\myuser"); var modelToSqlExpressionHelper = new ModelToSqlExpressionVisitor(sqlContext.SqlSyntax, Mappers); @@ -166,7 +166,7 @@ namespace Umbraco.Tests.Persistence.Querying { //mysql escapes backslashes, so we'll test with that var sqlSyntax = new MySqlSyntaxProvider(Mock.Of()); - var sqlContext = new SqlContext(sqlSyntax, SqlContext.PocoDataFactory, DatabaseType.MySQL); + var sqlContext = new SqlContext(sqlSyntax, DatabaseType.MySQL, SqlContext.PocoDataFactory); Expression> predicate = user => user.Login.StartsWith("mydomain\\myuser"); var modelToSqlExpressionHelper = new PocoToSqlExpressionVisitor(sqlContext); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index f6a096fb3f..d5cd4acfa6 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -155,7 +155,7 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual(2, versions.Distinct().Count()); - var content = repository.GetByQuery(unitOfWork.Query().Where(c => c.Id == content1.Id)).ToArray()[0]; + var content = repository.GetByQuery(unitOfWork.SqlContext.Query().Where(c => c.Id == content1.Id)).ToArray()[0]; Assert.AreEqual(versions[2], content.Version); content = repository.Get(content1.Id); @@ -214,7 +214,7 @@ namespace Umbraco.Tests.Persistence.Repositories TemplateId = content1.Template == null || content1.Template.Id <= 0 ? null : (int?)content1.Template.Id }); - var content = repository.GetByQuery(unitOfWork.Query().Where(c => c.Id == content1.Id)).ToArray(); + var content = repository.GetByQuery(unitOfWork.SqlContext.Query().Where(c => c.Id == content1.Id)).ToArray(); Assert.AreEqual(1, content.Length); Assert.AreEqual(content[0].Version, versionDtos.Single(x => x.Id == versionDtos.Max(y => y.Id)).VersionId); Assert.AreEqual(content[0].UpdateDate.ToString(CultureInfo.InvariantCulture), versionDtos.Single(x => x.Id == versionDtos.Max(y => y.Id)).VersionDate.ToString(CultureInfo.InvariantCulture)); @@ -610,7 +610,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); var result = repository.GetByQuery(query); // Assert @@ -673,7 +673,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Name.Contains("Text")); + var query = unitOfWork.SqlContext.Query().Where(x => x.Name.Contains("Text")); long totalRecords; try @@ -708,7 +708,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; try @@ -740,7 +740,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 1, 1, out totalRecords, "Name", Direction.Ascending, true); @@ -761,7 +761,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 2, out totalRecords, "Name", Direction.Ascending, true); @@ -782,7 +782,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "Name", Direction.Descending, true); @@ -803,11 +803,11 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; - var filterQuery = unitOfWork.Query().Where(x => x.Name.Contains("Page 2")); + var filterQuery = unitOfWork.SqlContext.Query().Where(x => x.Name.Contains("Page 2")); var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "Name", Direction.Ascending, true, filterQuery); // Assert @@ -827,11 +827,11 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; - var filterQuery = unitOfWork.Query().Where(x => x.Name.Contains("text")); + var filterQuery = unitOfWork.SqlContext.Query().Where(x => x.Name.Contains("text")); var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "Name", Direction.Ascending, true, filterQuery); // Assert @@ -921,7 +921,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act int level = 2; - var query = repository.QueryT.Where(x => x.Level == level); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == level); var result = repository.Count(query); // Assert @@ -960,7 +960,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.QueryT.Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); + var query = unitOfWork.SqlContext.Query().Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); var content = repository.GetByQuery(query).SingleOrDefault(); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index d002374b2a..2aca3d073e 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -558,7 +558,7 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Flush(); // Act - var contentTypes = repository.GetByQuery(repository.QueryT.Where(x => x.ParentId == contentType.Id)); + var contentTypes = repository.GetByQuery(unitOfWork.SqlContext.Query().Where(x => x.ParentId == contentType.Id)); // Assert Assert.That(contentTypes.Count(), Is.EqualTo(3)); diff --git a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs index 70066e7b1a..1e5f86bc6d 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs @@ -292,7 +292,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.PropertyEditorAlias == Constants.PropertyEditors.RadioButtonListAlias); + var query = unitOfWork.SqlContext.Query().Where(x => x.PropertyEditorAlias == Constants.PropertyEditors.RadioButtonListAlias); var result = repository.GetByQuery(query); // Assert @@ -312,7 +312,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.Name.StartsWith("D")); + var query = unitOfWork.SqlContext.Query().Where(x => x.Name.StartsWith("D")); int count = repository.Count(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs index 98afb80c13..133b00bec1 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs @@ -200,7 +200,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.ItemKey == "Article"); + var query = unitOfWork.SqlContext.Query().Where(x => x.ItemKey == "Article"); var result = repository.GetByQuery(query); // Assert @@ -220,7 +220,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.ItemKey.StartsWith("Read")); + var query = unitOfWork.SqlContext.Query().Where(x => x.ItemKey.StartsWith("Read")); var result = repository.Count(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs index b8ec0b8b17..1f69737e27 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs @@ -176,7 +176,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.IsoCode == "da-DK"); + var query = unitOfWork.SqlContext.Query().Where(x => x.IsoCode == "da-DK"); var result = repository.GetByQuery(query); // Assert @@ -196,7 +196,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.IsoCode.StartsWith("D")); + var query = unitOfWork.SqlContext.Query().Where(x => x.IsoCode.StartsWith("D")); int count = repository.Count(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs index 6e5eabb059..7114bc70ac 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MacroRepositoryTest.cs @@ -134,7 +134,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = new MacroRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); // Act - var query = unitOfWork.Query().Where(x => x.Alias.ToUpper() == "TEST1"); + var query = unitOfWork.SqlContext.Query().Where(x => x.Alias.ToUpper() == "TEST1"); var result = repository.GetByQuery(query); // Assert @@ -152,7 +152,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = new MacroRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); // Act - var query = unitOfWork.Query().Where(x => x.Name.StartsWith("Test")); + var query = unitOfWork.SqlContext.Query().Where(x => x.Name.StartsWith("Test")); int count = repository.Count(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs index 60c1aaae82..da6d96e1ff 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs @@ -52,8 +52,8 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeUnitOfWorkProvider(Logger); using (var unitOfWork = provider.CreateUnitOfWork()) { - var repository = CreateRepository(unitOfWork, out mediaTypeRepository, cacheHelper: realCache); - + var repository = CreateRepository(unitOfWork, out mediaTypeRepository, cacheHelper: realCache); + var udb = (UmbracoDatabase)unitOfWork.Database; udb.EnableSqlCount = false; @@ -282,7 +282,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); var result = repository.GetByQuery(query); // Assert @@ -309,7 +309,7 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Flush(); var types = new[] { 1031 }; - var query = unitOfWork.Query().Where(x => types.Contains(x.ContentTypeId)); + var query = unitOfWork.SqlContext.Query().Where(x => types.Contains(x.ContentTypeId)); var result = repository.GetByQuery(query); // Assert @@ -337,7 +337,7 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Flush(); var types = new[] { "Folder" }; - var query = unitOfWork.Query().Where(x => types.Contains(x.ContentType.Alias)); + var query = unitOfWork.SqlContext.Query().Where(x => types.Contains(x.ContentType.Alias)); var result = repository.GetByQuery(query); // Assert @@ -355,7 +355,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out MediaTypeRepository mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "SortOrder", Direction.Ascending, true); @@ -377,7 +377,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 1, 1, out totalRecords, "SortOrder", Direction.Ascending, true); @@ -399,7 +399,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 2, out totalRecords, "SortOrder", Direction.Ascending, true); @@ -421,7 +421,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "SortOrder", Direction.Descending, true); @@ -443,7 +443,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "Name", Direction.Ascending, true); @@ -465,10 +465,10 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; - var filter = unitOfWork.Query().Where(x => x.Name.Contains("File")); + var filter = unitOfWork.SqlContext.Query().Where(x => x.Name.Contains("File")); var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "SortOrder", Direction.Ascending, true, filter); // Assert @@ -489,10 +489,10 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out mediaTypeRepository); // Act - var query = unitOfWork.Query().Where(x => x.Level == 2); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == 2); long totalRecords; - var filter = unitOfWork.Query().Where(x => x.Name.Contains("Test")); + var filter = unitOfWork.SqlContext.Query().Where(x => x.Name.Contains("Test")); var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "SortOrder", Direction.Ascending, true, filter); // Assert @@ -586,7 +586,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Act int level = 2; - var query = unitOfWork.Query().Where(x => x.Level == level); + var query = unitOfWork.SqlContext.Query().Where(x => x.Level == level); var result = repository.Count(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs index 09957fea76..f75be7cc1a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs @@ -116,7 +116,7 @@ namespace Umbraco.Tests.Persistence.Repositories var member = CreateTestMember(key: key); // Act - var query = unitOfWork.Query().Where(x => x.Key == key); + var query = unitOfWork.SqlContext.Query().Where(x => x.Key == key); var result = repository.GetByQuery(query); // Assert @@ -251,7 +251,7 @@ namespace Umbraco.Tests.Persistence.Repositories { var provider = TestObjects.GetScopeUnitOfWorkProvider(Logger); - var query = provider.DatabaseContext.Query().Where(x => + var query = provider.SqlContext.Query().Where(x => ((Member) x).LongStringPropertyValue.Contains("1095") && ((Member) x).PropertyTypeAlias == "headshot"); @@ -312,7 +312,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeUnitOfWorkProvider(Logger); if (isCount) { - var sqlCount = provider.DatabaseContext.Sql() + var sqlCount = provider.SqlContext.Sql() .SelectCount() .From() .InnerJoin().On(left => left.NodeId, right => right.NodeId) @@ -323,7 +323,7 @@ namespace Umbraco.Tests.Persistence.Repositories return sqlCount; } - var sql = provider.DatabaseContext.Sql(); + var sql = provider.SqlContext.Sql(); sql.Select("umbracoNode.*", "cmsContent.contentType", "cmsContentType.alias AS ContentTypeAlias", "cmsContentVersion.VersionId", "cmsContentVersion.VersionDate", "cmsMember.Email", "cmsMember.LoginName", "cmsMember.Password", "cmsPropertyData.id AS PropertyDataId", "cmsPropertyData.propertytypeid", @@ -348,7 +348,7 @@ namespace Umbraco.Tests.Persistence.Repositories private Sql GetSubquery() { var provider = TestObjects.GetScopeUnitOfWorkProvider(Logger); - var sql = provider.DatabaseContext.Sql(); + var sql = provider.SqlContext.Sql(); sql.Select("umbracoNode.id") .From() .InnerJoin().On(left => left.NodeId, right => right.NodeId) diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs index 5d6f54dbff..c04e702461 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs @@ -197,7 +197,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out repositoryType); // Act - var query = unitOfWork.Query().Where(x => x.ParentId == NodeDto.NodeIdSeed + 1); + var query = unitOfWork.SqlContext.Query().Where(x => x.ParentId == NodeDto.NodeIdSeed + 1); int count = repository.Count(query); // Assert @@ -216,7 +216,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out repositoryType); // Act - var query = unitOfWork.Query().Where(x => x.RelationTypeId == RelationTypeDto.NodeIdSeed); + var query = unitOfWork.SqlContext.Query().Where(x => x.RelationTypeId == RelationTypeDto.NodeIdSeed); var relations = repository.GetByQuery(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs index eb7a5652c1..e6c8e33478 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs @@ -190,7 +190,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.Alias.StartsWith("relate")); + var query = unitOfWork.SqlContext.Query().Where(x => x.Alias.StartsWith("relate")); int count = repository.Count(query); // Assert @@ -209,7 +209,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Act var childObjType = Constants.ObjectTypes.DocumentType; - var query = unitOfWork.Query().Where(x => x.ChildObjectType == childObjType); + var query = unitOfWork.SqlContext.Query().Where(x => x.ChildObjectType == childObjType); var result = repository.GetByQuery(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserGroupRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserGroupRepositoryTest.cs index 642beecd24..7b018a3eb7 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserGroupRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserGroupRepositoryTest.cs @@ -179,7 +179,7 @@ namespace Umbraco.Tests.Persistence.Repositories CreateAndCommitMultipleUserGroups(repository, unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.Alias == "testUserGroup1"); + var query = unitOfWork.SqlContext.Query().Where(x => x.Alias == "testUserGroup1"); var result = repository.GetByQuery(query); // Assert @@ -260,7 +260,7 @@ namespace Umbraco.Tests.Persistence.Repositories var userGroups = CreateAndCommitMultipleUserGroups(repository, unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.Alias == "testUserGroup1" || x.Alias == "testUserGroup2"); + var query = unitOfWork.SqlContext.Query().Where(x => x.Alias == "testUserGroup1" || x.Alias == "testUserGroup2"); var result = repository.Count(query); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs index 3091b9f212..05e86dec1f 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs @@ -211,7 +211,7 @@ namespace Umbraco.Tests.Persistence.Repositories } } - [Test] + [Test] [Ignore("has bugs")] public void Can_Perform_Get_On_UserRepository() { @@ -225,10 +225,10 @@ namespace Umbraco.Tests.Persistence.Repositories var user = CreateAndCommitUserWithGroup(repository, userGroupRepository, unitOfWork); // Act - var updatedItem = repository.Get(user.Id); - - // fixme - // this test cannot work, user has 2 sections but the way it's created, + var updatedItem = repository.Get(user.Id); + + // fixme + // this test cannot work, user has 2 sections but the way it's created, // they don't show, so the comparison with updatedItem fails - fix! // Assert @@ -248,7 +248,7 @@ namespace Umbraco.Tests.Persistence.Repositories CreateAndCommitMultipleUsers(repository, unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.Username == "TestUser1"); + var query = unitOfWork.SqlContext.Query().Where(x => x.Username == "TestUser1"); var result = repository.GetByQuery(query); // Assert @@ -329,7 +329,7 @@ namespace Umbraco.Tests.Persistence.Repositories var users = CreateAndCommitMultipleUsers(repository, unitOfWork); // Act - var query = unitOfWork.Query().Where(x => x.Username == "TestUser1" || x.Username == "TestUser2"); + var query = unitOfWork.SqlContext.Query().Where(x => x.Username == "TestUser1" || x.Username == "TestUser2"); var result = repository.Count(query); // Assert diff --git a/src/Umbraco.Tests/Services/MemberServiceTests.cs b/src/Umbraco.Tests/Services/MemberServiceTests.cs index 6eb0ec0ab7..a3d740bab0 100644 --- a/src/Umbraco.Tests/Services/MemberServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs @@ -1135,7 +1135,7 @@ namespace Umbraco.Tests.Services result.LastLoginDate.TruncateTo(DateTimeExtensions.DateTruncate.Second)); //now ensure the col is correct - var sql = Current.DatabaseContext.Sql().Select("cmsPropertyData.*") + var sql = Current.SqlContext.Sql().Select("cmsPropertyData.*") .From() .InnerJoin() .On(dto => dto.PropertyTypeId, dto => dto.Id) diff --git a/src/Umbraco.Tests/Services/PerformanceTests.cs b/src/Umbraco.Tests/Services/PerformanceTests.cs index 51f6d4c920..375b0c409f 100644 --- a/src/Umbraco.Tests/Services/PerformanceTests.cs +++ b/src/Umbraco.Tests/Services/PerformanceTests.cs @@ -298,7 +298,7 @@ namespace Umbraco.Tests.Services scope.Database.BulkInsertRecordsWithTransaction(nodes); //re-get the nodes with ids - var sql = Current.DatabaseContext.Sql(); + var sql = Current.SqlContext.Sql(); sql.SelectAll().From().Where(x => x.NodeObjectType == customObjectType); nodes = scope.Database.Fetch(sql); diff --git a/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs b/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs index 8a0fe2f323..ad319e85e7 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs @@ -49,8 +49,8 @@ namespace Umbraco.Tests.TestHelpers Mappers = container.GetInstance(); var pocoMappers = new NPoco.MapperCollection { new PocoMapper() }; - var pocoDataFactory = new FluentPocoDataFactory((type, iPocoDataFactory) => new PocoDataBuilder(type, pocoMappers).Init()); - SqlContext = new SqlContext(sqlSyntax, pocoDataFactory, DatabaseType.SQLCe, Mappers); + var pocoDataFactory = new FluentPocoDataFactory((type, iPocoDataFactory) => new PocoDataBuilder(type, pocoMappers).Init()); + SqlContext = new SqlContext(sqlSyntax, DatabaseType.SQLCe, pocoDataFactory, Mappers); SetUp(); } diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 83e0babf64..c609b57b6f 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -61,7 +61,7 @@ namespace Umbraco.Tests.TestHelpers { var syntax = new SqlCeSyntaxProvider(); var connection = GetDbConnection(); - var sqlContext = new SqlContext(syntax, Mock.Of(), DatabaseType.SQLCe); + var sqlContext = new SqlContext(syntax, DatabaseType.SQLCe, Mock.Of()); return new UmbracoDatabase(connection, sqlContext, logger); } @@ -76,7 +76,7 @@ namespace Umbraco.Tests.TestHelpers { var syntax = new SqlServerSyntaxProvider(new Lazy(() => null)); // do NOT try to get the server's version! var connection = GetDbConnection(); - var sqlContext = new SqlContext(syntax, Mock.Of(), DatabaseType.SqlServer2008); + var sqlContext = new SqlContext(syntax, DatabaseType.SqlServer2008, Mock.Of()); return new UmbracoDatabase(connection, sqlContext, logger); } @@ -253,8 +253,7 @@ namespace Umbraco.Tests.TestHelpers scopeProvider = new ScopeProvider(databaseFactory, fileSystems, logger); } repositoryFactory = repositoryFactory ?? new RepositoryFactory(Mock.Of()); - IDatabaseContext databaseContext = databaseFactory; - return new ScopeUnitOfWorkProvider(scopeProvider, databaseContext, repositoryFactory); + return new ScopeUnitOfWorkProvider(scopeProvider, databaseFactory.SqlContext, repositoryFactory); } } } diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 61fe940d17..460df474cf 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -287,7 +287,7 @@ namespace Umbraco.Tests.Testing sqlSyntaxProviders, Logger, Mock.Of())); - Container.RegisterSingleton(f => f.TryGetInstance()); + Container.RegisterSingleton(f => f.TryGetInstance().SqlContext); Container.RegisterCollectionBuilder(); // empty Container.RegisterSingleton(factory => new FileSystems(factory.TryGetInstance())); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 6440fb3d3a..cfcafe3d72 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -229,7 +229,6 @@ - @@ -261,7 +260,7 @@ - + diff --git a/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs b/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs index 6b57e7f3ea..c18fbc8645 100644 --- a/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs +++ b/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs @@ -26,9 +26,9 @@ namespace Umbraco.Web private readonly IUmbracoDatabaseFactory _databaseFactory; public BatchedDatabaseServerMessenger( - IRuntimeState runtime, IUmbracoDatabaseFactory databaseFactory, IScopeProvider scopeProvider, IDatabaseContext databaseContext, ILogger logger, ProfilingLogger proflog, + IRuntimeState runtime, IUmbracoDatabaseFactory databaseFactory, IScopeProvider scopeProvider, ISqlContext sqlContext, ILogger logger, ProfilingLogger proflog, bool enableDistCalls, DatabaseServerMessengerOptions options) - : base(runtime, scopeProvider, databaseContext, logger, proflog, enableDistCalls, options) + : base(runtime, scopeProvider, sqlContext, logger, proflog, enableDistCalls, options) { _databaseFactory = databaseFactory; } diff --git a/src/Umbraco.Web/Composing/Current.cs b/src/Umbraco.Web/Composing/Current.cs index cc28e41f22..86c4bb1678 100644 --- a/src/Umbraco.Web/Composing/Current.cs +++ b/src/Umbraco.Web/Composing/Current.cs @@ -257,7 +257,7 @@ namespace Umbraco.Web.Composing public static FileSystems FileSystems => CoreCurrent.FileSystems; - public static IDatabaseContext DatabaseContext => CoreCurrent.DatabaseContext; + public static ISqlContext SqlContext=> CoreCurrent.SqlContext; #endregion } diff --git a/src/Umbraco.Web/Editors/ContentController.cs b/src/Umbraco.Web/Editors/ContentController.cs index 1039376c75..543abb1c02 100644 --- a/src/Umbraco.Web/Editors/ContentController.cs +++ b/src/Umbraco.Web/Editors/ContentController.cs @@ -387,7 +387,7 @@ namespace Umbraco.Web.Editors if (filter.IsNullOrWhiteSpace() == false) { //add the default text filter - queryFilter = DatabaseContext.Query() + queryFilter = SqlContext.Query() .Where(x => x.Name.Contains(filter)); } diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index a034790d40..92eec6fac4 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -280,7 +280,7 @@ namespace Umbraco.Web.Editors if (filter.IsNullOrWhiteSpace() == false) { //add the default text filter - queryFilter = DatabaseContext.Query() + queryFilter = SqlContext.Query() .Where(x => x.Name.Contains(filter)); } @@ -676,7 +676,7 @@ namespace Umbraco.Web.Editors new Dictionary(), Security.CurrentUser, Services.MediaService, - Services.EntityService, + Services.EntityService, parentId) == false) { return Request.CreateResponse( @@ -898,7 +898,7 @@ namespace Umbraco.Web.Editors if (storage == null) throw new ArgumentNullException("storage"); if (user == null) throw new ArgumentNullException("user"); if (mediaService == null) throw new ArgumentNullException("mediaService"); - if (entityService == null) throw new ArgumentNullException("entityService"); + if (entityService == null) throw new ArgumentNullException("entityService"); if (media == null && nodeId != Constants.System.Root && nodeId != Constants.System.RecycleBinMedia) { @@ -911,7 +911,7 @@ namespace Umbraco.Web.Editors if (media == null && nodeId != Constants.System.Root && nodeId != Constants.System.RecycleBinMedia) { throw new HttpResponseException(HttpStatusCode.NotFound); - } + } var hasPathAccess = (nodeId == Constants.System.Root) ? user.HasMediaRootAccess(entityService) diff --git a/src/Umbraco.Web/Editors/UsersController.cs b/src/Umbraco.Web/Editors/UsersController.cs index 3437406262..368967b138 100644 --- a/src/Umbraco.Web/Editors/UsersController.cs +++ b/src/Umbraco.Web/Editors/UsersController.cs @@ -200,7 +200,7 @@ namespace Umbraco.Web.Editors excludeUserGroups = new[] {Constants.Security.AdminGroupAlias}; } - var filterQuery = Current.DatabaseContext.Query(); + var filterQuery = Current.SqlContext.Query(); //if the current user is not the administrator, then don't include this in the results. var isAdminUser = Security.CurrentUser.Id == 0; diff --git a/src/Umbraco.Web/Install/InstallHelper.cs b/src/Umbraco.Web/Install/InstallHelper.cs index 379a11c8cd..771b8a3b51 100644 --- a/src/Umbraco.Web/Install/InstallHelper.cs +++ b/src/Umbraco.Web/Install/InstallHelper.cs @@ -46,7 +46,7 @@ namespace Umbraco.Web.Install new NewInstallStep(_httpContext, Current.Services.UserService, _databaseBuilder), new UpgradeStep(_databaseBuilder), new FilePermissionsStep(), - new MajorVersion7UpgradeReport(_databaseBuilder, Current.RuntimeState, Current.DatabaseContext, Current.ScopeProvider), + new MajorVersion7UpgradeReport(_databaseBuilder, Current.RuntimeState, Current.SqlContext, Current.ScopeProvider), new Version73FileCleanup(_httpContext, _logger), new ConfigureMachineKey(), new DatabaseConfigureStep(_databaseBuilder), @@ -124,7 +124,7 @@ namespace Umbraco.Web.Install { // we don't have DatabaseProvider anymore... doing it differently //dbProvider = ApplicationContext.Current.DatabaseContext.DatabaseProvider.ToString(); - dbProvider = GetDbProviderString(Current.DatabaseContext); + dbProvider = GetDbProviderString(Current.SqlContext); } var check = new org.umbraco.update.CheckForUpgrade(); @@ -146,7 +146,7 @@ namespace Umbraco.Web.Install } } - internal static string GetDbProviderString(IDatabaseContext databaseContext) + internal static string GetDbProviderString(ISqlContext sqlContext) { var dbProvider = string.Empty; @@ -154,7 +154,7 @@ namespace Umbraco.Web.Install //dbProvider = ApplicationContext.Current.DatabaseContext.DatabaseProvider.ToString(); // // doing it differently - var syntax = databaseContext.SqlSyntax; + var syntax = sqlContext.SqlSyntax; if (syntax is SqlCeSyntaxProvider) dbProvider = "SqlServerCE"; else if (syntax is MySqlSyntaxProvider) diff --git a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs index fefbfce9c1..f257f61b08 100644 --- a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs +++ b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs @@ -5,10 +5,10 @@ using NPoco; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.PropertyEditors; using Umbraco.Web.Install.Models; using Umbraco.Core.Scoping; -using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Web.Composing; namespace Umbraco.Web.Install.InstallSteps @@ -17,15 +17,15 @@ namespace Umbraco.Web.Install.InstallSteps internal class MajorVersion7UpgradeReport : InstallSetupStep { private readonly DatabaseBuilder _databaseBuilder; - private readonly IDatabaseContext _databaseContext; + private readonly ISqlContext _sqlContext; private readonly IScopeProvider _scopeProvider; private readonly IRuntimeState _runtime; - public MajorVersion7UpgradeReport(DatabaseBuilder databaseBuilder, IRuntimeState runtime, IDatabaseContext databaseContext, IScopeProvider scopeProvider) + public MajorVersion7UpgradeReport(DatabaseBuilder databaseBuilder, IRuntimeState runtime, ISqlContext sqlContext, IScopeProvider scopeProvider) { _databaseBuilder = databaseBuilder; _runtime = runtime; - _databaseContext = databaseContext; + _sqlContext = sqlContext; _scopeProvider = scopeProvider; } @@ -87,7 +87,7 @@ namespace Umbraco.Web.Install.InstallSteps { var errorReport = new List(); - var sqlSyntax = _databaseContext.SqlSyntax; + var sqlSyntax = _sqlContext.SqlSyntax; var sql = new Sql(); sql diff --git a/src/Umbraco.Web/PublishedCache/NuCache/DataSource/Database.cs b/src/Umbraco.Web/PublishedCache/NuCache/DataSource/Database.cs index 4bf2ab2a4d..7c5412a080 100644 --- a/src/Umbraco.Web/PublishedCache/NuCache/DataSource/Database.cs +++ b/src/Umbraco.Web/PublishedCache/NuCache/DataSource/Database.cs @@ -112,7 +112,7 @@ nuDraft.data DraftData, docPub.text PubName, docPub.versionId PubVersion, docPub.updateDate PubVersionDate, docPub.documentUser PubWriterId, docPub.templateId PubTemplateId, nuPub.data PubData FROM umbracoNode n -JOIN umbracoNode x ON (n.id=x.id OR n.path LIKE " + uow.SqlSyntax.GetConcat("x.path", "',%'") + @") +JOIN umbracoNode x ON (n.id=x.id OR n.path LIKE " + uow.SqlContext.SqlSyntax.GetConcat("x.path", "',%'") + @") JOIN cmsContent ON (cmsContent.nodeId=n.id) LEFT JOIN cmsDocument docDraft ON (docDraft.nodeId=n.id AND docDraft.newest=1 AND docDraft.published=0) LEFT JOIN cmsDocument docPub ON (docPub.nodeId=n.id AND docPub.published=1) @@ -135,7 +135,7 @@ n.createDate CreateDate, n.nodeUser CreatorId, n.text PubName, ver.versionId PubVersion, ver.versionDate PubVersionDate, nuPub.data PubData FROM umbracoNode n -JOIN umbracoNode x ON (n.id=x.id OR n.path LIKE " + uow.SqlSyntax.GetConcat("x.path", "',%'") + @") +JOIN umbracoNode x ON (n.id=x.id OR n.path LIKE " + uow.SqlContext.SqlSyntax.GetConcat("x.path", "',%'") + @") JOIN cmsContent ON (cmsContent.nodeId=n.id) JOIN cmsContentVersion ver ON (ver.contentId=n.id) LEFT JOIN cmsContentNu nuPub ON (nuPub.nodeId=n.id AND nuPub.published=1) diff --git a/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs b/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs index 216e8f97ca..3b2ecb5117 100644 --- a/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs +++ b/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs @@ -1260,7 +1260,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); - var query = _uowProvider.DatabaseContext.Query(); + var query = _uowProvider.SqlContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1331,7 +1331,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); - var query = _uowProvider.DatabaseContext.Query(); + var query = _uowProvider.SqlContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1392,7 +1392,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); - var query = _uowProvider.DatabaseContext.Query(); + var query = _uowProvider.SqlContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs index 4d353a3411..80b0c98cd4 100644 --- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs +++ b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs @@ -557,7 +557,7 @@ AND (umbracoNode.id=@id)"; using (var uow = _uowProvider.CreateUnitOfWork()) { uow.ReadLock(Constants.Locks.ContentTree); - var sqlSyntax = uow.SqlSyntax; + var sqlSyntax = uow.SqlContext.SqlSyntax; var sql = ReadCmsPreviewXmlSql1; sql += " @path LIKE " + sqlSyntax.GetConcat("umbracoNode.Path", "',%"); // concat(umbracoNode.path, ',%') @@ -1740,7 +1740,7 @@ WHERE cmsContentXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = _uowProvider.DatabaseContext.Query().Where(x => x.Published); + var query = _uowProvider.SqlContext.Query().Where(x => x.Published); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1813,7 +1813,7 @@ WHERE cmsPreviewXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = _uowProvider.DatabaseContext.Query(); + var query = _uowProvider.SqlContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1890,7 +1890,7 @@ WHERE cmsContentXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = _uowProvider.DatabaseContext.Query(); + var query = _uowProvider.SqlContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1961,7 +1961,7 @@ WHERE cmsContentXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = _uowProvider.DatabaseContext.Query(); + var query = _uowProvider.SqlContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) diff --git a/src/Umbraco.Web/Strategies/DatabaseServerRegistrarAndMessengerComponent.cs b/src/Umbraco.Web/Strategies/DatabaseServerRegistrarAndMessengerComponent.cs index 130ad6b0b3..890d300c4a 100644 --- a/src/Umbraco.Web/Strategies/DatabaseServerRegistrarAndMessengerComponent.cs +++ b/src/Umbraco.Web/Strategies/DatabaseServerRegistrarAndMessengerComponent.cs @@ -57,10 +57,10 @@ namespace Umbraco.Web.Strategies var logger = factory.GetInstance(); var proflog = factory.GetInstance(); var scopeProvider = factory.GetInstance(); - var databaseContext = factory.GetInstance(); + var sqlContext = factory.GetInstance(); return new BatchedDatabaseServerMessenger( - runtime, databaseFactory, scopeProvider, databaseContext, logger, proflog, + runtime, databaseFactory, scopeProvider, sqlContext, logger, proflog, true, //Default options for web including the required callbacks to build caches new DatabaseServerMessengerOptions diff --git a/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs b/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs index 88591b5983..5be87edd72 100644 --- a/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs +++ b/src/Umbraco.Web/Strategies/Migrations/ClearMediaXmlCacheForDeletedItemsAfterUpgrade.cs @@ -35,7 +35,7 @@ namespace Umbraco.Web.Strategies.Migrations //This query is structured to work with MySql, SQLCE and SqlServer: // http://issues.umbraco.org/issue/U4-3876 - var syntax = args.MigrationContext.SqlSyntax; + var syntax = args.MigrationContext.SqlContext.SqlSyntax; var sql = @"DELETE FROM cmsContentXml WHERE nodeId IN (SELECT nodeId FROM (SELECT DISTINCT cmsContentXml.nodeId FROM cmsContentXml diff --git a/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs b/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs index 78b5429e63..2fcdc8ff0e 100644 --- a/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs +++ b/src/Umbraco.Web/Strategies/Migrations/EnsureListViewDataTypeIsCreated.cs @@ -28,7 +28,7 @@ namespace Umbraco.Web.Strategies.Migrations private void EnsureListViewDataTypeCreated(MigrationEventArgs e) { - var syntax = e.MigrationContext.SqlSyntax; + var syntax = e.MigrationContext.SqlContext.SqlSyntax; using (var transaction = e.MigrationContext.Database.GetTransaction()) { diff --git a/src/Umbraco.Web/Strategies/Migrations/PublishAfterUpgradeToVersionSixth.cs b/src/Umbraco.Web/Strategies/Migrations/PublishAfterUpgradeToVersionSixth.cs index 258c16301a..b0e7e18394 100644 --- a/src/Umbraco.Web/Strategies/Migrations/PublishAfterUpgradeToVersionSixth.cs +++ b/src/Umbraco.Web/Strategies/Migrations/PublishAfterUpgradeToVersionSixth.cs @@ -23,7 +23,7 @@ namespace Umbraco.Web.Strategies.Migrations var target = new Version(6, 0, 0); if (args.ConfiguredVersion < target) { - var sql = args.MigrationContext.Sql() + var sql = args.MigrationContext.SqlContext.Sql() .SelectAll() .From() .InnerJoin() diff --git a/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs b/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs index 3170010788..99b3e0825e 100644 --- a/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs +++ b/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs @@ -37,10 +37,10 @@ namespace Umbraco.Web.WebApi public virtual UmbracoContext UmbracoContext { get; set; } /// - /// Gets or sets the database context. + /// Gets or sets the sql context. /// [Inject] - public IDatabaseContext DatabaseContext { get; set; } + public ISqlContext SqlContext { get; set; } /// /// Gets or sets the services context. diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs index c0f0354fe6..93877b34d7 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/umbracoField.aspx.cs @@ -53,7 +53,7 @@ namespace umbraco.dialogs { //exclude built-in memberhip properties from showing up here var exclude = Constants.Conventions.Member.GetStandardPropertyTypeStubs() - .Select(x => Current.DatabaseContext.SqlSyntax.GetQuotedValue(x.Key)).ToArray(); + .Select(x => Current.SqlContext.SqlSyntax.GetQuotedValue(x.Key)).ToArray(); fieldSql = string.Format( "select distinct alias from cmsPropertyType where alias not in ({0}) order by alias", diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CheckForUpgrade.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CheckForUpgrade.asmx.cs index 80bb346696..67b388ce56 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CheckForUpgrade.asmx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CheckForUpgrade.asmx.cs @@ -74,7 +74,7 @@ namespace umbraco.presentation.webservices string dbProvider = string.Empty; if (string.IsNullOrEmpty(global::Umbraco.Core.Configuration.GlobalSettings.ConfigurationStatus) == false) - dbProvider = InstallHelper.GetDbProviderString(Current.DatabaseContext); + dbProvider = InstallHelper.GetDbProviderString(Current.SqlContext); var check = new global::Umbraco.Web.org.umbraco.update.CheckForUpgrade(); check.Install(installId,