内部 SQL 格式优化

This commit is contained in:
28810 2020-07-18 13:50:26 +08:00
parent 8d11993e6c
commit 7471df5924
58 changed files with 1265 additions and 1249 deletions

View File

@ -125,6 +125,13 @@
清空状态数据
</summary>
</member>
<member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
<summary>
根据 lambda 条件删除数据
</summary>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DbSet`1.Add(`0)">
<summary>
添加
@ -479,5 +486,14 @@
<param name="that"></param>
<returns></returns>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members>
</doc>

View File

@ -13,63 +13,63 @@ using Newtonsoft.Json;
using FreeSql.DataAnnotations;
namespace FreeSql.Jhfw.Models {
public interface IBaseModel<TKey>
{
TKey Id { get; set; }
}
[JsonObject(MemberSerialization.OptIn), Table(Name = "bank_outlets")]
public partial class BankOutlets : IBaseModel<int>
public interface IBaseModel<TKey>
{
TKey Id { get; set; }
}
[JsonObject(MemberSerialization.OptIn), Table(Name = "bank_outlets")]
public partial class BankOutlets : IBaseModel<int>
{
[JsonProperty]
public int? BankId { get => _BankId; set {
if (_BankId == value) return;
_BankId = value;
OneBanks = null;
}}
private int? _BankId;
[JsonProperty]
public int? BankId { get => _BankId; set {
if (_BankId == value) return;
_BankId = value;
OneBanks = null;
}}
private int? _BankId;
[JsonProperty]
public int? ParentId { get => _ParentId; set {
if (_ParentId == value) return;
_ParentId = value;
OneBankOutlets = null;
}}
private int? _ParentId;
[JsonProperty]
public int? ParentId { get => _ParentId; set {
if (_ParentId == value) return;
_ParentId = value;
OneBankOutlets = null;
}}
private int? _ParentId;
[JsonProperty]
public string Address { get; set; } = "";
[JsonProperty]
public string Address { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(50)")]
public string Area { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(50)")]
public string Area { get; set; } = "";
[JsonProperty, Column(Name = "ID", IsIdentity = true)]
public int Id { get; set; }
[JsonProperty, Column(Name = "ID", IsIdentity = true)]
public int Id { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Name { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(50)")]
public string Name { get; set; } = "";
#region => ManyToOne/OneToOne
#region => ManyToOne/OneToOne
[Navigate("BankId")]
public virtual Banks OneBanks { get; set; }
[Navigate("BankId")]
public virtual Banks OneBanks { get; set; }
[Navigate("ParentId")]
public virtual BankOutlets OneBankOutlets { get; set; }
[Navigate("ParentId")]
public virtual BankOutlets OneBankOutlets { get; set; }
#endregion
#endregion
#region => OneToMany
#region => OneToMany
[Navigate("ParentId")]
public virtual List<BankOutlets> ManyBankOutlets { get; set; }
[Navigate("ParentId")]
public virtual List<BankOutlets> ManyBankOutlets { get; set; }
#endregion
#endregion
#region => ManyToMany
#region => ManyToMany
#endregion
}
#endregion
}
}

View File

@ -13,54 +13,54 @@ using Newtonsoft.Json;
using FreeSql.DataAnnotations;
namespace FreeSql.Jhfw.Models {
[JsonObject(MemberSerialization.OptIn), Table(Name = "banks")]
public partial class Banks : IBaseModel<int>
[JsonObject(MemberSerialization.OptIn), Table(Name = "banks")]
public partial class Banks : IBaseModel<int>
{
[JsonProperty, Column(DbType = "datetime")]
public DateTime? Addtime { get; set; }
[JsonProperty, Column(DbType = "datetime")]
public DateTime? Addtime { get; set; }
[JsonProperty, Column(DbType = "varchar(250)")]
public string Banner { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(250)")]
public string Banner { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(20)")]
public string City { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(20)")]
public string City { get; set; } = "";
[JsonProperty, Column(Name = "ID", IsIdentity = true)]
public int Id { get; set; }
[JsonProperty, Column(Name = "ID", IsIdentity = true)]
public int Id { get; set; }
[JsonProperty, Column(DbType = "tinyint(1)")]
public bool IsDelete { get; set; }
[JsonProperty, Column(DbType = "tinyint(1)")]
public bool IsDelete { get; set; }
[JsonProperty, Column(DbType = "tinyint(1)")]
public bool IsGrab { get; set; }
[JsonProperty, Column(DbType = "tinyint(1)")]
public bool IsGrab { get; set; }
[JsonProperty, Column(DbType = "tinyint(1)")]
public bool IsJoinHmd { get; set; }
[JsonProperty, Column(DbType = "tinyint(1)")]
public bool IsJoinHmd { get; set; }
[JsonProperty, Column(DbType = "varchar(100)")]
public string LoanType { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(100)")]
public string LoanType { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(250)")]
public string Logo { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(250)")]
public string Logo { get; set; } = "";
[JsonProperty]
public string Name { get; set; } = "";
[JsonProperty]
public string Name { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(3000)")]
public string Notice { get; set; } = "";
[JsonProperty, Column(DbType = "varchar(3000)")]
public string Notice { get; set; } = "";
#region => OneToMany
#region => OneToMany
[Navigate("BankId")]
public virtual List<BankOutlets> ManyBankOutlets { get; set; }
[Navigate("BankId")]
public virtual List<BankOutlets> ManyBankOutlets { get; set; }
#endregion
#endregion
#region => ManyToMany
#region => ManyToMany
#endregion
}
#endregion
}
}

View File

@ -19,81 +19,81 @@ namespace FreeSql.Tests.MySqlConnector
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -111,81 +111,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -221,27 +221,27 @@ UNION ALL
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '100001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '100002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '100003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '100004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)
;
@ -265,81 +265,81 @@ INSERT INTO `tbioudb022`(`name`) VALUES('00001'), ('00002'), ('00003'), ('00004'
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 2, '02', '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count());
@ -361,81 +361,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '011', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 2, '02', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '001', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());

View File

@ -104,22 +104,22 @@ namespace FreeSql.Tests.MySqlConnector
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.mysql.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -203,9 +203,9 @@ namespace FreeSql.Tests.MySqlConnector
var sql3 = select.LeftJoin("TestTypeInfo b on b.Guid = a.TypeGuid").ToSql();
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
@ -929,8 +929,8 @@ namespace FreeSql.Tests.MySqlConnector
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -947,8 +947,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -965,8 +965,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -983,8 +983,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -999,7 +999,7 @@ FROM `tb_topic` a", subquery);
Assert.Equal(@"SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime`
FROM `tb_topic` a
WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
FROM `tb_topic` b)))", subquery);
FROM `tb_topic` b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1077,12 +1077,12 @@ WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -96,22 +96,22 @@ namespace FreeSql.Tests.Odbc.Dameng
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.dameng.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -855,8 +855,8 @@ namespace FreeSql.Tests.Odbc.Dameng
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -873,8 +873,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -891,8 +891,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -909,8 +909,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -925,7 +925,7 @@ FROM ""TB_TOPIC22"" a", subquery);
Assert.Equal(@"SELECT a.""ID"", a.""CLICKS"", a.""TYPEGUID"", a.""TITLE"", a.""CREATETIME""
FROM ""TB_TOPIC22"" a
WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
FROM ""TB_TOPIC22"" b)))", subquery);
FROM ""TB_TOPIC22"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1004,12 +1004,12 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -85,22 +85,22 @@ namespace FreeSql.Tests.Odbc.Default
//SELECT a.[Id], a.[Parent_id], a.[Ddd], a.[Name]
//FROM [Tag] a
//WHERE (exists(SELECT 1
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
//ManyToMany
var t2 = g.odbc.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.[Id], a.[Create_time], a.[Is_deleted], a.[Title], a.[Url]
//FROM [Song] a
//WHERE(exists(SELECT 1
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -830,7 +830,7 @@ namespace FreeSql.Tests.Odbc.Default
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 sum(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -847,7 +847,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 min(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -864,7 +864,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 max(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -881,7 +881,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 avg(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -896,7 +896,7 @@ FROM [tb_topic22] a", subquery);
Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime]
FROM [tb_topic22] a
WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title]
FROM [tb_topic22] b)))", subquery);
FROM [tb_topic22] b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -974,12 +974,12 @@ WHERE (((cast(a.[Id] as nvarchar)) in (SELECT b.[Title]
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -45,20 +45,20 @@ namespace FreeSql.Tests.Odbc.Default
{
//var tt1 = g.odbc.Select<xxx>()
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToSql(a => new { a.Id, a.Title });
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToSql(a => new { a.Id, a.Title });
//var tt2result = g.odbc.Select<xxx>()
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToList(a => new { a.Id, a.Title });
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToList(a => new { a.Id, a.Title });
//var tt = g.odbc.Select<xxx>()
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToSql(a => new { a.Id, a.Title });
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToSql(a => new { a.Id, a.Title });
//var ttresult = g.odbc.Select<xxx>()
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToList(a => new { a.Id, a.Title });
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToList(a => new { a.Id, a.Title });
var tnsql1 = g.odbc.Select<xxx>().Where(a => a.Id > 0).Where(b => b.Title != null).Page(1, 3).ToSql(a => a.Id);

View File

@ -96,22 +96,22 @@ namespace FreeSql.Tests.Odbc.KingbaseES
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.kingbaseES.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -820,8 +820,8 @@ namespace FreeSql.Tests.Odbc.KingbaseES
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -838,8 +838,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -856,8 +856,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -874,8 +874,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" b
limit 1) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -890,7 +890,7 @@ FROM ""TB_TOPIC22"" a", subquery);
Assert.Equal(@"SELECT a.""ID"", a.""CLICKS"", a.""TYPEGUID"", a.""TITLE"", a.""CREATETIME""
FROM ""TB_TOPIC22"" a
WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE""
FROM ""TB_TOPIC22"" b)))", subquery);
FROM ""TB_TOPIC22"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -969,12 +969,12 @@ WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -19,81 +19,81 @@ namespace FreeSql.Tests.Odbc.MySql
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -111,81 +111,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -221,27 +221,27 @@ UNION ALL
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '100001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '100002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '100003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '100004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)
;
@ -265,81 +265,81 @@ INSERT INTO `tbioudb022`(`name`) VALUES('00001'), ('00002'), ('00003'), ('00004'
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 2, '02', '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count());
@ -361,81 +361,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '011', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 2, '02', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '001', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());

View File

@ -104,22 +104,22 @@ namespace FreeSql.Tests.Odbc.MySql
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.mysql.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -213,9 +213,9 @@ namespace FreeSql.Tests.Odbc.MySql
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
@ -940,8 +940,8 @@ namespace FreeSql.Tests.Odbc.MySql
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -958,8 +958,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -976,8 +976,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -994,8 +994,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -1010,7 +1010,7 @@ FROM `tb_topic` a", subquery);
Assert.Equal(@"SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime`
FROM `tb_topic` a
WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
FROM `tb_topic` b)))", subquery);
FROM `tb_topic` b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1088,12 +1088,12 @@ WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -96,22 +96,22 @@ namespace FreeSql.Tests.Odbc.Oracle
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.oracle.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -856,8 +856,8 @@ namespace FreeSql.Tests.Odbc.Oracle
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -874,8 +874,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -892,8 +892,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -910,8 +910,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -926,7 +926,7 @@ FROM ""TB_TOPIC22"" a", subquery);
Assert.Equal(@"SELECT a.""ID"", a.""CLICKS"", a.""TYPEGUID"", a.""TITLE"", a.""CREATETIME""
FROM ""TB_TOPIC22"" a
WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
FROM ""TB_TOPIC22"" b)))", subquery);
FROM ""TB_TOPIC22"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1005,12 +1005,12 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -86,22 +86,22 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.pgsql.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -189,9 +189,9 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
@ -916,8 +916,8 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT sum(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -934,8 +934,8 @@ FROM ""tb_topic"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT min(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -952,8 +952,8 @@ FROM ""tb_topic"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT max(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -970,8 +970,8 @@ FROM ""tb_topic"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT avg(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -986,7 +986,7 @@ FROM ""tb_topic"" a", subquery);
Assert.Equal(@"SELECT a.""id"", a.""clicks"", a.""typeguid"", a.""title"", a.""createtime""
FROM ""tb_topic"" a
WHERE ((((a.""id"")::text) in (SELECT b.""title""
FROM ""tb_topic"" b)))", subquery);
FROM ""tb_topic"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1064,12 +1064,12 @@ WHERE ((((a.""id"")::text) in (SELECT b.""title""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb UNION ALLSELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb UNION ALL SELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -81,7 +81,7 @@ namespace FreeSql.Tests.Odbc.PostgreSQLExpression
public void Array()
{
//g.pgsql.Aop.CurdAfter = (s, e) => {
// Trace.WriteLine(e.CurdType + ": " + e.ElapsedMilliseconds + "ms " + e.Sql.Replace("\n", ""));
// Trace.WriteLine(e.CurdType + ": " + e.ElapsedMilliseconds + "ms " + e.Sql.Replace("\n", ""));
//};
IEnumerable<int> testlinqlist = new List<int>(new[] { 1, 2, 3 });
var testlinq = select.Where(a => testlinqlist.Contains(a.testFieldInt)).ToList();

View File

@ -85,22 +85,22 @@ namespace FreeSql.Tests.Odbc.SqlServer
//SELECT a.[Id], a.[Parent_id], a.[Ddd], a.[Name]
//FROM [Tag] a
//WHERE (exists(SELECT 1
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
//ManyToMany
var t2 = g.sqlserver.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.[Id], a.[Create_time], a.[Is_deleted], a.[Title], a.[Url]
//FROM [Song] a
//WHERE(exists(SELECT 1
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -811,7 +811,7 @@ namespace FreeSql.Tests.Odbc.SqlServer
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 sum(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -828,7 +828,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 min(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -845,7 +845,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 max(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -862,7 +862,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 avg(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -877,7 +877,7 @@ FROM [tb_topic22] a", subquery);
Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime]
FROM [tb_topic22] a
WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
FROM [tb_topic22] b)))", subquery);
FROM [tb_topic22] b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -955,12 +955,12 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -46,20 +46,20 @@ namespace FreeSql.Tests.Odbc.SqlServer
{
//var tt1 = g.sqlserver.Select<xxx>()
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToSql(a => new { a.Id, a.Title });
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToSql(a => new { a.Id, a.Title });
//var tt2result = g.sqlserver.Select<xxx>()
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToList(a => new { a.Id, a.Title });
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToList(a => new { a.Id, a.Title });
//var tt = g.sqlserver.Select<xxx>()
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToSql(a => new { a.Id, a.Title });
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToSql(a => new { a.Id, a.Title });
//var ttresult = g.sqlserver.Select<xxx>()
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToList(a => new { a.Id, a.Title });
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToList(a => new { a.Id, a.Title });
var tnsql1 = g.sqlserver.Select<xxx>().Where(a => a.Id > 0).Where(b => b.Title != null).Page(1, 3).ToSql(a => a.Id);
var tnsql2 = g.sqlserver.Select<xxx>().Where(a => a.Id > 0).Where(b => b.Title != null).Page(2, 3).ToSql(a => a.Id);

View File

@ -475,14 +475,14 @@ WHERE ROWNUM < 11";
//var testaddlist = new List<NewsArticle>();
//for(var a = 0; a < 133905; a++) {
// testaddlist.Add(new NewsArticle {
// ArticleTitle = "testaddlist_topic" + a,
// Hits = a,
// });
// testaddlist.Add(new NewsArticle {
// ArticleTitle = "testaddlist_topic" + a,
// Hits = a,
// });
//}
//g.mysql.Insert<NewsArticle>(testaddlist)
// //.NoneParameter()
// .ExecuteAffrows();
// //.NoneParameter()
// .ExecuteAffrows();
g.mysql.Aop.ParseExpression += (s, e) =>
@ -872,9 +872,9 @@ WHERE ROWNUM < 11";
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s

View File

@ -96,22 +96,22 @@ namespace FreeSql.Tests.Dameng
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.dameng.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -855,8 +855,8 @@ namespace FreeSql.Tests.Dameng
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -873,8 +873,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -891,8 +891,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -909,8 +909,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -925,7 +925,7 @@ FROM ""TB_TOPIC22"" a", subquery);
Assert.Equal(@"SELECT a.""ID"", a.""CLICKS"", a.""TYPEGUID"", a.""TITLE"", a.""CREATETIME""
FROM ""TB_TOPIC22"" a
WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
FROM ""TB_TOPIC22"" b)))", subquery);
FROM ""TB_TOPIC22"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1005,12 +1005,12 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -68,9 +68,9 @@ namespace FreeSql.Tests.DataAnnotations
{
g.mysql.CodeFirst
//.ConfigEntity<TestFluenttb1>(a => {
// a.Name("xxdkdkdk1");
// a.Property(b => b.Id).Name("Id22").IsIdentity(true);
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
// a.Name("xxdkdkdk1");
// a.Property(b => b.Id).Name("Id22").IsIdentity(true);
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
//})
.ConfigEntity(typeof(TestFluenttb1), a =>

View File

@ -41,9 +41,9 @@ namespace FreeSql.Tests.DataAnnotations
{
g.sqlserver.CodeFirst
//.ConfigEntity<TestFluenttb1>(a => {
// a.Name("xxdkdkdk1");
// a.Property(b => b.Id).Name("Id22").IsIdentity(true);
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
// a.Name("xxdkdkdk1");
// a.Property(b => b.Id).Name("Id22").IsIdentity(true);
// a.Property(b => b.name).DbType("varchar(100)").IsNullable(true);
//})
.ConfigEntity(typeof(TestFluenttb1), a =>

View File

@ -1,61 +1,61 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<IsPackable>false</IsPackable>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>FreeSql.Tests.xml</DocumentationFile>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>FreeSql.Tests.xml</DocumentationFile>
<WarningLevel>3</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.35" />
<PackageReference Include="IdleBus" Version="1.3.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.35" />
<PackageReference Include="IdleBus" Version="1.3.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Folder Include="DataAnnotations\MySql\" />
<Folder Include="DataAnnotations\SqlServer\" />
<Folder Include="DataContext\MySql\" />
</ItemGroup>
<ItemGroup>
<Folder Include="DataAnnotations\MySql\" />
<Folder Include="DataAnnotations\SqlServer\" />
<Folder Include="DataContext\MySql\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.LazyLoading\FreeSql.Extensions.LazyLoading.csproj" />
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.Linq\FreeSql.Extensions.Linq.csproj" />
<ProjectReference Include="..\..\FreeSql.DbContext\FreeSql.DbContext.csproj" />
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Dameng\FreeSql.Provider.Dameng.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MsAccess\FreeSql.Provider.MsAccess.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MySql\FreeSql.Provider.MySql.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Oracle\FreeSql.Provider.Oracle.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.PostgreSQL\FreeSql.Provider.PostgreSQL.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.ShenTong\FreeSql.Provider.ShenTong.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.SqlServer\FreeSql.Provider.SqlServer.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.LazyLoading\FreeSql.Extensions.LazyLoading.csproj" />
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.Linq\FreeSql.Extensions.Linq.csproj" />
<ProjectReference Include="..\..\FreeSql.DbContext\FreeSql.DbContext.csproj" />
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Dameng\FreeSql.Provider.Dameng.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MsAccess\FreeSql.Provider.MsAccess.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MySql\FreeSql.Provider.MySql.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Oracle\FreeSql.Provider.Oracle.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.PostgreSQL\FreeSql.Provider.PostgreSQL.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.ShenTong\FreeSql.Provider.ShenTong.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj" />
<ProjectReference Include="..\..\Providers\FreeSql.Provider.SqlServer\FreeSql.Provider.SqlServer.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="DmProvider">
<HintPath>..\..\Providers\FreeSql.Provider.Dameng\lib\DmProvider\netstandard2.0\DmProvider.dll</HintPath>
</Reference>
<ItemGroup>
<Reference Include="DmProvider">
<HintPath>..\..\Providers\FreeSql.Provider.Dameng\lib\DmProvider\netstandard2.0\DmProvider.dll</HintPath>
</Reference>
<Reference Include="System.Data.OscarClient">
<HintPath>..\..\Providers\FreeSql.Provider.ShenTong\lib\System.Data.OscarClient.dll</HintPath>
</Reference>
<Reference Include="Mono.Security">
<HintPath>..\..\Providers\FreeSql.Provider.ShenTong\lib\Mono.Security.dll</HintPath>
</Reference>
</ItemGroup>
</ItemGroup>
</Project>

View File

@ -85,22 +85,22 @@ namespace FreeSql.Tests.MsAccess
//SELECT a.[Id], a.[Parent_id], a.[Ddd], a.[Name]
//FROM [Tag] a
//WHERE (exists(SELECT 1
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
//ManyToMany
var t2 = g.msaccess.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.[Id], a.[Create_time], a.[Is_deleted], a.[Title], a.[Url]
//FROM [Song] a
//WHERE(exists(SELECT 1
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -831,7 +831,7 @@ namespace FreeSql.Tests.MsAccess
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT TOP 1 sum(b.[Id])
FROM [tb_topic22] b) as as6
FROM [tb_topic22] b) as as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -848,7 +848,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT TOP 1 min(b.[Id])
FROM [tb_topic22] b) as as6
FROM [tb_topic22] b) as as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -865,7 +865,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT TOP 1 max(b.[Id])
FROM [tb_topic22] b) as as6
FROM [tb_topic22] b) as as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -882,7 +882,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT TOP 1 avg(b.[Id])
FROM [tb_topic22] b) as as6
FROM [tb_topic22] b) as as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -897,7 +897,7 @@ FROM [tb_topic22] a", subquery);
Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime]
FROM [tb_topic22] a
WHERE (((cstr(a.[Id])) in (SELECT b.[Title]
FROM [tb_topic22] b)))", subquery);
FROM [tb_topic22] b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -975,12 +975,12 @@ WHERE (((cstr(a.[Id])) in (SELECT b.[Title]
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -19,81 +19,81 @@ namespace FreeSql.Tests.MySql
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb02` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb02` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -111,81 +111,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -221,27 +221,27 @@ UNION ALL
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '100001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '100002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '100003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '100004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)
FROM `tbioudb022` a
WHERE (a.`id` = 4)
limit 0,1)
;
@ -265,81 +265,81 @@ INSERT INTO `tbioudb022`(`name`) VALUES('00001'), ('00002'), ('00003'), ('00004'
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '011'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 2, '02', '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '02'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '03'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '04'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '001'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 1 AND a.`id2` = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '002'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 2 AND a.`id2` = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '003'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
FROM `tbioudb03` a
WHERE (a.`id1` = 3 AND a.`id2` = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '004'
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
FROM `tbioudb03` a
WHERE (a.`id1` = 4 AND a.`id2` = '04')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count());
@ -361,81 +361,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '011', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 2, '02', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '02', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '03', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '04', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '001', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 1)
limit 0,1)
UNION ALL
SELECT 2, '002', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 2)
limit 0,1)
UNION ALL
SELECT 3, '003', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
FROM `tbioudb04` a
WHERE (a.`id` = 3)
limit 0,1)
UNION ALL
SELECT 4, '004', 0, now(3)
FROM dual WHERE NOT EXISTS(SELECT 1
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
FROM `tbioudb04` a
WHERE (a.`id` = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());

View File

@ -104,22 +104,22 @@ namespace FreeSql.Tests.MySql
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.mysql.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -213,9 +213,9 @@ namespace FreeSql.Tests.MySql
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
@ -976,8 +976,8 @@ namespace FreeSql.Tests.MySql
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -994,8 +994,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -1012,8 +1012,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -1030,8 +1030,8 @@ FROM `tb_topic` a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` b
limit 0,1) as6
FROM `tb_topic` a", subquery);
var subqueryList = select.ToList(a => new
{
@ -1046,7 +1046,7 @@ FROM `tb_topic` a", subquery);
Assert.Equal(@"SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime`
FROM `tb_topic` a
WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
FROM `tb_topic` b)))", subquery);
FROM `tb_topic` b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1124,12 +1124,12 @@ WHERE (((cast(a.`Id` as char)) in (SELECT b.`Title`
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT a.`Id`, a.`Clicks`, a.`TypeGuid`, a.`Title`, a.`CreateTime` FROM `tb_topic` a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM `tb_topic` a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -96,22 +96,22 @@ namespace FreeSql.Tests.Oracle
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.oracle.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -856,8 +856,8 @@ namespace FreeSql.Tests.Oracle
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -874,8 +874,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -892,8 +892,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -910,8 +910,8 @@ FROM ""TB_TOPIC22"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" b
WHERE ROWNUM < 2) as6
FROM ""TB_TOPIC22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -926,7 +926,7 @@ FROM ""TB_TOPIC22"" a", subquery);
Assert.Equal(@"SELECT a.""ID"", a.""CLICKS"", a.""TYPEGUID"", a.""TITLE"", a.""CREATETIME""
FROM ""TB_TOPIC22"" a
WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
FROM ""TB_TOPIC22"" b)))", subquery);
FROM ""TB_TOPIC22"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1005,12 +1005,12 @@ WHERE (((to_char(a.""ID"")) in (SELECT b.""TITLE""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC22\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -18,67 +18,67 @@ using FreeSql.DataAnnotations;
namespace ZX.Model {
[JsonObject(MemberSerialization.OptIn)]
public class CustomerCheckupGroup {
[JsonObject(MemberSerialization.OptIn)]
public class CustomerCheckupGroup {
[JsonProperty, Column(IsPrimary = true)]
public short ShopId { get => _ShopId; set {
if (_ShopId == value) return;
_ShopId = value;
} }
private short _ShopId;
[JsonProperty, Column(IsPrimary = true)]
public short ShopId { get => _ShopId; set {
if (_ShopId == value) return;
_ShopId = value;
} }
private short _ShopId;
[JsonProperty, Column(DbType = "varchar(50)", IsPrimary = true)]
public string Id { get; set; }
[JsonProperty, Column(DbType = "varchar(50)", IsPrimary = true)]
public string Id { get; set; }
[JsonProperty, Column(DbType = "nvarchar(50)")]
public string MemberId { get => _MemberId; set {
if (_MemberId == value) return;
_MemberId = value;
} }
private string _MemberId;
[JsonProperty, Column(DbType = "nvarchar(50)")]
public string MemberId { get => _MemberId; set {
if (_MemberId == value) return;
_MemberId = value;
} }
private string _MemberId;
[JsonProperty, Column(DbType = "varchar(50)")]
public string Discount { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Discount { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Doctor { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Doctor { get; set; }
[JsonProperty]
public DateTime? FirstTime { get; set; }
[JsonProperty]
public DateTime? FirstTime { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Group { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Group { get; set; }
[JsonProperty]
public DateTime? InsertTime { get; set; }
[JsonProperty]
public DateTime? InsertTime { get; set; }
[JsonProperty, Column(Name = "isOK")]
public bool? IsOK { get; set; }
[JsonProperty, Column(Name = "isOK")]
public bool? IsOK { get; set; }
[JsonProperty, Column(Name = "isPay", DbType = "varchar(50)")]
public string IsPay { get; set; }
[JsonProperty, Column(Name = "isPay", DbType = "varchar(50)")]
public string IsPay { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Office { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Office { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string PayType { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string PayType { get; set; }
[JsonProperty, Column(DbType = "decimal(9,2)")]
public decimal? Price { get; set; }
[JsonProperty, Column(DbType = "decimal(9,2)")]
public decimal? Price { get; set; }
[JsonProperty]
public DateTime? UpdateTime { get; set; }
[JsonProperty]
public DateTime? UpdateTime { get; set; }
[JsonProperty, Column(DbType = "decimal(9,2)")]
public decimal? Value { get; set; }
[JsonProperty, Column(DbType = "decimal(9,2)")]
public decimal? Value { get; set; }
#region => ManyToOne/OneToOne
#region => ManyToOne/OneToOne
[Navigate("ShopId, MemberId")]
public virtual CustomerMember CustomerMember { get; set; }
[Navigate("ShopId, MemberId")]
public virtual CustomerMember CustomerMember { get; set; }
#endregion
#region => ManyToMany

View File

@ -25,84 +25,84 @@ namespace ZX.Model {
CheckupGroups = new List<CustomerCheckupGroup>();
}
[JsonProperty, Column(DbType = "nvarchar(50)", IsPrimary = true)]
public string MemberId { get; set; }
[JsonProperty, Column(DbType = "nvarchar(50)", IsPrimary = true)]
public string MemberId { get; set; }
[JsonProperty, Column(IsPrimary = true)]
public short ShopId { get; set; }
[JsonProperty, Column(IsPrimary = true)]
public short ShopId { get; set; }
[JsonProperty]
public long? CustomerId { get => _CustomerId; set {
if (_CustomerId == value) return;
_CustomerId = value;
} }
private long? _CustomerId;
[JsonProperty]
public long? CustomerId { get => _CustomerId; set {
if (_CustomerId == value) return;
_CustomerId = value;
} }
private long? _CustomerId;
[JsonProperty, Column(DbType = "varchar(500)")]
public string Address { get; set; }
[JsonProperty, Column(DbType = "varchar(500)")]
public string Address { get; set; }
[JsonProperty, Column(DbType = "smalldatetime")]
public DateTime? Birthday { get; set; }
[JsonProperty, Column(DbType = "smalldatetime")]
public DateTime? Birthday { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string CardNo { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string CardNo { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string CardType { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string CardType { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Doctor { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Doctor { get; set; }
[JsonProperty]
public DateTime? EndDate { get; set; }
[JsonProperty]
public DateTime? EndDate { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Group { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Group { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Marry { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Marry { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Name { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Name { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Part { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Part { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string PayType { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string PayType { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Phone { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Phone { get; set; }
[JsonProperty, Column(DbType = "varchar(10)")]
public string Sex { get; set; }
[JsonProperty, Column(DbType = "varchar(10)")]
public string Sex { get; set; }
[JsonProperty]
public DateTime? StartDate { get; set; }
[JsonProperty]
public DateTime? StartDate { get; set; }
[JsonProperty, Column(DbType = "text")]
public string Suggest { get; set; }
[JsonProperty, Column(DbType = "text")]
public string Suggest { get; set; }
[JsonProperty, Column(DbType = "text")]
public string SumUp { get; set; }
[JsonProperty, Column(DbType = "text")]
public string SumUp { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Team { get; set; }
[JsonProperty, Column(DbType = "varchar(50)")]
public string Team { get; set; }
[JsonProperty, Column(DbType = "decimal(9,2)")]
public decimal? TotalFee { get; set; }
[JsonProperty, Column(DbType = "decimal(9,2)")]
public decimal? TotalFee { get; set; }
#region => ManyToOne/OneToOne
#region => ManyToOne/OneToOne
[Navigate("MemberId,ShopId")]
public virtual List<CustomerCheckupGroup> CheckupGroups { get; set; }
#endregion
#endregion
#region => ManyToMany
#region => ManyToMany
#endregion
}
#endregion
}
}

View File

@ -86,22 +86,22 @@ namespace FreeSql.Tests.PostgreSQL
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.pgsql.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -189,9 +189,9 @@ namespace FreeSql.Tests.PostgreSQL
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
@ -933,8 +933,8 @@ namespace FreeSql.Tests.PostgreSQL
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT sum(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -951,8 +951,8 @@ FROM ""tb_topic"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT min(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -969,8 +969,8 @@ FROM ""tb_topic"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT max(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -987,8 +987,8 @@ FROM ""tb_topic"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT avg(b.""id"")
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" b
limit 1) as6
FROM ""tb_topic"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -1003,7 +1003,7 @@ FROM ""tb_topic"" a", subquery);
Assert.Equal(@"SELECT a.""id"", a.""clicks"", a.""typeguid"", a.""title"", a.""createtime""
FROM ""tb_topic"" a
WHERE ((((a.""id"")::text) in (SELECT b.""title""
FROM ""tb_topic"" b)))", subquery);
FROM ""tb_topic"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1081,12 +1081,12 @@ WHERE ((((a.""id"")::text) in (SELECT b.""title""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb UNION ALLSELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb UNION ALL SELECT * from (SELECT a.\"id\", a.\"clicks\", a.\"typeguid\", a.\"title\", a.\"createtime\" FROM \"tb_topic\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"tb_topic\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -85,7 +85,7 @@ namespace FreeSql.Tests.PostgreSQLExpression
public void Array()
{
//g.pgsql.Aop.CurdAfter = (s, e) => {
// Trace.WriteLine(e.CurdType + ": " + e.ElapsedMilliseconds + "ms " + e.Sql.Replace("\n", ""));
// Trace.WriteLine(e.CurdType + ": " + e.ElapsedMilliseconds + "ms " + e.Sql.Replace("\n", ""));
//};
IEnumerable<int> testlinqlist = new List<int>(new[] { 1, 2, 3 });
var testlinq = select.Where(a => testlinqlist.Contains(a.testFieldInt)).ToList();

View File

@ -86,22 +86,22 @@ namespace FreeSql.Tests.ShenTong
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.shentong.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
}
[Fact]
@ -189,9 +189,9 @@ namespace FreeSql.Tests.ShenTong
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s
@ -933,8 +933,8 @@ namespace FreeSql.Tests.ShenTong
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -951,8 +951,8 @@ FROM ""TB_TOPIC"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -969,8 +969,8 @@ FROM ""TB_TOPIC"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -987,8 +987,8 @@ FROM ""TB_TOPIC"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" b
limit 1) as6
FROM ""TB_TOPIC"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -1003,7 +1003,7 @@ FROM ""TB_TOPIC"" a", subquery);
Assert.Equal(@"SELECT a.""ID"", a.""CLICKS"", a.""TYPEGUID"", a.""TITLE"", a.""CREATETIME""
FROM ""TB_TOPIC"" a
WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE""
FROM ""TB_TOPIC"" b)))", subquery);
FROM ""TB_TOPIC"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1081,12 +1081,12 @@ WHERE ((((a.""ID"")::text) in (SELECT b.""TITLE""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC\" a) ftb UNION ALLSELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC\" a) ftb UNION ALL SELECT * from (SELECT a.\"ID\", a.\"CLICKS\", a.\"TYPEGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"TB_TOPIC\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -76,7 +76,7 @@ namespace FreeSql.Tests.ShenTongExpression
public void Array()
{
//g.shentong.Aop.CurdAfter = (s, e) => {
// Trace.WriteLine(e.CurdType + ": " + e.ElapsedMilliseconds + "ms " + e.Sql.Replace("\n", ""));
// Trace.WriteLine(e.CurdType + ": " + e.ElapsedMilliseconds + "ms " + e.Sql.Replace("\n", ""));
//};
IEnumerable<int> testlinqlist = new List<int>(new[] { 1, 2, 3 });
var testlinq = select.Where(a => testlinqlist.Contains(a.testFieldInt)).ToList();

View File

@ -96,22 +96,22 @@ namespace FreeSql.Tests.SqlServer
//SELECT a.[Id], a.[Parent_id], a.[Ddd], a.[Name]
//FROM [Tag] a
//WHERE (exists(SELECT 1
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
// FROM [Tag] t
// LEFT JOIN [Tag] t__Parent ON t__Parent.[Id] = t.[Parent_id]
// WHERE (t__Parent.[Id] = 10) AND (t.[Parent_id] = a.[Id])
// limit 0,1))
//ManyToMany
var t2 = g.sqlserver.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.[Id], a.[Create_time], a.[Is_deleted], a.[Title], a.[Url]
//FROM [Song] a
//WHERE(exists(SELECT 1
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
// FROM [Song_tag] Mt_Ms
// WHERE(Mt_Ms.[Song_id] = a.[Id]) AND(exists(SELECT 1
// FROM [Tag] t
// WHERE(t.[Name] = '国语') AND(t.[Id] = Mt_Ms.[Tag_id])
// limit 0, 1))
// limit 0, 1))
var t3 = g.sqlserver.Select<Song>().ToList(r => new
{
@ -867,7 +867,7 @@ namespace FreeSql.Tests.SqlServer
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 sum(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -884,7 +884,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 min(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -901,7 +901,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 max(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -918,7 +918,7 @@ FROM [tb_topic22] a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT TOP 1 avg(b.[Id])
FROM [tb_topic22] b) as6
FROM [tb_topic22] b) as6
FROM [tb_topic22] a", subquery);
var subqueryList = select.ToList(a => new
{
@ -933,7 +933,7 @@ FROM [tb_topic22] a", subquery);
Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime]
FROM [tb_topic22] a
WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
FROM [tb_topic22] b)))", subquery);
FROM [tb_topic22] b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1011,12 +1011,12 @@ WHERE (((cast(a.[Id] as nvarchar(100))) in (SELECT b.[Title]
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] FROM [tb_topic22] a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM [tb_topic22] a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -53,20 +53,20 @@ namespace FreeSql.Tests.SqlServer
{
//var tt1 = g.sqlserver.Select<xxx>()
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToSql(a => new { a.Id, a.Title });
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToSql(a => new { a.Id, a.Title });
//var tt2result = g.sqlserver.Select<xxx>()
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToList(a => new { a.Id, a.Title });
// .LeftJoin(a => a.ParentId == a.Parent.Id)
// .ToList(a => new { a.Id, a.Title });
//var tt = g.sqlserver.Select<xxx>()
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToSql(a => new { a.Id, a.Title });
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToSql(a => new { a.Id, a.Title });
//var ttresult = g.sqlserver.Select<xxx>()
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToList(a => new { a.Id, a.Title });
// .LeftJoin<xxx>((a, b) => b.Id == a.Id)
// .ToList(a => new { a.Id, a.Title });
var tnsql1 = g.sqlserver.Select<xxx>().Where(a => a.Id > 0).Where(b => b.Title != null).Page(1, 3).ToSql(a => a.Id);
var tnsql2 = g.sqlserver.Select<xxx>().Where(a => a.Id > 0).Where(b => b.Title != null).Page(2, 3).ToSql(a => a.Id);

View File

@ -19,81 +19,81 @@ namespace FreeSql.Tests.Sqlite
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '01'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '011'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 2, '02'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 2)
limit 0,1)", sql);
FROM ""tbioudb02"" a
WHERE (a.""id"" = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '01'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 2)
limit 0,1)
FROM ""tbioudb02"" a
WHERE (a.""id"" = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 3)
limit 0,1)
FROM ""tbioudb02"" a
WHERE (a.""id"" = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
FROM ""tbioudb02"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '001'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)
FROM ""tbioudb02"" a
WHERE (a.""id"" = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 2)
limit 0,1)
FROM ""tbioudb02"" a
WHERE (a.""id"" = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 3)
limit 0,1)
FROM ""tbioudb02"" a
WHERE (a.""id"" = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb02"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
FROM ""tbioudb02"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -111,81 +111,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '01'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '011'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 2, '02'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)", sql);
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '01'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)
UNION ALL
SELECT 2, '02'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)
UNION ALL
SELECT 3, '03'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 3)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 3)
limit 0,1)
UNION ALL
SELECT 4, '04'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
FROM ""tbioudb022"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '001'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)
UNION ALL
SELECT 2, '002'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)
UNION ALL
SELECT 3, '003'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 3)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 3)
limit 0,1)
UNION ALL
SELECT 4, '004'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
FROM ""tbioudb022"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@ -221,27 +221,27 @@ UNION ALL
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '100001'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 1)
limit 0,1)
UNION ALL
SELECT 2, '100002'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 2)
limit 0,1)
UNION ALL
SELECT 3, '100003'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 3)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 3)
limit 0,1)
UNION ALL
SELECT 4, '100004'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb022"" a
WHERE (a.""id"" = 4)
limit 0,1)
FROM ""tbioudb022"" a
WHERE (a.""id"" = 4)
limit 0,1)
;
@ -265,81 +265,81 @@ INSERT INTO ""tbioudb022""(""name"") VALUES('00001'), ('00002'), ('00003'), ('00
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '01'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)", sql);
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '011'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)", sql);
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 2, '02', '02'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 2 AND a.""id2"" = '02')
limit 0,1)", sql);
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 2 AND a.""id2"" = '02')
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '01'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '02'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 2 AND a.""id2"" = '02')
limit 0,1)
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 2 AND a.""id2"" = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '03'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 3 AND a.""id2"" = '03')
limit 0,1)
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 3 AND a.""id2"" = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '04'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 4 AND a.""id2"" = '04')
limit 0,1)", sql);
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 4 AND a.""id2"" = '04')
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '001'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 1 AND a.""id2"" = '01')
limit 0,1)
UNION ALL
SELECT 2, '02', '002'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 2 AND a.""id2"" = '02')
limit 0,1)
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 2 AND a.""id2"" = '02')
limit 0,1)
UNION ALL
SELECT 3, '03', '003'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 3 AND a.""id2"" = '03')
limit 0,1)
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 3 AND a.""id2"" = '03')
limit 0,1)
UNION ALL
SELECT 4, '04', '004'
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 4 AND a.""id2"" = '04')
limit 0,1)", sql);
FROM ""tbioudb03"" a
WHERE (a.""id1"" = 4 AND a.""id2"" = '04')
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count());
@ -361,81 +361,81 @@ UNION ALL
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '01', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '011', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 2, '02', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 2)
limit 0,1)", sql);
FROM ""tbioudb04"" a
WHERE (a.""id"" = 2)
limit 0,1)", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '01', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)
UNION ALL
SELECT 2, '02', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 2)
limit 0,1)
FROM ""tbioudb04"" a
WHERE (a.""id"" = 2)
limit 0,1)
UNION ALL
SELECT 3, '03', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 3)
limit 0,1)
FROM ""tbioudb04"" a
WHERE (a.""id"" = 3)
limit 0,1)
UNION ALL
SELECT 4, '04', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
FROM ""tbioudb04"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '001', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)
FROM ""tbioudb04"" a
WHERE (a.""id"" = 1)
limit 0,1)
UNION ALL
SELECT 2, '002', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 2)
limit 0,1)
FROM ""tbioudb04"" a
WHERE (a.""id"" = 2)
limit 0,1)
UNION ALL
SELECT 3, '003', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 3)
limit 0,1)
FROM ""tbioudb04"" a
WHERE (a.""id"" = 3)
limit 0,1)
UNION ALL
SELECT 4, '004', 0, datetime(current_timestamp,'localtime')
WHERE NOT EXISTS(SELECT 1
FROM ""tbioudb04"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
FROM ""tbioudb04"" a
WHERE (a.""id"" = 4)
limit 0,1)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());

