fix issue #I42IFB 获取Oracle结构异常

fix issue #I462OD JSON解析异常
增加主表ParentId,可以同时添加主、从表结构
可以动态控制复杂界面显示编辑权限,采用代码生成的表定义来控制
This commit is contained in:
yubaolee
2021-08-25 01:42:37 +08:00
parent 8397786566
commit 4d7af5bedf
12 changed files with 217 additions and 27 deletions

View File

@@ -114,17 +114,79 @@ namespace OpenAuth.App
{
return GetMySqlStructure(tableName);
}
else
else if (dbtype == Define.DBTYPE_SQLSERVER)
{
return GetSqlServerStructure(tableName);
}
else
{
return GetOracleStructure(tableName);
}
}
/// <summary>
/// 获取Oracle表结构
/// </summary>
private IList<SysTableColumn> GetOracleStructure(string tableName)
{
var sql = $@"
select utc.column_name as COLUMNNAME,
utc.data_type COLUMNTYPE,
utc.data_length MaxLength,
CASE utc.nullable WHEN 'N' THEN 0 ELSE 1 END IsNull,
utc.data_default DEFAULTVAL,
ucc.comments ""COMMENT"",
UTC.table_name TABLENAME,
CASE UTC.COLUMN_NAME
WHEN (select col.column_name
from user_constraints con,
user_cons_columns col
where con.constraint_name = col.constraint_name
and con.constraint_type = 'P'
and col.table_name = '{ tableName}') THEN 1
ELSE 0 END AS IsKey,
CASE
WHEN data_type IN ('BIT', 'BOOL') THEN
'bool'
WHEN data_type in ('SMALLINT') THEN 'short'
WHEN data_type in ('TINYINT') THEN 'bool'
WHEN data_type IN ('NUMBER', 'CHAR', 'INT', 'Year') THEN
'int'
WHEN data_type in ('BIGINT') THEN
'bigint'
WHEN data_type IN ('FLOAT', 'DOUBLE', 'DECIMAL') THEN
'decimal'
WHEN data_type IN
('CHAR', 'VARCHAR', 'TINY TEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'TINYBLOB', 'BLOB',
'MEDIUMBLOB', 'LONGBLOB', 'Time') THEN
'string'
WHEN data_type IN ('Date', 'DateTime', 'TIMESTAMP(6)') THEN
'DateTime'
ELSE 'string'
END AS EntityType
from user_tab_columns utc,
user_col_comments ucc
where utc.table_name = ucc.table_name
and utc.column_name = ucc.column_name
and utc.table_name = '{ tableName}'
order by column_id; ";
foreach (var context in _contexts)
{
var columns = context.Query<SysTableColumn>().FromSqlRaw(sql);
var columnList = columns?.ToList();
if (columnList != null && columnList.Any())
{
return columnList;
}
}
return new List<SysTableColumn>();
}
/// <summary>
/// 获取Mysql表结构信息
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
private IList<SysTableColumn> GetMySqlStructure(string tableName)
{
var sql = $@"SELECT DISTINCT