mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-05 16:00:52 +08:00
TDengine Ado调试
This commit is contained in:
@@ -1,27 +1,27 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<WarningLevel>3</WarningLevel>
|
||||
<NoWarn>1701;1702;1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.5.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Providers\FreeSql.Provider.TDengine\FreeSql.Provider.TDengine.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -8,10 +8,10 @@ namespace FreeSql.Tests.Provider.TDengine.TDengine.TDengineAdo
|
||||
IFreeSql fsql => g.tdengine;
|
||||
|
||||
[Fact]
|
||||
public void ExecuteConnectTest()
|
||||
public void AuditValue()
|
||||
{
|
||||
var executeConnectTest = fsql.Ado.ExecuteConnectTest();
|
||||
Assert.True(executeConnectTest);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
namespace FreeSql.Tests.Provider.TDengine.TDengineAdo
|
||||
{
|
||||
public class TDengineAdoTest
|
||||
{
|
||||
IFreeSql fsql => g.tdengine;
|
||||
|
||||
[Fact]
|
||||
public void AuditValue()
|
||||
{
|
||||
var executeConnectTest = fsql.Ado.ExecuteConnectTest();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,11 +10,11 @@ namespace FreeSql.Tests.Provider.TDengine
|
||||
{
|
||||
internal class g
|
||||
{
|
||||
static readonly Lazy<IFreeSql> tdengineLazy = new Lazy<IFreeSql>(() =>
|
||||
private static readonly Lazy<IFreeSql> tdengineLazy = new Lazy<IFreeSql>(() =>
|
||||
{
|
||||
return new FreeSql.FreeSqlBuilder()
|
||||
var fsql = new FreeSql.FreeSqlBuilder()
|
||||
.UseConnectionString(FreeSql.DataType.TDengine,
|
||||
"Host=127.0.0.1;Port=6030;Username=root;Password=taosdata;Protocol=Native;db=test;Min Pool Size=1;Max Poll Size=10")
|
||||
"host=localhost;port=6030;username=root;password=taosdata;protocol=Native;db=test;")
|
||||
.UseAutoSyncStructure(true)
|
||||
.UseNameConvert(Internal.NameConvertType.ToLower)
|
||||
.UseMonitorCommand(
|
||||
@@ -23,6 +23,7 @@ namespace FreeSql.Tests.Provider.TDengine
|
||||
//, (cmd, traceLog) => Console.WriteLine(traceLog)
|
||||
)
|
||||
.Build();
|
||||
return fsql;
|
||||
});
|
||||
|
||||
public static IFreeSql tdengine => tdengineLazy.Value;
|
||||
|
||||
32
FreeSql.sln
32
FreeSql.sln
@@ -131,9 +131,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Duckdb", "
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Duckdb", "FreeSql.Tests\FreeSql.Tests.Provider.Duckdb\FreeSql.Tests.Provider.Duckdb.csproj", "{DE79C012-15B1-40EC-AD19-CBD7D489DB8E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.TDengine", "Providers\FreeSql.Provider.TDengine\FreeSql.Provider.TDengine.csproj", "{329BA8B3-4139-4CCE-AFEC-4BE9B7BED317}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.TDengine", "Providers\FreeSql.Provider.TDengine\FreeSql.Provider.TDengine.csproj", "{329BA8B3-4139-4CCE-AFEC-4BE9B7BED317}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Tests.Provider.TDengine", "FreeSql.Tests\FreeSql.Tests.Provider.TDengine\FreeSql.Tests.Provider.TDengine.csproj", "{1F313BE0-5069-4B5E-BEE7-138954D293F9}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.TDengine", "FreeSql.Tests\FreeSql.Tests.Provider.TDengine\FreeSql.Tests.Provider.TDengine.csproj", "{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -805,18 +805,18 @@ Global
|
||||
{329BA8B3-4139-4CCE-AFEC-4BE9B7BED317}.Release|x64.Build.0 = Release|Any CPU
|
||||
{329BA8B3-4139-4CCE-AFEC-4BE9B7BED317}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{329BA8B3-4139-4CCE-AFEC-4BE9B7BED317}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1F313BE0-5069-4B5E-BEE7-138954D293F9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0C178F1C-0F65-47AA-A1DE-545CBF8543D1}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -862,8 +862,8 @@ Global
|
||||
{329BA8B3-4139-4CCE-AFEC-4BE9B7BED317} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
|
||||
RESX_PrefixTranslations = True
|
||||
RESX_NeutralResourcesLanguage = en-US
|
||||
RESX_PrefixTranslations = True
|
||||
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
@@ -4291,103 +4291,103 @@
|
||||
</summary>
|
||||
<typeparam name="T"></typeparam>
|
||||
<param name="entity"></param>
|
||||
member name="M:FreeSql.IDbFirst.GetCsParse(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<summary>
|
||||
反序列化
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ICodeFirst.ConfigEntity(System.Type,System.Action{FreeSql.DataAnnotations.TableFluent})">
|
||||
<member name="M:FreeSql.IDbFirst.GetEnumsByDatabase(System.String[])">
|
||||
<summary>
|
||||
FreeSql FluentApi 配置实体,方法名与特性相同
|
||||
</summary>
|
||||
<param name="type"></param>
|
||||
<param name="entity"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ICodeFirst.GetConfigEntity(System.Type)">
|
||||
<summary>
|
||||
获取 FreeSql FluentApi 配置实体的元数据
|
||||
</summary>
|
||||
<param name="type"></param>
|
||||
<returns>未使用ConfigEntity配置时,返回null</returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ICodeFirst.GetTableByEntity(System.Type)">
|
||||
<summary>
|
||||
获取实体类核心配置
|
||||
</summary>
|
||||
<param name="type"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetDatabases">
|
||||
<summary>
|
||||
获取所有数据库
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetTablesByDatabase(System.String[])">
|
||||
<summary>
|
||||
获取指定数据库的表信息,包括表、列详情、主键、唯一键、索引、外键、备注
|
||||
获取数据库枚举类型,适用 PostgreSQL
|
||||
</summary>
|
||||
<param name="database"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetTableByName(System.String,System.Boolean)">
|
||||
<member name="F:FreeSql.Internal.BaseDiyMemberExpression._lambdaParameter">
|
||||
<summary>
|
||||
获取指定单表信息,包括列详情、主键、唯一键、索引、备注
|
||||
临时 LambdaExpression.Parameter
|
||||
</summary>
|
||||
<param name="name">表名,如:dbo.table1</param>
|
||||
<param name="ignoreCase">是否忽略大小写</param>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.CommonProvider.InsertOrUpdateProvider`1.SplitSourceByIdentityValueIsNull(System.Collections.Generic.List{`0})">
|
||||
<summary>
|
||||
如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
|
||||
</summary>
|
||||
<param name="source"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.ExistsTable(System.String,System.Boolean)">
|
||||
<member name="M:FreeSql.Internal.CommonProvider.InsertProvider`1.IgnoreCanInsert">
|
||||
<summary>
|
||||
判断表是否存在
|
||||
AsType, Ctor, ClearData 三处地方需要重新加载
|
||||
</summary>
|
||||
<param name="name">表名,如:dbo.table1</param>
|
||||
<param name="ignoreCase">是否忽略大小写</param>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.CommonProvider.UpdateProvider`1.IgnoreCanUpdate">
|
||||
<summary>
|
||||
AsType, Ctor, ClearData 三处地方需要重新加载
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.CommonUtils.GetPropertyCommentByDescriptionAttribute(System.Type)">
|
||||
<summary>
|
||||
动态读取 DescriptionAttribute 注释文本
|
||||
</summary>
|
||||
<param name="type"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetDbType(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<member name="M:FreeSql.Internal.CommonUtils.GetProperyCommentBySummary(System.Type)">
|
||||
<summary>
|
||||
获取数据库枚举类型int值
|
||||
通过属性的注释文本,通过 xml 读取
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
<param name="type"></param>
|
||||
<returns>Dict:key=属性名,value=注释</returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetCsConvert(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<member name="P:FreeSql.Internal.DbUpdateVersionException.Table">
|
||||
<summary>
|
||||
获取c#转换,(int)、(long)
|
||||
更新实体的元数据
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetCsTypeValue(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<member name="P:FreeSql.Internal.DbUpdateVersionException.Sql">
|
||||
<summary>
|
||||
获取c#值
|
||||
执行更新的 SQL
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetCsType(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<member name="P:FreeSql.Internal.DbUpdateVersionException.DbParams">
|
||||
<summary>
|
||||
获取c#类型,int、long
|
||||
执行更新命令的参数
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetCsTypeInfo(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<member name="P:FreeSql.Internal.DbUpdateVersionException.Affrows">
|
||||
<summary>
|
||||
获取c#类型对象
|
||||
执行更新命令影响的行
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetDataReaderMethod(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<member name="P:FreeSql.Internal.DbUpdateVersionException.EntitySourceCount">
|
||||
<summary>
|
||||
获取ado.net读取方法, GetBoolean、GetInt64
|
||||
更新的实体数量
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IDbFirst.GetCsStringify(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||
<member name="P:FreeSql.Internal.DbUpdateVersionException.EntitySource">
|
||||
<summary>
|
||||
更新的实体
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:FreeSql.Internal.MappingPriorityType">
|
||||
<summary>
|
||||
映射优先级,默认: Attribute > FluentApi > Aop
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.MappingPriorityType.Attribute">
|
||||
<summary>
|
||||
实体特性<para></para>
|
||||
[Table(Name = "tabname")]<para></para>
|
||||
[Column(Name = "table_id")]
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.MappingPriorityType.FluentApi">
|
||||
<summary>
|
||||
流式接口<para></para>
|
||||
fsql.CodeFirst.ConfigEntity(a => a.Name("tabname"))<para></para>
|
||||
fsql.CodeFirst.ConfigEntity(a => a.Property(b => b.Id).Name("table_id"))
|
||||
序列化
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
@@ -4659,118 +4659,7 @@
|
||||
总批次数量
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.Model.ColumnInfo.GetDbValue(System.Object)">
|
||||
<summary>
|
||||
获取 obj.CsName 属性值 MapType 之后的数据库值
|
||||
</summary>
|
||||
<param name="obj"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.Model.ColumnInfo.GetValue(System.Object)">
|
||||
<summary>
|
||||
获取 obj.CsName 属性原始值(不经过 MapType)
|
||||
</summary>
|
||||
<param name="obj"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.Model.ColumnInfo.SetValue(System.Object,System.Object)">
|
||||
<summary>
|
||||
设置 obj.CsName 属性值
|
||||
</summary>
|
||||
<param name="obj"></param>
|
||||
<param name="val"></param>
|
||||
</member>
|
||||
<member name="T:FreeSql.Internal.Model.DynamicFilterInfo">
|
||||
<summary>
|
||||
动态过滤条件
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.Model.DynamicFilterInfo.Field">
|
||||
<summary>
|
||||
属性名:Name<para></para>
|
||||
导航属性:Parent.Name<para></para>
|
||||
多表:b.Name<para></para>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.Model.DynamicFilterInfo.Operator">
|
||||
<summary>
|
||||
操作符
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.Model.DynamicFilterInfo.Value">
|
||||
<summary>
|
||||
值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.Model.DynamicFilterInfo.Logic">
|
||||
<summary>
|
||||
Filters 下的逻辑运算符
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.Model.DynamicFilterInfo.Filters">
|
||||
<summary>
|
||||
子过滤条件,它与当前的逻辑关系是 And<para></para>
|
||||
注意:当前 Field 可以留空
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Contains">
|
||||
<summary>
|
||||
like
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Equal">
|
||||
<summary>
|
||||
=<para></para>
|
||||
Equal/Equals/Eq 效果相同
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Equals">
|
||||
<summary>
|
||||
=<para></para>
|
||||
Equal/Equals/Eq 效果相同
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Eq">
|
||||
<summary>
|
||||
=<para></para>
|
||||
Equal/Equals/Eq 效果相同
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.NotEqual">
|
||||
<summary>
|
||||
<>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.GreaterThan">
|
||||
<summary>
|
||||
>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.GreaterThanOrEqual">
|
||||
<summary>
|
||||
>=
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.LessThan">
|
||||
<summary>
|
||||
<
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.LessThanOrEqual">
|
||||
<summary>
|
||||
<=
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Range">
|
||||
<summary>
|
||||
>= and <<para></para>
|
||||
此时 Value 的值格式为逗号分割:value1,value2 或者数组
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.DateRange">
|
||||
<summary>
|
||||
>= and <<para></para>
|
||||
此时 Value 的值格式为逗号分割:date1,date2 或者数组<para></para>
|
||||
这是专门为日期范围查询定制的操作符,它会处理 date2 + 1,比如:<para></para>
|
||||
<member name="M:FreeSql.Internal.Model.ColumnInfo.理 date2 + 1,比如:<para></para>
|
||||
当 date2 选择的是 2020-05-30,那查询的时候是 < 2020-05-31<para></para>
|
||||
当 date2 选择的是 2020-05,那查询的时候是 < 2020-06<para></para>
|
||||
当 date2 选择的是 2020,那查询的时候是 < 2021<para></para>
|
||||
@@ -4853,105 +4742,87 @@
|
||||
<summary>
|
||||
不可用时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.SetUnavailable(System.Exception,System.DateTime)">
|
||||
<summary>
|
||||
将对象池设置为不可用,后续 Get/GetAsync 均会报错,同时启动后台定时检查服务恢复可用
|
||||
</summary>
|
||||
<param name="exception"></param>
|
||||
<param name="lastGetTime"></param>
|
||||
<returns>由【可用】变成【不可用】时返回true,否则返回false</returns>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IObjectPool`1.Statistics">
|
||||
<summary>
|
||||
统计对象池中的对象
|
||||
lue 的值格式为逗号分割:date1,date2 或者数组<para></para>
|
||||
这是专门为日期范围查询定制的操作符,它会处理 date2 + 1,比如:<para></para>
|
||||
当 date2 选择的是 2020-05-30,那查询的时候是 < 2020-05-31<para></para>
|
||||
当 date2 选择的是 2020-05,那查询的时候是 < 2020-06<para></para>
|
||||
当 date2 选择的是 2020,那查询的时候是 < 2021<para></para>
|
||||
当 date2 选择的是 2020-05-30 12,那查询的时候是 < 2020-05-30 13<para></para>
|
||||
当 date2 选择的是 2020-05-30 12:30,那查询的时候是 < 2020-05-30 12:31<para></para>
|
||||
并且 date2 只支持以上 5 种格式 (date1 没有限制)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IObjectPool`1.StatisticsFullily">
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Any">
|
||||
<summary>
|
||||
统计对象池中的对象(完整)
|
||||
in (1,2,3)<para></para>
|
||||
此时 Value 的值格式为逗号分割:value1,value2,value3... 或者数组
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Get(System.Nullable{System.TimeSpan})">
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.NotAny">
|
||||
<summary>
|
||||
获取资源
|
||||
</summary>
|
||||
<param name="timeout">超时</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
|
||||
<summary>
|
||||
获取资源
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
|
||||
<summary>
|
||||
使用完毕后,归还资源
|
||||
</summary>
|
||||
<param name="obj">对象</param>
|
||||
<param name="isReset">是否重新创建</param>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.Name">
|
||||
<summary>
|
||||
名称
|
||||
not in (1,2,3)<para></para>
|
||||
此时 Value 的值格式为逗号分割:value1,value2,value3... 或者数组
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.PoolSize">
|
||||
<member name="F:FreeSql.Internal.Model.DynamicFilterOperator.Custom">
|
||||
<summary>
|
||||
池容量
|
||||
自定义解析,此时 Field 为反射信息,Value 为静态方法的参数(string/Expression)<para></para>
|
||||
示范:{ Operator: "Custom", Field: "RawSql webapp1.DynamicFilterCustom,webapp1", Value: "(id,name) in ((1,'k'),(2,'m'))" }<para></para>
|
||||
注意:使用者自己承担【注入风险】<para></para>
|
||||
静态方法定义示范:<para></para>
|
||||
namespace webapp1<para></para>
|
||||
{<para></para>
|
||||
public class DynamicFilterCustom<para></para>
|
||||
{<para></para>
|
||||
[DynamicFilterCustom]<para></para>
|
||||
public static string RawSql(object sender, string value) => value;<para></para>
|
||||
}<para></para>
|
||||
}<para></para>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.SyncGetTimeout">
|
||||
<member name="T:FreeSql.Internal.Model.DynamicFilterCustomAttribute">
|
||||
<summary>
|
||||
默认获取超时设置
|
||||
授权 DynamicFilter 支持 Custom 自定义解析
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.IdleTimeout">
|
||||
<member name="P:FreeSql.Internal.Model.FetchCallbackArgs`1.IsBreak">
|
||||
<summary>
|
||||
空闲时间,获取时若超出,则重新创建
|
||||
是否放弃继续读取
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.AsyncGetCapacity">
|
||||
<member name="P:FreeSql.Internal.Model.TableRef.RefMiddleEntityType">
|
||||
<summary>
|
||||
异步获取排队队列大小,小于等于0不生效
|
||||
中间表,多对多
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.IsThrowGetTimeoutException">
|
||||
<member name="F:FreeSql.Internal.Model.TableRefType.PgArrayToMany">
|
||||
<summary>
|
||||
获取超时后,是否抛出异常
|
||||
PostgreSQL 数组类型专属功能<para></para>
|
||||
方式一:select * from Role where Id in (RoleIds)<para></para>
|
||||
class User {<para></para>
|
||||
____public int[] RoleIds { get; set; }<para></para>
|
||||
____[Navigate(nameof(RoleIds))]<para></para>
|
||||
____public List<Role> Roles { get; set; }<para></para>
|
||||
}<para></para>
|
||||
方式二:select * from User where RoleIds @> Id<para></para>
|
||||
class Role {<para></para>
|
||||
____public int Id { get; set; }<para></para>
|
||||
____[Navigate(nameof(User.RoleIds))]<para></para>
|
||||
____public List<User> Users { get; set; }<para></para>
|
||||
}<para></para>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.IsAutoDisposeWithSystem">
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IObjectPool`1.IsAvailable">
|
||||
<summary>
|
||||
监听 AppDomain.CurrentDomain.ProcessExit/Console.CancelKeyPress 事件自动释放
|
||||
是否可用
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.CheckAvailableInterval">
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IObjectPool`1.UnavailableException">
|
||||
<summary>
|
||||
后台定时检查可用性间隔秒数
|
||||
不可用错误
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:FreeSql.Internal.ObjectPool.IPolicy`1.Weight">
|
||||
<summary>
|
||||
权重
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnCreate">
|
||||
<summary>
|
||||
对象池的对象被创建时
|
||||
</summary>
|
||||
<returns>返回被创建的对象</returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnDestroy(`0)">
|
||||
<summary>
|
||||
销毁对象
|
||||
</summary>
|
||||
<param name="obj">资源对象</param>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetTimeout">
|
||||
<summary>
|
||||
从对象池获取对象超时的时候触发,通过该方法统计
|
||||
<memb<EFBFBD>获取对象超时的时候触发,通过该方法统计
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGet(FreeSql.Internal.ObjectPool.Object{`0})">
|
||||
@@ -5896,28 +5767,6 @@
|
||||
请使用 fsql.InsertDict(dict) 方法插入字典数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.DynamicEntity(FreeSql.ICodeFirst,System.String,System.Attribute[])">
|
||||
<summary>
|
||||
动态构建Class Type
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateInstance(FreeSql.Internal.Model.TableInfo,System.Collections.Generic.Dictionary{System.String,System.Object})">
|
||||
<summary>
|
||||
根据字典,创建 table 对应的实体对象
|
||||
</summary>
|
||||
<param name="table"></param>
|
||||
<param name="dict"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateDictionary(FreeSql.Internal.Model.TableInfo,System.Object)">
|
||||
<summary>
|
||||
根据实体对象,创建 table 对应的字典
|
||||
</summary>
|
||||
<param name="table"></param>
|
||||
<param name="instance"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)">
|
||||
<summary>
|
||||
C#: that >= between && that <= and<para></para>
|
||||
@@ -6454,3 +6303,126 @@
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.List{``0})">
|
||||
<summary>
|
||||
插入数据,传入实体集合
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<param name="source"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.IEnumerable{``0})">
|
||||
<summary>
|
||||
插入数据,传入实体集合
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<param name="source"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.InsertOrUpdate``1">
|
||||
<summary>
|
||||
插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:<para></para>
|
||||
MySql 5.6+: on duplicate key update<para></para>
|
||||
PostgreSQL 9.4+: on conflict do update<para></para>
|
||||
SqlServer 2008+: merge into<para></para>
|
||||
Oracle 11+: merge into<para></para>
|
||||
Sqlite: replace into<para></para>
|
||||
DuckDB: on conflict do update<para></para>
|
||||
达梦: merge into<para></para>
|
||||
人大金仓:on conflict do update<para></para>
|
||||
神通:merge into<para></para>
|
||||
MsAccess:不支持<para></para>
|
||||
注意区别:FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Update``1">
|
||||
<summary>
|
||||
修改数据
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Update``1(System.Object)">
|
||||
<summary>
|
||||
修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Select``1">
|
||||
<summary>
|
||||
查询数据
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Select``1(System.Object)">
|
||||
<summary>
|
||||
查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Delete``1">
|
||||
<summary>
|
||||
删除数据
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Delete``1(System.Object)">
|
||||
<summary>
|
||||
删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Transaction(System.Action)">
|
||||
<summary>
|
||||
开启事务(不支持异步)<para></para>
|
||||
v1.5.0 关闭了线程事务超时自动提交的机制
|
||||
</summary>
|
||||
<param name="handler">事务体 () => {}</param>
|
||||
</member>
|
||||
<member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.Action)">
|
||||
<summary>
|
||||
开启事务(不支持异步)<para></para>
|
||||
v1.5.0 关闭了线程事务超时自动提交的机制
|
||||
</summary>
|
||||
<param name="isolationLevel"></param>
|
||||
<param name="handler">事务体 () => {}</param>
|
||||
</member>
|
||||
<member name="P:IFreeSql.Ado">
|
||||
<summary>
|
||||
数据库访问对象
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.Aop">
|
||||
<summary>
|
||||
所有拦截方法都在这里
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.CodeFirst">
|
||||
<summary>
|
||||
CodeFirst 模式开发相关方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.DbFirst">
|
||||
<summary>
|
||||
DbFirst 模式开发相关方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IFreeSql.GlobalFilter">
|
||||
<summary>
|
||||
全局过滤设置,可默认附加为 Select/Update/Delete 条件
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
||||
97
Providers/FreeSql.Provider.TDengine/Curd/TDengineSelect.cs
Normal file
97
Providers/FreeSql.Provider.TDengine/Curd/TDengineSelect.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FreeSql.Internal;
|
||||
|
||||
namespace FreeSql.TDengine.Curd
|
||||
{
|
||||
internal class TDengineSelect<T1> : FreeSql.Internal.CommonProvider.Select1Provider<T1>
|
||||
{
|
||||
public TDengineSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2> From<T2>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3> From<T2, T3>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4> From<T2, T3, T4>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5> From<T2, T3, T4, T5>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6> From<T2, T3, T4, T5, T6>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7> From<T2, T3, T4, T5, T6, T7>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8> From<T2, T3, T4, T5, T6, T7, T8>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> From<T2, T3, T4, T5, T6, T7, T8, T9>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> From<T2, T3, T4, T5, T6, T7, T8, T9, T10>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(System.Linq.Expressions.Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, ISelectFromExpression<T1>>> exp = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override string ToSql(string field = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ namespace FreeSql.TDengine
|
||||
{
|
||||
var pool = new DbConnectionPool(DataType.TDengine, connectionFactory);
|
||||
ConnectionString = pool.TestConnection?.ConnectionString;
|
||||
_CreateCommandConnection = pool.TestConnection;
|
||||
MasterPool = pool;
|
||||
return;
|
||||
}
|
||||
@@ -92,8 +93,16 @@ namespace FreeSql.TDengine
|
||||
return string.Concat("'", param.ToString()?.Replace("\\", "\\\\").Replace("'", "\\'"), "'");
|
||||
}
|
||||
|
||||
DbConnection _CreateCommandConnection;
|
||||
public override DbCommand CreateCommand()
|
||||
{
|
||||
if (_CreateCommandConnection != null)
|
||||
{
|
||||
_CreateCommandConnection.Open();
|
||||
var cmd = _CreateCommandConnection.CreateCommand();
|
||||
cmd.Connection = null;
|
||||
return cmd;
|
||||
}
|
||||
return new TDengineCommand();
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ using System.Data.Common;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using TDengine.Data.Client;
|
||||
using TDengine.Driver;
|
||||
using TDengine.Driver.Client;
|
||||
|
||||
namespace FreeSql.TDengine
|
||||
{
|
||||
@@ -29,9 +31,9 @@ namespace FreeSql.TDengine
|
||||
policy.ConnectionString = connectionString;
|
||||
}
|
||||
|
||||
internal void Return(Object<DbConnection> conn, Exception ex)
|
||||
public void Return(Object<DbConnection> obj, Exception exception, bool isRecreate = false)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
base.Return(obj, isRecreate);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using FreeSql.DatabaseModel;
|
||||
using FreeSql.Internal;
|
||||
|
||||
namespace FreeSql.TDengine
|
||||
{
|
||||
public class TDengineDbFirst : IDbFirst
|
||||
{
|
||||
IFreeSql _orm;
|
||||
protected CommonUtils _commonUtils;
|
||||
protected CommonExpression _commonExpression;
|
||||
public TDengineDbFirst(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression)
|
||||
{
|
||||
_orm = orm;
|
||||
_commonUtils = commonUtils;
|
||||
_commonExpression = commonExpression;
|
||||
}
|
||||
public List<string> GetDatabases()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using FreeSql.Internal.CommonProvider;
|
||||
using System;
|
||||
using System.Data.Common;
|
||||
using FreeSql.TDengine.Curd;
|
||||
|
||||
namespace FreeSql.TDengine
|
||||
{
|
||||
@@ -9,15 +10,17 @@ namespace FreeSql.TDengine
|
||||
public TDengineProvider(string masterConnectionString, string[] slaveConnectionString,
|
||||
Func<DbConnection> connectionFactory = null)
|
||||
{
|
||||
|
||||
this.InternalCommonUtils = new TDengineUtils(this);
|
||||
this.InternalCommonExpression = new TDengineExpression(this.InternalCommonUtils);
|
||||
this.Ado = new TDengineAdo(this.InternalCommonUtils, masterConnectionString, slaveConnectionString,
|
||||
connectionFactory);
|
||||
this.Aop = new AopProvider();
|
||||
this.DbFirst = new TDengineDbFirst(this, this.InternalCommonUtils, this.InternalCommonExpression);
|
||||
this.CodeFirst = new TDengineCodeFirst(this, this.InternalCommonUtils, this.InternalCommonExpression);
|
||||
}
|
||||
|
||||
public override ISelect<T1> CreateSelectProvider<T1>(object dywhere)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
public override ISelect<T1> CreateSelectProvider<T1>(object dywhere) => new TDengineSelect<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
|
||||
|
||||
public override IInsert<T1> CreateInsertProvider<T1>()
|
||||
{
|
||||
|
||||
@@ -2,7 +2,12 @@
|
||||
using FreeSql.Internal.Model;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using TDengine.Data.Client;
|
||||
using TDengine.Driver;
|
||||
|
||||
namespace FreeSql.TDengine
|
||||
{
|
||||
@@ -16,7 +21,8 @@ namespace FreeSql.TDengine
|
||||
|
||||
public override string NowUtc => throw new NotImplementedException();
|
||||
|
||||
public override DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value)
|
||||
public override DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col,
|
||||
Type type, object value)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@@ -30,13 +36,67 @@ namespace FreeSql.TDengine
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
static Dictionary<string, Func<object, object>> dicGetParamterValue = new Dictionary<string, Func<object, object>> {
|
||||
{ typeof(uint).FullName, a => long.Parse(string.Concat(a)) }, { typeof(uint[]).FullName, a => getParamterArrayValue(typeof(long), a, 0) }, { typeof(uint?[]).FullName, a => getParamterArrayValue(typeof(long?), a, null) },
|
||||
{ typeof(ulong).FullName, a => decimal.Parse(string.Concat(a)) }, { typeof(ulong[]).FullName, a => getParamterArrayValue(typeof(decimal), a, 0) }, { typeof(ulong?[]).FullName, a => getParamterArrayValue(typeof(decimal?), a, null) },
|
||||
{ typeof(ushort).FullName, a => int.Parse(string.Concat(a)) }, { typeof(ushort[]).FullName, a => getParamterArrayValue(typeof(int), a, 0) }, { typeof(ushort?[]).FullName, a => getParamterArrayValue(typeof(int?), a, null) },
|
||||
{ typeof(byte).FullName, a => short.Parse(string.Concat(a)) }, { typeof(byte[]).FullName, a => getParamterArrayValue(typeof(short), a, 0) }, { typeof(byte?[]).FullName, a => getParamterArrayValue(typeof(short?), a, null) },
|
||||
{ typeof(sbyte).FullName, a => short.Parse(string.Concat(a)) }, { typeof(sbyte[]).FullName, a => getParamterArrayValue(typeof(short), a, 0) }, { typeof(sbyte?[]).FullName, a => getParamterArrayValue(typeof(short?), a, null) },
|
||||
{ typeof(char).FullName, a => string.Concat(a).Replace('\0', ' ').ToCharArray().FirstOrDefault() },
|
||||
{ typeof(BigInteger).FullName, a => BigInteger.Parse(string.Concat(a), System.Globalization.NumberStyles.Any) }, { typeof(BigInteger[]).FullName, a => getParamterArrayValue(typeof(BigInteger), a, 0) }, { typeof(BigInteger?[]).FullName, a => getParamterArrayValue(typeof(BigInteger?), a, null) },
|
||||
};
|
||||
|
||||
public override DbParameter[] GetDbParamtersByObject(string sql, object obj)
|
||||
static Array getParamterArrayValue(Type arrayType, object value, object defaultValue)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var valueArr = value as Array;
|
||||
var len = valueArr.GetLength(0);
|
||||
var ret = Array.CreateInstance(arrayType, len);
|
||||
for (var a = 0; a < len; a++)
|
||||
{
|
||||
var item = valueArr.GetValue(a);
|
||||
ret.SetValue(item == null ? defaultValue : getParamterValue(item.GetType(), item, 1), a);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
|
||||
static object getParamterValue(Type type, object value, int level = 0)
|
||||
{
|
||||
if (type.FullName == "System.Byte[]") return value;
|
||||
if (type.FullName == "System.Char[]") return value;
|
||||
if (type.IsArray && level == 0)
|
||||
{
|
||||
var elementType = type.GetElementType();
|
||||
Type enumType = null;
|
||||
if (elementType.IsEnum) enumType = elementType;
|
||||
else if (elementType.IsNullableType() && elementType.GenericTypeArguments.First().IsEnum) enumType = elementType.GenericTypeArguments.First();
|
||||
if (enumType != null) return enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ?
|
||||
getParamterArrayValue(typeof(long), value, elementType.IsEnum ? null : enumType.CreateInstanceGetDefaultValue()) :
|
||||
getParamterArrayValue(typeof(int), value, elementType.IsEnum ? null : enumType.CreateInstanceGetDefaultValue());
|
||||
return dicGetParamterValue.TryGetValue(type.FullName, out var trydicarr) ? trydicarr(value) : value;
|
||||
}
|
||||
if (type.IsNullableType()) type = type.GenericTypeArguments.First();
|
||||
if (type.IsEnum) return (int)value;
|
||||
if (dicGetParamterValue.TryGetValue(type.FullName, out var trydic)) return trydic(value);
|
||||
return value;
|
||||
}
|
||||
|
||||
public override DbParameter[] GetDbParamtersByObject(string sql, object obj)
|
||||
=>
|
||||
Utils.GetDbParamtersByObject<DbParameter>(sql, obj, "@", (name, type, value) =>
|
||||
{
|
||||
if (value != null) value = getParamterValue(type, value);
|
||||
var ret = new TDengineParameter { ParameterName = $"@{name}", Value = value };
|
||||
//if (value.GetType().IsEnum || value.GetType().GenericTypeArguments.FirstOrDefault()?.IsEnum == true) {
|
||||
// ret.DataTypeName = "";
|
||||
//} else {
|
||||
var tp = _orm.CodeFirst.GetDbInfo(type)?.type;
|
||||
if (tp != null) ret.DbType = (DbType)tp.Value;
|
||||
//}
|
||||
return ret;
|
||||
});
|
||||
|
||||
public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag,
|
||||
ColumnInfo col, Type type, object value)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@@ -51,10 +111,7 @@ namespace FreeSql.TDengine
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override string QuoteParamterName(string name)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
public override string QuoteParamterName(string name) => $"@{name}";
|
||||
|
||||
public override string QuoteSqlNameAdapter(params string[] name)
|
||||
{
|
||||
@@ -86,4 +143,4 @@ namespace FreeSql.TDengine
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user