diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs
index 73602bb..39740b5 100644
--- a/AmalgamationTool/DynamORM.Amalgamation.cs
+++ b/AmalgamationTool/DynamORM.Amalgamation.cs
@@ -1932,7 +1932,30 @@ namespace DynamORM
/// Table alias.
/// use no lock.
/// This instance to permit chaining.
- public virtual IDynamicTypedSelectQueryBuilder From(string alias = null, bool noLock = false)
+ public virtual IDynamicSelectQueryBuilder From(string alias = null, bool noLock = false)
+ {
+ // TODO: Make it more readable and maitainable
+ if (noLock)
+ {
+ if (string.IsNullOrEmpty(alias))
+ return new DynamicSelectQueryBuilder(this).From(x => x(typeof(T)).NoLock());
+ else
+ return new DynamicSelectQueryBuilder(this).From(x => x(typeof(T)).As(alias).NoLock());
+ }
+ else
+ {
+ if (string.IsNullOrEmpty(alias))
+ return new DynamicSelectQueryBuilder(this).From(x => x(typeof(T)));
+ else
+ return new DynamicSelectQueryBuilder(this).From(x => x(typeof(T)).As(alias));
+ }
+ }
+ /// Adds to the FROM clause using .
+ /// Type which can be represented in database.
+ /// Table alias.
+ /// use no lock.
+ /// This instance to permit chaining.
+ public virtual IDynamicTypedSelectQueryBuilder FromTyped(string alias = null, bool noLock = false)
{
// TODO: Make it more readable and maitainable
DynamicTypedSelectQueryBuilder builder = new DynamicTypedSelectQueryBuilder(this);
@@ -1978,11 +2001,16 @@ namespace DynamORM
/// Adds to the INSERT INTO clause using .
/// Type which can be represented in database.
/// This instance to permit chaining.
- public virtual IDynamicTypedInsertQueryBuilder Insert()
+ public virtual IDynamicInsertQueryBuilder Insert()
{
- DynamicTypedInsertQueryBuilder builder = new DynamicTypedInsertQueryBuilder(this);
- builder.Table(typeof(T));
- return builder;
+ return new DynamicInsertQueryBuilder(this).Table(typeof(T));
+ }
+ /// Adds to the INSERT INTO clause using .
+ /// Type which can be represented in database.
+ /// This instance to permit chaining.
+ public virtual IDynamicTypedInsertQueryBuilder InsertTyped()
+ {
+ return new DynamicTypedInsertQueryBuilder(this, true);
}
/// Adds to the INSERT INTO clause using .
/// Type which can be represented in database.
@@ -2080,11 +2108,16 @@ namespace DynamORM
/// Adds to the UPDATE clause using .
/// Type which can be represented in database.
/// This instance to permit chaining.
- public virtual IDynamicTypedUpdateQueryBuilder Update()
+ public virtual IDynamicUpdateQueryBuilder Update()
{
- DynamicTypedUpdateQueryBuilder builder = new DynamicTypedUpdateQueryBuilder(this);
- builder.Table(typeof(T));
- return builder;
+ return new DynamicUpdateQueryBuilder(this).Table(typeof(T));
+ }
+ /// Adds to the UPDATE clause using .
+ /// Type which can be represented in database.
+ /// This instance to permit chaining.
+ public virtual IDynamicTypedUpdateQueryBuilder UpdateTyped()
+ {
+ return new DynamicTypedUpdateQueryBuilder(this, true);
}
/// Adds to the UPDATE clause using .
/// Type which can be represented in database.
@@ -2291,11 +2324,16 @@ namespace DynamORM
/// Adds to the DELETE FROM clause using .
/// Type which can be represented in database.
/// This instance to permit chaining.
- public virtual IDynamicTypedDeleteQueryBuilder Delete()
+ public virtual IDynamicDeleteQueryBuilder Delete()
{
- DynamicTypedDeleteQueryBuilder builder = new DynamicTypedDeleteQueryBuilder(this);
- builder.Table(typeof(T));
- return builder;
+ return new DynamicDeleteQueryBuilder(this).Table(typeof(T));
+ }
+ /// Adds to the DELETE FROM clause using .
+ /// Type which can be represented in database.
+ /// This instance to permit chaining.
+ public virtual IDynamicTypedDeleteQueryBuilder DeleteTyped()
+ {
+ return new DynamicTypedDeleteQueryBuilder(this, true);
}
/// Adds to the DELETE FROM clause using .
/// Type which can be represented in database.
@@ -7210,18 +7248,6 @@ namespace DynamORM
/// Builder instance.
IDynamicTypedSelectQueryBuilder Join(Func, TypedJoinBuilder> specification);
- /// Add INNER JOIN using typed ON predicate.
- IDynamicTypedSelectQueryBuilder InnerJoin(Expression> on, string alias = null);
-
- /// Add LEFT JOIN using typed ON predicate.
- IDynamicTypedSelectQueryBuilder LeftJoin(Expression> on, string alias = null);
-
- /// Add RIGHT JOIN using typed ON predicate.
- IDynamicTypedSelectQueryBuilder RightJoin(Expression> on, string alias = null);
-
- /// Add FULL JOIN using typed ON predicate.
- IDynamicTypedSelectQueryBuilder FullJoin(Expression> on, string alias = null);
-
/// Add typed where predicate using mapped properties.
/// Predicate to parse.
/// Builder instance.
@@ -10636,8 +10662,16 @@ namespace DynamORM
internal class DynamicTypedDeleteQueryBuilder : DynamicDeleteQueryBuilder, IDynamicTypedDeleteQueryBuilder
{
internal DynamicTypedDeleteQueryBuilder(DynamicDatabase db)
+ : this(db, false)
+ {
+ }
+ internal DynamicTypedDeleteQueryBuilder(DynamicDatabase db, bool mapType)
: base(db)
{
+ if (mapType)
+ this.Table(typeof(T));
+ else
+ this.Table(typeof(T).Name);
}
public IDynamicTypedDeleteQueryBuilder Where(Expression> predicate)
{
@@ -10675,8 +10709,16 @@ namespace DynamORM
internal class DynamicTypedInsertQueryBuilder : DynamicInsertQueryBuilder, IDynamicTypedInsertQueryBuilder
{
internal DynamicTypedInsertQueryBuilder(DynamicDatabase db)
+ : this(db, false)
+ {
+ }
+ internal DynamicTypedInsertQueryBuilder(DynamicDatabase db, bool mapType)
: base(db)
{
+ if (mapType)
+ this.Table(typeof(T));
+ else
+ this.Table(typeof(T).Name);
}
public IDynamicTypedInsertQueryBuilder Insert(Expression> selector, object value)
{
@@ -10810,22 +10852,6 @@ namespace DynamORM
AppendJoinClause(joinExpr);
return this;
}
- public IDynamicTypedSelectQueryBuilder InnerJoin(Expression> on, string alias = null)
- {
- return Join(on, alias, DynamicJoinType.Inner);
- }
- public IDynamicTypedSelectQueryBuilder LeftJoin(Expression> on, string alias = null)
- {
- return Join(on, alias, DynamicJoinType.Left);
- }
- public IDynamicTypedSelectQueryBuilder RightJoin(Expression> on, string alias = null)
- {
- return Join(on, alias, DynamicJoinType.Right);
- }
- public IDynamicTypedSelectQueryBuilder FullJoin(Expression> on, string alias = null)
- {
- return Join(on, alias, DynamicJoinType.Full);
- }
public new IDynamicTypedSelectQueryBuilder Join(params Func[] func)
{
base.Join(func);
@@ -11363,8 +11389,16 @@ namespace DynamORM
internal class DynamicTypedUpdateQueryBuilder : DynamicUpdateQueryBuilder, IDynamicTypedUpdateQueryBuilder
{
internal DynamicTypedUpdateQueryBuilder(DynamicDatabase db)
+ : this(db, false)
+ {
+ }
+ internal DynamicTypedUpdateQueryBuilder(DynamicDatabase db, bool mapType)
: base(db)
{
+ if (mapType)
+ this.Table(typeof(T));
+ else
+ this.Table(typeof(T).Name);
}
public IDynamicTypedUpdateQueryBuilder Where(Expression> predicate)
{
diff --git a/DynamORM.Tests/Select/TypedFluentBuilderTests.cs b/DynamORM.Tests/Select/TypedFluentBuilderTests.cs
index 84ff65a..d479c38 100644
--- a/DynamORM.Tests/Select/TypedFluentBuilderTests.cs
+++ b/DynamORM.Tests/Select/TypedFluentBuilderTests.cs
@@ -121,7 +121,7 @@ namespace DynamORM.Tests.Select
public void TestTypedRightJoin()
{
var cmd = Database.FromTyped("u")
- .Join(j => j.Right().As("X").On((l, r) => l.Id == r.Id))
+ .Join(j => j.Right().As("x").On((l, r) => l.Id == r.Id))
.Select(u => u.Id);
Assert.AreEqual("SELECT u.\"id_user\" FROM \"sample_users\" AS u RIGHT JOIN \"sample_users\" AS x ON (u.\"id_user\" = x.\"id_user\")",
@@ -132,7 +132,7 @@ namespace DynamORM.Tests.Select
public void TestTypedFullJoin()
{
var cmd = Database.FromTyped("u")
- .Join(j => j.Full().As("X").On((l, r) => l.Id == r.Id))
+ .Join(j => j.Full().As("x").On((l, r) => l.Id == r.Id))
.Select(u => u.Id);
Assert.AreEqual("SELECT u.\"id_user\" FROM \"sample_users\" AS u FULL JOIN \"sample_users\" AS x ON (u.\"id_user\" = x.\"id_user\")",
diff --git a/DynamORM.Tests/Select/TypedFluentJoinSyntaxTests.cs b/DynamORM.Tests/Select/TypedFluentJoinSyntaxTests.cs
index 4c29f68..d11945a 100644
--- a/DynamORM.Tests/Select/TypedFluentJoinSyntaxTests.cs
+++ b/DynamORM.Tests/Select/TypedFluentJoinSyntaxTests.cs
@@ -33,7 +33,7 @@ namespace DynamORM.Tests.Select
[Test]
public void TestTypedJoinDefaultJoinKeyword()
{
- var cmd = Database.From("usr")
+ var cmd = Database.FromTyped("usr")
.Join(j => j.As("uc").On((u, c) => u.IdUser == c.UserId));
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
@@ -42,7 +42,7 @@ namespace DynamORM.Tests.Select
[Test]
public void TestTypedInnerJoinWithAndNull()
{
- var cmd = Database.From("usr")
+ var cmd = Database.FromTyped("usr")
.Join(j => j.Inner().As("uc").On((u, c) => u.IdUser == c.UserId && c.Users != null))
.Select(u => u.IdUser);
@@ -52,7 +52,7 @@ namespace DynamORM.Tests.Select
[Test]
public void TestTypedJoinWithNoLock()
{
- var cmd = Database.From("usr", noLock: true)
+ var cmd = Database.FromTyped("usr", noLock: true)
.Join(j => j.Inner().As("uc").NoLock().On((u, c) => u.IdUser == c.UserId));
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr WITH(NOLOCK) INNER JOIN \"dbo\".\"UserClients\" AS uc WITH(NOLOCK) ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
@@ -61,7 +61,7 @@ namespace DynamORM.Tests.Select
[Test]
public void TestTypedLeftOuterJoin()
{
- var cmd = Database.From("usr")
+ var cmd = Database.FromTyped("usr")
.Join(j => j.LeftOuter().As("uc").On((u, c) => u.IdUser == c.UserId));
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr LEFT OUTER JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
@@ -70,7 +70,7 @@ namespace DynamORM.Tests.Select
[Test]
public void TestTypedRightOuterJoin()
{
- var cmd = Database.From("usr")
+ var cmd = Database.FromTyped("usr")
.Join(j => j.RightOuter().As("uc").On((u, c) => u.IdUser == c.UserId));
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr RIGHT OUTER JOIN \"dbo\".\"UserClients\" AS uc ON (usr.\"Id_User\" = uc.\"User_Id\")", cmd.CommandText());
@@ -79,7 +79,7 @@ namespace DynamORM.Tests.Select
[Test]
public void TestTypedCustomJoinTypeCrossApply()
{
- var cmd = Database.From("usr")
+ var cmd = Database.FromTyped("usr")
.Join(j => j.Type("CROSS APPLY").As("uc"));
Assert.AreEqual("SELECT * FROM \"dbo\".\"Users\" AS usr CROSS APPLY \"dbo\".\"UserClients\" AS uc", cmd.CommandText());
@@ -88,7 +88,7 @@ namespace DynamORM.Tests.Select
[Test]
public void TestTypedJoinAndWhereParameterOrder()
{
- var cmd = Database.From("usr")
+ var cmd = Database.FromTyped("usr")
.Join(j => j.As("uc").On((u, c) => u.IdUser == c.UserId && c.Deleted == 0))
.Where(u => u.Active == 1);
diff --git a/DynamORM/Builders/Implementation/DynamicTypedDeleteQueryBuilder.cs b/DynamORM/Builders/Implementation/DynamicTypedDeleteQueryBuilder.cs
index eddbd13..f475f95 100644
--- a/DynamORM/Builders/Implementation/DynamicTypedDeleteQueryBuilder.cs
+++ b/DynamORM/Builders/Implementation/DynamicTypedDeleteQueryBuilder.cs
@@ -6,6 +6,7 @@
using System;
using System.Linq.Expressions;
+using DynamORM.Builders.Extensions;
namespace DynamORM.Builders.Implementation
{
@@ -14,8 +15,17 @@ namespace DynamORM.Builders.Implementation
internal class DynamicTypedDeleteQueryBuilder : DynamicDeleteQueryBuilder, IDynamicTypedDeleteQueryBuilder
{
internal DynamicTypedDeleteQueryBuilder(DynamicDatabase db)
+ : this(db, false)
+ {
+ }
+
+ internal DynamicTypedDeleteQueryBuilder(DynamicDatabase db, bool mapType)
: base(db)
{
+ if (mapType)
+ this.Table(typeof(T));
+ else
+ this.Table(typeof(T).Name);
}
public IDynamicTypedDeleteQueryBuilder Where(Expression> predicate)
diff --git a/DynamORM/Builders/Implementation/DynamicTypedInsertQueryBuilder.cs b/DynamORM/Builders/Implementation/DynamicTypedInsertQueryBuilder.cs
index 257f7ee..2ae6ee1 100644
--- a/DynamORM/Builders/Implementation/DynamicTypedInsertQueryBuilder.cs
+++ b/DynamORM/Builders/Implementation/DynamicTypedInsertQueryBuilder.cs
@@ -6,6 +6,7 @@
using System;
using System.Linq.Expressions;
+using DynamORM.Builders.Extensions;
namespace DynamORM.Builders.Implementation
{
@@ -14,8 +15,17 @@ namespace DynamORM.Builders.Implementation
internal class DynamicTypedInsertQueryBuilder : DynamicInsertQueryBuilder, IDynamicTypedInsertQueryBuilder
{
internal DynamicTypedInsertQueryBuilder(DynamicDatabase db)
+ : this(db, false)
+ {
+ }
+
+ internal DynamicTypedInsertQueryBuilder(DynamicDatabase db, bool mapType)
: base(db)
{
+ if (mapType)
+ this.Table(typeof(T));
+ else
+ this.Table(typeof(T).Name);
}
public IDynamicTypedInsertQueryBuilder Insert(Expression> selector, object value)
diff --git a/DynamORM/Builders/Implementation/DynamicTypedUpdateQueryBuilder.cs b/DynamORM/Builders/Implementation/DynamicTypedUpdateQueryBuilder.cs
index efa2c26..6b6720d 100644
--- a/DynamORM/Builders/Implementation/DynamicTypedUpdateQueryBuilder.cs
+++ b/DynamORM/Builders/Implementation/DynamicTypedUpdateQueryBuilder.cs
@@ -6,6 +6,7 @@
using System;
using System.Linq.Expressions;
+using DynamORM.Builders.Extensions;
namespace DynamORM.Builders.Implementation
{
@@ -14,8 +15,17 @@ namespace DynamORM.Builders.Implementation
internal class DynamicTypedUpdateQueryBuilder : DynamicUpdateQueryBuilder, IDynamicTypedUpdateQueryBuilder
{
internal DynamicTypedUpdateQueryBuilder(DynamicDatabase db)
+ : this(db, false)
+ {
+ }
+
+ internal DynamicTypedUpdateQueryBuilder(DynamicDatabase db, bool mapType)
: base(db)
{
+ if (mapType)
+ this.Table(typeof(T));
+ else
+ this.Table(typeof(T).Name);
}
public IDynamicTypedUpdateQueryBuilder Where(Expression> predicate)
diff --git a/DynamORM/DynamicDatabase.cs b/DynamORM/DynamicDatabase.cs
index a6e1250..83b4e9b 100644
--- a/DynamORM/DynamicDatabase.cs
+++ b/DynamORM/DynamicDatabase.cs
@@ -535,12 +535,10 @@ namespace DynamORM
/// Adds to the INSERT INTO clause using .
/// Type which can be represented in database.
/// This instance to permit chaining.
- public virtual IDynamicTypedInsertQueryBuilder InsertTyped()
- {
- DynamicTypedInsertQueryBuilder builder = new DynamicTypedInsertQueryBuilder(this);
- builder.Table(typeof(T));
- return builder;
- }
+ public virtual IDynamicTypedInsertQueryBuilder InsertTyped()
+ {
+ return new DynamicTypedInsertQueryBuilder(this, true);
+ }
/// Adds to the INSERT INTO clause using .
/// Type which can be represented in database.
@@ -652,12 +650,10 @@ namespace DynamORM
/// Adds to the UPDATE clause using .
/// Type which can be represented in database.
/// This instance to permit chaining.
- public virtual IDynamicTypedUpdateQueryBuilder UpdateTyped()
- {
- DynamicTypedUpdateQueryBuilder builder = new DynamicTypedUpdateQueryBuilder(this);
- builder.Table(typeof(T));
- return builder;
- }
+ public virtual IDynamicTypedUpdateQueryBuilder UpdateTyped()
+ {
+ return new DynamicTypedUpdateQueryBuilder(this, true);
+ }
/// Adds to the UPDATE clause using .
/// Type which can be represented in database.
@@ -883,12 +879,10 @@ namespace DynamORM
/// Adds to the DELETE FROM clause using .
/// Type which can be represented in database.
/// This instance to permit chaining.
- public virtual IDynamicTypedDeleteQueryBuilder DeleteTyped()
- {
- DynamicTypedDeleteQueryBuilder builder = new DynamicTypedDeleteQueryBuilder(this);
- builder.Table(typeof(T));
- return builder;
- }
+ public virtual IDynamicTypedDeleteQueryBuilder DeleteTyped()
+ {
+ return new DynamicTypedDeleteQueryBuilder(this, true);
+ }
/// Adds to the DELETE FROM clause using .
/// Type which can be represented in database.