/// <summary>
        /// Replace parameters with requested parameter format
        /// </summary>
        /// <param name="userQuery">SQL Query with SAP parameters</param>
        /// <param name="parameterFormat">Parameter format</param>
        /// <returns>SQL Query with requested parameter format</returns>
        public static string ReturnParameterStyle(string userQuery, ParameterFormat parameterFormat)
        {
            switch (parameterFormat)
            {
            case ParameterFormat.Database:
            case ParameterFormat.Sql:
                if (SboApp.Company.DbServerType == BoDataServerTypes.dst_HANADB)
                {
                    userQuery = Regex.Replace(userQuery, @"'?\[%([0-9])\]'?", ":p$1");
                }
                else
                {
                    userQuery = Regex.Replace(userQuery, @"'?\[%([0-9])\]'?", "@p$1");
                }

                break;

            case ParameterFormat.String:
                userQuery = Regex.Replace(userQuery, @"'\[%([0-9])\]'", "'{$1}'");
                userQuery = Regex.Replace(userQuery, @"\[%([0-9])\]", "{$1}");
                break;
            }

            return(userQuery);
        }
Пример #2
0
        /// <summary>
        /// Replace parameters with requested parameter format
        /// </summary>
        /// <param name="userQuery">SQL Query with SAP parameters</param>
        /// <param name="parameterFormat">Parameter format</param>
        /// <returns>SQL Query with requested parameter format</returns>
        public static string ReturnParameterStyle(string userQuery, ParameterFormat parameterFormat)
        {
            switch (parameterFormat)
            {
            case ParameterFormat.Database:
#pragma warning disable CS0618 // Type or member is obsolete
            case ParameterFormat.Sql:
#pragma warning restore CS0618 // Type or member is obsolete
                if (SboApp.Company.DbServerType == BoDataServerTypes.dst_HANADB)
                {
                    userQuery = Regex.Replace(userQuery, @"'?\[%([0-9])\]'?", ":p$1");
                }
                else
                {
                    userQuery = Regex.Replace(userQuery, @"'?\[%([0-9])\]'?", "@p$1");
                }

                break;

            case ParameterFormat.String:
                userQuery = Regex.Replace(userQuery, @"'\[%([0-9])\]'", "'{$1}'");
                userQuery = Regex.Replace(userQuery, @"\[%([0-9])\]", "{$1}");
                break;
            }

            return(userQuery);
        }
