public override IParamBuilder GetCondition(IFieldInfo field, string fieldValue) { if (IsEqual) { return(SqlParamBuilder.CreateParamBuilderWithOr( SqlParamBuilder.CreateEqualSql(Context, fField1, fieldValue), SqlParamBuilder.CreateEqualSql(Context, fField2, fieldValue))); } else { if (WordSplit) { string[] values = fieldValue.Split(' '); List <IParamBuilder> items = new List <IParamBuilder>(values.Length); int index = 0; foreach (var value in values) { string newValue = value.Trim(); if (!string.IsNullOrEmpty(newValue)) { ++index; IParamBuilder builder = GetLikeParamBuilder(newValue, index); items.Add(builder); } } return(ParamBuilder.CreateParamBuilder(items)); } else { return(GetLikeParamBuilder(fieldValue)); } } }
protected virtual TabConditionCount DoTabCountAction(IInputData input) { TabConditionCount result = new TabConditionCount(); if (TabSheets != null && TabSheets.Count > 0) { ParamBuilderContainer condition = CreateListCondition(input); string sql = string.Format(ObjectUtil.SysCulture, "SELECT COUNT(*) FROM {0}", GetTableName(Context)); string queryCon = input.QueryString[CONDITION_HEADER_NAME]; if (!string.IsNullOrEmpty(queryCon)) { queryCon = Uri.UnescapeDataString(queryCon); QueryCondition queryCondition = QueryCondition.FromEncodeString(queryCon); condition.Add(queryCondition.Builder); } foreach (var tabItem in TabSheets) { IParamBuilder builder = condition.IsEmpty ? tabItem.ParamBuilder : ParamBuilder.CreateParamBuilder(condition, tabItem.ParamBuilder); int count = DbUtil.ExecuteScalar(sql, Context, builder).Value <int>(); result.Add(tabItem.Id, count); } } return(result); }
public IParamBuilder CreateFixCondition() { var builder = ParamBuilder.CreateParamBuilder(CreateFakeDeleteBuilder(), CreateFilterBuilder()); return(builder); }
private void InternalSelect(IParamBuilder builder, string orderBy) { builder = ParamBuilder.CreateParamBuilder(builder, CreateFixCondition()); StringBuilder sqlBuilder = new StringBuilder(); if (builder != null && !string.IsNullOrEmpty(builder.Sql)) { sqlBuilder.Append("WHERE ").Append(builder.Sql); } if (!string.IsNullOrEmpty(orderBy)) { sqlBuilder.Append(" ").Append(orderBy); } string sql = sqlBuilder.ToString(); DbParameterList list = builder == null ? null : builder.Parameters; SqlBuilder.GetSelectCommand(this); IDbCommand command = DataAdapter.SelectCommand; command.CommandText = ReplaceWhereClause(command.CommandText, sql); if (list != null && !list.IsEmpty) { DbUtil.SetCommandParams(command, list.CreateParameters(Context)); } FillDataSet(); }
internal static string GetLayer(TableResolver resolver, DbTreeDefinition tree, string parentId) { TkDbContext context = resolver.Context; IFieldInfo layerField = resolver.GetFieldInfo(tree.LayerField); IParamBuilder fixBuilder = resolver.CreateFixCondition(); string execRootId = tree.ExecuteRootId; if (execRootId == parentId) { string subStringSql = context.ContextConfig.GetFunction("SubString", layerField.FieldName, 1, 3); string sql = string.Format(ObjectUtil.SysCulture, "SELECT MAX({0}) FROM {1}", subStringSql, resolver.TableName); string value = (fixBuilder == null ? DbUtil.ExecuteScalar(sql, context) : DbUtil.ExecuteScalar(sql, context, fixBuilder)).ToString(); if (string.IsNullOrEmpty(value)) { return("000"); } else { return(AddLayer(value)); } } else { try { string sql = string.Format(ObjectUtil.SysCulture, "SELECT {0} FROM {1}", layerField.FieldName, resolver.TableName); IParamBuilder builder = ParamBuilder.CreateParamBuilder(fixBuilder, SqlParamBuilder.CreateEqualSql(context, resolver.GetFieldInfo(tree.IdField), parentId)); string topLayer = DbUtil.ExecuteScalar(sql, context, builder).ToString(); string subStringSql = context.ContextConfig.GetFunction("SubString", layerField.FieldName, topLayer.Length + 1, 3); builder = CreateLayerParamBuilder(context, layerField, topLayer); builder = SqlParamBuilder.CreateParamBuilder(fixBuilder, builder); sql = string.Format(ObjectUtil.SysCulture, "SELECT MAX({0}) FROM {1}", subStringSql, resolver.TableName); string value = DbUtil.ExecuteScalar(sql, context, builder).ToString().Trim(); if (string.IsNullOrEmpty(value)) { DataRow parentRow = resolver.SelectRowWithParam(tree.IdField, parentId); parentRow[tree.LeafField] = 0; resolver.SetCommands(AdapterCommand.Update); return(topLayer + "000"); } else { return(topLayer + AddLayer(value.Substring(value.Length - 3))); } } catch { return(string.Empty); } } }
internal static void SortTree(TableResolver resolver, DbTreeDefinition tree, string id, TreeNodeMoveDirection direct) { TkDebug.AssertArgumentNull(resolver, "resolver", null); TkDebug.AssertArgumentNull(tree, "tree", null); TkDebug.AssertArgumentNullOrEmpty(id, "id", null); IParamBuilder fixBuilder = resolver.CreateFixCondition(); IParamBuilder builder = ParamBuilder.CreateParamBuilder(fixBuilder, SqlParamBuilder.CreateEqualSql(resolver.Context, resolver.GetFieldInfo(tree.IdField), id)); IFieldInfo layerField = resolver.GetFieldInfo(tree.LayerField); string sql = string.Format(ObjectUtil.SysCulture, "SELECT {0} FROM {1}", layerField.FieldName, resolver.TableName); string layer = DbUtil.ExecuteScalar(sql, resolver.Context, builder).ToString(); string parentLayer = layer.Substring(0, layer.Length - 3); resolver.SetCommands(AdapterCommand.Update); builder = SqlParamBuilder.CreateSingleSql(resolver.Context, layerField, "LIKE", parentLayer + "___"); resolver.Select(builder, "ORDER BY " + layerField.FieldName); if (resolver.HostTable == null || resolver.HostTable.Rows.Count == 0) { return; } int rowNum = GetRowNum(resolver.HostTable, tree.IdField, id); if (rowNum == -1) { return; } //根据移动方向,执行不同操作 switch (direct) { case TreeNodeMoveDirection.Up: if (rowNum == 0) //已经最前,不能向上移动 { return; } SwapLayer(resolver, tree, rowNum, rowNum - 1); break; case TreeNodeMoveDirection.Down: if (rowNum == resolver.HostTable.Rows.Count - 1) //已经最后,不能向下移动 { return; } SwapLayer(resolver, tree, rowNum, rowNum + 1); break; } }
public void SelectWithKeys(params object[] values) { TkDebug.AssertEnumerableArgumentNull(values, "values", this); TkDebug.Assert(KeyCount == values.Length, string.Format(ObjectUtil.SysCulture, "参数values的个数和表的主键字段个数不匹配,主键的个数为{0},而values的个数为{1}", KeyCount, values.Length), this); IParamBuilder[] builders = new IParamBuilder[KeyCount]; for (int i = 0; i < KeyCount; ++i) { builders[i] = SqlParamBuilder.CreateEqualSql(Context, fKeyFieldArray[i], values[i]); } Select(ParamBuilder.CreateParamBuilder(builders)); }
public void SelectWithParam(string filterSql, string orderBy, string field, object value) { TkDebug.AssertArgumentNullOrEmpty(field, "field", this); TkDebug.AssertArgumentNull(value, "value", this); IParamBuilder builder = SqlParamBuilder.CreateEqualSql(Context, GetFieldInfo(field), value); if (!string.IsNullOrEmpty(filterSql)) { builder = ParamBuilder.CreateParamBuilder(builder, ParamBuilder.CreateSql(filterSql)); } Select(builder, orderBy); }
internal static void MoveTree(TableResolver resolver, DbTreeDefinition tree, string sourceId, string destId) { TkDebug.AssertArgumentNull(resolver, "resolver", null); TkDebug.AssertArgumentNull(tree, "tree", null); TkDebug.AssertArgumentNullOrEmpty(sourceId, "sourceId", null); TkDebug.AssertArgumentNullOrEmpty(destId, "destId", null); IFieldInfo layerField = resolver.GetFieldInfo(tree.LayerField); string sql = string.Format(ObjectUtil.SysCulture, "SELECT {0} FROM {1}", layerField.FieldName, resolver.TableName); IParamBuilder builder = ParamBuilder.CreateParamBuilder(resolver.CreateFixCondition(), SqlParamBuilder.CreateEqualSql(resolver.Context, resolver.GetFieldInfo(tree.IdField), destId)); string destLayer = DbUtil.ExecuteScalar(sql, resolver.Context, builder).ToString(); DataRow srcRow = resolver.SelectRowWithParam(tree.IdField, sourceId); if (destId == srcRow[tree.ParentIdField].ToString()) { //throw new InvalidMoveException(); } string oldLayer = srcRow[tree.LayerField].ToString(); if (destLayer.StartsWith(oldLayer, StringComparison.Ordinal)) { //throw new InvalidMoveException(); } resolver.SetCommands(AdapterCommand.Update); string newLayer = GetLayer(resolver, tree, destId); srcRow[tree.LayerField] = newLayer; DataTable table = resolver.HostTable; int currentCount = table.Rows.Count; builder = CreateLayerParamBuilder(resolver.Context, layerField, oldLayer); resolver.Select(builder); for (int i = currentCount; i < table.Rows.Count; ++i) { DataRow row = table.Rows[i]; row[tree.LayerField] = row[tree.LayerField].ToString().Replace( oldLayer, newLayer); } SetParentLeaf(resolver, tree, srcRow[tree.ParentIdField].ToString()); srcRow[tree.ParentIdField] = destId; }
protected override void FillUpdateTables(TableResolver resolver, IInputData input) { if (SupportData) { var fieldInfo = resolver.GetFieldInfo(ParentKey); ListDataRightEventArgs e = new ListDataRightEventArgs(Context, BaseGlobalVariable.Current.UserInfo, resolver); var builder = DataRight.GetListSql(e); builder = ParamBuilder.CreateParamBuilder( SqlParamBuilder.CreateEqualSql(Context, fieldInfo, fParentKey), builder); resolver.Select(builder); } else { resolver.SelectWithParam(ParentKey, fParentKey); } }
private IParamBuilder GetCustomParamBuilder(IParamBuilder builder) { IParamBuilder result = builder; if (DataRight != null) { TkDebug.ThrowIfNoGlobalVariable(); IUserInfo userInfo = BaseGlobalVariable.Current.UserInfo; IParamBuilder dataRight = DataRight.GetListSql( new ListDataRightEventArgs(fSelector.Context, userInfo, fSelector)); result = ParamBuilder.CreateParamBuilder(result, dataRight); } if (CustomCondition != null) { result = ParamBuilder.CreateParamBuilder(result, CustomCondition); } return(result); }
public IParamBuilder CreateParamBuilder(string filterSql, string[] fields, params object[] values) { TkDebug.AssertEnumerableArgumentNullOrEmpty(fields, "fields", this); TkDebug.AssertEnumerableArgumentNull(values, "values", this); TkDebug.Assert(fields.Length == values.Length, string.Format(ObjectUtil.SysCulture, "参数fields和values的个数不匹配,fields的个数为{0},而values的个数为{1}", fields.Length, values.Length), this); List <IParamBuilder> list = new List <IParamBuilder>(fields.Length + 1); for (int i = 0; i < fields.Length; i++) { IParamBuilder builder = SqlParamBuilder.CreateEqualSql(Context, GetFieldInfo(fields[i]), values[i]); list.Add(builder); } if (!string.IsNullOrEmpty(filterSql)) { list.Add(ParamBuilder.CreateSql(filterSql)); } return(ParamBuilder.CreateParamBuilder(list)); }
public IParamBuilder CreateDetailParamBuilder(TableResolver masterResolver, TableResolver detailResolver, IInputData input) { TkDebug.AssertNotNull(masterResolver, "masterResolver", this); TkDebug.AssertNotNull(detailResolver, "detailResolver", this); TkDebug.AssertNotNull(input, "input", this); string[] keyArray = Array.ConvertAll(masterResolver.GetKeyFieldArray(), field => field.NickName); if (ObjectUtil.ArrayEqual(keyArray, fMasterFields)) { if (fDetailFields.Length == 1) { if (fManyToMany == null) { return(SqlParamBuilder.CreateEqualSql(detailResolver.Context, detailResolver.GetFieldInfo(fDetailFields[0]), input.QueryString[fMasterFields[0]])); } else { return(GetManyToManyParamBuilder(detailResolver, input.QueryString[fMasterFields[0]])); } } else { if (fManyToMany == null) { IParamBuilder[] builders = new IParamBuilder[fDetailFields.Length]; for (int i = 0; i < fDetailFields.Length; ++i) { builders[i] = SqlParamBuilder.CreateEqualSql(detailResolver.Context, detailResolver.GetFieldInfo(fDetailFields[i]), input.QueryString[fMasterFields[i]]); } return(ParamBuilder.CreateParamBuilder(builders)); } else { return(ThrowErrorManyToManyMode()); } } } else { DataRow row = masterResolver.Query(input.QueryString); if (fDetailFields.Length == 1) { if (fManyToMany == null) { return(SqlParamBuilder.CreateEqualSql(detailResolver.Context, detailResolver.GetFieldInfo(fDetailFields[0]), row[fMasterFields[0]])); } else { return(GetManyToManyParamBuilder(detailResolver, row[fMasterFields[0]])); } } else { if (fManyToMany == null) { IParamBuilder[] builders = new IParamBuilder[fDetailFields.Length]; for (int i = 0; i < fDetailFields.Length; ++i) { builders[i] = SqlParamBuilder.CreateEqualSql(detailResolver.Context, detailResolver.GetFieldInfo(fDetailFields[i]), row[fMasterFields[i]]); } return(ParamBuilder.CreateParamBuilder(builders)); } else { return(ThrowErrorManyToManyMode()); } } } }