Skip to content

Commit a3b9070

Browse files
authored
Merge pull request #490 from phnx47/fix-init-logical-deletion-for-joins
Fix initialization of logical deletion for joins
2 parents 6825252 + 909a6e0 commit a3b9070

11 files changed

Lines changed: 458 additions & 436 deletions

File tree

src/SqlGenerator/SqlGenerator.InitLogicalDeleted.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
namespace MicroOrm.Dapper.Repositories.SqlGenerator;
99

10-
1110
public partial class SqlGenerator<TEntity>
1211
where TEntity : class
1312
{
@@ -28,7 +27,8 @@ private void InitLogicalDeleted()
2827
continue;
2928

3029
JoinsLogicalDelete ??= new Dictionary<string, PropertyInfo>();
31-
JoinsLogicalDelete.Add(joinAttr.TableName, deleteAttr);
30+
if (!JoinsLogicalDelete.ContainsKey(joinAttr.TableName))
31+
JoinsLogicalDelete.Add(joinAttr.TableName, deleteAttr);
3232
}
3333

3434

tests/Repositories.MSSQL.Tests/DatabaseFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ void CreateSchema(string dbSchema)
3737
Db.Connection.Execute(@"CREATE TABLE Cities (Identifier uniqueidentifier not null, Name varchar(256) not null)");
3838
Db.Connection.Execute(@"CREATE TABLE Reports (Id int not null, AnotherId int not null, UserId int not null, PRIMARY KEY (Id, AnotherId))");
3939
Db.Connection.Execute(
40-
@"CREATE TABLE DAB.Phones (Id int IDENTITY(1,1) not null, PNumber varchar(256) not null, IsActive bit not null, Code varchar(256) not null, PRIMARY KEY (Id))");
40+
@"CREATE TABLE DAB.Phones (Id int IDENTITY(1,1) not null, PNumber varchar(256) not null, IsActive bit not null, Code varchar(256) not null, Deleted bit, PRIMARY KEY (Id))");
4141

4242
InitData.Execute(Db);
4343
}

tests/Repositories.MySql.Tests/DatabaseFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private void InitDb()
3434
Db.Connection.Execute($"USE `DAB`");
3535
Db.Connection.Execute("CREATE TABLE IF NOT EXISTS `Phones` " +
3636
"(`Id` int not null auto_increment, `PNumber` varchar(256) not null, " +
37-
"`IsActive` boolean not null, `Code` varchar(256) not null, PRIMARY KEY (`Id`));");
37+
"`IsActive` boolean not null, `Code` varchar(256) not null, `Deleted` boolean, PRIMARY KEY (`Id`));");
3838

3939
Db.Connection.Execute($"USE `{_dbName}`");
4040

tests/Repositories.Oracle.Tests/DatabaseFixture.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ ID NUMBER GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
6767
PNUMBER VARCHAR(256) NOT NULL,
6868
ISACTIVE NUMBER(1) NOT NULL,
6969
CODE VARCHAR(256) NOT NULL,
70+
DELETED NUMBER,
7071
PRIMARY KEY (ID))");
7172

7273
Db.Connection.Execute(

tests/Repositories.PostgreSQL.Tests/DatabaseFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ void CreateSchema(string dbSchema)
4747
Db.Connection.Execute(@"CREATE TABLE Cities (Identifier uuid not null, Name varchar(256) not null)");
4848
Db.Connection.Execute(@"CREATE TABLE Reports (Id int not null, AnotherId int not null, UserId int not null, PRIMARY KEY (Id, AnotherId))");
4949
Db.Connection.Execute(
50-
@"CREATE TABLE DAB.Phones (Id SERIAL not null, PNumber varchar(256) not null, IsActive bool not null, Code varchar(256) not null, PRIMARY KEY (Id))");
50+
@"CREATE TABLE DAB.Phones (Id SERIAL not null, PNumber varchar(256) not null, IsActive bool not null, Code varchar(256) not null, Deleted bool, PRIMARY KEY (Id))");
5151

5252
InitData.Execute(Db);
5353
}

tests/Repositories.SQLite.Tests/DatabaseFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ private void InitDb()
2323
{
2424
Db.Connection.Execute("CREATE TABLE `DAB.Phones` " +
2525
"(`Id` integer not null primary key autoincrement, `PNumber` varchar(256) not null, " +
26-
"`IsActive` boolean not null, `Code` varchar(256) not null);");
26+
"`IsActive` boolean not null, `Code` varchar(256) not null, `Deleted` boolean);");
2727