Пример #3
0
 /// <summary>
 /// Append a constant parameter encoded byte in either short or long format. Note that if format is long parameter constant type will be a value
 /// </summary>
 /// <param name="value">Value to append</param>
 /// <param name="format">Use either short or long format</param>
 public void Append(sbyte value, ParameterFormat format)
 {
     if (format == ParameterFormat.Short)
     {
         byte b = 0x00;
         if (value < 0)
         {
             if (value < ShortValueMin)
             {
                 value = ShortValueMin;
             }
             b = (byte)((byte)format | (byte)ParameterType.Constant | (byte)(value & ((byte)0x1f)));
             b = (byte)((byte)ShortSign.Negative | b);
         }
         else
         {
             if (value > ShortValueMax)
             {
                 value = ShortValueMax;
             }
             b = (byte)((byte)format | (byte)ParameterType.Constant | (byte)(value & ((byte)0x1f)));
             b = (byte)((byte)ShortSign.Positive | b);
         }
         Append(b);
     }
     else
     {
         byte b = (byte)((byte)format | (byte)ParameterType.Constant | (byte)ConstantParameterType.Value | (byte)FollowType.OneByte);
         Append(b);
         Append(value);
     }
 }
 public static string GetOrCreateUserQuery(
     this Company company,
     string userQueryName,
     string userQueryDefaultQuery,
     ParameterFormat parameterFormat = ParameterFormat.Database,
     string queryCategoryName        = null)
 {
     return(GetOrCreateUserQuery(company, userQueryName, () => userQueryDefaultQuery, parameterFormat, queryCategoryName));
 }
 private static string FormatThis(ParameterFormat format, TypeReference thisType)
 {
     if (format == ParameterFormat.WithNameCastThis)
     {
         return($"({Naming.ForVariable(thisType)}){Naming.ThisParameterName}");
     }
     if (format == ParameterFormat.WithNameUnboxThis)
     {
         return($"({Naming.ForVariable(thisType)})UnBox({Naming.ThisParameterName})");
     }
     return(FormatParameterName(thisType, Naming.ThisParameterName, format));
 }
        private Stream GetResponseStream(ParameterFormat format, string kind, string method, Stream stream)
        {
            var request = WebOperationContext.Current.IncomingRequest;
            var response = WebOperationContext.Current.OutgoingResponse;

            NameValueCollection nvs = null;
            if (stream == null)
            {
                nvs = request.UriTemplateMatch.QueryParameters;
            }
            else
            {
                //接收流内部数据
                var sr = new StreamReader(stream, Encoding.UTF8);
                string streamValue = sr.ReadToEnd();

                //转换成NameValueCollection
                nvs = ConvertCollection(streamValue);
            }

            string result = GetResponseString(format, kind, method, nvs);
            if (string.IsNullOrEmpty(result)) return new MemoryStream();

            //转换成buffer
            var buffer = Encoding.UTF8.GetBytes(result);

            if (request.Method.ToUpper() == "GET" && response.StatusCode == HttpStatusCode.OK)
            {
                //处理ETag功能
                string etagToken = MD5.HexHash(buffer);
                response.ETag = etagToken;

                var IfNoneMatch = request.Headers["If-None-Match"];
                if (IfNoneMatch != null && IfNoneMatch == etagToken)
                {
                    response.StatusCode = HttpStatusCode.NotModified;
                    //request.IfModifiedSince.HasValue ? request.IfModifiedSince.Value : 
                    var IfModifiedSince = request.Headers["If-Modified-Since"];
                    response.LastModified = IfModifiedSince == null ? DateTime.Now : Convert.ToDateTime(IfModifiedSince);
                    return new MemoryStream();
                }
                else
                {
                    response.LastModified = DateTime.Now;
                }
            }

            return new MemoryStream(buffer);
        }
Пример #7
0
        /// <summary>
        /// Replace parameters with requested parameterformat
        /// </summary>
        /// <param name="userQuery">SQL Query with SAP parmeters</param>
        /// <param name="parameterFormat"></param>
        /// <returns>SQL Query with requsted parameter format</returns>
        public static string ReturnParameterStyle(string userQuery, ParameterFormat parameterFormat)
        {
            switch (parameterFormat)
            {
            case ParameterFormat.Sql:
                userQuery = Regex.Replace(userQuery, @"'?\[%([0-9])\]'?", "@p$1");
                break;

            case ParameterFormat.String:
                userQuery = Regex.Replace(userQuery, @"'\[%([0-9])\]'", "'{$1}'");
                userQuery = Regex.Replace(userQuery, @"\[%([0-9])\]", "{$1}");
                break;
            }
            return(userQuery);
        }
 /// <summary>
 /// 创建序列化
 /// </summary>
 /// <param name="format"></param>
 /// <returns></returns>
 public static ISerializer Create(ParameterFormat format)
 {
     switch (format)
     {
         case ParameterFormat.Xml:
             return new XmlSerializer();
         case ParameterFormat.Text:
         case ParameterFormat.Html:
             return new TextSerializer();
         case ParameterFormat.Json:
             return new JsonSerializer();
         case ParameterFormat.Jsonp:
             return new JsonpSerializer();
         default:
             return new JsonSerializer();
     }
 }
