Skip to content

Commit dcf1da3

Browse files
2881028810
authored andcommitted
## v0.9.18
- 增加 PostgreSQL 的 Odbc 访问提供,相比 FreeSql.Provider.PostgreSQL 支持的类型更少; - 增加 通用的 Odbc 访问提供,不能迁移实体到数据库,不能 Skip 这样来分页,理论上能 crud 所有 odbc 数据库;
1 parent 90458cc commit dcf1da3

File tree

97 files changed

+18833
-154
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+18833
-154
lines changed

Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>netstandard2.0</TargetFrameworks>
5-
<Version>0.9.17</Version>
5+
<Version>0.9.18</Version>
66
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
77
<Authors>YeXiangQin</Authors>
88
<Description>BaseEntity 是一种极简单的 CodeFirst 开发方式,特别对单表或多表CRUD,利用继承节省了每个实体类的重复属性(创建时间、ID等字段),软件删除等功能,进行 crud 操作时不必时常考虑仓储的使用.</Description>

Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
5-
<Version>0.9.17</Version>
5+
<Version>0.9.18</Version>
66
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
77
<Authors>YeXiangQin</Authors>
88
<Description>FreeSql 扩展包,可实现实体类属性为对象时,以JSON形式映射存储.</Description>

Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
5-
<Version>0.9.17</Version>
5+
<Version>0.9.18</Version>
66
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
77
<Authors>YeXiangQin</Authors>
88
<Description>FreeSql 扩展包,可实现【延时加载】属性.</Description>

FreeSql.DbContext/DbSet/DbSet.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,15 +234,13 @@ bool CanAdd(TEntity data, bool isThrow)
234234
switch (_db.Orm.Ado.DataType)
235235
{
236236
case DataType.SqlServer:
237+
case DataType.OdbcSqlServer:
237238
case DataType.PostgreSQL:
239+
case DataType.OdbcPostgreSQL:
238240
return true;
239-
case DataType.MySql:
240-
case DataType.Oracle:
241-
case DataType.Sqlite:
241+
default:
242242
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
243-
{
244243
return true;
245-
}
246244
if (isThrow) throw new Exception($"不可添加,未设置主键的值:{_db.Orm.GetEntityString(_entityType, data)}");
247245
return false;
248246
}

