Skip to content

Commit e1e3e4a

Browse files
2881028810
authored andcommitted
- 增加 Where In 表达式解析;
- 增加 FreeSqlBuilder.UseConnectionFactory 自定义数据库连接对象的创建方法;
1 parent 51494c3 commit e1e3e4a

File tree

57 files changed

+971
-445
lines changed

Some content is hidden

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

57 files changed

+971
-445
lines changed

FreeSql.Tests/FreeSql.Tests.PerformanceTests/FreeSql.Tests.PerformanceTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<ItemGroup>
2020
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.LazyLoading\FreeSql.Extensions.LazyLoading.csproj" />
2121
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
22-
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MySql\FreeSql.Provider.MySql.csproj" />
22+
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MySqlConnector\FreeSql.Provider.MySqlConnector.csproj" />
2323
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Oracle\FreeSql.Provider.Oracle.csproj" />
2424
<ProjectReference Include="..\..\Providers\FreeSql.Provider.PostgreSQL\FreeSql.Provider.PostgreSQL.csproj" />
2525
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj" />

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -832,12 +832,16 @@ public void Sum()
832832
var subquery = select.ToSql(a => new
833833
{
834834
all = a,
835-
count = (long)select.Sum(b => b.Id)
835+
count = (long)select.As("b").Sum(b => b.Id)
836836
});
837+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
838+
FROM `tb_topic` b
839+
limit 0,1) as6
840+
FROM `tb_topic` a", subquery);
837841
var subqueryList = select.ToList(a => new
838842
{
839843
all = a,
840-
count = (long)select.Sum(b => b.Id)
844+
count = (long)select.As("b").Sum(b => b.Id)
841845
});
842846
}
843847
[Fact]
@@ -846,12 +850,16 @@ public void Min()
846850
var subquery = select.ToSql(a => new
847851
{
848852
all = a,
849-
count = select.Min(b => b.Id)
853+
count = select.As("b").Min(b => b.Id)
850854
});
855+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
856+
FROM `tb_topic` b
857+
limit 0,1) as6
858+
FROM `tb_topic` a", subquery);
851859
var subqueryList = select.ToList(a => new
852860
{
853861
all = a,
854-
count = select.Min(b => b.Id)
862+
count = select.As("b").Min(b => b.Id)
855863
});
856864
}
857865
[Fact]
@@ -860,12 +868,16 @@ public void Max()
860868
var subquery = select.ToSql(a => new
861869
{
862870
all = a,
863-
count = select.Max(b => b.Id)
871+
count = select.As("b").Max(b => b.Id)
864872
});
873+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
874+
FROM `tb_topic` b
875+
limit 0,1) as6
876+
FROM `tb_topic` a", subquery);
865877
var subqueryList = select.ToList(a => new
866878
{
867879
all = a,
868-
count = select.Max(b => b.Id)
880+
count = select.As("b").Max(b => b.Id)
869881
});
870882
}
871883
[Fact]
@@ -874,15 +886,29 @@ public void Avg()
874886
var subquery = select.ToSql(a => new
875887
{
876888
all = a,
877-
count = select.Avg(b => b.Id)
889+
count = select.As("b").Avg(b => b.Id)
878890
});
891+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
892+
FROM `tb_topic` b
893+
limit 0,1) as6
894+
FROM `tb_topic` a", subquery);
879895
var subqueryList = select.ToList(a => new
880896
{
881897
all = a,
882-
count = select.Avg(b => b.Id)
898+
count = select.As("b").Avg(b => b.Id)
883899
});
884900
}
885901
[Fact]
902+
public void WhereIn()
903+
{
904+
var subquery = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToSql();
905+
Assert.Equal(@"SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime`
906+
FROM `tb_topic` a
907+
WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
908+
FROM `tb_topic` b)))", subquery);
909+
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
910+
}
911+
[Fact]
886912
public void As()
887913
{
888914
}

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/g.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ public class g
99

