Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
NewLife.XCode
提交
977e16db
N
NewLife.XCode
项目概览
jobily
/
NewLife.XCode
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NewLife.XCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
977e16db
编写于
8月 07, 2023
作者:
D
daijianping
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
http://git.newlifex.com/NewLife/NewLife.XCode
上级
d00c5ac6
e267c132
变更
13
展开全部
隐藏空白更改
内联
并排
Showing
13 changed file
with
1844 addition
and
1752 deletion
+1844
-1752
XCode/Code/EntityBuilder.cs
XCode/Code/EntityBuilder.cs
+8
-1
XCode/DataAccessLayer/Common/DbSession.cs
XCode/DataAccessLayer/Common/DbSession.cs
+5
-0
XCode/DataAccessLayer/Common/IDbSession.cs
XCode/DataAccessLayer/Common/IDbSession.cs
+5
-0
XCode/DataAccessLayer/Common/RemoteDb.cs
XCode/DataAccessLayer/Common/RemoteDb.cs
+1
-2
XCode/DataAccessLayer/DAL_DbOperate.cs
XCode/DataAccessLayer/DAL_DbOperate.cs
+1
-1
XCode/DataAccessLayer/Database/MySql.cs
XCode/DataAccessLayer/Database/MySql.cs
+476
-462
XCode/DataAccessLayer/Database/Oracle.cs
XCode/DataAccessLayer/Database/Oracle.cs
+941
-931
XCode/DataAccessLayer/Database/PostgreSQL.cs
XCode/DataAccessLayer/Database/PostgreSQL.cs
+350
-340
XCode/DataAccessLayer/Database/SqlServer.cs
XCode/DataAccessLayer/Database/SqlServer.cs
+17
-2
XCode/DataAccessLayer/SelectBuilder.cs
XCode/DataAccessLayer/SelectBuilder.cs
+1
-3
XCode/Entity/Entity.cs
XCode/Entity/Entity.cs
+23
-10
XCode/Membership/日志.Biz.cs
XCode/Membership/日志.Biz.cs
+5
-0
XUnitTest.XCode/DataAccessLayer/MySqlTests.cs
XUnitTest.XCode/DataAccessLayer/MySqlTests.cs
+11
-0
未找到文件。
XCode/Code/EntityBuilder.cs
浏览文件 @
977e16db
...
...
@@ -557,7 +557,14 @@ public class EntityBuilder : ClassBuilder
// 附加特性
if
(
dc
.
Properties
.
TryGetValue
(
"Attribute"
,
out
var
att
))
WriteLine
(
"[{0}]"
,
att
.
Replace
(
"{name}"
,
dc
.
Name
));
{
// 兼容支持新旧两种格式
var
str
=
att
.
Replace
(
"{name}"
,
dc
.
Name
);
if
(
str
[
0
]
!=
'['
)
WriteLine
(
"[{0}]"
,
str
);
else
WriteLine
(
"{0}"
,
str
);
//lps 2023-07-22 去掉两边的方括号,以便支持多个验证。例如:<Column Name="TestQuantity" DataType="Int32" Description="测试数量" Attribute="[Required(ErrorMessage = "{0}必须填写")][Range(1, 100,ErrorMessage ="超出范围")]" />
}
// 分类特性
if
(
dc
.
Properties
.
TryGetValue
(
"Category"
,
out
att
)
&&
!
att
.
IsNullOrEmpty
())
...
...
XCode/DataAccessLayer/Common/DbSession.cs
浏览文件 @
977e16db
...
...
@@ -354,6 +354,11 @@ internal abstract partial class DbSession : DisposeBase, IDbSession, IAsyncDbSes
});
}
/// <summary>执行SQL查询,返回记录集</summary>
/// <param name="builder">查询生成器</param>
/// <returns>总记录数</returns>
public
virtual
DbTable
Query
(
SelectBuilder
builder
)
=>
Query
(
builder
.
ToString
(),
builder
.
Parameters
.
ToArray
());
/// <summary>执行SQL查询,返回记录集</summary>
/// <param name="sql">SQL语句</param>
/// <param name="ps">命令参数</param>
...
...
XCode/DataAccessLayer/Common/IDbSession.cs
浏览文件 @
977e16db
...
...
@@ -78,6 +78,11 @@ public interface IDbSession : IDisposable2
/// <returns>记录集</returns>
DataSet
Query
(
DbCommand
cmd
);
/// <summary>执行SQL查询,返回记录集</summary>
/// <param name="builder">查询生成器</param>
/// <returns>总记录数</returns>
DbTable
Query
(
SelectBuilder
builder
);
/// <summary>执行SQL查询,返回记录集</summary>
/// <param name="sql">SQL语句</param>
/// <param name="ps">命令参数</param>
...
...
XCode/DataAccessLayer/Common/RemoteDb.cs
浏览文件 @
977e16db
using
System
;
using
System.Data
;
using
System.Data
;
using
System.Data.Common
;
using
NewLife
;
using
NewLife.Log
;
...
...
XCode/DataAccessLayer/DAL_DbOperate.cs
浏览文件 @
977e16db
...
...
@@ -78,7 +78,7 @@ partial class DAL
return
QueryByCache
(
builder
,
startRowIndex
,
maximumRows
,
(
sb
,
start
,
max
)
=>
{
sb
=
PageSplit
(
sb
,
start
,
max
);
return
Session
.
Query
(
sb
.
ToString
(),
sb
.
Parameters
.
ToArray
()
);
return
Session
.
Query
(
sb
);
},
nameof
(
Query
));
}
...
...
XCode/DataAccessLayer/Database/MySql.cs
浏览文件 @
977e16db
此差异已折叠。
点击以展开。
XCode/DataAccessLayer/Database/Oracle.cs
浏览文件 @
977e16db
此差异已折叠。
点击以展开。
XCode/DataAccessLayer/Database/PostgreSQL.cs
浏览文件 @
977e16db
此差异已折叠。
点击以展开。
XCode/DataAccessLayer/Database/SqlServer.cs
浏览文件 @
977e16db
...
...
@@ -489,8 +489,8 @@ internal class SqlServer : RemoteDb
// fix 2023.03.22
// LIKE 构建SQL语句 中 [ ] % 会循环转义 ,只转_比较合适
if
(
value
.
IndexOfAny
(
_likeKeys
)
>=
0
)
value
=
value
.
Replace
(
"_"
,
"[_]"
);
value
=
value
.
Replace
(
"_"
,
"[_]"
);
return
base
.
FormatLike
(
column
,
format
,
value
);
}
#
endregion
...
...
@@ -504,6 +504,21 @@ internal class SqlServerSession : RemoteDbSession
#
endregion
#
region
查询
/// <summary>执行SQL查询,返回记录集</summary>
/// <param name="builder">查询生成器</param>
/// <returns>总记录数</returns>
public
override
DbTable
Query
(
SelectBuilder
builder
)
{
if
(
Transaction
!=
null
)
{
builder
=
builder
.
Clone
();
builder
.
Table
+=
" WITH (UPDLOCK, HOLDLOCK)"
;
}
var
sql
=
builder
.
ToString
();
return
Query
(
sql
,
builder
.
Parameters
.
ToArray
());
}
protected
override
DbTable
OnFill
(
DbDataReader
dr
)
{
var
dt
=
new
DbTable
();
...
...
XCode/DataAccessLayer/SelectBuilder.cs
浏览文件 @
977e16db
using
System
;
using
System.Collections.Generic
;
using
System.Data
;
using
System.Data
;
using
System.Text.RegularExpressions
;
using
NewLife
;
using
NewLife.Collections
;
...
...
XCode/Entity/Entity.cs
浏览文件 @
977e16db
...
...
@@ -210,6 +210,8 @@ public partial class Entity<TEntity> : EntityBase, IAccessor where TEntity : Ent
if
(!
rt
)
return
0
;
}
AutoFillSnowIDPrimaryKey
();
// 自动分库分表
using
var
split
=
Meta
.
CreateShard
(
this
as
TEntity
);
...
...
@@ -371,6 +373,8 @@ public partial class Entity<TEntity> : EntityBase, IAccessor where TEntity : Ent
if
(!
rt
)
return
Task
.
FromResult
(
0
);
}
AutoFillSnowIDPrimaryKey
();
return
func
();
}
...
...
@@ -381,6 +385,25 @@ public partial class Entity<TEntity> : EntityBase, IAccessor where TEntity : Ent
/// <remarks>建议重写者调用基类的实现,因为基类根据数据字段的唯一索引进行数据验证。</remarks>
/// <param name="isNew">是否新数据</param>
public
override
void
Valid
(
Boolean
isNew
)
{
var
factory
=
Meta
.
Factory
;
// 校验字符串长度,超长时抛出参数异常
foreach
(
var
fi
in
factory
.
Fields
)
{
if
(
fi
.
Type
==
typeof
(
String
)
&&
fi
.
Length
>
0
)
{
if
(
this
[
fi
.
Name
]
is
String
str
&&
str
.
Length
>
fi
.
Length
)
throw
new
ArgumentOutOfRangeException
(
fi
.
Name
,
$"
{
fi
.
DisplayName
}
长度限制
{
fi
.
Length
}
字符"
);
}
}
AutoFillSnowIDPrimaryKey
();
}
/// <summary>
/// 雪花Id生成器。Int64主键非自增时,自动填充
/// </summary>
private
void
AutoFillSnowIDPrimaryKey
()
{
var
factory
=
Meta
.
Factory
;
...
...
@@ -394,16 +417,6 @@ public partial class Entity<TEntity> : EntityBase, IAccessor where TEntity : Ent
SetItem
(
pk
.
Name
,
factory
.
Snow
.
NewId
());
}
}
// 校验字符串长度,超长时抛出参数异常
foreach
(
var
fi
in
factory
.
Fields
)
{
if
(
fi
.
Type
==
typeof
(
String
)
&&
fi
.
Length
>
0
)
{
if
(
this
[
fi
.
Name
]
is
String
str
&&
str
.
Length
>
fi
.
Length
)
throw
new
ArgumentOutOfRangeException
(
fi
.
Name
,
$"
{
fi
.
DisplayName
}
长度限制
{
fi
.
Length
}
字符"
);
}
}
}
/// <summary>根据指定键检查数据,返回数据是否已存在</summary>
...
...
XCode/Membership/日志.Biz.cs
浏览文件 @
977e16db
...
...
@@ -22,6 +22,11 @@ public partial class Log : Entity<Log>
// 关闭SQL日志
ThreadPool
.
UnsafeQueueUserWorkItem
(
s
=>
{
Meta
.
Session
.
Dal
.
Db
.
ShowSQL
=
false
;
},
null
);
#endif
// 针对Mysql启用压缩表
var
table
=
Meta
.
Table
.
DataTable
;
table
.
Properties
[
"ROW_FORMAT"
]
=
"COMPRESSED"
;
table
.
Properties
[
"KEY_BLOCK_SIZE"
]
=
"4"
;
}
/// <summary>已重载。记录当前管理员</summary>
...
...
XUnitTest.XCode/DataAccessLayer/MySqlTests.cs
浏览文件 @
977e16db
...
...
@@ -434,6 +434,17 @@ public class MySqlTests
dal
.
SetTables
(
table
);
Assert
.
Contains
(
dal
.
Tables
,
t
=>
t
.
TableName
==
table
.
TableName
);
// Log表自带压缩表能力
table
=
Log
.
Meta
.
Table
.
DataTable
.
Clone
()
as
IDataTable
;
table
.
DbType
=
DatabaseType
.
MySql
;
Assert
.
Equal
(
"COMPRESSED"
,
table
.
Properties
[
"ROW_FORMAT"
]);
Assert
.
Equal
(
"4"
,
table
.
Properties
[
"KEY_BLOCK_SIZE"
]);
sql
=
meta
.
GetSchemaSQL
(
DDLSchema
.
CreateTable
,
table
);
Assert
.
Contains
(
" ROW_FORMAT=COMPRESSED"
,
sql
);
Assert
.
Contains
(
" KEY_BLOCK_SIZE=4"
,
sql
);
}
[
Fact
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录