View File

@ -91,22 +91,22 @@ namespace FreeSql.Tests.Sqlite
//SELECT a.`Id`, a.`Parent_id`, a.`Ddd`, a.`Name`
//FROM `Tag` a
//WHERE (exists(SELECT 1
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
// FROM `Tag` t
// LEFT JOIN `Tag` t__Parent ON t__Parent.`Id` = t.`Parent_id`
// WHERE (t__Parent.`Id` = 10) AND (t.`Parent_id` = a.`Id`)
// limit 0,1))
//ManyToMany
var t2 = g.sqlite.Select<Song>().Where(s => s.Tags.AsSelect().Any(t => t.Name == "国语")).ToSql();
//SELECT a.`Id`, a.`Create_time`, a.`Is_deleted`, a.`Title`, a.`Url`
//FROM `Song` a
//WHERE(exists(SELECT 1
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
// FROM `Song_tag` Mt_Ms
// WHERE(Mt_Ms.`Song_id` = a.`Id`) AND(exists(SELECT 1
// FROM `Tag` t
// WHERE(t.`Name` = '国语') AND(t.`Id` = Mt_Ms.`Tag_id`)
// limit 0, 1))
// limit 0, 1))
var t3 = g.sqlite.Select<Song>().ToList(r => new
{
@ -821,8 +821,8 @@ namespace FreeSql.Tests.Sqlite
count = (long)select.As("b").Sum(b => b.Id)
});
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT sum(b.""Id"")
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -839,8 +839,8 @@ FROM ""tb_topic22"" a", subquery);
count = select.As("b").Min(b => b.Id)
});
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT min(b.""Id"")
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -857,8 +857,8 @@ FROM ""tb_topic22"" a", subquery);
count = select.As("b").Max(b => b.Id)
});
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT max(b.""Id"")
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -875,8 +875,8 @@ FROM ""tb_topic22"" a", subquery);
count = select.As("b").Avg(b => b.Id)
});
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT avg(b.""Id"")
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" b
limit 0,1) as6
FROM ""tb_topic22"" a", subquery);
var subqueryList = select.ToList(a => new
{
@ -891,7 +891,7 @@ FROM ""tb_topic22"" a", subquery);
Assert.Equal(@"SELECT a.""Id"", a.""Clicks"", a.""TypeGuid"", a.""Title"", a.""CreateTime""
FROM ""tb_topic22"" a
WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
FROM ""tb_topic22"" b)))", subquery);
FROM ""tb_topic22"" b)))", subquery);
var subqueryList = select.Where(a => select.As("b").ToList(b => b.Title).Contains(a.Id.ToString())).ToList();
}
[Fact]
@ -1001,12 +1001,12 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql().Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a) ftb UNION ALLSELECT * from (SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a) ftb UNION ALL SELECT * from (SELECT a.\"Id\", a.\"Clicks\", a.\"TypeGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a) ftb", sql);
query.ToList();
query = select.AsTable((_, old) => old).AsTable((_, old) => old);
sql = query.ToSql("count(1) as1").Replace("\r\n", "");
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"tb_topic22\" a) ftb UNION ALLSELECT * from (SELECT count(1) as1 FROM \"tb_topic22\" a) ftb", sql);
Assert.Equal("SELECT * from (SELECT count(1) as1 FROM \"tb_topic22\" a) ftb UNION ALL SELECT * from (SELECT count(1) as1 FROM \"tb_topic22\" a) ftb", sql);
query.Count();
select.AsTable((_, old) => old).AsTable((_, old) => old).Max(a => a.Id);