FreeSql.DbContext/DbSet/DbSetAsync.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ async Task AddPrivAsync(TEntity data, bool isCheck)
3434
switch (_db.Orm.Ado.DataType)
3535
{
3636
case DataType.SqlServer:
37+
case DataType.OdbcSqlServer:
3738
case DataType.PostgreSQL:
39+
case DataType.OdbcPostgreSQL:
3840
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
3941
{
4042
await DbContextExecCommandAsync();
@@ -56,9 +58,7 @@ async Task AddPrivAsync(TEntity data, bool isCheck)
5658
await AddOrUpdateNavigateListAsync(data);
5759
}
5860
return;
59-
case DataType.MySql:
60-
case DataType.Oracle:
61-
case DataType.Sqlite:
61+
default:
6262
if (_tableIdentitys.Length == 1 && _table.Primarys.Length == 1)
6363
{
6464
await DbContextExecCommandAsync();
@@ -92,7 +92,9 @@ async public Task AddRangeAsync(IEnumerable<TEntity> data)
9292
switch (_db.Orm.Ado.DataType)
9393
{
9494
case DataType.SqlServer:
95+
case DataType.OdbcSqlServer:
9596
case DataType.PostgreSQL:
97+
case DataType.OdbcPostgreSQL:
9698
await DbContextExecCommandAsync();
9799
var rets = await this.OrmInsert(data).ExecuteInsertedAsync();
98100
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配");
@@ -105,9 +107,7 @@ async public Task AddRangeAsync(IEnumerable<TEntity> data)
105107
foreach (var item in data)
106108
await AddOrUpdateNavigateListAsync(item);
107109
return;
108-
case DataType.MySql:
109-
case DataType.Oracle:
110-
case DataType.Sqlite:
110+
default:
111111
foreach (var s in data)
112112
await AddPrivAsync(s, false);
113113
return;

FreeSql.DbContext/DbSet/DbSetSync.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ void AddPriv(TEntity data, bool isCheck)
3434
switch (_db.Orm.Ado.DataType)
3535
{
3636
case DataType.SqlServer:
37+
case DataType.OdbcSqlServer:
3738
case DataType.PostgreSQL:
39+
case DataType.OdbcPostgreSQL:
3840
if (_tableIdentitys.Length == 1)
3941
{
4042
DbContextExecCommand();
@@ -56,9 +58,7 @@ void AddPriv(TEntity data, bool isCheck)
5658
AddOrUpdateNavigateList(data);
5759
}
5860
return;
59-
case DataType.MySql:
60-
case DataType.Oracle:
61-
case DataType.Sqlite:
61+
default:
6262
if (_tableIdentitys.Length == 1)
6363
{
6464
DbContextExecCommand();
@@ -96,7 +96,9 @@ public void AddRange(IEnumerable<TEntity> data)
9696
switch (_db.Orm.Ado.DataType)
9797
{
9898
case DataType.SqlServer:
99+
case DataType.OdbcSqlServer:
99100
case DataType.PostgreSQL:
101+
case DataType.OdbcPostgreSQL:
100102
DbContextExecCommand();
101103
var rets = this.OrmInsert(data).ExecuteInserted();
102104
if (rets.Count != data.Count()) throw new Exception($"特别错误:批量添加失败,{_db.Orm.Ado.DataType} 的返回数据,与添加的数目不匹配");
@@ -109,9 +111,7 @@ public void AddRange(IEnumerable<TEntity> data)
109111
foreach (var item in data)
110112
AddOrUpdateNavigateList(item);
111113
return;
112-
case DataType.MySql:
113-
case DataType.Oracle:
114-
case DataType.Sqlite:
114+
default:
115115
foreach (var s in data)
116116
AddPriv(s, false);
117117
return;

FreeSql.DbContext/FreeSql.DbContext.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
5-
<Version>0.9.17</Version>
5+
<Version>0.9.18</Version>
66
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
77
<Authors>YeXiangQin</Authors>
88
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>

FreeSql.Repository/FreeSql.Repository.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
5-
<Version>0.9.17</Version>
5+
<Version>0.9.18</Version>
66
<Authors>YeXiangQin</Authors>
77
<Description>FreeSql Implementation of General Repository, Support MySql/SqlServer/PostgreSQL/Oracle/Sqlite, and read/write separation、and split table.</Description>
88
<PackageProjectUrl>https://github.com/2881099/FreeSql/wiki/Repository</PackageProjectUrl>
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
using FreeSql.DataAnnotations;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using Xunit;
6+
7+
namespace FreeSql.Tests.Odbc.Default
8+
{
9+
public class OdbcDeleteTest
10+
{
11+
IDelete<Topic> delete => g.odbc.Delete<Topic>(); //��������
12+
13+
[Table(Name = "tb_topic22211")]
14+
class Topic
15+
{
16+
[Column(IsIdentity = true, IsPrimary = true)]
17+
public int Id { get; set; }
18+
public int? Clicks { get; set; }
19+
public TestTypeInfo Type { get; set; }
20+
public string Title { get; set; }
21+
public DateTime CreateTime { get; set; }
22+
}
23+
24+
[Fact]
25+
public void Dywhere()
26+
{
27+
Assert.Null(g.odbc.Delete<Topic>().ToSql());
28+
var sql = g.odbc.Delete<Topic>(new[] { 1, 2 }).ToSql();
29+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE ([Id] = 1 OR [Id] = 2)", sql);
30+
31+
sql = g.odbc.Delete<Topic>(new Topic { Id = 1, Title = "test" }).ToSql();
32+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE ([Id] = 1)", sql);
33+
34+
sql = g.odbc.Delete<Topic>(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).ToSql();
35+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE ([Id] = 1 OR [Id] = 2)", sql);
36+
37+
sql = g.odbc.Delete<Topic>(new { id = 1 }).ToSql();
38+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE ([Id] = 1)", sql);
39+
}
40+
41+
[Fact]
42+
public void Where()
43+
{
44+
var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
45+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE ([Id] = 1)", sql);
46+
47+
sql = delete.Where("id = @id", new { id = 1 }).ToSql().Replace("\r\n", "");
48+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE (id = @id)", sql);
49+
50+
var item = new Topic { Id = 1, Title = "newtitle" };
51+
sql = delete.Where(item).ToSql().Replace("\r\n", "");
52+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE ([Id] = 1)", sql);
53+
54+
var items = new List<Topic>();
55+
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
56+
57+
sql = delete.Where(items).ToSql().Replace("\r\n", "");
58+
Assert.Equal("DELETE FROM [tb_topic22211] WHERE ([Id] IN (1,2,3,4,5,6,7,8,9,10))", sql);
59+
}
60+
[Fact]
61+
public void WhereExists()
62+
{
63+
64+
}
65+
[Fact]
66+
public void ExecuteAffrows()
67+
{
68+
69+
var id = g.odbc.Insert<Topic>(new Topic { Title = "xxxx", CreateTime = DateTime.Now }).ExecuteIdentity();
70+
Assert.Equal(1, delete.Where(a => a.Id == id).ExecuteAffrows());
71+
}
72+
73+
[Fact]
74+
public void AsTable()
75+
{
76+
Assert.Null(g.odbc.Delete<Topic>().ToSql());
77+
var sql = g.odbc.Delete<Topic>(new[] { 1, 2 }).AsTable(a => "tb_topic22211AsTable").ToSql();
78+
Assert.Equal("DELETE FROM [tb_topic22211AsTable] WHERE ([Id] = 1 OR [Id] = 2)", sql);
79+
80+
sql = g.odbc.Delete<Topic>(new Topic { Id = 1, Title = "test" }).AsTable(a => "tb_topic22211AsTable").ToSql();
81+
Assert.Equal("DELETE FROM [tb_topic22211AsTable] WHERE ([Id] = 1)", sql);
82+
83+
sql = g.odbc.Delete<Topic>(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).AsTable(a => "tb_topic22211AsTable").ToSql();
84+
Assert.Equal("DELETE FROM [tb_topic22211AsTable] WHERE ([Id] = 1 OR [Id] = 2)", sql);
85+
86+
sql = g.odbc.Delete<Topic>(new { id = 1 }).AsTable(a => "tb_topic22211AsTable").ToSql();
87+
Assert.Equal("DELETE FROM [tb_topic22211AsTable] WHERE ([Id] = 1)", sql);
88+
}
89+
}
90+
}

0 commit comments

Comments
 (0)