Refactor ISqlContext and SqlTemplates
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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>()
|
||||
{
|
||||
|
||||
+1
-1
@@ -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>()
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
+7
-22
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Umbraco.Core.Scoping
|
||||
|
||||
public IUmbracoDatabaseFactory DatabaseFactory { get; }
|
||||
|
||||
public IDatabaseContext DatabaseContext => DatabaseFactory;
|
||||
public ISqlContext SqlContext => DatabaseFactory.SqlContext;
|
||||
|
||||
#region Context
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user