diff --git a/src/MicroOrm.Dapper.Repositories.csproj b/src/MicroOrm.Dapper.Repositories.csproj index 739fbfd4..2ab66797 100644 --- a/src/MicroOrm.Dapper.Repositories.csproj +++ b/src/MicroOrm.Dapper.Repositories.csproj @@ -3,7 +3,7 @@ CRUD for Dapper 2015 © Serge K Serge K and Contributors - net461;netstandard2.0;net5.0 + net461;netstandard2.0;net5.0;net7.0 11.0 enable true diff --git a/src/SqlGenerator/SqlGenerator.AppendJoin.cs b/src/SqlGenerator/SqlGenerator.AppendJoin.cs index db9e959c..c7e8d606 100644 --- a/src/SqlGenerator/SqlGenerator.AppendJoin.cs +++ b/src/SqlGenerator/SqlGenerator.AppendJoin.cs @@ -77,20 +77,29 @@ private void AppendJoinQuery(JoinAttributeBase attrJoin, StringBuilder joinBuild var colAttr = deleteAttr.GetCustomAttribute(); var colName = colAttr == null ? deleteAttr.Name : colAttr.Name; object deleteValue = Provider == SqlProvider.PostgreSQL ? "true" : 1; - if (deleteAttr.PropertyType.IsEnum) + if(deleteAttr.PropertyType == typeof(bool?)) { - var deleteOption = deleteAttr.PropertyType.GetFields().FirstOrDefault(f => f.GetCustomAttribute() != null); - - if (deleteOption != null) + customFilter = attrJoin.TableAlias == string.Empty + ? $"AND {attrJoin.TableName}.{colName} IS NULL " + : $"AND {attrJoin.TableAlias}.{colName} IS NULL "; + } + else + { + if (deleteAttr.PropertyType.IsEnum) { - var enumValue = Enum.Parse(deleteAttr.PropertyType, deleteOption.Name); - deleteValue = Convert.ChangeType(enumValue, Enum.GetUnderlyingType(deleteAttr.PropertyType)); + var deleteOption = deleteAttr.PropertyType.GetFields().FirstOrDefault(f => f.GetCustomAttribute() != null); + + if (deleteOption != null) + { + var enumValue = Enum.Parse(deleteAttr.PropertyType, deleteOption.Name); + deleteValue = Convert.ChangeType(enumValue, Enum.GetUnderlyingType(deleteAttr.PropertyType)); + } } - } - customFilter = attrJoin.TableAlias == string.Empty - ? $"AND {attrJoin.TableName}.{colName} != {deleteValue} " - : $"AND {attrJoin.TableAlias}.{colName} != {deleteValue} "; + customFilter = attrJoin.TableAlias == string.Empty + ? $"AND {attrJoin.TableName}.{colName} != {deleteValue} " + : $"AND {attrJoin.TableAlias}.{colName} != {deleteValue} "; + } } joinBuilder.Append(attrJoin.TableAlias == string.Empty diff --git a/src/SqlGenerator/SqlGenerator.AppendWherePredicateQuery.cs b/src/SqlGenerator/SqlGenerator.AppendWherePredicateQuery.cs index 453989c2..aa43bd4e 100644 --- a/src/SqlGenerator/SqlGenerator.AppendWherePredicateQuery.cs +++ b/src/SqlGenerator/SqlGenerator.AppendWherePredicateQuery.cs @@ -40,14 +40,27 @@ private void AppendWherePredicateQuery(SqlQuery sqlQuery, Expression where TEntity : class { @@ -57,8 +56,7 @@ private SqlQuery GetSelect(Expression>? predicate, bool firs if (Provider == SqlProvider.Oracle) sqlQuery.SqlBuilder.Append("FETCH FIRST 1 ROW ONLY"); else if (Provider != SqlProvider.MSSQL) - sqlQuery.SqlBuilder - .Append("LIMIT 1"); + sqlQuery.SqlBuilder.Append("LIMIT 1"); } return sqlQuery; @@ -293,21 +291,30 @@ public virtual SqlQuery GetSelectById(object id, FilterData? filterData, params .Append(" "); if (LogicalDelete) + { sqlQuery.SqlBuilder .Append("AND ") .Append(TableName) .Append(".") - .Append(StatusPropertyName) - .Append(" != ") - .Append(LogicalDeleteValue) - .Append(" "); + .Append(StatusPropertyName); + + if (LogicalDeleteValueNullable) + { + sqlQuery.SqlBuilder + .Append(" IS NULL "); + } + else + { + sqlQuery.SqlBuilder + .Append(" != ") + .Append(LogicalDeleteValue) + .Append(" "); + } + } if (includes.Length == 0 && Provider != SqlProvider.MSSQL) { - if (Provider == SqlProvider.Oracle) - sqlQuery.SqlBuilder.Append("FETCH FIRST 1 ROWS ONLY"); - else - sqlQuery.SqlBuilder.Append("LIMIT 1"); + sqlQuery.SqlBuilder.Append(Provider == SqlProvider.Oracle ? "FETCH FIRST 1 ROWS ONLY" : "LIMIT 1"); } sqlQuery.SetParam(param); diff --git a/src/SqlGenerator/SqlGenerator.InitLogicalDeleted.cs b/src/SqlGenerator/SqlGenerator.InitLogicalDeleted.cs index 67a9bbed..fd796456 100644 --- a/src/SqlGenerator/SqlGenerator.InitLogicalDeleted.cs +++ b/src/SqlGenerator/SqlGenerator.InitLogicalDeleted.cs @@ -27,9 +27,7 @@ private void InitLogicalDeleted() if (deleteAttr == null) continue; - if (JoinsLogicalDelete == null) - JoinsLogicalDelete = new Dictionary(); - + JoinsLogicalDelete ??= new Dictionary(); JoinsLogicalDelete.Add(joinAttr.TableName, deleteAttr); } @@ -41,7 +39,13 @@ private void InitLogicalDeleted() if (statusProperty.PropertyInfo.PropertyType == typeof(bool)) { LogicalDelete = true; - LogicalDeleteValue = Provider == SqlProvider.PostgreSQL ? "true" : 1; // true + LogicalDeleteValue = Provider == SqlProvider.PostgreSQL ? "true" : 1; + } + else if (statusProperty.PropertyInfo.PropertyType == typeof(bool?)) + { + LogicalDelete = true; + LogicalDeleteValue = Provider == SqlProvider.PostgreSQL ? "true" : 1; + LogicalDeleteValueNullable = true; } else if (statusProperty.PropertyInfo.PropertyType.IsEnum) { diff --git a/src/SqlGenerator/SqlGenerator.cs b/src/SqlGenerator/SqlGenerator.cs index a51e541b..df031933 100644 --- a/src/SqlGenerator/SqlGenerator.cs +++ b/src/SqlGenerator/SqlGenerator.cs @@ -107,6 +107,8 @@ public SqlGenerator(SqlProvider provider) public object? LogicalDeleteValue { get; protected set; } + public bool LogicalDeleteValueNullable { get; protected set; } + /// /// In Oracle parameter should be build with : instead of @. /// diff --git a/tests/Repositories.Base/BaseRepositoriesTests.cs b/tests/Repositories.Base/BaseRepositoriesTests.cs index 9d94b3b5..6734bf61 100644 --- a/tests/Repositories.Base/BaseRepositoriesTests.cs +++ b/tests/Repositories.Base/BaseRepositoriesTests.cs @@ -39,7 +39,7 @@ public void Count() { var count = Db.Users.Count(); var countHandQuery = Db.Connection - .ExecuteScalar("SELECT COUNT(*) FROM Users WHERE Users.Deleted != " + Db.Users.SqlGenerator.LogicalDeleteValue); + .ExecuteScalar("SELECT COUNT(*) FROM Users WHERE Users.Deleted IS NULL"); Assert.Equal(countHandQuery, count); } @@ -78,7 +78,7 @@ public void CountWithDistinctAndWhere() public void Find() { var user = Db.Users.Find(x => x.Id == 2); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); Assert.Equal("TestName1", user.Name); } @@ -86,7 +86,7 @@ public void Find() public void FindById() { var user = Db.Users.FindById(2); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); Assert.Equal("TestName1", user.Name); } @@ -100,7 +100,7 @@ public void FindById_MultiKeys() public async void FindByIdAsync() { var user = await Db.Users.FindByIdAsync(2); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); Assert.Equal("TestName1", user.Name); } @@ -108,7 +108,7 @@ public async void FindByIdAsync() public async void FindByIdAsync_WithJoins_NotNull() { var user = await Db.Users.FindByIdAsync(1, x => x.Cars, x => x.Phone, x => x.Addresses); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); Assert.Equal("TestName0", user.Name); Assert.NotNull(user.Phone); @@ -150,7 +150,7 @@ public async void FindAllAsync_NullPredicate_CheckCount() protected void FindJoin_CollectionnRecord() { var user = Db.Users.Find(q => q.Id == 1, q => q.Cars); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); Assert.Equal("TestName0", user.Name); Assert.True(user.Cars.Count == 2); @@ -160,7 +160,7 @@ protected void FindJoin_CollectionnRecord() public async void FindJoinAsync_CollectionnRecord() { var user = await Db.Users.FindAsync(q => q.Id == 1, q => q.Cars); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); Assert.Equal("TestName0", user.Name); Assert.True(user.Cars.Count == 2); @@ -297,7 +297,7 @@ public async Task FindAsync() const string name = "TestName3"; { var user = await Db.Users.FindAsync(x => x.Id == id); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); Assert.Equal(name, user.Name); } { @@ -429,7 +429,7 @@ public async Task LogicalDeletedBoolAsync() const int id = 10; var user = await Db.Users.FindAsync(x => x.Id == id); - Assert.False(user.Deleted); + Assert.Null(user.Deleted); var deleted = await Db.Users.DeleteAsync(user); Assert.True(deleted); diff --git a/tests/Repositories.MSSQL.Tests/DatabaseFixture.cs b/tests/Repositories.MSSQL.Tests/DatabaseFixture.cs index e1dc4717..70306e1f 100644 --- a/tests/Repositories.MSSQL.Tests/DatabaseFixture.cs +++ b/tests/Repositories.MSSQL.Tests/DatabaseFixture.cs @@ -29,7 +29,7 @@ void CreateSchema(string dbSchema) CreateSchema("DAB"); Db.Connection.Execute( - @"CREATE TABLE Users (Id int IDENTITY(1,1) not null, Name varchar(256) not null, AddressId int not null, PhoneId int not null, OfficePhoneId int not null, Deleted bit not null, UpdatedAt datetime2, PRIMARY KEY (Id))"); + @"CREATE TABLE Users (Id int IDENTITY(1,1) not null, Name varchar(256) not null, AddressId int not null, PhoneId int not null, OfficePhoneId int not null, Deleted bit, UpdatedAt datetime2, PRIMARY KEY (Id))"); Db.Connection.Execute( @"CREATE TABLE Cars (Id int IDENTITY(1,1) not null, Name varchar(256) not null, UserId int not null, Status int not null, Data binary(16) null, PRIMARY KEY (Id))"); diff --git a/tests/Repositories.MySql.Tests/DatabaseFixture.cs b/tests/Repositories.MySql.Tests/DatabaseFixture.cs index 39650f59..bc3d9526 100644 --- a/tests/Repositories.MySql.Tests/DatabaseFixture.cs +++ b/tests/Repositories.MySql.Tests/DatabaseFixture.cs @@ -40,7 +40,7 @@ private void InitDb() Db.Connection.Execute("CREATE TABLE IF NOT EXISTS `Users` " + "(`Id` int not null auto_increment, `Name` varchar(256) not null, `AddressId` int not null, `PhoneId` int not null, " + - "`OfficePhoneId` int not null, `Deleted` boolean not null, `UpdatedAt` datetime, PRIMARY KEY (`Id`));"); + "`OfficePhoneId` int not null, `Deleted` boolean, `UpdatedAt` datetime, PRIMARY KEY (`Id`));"); Db.Connection.Execute("CREATE TABLE IF NOT EXISTS `Cars` " + "(`Id` int not null auto_increment, `Name` varchar(256) not null, " + @@ -65,6 +65,6 @@ private void InitDb() private void DropDatabase() { Db.Connection.Execute($"DROP DATABASE IF EXISTS {_dbName}"); - Db.Connection.Execute($"DROP DATABASE IF EXISTS DAB"); + Db.Connection.Execute("DROP DATABASE IF EXISTS DAB"); } } diff --git a/tests/Repositories.Oracle.Tests/DatabaseFixture.cs b/tests/Repositories.Oracle.Tests/DatabaseFixture.cs index 09f406d0..b49b007f 100644 --- a/tests/Repositories.Oracle.Tests/DatabaseFixture.cs +++ b/tests/Repositories.Oracle.Tests/DatabaseFixture.cs @@ -36,7 +36,7 @@ NAME VARCHAR(256) NOT NULL, ADDRESSID NUMBER NOT NULL, PHONEID NUMBER NOT NULL, OFFICEPHONEID NUMBER NOT NULL, - DELETED NUMBER NOT NULL, + DELETED NUMBER, UPDATEDAT DATE, PRIMARY KEY (ID))"); diff --git a/tests/Repositories.PostgreSQL.Tests/DatabaseFixture.cs b/tests/Repositories.PostgreSQL.Tests/DatabaseFixture.cs index b802a3c7..4b43da53 100644 --- a/tests/Repositories.PostgreSQL.Tests/DatabaseFixture.cs +++ b/tests/Repositories.PostgreSQL.Tests/DatabaseFixture.cs @@ -39,7 +39,7 @@ void CreateSchema(string dbSchema) CreateSchema("DAB"); Db.Connection.Execute( - @"CREATE TABLE Users (Id SERIAL not null, Name varchar(256) not null, AddressId int not null, PhoneId int not null, OfficePhoneId int not null, Deleted bool not null, UpdatedAt timestamp, PRIMARY KEY (Id))"); + @"CREATE TABLE Users (Id SERIAL not null, Name varchar(256) not null, AddressId int not null, PhoneId int not null, OfficePhoneId int not null, Deleted bool, UpdatedAt timestamp, PRIMARY KEY (Id))"); Db.Connection.Execute( @"CREATE TABLE Cars (Id SERIAL not null, Name varchar(256) not null, UserId int not null, Status int not null, Data bytea null, PRIMARY KEY (Id))"); diff --git a/tests/Repositories.SQLite.Tests/DatabaseFixture.cs b/tests/Repositories.SQLite.Tests/DatabaseFixture.cs index f3bd53ca..f92cc943 100644 --- a/tests/Repositories.SQLite.Tests/DatabaseFixture.cs +++ b/tests/Repositories.SQLite.Tests/DatabaseFixture.cs @@ -27,7 +27,7 @@ private void InitDb() Db.Connection.Execute("CREATE TABLE `Users` " + "(`Id` integer not null primary key autoincrement, `Name` varchar(256) not null, `AddressId` integer not null, `PhoneId` integer not null, " + - "`OfficePhoneId` integer not null, `Deleted` boolean not null, `UpdatedAt` datetime);"); + "`OfficePhoneId` integer not null, `Deleted` boolean, `UpdatedAt` datetime);"); Db.Connection.Execute("CREATE TABLE `Cars` " + "(`Id` integer not null primary key autoincrement, `Name` varchar(256) not null, " + diff --git a/tests/SqlGenerator.Tests/MsSqlGeneratorTests.cs b/tests/SqlGenerator.Tests/MsSqlGeneratorTests.cs index e91e8021..7300d902 100644 --- a/tests/SqlGenerator.Tests/MsSqlGeneratorTests.cs +++ b/tests/SqlGenerator.Tests/MsSqlGeneratorTests.cs @@ -18,7 +18,7 @@ public static void Count() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(null); - Assert.Equal("SELECT COUNT(*) FROM [Users] WHERE [Users].[Deleted] != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(*) FROM [Users] WHERE [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -26,7 +26,7 @@ public static void CountWithDistinct() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(null, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT [Users].[AddressId]) FROM [Users] WHERE [Users].[Deleted] != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(DISTINCT [Users].[AddressId]) FROM [Users] WHERE [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -34,7 +34,7 @@ public static void CountWithDistinctAndWhere() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(x => x.PhoneId == 1, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT [Users].[AddressId]) FROM [Users] WHERE ([Users].[PhoneId] = @PhoneId_p0) AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(DISTINCT [Users].[AddressId]) FROM [Users] WHERE ([Users].[PhoneId] = @PhoneId_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -266,7 +266,7 @@ public static void ContainsPredicate() var sqlQuery = userSqlGenerator.GetSelectAll(x => ids.Contains(x.Id), null); Assert.Equal("SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] " + - "FROM [Users] WHERE ([Users].[Id] IN @Id_p0) AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + "FROM [Users] WHERE ([Users].[Id] IN @Id_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -277,7 +277,7 @@ public static void ContainsPredicateWithFillIds() var sqlQuery = userSqlGenerator.GetSelectAll(x => ids.Contains(x.Id), null); Assert.Equal("SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] " + - "FROM [Users] WHERE ([Users].[Id] IN @Id_p0) AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + "FROM [Users] WHERE ([Users].[Id] IN @Id_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -288,7 +288,7 @@ public static void ContainsArrayPredicate() var sqlQuery = userSqlGenerator.GetSelectAll(x => ids.Contains(x.Id), null); Assert.Equal("SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] " + - "FROM [Users] WHERE ([Users].[Id] IN @Id_p0) AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + "FROM [Users] WHERE ([Users].[Id] IN @Id_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -299,25 +299,14 @@ public static void NotContainsPredicate() var sqlQuery = userSqlGenerator.GetSelectAll(x => !ids.Contains(x.Id), null); Assert.Equal("SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] " + - "FROM [Users] WHERE ([Users].[Id] NOT IN @Id_p0) AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + "FROM [Users] WHERE ([Users].[Id] NOT IN @Id_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] public static void LogicalDeleteWithUpdatedAt() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector); - var user = new User() { Id = 10 }; - var sqlQuery = userSqlGenerator.GetDelete(user); - var sql = sqlQuery.GetSql(); - - Assert.Equal("UPDATE Users SET Deleted = 1, UpdatedAt = @UpdatedAt WHERE Users.Id = @Id", sql); - } - - [Fact] - public static void LogicalleleteWithUpdatedAtWithPredicate() - { - ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector); - var user = new User() { Id = 10 }; + var user = new User { Id = 10 }; var sqlQuery = userSqlGenerator.GetDelete(user); var sql = sqlQuery.GetSql(); @@ -338,7 +327,7 @@ public static void Delete() public static void LogicalDeleteEntity() { ISqlGenerator sqlGenerator = new SqlGenerator(_sqlConnector); - var car = new Car() { Id = 10, Name = "LogicalDelete", UserId = 5 }; + var car = new Car { Id = 10, Name = "LogicalDelete", UserId = 5 }; var sqlQuery = sqlGenerator.GetDelete(car); var realSql = sqlQuery.GetSql(); @@ -402,7 +391,7 @@ public static void IsNull() Assert.Equal( "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] " + - "WHERE ([Users].[UpdatedAt] IS NULL) AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + "WHERE ([Users].[UpdatedAt] IS NULL) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); Assert.DoesNotContain("== NULL", sqlQuery.GetSql()); } @@ -415,7 +404,7 @@ public static void JoinBracelets() Assert.Equal("SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt], " + "[Cars_Id].[Id], [Cars_Id].[Name], [Cars_Id].[Data], [Cars_Id].[UserId], [Cars_Id].[Status] " + "FROM [Users] LEFT JOIN [Cars] AS [Cars_Id] ON [Users].[Id] = [Cars_Id].[UserId] " + - "WHERE [Users].[Deleted] != 1", sqlQuery.GetSql()); + "WHERE [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -427,7 +416,7 @@ public static void NavigationPredicate() Assert.Equal("SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt], " + "[Phones_PhoneId].[Id], [Phones_PhoneId].[PNumber], [Phones_PhoneId].[IsActive], [Phones_PhoneId].[Code] " + "FROM [Users] INNER JOIN [DAB].[Phones] AS [Phones_PhoneId] ON [Users].[PhoneId] = [Phones_PhoneId].[Id] " + - "WHERE ([Phones_PhoneId].[PNumber] = @PhonePNumber_p0) AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + "WHERE ([Phones_PhoneId].[PNumber] = @PhonePNumber_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -439,7 +428,7 @@ public static void NavigationPredicateNoQuotationMarks() Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt, " + "Phones_PhoneId.Id, Phones_PhoneId.PNumber, Phones_PhoneId.IsActive, Phones_PhoneId.Code " + "FROM Users INNER JOIN DAB.Phones AS Phones_PhoneId ON Users.PhoneId = Phones_PhoneId.Id " + - "WHERE (Phones_PhoneId.PNumber = @PhonePNumber_p0) AND Users.Deleted != 1", sqlQuery.GetSql()); + "WHERE (Phones_PhoneId.PNumber = @PhonePNumber_p0) AND Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -449,7 +438,7 @@ public static void SelectBetweenWithLogicalDelete() var sqlQuery = userSqlGenerator.GetSelectBetween(1, 10, null, x => x.Id); Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users " + - "WHERE Users.Deleted != 1 AND Users.Id BETWEEN '1' AND '10'", sqlQuery.GetSql()); + "WHERE Users.Deleted IS NULL AND Users.Id BETWEEN '1' AND '10'", sqlQuery.GetSql()); } [Fact] @@ -460,7 +449,7 @@ public static void SelectBetweenWithLogicalDeleteBraclets() Assert.Equal( "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] " + - "WHERE [Users].[Deleted] != 1 AND [Users].[Id] BETWEEN '1' AND '10'", sqlQuery.GetSql()); + "WHERE [Users].[Deleted] IS NULL AND [Users].[Id] BETWEEN '1' AND '10'", sqlQuery.GetSql()); } [Fact] @@ -500,7 +489,7 @@ public static void SelectById() var sqlQuery = userSqlGenerator.GetSelectById(1, null); Assert.Equal("SELECT TOP 1 [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] " + - "FROM [Users] WHERE [Users].[Id] = @Id AND [Users].[Deleted] != 1", sqlQuery.GetSql()); + "FROM [Users] WHERE [Users].[Id] = @Id AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } [Fact] @@ -519,7 +508,7 @@ public static void SelectFirst() ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetSelectFirst(x => x.Id == 2, null); Assert.Equal( - "SELECT TOP 1 [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] != 1", + "SELECT TOP 1 [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } @@ -534,7 +523,7 @@ public static void SelectLimit() var sqlQuery = userSqlGenerator.GetSelectAll(x => x.Id == 2, filterData); Assert.Equal( - "SELECT TOP (10) [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] != 1", + "SELECT TOP (10) [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] IS NULL", sqlQuery.GetSql()); } @@ -551,7 +540,7 @@ public static void SelectOrderBy() var sqlQuery = userSqlGenerator.GetSelectAll(x => x.Id == 2, filterData); Assert.Equal( - "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] != 1 ORDER BY [Id] ASC", + "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] IS NULL ORDER BY [Id] ASC", sqlQuery.GetSql()); } @@ -569,7 +558,7 @@ public static void SelectOrderByWithTableIdentifier() var sqlQuery = userSqlGenerator.GetSelectAll(x => x.Id == 2, filterData); Assert.Equal( - "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] != 1 ORDER BY [Users].[Id] ASC", + "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] IS NULL ORDER BY [Users].[Id] ASC", sqlQuery.GetSql()); } @@ -591,7 +580,7 @@ public static void SelectPaged() var sqlQuery = userSqlGenerator.GetSelectAll(x => x.Id == 2, filterData); Assert.Equal( - "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] != 1 ORDER BY [Id] ASC OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY", + "SELECT [Users].[Id], [Users].[Name], [Users].[AddressId], [Users].[PhoneId], [Users].[OfficePhoneId], [Users].[Deleted], [Users].[UpdatedAt] FROM [Users] WHERE ([Users].[Id] = @Id_p0) AND [Users].[Deleted] IS NULL ORDER BY [Id] ASC OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY", sqlQuery.GetSql()); } @@ -680,7 +669,7 @@ public static void SelectGroupConditionsNavigationPredicate() var sqlQuery1 = userSqlGenerator.GetSelectFirst(x => x.Phone.PNumber == "123" || (x.Name == "abc" && x.Phone.IsActive), null, user => user.Phone); Assert.Equal( sPrefix + - "([Phones_PhoneId].[PNumber] = @PhonePNumber_p0 OR ([Users].[Name] = @Name_p1 AND [Phones_PhoneId].[IsActive] = @PhoneIsActive_p2)) AND [Users].[Deleted] != 1", + "([Phones_PhoneId].[PNumber] = @PhonePNumber_p0 OR ([Users].[Name] = @Name_p1 AND [Phones_PhoneId].[IsActive] = @PhoneIsActive_p2)) AND [Users].[Deleted] IS NULL", sqlQuery1.GetSql()); var ids = new List(); @@ -689,7 +678,7 @@ public static void SelectGroupConditionsNavigationPredicate() (x.Name == "abc" || x.Phone.IsActive), null, user => user.Phone); Assert.Equal( sPrefix + - "([Phones_PhoneId].[PNumber] != @PhonePNumber_p0 AND ([Users].[Name] != @Name_p1 OR [Phones_PhoneId].[IsActive] = @PhoneIsActive_p2 OR [Users].[PhoneId] NOT IN @PhoneId_p3 OR [Phones_PhoneId].[Id] NOT IN @PhoneId_p4) AND ([Users].[Name] = @Name_p5 OR [Phones_PhoneId].[IsActive] = @PhoneIsActive_p6)) AND [Users].[Deleted] != 1", + "([Phones_PhoneId].[PNumber] != @PhonePNumber_p0 AND ([Users].[Name] != @Name_p1 OR [Phones_PhoneId].[IsActive] = @PhoneIsActive_p2 OR [Users].[PhoneId] NOT IN @PhoneId_p3 OR [Phones_PhoneId].[Id] NOT IN @PhoneId_p4) AND ([Users].[Name] = @Name_p5 OR [Phones_PhoneId].[IsActive] = @PhoneIsActive_p6)) AND [Users].[Deleted] IS NULL", sqlQuery2.GetSql()); } @@ -717,7 +706,7 @@ public static void SelectLikeWithPredicate() var sqlQuery21 = userSqlGenerator2.GetSelectFirst(x => x.Phone.PNumber.StartsWith("123") || (!x.Name.Contains("abc") && x.Phone.IsActive), null, user => user.Phone); Assert.Equal( sPrefix2 + - "([Phones_PhoneId].[PNumber] LIKE @PhonePNumber_p0 OR ([Users].[Name] NOT LIKE @Name_p1 AND [Phones_PhoneId].[IsActive] = @PhoneIsActive_p2)) AND [Users].[Deleted] != 1", + "([Phones_PhoneId].[PNumber] LIKE @PhonePNumber_p0 OR ([Users].[Name] NOT LIKE @Name_p1 AND [Phones_PhoneId].[IsActive] = @PhoneIsActive_p2)) AND [Users].[Deleted] IS NULL", sqlQuery21.GetSql()); var parameters21 = sqlQuery21.Param as IDictionary; Assert.True("123%" == parameters21["PhonePNumber_p0"].ToString()); diff --git a/tests/SqlGenerator.Tests/MySqlGeneratorTests.cs b/tests/SqlGenerator.Tests/MySqlGeneratorTests.cs index 71ff17b6..80a2a1da 100644 --- a/tests/SqlGenerator.Tests/MySqlGeneratorTests.cs +++ b/tests/SqlGenerator.Tests/MySqlGeneratorTests.cs @@ -17,7 +17,7 @@ public static void Count() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(null); - Assert.Equal("SELECT COUNT(*) FROM `Users` WHERE `Users`.`Deleted` != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(*) FROM `Users` WHERE `Users`.`Deleted` IS NULL", sqlQuery.GetSql()); } [Fact] @@ -25,7 +25,7 @@ public static void CountWithDistinct() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(null, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT `Users`.`AddressId`) FROM `Users` WHERE `Users`.`Deleted` != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(DISTINCT `Users`.`AddressId`) FROM `Users` WHERE `Users`.`Deleted` IS NULL", sqlQuery.GetSql()); } [Fact] @@ -33,7 +33,7 @@ public static void CountWithDistinctAndWhere() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(x => x.PhoneId == 1, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT `Users`.`AddressId`) FROM `Users` WHERE (`Users`.`PhoneId` = @PhoneId_p0) AND `Users`.`Deleted` != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(DISTINCT `Users`.`AddressId`) FROM `Users` WHERE (`Users`.`PhoneId` = @PhoneId_p0) AND `Users`.`Deleted` IS NULL", sqlQuery.GetSql()); } [Fact] @@ -117,7 +117,7 @@ public void IsNotNull() Assert.Equal( "SELECT `Users`.`Id`, `Users`.`Name`, `Users`.`AddressId`, `Users`.`PhoneId`, `Users`.`OfficePhoneId`, `Users`.`Deleted`, `Users`.`UpdatedAt` FROM `Users` " + - "WHERE (`Users`.`UpdatedAt` IS NOT NULL) AND `Users`.`Deleted` != 1", sqlQuery.GetSql()); + "WHERE (`Users`.`UpdatedAt` IS NOT NULL) AND `Users`.`Deleted` IS NULL", sqlQuery.GetSql()); Assert.DoesNotContain("!= NULL", sqlQuery.GetSql()); } @@ -129,13 +129,13 @@ public void IsNotNullAnd() Assert.Equal( "SELECT `Users`.`Id`, `Users`.`Name`, `Users`.`AddressId`, `Users`.`PhoneId`, `Users`.`OfficePhoneId`, `Users`.`Deleted`, `Users`.`UpdatedAt` FROM `Users` " + - "WHERE (`Users`.`Name` = @Name_p0 AND `Users`.`UpdatedAt` IS NOT NULL) AND `Users`.`Deleted` != 1", sqlQuery.GetSql()); + "WHERE (`Users`.`Name` = @Name_p0 AND `Users`.`UpdatedAt` IS NOT NULL) AND `Users`.`Deleted` IS NULL", sqlQuery.GetSql()); Assert.DoesNotContain("!= NULL", sqlQuery.GetSql()); sqlQuery = userSqlGenerator.GetSelectAll(user => user.UpdatedAt != null && user.Name == "Frank", null); Assert.Equal( "SELECT `Users`.`Id`, `Users`.`Name`, `Users`.`AddressId`, `Users`.`PhoneId`, `Users`.`OfficePhoneId`, `Users`.`Deleted`, `Users`.`UpdatedAt` FROM `Users` " + - "WHERE (`Users`.`UpdatedAt` IS NOT NULL AND `Users`.`Name` = @Name_p1) AND `Users`.`Deleted` != 1", sqlQuery.GetSql()); + "WHERE (`Users`.`UpdatedAt` IS NOT NULL AND `Users`.`Name` = @Name_p1) AND `Users`.`Deleted` IS NULL", sqlQuery.GetSql()); Assert.DoesNotContain("!= NULL", sqlQuery.GetSql()); } @@ -147,7 +147,7 @@ public void SelectBetween() Assert.Equal( "SELECT `Users`.`Id`, `Users`.`Name`, `Users`.`AddressId`, `Users`.`PhoneId`, `Users`.`OfficePhoneId`, `Users`.`Deleted`, `Users`.`UpdatedAt` FROM `Users` " + - "WHERE `Users`.`Deleted` != 1 AND `Users`.`Id` BETWEEN '1' AND '10'", sqlQuery.GetSql()); + "WHERE `Users`.`Deleted` IS NULL AND `Users`.`Id` BETWEEN '1' AND '10'", sqlQuery.GetSql()); } [Fact] @@ -254,7 +254,7 @@ public void SelectFirstWithDeleted() ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetSelectFirst(x => x.Id == 6, null); Assert.Equal( - "SELECT `Users`.`Id`, `Users`.`Name`, `Users`.`AddressId`, `Users`.`PhoneId`, `Users`.`OfficePhoneId`, `Users`.`Deleted`, `Users`.`UpdatedAt` FROM `Users` WHERE (`Users`.`Id` = @Id_p0) AND `Users`.`Deleted` != 1 LIMIT 1", + "SELECT `Users`.`Id`, `Users`.`Name`, `Users`.`AddressId`, `Users`.`PhoneId`, `Users`.`OfficePhoneId`, `Users`.`Deleted`, `Users`.`UpdatedAt` FROM `Users` WHERE (`Users`.`Id` = @Id_p0) AND `Users`.`Deleted` IS NULL LIMIT 1", sqlQuery.GetSql()); } diff --git a/tests/SqlGenerator.Tests/OracleSqlGeneratorTests.cs b/tests/SqlGenerator.Tests/OracleSqlGeneratorTests.cs index 452a27f8..3112de6d 100644 --- a/tests/SqlGenerator.Tests/OracleSqlGeneratorTests.cs +++ b/tests/SqlGenerator.Tests/OracleSqlGeneratorTests.cs @@ -18,7 +18,7 @@ public static void Count() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, false); var sqlQuery = userSqlGenerator.GetCount(null); - Assert.Equal("SELECT COUNT(*) FROM Users WHERE Users.Deleted != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(*) FROM Users WHERE Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -26,7 +26,7 @@ public static void CountWithDistinct() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, false); var sqlQuery = userSqlGenerator.GetCount(null, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT Users.AddressId) FROM Users WHERE Users.Deleted != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(DISTINCT Users.AddressId) FROM Users WHERE Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -34,7 +34,7 @@ public static void CountWithDistinctAndWhere() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, false); var sqlQuery = userSqlGenerator.GetCount(x => x.PhoneId == 1, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT Users.AddressId) FROM Users WHERE (Users.PhoneId = :PhoneId_p0) AND Users.Deleted != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(DISTINCT Users.AddressId) FROM Users WHERE (Users.PhoneId = :PhoneId_p0) AND Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -277,7 +277,7 @@ public static void ContainsPredicate() var sqlQuery = userSqlGenerator.GetSelectAll(x => ids.Contains(x.Id), null); Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt " + - "FROM Users WHERE (Users.Id IN :Id_p0) AND Users.Deleted != 1", sqlQuery.GetSql()); + "FROM Users WHERE (Users.Id IN :Id_p0) AND Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -288,7 +288,7 @@ public static void ContainsArrayPredicate() var sqlQuery = userSqlGenerator.GetSelectAll(x => ids.Contains(x.Id), null); Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt " + - "FROM Users WHERE (Users.Id IN :Id_p0) AND Users.Deleted != 1", sqlQuery.GetSql()); + "FROM Users WHERE (Users.Id IN :Id_p0) AND Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -299,7 +299,7 @@ public static void NotContainsPredicate() var sqlQuery = userSqlGenerator.GetSelectAll(x => !ids.Contains(x.Id), null); Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt " + - "FROM Users WHERE (Users.Id NOT IN :Id_p0) AND Users.Deleted != 1", sqlQuery.GetSql()); + "FROM Users WHERE (Users.Id NOT IN :Id_p0) AND Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -402,7 +402,7 @@ public static void IsNull() Assert.Equal( "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users " + - "WHERE (Users.UpdatedAt IS NULL) AND Users.Deleted != 1", sqlQuery.GetSql()); + "WHERE (Users.UpdatedAt IS NULL) AND Users.Deleted IS NULL", sqlQuery.GetSql()); Assert.DoesNotContain("== NULL", sqlQuery.GetSql()); } @@ -415,7 +415,7 @@ public static void JoinBracelets() Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt, " + "Cars_Id.Id, Cars_Id.Name, Cars_Id.Data, Cars_Id.UserId, Cars_Id.Status " + "FROM Users LEFT JOIN Cars Cars_Id ON Users.Id = Cars_Id.UserId " + - "WHERE Users.Deleted != 1", sqlQuery.GetSql()); + "WHERE Users.Deleted IS NULL", sqlQuery.GetSql()); } [Fact] @@ -427,7 +427,7 @@ public static void NavigationPredicate() Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt, " + "Phones_PhoneId.Id, Phones_PhoneId.PNumber, Phones_PhoneId.IsActive, Phones_PhoneId.Code " + "FROM Users INNER JOIN DAB.Phones Phones_PhoneId ON Users.PhoneId = Phones_PhoneId.Id " + - "WHERE (Phones_PhoneId.PNumber = :PhonePNumber_p0) AND Users.Deleted != 1", sqlQuery.GetSql()); + "WHERE (Phones_PhoneId.PNumber = :PhonePNumber_p0) AND Users.Deleted IS NULL", sqlQuery.GetSql()); } @@ -438,7 +438,7 @@ public static void SelectBetweenWithLogicalDelete() var sqlQuery = userSqlGenerator.GetSelectBetween(1, 10, null, x => x.Id); Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users " + - "WHERE Users.Deleted != 1 AND Users.Id BETWEEN '1' AND '10'", sqlQuery.GetSql()); + "WHERE Users.Deleted IS NULL AND Users.Id BETWEEN '1' AND '10'", sqlQuery.GetSql()); } [Fact] @@ -458,7 +458,7 @@ public static void SelectById() var sqlQuery = userSqlGenerator.GetSelectById(1, null); Assert.Equal("SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt " + - "FROM Users WHERE Users.Id = :Id AND Users.Deleted != 1 FETCH FIRST 1 ROWS ONLY", sqlQuery.GetSql()); + "FROM Users WHERE Users.Id = :Id AND Users.Deleted IS NULL FETCH FIRST 1 ROWS ONLY", sqlQuery.GetSql()); } @@ -478,7 +478,7 @@ public static void SelectFirst() ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, false); var sqlQuery = userSqlGenerator.GetSelectFirst(x => x.Id == 2, null); Assert.Equal( - "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted != 1 FETCH FIRST 1 ROW ONLY", + "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted IS NULL FETCH FIRST 1 ROW ONLY", sqlQuery.GetSql()); } @@ -493,7 +493,7 @@ public static void SelectLimit() var sqlQuery = userSqlGenerator.GetSelectAll(x => x.Id == 2, filterData); Assert.Equal( - "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted != 1 OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY", + "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted IS NULL OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY", sqlQuery.GetSql()); } @@ -510,7 +510,7 @@ public static void SelectOrderBy() var sqlQuery = userSqlGenerator.GetSelectAll(x => x.Id == 2, filterData); Assert.Equal( - "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted != 1 ORDER BY Id ASC", + "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted IS NULL ORDER BY Id ASC", sqlQuery.GetSql()); } @@ -532,7 +532,7 @@ public static void SelectPaged() var sqlQuery = userSqlGenerator.GetSelectAll(x => x.Id == 2, filterData); Assert.Equal( - "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted != 1 ORDER BY Id ASC OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY", + "SELECT Users.Id, Users.Name, Users.AddressId, Users.PhoneId, Users.OfficePhoneId, Users.Deleted, Users.UpdatedAt FROM Users WHERE (Users.Id = :Id_p0) AND Users.Deleted IS NULL ORDER BY Id ASC OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY", sqlQuery.GetSql()); } @@ -620,7 +620,7 @@ public static void SelectGroupConditionsNavigationPredicate() var sqlQuery1 = userSqlGenerator.GetSelectFirst(x => x.Phone.PNumber == "123" || (x.Name == "abc" && x.Phone.IsActive), null, user => user.Phone); Assert.Equal( sPrefix + - "(Phones_PhoneId.PNumber = :PhonePNumber_p0 OR (Users.Name = :Name_p1 AND Phones_PhoneId.IsActive = :PhoneIsActive_p2)) AND Users.Deleted != 1", + "(Phones_PhoneId.PNumber = :PhonePNumber_p0 OR (Users.Name = :Name_p1 AND Phones_PhoneId.IsActive = :PhoneIsActive_p2)) AND Users.Deleted IS NULL", sqlQuery1.GetSql()); var ids = new List(); @@ -629,7 +629,7 @@ public static void SelectGroupConditionsNavigationPredicate() (x.Name == "abc" || x.Phone.IsActive), null, user => user.Phone); Assert.Equal( sPrefix + - "(Phones_PhoneId.PNumber != :PhonePNumber_p0 AND (Users.Name != :Name_p1 OR Phones_PhoneId.IsActive = :PhoneIsActive_p2 OR Users.PhoneId NOT IN :PhoneId_p3 OR Phones_PhoneId.Id NOT IN :PhoneId_p4) AND (Users.Name = :Name_p5 OR Phones_PhoneId.IsActive = :PhoneIsActive_p6)) AND Users.Deleted != 1", + "(Phones_PhoneId.PNumber != :PhonePNumber_p0 AND (Users.Name != :Name_p1 OR Phones_PhoneId.IsActive = :PhoneIsActive_p2 OR Users.PhoneId NOT IN :PhoneId_p3 OR Phones_PhoneId.Id NOT IN :PhoneId_p4) AND (Users.Name = :Name_p5 OR Phones_PhoneId.IsActive = :PhoneIsActive_p6)) AND Users.Deleted IS NULL", sqlQuery2.GetSql()); } @@ -657,7 +657,7 @@ public static void SelectLikeWithPredicate() var sqlQuery21 = userSqlGenerator2.GetSelectFirst(x => x.Phone.PNumber.StartsWith("123") || (!x.Name.Contains("abc") && x.Phone.IsActive), null, user => user.Phone); Assert.Equal( sPrefix2 + - "(Phones_PhoneId.PNumber LIKE :PhonePNumber_p0 OR (Users.Name NOT LIKE :Name_p1 AND Phones_PhoneId.IsActive = :PhoneIsActive_p2)) AND Users.Deleted != 1", + "(Phones_PhoneId.PNumber LIKE :PhonePNumber_p0 OR (Users.Name NOT LIKE :Name_p1 AND Phones_PhoneId.IsActive = :PhoneIsActive_p2)) AND Users.Deleted IS NULL", sqlQuery21.GetSql()); var parameters21 = sqlQuery21.Param as IDictionary; Assert.True("123%" == parameters21["PhonePNumber_p0"].ToString()); diff --git a/tests/SqlGenerator.Tests/PostgresSqlGeneratorTests.cs b/tests/SqlGenerator.Tests/PostgresSqlGeneratorTests.cs index cbac97ac..ec1ca6f2 100644 --- a/tests/SqlGenerator.Tests/PostgresSqlGeneratorTests.cs +++ b/tests/SqlGenerator.Tests/PostgresSqlGeneratorTests.cs @@ -16,7 +16,7 @@ public static void Count() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(null); - Assert.Equal("SELECT COUNT(*) FROM \"Users\" WHERE \"Users\".\"Deleted\" != true", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(*) FROM \"Users\" WHERE \"Users\".\"Deleted\" IS NULL", sqlQuery.GetSql()); } [Fact] @@ -24,7 +24,7 @@ public static void CountWithDistinct() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(null, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT \"Users\".\"AddressId\") FROM \"Users\" WHERE \"Users\".\"Deleted\" != true", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(DISTINCT \"Users\".\"AddressId\") FROM \"Users\" WHERE \"Users\".\"Deleted\" IS NULL", sqlQuery.GetSql()); } [Fact] @@ -32,7 +32,7 @@ public static void CountWithDistinctAndWhere() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(x => x.PhoneId == 1, user => user.AddressId); - Assert.Equal("SELECT COUNT(DISTINCT \"Users\".\"AddressId\") FROM \"Users\" WHERE (\"Users\".\"PhoneId\" = @PhoneId_p0) AND \"Users\".\"Deleted\" != true", + Assert.Equal("SELECT COUNT(DISTINCT \"Users\".\"AddressId\") FROM \"Users\" WHERE (\"Users\".\"PhoneId\" = @PhoneId_p0) AND \"Users\".\"Deleted\" IS NULL", sqlQuery.GetSql()); } diff --git a/tests/SqlGenerator.Tests/SQLiteGeneratorTests.cs b/tests/SqlGenerator.Tests/SQLiteGeneratorTests.cs index 2c7c7b46..826c7b42 100644 --- a/tests/SqlGenerator.Tests/SQLiteGeneratorTests.cs +++ b/tests/SqlGenerator.Tests/SQLiteGeneratorTests.cs @@ -16,7 +16,7 @@ public void Count() { ISqlGenerator userSqlGenerator = new SqlGenerator(_sqlConnector, true); var sqlQuery = userSqlGenerator.GetCount(null); - Assert.Equal("SELECT COUNT(*) FROM `Users` WHERE `Users`.`Deleted` != 1", sqlQuery.GetSql()); + Assert.Equal("SELECT COUNT(*) FROM `Users` WHERE `Users`.`Deleted` IS NULL", sqlQuery.GetSql()); } [Fact] diff --git a/tests/TestClasses/User.cs b/tests/TestClasses/User.cs index 0b6a08cb..7fd0cbda 100644 --- a/tests/TestClasses/User.cs +++ b/tests/TestClasses/User.cs @@ -35,7 +35,7 @@ public class User : BaseEntity [Status] [Deleted] - public bool Deleted { get; set; } + public bool? Deleted { get; set; } [UpdatedAt] public DateTime? UpdatedAt { get; set; }