增加Microsoft.Data.Sqlite.Core的实现

This commit is contained in:
luoyunchong 2021-12-24 20:56:37 +08:00
parent a979f96bff
commit e6e0a1275c
10 changed files with 159 additions and 1 deletions

View File

@ -107,6 +107,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.GBase", "P
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.GBase", "FreeSql.Tests\FreeSql.Tests.Provider.GBase\FreeSql.Tests.Provider.GBase.csproj", "{B887C0DA-01BE-4537-ADC1-92545AC85684}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.GBase", "FreeSql.Tests\FreeSql.Tests.Provider.GBase\FreeSql.Tests.Provider.GBase.csproj", "{B887C0DA-01BE-4537-ADC1-92545AC85684}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Sqlite.Data", "Providers\FreeSql.Provider.Sqlite.Data\FreeSql.Provider.Sqlite.Data.csproj", "{5B4D16A3-7380-47E6-9247-560EB4DD36B0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Sqlite.Data.Core", "Providers\FreeSql.Provider.Sqlite.Data.Core\FreeSql.Provider.Sqlite.Data.Core.csproj", "{21D41ACD-46B6-4716-B390-065725DD72DD}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -621,6 +625,30 @@ Global
{B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x64.Build.0 = Release|Any CPU {B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x64.Build.0 = Release|Any CPU
{B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x86.ActiveCfg = Release|Any CPU {B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x86.ActiveCfg = Release|Any CPU
{B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x86.Build.0 = Release|Any CPU {B887C0DA-01BE-4537-ADC1-92545AC85684}.Release|x86.Build.0 = Release|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x64.ActiveCfg = Debug|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x64.Build.0 = Debug|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x86.ActiveCfg = Debug|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Debug|x86.Build.0 = Debug|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|Any CPU.Build.0 = Release|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x64.ActiveCfg = Release|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x64.Build.0 = Release|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x86.ActiveCfg = Release|Any CPU
{5B4D16A3-7380-47E6-9247-560EB4DD36B0}.Release|x86.Build.0 = Release|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x64.ActiveCfg = Debug|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x64.Build.0 = Debug|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x86.ActiveCfg = Debug|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Debug|x86.Build.0 = Debug|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Release|Any CPU.Build.0 = Release|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x64.ActiveCfg = Release|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x64.Build.0 = Release|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x86.ActiveCfg = Release|Any CPU
{21D41ACD-46B6-4716-B390-065725DD72DD}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -656,6 +684,8 @@ Global
{0DBAA21C-39B2-4AAD-A43D-88E67ED239D1} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {0DBAA21C-39B2-4AAD-A43D-88E67ED239D1} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
{86C56235-5D37-4422-807B-B31681C7D01C} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {86C56235-5D37-4422-807B-B31681C7D01C} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
{BDE8EDC6-2646-45E0-A921-39CD1538A8C5} = {2A381C57-2697-427B-9F10-55DA11FD02E4} {BDE8EDC6-2646-45E0-A921-39CD1538A8C5} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
{5B4D16A3-7380-47E6-9247-560EB4DD36B0} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
{21D41ACD-46B6-4716-B390-065725DD72DD} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98} SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}

View File

@ -201,6 +201,7 @@ namespace FreeSql
break; break;
case DataType.Sqlite: case DataType.Sqlite:
type = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(typeof(TMark)); type = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(typeof(TMark));
if (type == null) type = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite.Data.Core")?.MakeGenericType(typeof(TMark)); //FreeSql.Provider.Sqlite.Data.dll
if (type == null) throwNotFind("FreeSql.Provider.Sqlite.dll", "FreeSql.Sqlite.SqliteProvider<>"); if (type == null) throwNotFind("FreeSql.Provider.Sqlite.dll", "FreeSql.Sqlite.SqliteProvider<>");
break; break;

View File

@ -0,0 +1,42 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
<Version>2.6.100</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>FreeSql;ncc;YeXiangQin</Authors>
<Description>FreeSql 数据库实现,基于 Microsoft.Data.Sqlite.Core、Sqlite 3.0,支持 .netstandard2.0、.net6.0</Description>
<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
<RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageTags>FreeSql;ORM;sqlite</PackageTags>
<PackageId>$(AssemblyName)</PackageId>
<PackageIcon>logo.png</PackageIcon>
<Title>$(AssemblyName)</Title>
<IsPackable>true</IsPackable>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
<DelaySign>false</DelaySign>
</PropertyGroup>
<ItemGroup>
<None Include="../../logo.png" Pack="true" PackagePath="\" />
</ItemGroup>
<ItemGroup>
<Compile Include="../FreeSql.Provider.Sqlite/**/*.cs" Exclude="../FreeSql.Provider.Sqlite/obj/**/*" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net6.0'">
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="6.0.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
</ItemGroup>
<PropertyGroup>
<DefineConstants>MicrosoftData</DefineConstants>
</PropertyGroup>
</Project>

Binary file not shown.

View File

@ -0,0 +1,39 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;</TargetFrameworks>
<Version>2.6.100</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>FreeSql;ncc;YeXiangQin</Authors>
<Description>FreeSql 数据库实现基于Microsoft.Data.Sqlite、 Sqlite 3.0,支持 .netstandard2.0</Description>
<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
<RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageTags>FreeSql;ORM;sqlite</PackageTags>
<PackageId>$(AssemblyName)</PackageId>
<PackageIcon>logo.png</PackageIcon>
<Title>$(AssemblyName)</Title>
<IsPackable>true</IsPackable>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
<DelaySign>false</DelaySign>
</PropertyGroup>
<ItemGroup>
<None Include="../../logo.png" Pack="true" PackagePath="\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.0.7" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
<ProjectReference Include="..\FreeSql.Provider.Sqlite.Data.Core\FreeSql.Provider.Sqlite.Data.Core.csproj" />
</ItemGroup>
<PropertyGroup>
<DefineConstants>MicrosoftData</DefineConstants>
</PropertyGroup>
</Project>

Binary file not shown.

View File

@ -5,7 +5,11 @@ using System;
using System.Collections; using System.Collections;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
#if MicrosoftData
using Microsoft.Data.Sqlite;
#else
using System.Data.SQLite; using System.Data.SQLite;
#endif
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@ -72,7 +76,12 @@ namespace FreeSql.Sqlite
cmd.Connection = null; cmd.Connection = null;
return cmd; return cmd;
} }
return new SQLiteCommand(); #if MicrosoftData
return new SqliteCommand();
#else
return new SQLiteCommand();
#endif
} }
public override void ReturnConnection(IObjectPool<DbConnection> pool, Object<DbConnection> conn, Exception ex) public override void ReturnConnection(IObjectPool<DbConnection> pool, Object<DbConnection> conn, Exception ex)

