|
|
|
@ -19,6 +19,17 @@ namespace ZKLT.Hadoop
|
|
|
|
|
{
|
|
|
|
|
public class TableService : ITableService
|
|
|
|
|
{
|
|
|
|
|
public TableService()
|
|
|
|
|
{
|
|
|
|
|
_Source = new HDP_Source();
|
|
|
|
|
|
|
|
|
|
_Tables = new List<HDP_Table>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private HDP_Source _Source;
|
|
|
|
|
|
|
|
|
|
private List<HDP_Table> _Tables;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 合并条件
|
|
|
|
|
/// </summary>
|
|
|
|
@ -26,7 +37,7 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <param name="where">条件</param>
|
|
|
|
|
/// <param name="data">数据</param>
|
|
|
|
|
/// <param name="param">参数</param>
|
|
|
|
|
private string MergeWhere(HDP_Table table, JContainer? where, JContainer? data, Dictionary<string, object> param)
|
|
|
|
|
private string MergeWhere(HDP_Table table, JToken? where, JToken? data, Dictionary<string, object> param)
|
|
|
|
|
{
|
|
|
|
|
StringBuilder _wherestr = new StringBuilder();
|
|
|
|
|
string _guid = "";
|
|
|
|
@ -42,14 +53,16 @@ namespace ZKLT.Hadoop
|
|
|
|
|
}
|
|
|
|
|
else if (where.Type == JTokenType.Array)
|
|
|
|
|
{
|
|
|
|
|
for(var i = 0;i < where.Count;i++)
|
|
|
|
|
for (var i = 0; i < where.Count(); i++)
|
|
|
|
|
{
|
|
|
|
|
_wheres.Add((JObject)where.Children().ToArray()[i]);
|
|
|
|
|
_datas.Add((JObject)data.Children().ToArray()[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (var j = 0; j < _wheres.Count; j++) {
|
|
|
|
|
if (j > 0) {
|
|
|
|
|
for (var j = 0; j < _wheres.Count; j++)
|
|
|
|
|
{
|
|
|
|
|
if (j > 0)
|
|
|
|
|
{
|
|
|
|
|
_wherestr.AppendLine("OR");
|
|
|
|
|
}
|
|
|
|
|
_wherestr.AppendLine("(");
|
|
|
|
@ -64,31 +77,52 @@ namespace ZKLT.Hadoop
|
|
|
|
|
var _item = (JProperty)_fileds[i];
|
|
|
|
|
if (table.Columns!.Any(x => x.Key == _item.Name) && _data.ContainsKey(_item.Name))
|
|
|
|
|
{
|
|
|
|
|
List<string> _Itemv = new List<string>();
|
|
|
|
|
List<JToken> _Colv = new List<JToken>();
|
|
|
|
|
if (_item.Value.Type == JTokenType.String)
|
|
|
|
|
{
|
|
|
|
|
_guid = Guid.NewGuid().ToString("N");
|
|
|
|
|
_wherestr.AppendLine(@$"AND `{_item.Name}` {_item.Value.ToString()} @{_guid}");
|
|
|
|
|
if (_data[_item.Name]!.Type == JTokenType.Object || _data[_item.Name]!.Type == JTokenType.Array)
|
|
|
|
|
{
|
|
|
|
|
param.Add(_guid, _data[_item.Name]!);
|
|
|
|
|
}
|
|
|
|
|
else if (_item.Value.ToString() == HDP_WhereType.LIKE)
|
|
|
|
|
{
|
|
|
|
|
param.Add(_guid,$@"%{((JValue)_data[_item.Name]!).Value!}%" );
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
param.Add(_guid, ((JValue)_data[_item.Name]!).Value!);
|
|
|
|
|
}
|
|
|
|
|
_Itemv.Add(_item.Value.ToString());
|
|
|
|
|
_Colv.Add(_data[_item.Name]!);
|
|
|
|
|
}
|
|
|
|
|
else if (_item.Value.Type == JTokenType.Array)
|
|
|
|
|
{
|
|
|
|
|
string[] _itemv = _item.Value.ToObject<string[]>()!;
|
|
|
|
|
object[] _colv = _data[_item.Name]!.ToObject<object[]>()!;
|
|
|
|
|
for (var k = 0; k < _itemv.Length; k++)
|
|
|
|
|
_Itemv.AddRange(_item.Value.ToObject<string[]>()!);
|
|
|
|
|
_Colv.AddRange(_data[_item.Name]!);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (var k = 0; k < _Itemv.Count; k++)
|
|
|
|
|
{
|
|
|
|
|
_guid = Guid.NewGuid().ToString("N");
|
|
|
|
|
_wherestr.AppendLine(@$"AND `{_item.Name}` {_itemv[k]} @{_guid}");
|
|
|
|
|
param.Add(_guid, _colv.Length > k ? _colv[k] : _colv[_colv.Length - 1]);
|
|
|
|
|
switch (_Itemv[k])
|
|
|
|
|
{
|
|
|
|
|
case HDP_WhereType.LIKE:
|
|
|
|
|
_wherestr.AppendLine(@$"AND `{_item.Name}` {_Itemv[k]} @{_guid}");
|
|
|
|
|
param.Add(_guid, $@"%{((JValue)_Colv[k]!).Value!}%");
|
|
|
|
|
break;
|
|
|
|
|
case HDP_WhereType.QUERYIN:
|
|
|
|
|
var _Command = JsonConvert.DeserializeObject<HDP_Command>(_Colv[k].ToString())!;
|
|
|
|
|
var _Query = QueryString(_Command.SourceId!, _Command.TableId!, _Command.Where, _Command.Data, _Command.Order, _Command.Col, param);
|
|
|
|
|
_wherestr.AppendLine(@$"AND `{_item.Name}` IN ({_Query})");
|
|
|
|
|
break;
|
|
|
|
|
case HDP_WhereType.EQUAL:
|
|
|
|
|
case HDP_WhereType.NOTEQUAL:
|
|
|
|
|
case HDP_WhereType.MORE:
|
|
|
|
|
case HDP_WhereType.LESS:
|
|
|
|
|
case HDP_WhereType.MORETHEN:
|
|
|
|
|
case HDP_WhereType.LESSTHEN:
|
|
|
|
|
case HDP_WhereType.IN:
|
|
|
|
|
case HDP_WhereType.BETWEEN:
|
|
|
|
|
default:
|
|
|
|
|
_wherestr.AppendLine(@$"AND `{_item.Name}` {_Itemv[k]} @{_guid}");
|
|
|
|
|
if (_Colv[k]!.Type == JTokenType.Object || _data[_item.Name]!.Type == JTokenType.Array)
|
|
|
|
|
{
|
|
|
|
|
param.Add(_guid, _Colv[k]!);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
param.Add(_guid, ((JValue)_Colv[k]!).Value!);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -133,11 +167,11 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <param name="table">表</param>
|
|
|
|
|
/// <param name="order">排序</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private string MergeOrder(HDP_Table table, JContainer? order, Dictionary<string, object> param)
|
|
|
|
|
private string MergeOrder(HDP_Table table, JToken? order, Dictionary<string, object> param)
|
|
|
|
|
{
|
|
|
|
|
string _guid = "";
|
|
|
|
|
StringBuilder _orderstr = new StringBuilder();
|
|
|
|
|
if (order != null && order.Count > 0)
|
|
|
|
|
if (order != null && order.Count() > 0)
|
|
|
|
|
{
|
|
|
|
|
_orderstr.Append("ORDER BY ");
|
|
|
|
|
var _fields = order.Children().ToArray();
|
|
|
|
@ -181,14 +215,147 @@ namespace ZKLT.Hadoop
|
|
|
|
|
return _orderstr.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 初始化云计算
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="config">配置</param>
|
|
|
|
|
public void Init(Action<HDP_Source> config)
|
|
|
|
|
{
|
|
|
|
|
if (config == null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("配置无效");
|
|
|
|
|
}
|
|
|
|
|
config(_Source);
|
|
|
|
|
|
|
|
|
|
//参数校验
|
|
|
|
|
if (string.IsNullOrEmpty(_Source.Host))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException("主机无效");
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(_Source.Key))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException("源无效");
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(_Source.Account))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException("用户名无效");
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(_Source.PassWord))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException("密码无效");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//初始化
|
|
|
|
|
if (_Source.Port == null)
|
|
|
|
|
{
|
|
|
|
|
_Source.Port = 3306;
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(_Source.Id))
|
|
|
|
|
{
|
|
|
|
|
_Source.Id = "";
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(_Source.Description))
|
|
|
|
|
{
|
|
|
|
|
_Source.Description = "云计算系统";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _source = HDP_Table.Class2Table<HDP_Source>();
|
|
|
|
|
_Tables.Add(_source);
|
|
|
|
|
if (!InitStruct(_Source.Id, _source))
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("初始化数据源失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _table = HDP_Table.Class2Table<HDP_Table>();
|
|
|
|
|
_Tables.Add(_table);
|
|
|
|
|
if (!InitStruct(_Source.Id, _table))
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("初始化数据表失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _column = HDP_Table.Class2Table<HDP_Column>();
|
|
|
|
|
_Tables.Add(_column);
|
|
|
|
|
if (!InitStruct(_Source.Id, _column))
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("初始化数据列失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取源
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sourceid">数据源编号</param>
|
|
|
|
|
/// <returns>结果</returns>
|
|
|
|
|
public HDP_Source GetSource(string sourceid)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(sourceid) || _Source.Id == sourceid)
|
|
|
|
|
{
|
|
|
|
|
return _Source;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _result = QuerySingle<HDP_Source>("", "HDP_Source", new JObject
|
|
|
|
|
{
|
|
|
|
|
{ "Id","=" }
|
|
|
|
|
}, new JObject {
|
|
|
|
|
{ "Id",sourceid}
|
|
|
|
|
}, null);
|
|
|
|
|
|
|
|
|
|
if (_result == null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("数据源不存在");
|
|
|
|
|
}
|
|
|
|
|
return _result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="tableid">表编号</param>
|
|
|
|
|
/// <returns>结果</returns>
|
|
|
|
|
public HDP_Table GetTable(string tableid)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(tableid))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("数据表编号无效");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_Tables.Any(x => x.Id == tableid))
|
|
|
|
|
{
|
|
|
|
|
return _Tables.First(x => x.Id == tableid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _result = QuerySingle<HDP_Table>("", "HDP_Table", new JObject
|
|
|
|
|
{
|
|
|
|
|
{ "Id","=" }
|
|
|
|
|
}, new JObject{
|
|
|
|
|
{ "Id",tableid}
|
|
|
|
|
}, null);
|
|
|
|
|
|
|
|
|
|
if (_result != null)
|
|
|
|
|
{
|
|
|
|
|
_result.Columns = Query<HDP_Column>("", "HDP_Column", new JObject {
|
|
|
|
|
{ "TableId","="}
|
|
|
|
|
}, new JObject{
|
|
|
|
|
{"TableId",_result.Id! }
|
|
|
|
|
}, null, null);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("数据表不存在");
|
|
|
|
|
}
|
|
|
|
|
return _result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 同步结构
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="sourceId">数据源</param>
|
|
|
|
|
/// <param name="table">数据表</param>
|
|
|
|
|
/// <returns>是否成功</returns>
|
|
|
|
|
public bool InitStruct(HDP_Source source, HDP_Table table)
|
|
|
|
|
public bool InitStruct(string sourceId, HDP_Table table)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
@ -210,9 +377,9 @@ namespace ZKLT.Hadoop
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StringBuilder _command = new StringBuilder();
|
|
|
|
|
if (DbExistTable(source, table.Key))
|
|
|
|
|
if (DbExistTable(sourceId, table.Key))
|
|
|
|
|
{
|
|
|
|
|
var _dbColumns = DbGetColumns(source, table.Key);
|
|
|
|
|
var _dbColumns = DbGetColumns(sourceId, table.Key);
|
|
|
|
|
_command.AppendLine($@"ALTER TABLE `{table.Key}`");
|
|
|
|
|
_command.AppendLine("DROP PRIMARY KEY,");
|
|
|
|
|
|
|
|
|
@ -358,20 +525,13 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 删除结构
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="source">源</param>
|
|
|
|
|
/// <param name="tableKey">表</param>
|
|
|
|
|
/// <param name="sourceId">源</param>
|
|
|
|
|
/// <param name="tableId">表</param>
|
|
|
|
|
/// <returns>是否成功</returns>
|
|
|
|
|
public bool RemoveStruct(HDP_Source source, string tableKey)
|
|
|
|
|
public bool RemoveStruct(string sourceId, string tableId)
|
|
|
|
|
{
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(tableKey))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("表键无效");
|
|
|
|
|
}
|
|
|
|
|
if (!DbExistTable(source, tableKey))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("表不存在");
|
|
|
|
|
}
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
|
|
|
|
|
using (MySqlConnection _connection = new MySqlConnection(source.GetConnectString()))
|
|
|
|
|
{
|
|
|
|
@ -385,22 +545,24 @@ namespace ZKLT.Hadoop
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StringBuilder _command = new StringBuilder();
|
|
|
|
|
_command.AppendLine(@$"DROP TABLE {tableKey}");
|
|
|
|
|
_command.AppendLine(@$"DROP TABLE {table.Key}");
|
|
|
|
|
_connection.Execute(_command.ToString());
|
|
|
|
|
_connection.Close();
|
|
|
|
|
return !DbExistTable(source, tableKey);
|
|
|
|
|
return !DbExistTable(sourceId, table.Key!);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 插入数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="table">数据表</param>
|
|
|
|
|
/// <param name="sourceId">数据源</param>
|
|
|
|
|
/// <param name="tableId">数据表</param>
|
|
|
|
|
/// <param name="data">数据</param>
|
|
|
|
|
/// <returns>是否成功</returns>
|
|
|
|
|
public bool Insert(HDP_Source source, HDP_Table table, JContainer? data)
|
|
|
|
|
public bool Insert(string sourceId, string tableId, JToken? data)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId)!;
|
|
|
|
|
var table = GetTable(tableId)!;
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
@ -410,7 +572,7 @@ namespace ZKLT.Hadoop
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("列无效");
|
|
|
|
|
}
|
|
|
|
|
if (data == null || data.Count == 0)
|
|
|
|
|
if (data == null || data.Count() == 0)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("数据无效");
|
|
|
|
|
}
|
|
|
|
@ -512,10 +674,12 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="table">数据表</param>
|
|
|
|
|
/// <param name="where">条件</param>
|
|
|
|
|
/// <param name="row">数据</param>
|
|
|
|
|
/// <param name="data">数据</param>
|
|
|
|
|
/// <returns>是否成功</returns>
|
|
|
|
|
public bool Update(HDP_Source source, HDP_Table table, JContainer? where, JContainer? data)
|
|
|
|
|
public bool Update(string sourceId, string tableId, JToken? where, JToken? data)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
@ -538,7 +702,7 @@ namespace ZKLT.Hadoop
|
|
|
|
|
{
|
|
|
|
|
_where.AddRange(((JArray)where).ToObject<JObject[]>()!);
|
|
|
|
|
}
|
|
|
|
|
if (data == null || data.Count == 0)
|
|
|
|
|
if (data == null || data.Count() == 0)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("数据无效");
|
|
|
|
|
}
|
|
|
|
@ -615,13 +779,15 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 删除
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="table">数据表</param>
|
|
|
|
|
/// <param name="sourceId">数据源</param>
|
|
|
|
|
/// <param name="tableId">数据表</param>
|
|
|
|
|
/// <param name="where">条件</param>
|
|
|
|
|
/// <param name="row">数据</param>
|
|
|
|
|
/// <returns>是否成功</returns>
|
|
|
|
|
public bool Delete(HDP_Source source, HDP_Table table, JContainer? where, JContainer? data)
|
|
|
|
|
public bool Delete(string sourceId, string tableId, JToken? where, JToken? data)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
@ -635,7 +801,7 @@ namespace ZKLT.Hadoop
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("条件无效");
|
|
|
|
|
}
|
|
|
|
|
if (data == null || data.Count == 0)
|
|
|
|
|
if (data == null || data.Count() == 0)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("数据无效");
|
|
|
|
|
}
|
|
|
|
@ -691,14 +857,17 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 查询单个
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="table">数据表</param>
|
|
|
|
|
/// <param name="sourceId">数据源</param>
|
|
|
|
|
/// <param name="tableId">数据表</param>
|
|
|
|
|
/// <param name="where">条件</param>
|
|
|
|
|
/// <param name="data">数据</param>
|
|
|
|
|
/// <returns>结果</returns>
|
|
|
|
|
public T? QuerySingle<T>(HDP_Source source, HDP_Table table, JContainer? where, JContainer? data,
|
|
|
|
|
public T? QuerySingle<T>(string sourceId, string tableId, JToken? where, JToken? data,
|
|
|
|
|
string[]? col)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
@ -712,7 +881,7 @@ namespace ZKLT.Hadoop
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("条件无效");
|
|
|
|
|
}
|
|
|
|
|
if (data == null || data.Count == 0)
|
|
|
|
|
if (data == null || data.Count() == 0)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("数据无效");
|
|
|
|
|
}
|
|
|
|
@ -765,19 +934,16 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <param name="table">数据表</param>
|
|
|
|
|
/// <param name="where">条件</param>
|
|
|
|
|
/// <param name="data">数据</param>
|
|
|
|
|
/// <param name="order">排序</param>
|
|
|
|
|
/// <param name="col">筛选返回字段</param>
|
|
|
|
|
/// <returns>结果集</returns>
|
|
|
|
|
public T[] Query<T>(HDP_Source source, HDP_Table table, JContainer? where, JContainer? data,
|
|
|
|
|
JContainer? order, string[]? col)
|
|
|
|
|
public T[] Query<T>(string sourceId, string tableId, JToken? where, JToken? data,
|
|
|
|
|
JToken? order, string[]? col)
|
|
|
|
|
{
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("表键无效");
|
|
|
|
|
}
|
|
|
|
|
if (table.Columns == null || table.Columns.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("列无效");
|
|
|
|
|
}
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
|
|
|
|
|
Dictionary<string, object> _params = new Dictionary<string, object>();
|
|
|
|
|
using (MySqlConnection _connection = new MySqlConnection(source.GetConnectString()))
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
@ -789,9 +955,29 @@ namespace ZKLT.Hadoop
|
|
|
|
|
throw new ArgumentException("数据源连接失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _result = _connection.Query<T>(QueryString(sourceId, tableId, where, data, order, col, _params), _params);
|
|
|
|
|
_connection.Close();
|
|
|
|
|
return _result.ToArray();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string QueryString(string sourceId, string tableId, JToken? where, JToken? data,
|
|
|
|
|
JToken? order, string[]? col, Dictionary<string, object> param)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("表键无效");
|
|
|
|
|
}
|
|
|
|
|
if (table.Columns == null || table.Columns.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException("列无效");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查询命令
|
|
|
|
|
StringBuilder _command = new StringBuilder();
|
|
|
|
|
Dictionary<string, object> _params = new Dictionary<string, object>();
|
|
|
|
|
if (col == null || col.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
_command.AppendLine(@$"SELECT * FROM `{table.Key}`");
|
|
|
|
@ -804,29 +990,33 @@ namespace ZKLT.Hadoop
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//执行条件
|
|
|
|
|
_command.AppendLine(MergeWhere(table, where, data, _params));
|
|
|
|
|
_command.AppendLine(MergeWhere(table, where, data, param));
|
|
|
|
|
|
|
|
|
|
//执行排序
|
|
|
|
|
_command.AppendLine(MergeOrder(table, order, _params));
|
|
|
|
|
_command.AppendLine(MergeOrder(table, order, param));
|
|
|
|
|
|
|
|
|
|
var _result = _connection.Query<T>(_command.ToString(), _params);
|
|
|
|
|
_connection.Close();
|
|
|
|
|
return _result.ToArray();
|
|
|
|
|
}
|
|
|
|
|
return _command.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 查询列表
|
|
|
|
|
/// 查询分页列表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <typeparam name="T">返回类型</typeparam>
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="table">数据表</param>
|
|
|
|
|
/// <param name="sourceId">数据源</param>
|
|
|
|
|
/// <param name="tableId">数据表</param>
|
|
|
|
|
/// <param name="pageIndex">分页下标</param>
|
|
|
|
|
/// <param name="pageSize">分页大小</param>
|
|
|
|
|
/// <param name="where">条件</param>
|
|
|
|
|
/// <param name="row">数据</param>
|
|
|
|
|
/// <param name="data">数据</param>
|
|
|
|
|
/// <param name="order">排序</param>
|
|
|
|
|
/// <param name="col">返回咧</param>
|
|
|
|
|
/// <returns>结果集</returns>
|
|
|
|
|
public HDP_Page<T> QueryPage<T>(HDP_Source source, HDP_Table table, int pageIndex, int pageSize, JContainer? where,
|
|
|
|
|
JContainer? data, JContainer? order, string[]? col)
|
|
|
|
|
public HDP_Page<T> QueryPage<T>(string sourceId, string tableId, int pageIndex, int pageSize, JToken? where,
|
|
|
|
|
JToken? data, JToken? order, string[]? col)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
|
|
|
|
|
//数据校验
|
|
|
|
|
if (string.IsNullOrEmpty(table.Key))
|
|
|
|
|
{
|
|
|
|
@ -888,11 +1078,12 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 判断数据源是否存在表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="sourceId">数据源</param>
|
|
|
|
|
/// <param name="tableName">表名</param>
|
|
|
|
|
/// <returns>是否存在</returns>
|
|
|
|
|
public bool DbExistTable(HDP_Source source, string tableName)
|
|
|
|
|
public bool DbExistTable(string sourceId, string tableName)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
using (MySqlConnection _connection = new MySqlConnection(source.GetConnectString()))
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
@ -922,11 +1113,14 @@ namespace ZKLT.Hadoop
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 查询数据列
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="source">数据源</param>
|
|
|
|
|
/// <param name="tableName">表名</param>
|
|
|
|
|
/// <param name="sourceId">数据源</param>
|
|
|
|
|
/// <param name="tableId">表</param>
|
|
|
|
|
/// <returns>列</returns>
|
|
|
|
|
public HDP_Column[] DbGetColumns(HDP_Source source, string tableName)
|
|
|
|
|
public HDP_Column[] DbGetColumns(string sourceId, string tableId)
|
|
|
|
|
{
|
|
|
|
|
var source = GetSource(sourceId);
|
|
|
|
|
var table = GetTable(tableId);
|
|
|
|
|
|
|
|
|
|
using (MySqlConnection _connection = new MySqlConnection(source.GetConnectString()))
|
|
|
|
|
{
|
|
|
|
|
var _result = new List<HDP_Column>();
|
|
|
|
@ -942,7 +1136,7 @@ namespace ZKLT.Hadoop
|
|
|
|
|
StringBuilder _command = new StringBuilder();
|
|
|
|
|
_command.AppendLine($@"SELECT `COLUMN_NAME` AS `Key`,`DATA_TYPE` AS `DataType`,`COLUMN_COMMENT` AS `Description` FROM INFORMATION_SCHEMA.COLUMNS
|
|
|
|
|
WHERE `TABLE_SCHEMA`=@SourceKey AND `TABLE_NAME`=@TableKey");
|
|
|
|
|
_result.AddRange(_connection.Query<HDP_Column>(_command.ToString(), new { SourceKey = source.Key, TableKey = tableName }));
|
|
|
|
|
_result.AddRange(_connection.Query<HDP_Column>(_command.ToString(), new { SourceKey = source.Key, TableKey = table.Key }));
|
|
|
|
|
_connection.Close();
|
|
|
|
|
return _result.ToArray();
|
|
|
|
|
}
|
|
|
|
|