mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-24 08:33:16 +08:00
Compare commits
15 Commits
8efcb859e6
...
1efdcc4abb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1efdcc4abb | ||
|
|
fc0d840bdd | ||
|
|
d2aa296b26 | ||
|
|
4db5842555 | ||
|
|
74aa0e71db | ||
|
|
5bdb351258 | ||
|
|
6d8bebbc36 | ||
|
|
cf17d9baec | ||
|
|
41cadc1d15 | ||
|
|
83deab8295 | ||
|
|
b596c69939 | ||
|
|
bb5d5a102a | ||
|
|
f6be3b03da | ||
|
|
a88188383b | ||
|
|
a4986b475d |
@@ -30,6 +30,7 @@ namespace OrmTest
|
||||
_a7_JsonType.Init();
|
||||
_a8_SelectReturnType.Init();
|
||||
_a9_GeometryTest.Init();
|
||||
b10_GetConfigValueTest.Init();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
139
Src/Asp.NetCore2/PgSqlTest/b10_GetConfigValueTest.cs
Normal file
139
Src/Asp.NetCore2/PgSqlTest/b10_GetConfigValueTest.cs
Normal file
@@ -0,0 +1,139 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OrmTest
|
||||
{
|
||||
internal class b10_GetConfigValueTest
|
||||
{
|
||||
public static void Init()
|
||||
{
|
||||
// Get a new database instance
|
||||
// 获取新的数据库实例
|
||||
var db = DbHelper.GetNewDb();
|
||||
|
||||
// Create the database if it doesn't exist
|
||||
// 如果数据库不存在,则创建数据库
|
||||
db.DbMaintenance.CreateDatabase();
|
||||
|
||||
db.CodeFirst.InitTables<EavEntityType>();
|
||||
db.CodeFirst.InitTables<SysDictType>();
|
||||
db.CodeFirst.InitTables<SysDictData>();
|
||||
|
||||
// 清空表
|
||||
db.DbMaintenance.TruncateTable<EavEntityType>();
|
||||
db.DbMaintenance.TruncateTable<SysDictType>();
|
||||
db.DbMaintenance.TruncateTable<SysDictData>();
|
||||
|
||||
// 插入数据
|
||||
// 字典类型
|
||||
db.Insertable(new SysDictType() { DictName = "系统是否", DictType = "sys_yes_no" }).ExecuteCommand();//用例代码
|
||||
|
||||
// 字典值
|
||||
db.Insertable(new SysDictData() { DictLabel = "是", DictValue = "Y", DictType = "sys_yes_no" }).ExecuteCommand();//用例代码
|
||||
db.Insertable(new SysDictData() { DictLabel = "否", DictValue = "N", DictType = "sys_yes_no" }).ExecuteCommand();//用例代码
|
||||
|
||||
|
||||
// 实体类型
|
||||
db.Insertable(new EavEntityType() { EntityTypeName = "人员", EntityTypeCode = "Human", IsActive = true }).ExecuteCommand();//用例代码
|
||||
|
||||
// 配置
|
||||
var types = db.Queryable<SysDictType>()
|
||||
.Select(it => it.DictType)
|
||||
.ToList();
|
||||
|
||||
//上面有耗时操作写在Any上面,保证程序启动后只执行一次
|
||||
if (!db.ConfigQuery.Any())
|
||||
{
|
||||
foreach (var type in types)
|
||||
{
|
||||
//db.ConfigQuery.SetTable<SysDictData>(it => SqlFunc.ToString(it.DictValue), it => it.DictLabel, type, it => it.DictType == type);
|
||||
db.ConfigQuery.SetTable<SysDictData>(it => it.DictValue.ToString(), it => it.DictLabel, type, it => it.DictType == type);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询
|
||||
var total = 0;
|
||||
var result = db.Queryable<EavEntityType>().Select((it) => new
|
||||
{
|
||||
it,
|
||||
IsActiveLabel = (it.IsActive ? "Y" : "N").GetConfigValue<SysDictData>("sys_yes_no"),
|
||||
}, true)
|
||||
.ToPageList(1, 100000, ref total);
|
||||
}
|
||||
}
|
||||
|
||||
[SugarTable("sys_dict_type", "字典类型表")]
|
||||
[SugarIndex("index_dict_type", nameof(DictType), OrderByType.Asc, true)]
|
||||
public class SysDictType
|
||||
{
|
||||
/// <summary>
|
||||
/// 字典名称
|
||||
/// </summary>
|
||||
[SugarColumn(Length = 100, ExtendedAttribute = ProteryConstant.NOTNULL)]
|
||||
public string DictName { get; set; }
|
||||
/// <summary>
|
||||
/// 字典类型
|
||||
/// </summary>
|
||||
[SugarColumn(Length = 100, ExtendedAttribute = ProteryConstant.NOTNULL)]
|
||||
public string DictType { get; set; }
|
||||
}
|
||||
[SugarTable("sys_dict_data", "字典数据表")]
|
||||
public class SysDictData
|
||||
{
|
||||
/// <summary>
|
||||
/// 字典标签
|
||||
/// </summary>
|
||||
[SugarColumn(Length = 100, ExtendedAttribute = ProteryConstant.NOTNULL)]
|
||||
public string DictLabel { get; set; }
|
||||
/// <summary>
|
||||
/// 字典键值
|
||||
/// </summary>
|
||||
[SugarColumn(Length = 100, ExtendedAttribute = ProteryConstant.NOTNULL)]
|
||||
public string DictValue { get; set; }
|
||||
/// <summary>
|
||||
/// 字典类型
|
||||
/// </summary>
|
||||
[SugarColumn(Length = 100, ExtendedAttribute = ProteryConstant.NOTNULL)]
|
||||
public string DictType { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 实体类型
|
||||
/// </summary>
|
||||
[SugarTable("eav_entity_type")]
|
||||
public class EavEntityType
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键 主键,自增ID
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "entity_type_id")]
|
||||
public int? EntityTypeId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 代码 实体类型代码(如 product, user)
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "entity_type_code")]
|
||||
public string EntityTypeCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 名称 实体类型名称(如 产品, 用户))
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "entity_type_name")]
|
||||
public string EntityTypeName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 启用 是否启用该实体类型
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "is_active")]
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
}
|
||||
public enum ProteryConstant
|
||||
{
|
||||
NOTNULL = 0
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
<package >
|
||||
<metadata>
|
||||
<id>SqlSugar.MongoDbCore</id>
|
||||
<version>5.1.4.259</version>
|
||||
<version>5.1.4.271</version>
|
||||
<authors>sunkaixuan</authors>
|
||||
<owners>果糖大数据</owners>
|
||||
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
|
||||
@@ -19,7 +19,7 @@
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="G:\Git\SqlSugar\Src\Asp.NetCore2\SqlSugar.MongoDbCore\bin\Debug\netstandard2.1\SqlSugar.MongoDbCore.dll" target="lib\net6.0"></file>
|
||||
<file src="G:\Git\SqlSugar\Src\Asp.NetCore2\SqlSugar.MongoDbCore\bin\Debug\netstandard2.1\MongoDb.Ado.Data.dll" target="lib\net6.0"></file>
|
||||
<file src="G:\Git\SqlSugar\Src\Asp.NetCore2\SqlSugar.MongoDbCore\bin\Debug\netstandard2.1\SqlSugar.MongoDbCore.dll" target="lib\netstandard2.1"></file>
|
||||
<file src="G:\Git\SqlSugar\Src\Asp.NetCore2\SqlSugar.MongoDbCore\bin\Debug\netstandard2.1\MongoDb.Ado.Data.dll" target="lib\netstandard2.1"></file>
|
||||
</files>
|
||||
</package>
|
||||
@@ -84,7 +84,8 @@ namespace SqlSugar
|
||||
attributeType.GetProperty(nameof(SugarColumn.IsOwnsOne)),
|
||||
attributeType.GetProperty(nameof(SugarColumn.InsertServerTime)),
|
||||
attributeType.GetProperty(nameof(SugarColumn.UpdateServerTime)),
|
||||
attributeType.GetProperty(nameof(SugarColumn.QuerySql))
|
||||
attributeType.GetProperty(nameof(SugarColumn.QuerySql)),
|
||||
attributeType.GetProperty(nameof(SugarColumn.CreateTableFieldSort))
|
||||
}
|
||||
, new object[] {
|
||||
sugarTable.IsPrimaryKey,
|
||||
@@ -112,7 +113,8 @@ namespace SqlSugar
|
||||
sugarTable.IsOwnsOne,
|
||||
sugarTable.InsertServerTime,
|
||||
sugarTable.UpdateServerTime,
|
||||
sugarTable.QuerySql
|
||||
sugarTable.QuerySql,
|
||||
sugarTable.CreateTableFieldSort
|
||||
});
|
||||
return attributeBuilder;
|
||||
}
|
||||
|
||||
@@ -799,6 +799,10 @@ namespace SqlSugar
|
||||
foreach (var paramter in this.SubToListParameters)
|
||||
{
|
||||
var regex = $@"\{Builder.SqlTranslationLeft}[\w]{{1,20}}?\{Builder.SqlTranslationRight}\.\{Builder.SqlTranslationLeft}.{{1,50}}?\{Builder.SqlTranslationRight}";
|
||||
if (Builder.SqlTranslationLeft == string.Empty)
|
||||
{
|
||||
regex = $@"[\w]{{1,20}}?\..{{1,50}}? ";
|
||||
}
|
||||
var matches = Regex
|
||||
.Matches(paramter.Value.ObjToString(), regex, RegexOptions.IgnoreCase).Cast<Match>()
|
||||
.Where(it => allShortName.Any(z => it.Value.ObjToString().ToLower().Contains(z)))
|
||||
|
||||
@@ -641,6 +641,10 @@ namespace SqlSugar
|
||||
{
|
||||
ThrowUpdateByExpression();
|
||||
var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
|
||||
if (this.SqlBuilder?.SqlTranslationLeft==string.Empty&&columns is LambdaExpression l && l.Body is UnaryExpression u&&u.Operand is MemberExpression m && m.Type == UtilConstants.BoolType)
|
||||
{
|
||||
updateColumns = new List<string> { UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.FieldSingle)?.GetResultString() };
|
||||
}
|
||||
if (this.UpdateBuilder.UpdateColumns == null)
|
||||
{
|
||||
this.UpdateBuilder.UpdateColumns = new List<string>();
|
||||
|
||||
@@ -607,6 +607,31 @@ namespace SqlSugar
|
||||
exp = (exp as UnaryExpression).Operand;
|
||||
}
|
||||
var member = exp as MemberExpression;
|
||||
|
||||
// TODO: 我这里只是简单判断 exp1 是否是表达式
|
||||
object sqlCondition = null;
|
||||
|
||||
// 如果是表达式,按表达条件走
|
||||
if (exp is ConditionalExpression exp1)
|
||||
{
|
||||
|
||||
// TODO: 这里需要处理从表达转换为 SQL,这里只是简单处理了
|
||||
var model = new MethodCallExpressionModel() { Args = new List<MethodCallExpressionArgs>() };
|
||||
member = exp1.Test as MemberExpression;
|
||||
// 获取变量对应的 数据库列名
|
||||
var it1 = member.Expression;
|
||||
var type1 = it1.Type;
|
||||
var properyName1 = member.Member.Name;
|
||||
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = exp1.Test, MemberName = this.Context.GetDbColumnName(type1.Name, properyName1) });
|
||||
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = exp1.IfTrue, MemberName = exp1.IfTrue });
|
||||
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = exp1.IfFalse, MemberName = exp1.IfFalse });
|
||||
model.Expression = exp;
|
||||
|
||||
// 一个简单的,只处理 PgSql 返回类型的方式
|
||||
sqlCondition = IIF_Ex(model);
|
||||
}
|
||||
|
||||
|
||||
var it = member.Expression;
|
||||
var type = it.Type;
|
||||
var properyName = member.Member.Name;
|
||||
@@ -615,7 +640,17 @@ namespace SqlSugar
|
||||
{
|
||||
this.Context.SingleTableNameSubqueryShortName = it.ToString();
|
||||
}
|
||||
sql = string.Format(sql, entity.Value, this.Context.GetTranslationColumnName(entity.TableName), entity.Key, eqName);
|
||||
|
||||
// TODO: 根据变化重新拼接
|
||||
if (sqlCondition == null)
|
||||
{
|
||||
sql = string.Format(sql, entity.Value, this.Context.GetTranslationColumnName(entity.TableName), entity.Key, eqName);
|
||||
}
|
||||
else
|
||||
{
|
||||
sql = string.Format(sql, entity.Value, this.Context.GetTranslationColumnName(entity.TableName), entity.Key, sqlCondition);
|
||||
}
|
||||
|
||||
if (entity.Parameter != null)
|
||||
{
|
||||
foreach (var item in entity.Parameter)
|
||||
@@ -641,6 +676,36 @@ namespace SqlSugar
|
||||
AppendMember(parameter, parameter.IsLeft, sql);
|
||||
}
|
||||
}
|
||||
|
||||
string IIF_Ex(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
var parameter3 = model.Args[2];
|
||||
var ifTrue = parameter2.MemberName.ObjToString();
|
||||
var ifFalse = parameter3.MemberName.ObjToString();
|
||||
if (ifTrue == ifFalse)
|
||||
{
|
||||
return $" {parameter2.MemberName} ";
|
||||
}
|
||||
if (model.Parameters != null
|
||||
&& model.Conext != null
|
||||
&& ifTrue.StartsWith(model.Conext?.SqlParameterKeyWord)
|
||||
&& ifFalse.StartsWith(model.Conext?.SqlParameterKeyWord))
|
||||
{
|
||||
var p2 = model.Parameters.Where(it => it.ParameterName != null).FirstOrDefault(it => it.ParameterName.Equals(ifTrue));
|
||||
var p3 = model.Parameters.Where(it => it.ParameterName != null).FirstOrDefault(it => it.ParameterName.Equals(ifFalse));
|
||||
if (p2 != null && p3 != null)
|
||||
{
|
||||
if (p2.Value?.Equals(p3.Value) == true)
|
||||
{
|
||||
model.Parameters.Remove(p3);
|
||||
return $" {parameter2.MemberName} ";
|
||||
}
|
||||
}
|
||||
}
|
||||
return string.Format("( CASE WHEN {0} THEN N'{1}' ELSE N'{2}' END )", parameter.MemberName.ToString().ToLower(), parameter2.MemberName.ToString().Trim('\"'), parameter3.MemberName.ToString().Trim('\"'));
|
||||
}
|
||||
private object GetMethodValue(string name, MethodCallExpressionModel model)
|
||||
{
|
||||
model.Parameters = this.Context.Parameters;
|
||||
|
||||
@@ -206,23 +206,26 @@ namespace SqlSugar
|
||||
}
|
||||
|
||||
private static string[] KeyWord =new string []{ ":asc", "@asc", ":desc", "@desc","@month", ":month", ":day","@day","@group", ":group",":index", "@index", "@order", ":order", "@user", "@level", ":user", ":level",":type","@type", ":year", "@year" };
|
||||
private static string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters)
|
||||
private string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters)
|
||||
{
|
||||
sql = ReplaceKeyWordWithAd(sql, parameters);
|
||||
if (parameters.HasValue() && parameters.Count(it => it.ParameterName.ToLower().IsIn(KeyWord))>0)
|
||||
if (parameters.HasValue() && this.CommandType != CommandType.StoredProcedure)
|
||||
{
|
||||
int i = 0;
|
||||
foreach (var Parameter in parameters.OrderByDescending(it=>it.ParameterName.Length))
|
||||
if (parameters.HasValue() && parameters.Count(it => it.ParameterName.ToLower().IsIn(KeyWord)) > 0)
|
||||
{
|
||||
if (Parameter.ParameterName != null && Parameter.ParameterName.ToLower().IsContainsIn(KeyWord))
|
||||
int i = 0;
|
||||
foreach (var Parameter in parameters.OrderByDescending(it => it.ParameterName.Length))
|
||||
{
|
||||
var newName = ":p" + i + 100;
|
||||
sql = Regex.Replace(sql, Parameter.ParameterName, newName, RegexOptions.IgnoreCase);
|
||||
Parameter.ParameterName = newName;
|
||||
i++;
|
||||
if (Parameter.ParameterName != null && Parameter.ParameterName.ToLower().IsContainsIn(KeyWord))
|
||||
{
|
||||
var newName = ":p" + i + 100;
|
||||
sql = Regex.Replace(sql, Parameter.ParameterName, newName, RegexOptions.IgnoreCase);
|
||||
Parameter.ParameterName = newName;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
||||
@@ -106,6 +106,11 @@ namespace SqlSugar
|
||||
result = $" {sql.ToString()} {(this.WhereInfos.Any()?"AND":"WHERE")} ROWNUM = 1 ";
|
||||
result = result.Replace(rowNumberString, " ");
|
||||
}
|
||||
if (!string.IsNullOrEmpty(this.TranLock)&&this.GetGroupByString == null && this.Take >1 && this.Skip == null && oldOrderBy == null)
|
||||
{
|
||||
result = $" {sql.ToString()} {(this.WhereInfos.Any() ? "AND" : "WHERE")} ROWNUM <= {this.Take} ";
|
||||
result = result.Replace(rowNumberString, " ");
|
||||
}
|
||||
if (ExternalPageIndex > 0)
|
||||
{
|
||||
if (externalOrderBy.IsNullOrEmpty())
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace SqlSugar
|
||||
string copyString = $"COPY {dt.TableName} ( {string.Join(",", lsColNames)} ) FROM STDIN (FORMAT BINARY)";
|
||||
var innertemp = this.Context.CurrentConnectionConfig?.MoreSettings?.InnerTemp as DbType?;
|
||||
if (this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.OpenGauss ||
|
||||
(this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase && innertemp == DbType.MySql))
|
||||
this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase)
|
||||
{
|
||||
copyString = copyString.Replace("(FORMAT BINARY)", "(FORMAT 'BINARY')");
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<package >
|
||||
<metadata>
|
||||
<id>SqlSugarCore</id>
|
||||
<version>5.1.4.207</version>
|
||||
<version>5.1.4.208-preview10</version>
|
||||
<authors>sunkaixuan</authors>
|
||||
<owners>果糖大数据科技</owners>
|
||||
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
|
||||
|
||||
Reference in New Issue
Block a user