/// <summary> /// Get database execute command /// </summary> /// <param name="command">Command</param> /// <returns>Return database execute command</returns> DatabaseExecuteCommand GetExecuteDbCommand(IQueryTranslator queryTranslator, RdbCommand command) { DatabaseExecuteCommand GetTextCommand() { return(new DatabaseExecuteCommand() { CommandText = command.CommandText, Parameters = SqlServerFactory.ParseParameters(command.Parameters), CommandType = SqlServerFactory.GetCommandType(command), ForceReturnValue = command.MustReturnValueOnSuccess, HasPreScript = true }); } if (command.ExecuteMode == CommandExecuteMode.CommandText) { return(GetTextCommand()); } DatabaseExecuteCommand executeCommand; switch (command.OperateType) { case OperateType.Insert: executeCommand = GetInsertExecuteDbCommand(queryTranslator, command); break; case OperateType.Update: executeCommand = GetUpdateExecuteDbCommand(queryTranslator, command); break; case OperateType.Delete: executeCommand = GetDeleteExecuteDbCommand(queryTranslator, command); break; default: executeCommand = GetTextCommand(); break; } return(executeCommand); }
/// <summary> /// Get delete execute command /// </summary> /// <param name="translator">Translator</param> /// <param name="command">Command</param> /// <returns>Return delete execute command</returns> DatabaseExecuteCommand GetDeleteExecuteDbCommand(IQueryTranslator translator, RdbCommand command) { #region query translate var tranResult = translator.Translate(command.Query); string conditionString = string.Empty; if (!string.IsNullOrWhiteSpace(tranResult.ConditionString)) { conditionString = $"WHERE {tranResult.ConditionString}"; } string preScript = tranResult.PreScript; string joinScript = tranResult.AllowJoin ? tranResult.JoinScript : string.Empty; #endregion #region script string objectName = DataManager.GetEntityObjectName(DatabaseServerType.SQLServer, command.EntityType, command.ObjectName); string cmdText = $"{preScript}DELETE {translator.ObjectPetName} FROM {SqlServerFactory.WrapKeyword(objectName)} AS {translator.ObjectPetName}{joinScript} {conditionString};"; #endregion #region parameter CommandParameters parameters = SqlServerFactory.ParseParameters(command.Parameters) ?? new CommandParameters(); var queryParameters = SqlServerFactory.ParseParameters(tranResult.Parameters); parameters.Union(queryParameters); #endregion return(new DatabaseExecuteCommand() { CommandText = cmdText, CommandType = SqlServerFactory.GetCommandType(command), ForceReturnValue = command.MustReturnValueOnSuccess, Parameters = parameters, HasPreScript = !string.IsNullOrWhiteSpace(preScript) }); }
/// <summary> /// Get insert execute DbCommand /// </summary> /// <param name="translator">Translator</param> /// <param name="command">Command</param> /// <returns>Return insert execute command</returns> DatabaseExecuteCommand GetInsertExecuteDbCommand(IQueryTranslator translator, RdbCommand command) { string objectName = DataManager.GetEntityObjectName(DatabaseServerType.SQLServer, command.EntityType, command.ObjectName); var fields = DataManager.GetEditFields(DatabaseServerType.SQLServer, command.EntityType); var fieldCount = fields.GetCount(); var insertFormatResult = SqlServerFactory.FormatInsertFields(fieldCount, fields, command.Parameters, translator.ParameterSequence); if (insertFormatResult == null) { return(null); } string cmdText = $"INSERT INTO {SqlServerFactory.WrapKeyword(objectName)} ({string.Join(",", insertFormatResult.Item1)}) VALUES ({string.Join(",", insertFormatResult.Item2)});"; CommandParameters parameters = insertFormatResult.Item3; translator.ParameterSequence += fieldCount; return(new DatabaseExecuteCommand() { CommandText = cmdText, CommandType = SqlServerFactory.GetCommandType(command), ForceReturnValue = command.MustReturnValueOnSuccess, Parameters = parameters }); }
/// <summary> /// Get update execute command /// </summary> /// <param name="translator">Translator</param> /// <param name="command">Command</param> /// <returns>Return update execute command</returns> DatabaseExecuteCommand GetUpdateExecuteDbCommand(IQueryTranslator translator, RdbCommand command) { #region query translate var tranResult = translator.Translate(command.Query); string conditionString = string.Empty; if (!string.IsNullOrWhiteSpace(tranResult.ConditionString)) { conditionString = $"WHERE {tranResult.ConditionString}"; } string preScript = tranResult.PreScript; string joinScript = tranResult.AllowJoin ? tranResult.JoinScript : string.Empty; #endregion #region script CommandParameters parameters = SqlServerFactory.ParseParameters(command.Parameters) ?? new CommandParameters(); string objectName = DataManager.GetEntityObjectName(DatabaseServerType.SQLServer, command.EntityType, command.ObjectName); var fields = SqlServerFactory.GetFields(command.EntityType, command.Fields); int parameterSequence = translator.ParameterSequence; List <string> updateSetArray = new List <string>(); foreach (var field in fields) { var parameterValue = parameters.GetParameterValue(field.PropertyName); var parameterName = field.PropertyName; string newValueExpression = string.Empty; if (parameterValue != null) { parameterSequence++; parameterName = SqlServerFactory.FormatParameterName(parameterName, parameterSequence); parameters.Rename(field.PropertyName, parameterName); if (parameterValue is IModifyValue) { var modifyValue = parameterValue as IModifyValue; parameters.ModifyValue(parameterName, modifyValue.Value); if (parameterValue is CalculateModifyValue) { var calculateModifyValue = parameterValue as CalculateModifyValue; string calChar = SqlServerFactory.GetCalculateChar(calculateModifyValue.Operator); newValueExpression = $"{translator.ObjectPetName}.{SqlServerFactory.WrapKeyword(field.FieldName)}{calChar}{SqlServerFactory.ParameterPrefix}{parameterName}"; } } } if (string.IsNullOrWhiteSpace(newValueExpression)) { newValueExpression = $"{SqlServerFactory.ParameterPrefix}{parameterName}"; } updateSetArray.Add($"{translator.ObjectPetName}.{SqlServerFactory.WrapKeyword(field.FieldName)}={newValueExpression}"); } string cmdText = $"{preScript}UPDATE {translator.ObjectPetName} SET {string.Join(",", updateSetArray)} FROM {SqlServerFactory.WrapKeyword(objectName)} AS {translator.ObjectPetName} {joinScript} {conditionString};"; translator.ParameterSequence = parameterSequence; #endregion #region parameter var queryParameters = SqlServerFactory.ParseParameters(tranResult.Parameters); parameters.Union(queryParameters); #endregion return(new DatabaseExecuteCommand() { CommandText = cmdText, CommandType = SqlServerFactory.GetCommandType(command), ForceReturnValue = command.MustReturnValueOnSuccess, Parameters = parameters, HasPreScript = !string.IsNullOrWhiteSpace(preScript) }); }