View File

@ -762,14 +762,14 @@ namespace FreeSql.Tests
//var testaddlist = new List<NewsArticle>();
//for(var a = 0; a < 133905; a++) {
// testaddlist.Add(new NewsArticle {
// ArticleTitle = "testaddlist_topic" + a,
// Hits = a,
// });
// testaddlist.Add(new NewsArticle {
// ArticleTitle = "testaddlist_topic" + a,
// Hits = a,
// });
//}
//g.sqlite.Insert<NewsArticle>(testaddlist)
// //.NoneParameter()
// .ExecuteAffrows();
// //.NoneParameter()
// .ExecuteAffrows();
g.mysql.Aop.ParseExpression += (s, e) =>
@ -1225,9 +1225,9 @@ namespace FreeSql.Tests
//);
//var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((a, b, c) => new SelectFrom()
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
// .InnerJoin(a.TypeGuid == b.Guid)
// .LeftJoin(c.Id == b.ParentId)
// .Where(b.Name == "xxx"))
//.Where(a => a.Id == 1).ToSql();
var sql4 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b, c) => s

View File

@ -984,7 +984,7 @@ namespace FreeSql.Internal
fsqlWhere.Invoke(fsql, new object[] { Expression.Lambda(fsqlManyWhereExp, fsqlWhereParam) });
var sql2 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "1" })?.ToString();
if (string.IsNullOrEmpty(sql2) == false)
manySubSelectExpBoy = Expression.Call(manySubSelectExpBoy, manySubSelectWhereSql, Expression.Constant($"exists({sql2.Replace("\r\n", "\r\n\t")})"), Expression.Constant(null));
manySubSelectExpBoy = Expression.Call(manySubSelectExpBoy, manySubSelectWhereSql, Expression.Constant($"exists({sql2.Replace(" \r\n", " \r\n ")})"), Expression.Constant(null));
MethodInfo manySubSelectAggMethod = null;
switch (exp3.Method.Name) //https://github.com/dotnetcore/FreeSql/issues/362
{
@ -1031,12 +1031,12 @@ namespace FreeSql.Internal
case "Any":
var sql = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "1" })?.ToString();
if (string.IsNullOrEmpty(sql) == false)
return $"exists({sql.Replace("\r\n", "\r\n\t")})";
return $"exists({sql.Replace(" \r\n", " \r\n ")})";
break;
case "Count":
var sqlCount = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { "count(1)" })?.ToString();
if (string.IsNullOrEmpty(sqlCount) == false)
return $"({sqlCount.Replace("\r\n", "\r\n\t")})";
return $"({sqlCount.Replace(" \r\n", " \r\n ")})";
break;
case "Sum":
case "Min":
@ -1047,7 +1047,7 @@ namespace FreeSql.Internal
tscClone1._tables = fsqltables;
var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone1)})" })?.ToString();
if (string.IsNullOrEmpty(sqlSum) == false)
return $"({sqlSum.Replace("\r\n", "\r\n\t")})";
return $"({sqlSum.Replace(" \r\n", " \r\n ")})";
break;
case "ToList":
case "ToOne":
@ -1057,7 +1057,7 @@ namespace FreeSql.Internal
tscClone2._tables = fsqltables;
var sqlFirst = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { ExpressionLambdaToSql(exp3.Arguments.FirstOrDefault(), tscClone2) })?.ToString();
if (string.IsNullOrEmpty(sqlFirst) == false)
return $"({sqlFirst.Replace("\r\n", "\r\n\t")})";
return $"({sqlFirst.Replace(" \r\n", " \r\n ")})";
break;
}
}