Пример #9
0
 /// <summary>
 /// Append a constant parameter encoded byte in either short or long format. Note that if format is long parameter constant type will be a value
 /// </summary>
 /// <param name="value">Value to append</param>
 /// <param name="format">Use either short or long format</param>
 public void Append(byte value, ParameterFormat format)
 {
     if (format == ParameterFormat.Short)
     {
         if (value > (byte)ShortValueMax)
         {
             value = (byte)ShortValueMax;
         }
         byte b = (byte)((byte)format | (byte)ParameterType.Constant | (byte)(value & ((byte)0x1f)) | (byte)ShortSign.Positive);
         Append(b);
     }
     else
     {
         byte b = (byte)((byte)format | (byte)ParameterType.Constant | (byte)ConstantParameterType.Value | (byte)FollowType.OneByte);
         Append(b);
         Append(value);
     }
 }
Пример #10
0
        /// <summary>
        /// Outputs the SQL script as a string
        /// </summary>
        /// <param name="outputParameterDeclarations">
        /// If set to true will place the parameter DECLARE statements on top of the script
        /// and try to escape values where needed.
        /// </param>
        /// <returns>
        /// SQL script as a string
        /// </returns>
        public string ToSqlString(bool outputParameterDeclarations) {
            if (outputParameterDeclarations && this.HasParameters) {
                var tsb = new StringBuilder();

                foreach (SqlParameter sqlParameter in this.Parameters) {
                    ParameterFormat paramInfo = ParameterFormatter.Format(sqlParameter);
                    tsb.AppendFormat(
                        "DECLARE {0} AS {1} = {2};",
                        sqlParameter.ParameterName,
                        paramInfo.SqlServerDbEngineTypeString,
                        paramInfo.PrintableParameterValue);
                    tsb.AppendLine();
                }

                tsb.AppendLine(this.sb.ToString());
                return tsb.ToString();
            }

            return this.sb.ToString();
        }
        private static string FormatHiddenMethodArgument(ParameterFormat format)
        {
            switch (format)
            {
            case ParameterFormat.WithTypeAndName:
            case ParameterFormat.WithTypeAndNameNoThis:
            case ParameterFormat.WithTypeAndNameThisObject:
                return("const MethodInfo* method");

            case ParameterFormat.WithType:
            case ParameterFormat.WithTypeNoThis:
            case ParameterFormat.WithTypeThisObject:
                return("const MethodInfo*");

            case ParameterFormat.WithName:
            case ParameterFormat.WithNameCastThis:
            case ParameterFormat.WithNameUnboxThis:
                return("method");
            }
            throw new ArgumentOutOfRangeException("format");
        }
Пример #12
0
        /// <summary>
        /// 创建序列化
        /// </summary>
        /// <param name="format"></param>
        /// <returns></returns>
        public static ISerializer Create(ParameterFormat format)
        {
            switch (format)
            {
            case ParameterFormat.Xml:
                return(new XmlSerializer());

            case ParameterFormat.Text:
            case ParameterFormat.Html:
                return(new TextSerializer());

            case ParameterFormat.Json:
                return(new JsonSerializer());

            case ParameterFormat.Jsonp:
                return(new JsonpSerializer());

            default:
                return(new JsonSerializer());
            }
        }
        /// <summary>
        /// Get or create User Query
        /// </summary>
        /// <param name="company">Company Object</param>
        /// <param name="userQueryName">User Query Name</param>
        /// <param name="userQueryDefaultQueryFunc">Default query</param>
        /// <param name="parameterFormat">Define parameter format [%0]/(@p0/:p0)/{0}</param>
        /// <param name="queryCategoryName">Add query in category with this name</param>
        /// <returns>SQL Query</returns>
        public static string GetOrCreateUserQuery(this Company company, string userQueryName, Func <string> userQueryDefaultQueryFunc, ParameterFormat parameterFormat = ParameterFormat.Database, string queryCategoryName = null)
        {
            string userQuery;

            using (var userQueryObject = new SboRecordsetQuery <UserQueries>(FrameworkQueries.Instance.GetOrCreateUserQueryQuery(userQueryName), BoObjectTypes.oUserQueries))
            {
                var queryCategoryCode = GetOrCreateQueryCategory(queryCategoryName);
                if (userQueryObject.Count == 0)
                {
                    userQuery = userQueryDefaultQueryFunc.Invoke();
                    userQueryObject.BusinessObject.QueryDescription = userQueryName;
                    userQueryObject.BusinessObject.Query            = userQuery;
                    userQueryObject.BusinessObject.QueryCategory    = queryCategoryCode;
                    var response = userQueryObject.BusinessObject.Add();

                    ErrorHelper.HandleErrorWithException(response, $"Could not create User Query '{userQueryName}'");
                }
                else
                {
                    var row = userQueryObject.Result.First();
                    userQuery = row.Query;
                    if (queryCategoryCode > 0 && userQueryObject.BusinessObject.QueryCategory != queryCategoryCode)
                    {
                        userQueryObject.BusinessObject.QueryCategory = queryCategoryCode;
                        var response = userQueryObject.BusinessObject.Update();
                        ErrorHelper.HandleErrorWithException(response, $"Could not update User Query '{userQueryName}' with Query Category {queryCategoryCode}");
                    }
                }
            }

            userQuery = ReturnParameterStyle(userQuery, parameterFormat);

            return(userQuery);
        }