1010
static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
1111
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;Max pool size=10")
12+
//.UseConnectionFactory(FreeSql.DataType.MySql, () => new MySql.Data.MySqlClient.MySqlConnection("Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd_mysqlconnector;Charset=utf8;SslMode=none;"))
1213
.UseAutoSyncStructure(true)
1314
//.UseGenerateCommandParameterWithLambda(true)
1415
.UseMonitorCommand(
1516
cmd =>
1617
{
18+
cmd.CommandTimeout = 200000;
1719
Trace.WriteLine(cmd.CommandText);
1820
}, //监听SQL命令对象,在执行前
1921
(cmd, traceLog) =>

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -758,12 +758,16 @@ public void Sum()
758758
var subquery = select.ToSql(a => new
759759
{
760760
all = a,
761-
count = select.Sum(b => b.Id)
761+
count = (long)select.As("b").Sum(b => b.Id)
762762
});
763+
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
764+
FROM ""TB_TOPIC22"" b
765+
WHERE ROWNUM < 2) as6
766+
FROM ""TB_TOPIC22"" a", subquery);
763767
var subqueryList = select.ToList(a => new
764768
{
765769
all = a,
766-
count = select.Sum(b => b.Id)
770+
count = (long)select.As("b").Sum(b => b.Id)
767771
});
768772
}
769773
[Fact]
@@ -772,12 +776,16 @@ public void Min()
772776
var subquery = select.ToSql(a => new
773777
{
774778
all = a,
775-
count = select.Min(b => b.Id)
779+
count = select.As("b").Min(b => b.Id)
776780
});
781+
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
782+
FROM ""TB_TOPIC22"" b
783+
WHERE ROWNUM < 2) as6
784+
FROM ""TB_TOPIC22"" a", subquery);
777785
var subqueryList = select.ToList(a => new
778786
{
779787
all = a,
780-
count = select.Min(b => b.Id)
788+
count = select.As("b").Min(b => b.Id)
781789
});
782790
}
783791
[Fact]
@@ -786,12 +794,16 @@ public void Max()
786794
var subquery = select.ToSql(a => new
787795
{
788796
all = a,
789-
count = select.Max(b => b.Id)
797+
count = select.As("b").Max(b => b.Id)
790798
});
799+
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
800+
FROM ""TB_TOPIC22"" b
801+
WHERE ROWNUM < 2) as6
802+
FROM ""TB_TOPIC22"" a", subquery);
791803
var subqueryList = select.ToList(a => new
792804
{
793805
all = a,
794-
count = select.Max(b => b.Id)
806+
count = select.As("b").Max(b => b.Id)
795807
});
796808
}
797809
[Fact]
@@ -800,15 +812,29 @@ public void Avg()
800812
var subquery = select.ToSql(a => new
801813
{
802814
all = a,
803-
count = select.Avg(b => b.Id)
815+
count = select.As("b").Avg(b => b.Id)
804816
});
817+
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
818+
FROM ""TB_TOPIC22"" b
819+
WHERE ROWNUM < 2) as6
820+
FROM ""TB_TOPIC22"" a", subquery);
805821
var subqueryList = select.ToList(a => new
806822
{
807823
all = a,
808-
count = select.Avg(b => b.Id)
824+
count = select.As("b").Avg(b => b.Id)
809825
});
810826
}
811827
[Fact]
828+
public void WhereIn()
829+
{
830+
var subquery = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToSql();
831+
Assert.Equal(@"SELECT a.""ID"", a.""CLICKS"", a.""TYPEGUID"", a.""TITLE"", a.""CREATETIME""
832+
FROM ""TB_TOPIC22"" a
833+
WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
834+
FROM ""TB_TOPIC22"" b)))", subquery);
835+
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
836+
}
837+
[Fact]
812838
public void As()
813839
{
814840
}

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -725,15 +725,18 @@ public void Distinct()
725725
[Fact]
726726
public void Sum()
727727
{
728-
var subquery = select.Where(a => a.Id < 200).ToSql(a => new
728+
var subquery = select.ToSql(a => new
729729
{
730730
all = a,
731-
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
731+
count = (long)select.As("b").Sum(b => b.Id)
732732
});
733-
var subqueryList = select.Where(a => a.Id < 200).ToList(a => new
733+
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 sum(b.[Id])
734+
FROM [tb_topic22] b) as6
735+
FROM [tb_topic22] a", subquery);
736+
var subqueryList = select.ToList(a => new
734737
{
735738
all = a,
736-
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
739+
count = (long)select.As("b").Sum(b => b.Id)
737740
});
738741
}
739742
[Fact]
@@ -742,12 +745,15 @@ public void Min()
742745
var subquery = select.ToSql(a => new
743746
{
744747
all = a,
745-
count = select.Min(b => b.Id)
748+
count = select.As("b").Min(b => b.Id)
746749
});
750+
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 min(b.[Id])
751+
FROM [tb_topic22] b) as6
752+
FROM [tb_topic22] a", subquery);
747753
var subqueryList = select.ToList(a => new
748754
{
749755
all = a,
750-
count = select.Min(b => b.Id)
756+
count = select.As("b").Min(b => b.Id)
751757
});
752758
}
753759
[Fact]
@@ -756,29 +762,45 @@ public void Max()
756762
var subquery = select.ToSql(a => new
757763
{
758764
all = a,
759-
count = select.Max(b => b.Id)
765+
count = select.As("b").Max(b => b.Id)
760766
});
767+
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 max(b.[Id])
768+
FROM [tb_topic22] b) as6
769+
FROM [tb_topic22] a", subquery);
761770
var subqueryList = select.ToList(a => new
762771
{
763772
all = a,
764-
count = select.Max(b => b.Id)
773+
count = select.As("b").Max(b => b.Id)
765774
});
766775
}
767776
[Fact]
768777
public void Avg()
769778
{
770-
var subquery = select.Where(a => a.Id < 200).ToSql(a => new
779+
var subquery = select.ToSql(a => new
771780
{
772781
all = a,
773-
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
782+
count = select.As("b").Avg(b => b.Id)
774783
});
775-
var subqueryList = select.Where(a => a.Id < 200).ToList(a => new
784+
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 avg(b.[Id])
785+
FROM [tb_topic22] b) as6
786+
FROM [tb_topic22] a", subquery);
787+
var subqueryList = select.ToList(a => new
776788
{
777789
all = a,
778-
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
790+
count = select.As("b").Avg(b => b.Id)
779791
});
780792
}
781793
[Fact]
794+
public void WhereIn()
795+
{
796+
var subquery = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToSql();
797+
Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime]
798+
FROM [tb_topic22] a
799+
WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title]
800+
FROM [tb_topic22] b)))", subquery);
801+
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
802+
}
803+
[Fact]
782804
public void As()
783805
{
784806
}

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -843,12 +843,16 @@ public void Sum()
843843
var subquery = select.ToSql(a => new
844844
{
845845
all = a,
846-
count = (long)select.Sum(b => b.Id)
846+
count = (long)select.As("b").Sum(b => b.Id)
847847
});
848+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
849+
FROM `tb_topic` b
850+
limit 0,1) as6
851+
FROM `tb_topic` a", subquery);
848852
var subqueryList = select.ToList(a => new
849853
{
850854
all = a,
851-
count = (long)select.Sum(b => b.Id)
855+
count = (long)select.As("b").Sum(b => b.Id)
852856
});
853857
}
854858
[Fact]
@@ -857,12 +861,16 @@ public void Min()
857861
var subquery = select.ToSql(a => new
858862
{
859863
all = a,
860-
count = select.Min(b => b.Id)
864+
count = select.As("b").Min(b => b.Id)
861865
});
866+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
867+
FROM `tb_topic` b
868+
limit 0,1) as6
869+
FROM `tb_topic` a", subquery);
862870
var subqueryList = select.ToList(a => new
863871
{
864872
all = a,
865-
count = select.Min(b => b.Id)
873+
count = select.As("b").Min(b => b.Id)
866874
});
867875
}
868876
[Fact]
@@ -871,12 +879,16 @@ public void Max()
871879
var subquery = select.ToSql(a => new
872880
{
873881
all = a,
874-
count = select.Max(b => b.Id)
882+
count = select.As("b").Max(b => b.Id)
875883
});
884+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
885+
FROM `tb_topic` b
886+
limit 0,1) as6
887+
FROM `tb_topic` a", subquery);
876888
var subqueryList = select.ToList(a => new
877889
{
878890
all = a,
879-
count = select.Max(b => b.Id)
891+
count = select.As("b").Max(b => b.Id)
880892
});
881893
}
882894
[Fact]
@@ -885,15 +897,29 @@ public void Avg()
885897
var subquery = select.ToSql(a => new
886898
{
887899
all = a,
888-
count = select.Avg(b => b.Id)
900+
count = select.As("b").Avg(b => b.Id)
889901
});
902+
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
903+
FROM `tb_topic` b
904+
limit 0,1) as6
905+
FROM `tb_topic` a", subquery);
890906
var subqueryList = select.ToList(a => new
891907
{
892908
all = a,
893-
count = select.Avg(b => b.Id)
909+
count = select.As("b").Avg(b => b.Id)
894910
});
895911
}
896912
[Fact]
913+
public void WhereIn()
914+
{
915+
var subquery = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToSql();
916+
Assert.Equal(@"SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime`
917+
FROM `tb_topic` a
918+
WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
919+
FROM `tb_topic` b)))", subquery);
920+
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
921+
}
922+
[Fact]
897923
public void As()
898924
{
899925
}

0 commit comments

Comments
 (0)