View File

@ -990,7 +990,7 @@ namespace FreeSql.Internal.CommonProvider
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(tb.Table.Type, name);
}
else
name = name.Replace("\r\n", "\r\n ");
name = name.Replace(" \r\n", " \r\n ");
}
dict.Add(tb.Table.Type, name);
}

View File

@ -25,7 +25,7 @@ namespace FreeSql.Dameng.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -26,7 +26,7 @@ namespace FreeSql.MsAccess.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -54,7 +54,7 @@ namespace FreeSql.MySql.Curd
.AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type)
.DisableGlobalFilter()
.WhereDynamic(rowd)
.Limit(1).ToSql("1").Replace("\r\n", "\r\n\t")).Append(")"));
.Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")"));
}
}
if (string.IsNullOrEmpty(sql)) return null;

View File

@ -25,7 +25,7 @@ namespace FreeSql.MySql.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.Odbc.Dameng
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.Odbc.Default
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.Odbc.KingbaseES
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -53,7 +53,7 @@ namespace FreeSql.Odbc.MySql
.AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type)
.DisableGlobalFilter()
.WhereDynamic(rowd)
.Limit(1).ToSql("1").Replace("\r\n", "\r\n\t")).Append(")"));
.Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")"));
}
}
if (string.IsNullOrEmpty(sql)) return null;

View File

@ -25,7 +25,7 @@ namespace FreeSql.Odbc.MySql
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.Odbc.Oracle
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.Odbc.PostgreSQL
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -31,7 +31,7 @@ namespace FreeSql.Odbc.SqlServer
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];
@ -146,7 +146,7 @@ namespace FreeSql.Odbc.SqlServer
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.Oracle.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.PostgreSQL.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -25,7 +25,7 @@ namespace FreeSql.ShenTong.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -146,7 +146,7 @@ namespace FreeSql.SqlServer.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];

View File

@ -57,7 +57,7 @@ namespace FreeSql.Sqlite.Curd
.AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type)
.DisableGlobalFilter()
.WhereDynamic(rowd)
.Limit(1).ToSql("1").Replace("\r\n", "\r\n\t")).Append(")"));
.Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")"));
}
}
if (string.IsNullOrEmpty(sql)) return null;

View File

@ -25,7 +25,7 @@ namespace FreeSql.Sqlite.Curd
var tbUnionsGt0 = tbUnions.Count > 1;
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
{
if (tbUnionsIdx > 0) sb.Append(" \r\n\r\nUNION ALL\r\n\r\n");
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
var tbUnion = tbUnions[tbUnionsIdx];