Пример #14
0
        /// <summary>
        /// Get or create User Query
        /// </summary>
        /// <param name="company">Company Object</param>
        /// <param name="userQueryName">User Query Name</param>
        /// <param name="userQueryDefaultQuery">Query</param>
        /// <param name="parameterFormat">Define parameter format [%0]/@p0/{0}</param>
        /// <returns>SQL</returns>
        public static string GetOrCreateUserQuery(this Company company, string userQueryName, string userQueryDefaultQuery, ParameterFormat parameterFormat = ParameterFormat.Sbo)
        {
            var userQuery = userQueryDefaultQuery;

            using (var userQueryObject = new SboRecordsetQuery <UserQueries>(
                       $"SELECT [IntrnalKey] FROM [OUQR] WHERE [QName] = '{userQueryName}'", BoObjectTypes.oUserQueries))
            {
                if (userQueryObject.Count == 0)
                {
                    userQueryObject.BusinessObject.QueryDescription = userQueryName;
                    userQueryObject.BusinessObject.Query            = userQueryDefaultQuery;
                    userQueryObject.BusinessObject.QueryCategory    = -1;
                    var response = userQueryObject.BusinessObject.Add();

                    ErrorHelper.HandleErrorWithException(response, $"Could not create User Query '{userQueryName}'");
                }
                else
                {
                    userQuery = userQueryObject.Result.First().Query;
                }
            }

            userQuery = ReturnParameterStyle(userQuery, parameterFormat);

            return(userQuery);
        }
        public static string FormatParameters(MethodReference method, ParameterFormat format = 0, bool forceNoStaticThis = false, bool includeHiddenMethodInfo = false)
        {
            List <string> elements = ParametersFor(method, format, forceNoStaticThis, includeHiddenMethodInfo, false).ToList <string>();

            return((elements.Count != 0) ? elements.AggregateWithComma() : string.Empty);
        }
        private static string FormatParameterName(TypeReference parameterType, string parameterName, ParameterFormat format)
        {
            string str = string.Empty;

            if ((((format == ParameterFormat.WithTypeAndName) || (format == ParameterFormat.WithTypeAndNameNoThis)) || ((format == ParameterFormat.WithType) || (format == ParameterFormat.WithTypeNoThis))) || ((format == ParameterFormat.WithTypeAndNameThisObject) || (format == ParameterFormat.WithTypeThisObject)))
            {
                str = str + Naming.ForVariable(parameterType);
            }
            if (((format == ParameterFormat.WithTypeAndName) || (format == ParameterFormat.WithTypeAndNameNoThis)) || (format == ParameterFormat.WithTypeAndNameThisObject))
            {
                str = str + " ";
            }
            if ((((format != ParameterFormat.WithTypeAndName) && (format != ParameterFormat.WithTypeAndNameNoThis)) && ((format != ParameterFormat.WithName) && (format != ParameterFormat.WithTypeAndNameThisObject))) && (((format != ParameterFormat.WithNameNoThis) && (format != ParameterFormat.WithNameCastThis)) && (format != ParameterFormat.WithNameUnboxThis)))
            {
                return(str);
            }
            return(str + parameterName);
        }
 public static IEnumerable <string> ParametersFor(MethodReference methodDefinition, ParameterFormat format = 0, bool forceNoStaticThis = false, bool includeHiddenMethodInfo = false, bool useVoidPointerForThis = false) =>
        public static string GetMethodPointerForVTable(MethodReference method)
        {
            ParameterFormat parameterFormat = (!method.DeclaringType.IsValueType || !method.HasThis) ? ParameterFormat.WithType : ParameterFormat.WithTypeThisObject;

            return(GetMethodPointer(method, parameterFormat));
        }
 public static string GetMethodPointer(MethodReference method, ParameterFormat parameterFormat)
 {
     Unity.IL2CPP.ILPreProcessor.TypeResolver resolver = new Unity.IL2CPP.ILPreProcessor.TypeResolver(method.DeclaringType as GenericInstanceType, method as GenericInstanceMethod);
     return(GetMethodSignature("(*)", Naming.ForVariable(resolver.ResolveReturnType(method)), FormatParameters(method, parameterFormat, false, true), string.Empty, ""));
 }