2828
Db.Connection.Execute("CREATE TABLE `Users` " +
2929
"(`Id` integer not null primary key autoincrement, `Name` varchar(256) not null, `AddressId` integer not null, `PhoneId` integer not null, " +

tests/SqlGenerator.Tests/MsSqlGeneratorTests.cs

Lines changed: 205 additions & 184 deletions
Large diffs are not rendered by default.

tests/SqlGenerator.Tests/MySqlGeneratorTests.cs renamed to tests/SqlGenerator.Tests/MySQLGeneratorTests.cs

Lines changed: 58 additions & 52 deletions
Large diffs are not rendered by default.

tests/SqlGenerator.Tests/OracleSqlGeneratorTests.cs renamed to tests/SqlGenerator.Tests/OracleGeneratorTests.cs

Lines changed: 154 additions & 163 deletions
Large diffs are not rendered by default.

tests/SqlGenerator.Tests/PostgresSqlGeneratorTests.cs renamed to tests/SqlGenerator.Tests/PostgresGeneratorTests.cs

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,39 @@
77

88
namespace SqlGenerator.Tests;
99

10-
public class PostgresSqlGeneratorTests
10+
public class PostgresGeneratorTests
1111
{
1212
private const SqlProvider _sqlConnector = SqlProvider.PostgreSQL;
1313

1414
[Fact]
1515
public static void Count()
1616
{
17-
ISqlGenerator<User> userSqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
18-
var sqlQuery = userSqlGenerator.GetCount(null);
17+
var sqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
18+
var sqlQuery = sqlGenerator.GetCount(null);
1919
Assert.Equal("SELECT COUNT(*) FROM \"Users\" WHERE \"Users\".\"Deleted\" IS NULL", sqlQuery.GetSql());
2020
}
2121

2222
[Fact]
2323
public static void CountWithDistinct()
2424
{
25-
ISqlGenerator<User> userSqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
26-
var sqlQuery = userSqlGenerator.GetCount(null, user => user.AddressId);
25+
var sqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
26+
var sqlQuery = sqlGenerator.GetCount(null, user => user.AddressId);
2727
Assert.Equal("SELECT COUNT(DISTINCT \"Users\".\"AddressId\") FROM \"Users\" WHERE \"Users\".\"Deleted\" IS NULL", sqlQuery.GetSql());
2828
}
2929

3030
[Fact]
3131
public static void CountWithDistinctAndWhere()
3232
{
33-
ISqlGenerator<User> userSqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
34-
var sqlQuery = userSqlGenerator.GetCount(x => x.PhoneId == 1, user => user.AddressId);
33+
var sqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
34+
var sqlQuery = sqlGenerator.GetCount(x => x.PhoneId == 1, user => user.AddressId);
3535
Assert.Equal("SELECT COUNT(DISTINCT \"Users\".\"AddressId\") FROM \"Users\" WHERE (\"Users\".\"PhoneId\" = @PhoneId_p0) AND \"Users\".\"Deleted\" IS NULL",
3636
sqlQuery.GetSql());
3737
}
3838

3939
[Fact]
4040
public void SelectLimit()
4141
{
42-
ISqlGenerator<City> sqlGenerator = new SqlGenerator<City>(_sqlConnector);
42+
var sqlGenerator = new SqlGenerator<City>(_sqlConnector);
4343
var filterData = new FilterData();
4444
var data = filterData.LimitInfo ?? new LimitInfo();
4545
data.Limit = 10u;
@@ -52,7 +52,7 @@ public void SelectLimit()
5252
[Fact]
5353
public void SelectOrderBy()
5454
{
55-
ISqlGenerator<City> sqlGenerator = new SqlGenerator<City>(_sqlConnector);
55+
var sqlGenerator = new SqlGenerator<City>(_sqlConnector);
5656
var filterData = new FilterData();
5757
var data = filterData.OrderInfo ?? new OrderInfo();
5858
data.Columns = new List<string> { "Name" };
@@ -66,7 +66,7 @@ public void SelectOrderBy()
6666
[Fact]
6767
public void SelectOrderByWithTableIdentifier_QuoMarks()
6868
{
69-
ISqlGenerator<City> sqlGenerator = new SqlGenerator<City>(_sqlConnector, true);
69+
var sqlGenerator = new SqlGenerator<City>(_sqlConnector, true);
7070
var filterData = new FilterData();
7171
var data = filterData.OrderInfo ?? new OrderInfo();
7272
data.Columns = new List<string> { "Cities.Name" };
@@ -81,7 +81,7 @@ public void SelectOrderByWithTableIdentifier_QuoMarks()
8181
[Fact]
8282
public void SelectPaged()
8383
{
84-
ISqlGenerator<City> sqlGenerator = new SqlGenerator<City>(_sqlConnector);
84+
var sqlGenerator = new SqlGenerator<City>(_sqlConnector);
8585
var filterData = new FilterData();
8686
var data = filterData.LimitInfo ?? new LimitInfo();
8787
data.Limit = 10u;
@@ -95,24 +95,24 @@ public void SelectPaged()
9595
[Fact]
9696
public void SelectFirst()
9797
{
98-
ISqlGenerator<City> sqlGenerator = new SqlGenerator<City>(_sqlConnector);
98+
var sqlGenerator = new SqlGenerator<City>(_sqlConnector);
9999
var sqlQuery = sqlGenerator.GetSelectFirst(x => x.Identifier == Guid.Empty, null);
100100
Assert.Equal("SELECT Cities.Identifier, Cities.Name FROM Cities WHERE Cities.Identifier = @Identifier_p0 LIMIT 1", sqlQuery.GetSql());
101101
}
102102

103103
[Fact]
104104
public void SelectFirst_QuoMarks()
105105
{
106-
ISqlGenerator<City> sqlGenerator = new SqlGenerator<City>(_sqlConnector, true);
106+
var sqlGenerator = new SqlGenerator<City>(_sqlConnector, true);
107107
var sqlQuery = sqlGenerator.GetSelectFirst(x => x.Identifier == Guid.Empty, null);
108108
Assert.Equal("SELECT \"Cities\".\"Identifier\", \"Cities\".\"Name\" FROM \"Cities\" WHERE \"Cities\".\"Identifier\" = @Identifier_p0 LIMIT 1", sqlQuery.GetSql());
109109
}
110110

111111
[Fact]
112112
public static void Update()
113113
{
114-
ISqlGenerator<User> userSqlGenerator = new SqlGenerator<User>(_sqlConnector);
115-
var sqlQuery = userSqlGenerator.GetUpdate(new User());
114+
var sqlGenerator = new SqlGenerator<User>(_sqlConnector);
115+
var sqlQuery = sqlGenerator.GetUpdate(new User());
116116

117117
Assert.Equal("UPDATE Users " +
118118
"SET Name = @UserName, " +
@@ -127,8 +127,8 @@ public static void Update()
127127
[Fact]
128128
public static void Update_QuoMarks()
129129
{
130-
ISqlGenerator<User> userSqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
131-
var sqlQuery = userSqlGenerator.GetUpdate(new User());
130+
var sqlGenerator = new SqlGenerator<User>(_sqlConnector, true);
131+
var sqlQuery = sqlGenerator.GetUpdate(new User());
132132

133133
Assert.Equal("UPDATE \"Users\" " +
134134
"SET \"Name\" = @UserName, " +
@@ -143,32 +143,32 @@ public static void Update_QuoMarks()
143143
[Fact]
144144
public static void BulkUpdate()
145145
{
146-
ISqlGenerator<Phone> userSqlGenerator = new SqlGenerator<Phone>(_sqlConnector);
146+
var sqlGenerator = new SqlGenerator<Phone>(_sqlConnector);
147147
var phones = new List<Phone>
148148
{
149-
new Phone { Id = 10, IsActive = true, PNumber = "111" },
150-
new Phone { Id = 10, IsActive = false, PNumber = "222" }
149+
new() { Id = 10, IsActive = true, PNumber = "111" },
150+
new() { Id = 10, IsActive = false, PNumber = "222" }
151151
};
152152

153-
var sqlQuery = userSqlGenerator.GetBulkUpdate(phones);
153+
var sqlQuery = sqlGenerator.GetBulkUpdate(phones);
154154

155-
Assert.Equal("UPDATE DAB.Phones SET PNumber = @PNumber0, IsActive = @IsActive0 WHERE Id = @Id0; " +
156-
"UPDATE DAB.Phones SET PNumber = @PNumber1, IsActive = @IsActive1 WHERE Id = @Id1", sqlQuery.GetSql());
155+
Assert.Equal("UPDATE DAB.Phones SET PNumber = @PNumber0, IsActive = @IsActive0, Deleted = @Deleted0 WHERE Id = @Id0; " +
156+
"UPDATE DAB.Phones SET PNumber = @PNumber1, IsActive = @IsActive1, Deleted = @Deleted1 WHERE Id = @Id1", sqlQuery.GetSql());
157157
}
158158

159159
[Fact]
160160
public static void BulkUpdate_QuoMarks()
161161
{
162-
ISqlGenerator<Phone> userSqlGenerator = new SqlGenerator<Phone>(_sqlConnector, true);
162+
var sqlGenerator = new SqlGenerator<Phone>(_sqlConnector, true);
163163
var phones = new List<Phone>
164164
{
165-
new Phone { Id = 10, IsActive = true, PNumber = "111" },
166-
new Phone { Id = 10, IsActive = false, PNumber = "222" }
165+
new() { Id = 10, IsActive = true, PNumber = "111" },
166+
new() { Id = 10, IsActive = false, PNumber = "222" }
167167
};
168168

169-
var sqlQuery = userSqlGenerator.GetBulkUpdate(phones);
169+
var sqlQuery = sqlGenerator.GetBulkUpdate(phones);
170170

171-
Assert.Equal("UPDATE \"DAB\".\"Phones\" SET \"PNumber\" = @PNumber0, \"IsActive\" = @IsActive0 WHERE \"Id\" = @Id0; " +
172-
"UPDATE \"DAB\".\"Phones\" SET \"PNumber\" = @PNumber1, \"IsActive\" = @IsActive1 WHERE \"Id\" = @Id1", sqlQuery.GetSql());
171+
Assert.Equal("UPDATE \"DAB\".\"Phones\" SET \"PNumber\" = @PNumber0, \"IsActive\" = @IsActive0, \"Deleted\" = @Deleted0 WHERE \"Id\" = @Id0; " +
172+
"UPDATE \"DAB\".\"Phones\" SET \"PNumber\" = @PNumber1, \"IsActive\" = @IsActive1, \"Deleted\" = @Deleted1 WHERE \"Id\" = @Id1", sqlQuery.GetSql());
173173
}
174174
}

0 commit comments

Comments
 (0)