From dfb4662d869c1033e6626808b29223d17c39f69c Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Sat, 14 Dec 2019 01:34:38 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E8=A1=A5=E5=85=85=20=E5=90=8C=E7=BA=BF?=
=?UTF-8?q?=E7=A8=8B=E6=97=B6=E9=97=B4=20fsql.Transaction=20=E4=BA=8B?=
=?UTF-8?q?=E5=8A=A1=E7=AD=89=E7=BA=A7=E5=8F=82=E6=95=B0=E7=9A=84=E4=BC=A0?=
=?UTF-8?q?=E5=85=A5=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 7 -
FreeSql/FreeSql.xml | 347 +++++++++---------
FreeSql/Interface/IAdo.cs | 9 +-
FreeSql/Interface/IFreeSql.cs | 10 +-
.../AdoProvider/AdoProviderTransaction.cs | 19 +-
.../FreeSql.Provider.MySql/MySqlProvider.cs | 4 +-
.../Dameng/OdbcDamengProvider.cs | 4 +-
.../Default/OdbcProvider.cs | 4 +-
..._OdbcGBaseUpdate.cs => OdbcGBaseUpdate.cs} | 0
.../GBase/OdbcGBaseProvider.cs | 4 +-
.../GBase/__OdbcGBaseCodeFirst.cs | 2 +-
.../GBase/__OdbcGBaseExpression.cs | 52 +--
.../MySql/OdbcMySqlProvider.cs | 4 +-
.../Oracle/OdbcOracleProvider.cs | 4 +-
.../PostgreSQL/OdbcPostgreSQLProvider.cs | 4 +-
.../SqlServer/OdbcSqlServerProvider.cs | 4 +-
.../FreeSql.Provider.Oracle/OracleProvider.cs | 4 +-
.../PostgreSQLProvider.cs | 4 +-
.../SqlServerProvider.cs | 4 +-
.../FreeSql.Provider.Sqlite/SqliteProvider.cs | 4 +-
20 files changed, 254 insertions(+), 240 deletions(-)
rename Providers/FreeSql.Provider.Odbc/GBase/Curd/{__OdbcGBaseUpdate.cs => OdbcGBaseUpdate.cs} (100%)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index d9f91124..dc0203b8 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -110,13 +110,6 @@
清空状态数据
-
-
- 根据 lambda 条件删除数据
-
-
-
-
添加
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index ac93e9cc..124441f8 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -1960,10 +1960,18 @@
事务体 () => {}
-
+
开启事务(不支持异步)
+ 超时,未执行完将自动提交
+ 事务体 () => {}
+
+
+
+ 开启事务(不支持异步)
+
+
事务体 () => {}
超时,未执行完将自动提交
@@ -2256,187 +2264,7 @@
- 增删查改,执行命令完成后触发
-
-
-
-
- CodeFirst迁移,执行之前触发
-
-
-
-
- CodeFirst迁移,执行完成触发
-
-
-
-
- Insert/Update自动值处理
-
-
-
-
- 内置解析功能,可辅助您进行解析
-
-
-
-
- 需要您解析的表达式
-
-
-
-
- 解析后的内容
-
-
-
-
- 实体类型
-
-
-
-
- 实体配置
-
-
-
-
- 索引配置
-
-
-
-
- 实体类型
-
-
-
-
- 实体的属性
-
-
-
-
- 实体的属性配置
-
-
-
-
- 标识符,可将 CurdBefore 与 CurdAfter 进行匹配
-
-
-
-
- 操作类型
-
-
-
-
- 实体类型
-
-
-
-
- 实体类型的元数据
-
-
-
-
- 执行的 SQL
-
-
-
-
- 参数化命令
-
-
-
-
- 发生的错误
-
-
-
-
- 执行SQL命令,返回的结果
-
-
-
-
- 耗时(单位:Ticks)
-
-
-
-
- 耗时(单位:毫秒)
-
-
-
-
- 标识符,可将 SyncStructureBeforeEventArgs 与 SyncStructureAfterEventArgs 进行匹配
-
-
-
-
- 实体类型
-
-
-
-
- 执行的 SQL
-
-
-
-
- 发生的错误
-
-
-
-
- 耗时(单位:Ticks)
-
-
-
-
- 耗时(单位:毫秒)
-
-
-
-
- 类型
-
-
-
-
- 属性列的元数据
-
-
-
-
- 反射的属性信息
-
-
-
-
- 获取实体的属性值,也可以设置实体的属性新值
-
-
-
-
- 【开发环境必备】自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后创建或修改
-
-
-
-
- 转小写同步结构
-
-
-
-
- 转大写同步结构
-
-
-
-
- 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。
+ 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。
本功能会影响 IFreeSql 首次访问的速度。
若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
@@ -2970,10 +2798,163 @@
事务体 () => {}
-
+
开启事务(不支持异步)
+ 超时,未执行完将自动提交
+ 事务体 () => {}
+
+
+
+ 开启事务(不支持异步)
+
+
+
+
+
+
+ 使用 and 拼接两个 lambda 表达式
+
+
+
+ true 时生效
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+
+
+ 使用 or 拼接两个 lambda 表达式
+
+
+
+ true 时生效
+
+
+
+
+
+ 将 lambda 表达式取反
+
+
+
+ true 时生效
+
+
+
+
+ 生成类似Mongodb的ObjectId有序、不重复Guid
+
+
+
+
+
+ 插入数据
+
+
+
+
+
+
+ 插入数据,传入实体
+
+
+
+
+
+
+
+ 插入数据,传入实体数组
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 插入数据,传入实体集合
+
+
+
+
+
+
+
+ 修改数据
+
+
+
+
+
+
+ 修改数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 查询数据
+
+
+
+
+
+
+ 查询数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 删除数据
+
+
+
+
+
+
+ 删除数据,传入动态对象如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
+
+
+ 主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合
+
+
+
+
+ 开启事务(不支持异步),60秒未执行完将自动提交
+
+ 事务体 () => {}
+
+
+
+ 开启事务(不支持异步)
+
+ 超时,未执行完将自动提交
+ 事务体 () => {}
+
+
+
+ 开启事务(不支持异步)
+
+
事务体 () => {}
超时,未执行完将自动提交
diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs
index fd86d18c..fb830e6e 100644
--- a/FreeSql/Interface/IAdo.cs
+++ b/FreeSql/Interface/IAdo.cs
@@ -41,9 +41,16 @@ namespace FreeSql
///
/// 开启事务(不支持异步)
///
+ /// 超时,未执行完将自动提交
+ /// 事务体 () => {}
+ void Transaction(TimeSpan timeout, Action handler);
+ ///
+ /// 开启事务(不支持异步)
+ ///
+ ///
/// 事务体 () => {}
/// 超时,未执行完将自动提交
- void Transaction(Action handler, TimeSpan timeout);
+ void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler);
///
/// 当前线程的事务
///
diff --git a/FreeSql/Interface/IFreeSql.cs b/FreeSql/Interface/IFreeSql.cs
index e72033f9..4e1708c9 100644
--- a/FreeSql/Interface/IFreeSql.cs
+++ b/FreeSql/Interface/IFreeSql.cs
@@ -2,6 +2,7 @@
using FreeSql.Internal;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Linq.Expressions;
public interface IFreeSql : IFreeSql { }
@@ -93,9 +94,16 @@ public interface IFreeSql : IDisposable
///
/// 开启事务(不支持异步)
///
+ /// 超时,未执行完将自动提交
+ /// 事务体 () => {}
+ void Transaction(TimeSpan timeout, Action handler);
+ ///
+ /// 开启事务(不支持异步)
+ ///
+ ///
/// 事务体 () => {}
/// 超时,未执行完将自动提交
- void Transaction(Action handler, TimeSpan timeout);
+ void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler);
///
/// 数据库访问对象
diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs
index 8ed0c1e2..7da093e8 100644
--- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs
+++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderTransaction.cs
@@ -1,7 +1,8 @@
using SafeObjectPool;
using System;
-using System.Collections.Generic;
using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.Linq;
@@ -33,7 +34,7 @@ namespace FreeSql.Internal.CommonProvider
public DbTransaction TransactionCurrentThread => _trans.TryGetValue(Thread.CurrentThread.ManagedThreadId, out var conn) && conn.Transaction?.Connection != null ? conn.Transaction : null;
- public void BeginTransaction(TimeSpan timeout)
+ public void BeginTransaction(TimeSpan timeout, IsolationLevel? isolationLevel)
{
if (TransactionCurrentThread != null) return;
@@ -44,7 +45,7 @@ namespace FreeSql.Internal.CommonProvider
try
{
conn = MasterPool.Get();
- tran = new Transaction2(conn, conn.Value.BeginTransaction(), timeout);
+ tran = new Transaction2(conn, isolationLevel == null ? conn.Value.BeginTransaction() : conn.Value.BeginTransaction(isolationLevel.Value), timeout);
}
catch (Exception ex)
{
@@ -102,15 +103,15 @@ namespace FreeSql.Internal.CommonProvider
public void CommitTransaction() => CommitTransaction(true);
public void RollbackTransaction() => CommitTransaction(false);
- public void Transaction(Action handler)
- {
- Transaction(handler, TimeSpan.FromSeconds(60));
- }
- public void Transaction(Action handler, TimeSpan timeout)
+ public void Transaction(Action handler) => TransactionInternal(null, TimeSpan.FromSeconds(60), handler);
+ public void Transaction(TimeSpan timeout, Action handler) => TransactionInternal(null, timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => TransactionInternal(isolationLevel, timeout, handler);
+
+ void TransactionInternal(IsolationLevel? isolationLevel, TimeSpan timeout, Action handler)
{
try
{
- BeginTransaction(timeout);
+ BeginTransaction(timeout, isolationLevel);
handler();
CommitTransaction();
}
diff --git a/Providers/FreeSql.Provider.MySql/MySqlProvider.cs b/Providers/FreeSql.Provider.MySql/MySqlProvider.cs
index b5f2dd8d..edfe0054 100644
--- a/Providers/FreeSql.Provider.MySql/MySqlProvider.cs
+++ b/Providers/FreeSql.Provider.MySql/MySqlProvider.cs
@@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider;
using FreeSql.MySql.Curd;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
using System.Threading;
@@ -70,7 +71,8 @@ namespace FreeSql.MySql
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs
index 40868691..97c84c96 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengProvider.cs
@@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Threading;
@@ -49,7 +50,8 @@ namespace FreeSql.Odbc.Dameng
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs
index cac216c5..d4104e30 100644
--- a/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs
+++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcProvider.cs
@@ -4,6 +4,7 @@ using FreeSql.Odbc.Default;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
+using System.Data;
using System.Linq;
using System.Threading;
@@ -83,7 +84,8 @@ namespace FreeSql.Odbc.Default
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseUpdate.cs b/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs
similarity index 100%
rename from Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseUpdate.cs
rename to Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs
diff --git a/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs b/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs
index eee74c06..66e28e82 100644
--- a/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs
+++ b/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseProvider.cs
@@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Threading;
namespace FreeSql.Odbc.GBase
@@ -46,7 +47,8 @@ namespace FreeSql.Odbc.GBase
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs
index 15478af5..2895d9de 100644
--- a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseCodeFirst.cs
@@ -25,7 +25,7 @@ namespace FreeSql.Odbc.GBase
{ typeof(byte).FullName, (OdbcType.SmallInt, "byte","byte NOT NULL", false, false, 0) },{ typeof(byte?).FullName, (OdbcType.SmallInt, "byte", "byte", false, true, null) },
{ typeof(ushort).FullName, (OdbcType.Int, "integer","integer NOT NULL", false, false, 0) },{ typeof(ushort?).FullName, (OdbcType.Int, "integer", "integer", false, true, null) },
- { typeof(uint).FullName, (OdbcType.BigInt, "int8","int8 NOT NULL", false, false, 0) },{ typeof(uint?).FullName, (OdbcType.BigInt, "int8", "int8", false, true, null) },
+ { typeof(uint).FullName, (OdbcType.BigInt, "bigint","bigint NOT NULL", false, false, 0) },{ typeof(uint?).FullName, (OdbcType.BigInt, "bigint", "bigint", false, true, null) },
{ typeof(ulong).FullName, (OdbcType.Decimal, "decimal","decimal(20,0) NOT NULL", false, false, 0) },{ typeof(ulong?).FullName, (OdbcType.Decimal, "decimal", "decimal(20,0)", false, true, null) },
{ typeof(float).FullName, (OdbcType.Real, "smallfloat","smallfloat NOT NULL", false, false, 0) },{ typeof(float?).FullName, (OdbcType.Real, "smallfloat", "smallfloat", false, true, null) },
diff --git a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs
index c250c87f..4d0a43f1 100644
--- a/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs
+++ b/Providers/FreeSql.Provider.Odbc/GBase/__OdbcGBaseExpression.cs
@@ -27,21 +27,21 @@ namespace FreeSql.Odbc.GBase
switch (exp.Type.NullableTypeOrThis().ToString())
{
case "System.Boolean": return $"(({getExp(operandExp)})::varchar not in ('0','false','f','no'))";
- case "System.Byte": return $"({getExp(operandExp)})::int2";
+ case "System.Byte": return $"({getExp(operandExp)})::byte";
case "System.Char": return $"substr(({getExp(operandExp)})::char, 1, 1)";
case "System.DateTime": return $"({getExp(operandExp)})::timestamp";
- case "System.Decimal": return $"({getExp(operandExp)})::numeric";
- case "System.Double": return $"({getExp(operandExp)})::float8";
- case "System.Int16": return $"({getExp(operandExp)})::int2";
- case "System.Int32": return $"({getExp(operandExp)})::int4";
- case "System.Int64": return $"({getExp(operandExp)})::int8";
- case "System.SByte": return $"({getExp(operandExp)})::int2";
- case "System.Single": return $"({getExp(operandExp)})::float4";
- case "System.String": return $"({getExp(operandExp)})::varchar";
- case "System.UInt16": return $"({getExp(operandExp)})::int2";
- case "System.UInt32": return $"({getExp(operandExp)})::int4";
- case "System.UInt64": return $"({getExp(operandExp)})::int8";
- case "System.Guid": return $"({getExp(operandExp)})::uuid";
+ case "System.Decimal": return $"({getExp(operandExp)})::decimal";
+ case "System.Double": return $"({getExp(operandExp)})::float";
+ case "System.Int16": return $"({getExp(operandExp)})::smallint";
+ case "System.Int32": return $"({getExp(operandExp)})::integer";
+ case "System.Int64": return $"({getExp(operandExp)})::bigint";
+ case "System.SByte": return $"({getExp(operandExp)})::smallint";
+ case "System.Single": return $"({getExp(operandExp)})::smallfloat";
+ case "System.String": return $"({getExp(operandExp)})::nvarchar";
+ case "System.UInt16": return $"({getExp(operandExp)})::integer";
+ case "System.UInt32": return $"({getExp(operandExp)})::bigint";
+ case "System.UInt64": return $"({getExp(operandExp)})::decimal";
+ case "System.Guid": return $"({getExp(operandExp)})::char";
}
}
break;
@@ -59,26 +59,26 @@ namespace FreeSql.Odbc.GBase
switch (callExp.Method.DeclaringType.NullableTypeOrThis().ToString())
{
case "System.Boolean": return $"(({getExp(callExp.Arguments[0])})::varchar not in ('0','false','f','no'))";
- case "System.Byte": return $"({getExp(callExp.Arguments[0])})::int2";
+ case "System.Byte": return $"({getExp(callExp.Arguments[0])})::byte";
case "System.Char": return $"substr(({getExp(callExp.Arguments[0])})::char, 1, 1)";
case "System.DateTime": return $"({getExp(callExp.Arguments[0])})::timestamp";
- case "System.Decimal": return $"({getExp(callExp.Arguments[0])})::numeric";
- case "System.Double": return $"({getExp(callExp.Arguments[0])})::float8";
- case "System.Int16": return $"({getExp(callExp.Arguments[0])})::int2";
- case "System.Int32": return $"({getExp(callExp.Arguments[0])})::int4";
- case "System.Int64": return $"({getExp(callExp.Arguments[0])})::int8";
- case "System.SByte": return $"({getExp(callExp.Arguments[0])})::int2";
- case "System.Single": return $"({getExp(callExp.Arguments[0])})::float4";
- case "System.UInt16": return $"({getExp(callExp.Arguments[0])})::int2";
- case "System.UInt32": return $"({getExp(callExp.Arguments[0])})::int4";
- case "System.UInt64": return $"({getExp(callExp.Arguments[0])})::int8";
- case "System.Guid": return $"({getExp(callExp.Arguments[0])})::uuid";
+ case "System.Decimal": return $"({getExp(callExp.Arguments[0])})::decimal";
+ case "System.Double": return $"({getExp(callExp.Arguments[0])})::float";
+ case "System.Int16": return $"({getExp(callExp.Arguments[0])})::smallint";
+ case "System.Int32": return $"({getExp(callExp.Arguments[0])})::integer";
+ case "System.Int64": return $"({getExp(callExp.Arguments[0])})::bigint";
+ case "System.SByte": return $"({getExp(callExp.Arguments[0])})::smallint";
+ case "System.Single": return $"({getExp(callExp.Arguments[0])})::smallfloat";
+ case "System.UInt16": return $"({getExp(callExp.Arguments[0])})::integer";
+ case "System.UInt32": return $"({getExp(callExp.Arguments[0])})::bigint";
+ case "System.UInt64": return $"({getExp(callExp.Arguments[0])})::decimal";
+ case "System.Guid": return $"({getExp(callExp.Arguments[0])})::char";
}
break;
case "NewGuid":
return null;
case "Next":
- if (callExp.Object?.Type == typeof(Random)) return "(random()*1000000000)::int4";
+ if (callExp.Object?.Type == typeof(Random)) return "(random()*1000000000)::integer";
return null;
case "NextDouble":
if (callExp.Object?.Type == typeof(Random)) return "random()";
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs
index f779a505..95b21a6b 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlProvider.cs
@@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
using System.Threading;
@@ -48,7 +49,8 @@ namespace FreeSql.Odbc.MySql
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs
index 9191ce78..e82bc16d 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleProvider.cs
@@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Threading;
@@ -49,7 +50,8 @@ namespace FreeSql.Odbc.Oracle
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs
index 8358e646..d858489a 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLProvider.cs
@@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Threading;
namespace FreeSql.Odbc.PostgreSQL
@@ -46,7 +47,8 @@ namespace FreeSql.Odbc.PostgreSQL
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs
index 58c63d56..faf7847a 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerProvider.cs
@@ -2,6 +2,7 @@
using FreeSql.Internal.CommonProvider;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Threading;
namespace FreeSql.Odbc.SqlServer
@@ -54,7 +55,8 @@ namespace FreeSql.Odbc.SqlServer
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Oracle/OracleProvider.cs b/Providers/FreeSql.Provider.Oracle/OracleProvider.cs
index dfed6ce9..6be0984e 100644
--- a/Providers/FreeSql.Provider.Oracle/OracleProvider.cs
+++ b/Providers/FreeSql.Provider.Oracle/OracleProvider.cs
@@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider;
using FreeSql.Oracle.Curd;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Threading;
@@ -44,7 +45,8 @@ namespace FreeSql.Oracle
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs
index 550e9284..a900c60a 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLProvider.cs
@@ -7,6 +7,7 @@ using NpgsqlTypes;
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Linq.Expressions;
using System.Net;
@@ -97,7 +98,8 @@ namespace FreeSql.PostgreSQL
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs
index 3efeae05..0de7d235 100644
--- a/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs
+++ b/Providers/FreeSql.Provider.SqlServer/SqlServerProvider.cs
@@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider;
using FreeSql.SqlServer.Curd;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Threading;
namespace FreeSql.SqlServer
@@ -55,7 +56,8 @@ namespace FreeSql.SqlServer
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();
diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs b/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs
index 5c17d9f9..ba92b82f 100644
--- a/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs
+++ b/Providers/FreeSql.Provider.Sqlite/SqliteProvider.cs
@@ -3,6 +3,7 @@ using FreeSql.Internal.CommonProvider;
using FreeSql.Sqlite.Curd;
using System;
using System.Collections.Generic;
+using System.Data;
using System.Data.Common;
using System.Threading;
@@ -43,7 +44,8 @@ namespace FreeSql.Sqlite
internal CommonExpression InternalCommonExpression { get; }
public void Transaction(Action handler) => Ado.Transaction(handler);
- public void Transaction(Action handler, TimeSpan timeout) => Ado.Transaction(handler, timeout);
+ public void Transaction(TimeSpan timeout, Action handler) => Ado.Transaction(timeout, handler);
+ public void Transaction(IsolationLevel isolationLevel, TimeSpan timeout, Action handler) => Ado.Transaction(isolationLevel, timeout, handler);
public GlobalFilter GlobalFilter { get; } = new GlobalFilter();