mirror of
https://github.com/DapperLib/Dapper.git
synced 2026-10-21 08:20:14 +08:00
757999a07e
--HG-- rename : Properties/AssemblyInfo.cs => Dapper/Properties/AssemblyInfo.cs rename : SqlMapper.cs => Dapper/SqlMapper.cs rename : SqlMapper.csproj => Tests/DapperTests.csproj rename : EntityFramework/Model.Designer.cs => Tests/EntityFramework/Model.Designer.cs rename : EntityFramework/Model.edmx => Tests/EntityFramework/Model.edmx rename : License.txt => Tests/License.txt rename : Linq2Sql/DataClasses.dbml => Tests/Linq2Sql/DataClasses.dbml rename : Linq2Sql/DataClasses.dbml.layout => Tests/Linq2Sql/DataClasses.dbml.layout rename : Linq2Sql/DataClasses.designer.cs => Tests/Linq2Sql/DataClasses.designer.cs rename : Linq2Sql/Post.cs => Tests/Linq2Sql/Post.cs rename : Massive/Massive.cs => Tests/Massive/Massive.cs rename : NHibernate/Iesi.Collections.dll => Tests/NHibernate/Iesi.Collections.dll rename : NHibernate/LinFu.DynamicProxy.dll => Tests/NHibernate/LinFu.DynamicProxy.dll rename : NHibernate/NHibernate.ByteCode.LinFu.dll => Tests/NHibernate/NHibernate.ByteCode.LinFu.dll rename : NHibernate/NHibernate.dll => Tests/NHibernate/NHibernate.dll rename : NHibernate/NHibernateHelper.cs => Tests/NHibernate/NHibernateHelper.cs rename : NHibernate/Post.hbm.xml => Tests/NHibernate/Post.hbm.xml rename : NHibernate/hibernate.cfg.xml => Tests/NHibernate/hibernate.cfg.xml rename : OrmLite/ServiceStack.Common.dll => Tests/OrmLite/ServiceStack.Common.dll rename : OrmLite/ServiceStack.Interfaces.dll => Tests/OrmLite/ServiceStack.Interfaces.dll rename : OrmLite/ServiceStack.OrmLite.SqlServer.dll => Tests/OrmLite/ServiceStack.OrmLite.SqlServer.dll rename : OrmLite/ServiceStack.OrmLite.dll => Tests/OrmLite/ServiceStack.OrmLite.dll rename : OrmLite/ServiceStack.Text.dll => Tests/OrmLite/ServiceStack.Text.dll rename : PerformanceTests.cs => Tests/PerformanceTests.cs rename : PetaPoco/PetaPoco.cs => Tests/PetaPoco/PetaPoco.cs rename : Program.cs => Tests/Program.cs rename : Properties/AssemblyInfo.cs => Tests/Properties/AssemblyInfo.cs rename : Properties/Settings.Designer.cs => Tests/Properties/Settings.Designer.cs rename : Properties/Settings.settings => Tests/Properties/Settings.settings rename : SubSonic/ActiveRecord.cs => Tests/SubSonic/ActiveRecord.cs rename : SubSonic/ActiveRecord.tt => Tests/SubSonic/ActiveRecord.tt rename : SubSonic/Context.cs => Tests/SubSonic/Context.cs rename : SubSonic/Context.tt => Tests/SubSonic/Context.tt rename : SubSonic/SQLServer.ttinclude => Tests/SubSonic/SQLServer.ttinclude rename : SubSonic/Settings.ttinclude => Tests/SubSonic/Settings.ttinclude rename : SubSonic/StoredProcedures.cs => Tests/SubSonic/StoredProcedures.cs rename : SubSonic/StoredProcedures.tt => Tests/SubSonic/StoredProcedures.tt rename : SubSonic/Structs.cs => Tests/SubSonic/Structs.cs rename : SubSonic/Structs.tt => Tests/SubSonic/Structs.tt rename : SubSonic/SubSonic.Core.dll => Tests/SubSonic/SubSonic.Core.dll rename : Tests.cs => Tests/Tests.cs rename : app.config => Tests/app.config rename : bltoolkit/BLToolkit.4.dll => Tests/bltoolkit/BLToolkit.4.dll
258 lines
8.2 KiB
C#
258 lines
8.2 KiB
C#
|
|
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using SubSonic.DataProviders;
|
|
using SubSonic.Extensions;
|
|
using SubSonic.Linq.Structure;
|
|
using SubSonic.Query;
|
|
using SubSonic.Schema;
|
|
using System.Data.Common;
|
|
using System.Collections.Generic;
|
|
|
|
namespace SubSonic
|
|
{
|
|
public partial class tempdbDB : IQuerySurface
|
|
{
|
|
|
|
public IDataProvider DataProvider;
|
|
public DbQueryProvider provider;
|
|
|
|
public static IDataProvider DefaultDataProvider { get; set; }
|
|
|
|
public bool TestMode
|
|
{
|
|
get
|
|
{
|
|
return DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase);
|
|
}
|
|
}
|
|
|
|
public tempdbDB()
|
|
{
|
|
if (DefaultDataProvider == null) {
|
|
DataProvider = ProviderFactory.GetProvider("Smackdown.Properties.Settings.tempdbConnectionString");
|
|
}
|
|
else {
|
|
DataProvider = DefaultDataProvider;
|
|
}
|
|
Init();
|
|
}
|
|
|
|
public tempdbDB(string connectionStringName)
|
|
{
|
|
DataProvider = ProviderFactory.GetProvider(connectionStringName);
|
|
Init();
|
|
}
|
|
|
|
public tempdbDB(string connectionString, string providerName)
|
|
{
|
|
DataProvider = ProviderFactory.GetProvider(connectionString,providerName);
|
|
Init();
|
|
}
|
|
|
|
public ITable FindByPrimaryKey(string pkName)
|
|
{
|
|
return DataProvider.Schema.Tables.SingleOrDefault(x => x.PrimaryKey.Name.Equals(pkName, StringComparison.InvariantCultureIgnoreCase));
|
|
}
|
|
|
|
public Query<T> GetQuery<T>()
|
|
{
|
|
return new Query<T>(provider);
|
|
}
|
|
|
|
public ITable FindTable(string tableName)
|
|
{
|
|
return DataProvider.FindTable(tableName);
|
|
}
|
|
|
|
public IDataProvider Provider
|
|
{
|
|
get { return DataProvider; }
|
|
set {DataProvider=value;}
|
|
}
|
|
|
|
public DbQueryProvider QueryProvider
|
|
{
|
|
get { return provider; }
|
|
}
|
|
|
|
BatchQuery _batch = null;
|
|
public void Queue<T>(IQueryable<T> qry)
|
|
{
|
|
if (_batch == null)
|
|
_batch = new BatchQuery(Provider, QueryProvider);
|
|
_batch.Queue(qry);
|
|
}
|
|
|
|
public void Queue(ISqlQuery qry)
|
|
{
|
|
if (_batch == null)
|
|
_batch = new BatchQuery(Provider, QueryProvider);
|
|
_batch.Queue(qry);
|
|
}
|
|
|
|
public void ExecuteTransaction(IList<DbCommand> commands)
|
|
{
|
|
if(!TestMode)
|
|
{
|
|
using(var connection = commands[0].Connection)
|
|
{
|
|
if (connection.State == ConnectionState.Closed)
|
|
connection.Open();
|
|
|
|
using (var trans = connection.BeginTransaction())
|
|
{
|
|
foreach (var cmd in commands)
|
|
{
|
|
cmd.Transaction = trans;
|
|
cmd.Connection = connection;
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
trans.Commit();
|
|
}
|
|
connection.Close();
|
|
}
|
|
}
|
|
}
|
|
|
|
public IDataReader ExecuteBatch()
|
|
{
|
|
if (_batch == null)
|
|
throw new InvalidOperationException("There's nothing in the queue");
|
|
if(!TestMode)
|
|
return _batch.ExecuteReader();
|
|
return null;
|
|
}
|
|
|
|
public Query<Post> Posts { get; set; }
|
|
|
|
|
|
|
|
#region ' Aggregates and SubSonic Queries '
|
|
public Select SelectColumns(params string[] columns)
|
|
{
|
|
return new Select(DataProvider, columns);
|
|
}
|
|
|
|
public Select Select
|
|
{
|
|
get { return new Select(this.Provider); }
|
|
}
|
|
|
|
public Insert Insert
|
|
{
|
|
get { return new Insert(this.Provider); }
|
|
}
|
|
|
|
public Update<T> Update<T>() where T:new()
|
|
{
|
|
return new Update<T>(this.Provider);
|
|
}
|
|
|
|
public SqlQuery Delete<T>(Expression<Func<T,bool>> column) where T:new()
|
|
{
|
|
LambdaExpression lamda = column;
|
|
SqlQuery result = new Delete<T>(this.Provider);
|
|
result = result.From<T>();
|
|
result.Constraints=lamda.ParseConstraints().ToList();
|
|
return result;
|
|
}
|
|
|
|
public SqlQuery Max<T>(Expression<Func<T,object>> column)
|
|
{
|
|
LambdaExpression lamda = column;
|
|
string colName = lamda.ParseObjectValue();
|
|
string objectName = typeof(T).Name;
|
|
string tableName = DataProvider.FindTable(objectName).Name;
|
|
return new Select(DataProvider, new Aggregate(colName, AggregateFunction.Max)).From(tableName);
|
|
}
|
|
|
|
public SqlQuery Min<T>(Expression<Func<T,object>> column)
|
|
{
|
|
LambdaExpression lamda = column;
|
|
string colName = lamda.ParseObjectValue();
|
|
string objectName = typeof(T).Name;
|
|
string tableName = this.Provider.FindTable(objectName).Name;
|
|
return new Select(this.Provider, new Aggregate(colName, AggregateFunction.Min)).From(tableName);
|
|
}
|
|
|
|
public SqlQuery Sum<T>(Expression<Func<T,object>> column)
|
|
{
|
|
LambdaExpression lamda = column;
|
|
string colName = lamda.ParseObjectValue();
|
|
string objectName = typeof(T).Name;
|
|
string tableName = this.Provider.FindTable(objectName).Name;
|
|
return new Select(this.Provider, new Aggregate(colName, AggregateFunction.Sum)).From(tableName);
|
|
}
|
|
|
|
public SqlQuery Avg<T>(Expression<Func<T,object>> column)
|
|
{
|
|
LambdaExpression lamda = column;
|
|
string colName = lamda.ParseObjectValue();
|
|
string objectName = typeof(T).Name;
|
|
string tableName = this.Provider.FindTable(objectName).Name;
|
|
return new Select(this.Provider, new Aggregate(colName, AggregateFunction.Avg)).From(tableName);
|
|
}
|
|
|
|
public SqlQuery Count<T>(Expression<Func<T,object>> column)
|
|
{
|
|
LambdaExpression lamda = column;
|
|
string colName = lamda.ParseObjectValue();
|
|
string objectName = typeof(T).Name;
|
|
string tableName = this.Provider.FindTable(objectName).Name;
|
|
return new Select(this.Provider, new Aggregate(colName, AggregateFunction.Count)).From(tableName);
|
|
}
|
|
|
|
public SqlQuery Variance<T>(Expression<Func<T,object>> column)
|
|
{
|
|
LambdaExpression lamda = column;
|
|
string colName = lamda.ParseObjectValue();
|
|
string objectName = typeof(T).Name;
|
|
string tableName = this.Provider.FindTable(objectName).Name;
|
|
return new Select(this.Provider, new Aggregate(colName, AggregateFunction.Var)).From(tableName);
|
|
}
|
|
|
|
public SqlQuery StandardDeviation<T>(Expression<Func<T,object>> column)
|
|
{
|
|
LambdaExpression lamda = column;
|
|
string colName = lamda.ParseObjectValue();
|
|
string objectName = typeof(T).Name;
|
|
string tableName = this.Provider.FindTable(objectName).Name;
|
|
return new Select(this.Provider, new Aggregate(colName, AggregateFunction.StDev)).From(tableName);
|
|
}
|
|
|
|
#endregion
|
|
|
|
void Init()
|
|
{
|
|
provider = new DbQueryProvider(this.Provider);
|
|
|
|
#region ' Query Defs '
|
|
Posts = new Query<Post>(provider);
|
|
#endregion
|
|
|
|
|
|
#region ' Schemas '
|
|
if(DataProvider.Schema.Tables.Count == 0)
|
|
{
|
|
DataProvider.Schema.Tables.Add(new PostsTable(DataProvider));
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
|
|
#region ' Helpers '
|
|
|
|
internal static DateTime DateTimeNowTruncatedDownToSecond() {
|
|
var now = DateTime.Now;
|
|
return now.AddTicks(-now.Ticks % TimeSpan.TicksPerSecond);
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
} |