Пример #20
0
 public SfxrParams(Stream s, ParameterFormat format)
 {
     FromStream(s, format);
 }
		/// <summary>
		/// Append a constant parameter encoded byte in either short or long format. Note that if format is long parameter constant type will be a value
		/// </summary>
		/// <param name="value">Value to append</param>
		/// <param name="format">Use either short or long format</param>
		public void Append (byte value, ParameterFormat format)
		{
			if(format == ParameterFormat.Short){
				if(value > (byte) ShortValueMax){
					value = (byte) ShortValueMax;
				}
				byte b  = (byte)((byte)format | (byte) ParameterType.Constant | (byte)(value & ((byte)0x1f)) | (byte)ShortSign.Positive);
				Append (b); 
			}
			else{
				byte b  = (byte)((byte)format | (byte) ParameterType.Constant | (byte) ConstantParameterType.Value | (byte)FollowType.OneByte);
				Append (b);
				Append (value);	
			}
		}
        private string GetResponseString(ParameterFormat format, string kind, string method, NameValueCollection parameters)
        {
            var request = WebOperationContext.Current.IncomingRequest;
            var response = WebOperationContext.Current.OutgoingResponse;

            if (format == ParameterFormat.Json)
                response.ContentType = "application/json;charset=utf-8";
            else if (format == ParameterFormat.Xml)
                response.ContentType = "text/xml;charset=utf-8";
            else if (format == ParameterFormat.Text)
                response.ContentType = "text/plain;charset=utf-8";
            else if (format == ParameterFormat.Html)
                response.ContentType = "text/html;charset=utf-8";

            //从缓存读取
            object result = null;
            if (Context != null && !Context.Contains(kind, method))
            {
                response.StatusCode = HttpStatusCode.NotFound;
                result = new RESTfulResult { Code = (int)response.StatusCode, Message = "service [" + kind + "." + method + "] not found." };
            }
            else
            {

                //进行认证处理
                RESTfulResult authResult = new RESTfulResult { Code = (int)HttpStatusCode.OK };

                //进行认证处理
                if (Context != null && Context.IsAuthorized(kind, method))
                {
                    authResult = AuthorizeRequest();
                }

                //认证成功
                if (authResult.Code == (int)HttpStatusCode.OK)
                {
                    try
                    {
                        Type retType;
                        result = Context.Invoke(kind, method, parameters, out retType);

                        //设置返回成功
                        response.StatusCode = HttpStatusCode.OK;

                        //xml方式需要进行数据包装
                        if (format == ParameterFormat.Xml)
                        {
                            //如果是值类型,则以对象方式返回
                            if (retType.IsValueType || retType == typeof(string))
                            {
                                result = new RESTfulResponse { Value = result };
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        RESTfulResult ret;
                        var errorMessage = GetErrorMessage(ex, kind, method, parameters, out ret);

                        result = ret;

                        //重新定义一个异常
                        var error = new Exception(errorMessage, ex);

                        //记录错误日志
                        SimpleLog.Instance.WriteLogForDir("RESTful\\" + kind, error);
                    }
                    finally
                    {
                        //使用完后清理上下文
                        AuthorizeContext.Current = null;
                    }
                }
                else
                {
                    result = authResult;
                }
            }

            ISerializer serializer = SerializerFactory.Create(format);
            return serializer.Serialize(result);
        }
		/// <summary>
		/// Append a constant parameter encoded byte in either short or long format. Note that if format is long parameter constant type will be a value
		/// </summary>
		/// <param name="value">Value to append</param>
		/// <param name="format">Use either short or long format</param>
		public void Append(sbyte value, ParameterFormat format)
		{
			if(format == ParameterFormat.Short){
				byte b = 0x00;
				if(value <0 ){
					if(value < ShortValueMin){
						value = ShortValueMin;
					}
					b  = (byte)((byte)format | (byte) ParameterType.Constant | (byte)(value & ((byte)0x1f)));
					b = (byte)((byte)ShortSign.Negative | b);
				}
				else{
					if(value > ShortValueMax){
						value = ShortValueMax;
					}
					b  = (byte)((byte)format | (byte) ParameterType.Constant | (byte)(value & ((byte)0x1f)));
					b = (byte)((byte)ShortSign.Positive | b);
				}
				Append (b); 

			}
			else{
				byte b  = (byte)((byte)format | (byte) ParameterType.Constant | (byte) ConstantParameterType.Value | (byte)FollowType.OneByte);
				Append (b);
				Append (value);	
			}
		}
Пример #24
0
        public void FromStream(Stream stream, ParameterFormat format)
        {
            if (format == ParameterFormat.String)
            {
                using (var sr = new StreamReader(stream))
                {
                    var data = sr.ReadToEnd();
                    FromString(data);
                }
            }
            else if (format == ParameterFormat.Binary)
            {
                using (var br = new BinaryReader(stream))
                {
                    var version = br.ReadInt32();

                    if (version != 102 && version != 101 && version != 100)
                    {
                        throw new FormatException($"Unsupported SFXR file version '{version}'.");
                    }

                    WaveShape = (WaveShape)br.ReadInt32();

                    MasterVolume = 0.5f;

                    if (version == 102)
                    {
                        MasterVolume = br.ReadSingle();
                    }

                    StartFrequency = br.ReadSingle();
                    MinFrequency   = br.ReadSingle();
                    Slide          = br.ReadSingle();

                    if (version >= 101)
                    {
                        DeltaSlide = br.ReadSingle();
                    }

                    SquareDuty = br.ReadSingle();
                    DutySweep  = br.ReadSingle();

                    VibratoDepth = br.ReadSingle();
                    VibratoSpeed = br.ReadSingle();

                    // p_vib_delay
                    br.ReadSingle();

                    AttackTime   = br.ReadSingle();
                    SustainTime  = br.ReadSingle();
                    DecayTime    = br.ReadSingle();
                    SustainPunch = br.ReadSingle();

                    // filter_on
                    br.ReadBoolean();

                    LowPassResonance   = br.ReadSingle();
                    LowPassCutoff      = br.ReadSingle();
                    LowPassCutoffSweep = br.ReadSingle();

                    HighPassCutoff      = br.ReadSingle();
                    HighPassCutoffSweep = br.ReadSingle();

                    PhaserOffset = br.ReadSingle();
                    PhaserSweep  = br.ReadSingle();

                    if (version >= 101)
                    {
                        ChangeSpeed  = br.ReadSingle();
                        ChangeAmount = br.ReadSingle();
                    }
                }
            }
            else
            {
                throw new FormatException("Unsupported parameter format provided.");
            }
        }