View File

@ -4,7 +4,11 @@ using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
#if MicrosoftData
using Microsoft.Data.Sqlite;
#else
using System.Data.SQLite; using System.Data.SQLite;
#endif
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -34,7 +38,11 @@ namespace FreeSql.Sqlite
public void Return(Object<DbConnection> obj, Exception exception, bool isRecreate = false) public void Return(Object<DbConnection> obj, Exception exception, bool isRecreate = false)
{ {
#if MicrosoftData
if (exception != null && exception is SqliteException)
#else
if (exception != null && exception is SQLiteException) if (exception != null && exception is SQLiteException)
#endif
{ {
try { if (obj.Value.Ping() == false) obj.Value.OpenAndAttach(policy.Attaches); } catch { base.SetUnavailable(exception); } try { if (obj.Value.Ping() == false) obj.Value.OpenAndAttach(policy.Attaches); } catch { base.SetUnavailable(exception); }
} }
@ -128,7 +136,11 @@ namespace FreeSql.Sqlite
public DbConnection OnCreate() public DbConnection OnCreate()
{ {
#if MicrosoftData
var conn = new SqliteConnection(_connectionString);
#else
var conn = new SQLiteConnection(_connectionString); var conn = new SQLiteConnection(_connectionString);
#endif
return conn; return conn;
} }

View File

@ -366,8 +366,21 @@ namespace FreeSql.Sqlite
{ {
case "Abs": return $"abs({getExp(exp.Arguments[0])})"; case "Abs": return $"abs({getExp(exp.Arguments[0])})";
case "Sign": return $"sign({getExp(exp.Arguments[0])})"; case "Sign": return $"sign({getExp(exp.Arguments[0])})";
#if MicrosoftData
case "Floor":
{
var funExp = getExp(exp.Arguments[0]);
return $"cast({funExp} as int) - ({funExp} < cast({funExp} as int))";
};
case "Ceiling":
{
var funExp = getExp(exp.Arguments[0]);
return $"cast ({funExp} as int ) + ({funExp} > cast ({funExp} as int ))";
};
#else
case "Floor": return $"floor({getExp(exp.Arguments[0])})"; case "Floor": return $"floor({getExp(exp.Arguments[0])})";
case "Ceiling": return $"ceiling({getExp(exp.Arguments[0])})"; case "Ceiling": return $"ceiling({getExp(exp.Arguments[0])})";
#endif
case "Round": case "Round":
if (exp.Arguments.Count > 1 && exp.Arguments[1].Type.FullName == "System.Int32") return $"round({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})"; if (exp.Arguments.Count > 1 && exp.Arguments[1].Type.FullName == "System.Int32") return $"round({getExp(exp.Arguments[0])}, {getExp(exp.Arguments[1])})";
return $"round({getExp(exp.Arguments[0])})"; return $"round({getExp(exp.Arguments[0])})";

View File

@ -4,7 +4,11 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
#if MicrosoftData
using Microsoft.Data.Sqlite;
#else
using System.Data.SQLite; using System.Data.SQLite;
#endif
using System.Globalization; using System.Globalization;
namespace FreeSql.Sqlite namespace FreeSql.Sqlite
@ -33,7 +37,11 @@ namespace FreeSql.Sqlite
dbtype = DbType.Int64; dbtype = DbType.Int64;
break; break;
} }
#if MicrosoftData
var ret = new SqliteParameter();
#else
var ret = new SQLiteParameter(); var ret = new SQLiteParameter();
#endif
ret.ParameterName = QuoteParamterName(parameterName); ret.ParameterName = QuoteParamterName(parameterName);
ret.DbType = dbtype; ret.DbType = dbtype;
ret.Value = value; ret.Value = value;
@ -62,7 +70,11 @@ namespace FreeSql.Sqlite
break; break;
} }
} }
#if MicrosoftData
var ret = new SqliteParameter();
#else
var ret = new SQLiteParameter(); var ret = new SQLiteParameter();
#endif
ret.ParameterName = $"@{name}"; ret.ParameterName = $"@{name}";
if (dbtype != null) ret.DbType = dbtype.Value; if (dbtype != null) ret.DbType = dbtype.Value;
ret.Value = value; ret.Value = value;