Refactor ISqlContext and SqlTemplates

This commit is contained in:
Stephan
2017-09-22 18:28:21 +02:00
parent c43bf6c741
commit ee1941b9bf
118 changed files with 619 additions and 619 deletions
+4 -4
View File
@@ -27,22 +27,22 @@ namespace Umbraco.Core
/// <summary>
/// Gets the database Sql syntax.
/// </summary>
public ISqlSyntaxProvider SqlSyntax => _databaseFactory.SqlSyntax;
public ISqlSyntaxProvider SqlSyntax => _databaseFactory.SqlContext.SqlSyntax;
/// <summary>
/// Creates a Sql statement.
/// </summary>
public Sql<SqlContext> Sql() => _databaseFactory.Sql();
public Sql<SqlContext> Sql() => _databaseFactory.SqlContext.Sql();
/// <summary>
/// Creates a Sql statement.
/// </summary>
public Sql<SqlContext> Sql(string sql, params object[] args) => _databaseFactory.Sql(sql, args);
public Sql<SqlContext> Sql(string sql, params object[] args) => _databaseFactory.SqlContext.Sql(sql, args);
/// <summary>
/// Creates a Query expression.
/// </summary>
public IQuery<T> Query<T>() => _databaseFactory.Query<T>();
public IQuery<T> Query<T>() => _databaseFactory.SqlContext.Query<T>();
/// <summary>
/// Gets an ambient database for doing CRUD operations against custom tables that resides in the Umbraco database.
+2 -2
View File
@@ -144,8 +144,8 @@ namespace Umbraco.Core.Composing
public static IScopeProvider ScopeProvider
=> Container.GetInstance<IScopeProvider>();
public static IDatabaseContext DatabaseContext
=> Container.GetInstance<IDatabaseContext>();
public static ISqlContext SqlContext
=> Container.GetInstance<ISqlContext>();
#endregion
}
+2 -2
View File
@@ -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<IUmbracoDatabaseFactory, UmbracoDatabaseFactory>();
container.RegisterSingleton<IDatabaseContext>(f => f.GetInstance<IUmbracoDatabaseFactory>());
container.RegisterSingleton(f => f.GetInstance<IUmbracoDatabaseFactory>().SqlContext);
// register the scope provider
container.RegisterSingleton<IScopeProvider, ScopeProvider>();
@@ -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<MigrationDto>()
.From<MigrationDto>()
.Where<MigrationDto>(x => x.Name.InvariantEquals(Constants.System.UmbracoMigrationName) && x.Version == codeVersionString);
+1 -1
View File
@@ -95,7 +95,7 @@ namespace Umbraco.Core
=> new DatabaseServerMessenger(
factory.GetInstance<IRuntimeState>(),
factory.GetInstance<IScopeProvider>(),
factory.GetInstance<IDatabaseContext>(),
factory.GetInstance<ISqlContext>(),
factory.GetInstance<ILogger>(),
factory.GetInstance<ProfilingLogger>(),
true, new DatabaseServerMessengerOptions()));
+1 -1
View File
@@ -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;
@@ -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)
{
@@ -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 <IDatabaseContext> 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
{
/// <summary>
/// Gets the database Sql syntax.
/// </summary>
ISqlSyntaxProvider SqlSyntax { get; }
/// <summary>
/// Creates a new Sql expression.
/// </summary>
Sql<SqlContext> Sql();
/// <summary>
/// Creates a new Sql expression.
/// </summary>
Sql<SqlContext> Sql(string sql, params object[] args);
/// <summary>
/// Creates a new query expression.
/// </summary>
IQuery<T> Query<T>();
}
}
@@ -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
{
/// <summary>
/// Specifies the Sql context.
/// </summary>
public interface ISqlContext
{
/// <summary>
/// Gets the Sql syntax provider.
/// </summary>
ISqlSyntaxProvider SqlSyntax { get; }
/// <summary>
/// Gets the database type.
/// </summary>
DatabaseType DatabaseType { get; }
/// <summary>
/// Creates a new Sql expression.
/// </summary>
Sql<SqlContext> Sql();
/// <summary>
/// Creates a new Sql expression.
/// </summary>
Sql<SqlContext> Sql(string sql, params object[] args);
/// <summary>
/// Creates a new query expression.
/// </summary>
IQuery<T> Query<T>();
/// <summary>
/// Gets the Sql templates.
/// </summary>
SqlTemplates Templates { get; }
/// <summary>
/// Gets the Poco data factory.
/// </summary>
IPocoDataFactory PocoDataFactory { get; }
/// <summary>
/// Gets the mappers.
/// </summary>
IMapperCollection Mappers { get; }
}
}
@@ -1,15 +1,9 @@
using NPoco;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence
{
public interface IUmbracoDatabase : IDatabase
{
/// <summary>
/// Gets the database Sql syntax.
/// </summary>
ISqlSyntaxProvider SqlSyntax { get; } // fixme - kill
/// <summary>
/// Gets the Sql context.
/// </summary>
@@ -5,7 +5,7 @@ namespace Umbraco.Core.Persistence
/// <summary>
/// Creates and manages the "ambient" database.
/// </summary>
public interface IUmbracoDatabaseFactory : IDatabaseContext, IDisposable
public interface IUmbracoDatabaseFactory : IDisposable
{
/// <summary>
/// Creates a new database.
@@ -27,5 +27,10 @@ namespace Umbraco.Core.Persistence
/// Configures the database factory.
/// </summary>
void Configure(string connectionString, string providerName);
/// <summary>
/// Gets the Sql context.
/// </summary>
ISqlContext SqlContext { get; }
}
}
@@ -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; }
}
}
@@ -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
@@ -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<SqlContext> Sql() => Context.Sql();
protected Sql<SqlContext> Sql() => Context.SqlContext.Sql();
protected Sql<SqlContext> Sql(string sql, params object[] args) => Context.Sql(sql, args);
protected Sql<SqlContext> Sql(string sql, params object[] args) => Context.SqlContext.Sql(sql, args);
public IIfDatabaseBuilder IfDatabase(params DatabaseType[] supportedDatabaseTypes)
{
@@ -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<SqlContext> Sql() => new Sql<SqlContext>(Database.SqlContext);
public Sql<SqlContext> Sql(string sql, params object[] args) => new Sql<SqlContext>(Database.SqlContext, sql, args);
public IQuery<T> Query<T>() => new Query<T>(Database.SqlContext);
public DatabaseType DatabaseType => Database.DatabaseType;
public ISqlContext SqlContext => Database.SqlContext;
public ILogger Logger { get; }
@@ -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;
@@ -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<T>()
{
@@ -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<NodeDto>()
.InnerJoin<ContentTypeDto>()
@@ -19,7 +19,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZe
Execute.Code(database =>
{
var userGroups = database.Fetch<UserGroupDto>(
Context.Sql().Select("*")
Context.SqlContext.Sql().Select("*")
.From<UserGroupDto>()
.Where<UserGroupDto>(x => x.Alias == "admin" || x.Alias == "editor"));
@@ -233,7 +233,7 @@ namespace Umbraco.Core.Persistence
var tTransaction = GetTypedTransaction<SqlTransaction>(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 })
@@ -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<SqlContext> GetBaseQuery(bool isCount)
{
var sql = Sql();
var sql = SqlContext.Sql();
sql = isCount
? sql.SelectCount()
@@ -38,7 +38,7 @@ namespace Umbraco.Core.Persistence.Repositories
_tagRepository = tagRepository ?? throw new ArgumentNullException(nameof(tagRepository));
_cacheHelper = cacheHelper;
_publishedQuery = work.Query<IContent>().Where(x => x.Published); // fixme not used?
_publishedQuery = work.SqlContext.Query<IContent>().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<SqlContext> 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<DocumentDto>()
.InnerJoin<ContentVersionDto>().On<ContentVersionDto, DocumentDto>(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<DocumentDto>()
.InnerJoin<ContentVersionDto>().On<ContentVersionDto, DocumentDto>(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<AccessRuleDto>()
.InnerJoin<AccessDto>()
.On<AccessRuleDto, AccessDto>(left => left.AccessId, right => right.Id)
.Where<AccessDto>(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<IContent> GetPagedResultsByQuery(IQuery<IContent> query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, bool orderBySystemField, IQuery<IContent> 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<NodeDto>(x => x.NodeId)
.From<NodeDto>()
.InnerJoin<DocumentDto>().On<NodeDto, DocumentDto>((n, d) => n.NodeId == d.NodeId && d.Published)
.WhereIn<NodeDto>(x => x.NodeId, ids);
var sql = SqlContext.Sql()
.SelectCount<NodeDto>(x => x.NodeId)
.From<NodeDto>()
.InnerJoin<DocumentDto>().On<NodeDto, DocumentDto>((n, d) => n.NodeId == d.NodeId && d.Published)
.WhereIn<NodeDto>(x => x.NodeId, ids);
var count = Database.ExecuteScalar<int>(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<DocumentPublishedReadOnlyDto, int>(dtos.Select(x => x.NodeId), 2000, batch
=> Sql()
=> SqlContext.Sql()
.Select<DocumentPublishedReadOnlyDto>()
.From<DocumentDto>()
.WhereIn<DocumentDto>(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];
@@ -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<IContentType> PerformGetByQuery(IQuery<IContentType> query)
{
var sqlClause = GetBaseQuery(false);
var translator = new SqlTranslator<IContentType>(sqlClause, query);
var sql = translator.Translate();
// fixme - insane! GetBaseQuery does not even return a proper??? oh well...
var dtos = Database.Fetch<ContentTypeTemplateDto>(sql);
@@ -159,7 +159,7 @@ namespace Umbraco.Core.Persistence.Repositories
sql = isCount
? sql.SelectCount()
: sql.Select<ContentTypeTemplateDto>(r => r.Select(x => x.ContentTypeDto, r1 => r1.Select(x => x.NodeDto)));
: sql.Select<ContentTypeTemplateDto>(r => r.Select(x => x.ContentTypeDto, r1 => r1.Select(x => x.NodeDto)));
sql
.From<ContentTypeDto>()
@@ -197,7 +197,7 @@ namespace Umbraco.Core.Persistence.Repositories
/// </remarks>
protected override void PersistDeletedItem(IContentType entity)
{
var query = QueryT.Where(x => x.ParentId == entity.Id);
var query = Query<IContentType>().Where(x => x.ParentId == entity.Id);
var children = GetByQuery(query);
foreach (var child in children)
{
@@ -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<TEntity>().Where(type => type.Path.StartsWith(movingPath)));
var paths = new Dictionary<int, string>();
paths[moving.Id] = moving.Path;
@@ -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<IDataTypeDefinition>().Where(type => type.Path.StartsWith(origPath + ",")));
var lastParent = toMove;
foreach (var descendant in descendants.OrderBy(x => x.Level))
@@ -245,14 +245,14 @@ namespace Umbraco.Core.Persistence.Repositories
private IEnumerable<IDictionaryItem> GetRootDictionaryItems()
{
var query = QueryT.Where(x => x.ParentId == null);
var query = Query<IDictionaryItem>().Where(x => x.ParentId == null);
return GetByQuery(query);
}
public Dictionary<string, Guid> GetDictionaryItemKeyMap()
{
var columns = new[] { "key", "id" }.Select(x => (object) SqlSyntax.GetQuotedColumnName(x)).ToArray();
var sql = UnitOfWork.Sql().Select(columns).From<DictionaryDto>();
var sql = Sql().Select(columns).From<DictionaryDto>();
return Database.Fetch<DictionaryItemKeyIdDto>(sql).ToDictionary(x => x.Key, x => x.Id);
}
@@ -277,7 +277,7 @@ namespace Umbraco.Core.Persistence.Repositories
.Where<DictionaryDto>(x => x.Parent != null)
.Where($"{SqlSyntax.GetQuotedColumnName("parent")} IN (@parentIds)", new { parentIds = @group });
var translator = new SqlTranslator<IDictionaryItem>(sqlClause, QueryT);
var translator = new SqlTranslator<IDictionaryItem>(sqlClause, Query<IDictionaryItem>());
var sql = translator.Translate();
sql.OrderBy<DictionaryDto>(x => x.UniqueId);
@@ -31,12 +31,10 @@ namespace Umbraco.Core.Persistence.Repositories
/// </summary>
protected internal IScopeUnitOfWork UnitOfWork { get; }
protected Sql<SqlContext> Sql() => UnitOfWork.SqlContext.Sql();
#region Query Methods
public IQuery<IUmbracoEntity> Query => UnitOfWork.Query<IUmbracoEntity>();
public Sql<SqlContext> Sql() => UnitOfWork.Sql();
// fixme need to review that ... one
public IEnumerable<IUmbracoEntity> GetPagedResultsByQuery(IQuery<IUmbracoEntity> query, Guid objectTypeId, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, IQuery<IUmbracoEntity> filter = null)
@@ -9,8 +9,6 @@ namespace Umbraco.Core.Persistence.Repositories
{
public interface IEntityRepository : IRepository
{
IQuery<IUmbracoEntity> Query { get; }
IUmbracoEntity GetByKey(Guid key);
IUmbracoEntity GetByKey(Guid key, Guid objectTypeId);
IUmbracoEntity Get(int id);
@@ -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<IMemberGroup>().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<IMemberGroup>().Where(group => group.Name.Equals(roleName));
var result = GetByQuery(qry);
if (result.Any()) return null;
@@ -120,9 +120,9 @@ namespace Umbraco.Core.Persistence.Repositories
break;
case QueryType.Many:
case QueryType.Single:
sql = sql.Select<MemberDto>(r =>
r.Select(x => x.ContentVersionDto, r1 =>
r1.Select(x => x.ContentDto, r2 =>
sql = sql.Select<MemberDto>(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<IMember>();
// get the members by username
var query = QueryT;
var query = Query<IMember>();
switch (matchType)
{
case StringPropertyMatchType.Exact:
@@ -15,7 +15,7 @@ namespace Umbraco.Core.Persistence.Repositories
/// </summary>
/// <typeparam name="TId"></typeparam>
/// <typeparam name="TEntity"></typeparam>
internal abstract class NPocoRepositoryBase<TId, TEntity> : RepositoryBase<TId, TEntity>, IDatabaseContext
internal abstract class NPocoRepositoryBase<TId, TEntity> : RepositoryBase<TId, TEntity>
where TEntity : class, IAggregateRoot
{
/// <summary>
@@ -39,26 +39,14 @@ namespace Umbraco.Core.Persistence.Repositories
protected IUmbracoDatabase Database => UnitOfWork.Database;
/// <summary>
/// Gets the repository's database sql syntax.
/// Gets the Sql context.
/// </summary>
public ISqlSyntaxProvider SqlSyntax => UnitOfWork.SqlSyntax;
protected ISqlContext SqlContext=> UnitOfWork.SqlContext;
/// <summary>
/// Creates a new query.
/// </summary>
public override IQuery<T> Query<T>() => UnitOfWork.Query<T>();
/// <summary>
/// Creates a new Sql statement.
/// </summary>
/// <returns>A new Sql statement.</returns>
public Sql<SqlContext> Sql() => UnitOfWork.Sql();
/// <summary>
/// Creates a new Sql statement.
/// </summary>
/// <returns>A new Sql statement.</returns>
public Sql<SqlContext> Sql(string sql, params object[] args) => UnitOfWork.Sql(sql, args);
protected Sql<SqlContext> Sql() => SqlContext.Sql();
protected Sql<SqlContext> Sql(string sql, params object[] args) => SqlContext.Sql(sql, args);
protected ISqlSyntaxProvider SqlSyntax => SqlContext.SqlSyntax;
protected IQuery<T> Query<T>() => SqlContext.Query<T>();
#region Abstract Methods
@@ -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<Notification> GetUsersNotifications(IEnumerable<int> userIds, string action, IEnumerable<int> 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<User2NodeNotifyDto>()
.InnerJoin<NodeDto>().On<User2NodeNotifyDto, NodeDto>(left => left.NodeId, right => right.NodeId)
@@ -42,7 +40,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable<Notification> GetUserNotifications(IUser user)
{
var sql = _unitOfWork.Sql()
var sql = _unitOfWork.SqlContext.Sql()
.Select("DISTINCT umbracoNode.id, umbracoUser2NodeNotify.userId, umbracoNode.nodeObjectType, umbracoUser2NodeNotify.action")
.From<User2NodeNotifyDto>()
.InnerJoin<NodeDto>()
@@ -63,7 +61,7 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable<Notification> GetEntityNotifications(IEntity entity)
{
var sql = _unitOfWork.Sql()
var sql = _unitOfWork.SqlContext.Sql()
.Select("DISTINCT umbracoNode.id, umbracoUser2NodeNotify.userId, umbracoNode.nodeObjectType, umbracoUser2NodeNotify.action")
.From<User2NodeNotifyDto>()
.InnerJoin<NodeDto>()
@@ -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<NodeDto>()
.Where<NodeDto>(nodeDto => nodeDto.NodeId == entity.Id);
@@ -19,7 +19,7 @@ namespace Umbraco.Core.Persistence.Repositories
public virtual IEnumerable<TEntity> GetEntitiesInRecycleBin()
{
return GetByQuery(QueryT.Where(entity => entity.Trashed));
return GetByQuery(Query<TEntity>().Where(entity => entity.Trashed));
}
}
}
@@ -24,16 +24,6 @@ namespace Umbraco.Core.Persistence.Repositories
: base(work, cache, logger)
{ }
/// <summary>
/// Creates a new query.
/// </summary>
public virtual IQuery<TEntity> QueryT => Query<TEntity>();
/// <summary>
/// Creates a new query.
/// </summary>
public abstract IQuery<T> Query<T>();
#region Static Queries
private IQuery<TEntity> _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<TEntity>().Where(x => x.Id != 0));
return PerformCount(query);
});
}
@@ -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<TaskDto>(SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
var taskDto = Database.Fetch<TaskDto>(SqlContext.SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
if (taskDto == null)
return null;
@@ -63,13 +61,13 @@ namespace Umbraco.Core.Persistence.Repositories
protected override Sql<SqlContext> GetBaseQuery(bool isCount)
{
return isCount ? Sql().SelectCount().From<TaskDto>() : GetBaseQuery();
return isCount ? SqlContext.Sql().SelectCount().From<TaskDto>() : GetBaseQuery();
}
private Sql<SqlContext> 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<TaskDto>()
.InnerJoin<TaskTypeDto>()
.On<TaskDto, TaskTypeDto>(left => left.TaskTypeId, right => right.Id)
@@ -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<TaskTypeDto>(SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
var taskDto = Database.Fetch<TaskTypeDto>(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<SqlContext> GetBaseQuery(bool isCount)
{
return Sql().SelectAll().From<TaskTypeDto>();
return SqlContext.Sql().SelectAll().From<TaskTypeDto>();
}
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)
{
@@ -107,7 +107,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override Sql<SqlContext> 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<TemplateDto>()
.InnerJoin<NodeDto>()
.On<TemplateDto, NodeDto>(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<dynamic>(childIdsSql)
@@ -62,7 +62,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override IUser PerformGet(int id)
{
var sql = Sql()
var sql = SqlContext.Sql()
.Select<UserDto>()
.From<UserDto>()
.Where<UserDto>(x => x.Id == id);
@@ -182,7 +182,7 @@ ORDER BY colName";
private List<UserDto> GetDtosWith(Action<Sql<SqlContext>> with, bool includeReferences)
{
var sql = Sql()
var sql = SqlContext.Sql()
.Select<UserDto>()
.From<UserDto>();
@@ -209,7 +209,7 @@ ORDER BY colName";
// get users2groups
var sql = Sql()
var sql = SqlContext.Sql()
.Select<User2UserGroupDto>()
.From<User2UserGroupDto>()
.WhereIn<User2UserGroupReadOnlyDto>(x => x.UserId, userIds);
@@ -219,7 +219,7 @@ ORDER BY colName";
// get groups
sql = Sql()
sql = SqlContext.Sql()
.Select<UserGroupDto>()
.From<UserGroupDto>()
.WhereIn<UserGroupDto>(x => x.Id, groupIds);
@@ -229,7 +229,7 @@ ORDER BY colName";
// get groups2apps
sql = Sql()
sql = SqlContext.Sql()
.Select<UserGroup2AppDto>()
.From<UserGroup2AppDto>()
.WhereIn<UserGroup2AppDto>(x => x.UserGroupId, groupIds);
@@ -240,7 +240,7 @@ ORDER BY colName";
// get start nodes
sql = Sql()
sql = SqlContext.Sql()
.Select<UserStartNodeDto>()
.From<UserStartNodeDto>()
.WhereIn<UserStartNodeDto>(x => x.UserId, userIds);
@@ -282,11 +282,11 @@ ORDER BY colName";
protected override Sql<SqlContext> GetBaseQuery(bool isCount)
{
if (isCount)
return Sql()
return SqlContext.Sql()
.SelectCount()
.From<UserDto>();
return Sql()
return SqlContext.Sql()
.Select<UserDto>()
.From<UserDto>();
}
@@ -306,7 +306,7 @@ ORDER BY colName";
private Sql<SqlContext> GetBaseQuery(string columns)
{
return Sql()
return SqlContext.Sql()
.Select(columns)
.From<UserDto>();
}
@@ -534,7 +534,7 @@ ORDER BY colName";
public bool Exists(string username)
{
var sql = Sql()
var sql = SqlContext.Sql()
.SelectCount()
.From<UserDto>()
.Where<UserDto>(x => x.UserName == username);
@@ -562,11 +562,11 @@ ORDER BY colName";
private IEnumerable<IUser> GetAllInOrNotInGroup(int groupId, bool include)
{
var sql = Sql()
var sql = SqlContext.Sql()
.Select<UserDto>()
.From<UserDto>();
var inSql = Sql()
var inSql = SqlContext.Sql()
.Select<User2UserGroupDto>(x => x.UserId)
.From<User2UserGroupDto>()
.Where<User2UserGroupDto>(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<UserDto>()
.From<UserDto>();
@@ -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<IUser> GetNextUsers(int id, int count)
{
var idsQuery = Sql()
var idsQuery = SqlContext.Sql()
.Select<UserDto>(x => x.Id)
.From<UserDto>()
.Where<UserDto>(x => x.Id >= id)
@@ -60,7 +60,7 @@ namespace Umbraco.Core.Persistence.Repositories
/// <returns></returns>
public virtual IEnumerable<Guid> GetVersionIds(int id, int maxRows)
{
var sql = Sql();
var sql = SqlContext.Sql();
sql.Select("cmsDocument.versionId")
.From<DocumentDto>()
.InnerJoin<ContentDto>()
@@ -71,7 +71,7 @@ namespace Umbraco.Core.Persistence.Repositories
.Where<NodeDto>(x => x.NodeId == id)
.OrderByDescending<DocumentDto>(x => x.UpdateDate);
return Database.Fetch<Guid>(SqlSyntax.SelectTop(sql, maxRows));
return Database.Fetch<Guid>(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<NodeDto>();
@@ -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<NodeDto>();
@@ -179,7 +179,7 @@ namespace Umbraco.Core.Persistence.Repositories
/// <returns></returns>
public int Count(string contentTypeAlias = null)
{
var sql = Sql()
var sql = SqlContext.Sql()
.SelectCount()
.From<NodeDto>();
@@ -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<Match>().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<Match>().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<TEntity>();
var sqlNodeIds = new SqlTranslator<TEntity>(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<PropertyDataDto, Guid>(versions, 2000, batch =>
Sql()
SqlContext.Sql()
.Select<PropertyDataDto>()
.From<PropertyDataDto>()
.WhereIn<PropertyDataDto>(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<PropertyTypeDto, int>(allPropertyTypeIds, 2000, batch =>
Sql()
SqlContext.Sql()
.Select<PropertyTypeDto>()
.From<PropertyTypeDto>()
.WhereIn<PropertyTypeDto>(x => x.Id, batch));
@@ -460,7 +460,7 @@ namespace Umbraco.Core.Persistence.Repositories
var pre = new Lazy<IEnumerable<DataTypePreValueDto>>(() =>
{
return Database.FetchByGroups<DataTypePreValueDto, int>(allPropertyTypeIds, 2000, batch =>
Sql()
SqlContext.Sql()
.Select<DataTypePreValueDto>()
.From<DataTypePreValueDto>()
.WhereIn<DataTypePreValueDto>(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
+33 -6
View File
@@ -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
/// <summary>
/// Implements <see cref="ISqlContext"/>.
/// </summary>
public class SqlContext : ISqlContext
{
public SqlContext(ISqlSyntaxProvider sqlSyntax, IPocoDataFactory pocoDataFactory, DatabaseType databaseType, IMapperCollection mappers = null)
/// <summary>
/// Initializes a new instance of the <see cref="SqlContext"/> class.
/// </summary>
/// <param name="sqlSyntax">The sql syntax provider.</param>
/// <param name="pocoDataFactory">The Poco data factory.</param>
/// <param name="databaseType">The database type.</param>
/// <param name="mappers">The mappers.</param>
public SqlContext(ISqlSyntaxProvider sqlSyntax, DatabaseType databaseType, IPocoDataFactory pocoDataFactory, IMapperCollection mappers = null)
{
// for tests
if (mappers == null) mappers = new Mappers.MapperCollection(Enumerable.Empty<BaseMapper>());
Mappers = mappers;
Mappers = mappers ?? new Mappers.MapperCollection(Enumerable.Empty<BaseMapper>());
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);
}
/// <inheritdoc />
public ISqlSyntaxProvider SqlSyntax { get; }
public IPocoDataFactory PocoDataFactory { get; }
/// <inheritdoc />
public DatabaseType DatabaseType { get; }
/// <inheritdoc />
public Sql<SqlContext> Sql() => NPoco.Sql.BuilderFor(this);
/// <inheritdoc />
public Sql<SqlContext> Sql(string sql, params object[] args) => Sql().Append(sql, args);
/// <inheritdoc />
public IQuery<T> Query<T>() => new Query<T>(this);
/// <inheritdoc />
public SqlTemplates Templates { get; }
/// <inheritdoc />
public IPocoDataFactory PocoDataFactory { get; }
/// <inheritdoc />
public IMapperCollection Mappers { get; }
}
}
@@ -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<string, SqlTemplate> Templates = new Dictionary<string, SqlTemplate>();
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<int, string> _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<int, string>();
@@ -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<SqlContext>, Sql<SqlContext>> sqlBuilder)
{
if (Templates.TryGetValue(key, out var template)) return template;
var sql = sqlBuilder(new Sql<SqlContext>(SqlContext));
return Templates[key] = new SqlTemplate(sql.SQL, sql.Arguments);
}
public Sql<SqlContext> Sql()
{
return new Sql<SqlContext>(SqlContext, _sql);
return new Sql<SqlContext>(_sqlContext, _sql);
}
// must pass the args in the proper order, faster
public Sql<SqlContext> Sql(params object[] args)
{
return new Sql<SqlContext>(SqlContext, _sql, args);
return new Sql<SqlContext>(_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>(SqlContext, _sql, args);
return new Sql<SqlContext>(_sqlContext, _sql, args);
}
}
}
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using NPoco;
namespace Umbraco.Core.Persistence
{
public class SqlTemplates
{
private readonly Dictionary<string, SqlTemplate> _templates = new Dictionary<string, SqlTemplate>();
private readonly SqlContext _sqlContext;
public SqlTemplates(SqlContext sqlContext)
{
_sqlContext = sqlContext;
}
// for tests
internal void Clear()
{
_templates.Clear();
}
public SqlTemplate Get(string key, Func<Sql<SqlContext>, Sql<SqlContext>> sqlBuilder)
{
if (_templates.TryGetValue(key, out var template)) return template;
var sql = sqlBuilder(new Sql<SqlContext>(_sqlContext));
return _templates[key] = new SqlTemplate(_sqlContext, sql.SQL, sql.Arguments);
}
}
}
@@ -70,9 +70,6 @@ namespace Umbraco.Core.Persistence
/// <inheritdoc />
public SqlContext SqlContext { get; }
/// <inheritdoc />
public ISqlSyntaxProvider SqlSyntax => SqlContext.SqlSyntax;
#region Testing, Debugging and Troubleshooting
private bool _enableCount;
@@ -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
/// <inheritdoc />
public ISqlSyntaxProvider SqlSyntax
public ISqlContext SqlContext
{
get
{
EnsureConfigured();
return _sqlSyntax;
return _sqlContext;
}
}
public IQuery<T> Query<T>()
{
EnsureConfigured();
return new Query<T>(_sqlContext);
}
/// <inheritdoc />
public Sql<SqlContext> Sql()
{
EnsureConfigured();
return NPoco.Sql.BuilderFor(_sqlContext);
}
/// <inheritdoc />
public Sql<SqlContext> Sql(string sql, params object[] args)
{
return Sql().Append(sql, args);
}
#endregion
/// <inheritdoc />
@@ -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<UmbracoDatabaseFactory>("Configured.");
Configured = true;
@@ -3,7 +3,7 @@ using Umbraco.Core.Scoping;
namespace Umbraco.Core.Persistence.UnitOfWork
{
public interface IScopeUnitOfWork : IUnitOfWork, IDatabaseContext
public interface IScopeUnitOfWork : IUnitOfWork
{
/// <summary>
/// Gets the scope.
@@ -25,6 +25,11 @@ namespace Umbraco.Core.Persistence.UnitOfWork
/// </summary>
IUmbracoDatabase Database { get; }
/// <summary>
/// Gets the Sql context.
/// </summary>
ISqlContext SqlContext { get; }
/// <summary>
/// Read-locks some lock objects.
/// </summary>
@@ -14,9 +14,9 @@ namespace Umbraco.Core.Persistence.UnitOfWork
IScopeProvider ScopeProvider { get; }
/// <summary>
/// Gets the database context.
/// Gets the sql context.
/// </summary>
IDatabaseContext DatabaseContext { get; }
ISqlContext SqlContext { get; }
/// <summary>
/// Creates a unit of work.
@@ -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
/// <remarks>
/// This should normally not be used directly and should be created with the UnitOfWorkProvider
/// </remarks>
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
/// <inheritdoc />
public ISqlSyntaxProvider SqlSyntax => _databaseContext.SqlSyntax;
/// <inheritdoc />
public Sql<SqlContext> Sql() => _databaseContext.Sql();
/// <inheritdoc />
public Sql<SqlContext> Sql(string sql, params object[] args) => _databaseContext.Sql(sql, args);
/// <inheritdoc />
public IQuery<T> Query<T>() => _databaseContext.Query<T>();
public ISqlContext SqlContext { get; }
#endregion
@@ -11,10 +11,10 @@ namespace Umbraco.Core.Persistence.UnitOfWork
/// <summary>
/// Initializes a new instance of the <see cref="ScopeUnitOfWorkProvider"/> class.
/// </summary>
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; }
/// <inheritdoc />
public IDatabaseContext DatabaseContext { get; }
public ISqlContext SqlContext { get; }
/// <inheritdoc />
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);
}
}
}
+2 -2
View File
@@ -16,9 +16,9 @@ namespace Umbraco.Core.Scoping
IUmbracoDatabase Database { get; }
/// <summary>
/// Gets the database context.
/// Gets the Sql context.
/// </summary>
IDatabaseContext DatabaseContext { get; }
ISqlContext SqlContext { get; }
/// <summary>
/// Gets the scope event messages.
+2 -2
View File
@@ -79,9 +79,9 @@ namespace Umbraco.Core.Scoping
IScopeContext Context { get; }
/// <summary>
/// Gets the database context.
/// Gets the sql context.
/// </summary>
IDatabaseContext DatabaseContext { get; }
ISqlContext SqlContext { get; }
#if DEBUG_SCOPES
Dictionary<Guid, object> CallContextObjects { get; }
+1 -1
View File
@@ -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
+1 -1
View File
@@ -63,7 +63,7 @@ namespace Umbraco.Core.Scoping
public IUmbracoDatabaseFactory DatabaseFactory { get; }
public IDatabaseContext DatabaseContext => DatabaseFactory;
public ISqlContext SqlContext => DatabaseFactory.SqlContext;
#region Context
+5 -5
View File
@@ -29,7 +29,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork())
{
var repo = uow.CreateRepository<IAuditRepository>();
var result = repo.GetByQuery(uow.Query<AuditItem>().Where(x => x.Id == objectId));
var result = repo.GetByQuery(Query<AuditItem>().Where(x => x.Id == objectId));
uow.Complete();
return result;
}
@@ -41,8 +41,8 @@ namespace Umbraco.Core.Services
{
var repo = uow.CreateRepository<IAuditRepository>();
var result = sinceDate.HasValue == false
? repo.GetByQuery(uow.Query<AuditItem>().Where(x => x.UserId == userId && x.AuditType == type))
: repo.GetByQuery(uow.Query<AuditItem>().Where(x => x.UserId == userId && x.AuditType == type && x.CreateDate >= sinceDate.Value));
? repo.GetByQuery(Query<AuditItem>().Where(x => x.UserId == userId && x.AuditType == type))
: repo.GetByQuery(Query<AuditItem>().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<IAuditRepository>();
var result = sinceDate.HasValue == false
? repo.GetByQuery(uow.Query<AuditItem>().Where(x => x.AuditType == type))
: repo.GetByQuery(uow.Query<AuditItem>().Where(x => x.AuditType == type && x.CreateDate >= sinceDate.Value));
? repo.GetByQuery(Query<AuditItem>().Where(x => x.AuditType == type))
: repo.GetByQuery(Query<AuditItem>().Where(x => x.AuditType == type && x.CreateDate >= sinceDate.Value));
uow.Complete();
return result;
}
+25 -25
View File
@@ -39,7 +39,7 @@ namespace Umbraco.Core.Services
// lazy-constructed because when the ctor runs, the query factory may not be ready
private IQuery<IContent> QueryNotTrashed => _queryNotTrashed ?? (_queryNotTrashed = UowProvider.DatabaseContext.Query<IContent>().Where(x => x.Trashed == false));
private IQuery<IContent> QueryNotTrashed => _queryNotTrashed ?? (_queryNotTrashed = Query<IContent>().Where(x => x.Trashed == false));
#endregion
@@ -448,7 +448,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.ContentTree);
var repository = uow.CreateRepository<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.ContentTypeId == id);
var query = Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.ContentTypeId == id);
var query = Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.Level == level && x.Trashed == false);
var query = Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.ParentId == id);
var query = Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.ParentId == id && x.Published);
var query = Query<IContent>().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<IContentRepository>();
var filterQuery = filter.IsNullOrWhiteSpace()
? null
: uow.Query<IContent>().Where(x => x.Name.Contains(filter));
: Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>();
var query = Query<IContent>();
//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<IContent>().Where(x => x.Name.Contains(filter));
: Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>();
var query = Query<IContent>();
//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<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.ParentId == parentId && x.Name.Contains(name));
var query = Query<IContent>().Where(x => x.ParentId == parentId && x.Name.Contains(name));
return repository.GetByQuery(query);
}
}
@@ -749,7 +749,7 @@ namespace Umbraco.Core.Services
return Enumerable.Empty<IContent>();
}
var pathMatch = content.Path + ",";
var query = uow.Query<IContent>().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch));
var query = Query<IContent>().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<IContentRepository>();
var pathMatch = content.Path + ",";
var query = uow.Query<IContent>().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch));
var query = Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.ParentId == Constants.System.Root);
var query = Query<IContent>().Where(x => x.ParentId == Constants.System.Root);
return repository.GetByQuery(query);
}
}
@@ -865,7 +865,7 @@ namespace Umbraco.Core.Services
private IEnumerable<IContent> GetContentForExpiration(IScopeUnitOfWork uow)
{
var repository = uow.CreateRepository<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.Published && x.ExpireDate <= DateTime.Now);
var query = Query<IContent>().Where(x => x.Published && x.ExpireDate <= DateTime.Now);
return repository.GetByQuery(query);
}
@@ -885,7 +885,7 @@ namespace Umbraco.Core.Services
private IEnumerable<IContent> GetContentForRelease(IScopeUnitOfWork uow)
{
var repository = uow.CreateRepository<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.Published == false && x.ReleaseDate <= DateTime.Now);
var query = Query<IContent>().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<IContentRepository>();
var bin = $"{Constants.System.Root},{Constants.System.RecycleBinContent},";
var query = uow.Query<IContent>().Where(x => x.Path.StartsWith(bin));
var query = Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>().Where(x => x.Published && x.Id == id && x.Trashed == false);
var query = Query<IContent>().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<IContent>().Where(x => x.ParentId == Constants.System.RecycleBinContent);
var query = Query<IContent>().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<IContent> GetPublishedDescendantsLocked(IScopeUnitOfWork uow, IContentRepository repository, IContent content)
{
var pathMatch = content.Path + ",";
var query = uow.Query<IContent>().Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch) /*&& x.Trashed == false*/);
var query = Query<IContent>().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<IContentRepository>();
var query = uow.Query<IContent>().WhereIn(x => x.ContentTypeId, contentTypeIdsA);
var query = Query<IContent>().WhereIn(x => x.ContentTypeId, contentTypeIdsA);
var contents = repository.GetByQuery(query).ToArray();
if (uow.Events.DispatchCancelable(Deleting, this, new DeleteEventArgs<IContent>(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<IContent>().Where(x => x.ParentId == c.Id);
var childQuery = Query<IContent>().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<IContentTypeRepository>();
var query = uow.Query<IContentType>().Where(x => x.Alias == contentTypeAlias);
var query = Query<IContentType>().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<IContentBlueprintRepository>();
var query = uow.Query<IContent>();
var query = Query<IContent>();
if (documentTypeIds.Length > 0)
{
query.Where(x => documentTypeIds.Contains(x.ContentTypeId));
@@ -248,7 +248,7 @@ namespace Umbraco.Core.Services
{
var repo = uow.CreateRepository<TRepository>();
uow.ReadLock(ReadLockIds);
var query = uow.Query<TItem>().Where(x => x.ParentId == id);
var query = Query<TItem>().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<TItem>();
var query = uow.Query<TItem>().Where(x => x.ParentId == found.Id);
var query = Query<TItem>().Where(x => x.ParentId == found.Id);
return repo.GetByQuery(query);
}
}
@@ -272,7 +272,7 @@ namespace Umbraco.Core.Services
{
var repo = uow.CreateRepository<TRepository>();
uow.ReadLock(ReadLockIds);
var query = uow.Query<TItem>().Where(x => x.ParentId == id);
var query = Query<TItem>().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<TItem>().Where(x => x.ParentId == found.Id);
var query = Query<TItem>().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<TItem>().Where(x => x.ParentId == i);
var query = Query<TItem>().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<TRepository>();
uow.ReadLock(ReadLockIds);
return repo.Count(uow.Query<TItem>());
return repo.Count(Query<TItem>());
}
}
+3 -3
View File
@@ -218,7 +218,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repository = uow.CreateRepository<IDataTypeDefinitionRepository>();
return repository.GetByQuery(uow.Query<IDataTypeDefinition>().Where(x => x.Name == name)).FirstOrDefault();
return repository.GetByQuery(Query<IDataTypeDefinition>().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<IDataTypeDefinitionRepository>();
var query = uow.Query<IDataTypeDefinition>().Where(x => x.Key == id);
var query = Query<IDataTypeDefinition>().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<IDataTypeDefinitionRepository>();
var query = uow.Query<IDataTypeDefinition>().Where(x => x.PropertyEditorAlias == propertyEditorAlias);
var query = Query<IDataTypeDefinition>().Where(x => x.PropertyEditorAlias == propertyEditorAlias);
return repository.GetByQuery(query);
}
}
+20 -20
View File
@@ -52,7 +52,7 @@ namespace Umbraco.Core.Services
// lazy-constructed because when the ctor runs, the query factory may not be ready
private IQuery<IUmbracoEntity> QueryRootEntity => _queryRootEntity
?? (_queryRootEntity = UowProvider.DatabaseContext.Query<IUmbracoEntity>().Where(x => x.ParentId == -1));
?? (_queryRootEntity = Query<IUmbracoEntity>().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<IEntityRepository>();
var query = repository.Query.Where(x => x.ParentId == parentId);
var query = Query<IUmbracoEntity>().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<IEntityRepository>();
var query = repository.Query.Where(x => x.ParentId == parentId);
var query = Query<IUmbracoEntity>().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<IEntityRepository>();
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<IUmbracoEntity>().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<IEntityRepository>();
var entity = repository.Get(id);
var query = repository.Query.Where(x => x.Path.StartsWith(entity.Path) && x.Id != id);
var query = Query<IUmbracoEntity>().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<IEntityRepository>();
var query = repository.Query.Where(x => x.ParentId == parentId && x.Trashed == false);
var query = Query<IUmbracoEntity>().Where(x => x.ParentId == parentId && x.Trashed == false);
IQuery<IUmbracoEntity> filterQuery = null;
if (filter.IsNullOrWhiteSpace() == false)
{
filterQuery = repository.Query.Where(x => x.Name.Contains(filter));
filterQuery = Query<IUmbracoEntity>().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<IEntityRepository>();
var query = repository.Query;
var query = Query<IUmbracoEntity>();
//if the id is System Root, then just get all
if (id != Constants.System.Root)
{
@@ -394,7 +394,7 @@ namespace Umbraco.Core.Services
IQuery<IUmbracoEntity> filterQuery = null;
if (filter.IsNullOrWhiteSpace() == false)
{
filterQuery = uow.Query<IUmbracoEntity>().Where(x => x.Name.Contains(filter));
filterQuery = Query<IUmbracoEntity>().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<IEntityRepository>();
var query = uow.Query<IUmbracoEntity>();
var query = Query<IUmbracoEntity>();
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<IUmbracoEntity> filterQuery = null;
if (filter.IsNullOrWhiteSpace() == false)
{
filterQuery = uow.Query<IUmbracoEntity>().Where(x => x.Name.Contains(filter));
filterQuery = Query<IUmbracoEntity>().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<IEntityRepository>();
var query = repository.Query;
var query = Query<IUmbracoEntity>();
//don't include trashed if specfied
if (includeTrashed == false)
{
@@ -487,14 +487,14 @@ namespace Umbraco.Core.Services
IQuery<IUmbracoEntity> filterQuery = null;
if (filter.IsNullOrWhiteSpace() == false)
{
filterQuery = repository.Query.Where(x => x.Name.Contains(filter));
filterQuery = Query<IUmbracoEntity>().Where(x => x.Name.Contains(filter));
}
var contents = repository.GetPagedResultsByQuery(query, objectTypeId, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, filterQuery);
return contents;
}
}
/// <summary>
/// Gets a collection of the entities at the root, which corresponds to the entities with a Parent Id of -1.
/// </summary>
@@ -592,7 +592,7 @@ namespace Umbraco.Core.Services
return repository.GetAllPaths(objectTypeId, keys);
}
}
/// <summary>
/// Gets a collection of <see cref="T:Umbraco.Core.Models.EntityBase.IUmbracoEntity" />
/// </summary>
@@ -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<NodeDto>()
.Where<NodeDto>(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<NodeDto>()
.Where<NodeDto>(x => x.UniqueId == key);
@@ -26,7 +26,7 @@ namespace Umbraco.Core.Services
{
var repo = uow.CreateRepository<IExternalLoginRepository>();
return repo
.GetByQuery(uow.Query<IIdentityUserLogin>().Where(x => x.UserId == userId))
.GetByQuery(Query<IIdentityUserLogin>().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<IExternalLoginRepository>();
return repo
.GetByQuery(uow.Query<IIdentityUserLogin>().Where(x => x.ProviderKey == login.ProviderKey && x.LoginProvider == login.LoginProvider))
.GetByQuery(Query<IIdentityUserLogin>().Where(x => x.ProviderKey == login.ProviderKey && x.LoginProvider == login.LoginProvider))
.ToList(); // ToList is important here, must evaluate within uow!
}
}
+1 -1
View File
@@ -441,7 +441,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repository = uow.CreateRepository<ITemplateRepository>();
var query = uow.Query<ITemplate>().Where(x => x.Key == id);
var query = Query<ITemplate>().Where(x => x.Key == id);
return repository.GetByQuery(query).SingleOrDefault();
}
}
@@ -160,7 +160,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repository = uow.CreateRepository<IDictionaryRepository>();
var query = uow.Query<IDictionaryItem>().Where(x => x.ParentId == parentId);
var query = Query<IDictionaryItem>().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<IDictionaryRepository>();
var query = uow.Query<IDictionaryItem>().Where(x => x.ParentId == null);
var query = Query<IDictionaryItem>().Where(x => x.ParentId == null);
var items = repository.GetByQuery(query).ToArray();
//ensure the lazy Language callback is assigned
foreach (var item in items)
+1 -1
View File
@@ -46,7 +46,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repository = uow.CreateRepository<IMacroRepository>();
var q = uow.Query<IMacro>().Where(x => x.Alias == alias);
var q = Query<IMacro>().Where(x => x.Alias == alias);
return repository.GetByQuery(q).FirstOrDefault();
}
}
+16 -16
View File
@@ -61,7 +61,7 @@ namespace Umbraco.Core.Services
}
var repo = uow.CreateRepository<IMediaRepository>();
var query = uow.Query<IMedia>().Where(x => x.Trashed == false);
var query = Query<IMedia>().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<IMediaRepository>();
var query = uow.Query<IMedia>().Where(x => x.ContentTypeId == id);
var query = Query<IMedia>().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<IMediaRepository>();
var query = uow.Query<IMedia>().Where(x => x.Level == level && x.Trashed == false);
var query = Query<IMedia>().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<IMediaRepository>();
var query = uow.Query<IMedia>().Where(x => x.ParentId == id);
var query = Query<IMedia>().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<IMediaRepository>();
var query = uow.Query<IMedia>();
var query = Query<IMedia>();
//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<IMediaRepository>();
var query = uow.Query<IMedia>();
var query = Query<IMedia>();
// 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<IMediaRepository>();
var query = uow.Query<IMedia>();
var query = Query<IMedia>();
//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<IMedia>();
var pathMatch = media.Path + ",";
var query = uow.Query<IMedia>().Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch));
var query = Query<IMedia>().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<IMediaRepository>();
var pathMatch = media.Path + ",";
var query = uow.Query<IMedia>().Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch));
var query = Query<IMedia>().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<IMediaRepository>();
var query = uow.Query<IMedia>().Where(x => x.ParentId == Constants.System.Root);
var query = Query<IMedia>().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<IMediaRepository>();
var bin = $"{Constants.System.Root},{Constants.System.RecycleBinMedia},";
var query = uow.Query<IMedia>().Where(x => x.Path.StartsWith(bin));
var query = Query<IMedia>().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<IMediaRepository>();
var query = uow.Query<IMedia>().Where(x => x.ParentId == id);
var query = Query<IMedia>().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<IMedia>().Where(x => x.ParentId == Constants.System.RecycleBinMedia);
var query = Query<IMedia>().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<IMediaRepository>();
var query = uow.Query<IMedia>().WhereIn(x => x.ContentTypeId, mediaTypeIdsA);
var query = Query<IMedia>().WhereIn(x => x.ContentTypeId, mediaTypeIdsA);
var medias = repository.GetByQuery(query).ToArray();
if (uow.Events.DispatchCancelable(Deleting, this, new DeleteEventArgs<IMedia>(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<IMedia>().Where(x => x.Path.StartsWith(m.Path));
var childQuery = Query<IMedia>().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<IMediaTypeRepository>();
var query = uow.Query<IMediaType>().Where(x => x.Alias == mediaTypeAlias);
var query = Query<IMediaType>().Where(x => x.Alias == mediaTypeAlias);
var mediaType = repository.GetByQuery(query).FirstOrDefault();
if (mediaType == null)
+35 -35
View File
@@ -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<IMember>();
query = Query<IMember>();
break;
case MemberCountType.Online:
var fromDate = DateTime.Now.AddMinutes(-Membership.UserIsOnlineTimeWindow);
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == Constants.Conventions.Member.LastLoginDate &&
((Member)x).DateTimePropertyValue > fromDate);
break;
case MemberCountType.LockedOut:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == Constants.Conventions.Member.IsLockedOut &&
((Member)x).BoolPropertyValue);
break;
case MemberCountType.Approved:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().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<IMemberRepository>();
var query = uow.Query<IMember>().Where(x => x.Key == id);
var query = Query<IMember>().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<IMemberRepository>();
var query1 = memberTypeAlias == null ? null : uow.Query<IMember>().Where(x => x.ContentTypeAlias == memberTypeAlias);
var query2 = filter == null ? null : uow.Query<IMember>().Where(x => x.Name.Contains(filter) || x.Username.Contains(filter));
var query1 = memberTypeAlias == null ? null : Query<IMember>().Where(x => x.ContentTypeAlias == memberTypeAlias);
var query2 = filter == null ? null : Query<IMember>().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<IMemberRepository>();
var query = uow.Query<IMember>().Where(x => x.Email.Equals(email));
var query = Query<IMember>().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<IMemberRepository>();
var query = uow.Query<IMember>().Where(x => x.Username.Equals(username));
var query = Query<IMember>().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<IMemberRepository>();
var query = uow.Query<IMember>().Where(x => x.ContentTypeAlias == memberTypeAlias);
var query = Query<IMember>().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<IMemberRepository>();
repository.Get(memberTypeId);
var query = uow.Query<IMember>().Where(x => x.ContentTypeId == memberTypeId);
var query = Query<IMember>().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<IMemberRepository>();
var query = uow.Query<IMember>();
var query = Query<IMember>();
switch (matchType)
{
@@ -590,7 +590,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.MemberTree);
var repository = uow.CreateRepository<IMemberRepository>();
var query = uow.Query<IMember>();
var query = Query<IMember>();
switch (matchType)
{
@@ -632,7 +632,7 @@ namespace Umbraco.Core.Services
{
uow.ReadLock(Constants.Locks.MemberTree);
var repository = uow.CreateRepository<IMemberRepository>();
var query = uow.Query<IMember>();
var query = Query<IMember>();
switch (matchType)
{
@@ -677,25 +677,25 @@ namespace Umbraco.Core.Services
switch (matchType)
{
case StringPropertyMatchType.Exact:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().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<IMember>().Where(x =>
query = Query<IMember>().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<IMember>().Where(x =>
query = Query<IMember>().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<IMember>().Where(x =>
query = Query<IMember>().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<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue == value);
break;
case ValuePropertyMatchType.GreaterThan:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue > value);
break;
case ValuePropertyMatchType.LessThan:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue < value);
break;
case ValuePropertyMatchType.GreaterThanOrEqualTo:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue >= value);
break;
case ValuePropertyMatchType.LessThanOrEqualTo:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().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<IMemberRepository>();
var query = uow.Query<IMember>().Where(x =>
var query = Query<IMember>().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<IMember>().Where( x =>
query = Query<IMember>().Where( x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue == value);
break;
case ValuePropertyMatchType.GreaterThan:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue > value);
break;
case ValuePropertyMatchType.LessThan:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue < value);
break;
case ValuePropertyMatchType.GreaterThanOrEqualTo:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().Where(x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue >= value);
break;
case ValuePropertyMatchType.LessThanOrEqualTo:
query = uow.Query<IMember>().Where(x =>
query = Query<IMember>().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<IMember> args = null)
{
// a member has no descendants
repository.Delete(member);
if (args == null)
args = new DeleteEventArgs<IMember>(member, false); // raise event & get flagged files
repository.Delete(member);
if (args == null)
args = new DeleteEventArgs<IMember>(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<IMemberGroup>().Where(g => g.Name == roleName);
var query = Query<IMemberGroup>().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<IMemberRepository>();
//TODO: What about content that has the contenttype as part of its composition?
var query = uow.Query<IMember>().Where(x => x.ContentTypeId == memberTypeId);
var query = Query<IMember>().Where(x => x.ContentTypeId == memberTypeId);
var members = repository.GetByQuery(query).ToArray();
var deleteEventArgs = new DeleteEventArgs<IMember>(members);
@@ -66,7 +66,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repo = uow.CreateRepository<IMigrationEntryRepository>();
var query = uow.Query<IMigrationEntry>()
var query = Query<IMigrationEntry>()
.Where(x => x.MigrationName.ToUpper() == migrationName.ToUpper());
return repo.GetByQuery(query);
}
@@ -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<string, IContentType>();
}
protected IQuery<T> Query<T>() => _uowProvider.ScopeProvider.SqlContext.Query<T>();
#region Content
/// <summary>
/// Exports an <see cref="IContent"/> item to xml as an <see cref="XElement"/>
/// </summary>
@@ -790,7 +787,7 @@ namespace Umbraco.Core.Services
using (var uow = _uowProvider.CreateUnitOfWork())
{
var repository = uow.CreateRepository<IContentTypeRepository>();
var query = uow.Query<IContentType>().Where(x => x.Alias == contentTypeAlias);
var query = Query<IContentType>().Where(x => x.Alias == contentTypeAlias);
var contentType = repository.GetByQuery(query).FirstOrDefault();
if (contentType == null)
+16 -16
View File
@@ -72,7 +72,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repository = uow.CreateRepository<IRelationTypeRepository>();
var query = uow.Query<IRelationType>().Where(x => x.Alias == alias);
var query = Query<IRelationType>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.RelationTypeId == relationTypeId);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.ParentId == id);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.ChildId == id);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.ChildId == id || x.ParentId == id);
var query = Query<IRelation>().Where(x => x.ChildId == id || x.ParentId == id);
return repository.GetByQuery(query);
}
}
@@ -224,13 +224,13 @@ namespace Umbraco.Core.Services
{
var repository = uow.CreateRepository<IRelationTypeRepository>();
var rtQuery = uow.Query<IRelationType>().Where(x => x.Alias == relationTypeAlias);
var rtQuery = Query<IRelationType>().Where(x => x.Alias == relationTypeAlias);
var relationType = repository.GetByQuery(rtQuery).FirstOrDefault();
if (relationType == null)
return Enumerable.Empty<IRelation>();
var relationRepo = uow.CreateRepository<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => (x.ChildId == id || x.ParentId == id) && x.RelationTypeId == relationType.Id);
var query = Query<IRelation>().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<IRelationTypeRepository>();
var query = uow.Query<IRelationType>().Where(x => x.Name == relationTypeName);
var query = Query<IRelationType>().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<IRelationTypeRepository>();
var query = uow.Query<IRelationType>().Where(x => x.Alias == relationTypeAlias);
var query = Query<IRelationType>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.RelationTypeId == relationTypeId);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.RelationTypeId == relationType.Id);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.ParentId == id || x.ChildId == id);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.ParentId == parentId && x.ChildId == childId);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.ParentId == parentId && x.ChildId == childId && x.RelationTypeId == relationType.Id);
var query = Query<IRelation>().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<IRelationRepository>();
var query = uow.Query<IRelation>().Where(x => x.RelationTypeId == relationType.Id);
var query = Query<IRelation>().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<IRelation>().Where(x => x.RelationTypeId == id);
var query = Query<IRelation>().Where(x => x.RelationTypeId == id);
relations.AddRange(repository.GetByQuery(query));
}
}
@@ -22,6 +22,6 @@ namespace Umbraco.Core.Services
UowProvider = provider ?? throw new ArgumentNullException(nameof(provider));
}
protected IQuery<T> Query<T>() => UowProvider.DatabaseContext.Query<T>();
protected IQuery<T> Query<T>() => UowProvider.ScopeProvider.SqlContext.Query<T>();
}
}
+1 -1
View File
@@ -20,7 +20,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repo = uow.CreateRepository<ITaskTypeRepository>();
return repo.GetByQuery(uow.Query<TaskType>().Where(x => x.Alias == taskTypeAlias)).FirstOrDefault();
return repo.GetByQuery(Query<TaskType>().Where(x => x.Alias == taskTypeAlias)).FirstOrDefault();
}
}
+9 -9
View File
@@ -176,7 +176,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repository = uow.CreateRepository<IUserRepository>();
var query = uow.Query<IUser>().Where(x => x.Email.Equals(email));
var query = Query<IUser>().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<IUserRepository>();
var query = uow.Query<IUser>();
var query = Query<IUser>();
switch (matchType)
{
@@ -469,7 +469,7 @@ namespace Umbraco.Core.Services
using (var uow = UowProvider.CreateUnitOfWork(readOnly: true))
{
var repository = uow.CreateRepository<IUserRepository>();
var query = uow.Query<IUser>();
var query = Query<IUser>();
switch (matchType)
{
@@ -516,7 +516,7 @@ namespace Umbraco.Core.Services
switch (countType)
{
case MemberCountType.All:
query = uow.Query<IUser>();
query = Query<IUser>();
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<IUser>().Where(x => x.IsLockedOut);
query = Query<IUser>().Where(x => x.IsLockedOut);
break;
case MemberCountType.Approved:
query = uow.Query<IUser>().Where(x => x.IsApproved);
query = Query<IUser>().Where(x => x.IsApproved);
break;
default:
throw new ArgumentOutOfRangeException(nameof(countType));
@@ -559,7 +559,7 @@ namespace Umbraco.Core.Services
IQuery<IUser> filterQuery = null;
if (filter.IsNullOrWhiteSpace() == false)
{
filterQuery = UowProvider.DatabaseContext.Query<IUser>().Where(x => x.Name.Contains(filter) || x.Username.Contains(filter));
filterQuery = Query<IUser>().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<IUserGroupRepository>();
var query = uow.Query<IUserGroup>().Where(x => aliases.SqlIn(x.Alias));
var query = Query<IUserGroup>().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<IUserGroupRepository>();
var query = uow.Query<IUserGroup>().Where(x => x.Alias == alias);
var query = Query<IUserGroup>().Where(x => x.Alias == alias);
var contents = repository.GetByQuery(query);
return contents.FirstOrDefault();
}
@@ -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<SqlContext> Sql() => _databaseContext.Sql();
protected Sql<SqlContext> Sql() => _sqlContext.Sql();
#region Messenger
+2 -1
View File
@@ -837,7 +837,6 @@
<Compile Include="Persistence\FaultHandling\Strategies\NetworkConnectivityErrorDetectionStrategy.cs" />
<Compile Include="Persistence\FaultHandling\Strategies\SqlAzureTransientErrorDetectionStrategy.cs" />
<Compile Include="Persistence\FaultHandling\ThrottlingCondition.cs" />
<Compile Include="Persistence\IDatabaseContext.cs" />
<Compile Include="Persistence\IUmbracoDatabase.cs" />
<Compile Include="Persistence\IUmbracoDatabaseFactory.cs" />
<Compile Include="Persistence\LocalDb.cs" />
@@ -1198,6 +1197,8 @@
<Compile Include="Persistence\SqlSyntax\SqlSyntaxProviderAttribute.cs" />
<Compile Include="Persistence\SqlSyntax\SqlSyntaxProviderBase.cs" />
<Compile Include="Persistence\SqlSyntax\SqlSyntaxProviderExtensions.cs" />
<Compile Include="Persistence\SqlTemplate.cs" />
<Compile Include="Persistence\SqlTemplates.cs" />
<Compile Include="Persistence\ThreadStaticDatabaseScopeAccessor.cs" />
<Compile Include="Persistence\UmbracoDatabase.cs" />
<Compile Include="Persistence\UmbracoDatabaseExtensions.cs" />
+1 -1
View File
@@ -94,7 +94,7 @@ namespace Umbraco.Examine
private void InitializeQueries()
{
if (_publishedQuery == null)
_publishedQuery = Current.DatabaseContext.Query<IContent>().Where(x => x.Published);
_publishedQuery = Current.SqlContext.Query<IContent>().Where(x => x.Published);
}
#endregion
@@ -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<IPocoDataFactory>(), DatabaseType.SqlServer2008);
var sqlContext = new SqlContext(_sqlSyntax, DatabaseType.SqlServer2008, Mock.Of<IPocoDataFactory>());
_database = new UmbracoDatabase("cstr", sqlContext, dbProviderFactory, _logger);
}
@@ -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<IPocoDataFactory>(), DatabaseType.SQLCe);
var sqlContext = new SqlContext(_sqlSyntax, DatabaseType.SQLCe, Mock.Of<IPocoDataFactory>());
_database = new UmbracoDatabase("cstr", sqlContext, dbProviderFactory, _logger);
_migrationContext = new MigrationContext(_database, _logger);
}
@@ -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<ILogger>()), Mock.Of<IPocoDataFactory>(), DatabaseType.MySQL);
var sqlContext = new SqlContext(new MySqlSyntaxProvider(Mock.Of<ILogger>()), DatabaseType.MySQL, Mock.Of<IPocoDataFactory>());
return new UmbracoDatabase("Server = 169.254.120.3; Database = upgradetest; Uid = umbraco; Pwd = umbraco", sqlContext, dbProviderFactory, Mock.Of<ILogger>());
}
@@ -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<IPocoDataFactory>(), DatabaseType.SQLCe);
var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of<IPocoDataFactory>());
return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoNPocoTests.sdf;Flush Interval=1;", sqlContext, dbProviderFactory, Mock.Of<ILogger>());
}
@@ -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<IPocoDataFactory>(), DatabaseType.SQLCe);
var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of<IPocoDataFactory>());
return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoNPocoTests.sdf;Flush Interval=1;", sqlContext, dbProviderFactory, Mock.Of<ILogger>());
}
@@ -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<IScopeProvider>(() => null)), Mock.Of<IPocoDataFactory>(), DatabaseType.SqlServer2008);
var sqlContext = new SqlContext(new SqlServerSyntaxProvider(new Lazy<IScopeProvider>(() => null)), DatabaseType.SqlServer2008, Mock.Of<IPocoDataFactory>());
return new UmbracoDatabase(@"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco", sqlContext, dbProviderFactory, Mock.Of<ILogger>());
}
@@ -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<IPocoDataFactory>(), DatabaseType.SQLCe);
var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of<IPocoDataFactory>());
return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoNPocoTests.sdf;Flush Interval=1;", sqlContext, dbProviderFactory, Mock.Of<ILogger>());
}
@@ -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<IPocoDataFactory>(), DatabaseType.SQLCe);
var sqlContext = new SqlContext(_sqlSyntax, DatabaseType.SQLCe, Mock.Of<IPocoDataFactory>());
_database = new UmbracoDatabase("cstr", sqlContext, dbProviderFactory, _logger);
}
@@ -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<Thing1Dto>(@"
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<Thing1Dto>()
.From<Thing1Dto>();
var dtos = scope.Database.Fetch<Thing1Dto>(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<Thing2Dto>(@"
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<Thing2Dto>(r => r.Select(x => x.Thing))
.From<Thing2Dto>()
.InnerJoin<Thing1Dto>().On<Thing2Dto, Thing1Dto>((t2, t1) => t2.ThingId == t1.Id);
var dtos = scope.Database.Fetch<Thing2Dto>(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<Thing3Dto>(r => r.Select(x => x.Things))
.From<Thing3Dto>()
.InnerJoin<Thing2Dto>().On<Thing3Dto, Thing2Dto>(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<Thing3Dto>(r => r.Select(x => x.Things)) // select Thing3Dto, and Thing2Dto for Things
.From<Thing3Dto>()
.InnerJoin<Thing2Dto>().On<Thing3Dto, Thing2Dto>(left => left.Id, right => right.ThingId)
.OrderBy<Thing3Dto>(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<Thing3Dto>(x => x.Things, x => x.Id, sql);
var dtos = scope.Database.FetchOneToMany<Thing3Dto>(x => x.Things, sql);
var dtos = scope.Database.FetchOneToMany<Thing3Dto>(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<Thing3Dto>(r => r.Select(x => x.Things)) // select Thing3Dto, and Thing2Dto for Things
.From<Thing3Dto>()
.InnerJoin<Thing2Dto>().On<Thing3Dto, Thing2Dto>(left => left.Id, right => right.ThingId)
.OrderBy<Thing3Dto>(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<Thing3Dto>(x => x.Things, x => x.Id, sql);
var dtos = scope.Database.FetchOneToMany<Thing3Dto>(x => x.Things, sql);
var dtos = scope.Database.FetchOneToMany<Thing3Dto>(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<Thing4Dto>(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<Thing4Dto>(r => r.Select(x => x.Groups))
.From<Thing4Dto>()
.InnerJoin<Thing2GroupDto>().On<Thing4Dto, Thing2GroupDto>((t, t2g) => t.Id == t2g.ThingId)
.InnerJoin<ThingGroupDto>().On<Thing2GroupDto, ThingGroupDto>((t2g, tg) => t2g.GroupId == tg.Id)
.OrderBy<Thing4Dto>(x => x.Id);
var dtos = scope.Database.FetchOneToMany<Thing4Dto>(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<Thing5Dto>(@"
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<Thing1Dto>()
.Append(", COUNT(zbThing2Group.groupId) AS groupCount") // fixme
.From<Thing1Dto>()
.InnerJoin<Thing2GroupDto>().On<Thing1Dto, Thing2GroupDto>((t, t2g) => t.Id == t2g.ThingId)
.GroupBy<Thing1Dto>(x => x.Id, x => x.Name);
var dtos = scope.Database.Fetch<Thing5Dto>(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<Thing1Dto>()
.Where<Thing1Dto>(x => x.Id == 1);
sql.WriteToConsole();
var dto = scope.Database.Fetch<Thing1Dto>(sql).FirstOrDefault();
Assert.IsNotNull(dto);
@@ -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()
@@ -13,25 +13,25 @@ namespace Umbraco.Tests.Persistence.NPocoTests
[Test]
public void TestSqlTemplates()
{
SqlTemplate.Clear();
SqlTemplate.SqlContext = new SqlContext(new SqlCeSyntaxProvider(), Mock.Of<IPocoDataFactory>(), DatabaseType.SQLCe);
var sqlContext = new SqlContext(new SqlCeSyntaxProvider(), DatabaseType.SQLCe, Mock.Of<IPocoDataFactory>());
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();
}
@@ -149,7 +149,7 @@ namespace Umbraco.Tests.Persistence.Querying
{
//mysql escapes backslashes, so we'll test with that
var sqlSyntax = new MySqlSyntaxProvider(Mock.Of<ILogger>());
var sqlContext = new SqlContext(sqlSyntax, SqlContext.PocoDataFactory, DatabaseType.MySQL);
var sqlContext = new SqlContext(sqlSyntax, DatabaseType.MySQL, SqlContext.PocoDataFactory);
Expression<Func<IUser, bool>> predicate = user => user.Username.Equals("mydomain\\myuser");
var modelToSqlExpressionHelper = new ModelToSqlExpressionVisitor<IUser>(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<ILogger>());
var sqlContext = new SqlContext(sqlSyntax, SqlContext.PocoDataFactory, DatabaseType.MySQL);
var sqlContext = new SqlContext(sqlSyntax, DatabaseType.MySQL, SqlContext.PocoDataFactory);
Expression<Func<UserDto, bool>> predicate = user => user.Login.StartsWith("mydomain\\myuser");
var modelToSqlExpressionHelper = new PocoToSqlExpressionVisitor<UserDto>(sqlContext);
@@ -155,7 +155,7 @@ namespace Umbraco.Tests.Persistence.Repositories
Assert.AreEqual(2, versions.Distinct().Count());
var content = repository.GetByQuery(unitOfWork.Query<IContent>().Where(c => c.Id == content1.Id)).ToArray()[0];
var content = repository.GetByQuery(unitOfWork.SqlContext.Query<IContent>().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<IContent>().Where(c => c.Id == content1.Id)).ToArray();
var content = repository.GetByQuery(unitOfWork.SqlContext.Query<IContent>().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<IContent>().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<IContent>().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<IContent>().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<IContent>().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<IContent>().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<IContent>().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<IContent>().Where(x => x.Level == 2);
long totalRecords;
var filterQuery = unitOfWork.Query<IContent>().Where(x => x.Name.Contains("Page 2"));
var filterQuery = unitOfWork.SqlContext.Query<IContent>().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<IContent>().Where(x => x.Level == 2);
long totalRecords;
var filterQuery = unitOfWork.Query<IContent>().Where(x => x.Name.Contains("text"));
var filterQuery = unitOfWork.SqlContext.Query<IContent>().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<IContent>().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<IContent>().Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0"));
var content = repository.GetByQuery(query).SingleOrDefault();
// Assert
@@ -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<IContentType>().Where(x => x.ParentId == contentType.Id));
// Assert
Assert.That(contentTypes.Count(), Is.EqualTo(3));
@@ -292,7 +292,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = CreateRepository(unitOfWork);
// Act
var query = unitOfWork.Query<IDataTypeDefinition>().Where(x => x.PropertyEditorAlias == Constants.PropertyEditors.RadioButtonListAlias);
var query = unitOfWork.SqlContext.Query<IDataTypeDefinition>().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<IDataTypeDefinition>().Where(x => x.Name.StartsWith("D"));
var query = unitOfWork.SqlContext.Query<IDataTypeDefinition>().Where(x => x.Name.StartsWith("D"));
int count = repository.Count(query);
// Assert
@@ -200,7 +200,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = CreateRepository(unitOfWork);
// Act
var query = unitOfWork.Query<IDictionaryItem>().Where(x => x.ItemKey == "Article");
var query = unitOfWork.SqlContext.Query<IDictionaryItem>().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<IDictionaryItem>().Where(x => x.ItemKey.StartsWith("Read"));
var query = unitOfWork.SqlContext.Query<IDictionaryItem>().Where(x => x.ItemKey.StartsWith("Read"));
var result = repository.Count(query);
// Assert
@@ -176,7 +176,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = CreateRepository(unitOfWork);
// Act
var query = unitOfWork.Query<ILanguage>().Where(x => x.IsoCode == "da-DK");
var query = unitOfWork.SqlContext.Query<ILanguage>().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<ILanguage>().Where(x => x.IsoCode.StartsWith("D"));
var query = unitOfWork.SqlContext.Query<ILanguage>().Where(x => x.IsoCode.StartsWith("D"));
int count = repository.Count(query);
// Assert
@@ -134,7 +134,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = new MacroRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of<ILogger>());
// Act
var query = unitOfWork.Query<IMacro>().Where(x => x.Alias.ToUpper() == "TEST1");
var query = unitOfWork.SqlContext.Query<IMacro>().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<ILogger>());
// Act
var query = unitOfWork.Query<IMacro>().Where(x => x.Name.StartsWith("Test"));
var query = unitOfWork.SqlContext.Query<IMacro>().Where(x => x.Name.StartsWith("Test"));
int count = repository.Count(query);
// Assert
@@ -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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => types.Contains(x.ContentTypeId));
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => types.Contains(x.ContentType.Alias));
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().Where(x => x.Level == 2);
long totalRecords;
var filter = unitOfWork.Query<IMedia>().Where(x => x.Name.Contains("File"));
var filter = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == 2);
var query = unitOfWork.SqlContext.Query<IMedia>().Where(x => x.Level == 2);
long totalRecords;
var filter = unitOfWork.Query<IMedia>().Where(x => x.Name.Contains("Test"));
var filter = unitOfWork.SqlContext.Query<IMedia>().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<IMedia>().Where(x => x.Level == level);
var query = unitOfWork.SqlContext.Query<IMedia>().Where(x => x.Level == level);
var result = repository.Count(query);
// Assert
@@ -116,7 +116,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var member = CreateTestMember(key: key);
// Act
var query = unitOfWork.Query<IMember>().Where(x => x.Key == key);
var query = unitOfWork.SqlContext.Query<IMember>().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<IMember>().Where(x =>
var query = provider.SqlContext.Query<IMember>().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<NodeDto>()
.InnerJoin<ContentDto>().On<ContentDto, NodeDto>(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<SqlContext> GetSubquery()
{
var provider = TestObjects.GetScopeUnitOfWorkProvider(Logger);
var sql = provider.DatabaseContext.Sql();
var sql = provider.SqlContext.Sql();
sql.Select("umbracoNode.id")
.From<NodeDto>()
.InnerJoin<ContentDto>().On<ContentDto, NodeDto>(left => left.NodeId, right => right.NodeId)
@@ -197,7 +197,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = CreateRepository(unitOfWork, out repositoryType);
// Act
var query = unitOfWork.Query<IRelation>().Where(x => x.ParentId == NodeDto.NodeIdSeed + 1);
var query = unitOfWork.SqlContext.Query<IRelation>().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<IRelation>().Where(x => x.RelationTypeId == RelationTypeDto.NodeIdSeed);
var query = unitOfWork.SqlContext.Query<IRelation>().Where(x => x.RelationTypeId == RelationTypeDto.NodeIdSeed);
var relations = repository.GetByQuery(query);
// Assert
@@ -190,7 +190,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = CreateRepository(unitOfWork);
// Act
var query = unitOfWork.Query<IRelationType>().Where(x => x.Alias.StartsWith("relate"));
var query = unitOfWork.SqlContext.Query<IRelationType>().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<IRelationType>().Where(x => x.ChildObjectType == childObjType);
var query = unitOfWork.SqlContext.Query<IRelationType>().Where(x => x.ChildObjectType == childObjType);
var result = repository.GetByQuery(query);
// Assert
@@ -179,7 +179,7 @@ namespace Umbraco.Tests.Persistence.Repositories
CreateAndCommitMultipleUserGroups(repository, unitOfWork);
// Act
var query = unitOfWork.Query<IUserGroup>().Where(x => x.Alias == "testUserGroup1");
var query = unitOfWork.SqlContext.Query<IUserGroup>().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<IUserGroup>().Where(x => x.Alias == "testUserGroup1" || x.Alias == "testUserGroup2");
var query = unitOfWork.SqlContext.Query<IUserGroup>().Where(x => x.Alias == "testUserGroup1" || x.Alias == "testUserGroup2");
var result = repository.Count(query);
// Assert
@@ -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<IUser>().Where(x => x.Username == "TestUser1");
var query = unitOfWork.SqlContext.Query<IUser>().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<IUser>().Where(x => x.Username == "TestUser1" || x.Username == "TestUser2");
var query = unitOfWork.SqlContext.Query<IUser>().Where(x => x.Username == "TestUser1" || x.Username == "TestUser2");
var result = repository.Count(query);
// Assert
@@ -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<PropertyDataDto>()
.InnerJoin<PropertyTypeDto>()
.On<PropertyDataDto, PropertyTypeDto>(dto => dto.PropertyTypeId, dto => dto.Id)
@@ -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<NodeDto>().Where<NodeDto>(x => x.NodeObjectType == customObjectType);
nodes = scope.Database.Fetch<NodeDto>(sql);
@@ -49,8 +49,8 @@ namespace Umbraco.Tests.TestHelpers
Mappers = container.GetInstance<IMapperCollection>();
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();
}
+3 -4
View File
@@ -61,7 +61,7 @@ namespace Umbraco.Tests.TestHelpers
{
var syntax = new SqlCeSyntaxProvider();
var connection = GetDbConnection();
var sqlContext = new SqlContext(syntax, Mock.Of<IPocoDataFactory>(), DatabaseType.SQLCe);
var sqlContext = new SqlContext(syntax, DatabaseType.SQLCe, Mock.Of<IPocoDataFactory>());
return new UmbracoDatabase(connection, sqlContext, logger);
}
@@ -76,7 +76,7 @@ namespace Umbraco.Tests.TestHelpers
{
var syntax = new SqlServerSyntaxProvider(new Lazy<IScopeProvider>(() => null)); // do NOT try to get the server's version!
var connection = GetDbConnection();
var sqlContext = new SqlContext(syntax, Mock.Of<IPocoDataFactory>(), DatabaseType.SqlServer2008);
var sqlContext = new SqlContext(syntax, DatabaseType.SqlServer2008, Mock.Of<IPocoDataFactory>());
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<IServiceContainer>());
IDatabaseContext databaseContext = databaseFactory;
return new ScopeUnitOfWorkProvider(scopeProvider, databaseContext, repositoryFactory);
return new ScopeUnitOfWorkProvider(scopeProvider, databaseFactory.SqlContext, repositoryFactory);
}
}
}
+1 -1
View File
@@ -287,7 +287,7 @@ namespace Umbraco.Tests.Testing
sqlSyntaxProviders,
Logger,
Mock.Of<IMapperCollection>()));
Container.RegisterSingleton<IDatabaseContext>(f => f.TryGetInstance<IUmbracoDatabaseFactory>());
Container.RegisterSingleton(f => f.TryGetInstance<IUmbracoDatabaseFactory>().SqlContext);
Container.RegisterCollectionBuilder<UrlSegmentProviderCollectionBuilder>(); // empty
Container.RegisterSingleton(factory => new FileSystems(factory.TryGetInstance<ILogger>()));

Some files were not shown because too many files have changed in this diff Show More