From 3d430b0124f623e3c071b7a498848d6e5f57f60b Mon Sep 17 00:00:00 2001 From: root Date: Thu, 26 Feb 2026 19:54:37 +0100 Subject: [PATCH] Fix typed builder compatibility after rebase --- AmalgamationTool/DynamORM.Amalgamation.cs | 116 +++++++++++------- .../Select/TypedFluentBuilderTests.cs | 4 +- .../Select/TypedFluentJoinSyntaxTests.cs | 14 +-- .../DynamicTypedDeleteQueryBuilder.cs | 10 ++ .../DynamicTypedInsertQueryBuilder.cs | 10 ++ .../DynamicTypedUpdateQueryBuilder.cs | 10 ++ DynamORM/DynamicDatabase.cs | 30 ++--- 7 files changed, 126 insertions(+), 68 deletions(-) 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.